[Kimchi-devel] [PATCH 2/2] Adding new-ui to Hosts tab and modal windows

sguimaraes943 at gmail.com sguimaraes943 at gmail.com
Thu Oct 15 19:58:55 UTC 2015


From: samhenri <samuel.guimaraes at eldorado.org.br>

Some CSS files are empty to avoid conflicts with next patches and or commits when deleted/moved to gingerbase

Signed-off-by: samhenri <samuel.guimaraes at eldorado.org.br>
---
 src/wok/plugins/kimchi/ui/config/tab-ext.xml       |  10 +-
 .../plugins/kimchi/ui/css/theme-default/host.css   | 270 ----------
 .../kimchi/ui/css/theme-default/report-add.css     |  20 -
 .../kimchi/ui/css/theme-default/report-rename.css  |  22 -
 .../kimchi/ui/css/theme-default/repository-add.css |  25 -
 .../ui/css/theme-default/repository-edit.css       |  62 ---
 src/wok/plugins/kimchi/ui/js/src/kimchi.api.js     |  39 ++
 src/wok/plugins/kimchi/ui/js/src/kimchi.host.js    | 598 +++++++++++----------
 src/wok/plugins/kimchi/ui/pages/host.html.tmpl     | 207 +++----
 .../plugins/kimchi/ui/pages/report-add.html.tmpl   |  46 +-
 .../kimchi/ui/pages/report-rename.html.tmpl        |  42 +-
 .../kimchi/ui/pages/repository-add.html.tmpl       | 124 ++---
 .../kimchi/ui/pages/repository-edit.html.tmpl      | 138 ++---
 13 files changed, 571 insertions(+), 1032 deletions(-)

diff --git a/src/wok/plugins/kimchi/ui/config/tab-ext.xml b/src/wok/plugins/kimchi/ui/config/tab-ext.xml
index ee88c88..b2a842b 100644
--- a/src/wok/plugins/kimchi/ui/config/tab-ext.xml
+++ b/src/wok/plugins/kimchi/ui/config/tab-ext.xml
@@ -3,35 +3,35 @@
     <tab>
         <access role="admin" mode="admin"/>
         <access role="user" mode="none"/>
-
+        <class>host</class>
         <title>Host</title>
         <path>plugins/kimchi/host.html</path>
     </tab>
     <tab>
         <access role="admin" mode="admin"/>
         <access role="user" mode="byInstance"/>
-
+        <class>guests</class>
         <title>Guests</title>
         <path>plugins/kimchi/guests.html</path>
     </tab>
     <tab>
         <access role="admin" mode="admin"/>
         <access role="user" mode="none"/>
-
+        <class>templates</class>
         <title>Templates</title>
         <path>plugins/kimchi/templates.html</path>
     </tab>
     <tab>
         <access role="admin" mode="admin"/>
         <access role="user" mode="read-only"/>
-
+        <class>storage</class>
         <title>Storage</title>
         <path>plugins/kimchi/storage.html</path>
     </tab>
     <tab>
         <access role="admin" mode="admin"/>
         <access role="user" mode="read-only"/>
-
+        <class>network</class>
         <title>Network</title>
         <path>plugins/kimchi/network.html</path>
     </tab>
diff --git a/src/wok/plugins/kimchi/ui/css/theme-default/host.css b/src/wok/plugins/kimchi/ui/css/theme-default/host.css
index a0cccb1..bb693cc 100644
--- a/src/wok/plugins/kimchi/ui/css/theme-default/host.css
+++ b/src/wok/plugins/kimchi/ui/css/theme-default/host.css
@@ -15,273 +15,3 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-.host-panel {
-    font-size: 12px;
-    margin-bottom: 100px;
-}
-
-.host-panel .logo-container, .host-panel .info-container,
-.host-panel .section-label, .host-panel .section-value {
-    display: inline-block;
-    vertical-align: top;
-}
-
-.host-panel .section-label {
-    display: inline-block;
-    margin-right: 1em;
-    vertical-align: top;
-}
-
-.host-panel .logo {
-    background: url("plugins/kimchi/images/icon-vm.png") no-repeat left top;
-    height: 128px;
-    width: 128px;
-}
-
-.host-panel .hostname {
-    text-decoration: underline;
-}
-
-.host-panel .action-panel {
-    margin-top: 2em;
-    padding-left: 10px;
-}
-
-.host-panel .button-icon {
-    background: url("../images/theme-default/host-icon-sprite.png") no-repeat
-                left top;
-    display: inline-block;
-    height: 12px;
-    width: 12px;
-}
-
-.host-panel .action-icon-stop {
-    background-position: -14px 0;
-}
-
-.host-panel .action-icon-restart {
-    background-position: -28px 0;
-}
-
-.host-panel .action-icon-download {
-    background-position: -42px 0;
-}
-
-.host-panel .action-icon-connect {
-    background-position: -56px 0;
-}
-
-.host-panel .action-icon-add {
-    background-position: -70px 0;
-}
-
-.host-panel .action-icon-edit {
-    background-position: -84px 0;
-}
-
-.host-panel .action-icon-remove {
-    background-position: -98px 0;
-}
-
-.host-panel button:disabled .action-icon-start {
-    background-position: 0 -14px;
-}
-
-.host-panel button:disabled .action-icon-stop {
-    background-position: -14px -14px;
-}
-
-.host-panel button:disabled .action-icon-restart {
-    background-position: -28px -14px;
-}
-
-.host-panel button:disabled .action-icon-download {
-    background-position: -42px -14px;
-}
-
-.host-panel button:disabled .action-icon-connect {
-    background-position: -56px -14px;
-}
-
-.host-panel button:disabled .action-icon-add {
-    background-position: -70px -14px;
-}
-
-.host-panel button:disabled .action-icon-edit {
-    background-position: -84px -14px;
-}
-
-.host-panel button:disabled .action-icon-remove {
-    background-position: -98px -14px;
-}
-
-.host-panel .info-container {
-    padding-top: 16px;
-    width: 890px;
-}
-
-.host-panel .section-header {
-    background: #EEE;
-    border-radius: 5px;
-    cursor: pointer;
-    line-height: 2em;
-    margin: 1em 0 1em;
-    padding-left: 6px;
-}
-
-.host-panel .section-header:hover {
-    background: #06f;
-    color: white;
-}
-
-.host-panel .section-content {
-    padding-left: 1em;
-}
-
-.host-panel .section-header .arrow {
-    border-color: transparent;
-    border-style: solid;
-    display: inline-block;
-    margin-right: 6px;
-    width: 0;
-}
-
-.host-panel .section-header[aria-expanded="true"] .arrow {
-    border-top-color: black;
-    border-width: 8px 4px 0;
-    border-bottom: none;
-}
-
-.host-panel .section-header[aria-expanded="true"]:hover .arrow {
-    border-top-color: white;
-}
-
-.host-panel .section-header[aria-expanded="false"] .arrow {
-    border-left-color: black;
-    border-right: none;
-    border-width: 4px 0 4px 8px;
-}
-
-.host-panel .section-header[aria-expanded="false"]:hover .arrow {
-    border-left-color: white;
-}
-
-.host-panel .section-row {
-    line-height: 1.6em;
-    margin-bottom: 1em;
-}
-
-.host-panel .section-label {
-    width: 100px;
-}
-
-#frequency-textbox {
-    width: 20px;
-}
-
-#container-chart-cpu,
-#container-chart-memory,
-#container-chart-disk-io,
-#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;
-    width: 500px;
-}
-
-#container-chart-disk-io .disk-write,
-#container-chart-network-io .network-sent {
-    stroke: #f80;
-}
-
-/* Debug Report */
-.cell-text-wrapper {
-    margin-left: 10px;
-}
-
-.host-panel #available-reports-grid {
-    border-color: #ddd;
-    height: 400px;
-    width: 850px;
-}
-
-.host-panel select#available-reports-list {
-    width: 300px;
-}
-
-.host-panel select#available-reports-list option {
-    margin: .2em 1em;
-}
-
-.debug-report-name,
-.debug-report-time {
-    width: 424px;
-}
-
-#id-debug-img {
-    background: url(../images/theme-default/kimchi-loading15x15.gif) 12px
-            center no-repeat;
-    padding-left: 23px;
-}
-
-/* End of Debug Report */
-
-/* Software Updates */
-.host-panel #software-updates-grid {
-    border-color: #ddd;
-    height: 300px;
-    width: 850px;
-}
-
-.software-update-name,
-.software-update-repos {
-    width: 224px;
-}
-
-.software-update-version,
-.software-update-arch {
-    width: 200px;
-}
-
-.host-panel #software-updates-progress-textarea {
-    border: 1px solid #ddd;
-    box-sizing: border-box;
-    height: 100px;
-    padding: .2em .5em;
-    resize: vertical;
-    width: 852px;
-}
-/* End of Software Updates */
-
-/* Repository */
-.host-panel #repositories-grid {
-    border-color: #ddd;
-    height: 200px;
-    width: 850px;
-}
-
-.host-panel #repositories-grid .repository-id {
-    width: 120px;
-}
-
-.host-panel #repositories-grid .repository-name {
-    width: 640px;
-}
-
-.host-panel #repositories-grid .repository-enabled {
-    width: 88px;
-}
-
-.host-panel #repositories-grid .repository-baseurl.deb {
-    width: 400px;
-}
-
-.host-panel #repositories-grid .repository-enabled.deb {
-    width: 100px;
-}
-
-.host-panel #repositories-grid .repository-gpgcheck.deb {
-    width: 150px;
-}
-/* End of Repository */
diff --git a/src/wok/plugins/kimchi/ui/css/theme-default/report-add.css b/src/wok/plugins/kimchi/ui/css/theme-default/report-add.css
index 8020182..3769daa 100644
--- a/src/wok/plugins/kimchi/ui/css/theme-default/report-add.css
+++ b/src/wok/plugins/kimchi/ui/css/theme-default/report-add.css
@@ -15,23 +15,3 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#report-add-window {
-    height: 300px;
-    width: 400px;
-}
-
-#report-add-window .field {
-    font-size: 12px;
-}
-
-#report-name-textbox {
-    margin: 0;
-    width: 100%;
-}
-
-.info-add-debug-report {
-    font-size: 12px;
-    color: #999999;
-    font-weight: lighter;
-    font-family: 'Helvetica Neue', Helvetica, Arial;
-}
\ No newline at end of file
diff --git a/src/wok/plugins/kimchi/ui/css/theme-default/report-rename.css b/src/wok/plugins/kimchi/ui/css/theme-default/report-rename.css
index 2fb2698..2d9e4a2 100644
--- a/src/wok/plugins/kimchi/ui/css/theme-default/report-rename.css
+++ b/src/wok/plugins/kimchi/ui/css/theme-default/report-rename.css
@@ -15,25 +15,3 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#report-rename-window {
-    height: 300px;
-    width: 400px;
-}
-
-#report-rename-window .field {
-    font-size: 12px;
-}
-
-#report-name-textbox {
-    -moz-box-sizing: border-box;
-    box-sizing: border-box;
-    margin: 0;
-    width: 100%;
-}
-
-.info-debug-report-rename {
-    font-size: 12px;
-    color: #999999;
-    font-weight: lighter;
-    font-family: 'Helvetica Neue', Helvetica, Arial;
-}
diff --git a/src/wok/plugins/kimchi/ui/css/theme-default/repository-add.css b/src/wok/plugins/kimchi/ui/css/theme-default/repository-add.css
index 4344569..2d9e4a2 100644
--- a/src/wok/plugins/kimchi/ui/css/theme-default/repository-add.css
+++ b/src/wok/plugins/kimchi/ui/css/theme-default/repository-add.css
@@ -15,28 +15,3 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#repository-add-window {
-    height: 500px;
-    width: 1000px;
-}
-
-#repository-add-window span.required {
-    color: red;
-    padding-left: 5px;
-    vertical-align: top;
-}
-
-#repository-add-window .textbox-wrapper input[type="text"] {
-    box-sizing: border-box;
-    width: 100%;
-}
-
-#repository-add-window .textbox-wrapper label {
-    vertical-align: middle;
-}
-
-#isMirrorLabel {
-    font-size: 14px;
-    font-weight: lighter;
-    font-family: 'Helvetica Neue', Helvetica, Arial;
-}
\ No newline at end of file
diff --git a/src/wok/plugins/kimchi/ui/css/theme-default/repository-edit.css b/src/wok/plugins/kimchi/ui/css/theme-default/repository-edit.css
index 383a7fe..d50bbc1 100644
--- a/src/wok/plugins/kimchi/ui/css/theme-default/repository-edit.css
+++ b/src/wok/plugins/kimchi/ui/css/theme-default/repository-edit.css
@@ -15,68 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-.yum div#repository-edit-window {
-    height: 680px;
-    width: 1000px;
-}
-
-.deb div#repository-edit-window {
-    height: 480px;
-    width: 1000px;
-}
-
-
-.repository-edit-fieldset {
-    float: left;
-    padding: 0 30px;
-    width: 95%;
-}
-
-.repository-edit-wrapper-label, .repository-edit-wrapper-controls {
-    display: inline-block;
-    height: 30px;
-    line-height: 30px;
-    font-size: 14px;
-    vertical-align: top;
-}
-
-.repository-edit-wrapper-label {
-    margin-top: 10px;
-    width: 150px;
-}
-
-.repository-edit-wrapper-controls label {
-    vertical-align: middle;
-}
-
-.repository-edit-wrapper-controls {
-    width: 100%;
-}
-
-.repository-edit-wrapper-controls input[type="text"] {
-    font-size: 16px;
-    height: 30px;
-    line-height: 30px;
-    padding: 0 10px;
-    width: 100%;
-    -moz-box-sizing: border-box;
-    box-sizing: border-box;
-    border: 1px solid #CCCCCC;
-}
-
-
-.repository-edit-wrapper-controls input[type="text"][readonly] {
-    color: #bbb;
-    background-color: #fafafa;
-}
-
-
-.repository-edit-wrapper-controls input[type="text"][disabled] {
-    color: #bbb;
-    background-color: #fafafa;
-    cursor: not-allowed;
-}
-
 
 .deb .yum{
     display: none;
diff --git a/src/wok/plugins/kimchi/ui/js/src/kimchi.api.js b/src/wok/plugins/kimchi/ui/js/src/kimchi.api.js
index c82d040..f5839f1 100644
--- a/src/wok/plugins/kimchi/ui/js/src/kimchi.api.js
+++ b/src/wok/plugins/kimchi/ui/js/src/kimchi.api.js
@@ -884,6 +884,45 @@ var kimchi = {
         });
     },
 
