[PATCH v2] [Kimchi] Issue #921: Peers button disappears

From: Samuel Guimarães <sguimaraes943@gmail.com> This patch moves peers list from the drop-down on the top navigation bar to a DataTable that will be rendered on Host Dashboard if the user has Gingerbased installed. Samuel Guimarães (1): Issue #921: Peers button disappears root.py | 6 ++ ui/js/kimchi.peers.js | 145 ++++++++++++++++++++++++++++++++++++++++++++++++ ui/js/src/kimchi.api.js | 14 ----- ui/pages/i18n.json.tmpl | 4 +- 4 files changed, 154 insertions(+), 15 deletions(-) create mode 100644 ui/js/kimchi.peers.js -- 2.5.5

From: Samuel Guimarães <sguimaraes943@gmail.com> This commit moves peers list from the drop-down on the top navigation bar to a DataTable that will be rendered on Host Dashboard if the user has Gingerbased installed. Signed-off-by: Samuel Guimarães <sguimaraes943@gmail.com> --- root.py | 6 ++ ui/js/kimchi.peers.js | 145 ++++++++++++++++++++++++++++++++++++++++++++++++ ui/js/src/kimchi.api.js | 14 ----- ui/pages/i18n.json.tmpl | 4 +- 4 files changed, 154 insertions(+), 15 deletions(-) create mode 100644 ui/js/kimchi.peers.js diff --git a/root.py b/root.py index 90680b4..faa9eb9 100644 --- a/root.py +++ b/root.py @@ -67,6 +67,12 @@ class Kimchi(WokRoot): self.domain = 'kimchi' self.messages = messages + self.extends = { + "/plugins/gingerbase": { + "host-dashboard.html": "/plugins/kimchi/js/kimchi.peers.js" + } + } + # Some paths or URI's present in the objectstore have changed after # Kimchi 2.0.0 release. Check here if an upgrade in the schema and data # are necessary. diff --git a/ui/js/kimchi.peers.js b/ui/js/kimchi.peers.js new file mode 100644 index 0000000..36ac867 --- /dev/null +++ b/ui/js/kimchi.peers.js @@ -0,0 +1,145 @@ +/* + * Project Kimchi + * + * Copyright IBM Corp, 2013-2016 + * + * 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. + */ + +var kimchi = { + + getPeers: function(suc, err) { + wok.requestJSON({ + url: 'plugins/kimchi/peers', + type: 'GET', + contentType: 'application/json', + dataType: 'json', + resend: true, + success: suc, + error: err ? err : function(data) { + wok.message.error(data.responseJSON.reason); + } + }); + }, + + initPeers: function() { + + var peersAccordion = "<div class='panel-group federation-enabled accordion' id='peers-content-area-accordion' role='tablist' aria-multiselectable='true'>" + + "<h3>" + + "<a role='button' aria-expanded='true' data-toggle='collapse' data-parent='#peers-content-area-accordion' href='#peers-content-area' aria-expanded='false' aria-controls='peers-content-area' class=''>" + + "<span class='accordion-icon'></span>" + + "<span class='accordion-text' id='#peers-title'>"+i18n['KCHPEERS0001M']+"</span>" + + "</a>" + + "</h3>" + + "<div id='peers-content-area' class='panel-collapse collapse in' role='tabpanel' aria-labelledby='peers-title'>" + + "<div id='peers-alert-container'></div>" + + "<div class='row'>" + + "<div class='col-sm-12'>" + + "<table id='peers-list' class='table table-striped' cellspacing='0' width='100%''>" + + "<thead>" + + "<tr>" + + "<th>" + i18n['KCHPEERS0001M'] + "</th>" + + "</tr>" + + "</thead>" + + "</table>" + + "</div>" + + "</div>" + + "<div class='wok-mask' role='presentation'>" + + "<div class='wok-mask-loader-container'>" + + "<div class='wok-mask-loading'>" + + "<div class='wok-mask-loading-icon'></div>" + + "<div class='wok-mask-loading-text'>" + i18n['WOKGRD6001M'] + "</div>" + + "</div>" + + "</div>" + + "</div>" + + "</div>" + + "</div>"; + + var peersDatatableTable; + var peers = new Array(); + + $('#peers-container > div').append(peersAccordion); + + var peersDatatable = function(nwConfigDataSet) { + peersDatatableTable = $('#peers-list').DataTable({ + "processing": true, + "data": peers, + "language": { + "emptyTable": i18n['WOKSETT0010M'] + }, + "order": [], + "paging": false, + "dom": '<"row"<"col-sm-12"t>>', + "scrollY": "269px", + "scrollCollapse": true, + "columnDefs": [{ + "targets": 0, + "searchable": false, + "orderable": false, + "width": "100%", + "className": "tabular-data", + "render": function(data, type, full, meta) { + return '<a href="' + data + '" target="_blank">' + data + '</a>'; + } + }], + "initComplete": function(settings, json) { + $('#peers-content-area > .wok-mask').addClass('hidden'); + } + }); + }; + + var getPeers = function() { + kimchi.getPeers(function(result) { + peers.length = 0; + for (var i = 0; i < result.length; i++) { + var tempArr = []; + tempArr.push(result[i]); + peers.push(tempArr); + } + peersDatatable(peers); + }, function(err) { + wok.message.error(err.responseJSON.reason, '#peers-alert-container', true); + }); + }; + getPeers(); + + }, + + getConfig: function(suc, err, done) { + done = typeof done !== 'undefined' ? done : function() {}; + wok.requestJSON({ + url: "plugins/kimchi/config", + type: "GET", + contentType: "application/json", + dataType: "json", + success: suc, + error: err, + complete: done + }); + } +} + +$(document).ready(function() { + // Peers check + if (typeof kimchi.getConfig == 'function') { + kimchi.getConfig(function(config) { + if (config.federation) { + kimchi.initPeers(); + } else { + $("#host-root-container > #peers-container").remove(); + } + }); + } else { + $("#host-root-container > #peers-container").remove(); + } +}); diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js index 740d922..a9ef95c 100644 --- a/ui/js/src/kimchi.api.js +++ b/ui/js/src/kimchi.api.js @@ -1071,20 +1071,6 @@ var kimchi = { }); }, - getPeers : function(suc, err) { - wok.requestJSON({ - url : 'plugins/kimchi/peers', - type : 'GET', - contentType : 'application/json', - dataType : 'json', - resend : true, - success : suc, - error : err ? err : function(data) { - wok.message.error(data.responseJSON.reason); - } - }); - }, - getVMPCIDevices : function(id, suc, err) { wok.requestJSON({ url : 'plugins/kimchi/vms/' + encodeURIComponent(id) + '/hostdevs', diff --git a/ui/pages/i18n.json.tmpl b/ui/pages/i18n.json.tmpl index a5185b1..f9e148d 100644 --- a/ui/pages/i18n.json.tmpl +++ b/ui/pages/i18n.json.tmpl @@ -117,5 +117,7 @@ "KCHPOOL6018M": "$_("Wipe Confirmation")", "KCHVMSTOR0001E": "$_("CDROM path needs to be a valid local/remote path and cannot be blank.")", - "KCHVMSTOR0002E": "$_("Disk pool or volume cannot be blank.")" + "KCHVMSTOR0002E": "$_("Disk pool or volume cannot be blank.")", + + "KCHPEERS0001M": "$_("Peers")" } -- 2.5.5

