
Hosts management. Signed-off-by: Hongliang Wang <hlwang@linux.vnet.ibm.com> --- src/kimchi/model.py | 1 + ui/css/theme-default/host-add.css | 29 +++++++ ui/css/theme-default/host-edit.css | 29 +++++++ ui/css/theme-default/host.css | 56 ++++++++++--- ui/css/theme-default/hosts.css | 24 ++++++ ui/css/theme-default/window.css | 6 +- ui/images/theme-default/host-icon-sprite.png | Bin 1034 -> 1163 bytes ui/js/src/kimchi.api.js | 77 ++++++++++++++++++ ui/js/src/kimchi.grid.js | 2 +- ui/js/src/kimchi.host.js | 4 + ui/js/src/kimchi.host_add_main.js | 62 ++++++++++++++ ui/js/src/kimchi.host_edit_main.js | 62 ++++++++++++++ ui/js/src/kimchi.hosts.js | 116 +++++++++++++++++++++++++++ ui/pages/guest-add.html.tmpl | 2 +- ui/pages/guest-edit.html.tmpl | 2 +- ui/pages/host-add.html.tmpl | 66 +++++++++++++++ ui/pages/host-edit.html.tmpl | 66 +++++++++++++++ ui/pages/hosts.html.tmpl | 41 ++++++++++ ui/pages/i18n.html.tmpl | 7 ++ ui/pages/login-window.html.tmpl | 2 +- ui/pages/report-add.html.tmpl | 2 +- ui/pages/storagepool-add.html.tmpl | 2 +- ui/pages/tabs/host.html.tmpl | 27 ++++++- ui/pages/template-add.html.tmpl | 2 +- ui/pages/template-edit.html.tmpl | 2 +- 25 files changed, 664 insertions(+), 25 deletions(-) create mode 100644 ui/css/theme-default/host-add.css create mode 100644 ui/css/theme-default/host-edit.css create mode 100644 ui/css/theme-default/hosts.css create mode 100644 ui/js/src/kimchi.host_add_main.js create mode 100644 ui/js/src/kimchi.host_edit_main.js create mode 100644 ui/js/src/kimchi.hosts.js create mode 100644 ui/pages/host-add.html.tmpl create mode 100644 ui/pages/host-edit.html.tmpl create mode 100644 ui/pages/hosts.html.tmpl diff --git a/src/kimchi/model.py b/src/kimchi/model.py index a6790b8..e9d5ee4 100644 --- a/src/kimchi/model.py +++ b/src/kimchi/model.py @@ -269,6 +269,7 @@ class Model(object): def _get_host_info(self): res = {} + res['hostname'] = platform.node() with open('/proc/cpuinfo') as f: for line in f.xreadlines(): if "model name" in line: diff --git a/ui/css/theme-default/host-add.css b/ui/css/theme-default/host-add.css new file mode 100644 index 0000000..ed460c8 --- /dev/null +++ b/ui/css/theme-default/host-add.css @@ -0,0 +1,29 @@ +/* + * Project Kimchi + * + * Copyright IBM, Corp. 2013 + * + * Authors: + * Hongliang Wang <hlwang@linux.vnet.ibm.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#host-add-window { + height: 380px; + width: 420px; +} + +#host-add-window .textbox-wrapper input { + box-sizing: border-box; + width: 100%; +} diff --git a/ui/css/theme-default/host-edit.css b/ui/css/theme-default/host-edit.css new file mode 100644 index 0000000..ae88517 --- /dev/null +++ b/ui/css/theme-default/host-edit.css @@ -0,0 +1,29 @@ +/* + * Project Kimchi + * + * Copyright IBM, Corp. 2013 + * + * Authors: + * Hongliang Wang <hlwang@linux.vnet.ibm.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#host-edit-window { + height: 380px; + width: 420px; +} + +#host-edit-window .textbox-wrapper input { + box-sizing: border-box; + width: 100%; +} diff --git a/ui/css/theme-default/host.css b/ui/css/theme-default/host.css index 5e96b37..782758d 100644 --- a/ui/css/theme-default/host.css +++ b/ui/css/theme-default/host.css @@ -3,24 +3,60 @@ margin-bottom: 100px; } -.host-panel .logo-container, .host-panel .info-container, +.host-panel .other-servers-container, .host-panel .info-container, .host-panel .section-label, .host-panel .section-value { display: inline-block; vertical-align: top; } +.host-panel .other-servers-container { + background: #efefef; + margin-top: 16px; + padding: 0 5px 12px; + position: relative; + width: 150px; +} + +.host-panel .other-servers-title { + font-size: 18px; + line-height: 32px; +} + +.host-panel .other-servers-popup-button-container { + position: absolute; + right: 10px; + top: 10px; +} + +.host-panel .other-servers-popup-button { + background: url("../images/theme-default/host-icon-sprite.png") no-repeat left -28px; + border: none; + height: 12px; + width: 12px; +} + +.host-panel .other-servers-list li { + line-height: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.host-panel .other-servers-list a { + color: #888; + text-decoration: none; +} + +.host-panel .other-servers-list a:hover { + text-decoration: underline; +} + .host-panel .section-label { display: inline-block; margin-right: 1em; vertical-align: top; } -.host-panel .logo { - background: url("../images/icon-vm.png") no-repeat left top; - height: 128px; - width: 128px; -} - .host-panel .hostname { text-decoration: underline; } @@ -99,7 +135,7 @@ .host-panel .info-container { padding-top: 16px; - width: 892px; + width: 860px; } .host-panel .section-header { @@ -167,7 +203,7 @@ #container-chart-network-io { border: 1px solid white; box-shadow: 2px 2px 2px gray, 2px -2px 2px gray, -2px -2px 2px gray, -2px 2px 2px gray; - height: 100px; + height: 80px; width: 500px; } @@ -180,7 +216,7 @@ .host-panel #available-reports-grid { border-color: #ddd; height: 400px; - width: 750px; + width: 820px; } .host-panel select#available-reports-list { diff --git a/ui/css/theme-default/hosts.css b/ui/css/theme-default/hosts.css new file mode 100644 index 0000000..ed028e0 --- /dev/null +++ b/ui/css/theme-default/hosts.css @@ -0,0 +1,24 @@ +#hosts-window { + font-size: 12px; + height: 400px; + width: 820px; +} + +#hosts-window #hosts-grid { + border-color: #ddd; + height: 344px; + width: 814px; +} + +#hosts-window .host-id { + width: 30px; +} + +#hosts-window .host-name, +#hosts-window .host-url { + width: 390px; +} + +#hosts-window .content { + margin-bottom: 0; +} diff --git a/ui/css/theme-default/window.css b/ui/css/theme-default/window.css index 0a95dce..130eea5 100644 --- a/ui/css/theme-default/window.css +++ b/ui/css/theme-default/window.css @@ -52,7 +52,7 @@ max-height: 100%; } -.window>header { +.window-header { position: absolute; left: 0; right: 0; @@ -101,12 +101,12 @@ cursor: pointer; } -.window>header>.close:HOVER { +.window-header>.close:HOVER { border: 2px solid #444; color: #444; } -.window>header>.title { +.window-header>.title { font-size: 18px; height: 48px; line-height: 48px; diff --git a/ui/images/theme-default/host-icon-sprite.png b/ui/images/theme-default/host-icon-sprite.png index da1cd3f2562a5905a526446bcc8fc18bea06c734..e1a141168c78724322bce46964c95fa495ed0fc0 100644 GIT binary patch delta 1070 zcmV+}1kwA72#X1j7YZl{1^@s6A6n0fks&b&3>OIuCL1Hx2$5SXfA2{|K~#9!?V3-B z990m;e?3l!$V!4lEl}5k<hb4jJtT)cM`92>2x4Xhy*SB1Z#m@PO;Cg+5{R%FK@Xzj z5Kz1cl8Yv%74ag1QM5G24dN2<^RREB>Fw!%)6+e(+aEN{>sS4%`h8vRRn;35KuM@1 zCX6wVG?sKHTw_Utf2z7C$gWD-EMVfMq}8H2nK2|qk|OFhXd2=q^(C!mh_7eaQj)k$ zNoN3MU6Rg7+H9LRNw*~ZB*`T`Qp?v{BXR3hy|e;x$|EgCp4uc%(g8_-Bvd_~Cfmz1 zbOy!^fVC2``vy@I-2?tk-2So@aWf?FjYRt+;K^|1$u@>Oe-E3~U&G#iD$!n%G^%aM zo8q}UiLT{X-*TewnYNb7rspML^T!FXe<U3)<#7$;cc2eE7uw&|Fy>uJXA5}PS>W!R z%)<!SinR{{mnwN&jh;GAbd7_jElYYUCfAeHo7UE<=|Gzv7seT-h#xCF8FfdMA$QBd zv8+6%s=alme?JZFvl|JuzveELQNRo$r<=gl43TS+js#hy*_CDU9t$*IOKv5S4$X4{ z{$^&?poHBuE?td#T+sWOq%BD=)DrHuS@J4l`yL?fU~;eT(4j-)RTg&_fSHxr*ms^Q zinQ_FeGsZ6C&H~SfDg><W)<BNbgTl`fu+2B4>)ONe_t2TS$4k4!rh~wC-q(XNyBDs zP|(!}uB6l~PXnjj{VK3llP%YQbK~*&LYB~QI6N0*A8gZ;-2E1CIDBYN1Ai5&Rl2*% zdQ$~l$tg6i)u?MJk2HWFv(z$a2Y|<br+`O+Ki$3D>A<WA49nwM3E6!EGb?;L&@Z}| z)wqPFf1M7T55Ip&ksY@5^{Y((&ivG{_n!hbV(k@oADP*uLLN6m4?K}*pEtAHW_Fw1 zM?07ITeN6q-vgf{Zolj9`|osMI2`7l4g{HnIUR_KdQsA)t1b!dJ`T}i+EV$VnY|a} zdf~bM%Ib{US~VS*;{B#hlfpP7;9}zTaWlJ7e~7q@fvdjQAjgxAo7s&?c}!J%r_INj z&f|j44PYg9>o+rdB6F!UvuGB^h2%Q(bimz@OiDhpY-(aM8^*5F0e3%?8dWy*@~>y) zYYzjj0PklJRMZ2iMu&3}sC?`0p93d>m(1+iu5_SDgU#$;;8l0OT&3idBySITS{yF} zfA`{heTNPm<_+qmU_R07$lJTbb>uAwaYuo-Q^@Mbn^W8md`SLZwL8oiX+LzNEgq7d zb`f~CBW=EMG)B&+Y*#TJ3Rg$k9AhUC`HJm2VbldAi-8~6K8t!DxUZXz#laTv4)8!X o6^oU}{S16V%YRMlP!9hC?MP=w6*qjN3;+NC07*qoM6N<$f>hxHAOHXW delta 940 zcmV;d15^Bq35p1i7YZ5(1^@s6R_JLgks&b&3ljzz1-S1`6p>pje{M-cK~!ko?ODH1 z6hRdJ_Hu*<0|n|!R4lBqyVyWMjUmLu!o<j(i8dY-+EMTqXiOACLIG={m4<>uTN@gM z3R@e|=u^rgMuPFP8IsN1-tNxc{y>hGY;rU6cHX!1?wfgU9%uxPLPzN^M~$RUa@RaQ z$y!?59dsv1wh};Wf03L>Y7;pNNspw5tO0f7IFeP8D-r4|QCJ)u*CII!fKd<0S(2@? z9Y=DD<R_9!@=PZG-V7bLl9r_@9LG4P1)Rq+9Y?Z{<af)|`7qr|9MBxV)c`acbbCfT z&pQC{%j$mX<hUFic+YA-2XN6mak_;`9K$+|XK?mUTkTPjf6dIcye{6`wT4ClV<Xns zm9n<VqSwX3{K8WEO>)SIaRtja09622P5VOzbMBFxOTe%>0DDJd9hw041MPkQi>Vlw zAya*8$Tv(IA^9MnS0P#H7HiscpiIV@d72^WV~H0d>!{M?Zc#E8mB*yTn|1nA&^fzp znf(&GReDBpe~6qm0jx%-tdSfxx(ve=h548Tns@A@gyi5+PQdR+-WoXI&T#80oN>nP zE0X&puVoVMmwDyog8djcuHQcEPvk^Sr0`o7RV4t3h||G-_+C;8n_pFH=5}P#biD!a zOhh)**zRCs0>C<efw+7Rz?6u*OJdV?y<A0AJ!2>Ie_N|Iu)F~oTU7wdA$OKD0A^Hm z6+j~+Eb9Q~ecyi)rBtui=Z)^EGMS{RTL6a4AMG-LpNZ}&Rh6!6N+HWJ7tM_fZ4JaZ z4FHVJK*>()18@$&B>-mu{7_Z5>Ofu&G}~jtLAPf_L=smAs!7kX47bp*>cE2e{W(Op zUedpxe=g&P>yyFRKMi0z&>mIQrid&iVqA_4oV3~tBC;bQJ7_QMEcIHnC?X#LytKL> zs%r052kP~DY<0ls{5RDBFDZ*`N~hftRMj`pW7t-CT|^!ky^4A7udB@<*0kwB7vI-) znq=l_0(fe5kBi7gBF9Bcoc6<NF-#g4k&RAye@t4u-R5IO=W)j7Hh|GU*H;m_5V=)~ zh?fUAlUzqu2UK;qQ}P*wsffiaSlX%ssyY}NRTlK|cO&w((*SM(cpT-Rqzp(K9UhTD z<-MxD1~3KShKQ`Sr2|C*7Lh*yZma52nkz5cdB>1xLAeRwAb8dTz&{5}I`QFP^#cF^ O3IG5}MNUMnLSTY<HL~ge diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js index fbcf4a2..3bbe2a4 100644 --- a/ui/js/src/kimchi.api.js +++ b/ui/js/src/kimchi.api.js @@ -681,5 +681,82 @@ var kimchi = { success : suc, error : err }); + }, + + addHost : function(settings, suc, err) { + suc(); +/* + kimchi.requestJSON({ + url : kimchi.url + 'hosts', + type : 'POST', + contentType : 'application/json', + data : JSON.stringify(settings), + dataType : 'json', + success: suc, + error: err + }); +*/ + }, + + updateHost : function(settings, suc, err) { + suc(); +/* + kimchi.requestJSON({ + url : kimchi.url + 'hosts', + type : 'PUT', + contentType : 'application/json', + data : JSON.stringify(settings), + dataType : 'json', + success: suc, + error: err + }); +*/ + }, + + deleteHost : function(host, suc, err) { + suc(); +/* + kimchi.requestJSON({ + url : kimchi.url + 'hosts/' + encodeURIComponent(host), + type : 'DELETE', + contentType : 'application/json', + dataType : 'json', + success : suc, + error : err + }); +*/ + }, + + /** + * + */ + listHosts : function(suc, err) { + suc([{ + name: 'RHEL 6.4', + url: 'http://9.123.141.113:8000' + }, { + name: 'RHEL 6.5', + url: 'http://9.123.141.113:8000' + }, { + name: 'Fedora 18', + url: 'http://9.123.141.113:8000' + }, { + name: 'Fedora 19', + url: 'http://9.123.141.113:8000' + }, { + name: 'Fedora with very very very very very long name', + url: 'http://9.123.141.113:8000' + }]); +/* + kimchi.requestJSON({ + url : kimchi.url + 'hosts', + type : 'GET', + contentType : 'application/json', + dataType : 'json', + resend: true, + success : suc, + error : err + }); +*/ } }; diff --git a/ui/js/src/kimchi.grid.js b/ui/js/src/kimchi.grid.js index 0fe195f..6e5f1fe 100644 --- a/ui/js/src/kimchi.grid.js +++ b/ui/js/src/kimchi.grid.js @@ -291,7 +291,7 @@ kimchi.widget.Grid = function(params) { }; var endResizing = function(event) { - if(!$('body').hasClass('resizing')) { + if(!$('body').hasClass('resizing') || !columnBeingResized) { return; } resizerLeftmost.addClass('hidden'); diff --git a/ui/js/src/kimchi.host.js b/ui/js/src/kimchi.host.js index e9279fb..0bcdf80 100644 --- a/ui/js/src/kimchi.host.js +++ b/ui/js/src/kimchi.host.js @@ -196,6 +196,10 @@ kimchi.host_main = function() { $('#debug-report-section').removeClass('hidden'); listDebugReports(); }); + + $('#button-edit-hosts').on('click', function(event) { + kimchi.window.open('hosts.html'); + }); }; kimchi.topic('kimchi/debugReportAdded').subscribe(function(params) { diff --git a/ui/js/src/kimchi.host_add_main.js b/ui/js/src/kimchi.host_add_main.js new file mode 100644 index 0000000..c6e7ce6 --- /dev/null +++ b/ui/js/src/kimchi.host_add_main.js @@ -0,0 +1,62 @@ +/* + * Project Kimchi + * + * Copyright IBM, Corp. 2013 + * + * Authors: + * Hongliang Wang <hlwang@linux.vnet.ibm.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +kimchi.host_add_main = function() { + + var addForm = $('#form-host-add'); + var addButton = $('#button-host-add'); + + var nameBox = $('input[name="name"]', addForm); + var urlBox = $('input[name="url"]', addForm); + + var validateForm = function(event) { + var valid = $(nameBox).val() !== '' && $(urlBox).val() !== ''; + $(addButton).prop('disabled', !valid); + return valid; + }; + + $(nameBox).on('change', validateForm); + $(urlBox).on('change', validateForm); + + var addHost = function(event) { + var valid = validateForm(); + if(!valid) { + return false; + } + + var formData = $(addForm).serializeObject(); + + kimchi.addHost(formData, function() { + kimchi.topic("hostAdded").publish(); + kimchi.window.close(); + }, function(jqXHR, textStatus, errorThrown) { + var reason = jqXHR && + jqXHR['responseJSON'] && + jqXHR['responseJSON']['reason']; + reason = reason ? ': ' + reason : ''; + kimchi.message.error(i18n['msg.hosts.failed.add'] + reason); + }); + + return false; + }; + + $(addForm).on('submit', addHost); + $(addButton).on('click', addHost); +}; diff --git a/ui/js/src/kimchi.host_edit_main.js b/ui/js/src/kimchi.host_edit_main.js new file mode 100644 index 0000000..0caec82 --- /dev/null +++ b/ui/js/src/kimchi.host_edit_main.js @@ -0,0 +1,62 @@ +/* + * Project Kimchi + * + * Copyright IBM, Corp. 2013 + * + * Authors: + * Hongliang Wang <hlwang@linux.vnet.ibm.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +kimchi.host_edit_main = function() { + + var editForm = $('#form-host-edit'); + var saveButton = $('#button-host-save'); + + var nameBox = $('input[name="name"]', editForm); + var urlBox = $('input[name="url"]', editForm); + + var validateForm = function(event) { + var valid = $(nameBox).val() !== '' && $(urlBox).val() !== ''; + $(saveButton).prop('disabled', !valid); + return valid; + }; + + $(nameBox).on('change', validateForm); + $(urlBox).on('change', validateForm); + + var editHost = function(event) { + var valid = validateForm(); + if(!valid) { + return false; + } + + var formData = $(editForm).serializeObject(); + + kimchi.updateHost(formData, function() { + kimchi.topic('hostUpdated').publish(); + kimchi.window.close(); + }, function(jqXHR, textStatus, errorThrown) { + var reason = jqXHR && + jqXHR['responseJSON'] && + jqXHR['responseJSON']['reason']; + reason = reason ? ': ' + reason : ''; + kimchi.message.error(i18n['msg.hosts.failed.edit'] + reason); + }); + + return false; + }; + + $(editForm).on('submit', editHost); + $(saveButton).on('click', editHost); +}; diff --git a/ui/js/src/kimchi.hosts.js b/ui/js/src/kimchi.hosts.js new file mode 100644 index 0000000..f55ebf8 --- /dev/null +++ b/ui/js/src/kimchi.hosts.js @@ -0,0 +1,116 @@ +/* + * Project Kimchi + * + * Copyright IBM, Corp. 2013 + * + * Authors: + * Hongliang Wang <hlwang@linux.vnet.ibm.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +kimchi.hosts_main = function() { + var hostsGridID = 'hosts-grid'; + var hostsGrid = null; + var initHostsGrid = function(hosts) { + hostsGrid = new kimchi.widget.Grid({ + container: 'hosts-grid-container', + id: hostsGridID, + toolbarButtons: [{ + id: hostsGridID + '-create-button', + label: i18n['msg.hosts.add'], + onClick: function(event) { + kimchi.window.open('host-add.html', { + close: function() { + } + }); + } + }, { + id: hostsGridID + '-edit-button', + label: i18n['msg.hosts.edit'], + disabled: true, + onClick: function(event) { + kimchi.window.open('host-edit.html', { + close: function() { + } + }); + } + }, { + id: hostsGridID + '-remove-button', + label: i18n['msg.hosts.remove'], + disabled: true, + onClick: function(event) { + var host = hostsGrid.getSelected(); + if(!host) { + return; + } + + var settings = { + title : i18n['msg.hosts.confirm.title'], + content : i18n['msg.hosts.confirm.content'], + confirm : i18n['msg.confirm'], + cancel : i18n['msg.cancel'] + }; + + kimchi.confirm(settings, function() { + kimchi.deleteHost({ + name: host['name'] + }, function(result) { + listHosts(); + }, function(error) { + }); + }); + } + }], + onRowSelected: function(row) { + $('#' + hostsGridID + '-edit-button') + .prop('disabled', false); + $('#' + hostsGridID + '-remove-button') + .prop('disabled', false); + }, + frozenFields: [{ + name: 'id', + label: ' ', + 'class': 'host-id' + }], + fields: [{ + name: 'name', + label: i18n['msg.hosts.name'], + 'class': 'host-name' + }, { + name: 'url', + label: i18n['msg.hosts.url'], + 'class': 'host-url' + }], + data: hosts + }); + }; + + var listHosts = function() { + kimchi.listHosts(function(hosts) { + $.each(hosts, function(i, item) { + hosts[i]['id'] = i + 1; + }); + if(hostsGrid) { + hostsGrid.setData(hosts); + } + else { + initHostsGrid(hosts); + } + }); + }; + + listHosts(); + + kimchi.topic('hostAdded').subscribe(listHosts); + kimchi.topic('hostUpdated').subscribe(listHosts); +}; diff --git a/ui/pages/guest-add.html.tmpl b/ui/pages/guest-add.html.tmpl index 36a0f35..e57884e 100644 --- a/ui/pages/guest-add.html.tmpl +++ b/ui/pages/guest-add.html.tmpl @@ -28,7 +28,7 @@ <html> <body> <div class="window" style="width: 900px;height: 580px;"> - <header> + <header class="window-header"> <h1 class="title">$_("Create a New Virtual Machine")</h1> <div class="close">X</div> </header> diff --git a/ui/pages/guest-edit.html.tmpl b/ui/pages/guest-edit.html.tmpl index 91f780c..7ff7e60 100644 --- a/ui/pages/guest-edit.html.tmpl +++ b/ui/pages/guest-edit.html.tmpl @@ -26,7 +26,7 @@ #silent _t = t.gettext <div id="guest-edit-window" class="window"> - <header> + <header class="window-header"> <h1 class="title">$_("Edit Guest")</h1> <div class="close">X</div> </header> diff --git a/ui/pages/host-add.html.tmpl b/ui/pages/host-add.html.tmpl new file mode 100644 index 0000000..c2a22a6 --- /dev/null +++ b/ui/pages/host-add.html.tmpl @@ -0,0 +1,66 @@ +#* + * Project Kimchi + * + * Copyright IBM, Corp. 2013 + * + * Authors: + * Hongliang Wang <hlwang@linux.vnet.ibm.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required="required" by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *# +#unicode UTF-8 +#import gettext +#from kimchi.cachebust import href +#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang) +#silent _ = t.gettext +#silent _t = t.gettext +<div id="host-add-window" class="window"> + <form id="form-host-add"> + <header class="window-header"> + <h1 class="title">$_("Add a Host")</h1> + <div class="close">X</div> + </header> + <div class="content"> + <section class="form-section"> + <h2>1. $_("Host Name")</h2> + <div class="field"> + <p class="text-help"> + $_("The name used to identify the host.") + </p> + <div class="textbox-wrapper"> + <input type="text" class="text" name="name" required="required" /> + </div> + </div> + </section> + <section class="form-section"> + <h2>2. $_("Console URL")</h2> + <div class="field"> + <p class="text-help"> + $_("The URL of the host management console in format: http://[domain or IP]:[port]") + </p> + <div class="textbox-wrapper"> + <input type="text" class="text" name="url" required="required" /> + </div> + </div> + </section> + </div> + <footer> + <div class="btn-group"> + <button type="submit" id="button-host-add" class="btn-normal" disabled="disabled"><span class="text">$_("Add")</span></button> + </div> + </footer> + </form> +</div> +<script> + kimchi.host_add_main(); +</script> diff --git a/ui/pages/host-edit.html.tmpl b/ui/pages/host-edit.html.tmpl new file mode 100644 index 0000000..0d003cb --- /dev/null +++ b/ui/pages/host-edit.html.tmpl @@ -0,0 +1,66 @@ +#* + * Project Kimchi + * + * Copyright IBM, Corp. 2013 + * + * Authors: + * Hongliang Wang <hlwang@linux.vnet.ibm.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *# +#unicode UTF-8 +#import gettext +#from kimchi.cachebust import href +#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang) +#silent _ = t.gettext +#silent _t = t.gettext +<div id="host-edit-window" class="window"> + <form id="form-host-edit"> + <header class="window-header"> + <h1 class="title">$_("Edit a Host")</h1> + <div class="close">X</div> + </header> + <div class="content"> + <section class="form-section"> + <h2>1. $_("Host Name")</h2> + <div class="field"> + <p class="text-help"> + $_("The name used to identify the host.") + </p> + <div class="textbox-wrapper"> + <input type="text" class="text" name="name"> + </div> + </div> + </section> + <section class="form-section"> + <h2>2. $_("Console URL")</h2> + <div class="field"> + <p class="text-help"> + $_("The URL of the host management console in format: http://[domain or IP]:[port]") + </p> + <div class="textbox-wrapper"> + <input type="text" class="text" name="url"> + </div> + </div> + </section> + </div> + <footer> + <div class="btn-group"> + <button type="submit" id="button-host-save" class="btn-normal" disabled="disabled"><span class="text">$_("Save")</span></button> + </div> + </footer> + </form> +</div> +<script> + kimchi.host_edit_main(); +</script> diff --git a/ui/pages/hosts.html.tmpl b/ui/pages/hosts.html.tmpl new file mode 100644 index 0000000..4e75b64 --- /dev/null +++ b/ui/pages/hosts.html.tmpl @@ -0,0 +1,41 @@ +#* + * Project Kimchi + * + * Copyright IBM, Corp. 2013 + * + * Authors: + * Hongliang Wang <hlwang@linux.vnet.ibm.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *# + +#unicode UTF-8 +#import gettext +#from kimchi.cachebust import href +#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang) +#silent _ = t.gettext +#silent _t = t.gettext + +<div id="hosts-window" class="window"> + <header class="window-header"> + <h1 class="title">$_("Hosts Management")</h1> + <div class="close">X</div> + </header> + <div class="content"> + <div id="hosts-grid-container"></div> + </div> +</div> + +<script type="text/javascript"> + kimchi.hosts_main(); +</script> diff --git a/ui/pages/i18n.html.tmpl b/ui/pages/i18n.html.tmpl index c1fc3d1..475629e 100644 --- a/ui/pages/i18n.html.tmpl +++ b/ui/pages/i18n.html.tmpl @@ -81,6 +81,13 @@ var i18n = { 'msg.host.shutdown.vmrunning': "$_("Some VM(s) are running!")", 'msg.host.shutdown.confirm.title': "$_("Confirm")", 'msg.host.shutdown.confirm.content': "$_("Shutting down or restarting host will cause unsaved work lost. Continue to shut down/restarting?")", + 'msg.hosts.add': "$_("Add")", + 'msg.hosts.edit': "$_("Edit")", + 'msg.hosts.remove': "$_("Remove")", + 'msg.hosts.confirm.title': "$_("Remove Host Confirmation")", + 'msg.hosts.confirm.content': "$_("Host information will be removed permanently. Do you want to continue?")", + 'msg.hosts.name': "$_("Name")", + 'msg.hosts.url': "$_("URL")", 'msg.vm.confirm.delete': "$_("This will delete the VM and its virtual disks. " "This operation cannot be undone. " "Would you like to continue?")", diff --git a/ui/pages/login-window.html.tmpl b/ui/pages/login-window.html.tmpl index 5dd37f6..2f12f75 100644 --- a/ui/pages/login-window.html.tmpl +++ b/ui/pages/login-window.html.tmpl @@ -25,7 +25,7 @@ #silent _ = t.gettext #silent _t = t.gettext <div id="login-window" class="window"> - <header> + <header class="window-header"> <div class="logo"></div> <span class="title">$_("Log In")</span> <form id="form-language" class="language" action="" method="GET"> diff --git a/ui/pages/report-add.html.tmpl b/ui/pages/report-add.html.tmpl index 2a962d4..af7bb74 100644 --- a/ui/pages/report-add.html.tmpl +++ b/ui/pages/report-add.html.tmpl @@ -26,7 +26,7 @@ #silent _t = t.gettext <!DOCTYPE html> <div id="report-add-window" class="window"> - <header> + <header class="window-header"> <h1 class="title">$_("Generate a New Debug Report")</h1> <div class="close">X</div> </header> diff --git a/ui/pages/storagepool-add.html.tmpl b/ui/pages/storagepool-add.html.tmpl index 5a2dd45..9679b73 100644 --- a/ui/pages/storagepool-add.html.tmpl +++ b/ui/pages/storagepool-add.html.tmpl @@ -28,7 +28,7 @@ <html> <body> <div class="window" style="width: 600px; height: 600px;"> - <header> + <header class="window-header"> <h1 class="title">$_("Define a New Storage Pool")</h1> <div class="close">X</div> </header> diff --git a/ui/pages/tabs/host.html.tmpl b/ui/pages/tabs/host.html.tmpl index aa4ecfb..2ded6d4 100644 --- a/ui/pages/tabs/host.html.tmpl +++ b/ui/pages/tabs/host.html.tmpl @@ -35,9 +35,6 @@ <script id="host-tmpl" type="kimchi/template"> <div class="host-panel"> - <div class="logo-container"> - <div class="logo" style="background-image: url({logo});"></div> - </div> <div id="host-info-container" class="info-container"> <h2 class="hostname">{hostname}</h2> <div class="action-panel"> @@ -130,7 +127,6 @@ </h3> <div id="content-sys-reports" class="section-content"> <div class="section-row"> - <div class="section-label"></div> <div class="section-value"> <div id="available-reports-grid-container"></div> </div> @@ -138,6 +134,29 @@ </div> </div> </div> + <div class="other-servers-container"> + <div class="other-servers-popup-button-container"> + <button id="button-edit-hosts" title="Edit" class="other-servers-popup-button"></button> + </div> + <div class="other-servers-title">Other Servers</div> + <ul class="other-servers-list"> + <li> + <a href="http://9.123.141.113:8000">RHEL6.4</a> + </li> + <li> + <a href="http://9.123.141.113:8000">RHEL6.5</a> + </li> + <li> + <a href="http://9.123.141.113:8000">Fedora 18</a> + </li> + <li> + <a href="http://9.123.141.113:8000">Fedora 19</a> + </li> + <li> + <a href="http://9.123.141.113:8000" title="Fedora with very very very very very long name">Fedora with very very very very very long name</a> + </li> + </ul> + </div> </div> </script> diff --git a/ui/pages/template-add.html.tmpl b/ui/pages/template-add.html.tmpl index 27d8a90..3a1c517 100644 --- a/ui/pages/template-add.html.tmpl +++ b/ui/pages/template-add.html.tmpl @@ -29,7 +29,7 @@ <html> <body> <div class="window" style="width: 992px;height: 660px;"> - <header> + <header class="window-header"> <h1 class="title">$_("Add Template")</h1> <div class="close">X</div> </header> diff --git a/ui/pages/template-edit.html.tmpl b/ui/pages/template-edit.html.tmpl index fe7314d..80d80e0 100644 --- a/ui/pages/template-edit.html.tmpl +++ b/ui/pages/template-edit.html.tmpl @@ -27,7 +27,7 @@ #silent _t = t.gettext <div id="template-edit-window" class="window"> - <header> + <header class="window-header"> <h1 class="title">$_("Edit Template")</h1> <div class="close">X</div> </header> -- 1.8.1.4