+    tailSoftwareUpdateLogs : function(suc, err, progress) {
+        var taskID = -1;
+        var onResponse = function(data) {
+            taskID = data['id'];
+            trackTask();
+        };
+
+        var trackTask = function() {
+            kimchi.getTask(taskID, onTaskResponse, err);
+        };
+
+        var onTaskResponse = function(result) {
+            var taskStatus = result['status'];
+            switch(taskStatus) {
+            case 'running':
+                progress && progress(result);
+                setTimeout(function() {
+                    trackTask();
+                }, 1000);
+                break;
+            case 'finished':
+            case 'failed':
+                suc(result);
+                break;
+            default:
+                break;
+            }
+        };
+
+        wok.requestJSON({
+            url : 'plugins/kimchi/host/taillogs',
+            type : "POST",
+            contentType : "application/json",
+            dataType : "json",
+            success : onResponse,
+            error : err
+        });
+    },
+
     updateSoftware : function(suc, err, progress) {
         var taskID = -1;
         var onResponse = function(data) {
diff --git a/src/wok/plugins/kimchi/ui/js/src/kimchi.host.js b/src/wok/plugins/kimchi/ui/js/src/kimchi.host.js
index c3765dc..654df2e 100644
--- a/src/wok/plugins/kimchi/ui/js/src/kimchi.host.js
+++ b/src/wok/plugins/kimchi/ui/js/src/kimchi.host.js
@@ -15,87 +15,92 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-kimchi.host={};
+kimchi.host = {};
 
 kimchi.host_main = function() {
-    var expand = function(header, toExpand) {
-        var controlledNode = $(header).attr('aria-controls');
-        $('#' + controlledNode)[toExpand ? 'removeClass' : 'addClass']('hidden');
-        $(header).attr('aria-expanded', toExpand ? 'true' : 'false');
-    };
-
+    "use strict";
     var repositoriesGrid = null;
     var initRepositoriesGrid = function(repo_type) {
-        var gridFields=[];
-        if (repo_type == "yum") {
-                gridFields=[{
-                    name: 'repo_id',
-                    label: i18n['KCHREPO6004M'],
-                    'class': 'repository-id'
-                }, {
-                    name: 'config[display_repo_name]',
-                    label: i18n['KCHREPO6005M'],
-                    'class': 'repository-name'
-                }, {
-                    name: 'enabled',
-                    label: i18n['KCHREPO6009M'],
-                    'class': 'repository-enabled'
-                }];
-        }
-        else if (repo_type == "deb") {
-                gridFields=[{
-                    name: 'baseurl',
-                    label: i18n['KCHREPO6006M'],
-                    makeTitle: true,
-                    'class': 'repository-baseurl deb'
-                }, {
-                    name: 'enabled',
-                    label: i18n['KCHREPO6009M'],
-                    'class': 'repository-enabled deb'
-                }, {
-                    name: 'config[dist]',
-                    label: "dist",
-                    'class': 'repository-gpgcheck deb'
-                }, {
-                    name: 'config[comps]',
-                    label: "comps",
-                    'class': 'repository-gpgcheck deb'
-                }];
-        }
-        else {
-            gridFields=[{
+        var gridFields = [];
+        if (repo_type === "yum") {
+            gridFields = [{
                 name: 'repo_id',
                 label: i18n['KCHREPO6004M'],
-                'class': 'repository-id'
-                }, {
-                    name: 'enabled',
-                    label: i18n['KCHREPO6009M'],
-                    'class': 'repository-enabled'
-                }, {
-                    name: 'baseurl',
-                    label: i18n['KCHREPO6006M'],
-                    makeTitle: true,
-                    'class': 'repository-baseurl'
-                }];
+                'class': 'repository-id',
+                type: 'name'
+            }, {
+                name: 'config[display_repo_name]',
+                label: i18n['KCHREPO6005M'],
+                'class': 'repository-name',
+                type: 'description'
+            }, {
+                name: 'enabled',
+                label: i18n['KCHREPO6009M'],
+                'class': 'repository-enabled',
+                type: 'status'
+            }];
+        } else if (repo_type === "deb") {
+            gridFields = [{
+                name: 'baseurl',
+                label: i18n['KCHREPO6006M'],
+                makeTitle: true,
+                'class': 'repository-baseurl deb',
+                type: 'description'
+            }, {
+                name: 'enabled',
+                label: i18n['KCHREPO6009M'],
+                'class': 'repository-enabled deb',
+                type: 'status'
+            }, {
+                name: 'config[dist]',
+                label: "dist",
+                'class': 'repository-gpgcheck deb'
+            }, {
+                name: 'config[comps]',
+                label: "comps",
+                'class': 'repository-gpgcheck deb'
+            }];
+        } else {
+            gridFields = [{
+                name: 'repo_id',
+                label: i18n['KCHREPO6004M'],
+                'class': 'repository-id',
+                type: 'name'
+            }, {
+                name: 'enabled',
+                label: i18n['KCHREPO6009M'],
+                'class': 'repository-enabled',
+                type: 'status'
+            }, {
+                name: 'baseurl',
+                label: i18n['KCHREPO6006M'],
+                makeTitle: true,
+                'class': 'repository-baseurl',
+                type: 'description'
+            }];
         }
-        repositoriesGrid = new wok.widget.Grid({
+        repositoriesGrid = new wok.widget.List({
             container: 'repositories-grid-container',
             id: 'repositories-grid',
             title: i18n['KCHREPO6003M'],
             toolbarButtons: [{
                 id: 'repositories-grid-add-button',
                 label: i18n['KCHREPO6012M'],
+                class: 'fa fa-plus-circle',
                 onClick: function(event) {
-                    wok.window.open({url:'plugins/kimchi/repository-add.html',
-                                    class: repo_type});
+                    wok.window.open({
+                        url: 'plugins/kimchi/repository-add.html',
+                        class: repo_type
+                    });
                 }
             }, {
                 id: 'repositories-grid-enable-button',
                 label: i18n['KCHREPO6016M'],
+                class: 'fa fa-play-circle-o',
                 disabled: true,
                 onClick: function(event) {
                     var repository = repositoriesGrid.getSelected();
-                    if(!repository) {
+                    if (!repository) {
                         return;
                     }
                     var name = repository['repo_id'];
@@ -108,31 +113,36 @@ kimchi.host_main = function() {
             }, {
                 id: 'repositories-grid-edit-button',
                 label: i18n['KCHREPO6013M'],
+                class: 'fa fa-pencil',
                 disabled: true,
                 onClick: function(event) {
                     var repository = repositoriesGrid.getSelected();
-                    if(!repository) {
+                    if (!repository) {
                         return;
                     }
                     kimchi.selectedRepository = repository['repo_id'];
-                    wok.window.open({url:'plugins/kimchi/repository-edit.html',
-                                    class: repo_type});
+                    wok.window.open({
+                        url: 'plugins/kimchi/repository-edit.html',
+                        class: repo_type
+                    });
                 }
             }, {
                 id: 'repositories-grid-remove-button',
                 label: i18n['KCHREPO6014M'],
+                class: 'fa fa-minus-circle',
+                critical: true,
                 disabled: true,
                 onClick: function(event) {
                     var repository = repositoriesGrid.getSelected();
-                    if(!repository) {
+                    if (!repository) {
                         return;
                     }
 
                     var settings = {
-                        title : i18n['KCHREPO6001M'],
-                        content : i18n['KCHREPO6002M'],
-                        confirm : i18n['KCHAPI6004M'],
-                        cancel : i18n['KCHAPI6003M']
+                        title: i18n['KCHREPO6001M'],
+                        content: i18n['KCHREPO6002M'],
+                        confirm: i18n['KCHAPI6004M'],
+                        cancel: i18n['KCHAPI6003M']
                     };
 
                     wok.confirm(settings, function() {
@@ -140,15 +150,15 @@ kimchi.host_main = function() {
                             repository['repo_id'],
                             function(result) {
                                 wok.topic('kimchi/repositoryDeleted').publish(result);
-                            }, function(error) {
-                            }
+                            },
+                            function(error) {}
                         );
                     });
                 }
             }],
             onRowSelected: function(row) {
                 var repository = repositoriesGrid.getSelected();
-                if(!repository) {
+                if (!repository) {
                     return;
                 }
                 $('#repositories-grid-remove-button').prop('disabled', false);
@@ -166,28 +176,26 @@ kimchi.host_main = function() {
 
     var listRepositories = function(gridCallback) {
         kimchi.listRepositories(function(repositories) {
-            if($.isFunction(gridCallback)) {
-                gridCallback(repositories);
-            }
-            else {
-                if(repositoriesGrid) {
-                    repositoriesGrid.setData(repositories);
-                }
-                else {
-                    initRepositoriesGrid();
-                    repositoriesGrid.setData(repositories);
+                if ($.isFunction(gridCallback)) {
+                    gridCallback(repositories);
+                } else {
+                    if (repositoriesGrid) {
+                        repositoriesGrid.setData(repositories);
+                    } else {
+                        initRepositoriesGrid();
+                        repositoriesGrid.setData(repositories);
+                    }
                 }
-            }
-        },
-        function(error) {
-            var message = error && error['responseJSON'] && error['responseJSON']['reason'];
+            },
+            function(error) {
+                var message = error && error['responseJSON'] && error['responseJSON']['reason'];
 
-            if($.isFunction(gridCallback)) {
-                gridCallback([]);
-            }
-            repositoriesGrid &&
-                repositoriesGrid.showMessage(message || i18n['KCHUPD6008M']);
-        });
+                if ($.isFunction(gridCallback)) {
+                    gridCallback([]);
+                }
+                repositoriesGrid &&
+                    repositoriesGrid.showMessage(message || i18n['KCHUPD6008M']);
+            });
 
         $('#repositories-grid-remove-button').prop('disabled', true);
         $('#repositories-grid-edit-button').prop('disabled', true);
@@ -258,16 +266,32 @@ kimchi.host_main = function() {
         });
     };
 
+    var startSoftwareUpdateProgress = function() {
+        var progressArea = $('#' + progressAreaID)[0];
+        $('#software-updates-progress-container').removeClass('hidden');
+        $(progressArea).text('');
+        !wok.isElementInViewport(progressArea) &&
+            progressArea.scrollIntoView();
+
+        kimchi.tailSoftwareUpdateLogs(function(result) {
+            reloadProgressArea(result);
+            wok.topic('kimchi/softwareUpdated').publish({
+                result: result
+            });
+            wok.message.warn(i18n['KCHUPD6010M']);
+        }, function(error) {
+            wok.message.error(i18n['KCHUPD6011M']);
+        }, reloadProgressArea);
+    };
+
     var listSoftwareUpdates = function(gridCallback) {
         kimchi.listSoftwareUpdates(function(softwareUpdates) {
-            if($.isFunction(gridCallback)) {
+            if ($.isFunction(gridCallback)) {
                 gridCallback(softwareUpdates);
-            }
-            else {
-                if(softwareUpdatesGrid) {
+            } else {
+                if (softwareUpdatesGrid) {
                     softwareUpdatesGrid.setData(softwareUpdates);
-                }
-                else {
+                } else {
                     initSoftwareUpdatesGrid(softwareUpdates);
                 }
             }
@@ -276,7 +300,18 @@ kimchi.host_main = function() {
             $(updateButton).prop('disabled', softwareUpdates.length === 0);
         }, function(error) {
             var message = error && error['responseJSON'] && error['responseJSON']['reason'];
-            if($.isFunction(gridCallback)) {
+
+            // cannot get the list of packages because there is another
+            // package manager instance running, so follow that instance updates
+            if (message.indexOf("KCHPKGUPD0005E") !== -1) {
+                startSoftwareUpdateProgress();
+                if ($.isFunction(gridCallback)) {
+                    gridCallback([]);
+                }
+                return;
+            }
+
+            if ($.isFunction(gridCallback)) {
                 gridCallback([]);
             }
             softwareUpdatesGrid &&
@@ -296,23 +331,25 @@ kimchi.host_main = function() {
         });
     };
     var initReportGrid = function(reports) {
-        reportGrid = new wok.widget.Grid({
+        reportGrid = new wok.widget.List({
             container: 'available-reports-grid-container',
             id: reportGridID,
             title: i18n['KCHDR6002M'],
             toolbarButtons: [{
                 id: reportGridID + '-generate-button',
+                class: 'fa fa-plus-circle',
                 label: i18n['KCHDR6006M'],
                 onClick: function(event) {
                     wok.window.open('plugins/kimchi/report-add.html');
                 }
             }, {
                 id: reportGridID + '-rename-button',
+                class: 'fa fa-pencil',
                 label: i18n['KCHDR6008M'],
                 disabled: true,
                 onClick: function(event) {
                     var report = reportGrid.getSelected();
-                    if(!report) {
+                    if (!report) {
                         return;
                     }
 
@@ -320,20 +357,37 @@ kimchi.host_main = function() {
                     wok.window.open('plugins/kimchi/report-rename.html');
                 }
             }, {
+                id: reportGridID + '-download-button',
+                label: i18n['KCHDR6010M'],
+                class: 'fa fa-download',
+                disabled: true,
+                onClick: function(event) {
+                    var report = reportGrid.getSelected();
+                    if (!report) {
+                        return;
+                    }
+
+                    kimchi.downloadReport({
+                        file: report['uri']
+                    });
+                }
+            }, {
                 id: reportGridID + '-remove-button',
+                class: 'fa fa-minus-circle',
                 label: i18n['KCHDR6009M'],
+                critical: true,
                 disabled: true,
                 onClick: function(event) {
                     var report = reportGrid.getSelected();
-                    if(!report) {
+                    if (!report) {
                         return;
                     }
 
                     var settings = {
-                        title : i18n['KCHAPI6004M'],
-                        content : i18n['KCHDR6001M'],
-                        confirm : i18n['KCHAPI6002M'],
-                        cancel : i18n['KCHAPI6003M']
+                        title: i18n['KCHAPI6004M'],
+                        content: i18n['KCHDR6001M'],
+                        confirm: i18n['KCHAPI6002M'],
+                        cancel: i18n['KCHAPI6003M']
                     };
 
                     wok.confirm(settings, function() {
@@ -342,36 +396,21 @@ kimchi.host_main = function() {
                         }, function(result) {
                             listDebugReports();
                         }, function(error) {
-                           wok.message.error(error.responseJSON.reason);
+                            wok.message.error(error.responseJSON.reason);
                         });
                     });
                 }
-            }, {
-                id: reportGridID + '-download-button',
-                label: i18n['KCHDR6010M'],
-                disabled: true,
-                onClick: function(event) {
-                    var report = reportGrid.getSelected();
-                    if(!report) {
-                        return;
-                    }
-
-                    kimchi.downloadReport({
-                        file: report['uri']
-                    });
-                }
             }],
             onRowSelected: function(row) {
                 var report = reportGrid.getSelected();
                 // Only enable report buttons if the selected line is not a
                 // pending report
-                if (report['time'] == i18n['KCHDR6007M']) {
-                    var gridElement = $('#'+ reportGridID);
+                if (report['time'] === i18n['KCHDR6007M']) {
+                    var gridElement = $('#' + reportGridID);
                     var row = $('tr:contains(' + report['name'] + ')', gridElement);
                     enableReportButtons(false);
                     row.attr('class', '');
-                }
-                else {
+                } else {
                     enableReportButtons(true);
                 }
             },
@@ -379,26 +418,31 @@ kimchi.host_main = function() {
             fields: [{
                 name: 'name',
                 label: i18n['KCHDR6003M'],
-                'class': 'debug-report-name'
+                'class': 'debug-report-name',
+                type: 'name'
             }, {
                 name: 'time',
                 label: i18n['KCHDR6005M'],
-                'class': 'debug-report-time'
+                'class': 'debug-report-time',
+                type: 'description'
             }],
             data: reports
         });
     };
 
     var getPendingReports = function() {
-        var reports = []
-        var filter = 'status=running&target_uri=' + encodeURIComponent('^/plugins/kimchi/debugreports/*')
+        var reports = [];
+        var filter = 'status=running&target_uri=' + encodeURIComponent('^/plugins/kimchi/debugreports/*');
 
         kimchi.getTasksByFilter(filter, function(tasks) {
-            for(var i = 0; i < tasks.length; i++) {
+            for (var i = 0; i < tasks.length; i++) {
                 reportName = tasks[i].target_uri.replace(/^\/plugins\/kimchi\/debugreports\//, '') || i18n['KCHDR6012M'];
-                reports.push({'name': reportName, 'time': i18n['KCHDR6007M']})
+                reports.push({
+                    'name': reportName,
+                    'time': i18n['KCHDR6007M']
+                });
 
-                if(kimchi.trackingTasks.indexOf(tasks[i].id) >= 0) {
+                if (kimchi.trackingTasks.indexOf(tasks[i].id) >= 0) {
                     continue;
                 }
 
@@ -424,29 +468,28 @@ kimchi.host_main = function() {
 
     var listDebugReports = function() {
         kimchi.listReports(function(reports) {
-            pendingReports = getPendingReports();
-            allReports = pendingReports.concat(reports);
+            var pendingReports = getPendingReports();
+            var allReports = pendingReports.concat(reports);
             $('#debug-report-section').removeClass('hidden');
 
             // Row selection will be cleared so disable buttons here
             enableReportButtons(false);
 
-            if(reportGrid) {
+            if (reportGrid) {
                 reportGrid.setData(allReports);
-            }
-            else {
+            } else {
                 initReportGrid(allReports);
             }
 
             // Set id-debug-img to pending reports
             // It will display a loading icon
             var gridElement = $('#' + reportGridID);
-                $.each($('td:contains(' + i18n['KCHDR6007M']  + ')', gridElement), function(index, row) {
+            $.each($('td:contains(' + i18n['KCHDR6007M'] + ')', gridElement), function(index, row) {
                 $(row).parent().addClass('no-hover');
                 $(row).attr('id', 'id-debug-img');
             });
         }, function(error) {
-            if(error['status'] == 403) {
+            if (error['status'] === 403) {
                 $('#debug-report-section').addClass('hidden');
                 return;
             }
@@ -458,10 +501,9 @@ kimchi.host_main = function() {
     var restartButtonID = '#host-button-restart';
     var shutdownHost = function(params) {
         var settings = {
-            title : i18n['KCHAPI6004M'],
-            content : i18n['KCHHOST6008M'],
-            confirm : i18n['KCHAPI6002M'],
-            cancel : i18n['KCHAPI6003M']
+            content: i18n['KCHHOST6008M'],
+            confirm: i18n['KCHAPI6002M'],
+            cancel: i18n['KCHAPI6003M']
         };
 
         wok.confirm(settings, function() {
@@ -470,8 +512,8 @@ kimchi.host_main = function() {
             $(restartButtonID).prop('disabled', true);
             // Check if there is any VM is running.
             kimchi.listVMs(function(vms) {
-                for(var i = 0; i < vms.length; i++) {
-                    if(vms[i]['state'] === 'running') {
+                for (var i = 0; i < vms.length; i++) {
+                    if (vms[i]['state'] === 'running') {
                         wok.message.error.code('KCHHOST6001E');
                         $(shutdownButtonID).prop('disabled', false);
                         $(restartButtonID).prop('disabled', false);
@@ -480,39 +522,30 @@ kimchi.host_main = function() {
                 }
 
             });
-        }, function() {
-        });
+        }, function() {});
     };
 
     var initPage = function() {
-        $('#host-info-container .section-header').each(function(i, header) {
-            $('<span class="arrow"></span>').prependTo(header);
-            var toExpand = $(header).attr('aria-expanded') !== 'false';
-            expand(header, toExpand);
-        });
-
-        $('#host-info-container').on('click', '.section-header', function(event) {
-            var toExpand = $(this).attr('aria-expanded') === 'false';
-            expand(this, toExpand);
-        });
 
         $('#host-button-shutdown').on('click', function(event) {
+            event.preventDefault();
             shutdownHost(null);
         });
 
         $('#host-button-restart').on('click', function(event) {
+            event.preventDefault();
             shutdownHost({
                 reboot: true
             });
         });
 
         var setupUI = function() {
-            if (kimchi.capabilities == undefined) {
+            if (kimchi.capabilities === undefined) {
                 setTimeout(setupUI, 2000);
                 return;
             }
 
-            if((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool']!="None")) {
+            if ((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool'] !== "None")) {
                 initRepositoriesGrid(kimchi.capabilities['repo_mngt_tool']);
                 $('#repositories-section').switchClass('hidden', kimchi.capabilities['repo_mngt_tool']);
                 wok.topic('kimchi/repositoryAdded')
@@ -523,7 +556,7 @@ kimchi.host_main = function() {
                     .subscribe(listRepositories);
             }
 
-            if(kimchi.capabilities['update_tool']) {
+            if (kimchi.capabilities['update_tool']) {
                 $('#software-update-section').removeClass('hidden');
                 initSoftwareUpdatesGrid();
                 wok.topic('kimchi/softwareUpdated')
@@ -533,7 +566,7 @@ kimchi.host_main = function() {
                 });
             }
 
-            if(kimchi.capabilities['system_report_tool']) {
+            if (kimchi.capabilities['system_report_tool']) {
                 listDebugReports();
                 wok.topic('kimchi/debugReportAdded')
                     .subscribe(listDebugReports);
@@ -576,40 +609,40 @@ kimchi.host_main = function() {
                 }
             },
             diskIO: {
-                r: {
+                w: {
                     type: 'value',
                     base: 2,
                     fixed: 2,
                     unit: 'B/s',
-                    legend: i18n['KCHHOST6004M'],
+                    legend: i18n['KCHHOST6005M'],
+                    'class': 'disk-write',
                     points: []
                 },
-                w: {
+                r: {
                     type: 'value',
                     base: 2,
                     fixed: 2,
                     unit: 'B/s',
-                    legend: i18n['KCHHOST6005M'],
-                    'class': 'disk-write',
+                    legend: i18n['KCHHOST6004M'],
                     points: []
                 }
             },
             networkIO: {
-                r: {
+                s: {
                     type: 'value',
                     base: 2,
                     fixed: 2,
                     unit: 'B/s',
-                    legend: i18n['KCHHOST6006M'],
+                    legend: i18n['KCHHOST6007M'],
+                    'class': 'network-sent',
                     points: []
                 },
-                s: {
+                r: {
                     type: 'value',
                     base: 2,
                     fixed: 2,
                     unit: 'B/s',
-                    legend: i18n['KCHHOST6007M'],
-                    'class': 'network-sent',
+                    legend: i18n['KCHHOST6006M'],
                     points: []
                 }
             }
@@ -618,38 +651,36 @@ kimchi.host_main = function() {
         var cursor = SIZE;
 
         var add = function(stats) {
-            for(var key in stats) {
+            for (var key in stats) {
                 var item = stats[key];
-                for(var metrics in item) {
+                for (var metrics in item) {
                     var value = item[metrics]['v'];
                     var max = item[metrics]['max'];
                     var unifiedMetrics = statsArray[key][metrics];
                     var ps = unifiedMetrics['points'];
-                    if(!Array.isArray(value)){
+                    if (!Array.isArray(value)) {
                         ps.push(value);
-                        if(ps.length > SIZE + 1) {
+                        if (ps.length > SIZE + 1) {
                             ps.shift();
                         }
+                    } else {
+                        ps = ps.concat(value);
+                        ps.splice(0, ps.length - SIZE - 1);
+                        unifiedMetrics['points'] = ps;
                     }
-                    else{
-                        ps=ps.concat(value);
-                        ps.splice(0, ps.length-SIZE-1);
-                        unifiedMetrics['points']=ps;
-                    }
-                    if(max !== undefined) {
+                    if (max !== undefined) {
                         unifiedMetrics['max'] = max;
-                    }
-                    else {
-                        if(unifiedMetrics['type'] !== 'value') {
+                    } else {
+                        if (unifiedMetrics['type'] !== 'value') {
                             continue;
                         }
                         max = -Infinity;
                         $.each(ps, function(i, value) {
-                            if(value > max) {
+                            if (value > max) {
                                 max = value;
                             }
                         });
-                        if(max === 0) {
+                        if (max === 0) {
                             ++max;
                         }
                         max *= 1.1;
@@ -663,7 +694,7 @@ kimchi.host_main = function() {
         var get = function(which) {
             var stats = statsArray[which];
             var lines = [];
-            for(var k in stats) {
+            for (var k in stats) {
                 var obj = stats[k];
                 var line = {
                     type: obj['type'],
@@ -672,10 +703,10 @@ kimchi.host_main = function() {
                     fixed: obj['fixed'],
                     legend: obj['legend']
                 };
-                if(obj['max']) {
+                if (obj['max']) {
                     line['max'] = obj['max'];
                 }
-                if(obj['class']) {
+                if (obj['class']) {
                     line['class'] = obj['class'];
                 }
                 var ps = obj['points'];
@@ -700,104 +731,102 @@ kimchi.host_main = function() {
     };
 
     var Tracker = function(charts) {
-      var charts = charts;
-      var timer = null;
-      var statsPool = new StatsMgr();
-      var setCharts = function(newCharts) {
-          charts = newCharts;
-          for(var key in charts) {
-              var chart = charts[key];
-              chart.updateUI(statsPool.get(key));
-          }
-      };
-
-      var self = this;
-
-      var UnifyStats = function(stats) {
-          var result= {
-              cpu: {
-                  u: {
-                      v: stats['cpu_utilization']
-                  }
-              },
-              memory: {
-                  u: {
-                  }
-              },
-              diskIO: {
-                  r: {
-                      v: stats['disk_read_rate']
-                  },
-                  w: {
-                      v: stats['disk_write_rate']
-                  }
-              },
-              networkIO: {
-                  r: {
-                      v: stats['net_recv_rate']
-                  },
-                  s: {
-                      v: stats['net_sent_rate']
-                  }
-              }
-          };
-          if(Array.isArray(stats['memory'])){
-              result.memory.u['v']=[];
-              result.memory.u['max']=-Infinity;
-              for(var i=0;i<stats['memory'].length;i++){
-                  result.memory.u['v'].push(stats['memory'][i]['avail']);
-                  result.memory.u['max']=Math.max(result.memory.u['max'],stats['memory'][i]['total']);
-              }
-          }
-          else {
-              result.memory.u['v']=stats['memory']['avail'],
-              result.memory.u['max']=stats['memory']['total']
-          }
-          return(result);
-      };
-
-
-      var statsCallback = function(stats) {
-              var unifiedStats = UnifyStats(stats);
-              statsPool.add(unifiedStats);
-              for(var key in charts) {
-                  var chart = charts[key];
-                  chart.updateUI(statsPool.get(key));
-              }
-              timer = setTimeout(function() {
-                  continueTrack();
-              }, 1000);
-          };
-
-      var track = function() {
-          kimchi.getHostStatsHistory(statsCallback,
-            function() {
-                continueTrack();
-            });
-      };
+        var charts = charts;
+        var timer = null;
+        var statsPool = new StatsMgr();
+        var setCharts = function(newCharts) {
+            charts = newCharts;
+            for (var key in charts) {
+                var chart = charts[key];
+                chart.updateUI(statsPool.get(key));
+            }
+        };
+
+        var self = this;
+
+        var UnifyStats = function(stats) {
+            var result = {
+                cpu: {
+                    u: {
+                        v: stats['cpu_utilization']
+                    }
+                },
+                memory: {
+                    u: {}
+                },
+                diskIO: {
+                    w: {
+                        v: stats['disk_write_rate']
+                    },
+                    r: {
+                        v: stats['disk_read_rate']
+                    }
+                },
+                networkIO: {
+                    s: {
+                        v: stats['net_sent_rate']
+                    },
+                    r: {
+                        v: stats['net_recv_rate']
+                    }
+                }
+            };
+            if (Array.isArray(stats['memory'])) {
+                result.memory.u['v'] = [];
+                result.memory.u['max'] = -Infinity;
+                for (var i = 0; i < stats['memory'].length; i++) {
+                    result.memory.u['v'].push(stats['memory'][i]['avail']);
+                    result.memory.u['max'] = Math.max(result.memory.u['max'], stats['memory'][i]['total']);
+                }
+            } else {
+                result.memory.u['v'] = stats['memory']['avail'],
+                    result.memory.u['max'] = stats['memory']['total']
+            }
+            return (result);
+        };
 
-      var continueTrack = function() {
-          kimchi.getHostStats(statsCallback,
-            function() {
+
+        var statsCallback = function(stats) {
+            var unifiedStats = UnifyStats(stats);
+            statsPool.add(unifiedStats);
+            for (var key in charts) {
+                var chart = charts[key];
+                chart.updateUI(statsPool.get(key));
+            }
+            timer = setTimeout(function() {
                 continueTrack();
-            });
-      };
-
-      var destroy = function() {
-          timer && clearTimeout(timer);
-          timer = null;
-      };
-
-      return {
-        setCharts: setCharts,
-        start: track,
-        stop: destroy
-      };
+            }, 1000);
+        };
+
+        var track = function() {
+            kimchi.getHostStatsHistory(statsCallback,
+                function() {
+                    continueTrack();
+                });
+        };
+
+        var continueTrack = function() {
+            kimchi.getHostStats(statsCallback,
+                function() {
+                    continueTrack();
+                });
+        };
+
+        var destroy = function() {
+            timer && clearTimeout(timer);
+            timer = null;
+        };
+
+        return {
+            setCharts: setCharts,
+            start: track,
+            stop: destroy
+        };
     };
 
     var initTracker = function() {
         // TODO: Extend tabs with onUnload event to unregister timers.
-        if(kimchi.hostTimer) {
+        if (kimchi.hostTimer) {
             kimchi.hostTimer.stop();
             delete kimchi.hostTimer;
         }
@@ -825,20 +854,19 @@ kimchi.host_main = function() {
             })
         };
 
-        if(kimchi.hostTimer) {
+        if (kimchi.hostTimer) {
             kimchi.hostTimer.setCharts(trackedCharts);
-        }
-        else {
+        } else {
             kimchi.hostTimer = new Tracker(trackedCharts);
             kimchi.hostTimer.start();
         }
     };
 
     $('#host-root-container').on('remove', function() {
-        if(kimchi.hostTimer) {
+        if (kimchi.hostTimer) {
             kimchi.hostTimer.stop();
             delete kimchi.hostTimer;
-            }
+        }
 
         repositoriesGrid && repositoriesGrid.destroy();
         wok.topic('kimchi/repositoryAdded')
diff --git a/src/wok/plugins/kimchi/ui/pages/host.html.tmpl b/src/wok/plugins/kimchi/ui/pages/host.html.tmpl
index d87debc..3c6eda8 100644
--- a/src/wok/plugins/kimchi/ui/pages/host.html.tmpl
+++ b/src/wok/plugins/kimchi/ui/pages/host.html.tmpl
@@ -23,153 +23,124 @@
 #silent _ = t.gettext
 #silent _t = t.gettext
 <!DOCTYPE html>
-<html>
+<html> 
 <head>
 <link rel="stylesheet" href="plugins/kimchi/css/theme-default.min.css">
 <script src="plugins/kimchi/js/kimchi.min.js"></script>
 </head>
 <body>
 <div id="host-root-container">
-    <div class="toolbar">
-        <div class="tools">
-        </div>
+<nav class="navbar navbar-default toolbar">
+  <div class="container">
+    <!-- Brand and toggle get grouped for better mobile display -->
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#toolbar" aria-expanded="false">
+        <span class="sr-only">Toggle navigation</span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+    </div>
+
+    <!-- Collect the nav links, forms, and other content for toggling -->
+    <div class="collapse navbar-collapse" id="toolbar">
+      <ul class="nav navbar-nav navbar-right tools">
+        <li><a id="host-button-restart" href="javascript:void(0);"><i class="fa fa-refresh"></i><span>$_("Restart")</span></a></li>
+        <li><a id="host-button-shutdown" href="javascript:void(0);"><i class="fa fa-ban"></i><span>$_("Shut down")</span></a></li>
+        <!-- <li><a href="javascript:void(0);"><i class="fa fa-desktop"></i><span>$_("Connect")</span></a></li> -->
+      </ul>
     </div>
+  </div>
+</nav>
     <div id="host-content-container" class="empty-when-logged-off"></div>
 </div>
 
 <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">
-                <button id="host-button-shutdown" class="btn-normal-1 stop">
-                    <div class="button-icon action-icon-stop"></div>
-                    $_("Shut down")
-                </button>
-                <button id="host-button-restart" class="btn-normal-1 restart">
-                    <div class="button-icon action-icon-restart"></div>
-                    $_("Restart")
-                </button>
-                <button class="btn-normal-1 connect" disabled="disabled">
-                    <div class="button-icon action-icon-connect"></div>
-                    $_("Connect")
-                </button>
-            </div>
-            <div class="host-section">
-                <h3 class="section-header"
-                    aria-expanded="false"
-                    aria-controls="content-sys-info">
-                    $_("Basic Information")
-                </h3>
-                <div id="content-sys-info" class="section-content">
-                    <div class="section-row">
-                        <div class="section-label">$_("OS Distro")</div>
-                        <div class="section-value">{os_distro}</div>
-                    </div>
-                    <div class="section-row">
-                        <div class="section-label">$_("OS Version")</div>
-                        <div class="section-value">{os_version}</div>
-                    </div>
-                    <div class="section-row">
-                        <div class="section-label">$_("OS Code Name")</div>
-                        <div class="section-value">{os_codename}</div>
-                    </div>
-                    <div class="section-row">
-                        <div class="section-label">$_("Processor")</div>
-                        <div class="section-value">{cpu_model}</div>
-                    </div>
-                    <div class="section-row">
-                        <div class="section-label">$_("CPU(s)")</div>
-                        <div class="section-value">{cpus}</div>
-                    </div>
-                    <div class="section-row">
-                        <div class="section-label">$_("Memory")</div>
-                        <div class="section-value">{memory}</div>
+<div class="host-dashboard">
+    <div class="container">
+        <div id="alert-container"></div>
+        <div id="content-sys-statistics" class="row">
+            <div class="col-md-3">
+                <div id="cpu-dashboard">
+                    <h3 class="section-label">$_("CPU")</h3>
+                    <div class="section-value">
+                        <div id="container-chart-cpu" class="inline-block"></div>
                     </div>
                 </div>
             </div>
-            <div class="host-section">
-                <h3 class="section-header"
-                    aria-controls="content-sys-statistics">
-                    $_("System Statistics")
-                </h3>
-                <div id="content-sys-statistics" class="section-content">
-                    <div class="section-row">
-                        <div class="section-label">$_("CPU")</div>
-                        <div class="section-value">
-                            <div id="container-chart-cpu" class="inline-block"></div>
-                        </div>
-                    </div>
-                    <div class="section-row">
-                        <div class="section-label">$_("Memory")</div>
-                        <div class="section-value">
-                            <div id="container-chart-memory" class="inline-block"></div>
-                        </div>
-                    </div>
-                    <div class="section-row">
-                        <div class="section-label">$_("Disk I/O")</div>
-                        <div class="section-value">
-                            <div id="container-chart-disk-io" class="inline-block"></div>
-                        </div>
-                    </div>
-                    <div class="section-row">
-                        <div class="section-label">$_("Network I/O")</div>
-                        <div class="section-value">
-                            <div id="container-chart-network-io" class="inline-block"></div>
-                        </div>
+            <div class="col-md-3">
+                <div id="memory-dashboard">
+                    <h3 class="section-label">$_("Memory")</h3>
+                    <div class="section-value">
+                        <div id="container-chart-memory" class="inline-block"></div>
                     </div>
                 </div>
             </div>
-            <div id="software-update-section" class="host-section hidden">
-                <h3 class="section-header"
-                    aria-controls="content-software-update">
-                    $_("Software Updates")
-                </h3>
-                <div id="content-software-update" class="section-content">
-                    <div class="section-row">
-                        <div class="section-value">
-                            <div id="software-updates-grid-container"></div>
-                            <div id="software-updates-progress-container" class="hidden">
-                                <label for="software-updates-progress-textarea">$_("Update Progress")</label>
-                                <textarea id="software-updates-progress-textarea" readonly></textarea>
-                            </div>
-                        </div>
+            <div class="col-md-3">
+                <div id="disk-dashboard">
+                    <h3 class="section-label">$_("Disk I/O")</h3>
+                    <div class="section-value">
+                        <div id="container-chart-disk-io" class="inline-block"></div>
                     </div>
                 </div>
             </div>
-            <div id="repositories-section" class="host-section hidden">
-                <h3 class="section-header"
-                    aria-controls="content-repositories">
-                    $_("Repositories")
-                </h3>
-                <div id="content-repositories" class="section-content">
-                    <div class="section-row">
-                        <div class="section-value">
-                            <div id="repositories-grid-container"></div>
-                        </div>
+            <div class="col-md-3">
+                <div id="network-dashboard">
+                    <h3 class="section-label">$_("Network I/O")</h3>
+                    <div class="section-value">
+                        <div id="container-chart-network-io" class="inline-block"></div>
                     </div>
                 </div>
             </div>
-            <div id="debug-report-section" class="host-section hidden">
-                <h3 class="section-header"
-                    aria-controls="content-sys-reports">
-                    $_("Debug Reports")
-                </h3>
-                <div id="content-sys-reports" class="section-content">
-                    <div class="section-row">
-                        <div class="section-value">
-                            <div id="available-reports-grid-container"></div>
-                        </div>
+        </div>
+    </div>
+</div>
+<div class="host-panel">
+    <div class="container">
+        <div id="host-info-container" class="row">
+            <div id="content-sys-info" class="panel panel-default col-md-4">
+                <div class="panel-heading">
+                    <h3 class="panel-title">$_("Basic Information")</h3>
+                </div>
+                <div class="panel-body">
+                    <dl class="basic-information-list">
+                        <dt>{os_distro}</dt>
+                        <dd>$_("OS Distro")</dd>
+                        <dt>{os_version}</dt>
+                        <dd>$_("OS Version")</dd>
+                        <dt>{os_codename}</dt>
+                        <dd>$_("OS Code Name")</dd>
+                        <dt>{cpu_model}</dt>
+                        <dd>$_("Processor")</dd>
+                        <dt>{cpus}</dt>
+                        <dd>$_("CPU(s)")</dd>
+                        <dt>{memory}</dt>
+                        <dd>$_("Memory")</dd>
+                    </dl>
+                </div>
+            </div>
+            <div id="repositories-grid-container" class="col-md-4"></div>
+            <div id="available-reports-grid-container" class="col-md-4"></div>
+        </div>
+        <div class="row">
+            <div id="software-update-section" class="panel panel-default col-md-12">
+                <div class="panel-heading">
+                    <h3 class="panel-title">$_("Software Updates")</h3>
+                </div>
+                <div id="content-software-update" class="panel panel-default">
+                    <div id="software-updates-grid-container"></div>
+                    <div id="software-updates-progress-container" class="hidden">
+                        <label for="software-updates-progress-textarea">$_("Update Progress")</label>
+                        <textarea id="software-updates-progress-textarea" readonly></textarea>
                     </div>
                 </div>
             </div>
         </div>
     </div>
+</div>
 </script>
-
+<div id="modalWindow" class="modal fade host-modal" tabindex="-1" role="dialog" aria-labelledby="hostsModalLabel" aria-hidden="true">
+</div>
 <script type="text/javascript">
     kimchi.host_main();
 </script>
diff --git a/src/wok/plugins/kimchi/ui/pages/report-add.html.tmpl b/src/wok/plugins/kimchi/ui/pages/report-add.html.tmpl
index 25bf0a9..8d6fb38 100644
--- a/src/wok/plugins/kimchi/ui/pages/report-add.html.tmpl
+++ b/src/wok/plugins/kimchi/ui/pages/report-add.html.tmpl
@@ -22,35 +22,25 @@
 #silent _ = t.gettext
 #silent _t = t.gettext
 <!DOCTYPE html>
-<div id="report-add-window" class="window">
-    <header>
-        <h1 class="title h1 grey">$_("Generate a New Debug Report")</h1>
-    </header>
-    <div class="content">
-        <form id="form-report-add">
-            <section class="form-section">
-                <h2>
-                    <label for="report-name-textbox">$_("Report Name")</label>
-                </h2>
-                <div class="field">
-                    <input type="text" class="text" id="report-name-textbox" name="name" />
-                    <span class="icon-info-circled light-grey c1"></span>
-                    <span class="info-add-debug-report">
-                        $_("The name used to identify the report. If omitted, a name will be chosen based on current time. Name can contain: letters, digits, underscore (\"_\") and hyphen (\"-\").")
-                    </span>
-                </div>
-            </section>
-        </form>
-    </div>
-    <footer>
-        <div class="btn-group">
-            <button id="button-report-add" class="btn-normal"><span class="text">$_("Generate")</span></button>
-            <button id="button-report-cancel" class="btn-normal close" type="button">
-                <span calss="text">$_("Cancel")</span>
-            </button>
+<div class="modal-content">
+  <div class="modal-header">
+    <h4 class="modal-title">$_("Generate a New Debug Report")</h4>
+  </div>
+  <div class="modal-body">
+    <form id="form-report-add">
+        <div class="form-group">
+            <label for="report-name-textbox">$_("Report Name")</label>
+            <input type="text" class="form-control" id="report-name-textbox" name="name" />
+            <p class="help-block"><i class="fa fa-info-circle"></i> $_("The name used to identify the report. If omitted, a name will be chosen based on current time. Name can contain: letters, digits, underscore (\"_\") and hyphen (\"-\").")
+            </p>
         </div>
-    </footer>
+    </form>
+  </div>
+  <div class="modal-footer">
+    <button type="button" id="button-report-add" class="btn btn-default" data-dismiss="modal">$_("Generate")</button>
+    <button type="button" id="button-report-cancel" class="btn btn-default" data-dismiss="modal">$_("Cancel")</button>
+  </div>
 </div>
 <script>
     kimchi.report_add_main();
-</script>
+</script> 
\ No newline at end of file
diff --git a/src/wok/plugins/kimchi/ui/pages/report-rename.html.tmpl b/src/wok/plugins/kimchi/ui/pages/report-rename.html.tmpl
index 90a0a80..f89da19 100644
--- a/src/wok/plugins/kimchi/ui/pages/report-rename.html.tmpl
+++ b/src/wok/plugins/kimchi/ui/pages/report-rename.html.tmpl
@@ -22,35 +22,27 @@
 #silent _ = t.gettext
 #silent _t = t.gettext
 <!DOCTYPE html>
-<div id="report-rename-window" class="window">
-    <header>
-        <h1 class="title h1 grey">$_("Rename a Debug Report")</h1>
-    </header>
-    <div class="content">
+<div class="modal-content">
+    <div class="modal-header">
+        <h4 class="modal-title">$_("Rename a Debug Report")</h4>
+    </div>
+    <div class="modal-body">
         <form id="form-report-rename">
-            <section class="form-section">
-                <h2>
-                    <label for="report-name-textbox">$_("Report Name")</label>
-                </h2>
-                <div class="field">
-                    <input type="text" class="text" id="report-name-textbox" name="name" />
-                    <span class="icon-info-circled light-grey c1"></span>
-                    <span class="info-debug-report-rename">
-                        $_("The name used to identify the report. Name can contain: letters, digits and hyphen (\"-\").")
-                    </span>
-                </div>
-            </section>
+            <div class="form-group">
+                <label for="report-name-textbox">$_("Report Name")</label>
+                <input type="text" class="form-control" id="report-name-textbox" name="name" />
+                <p class="help-block"><i class="fa fa-info-circle"></i> $_("The name used to identify the report. Name can contain: letters, digits and hyphen (\"-\").")
+                </p>
+            </div>
         </form>
     </div>
-    <footer>
-        <div class="btn-group">
-            <button id="button-report-rename" class="btn-normal"><span class="text">$_("Submit")</span></button>
-            <button id-"button-report-rename-cancel" class="btn-normal close" type="button">
-                <span class="text">$_("Cancel")</span>
-            </button>
-        </div>
-    </footer>
+    <div class="modal-footer">
+        <button type="button" id="button-report-rename" class="btn btn-default" data-dismiss="modal">$_("Submit")</button>
+        <button type="button" id- "button-report-rename-cancel" class="btn btn-default" type="button" data-dismiss="modal">$_("Cancel")
+        </button>
+    </div>
 </div>
 <script>
     kimchi.report_rename_main();
 </script>
+ 
\ No newline at end of file
diff --git a/src/wok/plugins/kimchi/ui/pages/repository-add.html.tmpl b/src/wok/plugins/kimchi/ui/pages/repository-add.html.tmpl
index 950252a..6da8c05 100644
--- a/src/wok/plugins/kimchi/ui/pages/repository-add.html.tmpl
+++ b/src/wok/plugins/kimchi/ui/pages/repository-add.html.tmpl
@@ -21,93 +21,51 @@
 #silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
 #silent _ = t.gettext
 #silent _t = t.gettext
-<div id="repository-add-window" class="window">
-    <form id="form-repository-add">
-        <header class="window-header">
-            <h1 class="title h1 grey">$_("Add a Repository")</h1>
-        </header>
-        <section>
-            <div class="content">
-                <div class="form-section yum">
-                    <h2>$_("Identifier")</h2>
-                    <div class="field">
-                        <div class="textbox-wrapper">
-                            <input type="text" class="text" name="repo_id" />
-                        </div>
-                        <div class="icon-info-circled light-grey c1 help-inline"></div>
-                        <p class="text-help help-inline">
-                            $_("Single word, unique identifier for the repository.")
+<div class="modal-content">
+    <div class="modal-header">
+        <h4 class="modal-title">$_("Add a Repository")</h4>
+    </div>
+    <div class="modal-body">
+        <form id="form-repository-add">
+                <div class="form-group yum">
+                        <label for="repo_id">$_("Identifier")</label>
+                        <input type="text" class="form-control" name="repo_id" />
+                        <p class="help-block"><i class="fa fa-info-circle"></i> $_("Single word, unique identifier for the repository.")
                         </p>
-                    </div>
                 </div>
-                <section class="form-section yum">
-                    <h2>$_("Name")</h2>
-                    <div class="field">
-                        <div class="textbox-wrapper">
-                            <input type="text" class="text" name="config[repo_name]" />
-                        </div>
-                        <div class="icon-info-circled light-grey c1 help-inline"></div>
-                        <p class="text-help help-inline">
-                            $_("Textual name for the repository.")
+                <div class="form-group yum">
+                    <label for="repo_name">$_("Name")</label>
+                        <input type="text" class="form-control" id="repo_name" name="config[repo_name]" />
+                        <p class="help-block"><i class="fa fa-info-circle"></i> $_("Textual name for the repository.")
                         </p>
-                    </div>
-                </section>
-                <section class="form-section">
-                    <h2>$_("URL")<span class="required" role="presentation" title='$_("Required Field")'>*</span></h2>
-                    <div class="field">
-                        <div class="textbox-wrapper">
-                            <input type="text" class="text required" name="baseurl" />
-                        </div>
-                        <div class="icon-info-circled light-grey c1 help-inline"></div>
-                        <p class="text-help help-inline">
-                            $_("URL to the repository. Supported protocols are http, ftp, and file.")
-                        </p>
-                    </div>
-                    <div class="field yum">
-                        <p class="yum">
-                            <input type="checkbox" name="isMirror" value="true" id="isMirror" />
-                            <label id="isMirrorLabel" for="isMirror">$_("Repository is a mirror")</label>
-                        </p>
-                    </div>
-                </section>
-                <section class="form-section repository-dist deb">
-                    <h2>$_("Distribution")</h2>
-                    <div class="field">
-                        <div class="textbox-wrapper">
-                            <input type="text" class="text" name="config[dist]" />
-                        </div>
-                        <div class="icon-info-circled light-grey c1 help-inline"></div>
-                        <p class="text-help help-inline">
-                            $_("Distribution of the DEB repository.")
-                        </p>
-                    </div>
-                </section>
-                <section class="form-section repository-comps deb">
-                    <h2>$_("Components")</h2>
-                    <div class="field">
-                        <div class="textbox-wrapper">
-                            <input type="text" class="text" name="config[comps]" />
-                        </div>
-                        <div class="icon-info-circled light-grey c1 help-inline"></div>
-                        <p class="text-help help-inline">
-                            $_("List of components in DEB repository.")
-                        </p>
-                    </div>
-                </section>
-            </div>
-        </section>
-        <footer>
-            <div class="btn-group">
-                <button type="submit" id="button-repository-add" class="btn-normal" disabled="disabled">
-                    <span class="text">$_("Add")</span>
-                </button>
-                <button type="button" id="button-repository-close" class="btn-normal close">
-                    <span class="text">$("Cancel")</span>
-                </button>
-            </div>
-        </footer>
-    </form>
+                </div>
+                <div class="form-group">                
+                        <label for="baseurl">$_("URL")<span class="required" role="presentation" title='$_("Required Field")'>*</span></label>
+                        <input type="text" class="form-control required" id="baseurl" name="baseurl" />
+                        <p class="help-block"><i class="fa fa-info-circle"></i> $_("URL to the repository. Supported protocols are http, ftp, and file.")</p>
+                </div>
+                <div class="checkbox yum">
+                            <label id="isMirrorLabel" for="isMirror">
+                            <input type="checkbox" name="isMirror" value="true" id="isMirror" /> $_("Repository is a mirror")</label>
+                </div>
+                <div class="form-group repository-dist deb">
+                    <label>$_("Distribution")</label>
+                    <input type="text" class="form-control" name="config[dist]" />
+                    <p class="help-block"><i class="fa fa-info-circle"></i> $_("Distribution of the DEB repository.")</p>
+                </div>
+                <div class="form-group repository-comps deb">
+                    <label>$_("Components")</label>
+                    <input type="text" class="form-control" name="config[comps]" />
+                    <p class="help-block"><i class="fa fa-info-circle"></i> $_("List of components in DEB repository.")</p>
+                </div>
+        </form>
+    </div>
+    <div class="modal-footer">
+                <button type="submit" id="button-repository-add" class="btn btn-default" disabled="disabled">$_("Add")</button>
+                <button type="button" id="button-repository-close" data-dismiss="modal" class="btn btn-default">$("Cancel")</button>
+    </div>
 </div>
 <script>
     kimchi.repository_add_main();
 </script>
+ 
\ No newline at end of file
diff --git a/src/wok/plugins/kimchi/ui/pages/repository-edit.html.tmpl b/src/wok/plugins/kimchi/ui/pages/repository-edit.html.tmpl
index e5a3cfb..33e5eee 100644
--- a/src/wok/plugins/kimchi/ui/pages/repository-edit.html.tmpl
+++ b/src/wok/plugins/kimchi/ui/pages/repository-edit.html.tmpl
@@ -21,97 +21,57 @@
 #silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
 #silent _ = t.gettext
 #silent _t = t.gettext
-
-<div id="repository-edit-window" class="window">
-    <form id="form-repository-edit">
-        <header>
-            <h1 class="title h1 grey">$_("Edit Repository")</h1>
-        </header>
-        <div class="content">
-            <section id="form-repository-edit">
-                <fieldset class="repository-edit-fieldset">
-                    <div class="repository-id yum">
-                        <div class="repository-edit-wrapper-label">
-                            <label for="repository-edit-id-textbox">$_("ID")</label>
-                        </div>
-                        <div class="repository-edit-wrapper-controls">
-                            <input id="repository-edit-id-textbox" name="repo_id" type="text" disabled="disabled" readonly="readonly"/>
-                        </div>
-                    </div>
-                    <div class="repository-name yum">
-                        <div class="repository-edit-wrapper-label">
-                            <label for="repository-edit-name-textbox">$_("Name")</label>
-                        </div>
-                        <div class="repository-edit-wrapper-controls">
-                            <input id="repository-edit-name-textbox" class="yum" name="config[repo_name]" type="text" />
-                        </div>
-                    </div>
-                    <div class="repository-url">
-                        <div class="repository-edit-wrapper-label">
-                            <label for="repository-edit-baseurl-textbox">$_("URL")</label>
-                        </div>
-                        <div class="repository-edit-wrapper-controls">
-                            <input id="repository-edit-baseurl-textbox" name="baseurl" type="text" />
-                        </div>
-                    </div>
-                    <div class="repository-dist deb">
-                        <div class="repository-edit-wrapper-label">
-                            <label for="repository-edit-urlargs-textbox">$_("Distribution")</label>
-                        </div>
-                        <div class="repository-edit-wrapper-controls">
-                            <input id="repository-edit-urlargs-textbox" class="deb" name="config[dist]" type="text" />
-                        </div>
-                    </div>
-                    <div class="repository-mirrorlist yum">
-                        <div class="repository-edit-wrapper-label">
-                            <label for="repository-edit-urlargs-textbox">$_("Mirror List URL")</label>
-                        </div>
-                        <div class="repository-edit-wrapper-controls">
-                            <input id="repository-edit-urlargs-textbox" class="yum" name="config[mirrorlist]" type="text" />
-                        </div>
-                    </div>
-                    <div class="repository-comps deb">
-                        <div class="repository-edit-wrapper-label">
-                            <label for="repository-edit-urlargs-textbox">$_("Components")</label>
-                        </div>
-                        <div class="repository-edit-wrapper-controls">
-                            <input id="repository-edit-urlargs-textbox" class="deb" name="config[comps]" type="text" />
-                        </div>
-                    </div>
-                    <div class="repository-gpgkey yum">
-                        <div class="repository-edit-wrapper-label">
-                            <label for="repository-edit-gpgkey-textbox">$_("GPG Key")</label>
-                        </div>
-                        <div class="repository-edit-wrapper-controls">
-                            <input id="repository-edit-gpgkey-textbox" class="yum" name="config[gpgkey]" type="text" />
-                        </div>
-                    </div>
-                    <div class="repository-gpgcheck yum">
-                        <div class="repository-edit-wrapper-label">
-                            <label>$_("GPG Check")</label>
-                        </div>
-                        <div class="repository-edit-wrapper-controls">
-                            <input id="repository-edit-gpgcheck-radio-true" class="yum" name="config[gpgcheck]" type="radio" value="true" />
-                            <label for="repository-edit-gpgcheck-radio-true">$_("Yes")</label>
-                            <input id="repository-edit-gpgcheck-radio-false" class="yum" name="config[gpgcheck]" type="radio" value="false" />
-                            <label for="repository-edit-gpgcheck-radio-false">$_("No")</label>
-                        </div>
-                    </div>
-                </fieldset>
-            </section>
-        </div>
-        <footer>
-            <div class="btn-group">
-                <button type="submit" id="repository-edit-button-save" class="btn-normal">
-                    <span class="text">$_("Save")</span>
-                </button>
-                <button type="button" id="repository-edit-button-cancel" class="close btn-normal">
-                    <span class="text">$_("Cancel")</span>
-                </button>
+<div class="modal-content">
+    <div class="modal-header">
+        <h4 class="modal-title">$_("Edit Repository")</h4>
+    </div>
+    <div class="modal-body">
+        <form id="form-repository-edit">
+            <div class="form-group repository-id yum">
+                <label for="repository-edit-id-textbox">$_("ID")</label>
+                <input id="repository-edit-id-textbox" class="form-control" name="repo_id" type="text" disabled="disabled" readonly="readonly" />
             </div>
-        </footer>
-    </form>
+            <div class="form-group repository-name yum">
+                <label for="repository-edit-name-textbox">$_("Name")</label>
+                <input id="repository-edit-name-textbox" class="form-control yum" name="config[repo_name]" type="text" />
+            </div>
+            <div class="form-group repository-url">
+                <label for="repository-edit-baseurl-textbox">$_("URL")</label>
+                <input id="repository-edit-baseurl-textbox" class="form-control" name="baseurl" type="text" />
+            </div>
+            <div class="form-group repository-dist deb">
+                <label for="repository-edit-urlargs-textbox">$_("Distribution")</label>
+                <input id="repository-edit-urlargs-textbox" class="form-control deb" name="config[dist]" type="text" />
+            </div>
+            <div class="form-group repository-mirrorlist yum">
+                <label for="repository-edit-urlargs-textbox">$_("Mirror List URL")</label>
+                <input id="repository-edit-urlargs-textbox" class="form-control yum" name="config[mirrorlist]" type="text" />
+            </div>
+            <div class="form-group repository-comps deb">
+                <label for="repository-edit-urlargs-textbox">$_("Components")</label>
+                <input id="repository-edit-urlargs-textbox" class="form-control deb" name="config[comps]" type="text" />
+            </div>
+            <div class="form-group repository-gpgkey yum">
+                <label for="repository-edit-gpgkey-textbox">$_("GPG Key")</label>
+                <input id="repository-edit-gpgkey-textbox" class="form-control yum" name="config[gpgkey]" type="text" />
+            </div>
+            <div class="form-group repository-gpgcheck yum">
+                <label>$_("GPG Check")</label>
+                <label for="repository-edit-gpgcheck-radio-true" class="radio inline control-label">
+                    <input id="repository-edit-gpgcheck-radio-true" class="yum" name="config[gpgcheck]" type="radio" value="true" /> $_("Yes")
+                </label>
+                <label for="repository-edit-gpgcheck-radio-false" class="radio inline control-label">
+                    <input id="repository-edit-gpgcheck-radio-false" class="yum" name="config[gpgcheck]" type="radio" value="false" /> $_("No")
+                </label>
+            </div>
+        </form>
+    </div>
+    <div class="modal-footer">
+        <button type="submit" id="repository-edit-button-save" class="btn btn-default">$_("Save")</button>
+        <button type="button" id="repository-edit-button-cancel" class="btn btn-default">$_("Cancel")</button>
+    </div>
 </div>
 <script type="text/javascript">
     kimchi.repository_edit_main();
 </script>
+ 
\ No newline at end of file
-- 
1.9.3




More information about the Kimchi-devel mailing list