On 08/30/2016 04:19 PM, sguimaraes943@gmail.com wrote:
From: Samuel Guimarães <sguimaraes943@gmail.com>
This commit moves peers list from the drop-down on the top navigation bar to a DataTable that will be rendered on Host Dashboard if the user has Gingerbased installed.
Signed-off-by: Samuel Guimarães <sguimaraes943@gmail.com> --- root.py | 6 ++ ui/js/kimchi.peers.js | 145 ++++++++++++++++++++++++++++++++++++++++++++++++ ui/js/src/kimchi.api.js | 14 ----- ui/pages/i18n.json.tmpl | 4 +- 4 files changed, 154 insertions(+), 15 deletions(-) create mode 100644 ui/js/kimchi.peers.js
diff --git a/root.py b/root.py index 90680b4..faa9eb9 100644 --- a/root.py +++ b/root.py @@ -67,6 +67,12 @@ class Kimchi(WokRoot): self.domain = 'kimchi' self.messages = messages
+ self.extends = { + "/plugins/gingerbase": { + "host-dashboard.html": "/plugins/kimchi/js/kimchi.peers.js" + } + } + # Some paths or URI's present in the objectstore have changed after # Kimchi 2.0.0 release. Check here if an upgrade in the schema and data # are necessary. diff --git a/ui/js/kimchi.peers.js b/ui/js/kimchi.peers.js new file mode 100644 index 0000000..36ac867 --- /dev/null +++ b/ui/js/kimchi.peers.js @@ -0,0 +1,145 @@ +/* + * Project Kimchi + * + * Copyright IBM Corp, 2013-2016 + * + * 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. + */ + +var kimchi = { + + getPeers: function(suc, err) { + wok.requestJSON({ + url: 'plugins/kimchi/peers', + type: 'GET', + contentType: 'application/json', + dataType: 'json', + resend: true, + success: suc, + error: err ? err : function(data) { + wok.message.error(data.responseJSON.reason); + } + }); + }, + + initPeers: function() { + + var peersAccordion = "<div class='panel-group federation-enabled accordion' id='peers-content-area-accordion' role='tablist' aria-multiselectable='true'>" + + "<h3>" + + "<a role='button' aria-expanded='true' data-toggle='collapse' data-parent='#peers-content-area-accordion' href='#peers-content-area' aria-expanded='false' aria-controls='peers-content-area' class=''>" + + "<span class='accordion-icon'></span>" + + "<span class='accordion-text' id='#peers-title'>"+i18n['KCHPEERS0001M']+"</span>" + + "</a>" + + "</h3>" + + "<div id='peers-content-area' class='panel-collapse collapse in' role='tabpanel' aria-labelledby='peers-title'>" + + "<div id='peers-alert-container'></div>" + + "<div class='row'>" + + "<div class='col-sm-12'>" + + "<table id='peers-list' class='table table-striped' cellspacing='0' width='100%''>" + + "<thead>" + + "<tr>" + + "<th>" + i18n['KCHPEERS0001M'] + "</th>" + + "</tr>" + + "</thead>" + + "</table>" + + "</div>" + + "</div>" + + "<div class='wok-mask' role='presentation'>" + + "<div class='wok-mask-loader-container'>" + + "<div class='wok-mask-loading'>" + + "<div class='wok-mask-loading-icon'></div>" + + "<div class='wok-mask-loading-text'>" + i18n['WOKGRD6001M'] + "</div>" + + "</div>" + + "</div>" + + "</div>" + + "</div>" + + "</div>"; + + var peersDatatableTable; + var peers = new Array(); +
+ $('#peers-container > div').append(peersAccordion); +
The peers-container should not be part of the Ginger Base HTML code. Instead of that, you will need to append a new div to "peers-container" to the "host-root-container" Something like: $('#host-root-container').append("<div id="peers-container" class="empty-when-logged-off"> <div class="container"></div> </div> ") And then you can manipulate the peers-container. That way the Ginger Base code will only contain code related to Ginger Base features.
participants (2)
-
Aline Manera
-
sguimaraes943@gmail.com