[Kimchi-devel] [PATCH] Issue #746 : New navigation bar.
atreyee at linux.vnet.ibm.com
atreyee at linux.vnet.ibm.com
Wed Nov 11 22:34:47 UTC 2015
From: Atreyee Mukhopadhyay <atreyee at linux.vnet.ibm.com>
First level navigation bar with Host and Virtualization tabs.
Second level tab navigation based on first level navigation.
---
src/wok/plugins/gingerbase/ui/config/tab-ext.xml | 1 +
src/wok/plugins/kimchi/ui/config/tab-ext.xml | 1 +
ui/css/src/modules/_toolbar.scss | 9 ++-
ui/css/src/modules/_wok-variables.scss | 7 +-
ui/js/src/wok.main.js | 81 +++++++++++++++++++++---
ui/pages/wok-ui.html.tmpl | 6 +-
6 files changed, 91 insertions(+), 14 deletions(-)
diff --git a/src/wok/plugins/gingerbase/ui/config/tab-ext.xml b/src/wok/plugins/gingerbase/ui/config/tab-ext.xml
index 8366f1f..17112ef 100644
--- a/src/wok/plugins/gingerbase/ui/config/tab-ext.xml
+++ b/src/wok/plugins/gingerbase/ui/config/tab-ext.xml
@@ -7,4 +7,5 @@
<title>Host</title>
<path>plugins/gingerbase/host.html</path>
</tab>
+ <functionality>Host</functionality>
</tabs-ext>
diff --git a/src/wok/plugins/kimchi/ui/config/tab-ext.xml b/src/wok/plugins/kimchi/ui/config/tab-ext.xml
index 415dbf1..9adabe0 100644
--- a/src/wok/plugins/kimchi/ui/config/tab-ext.xml
+++ b/src/wok/plugins/kimchi/ui/config/tab-ext.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<tabs-ext>
+ <functionality>Virtualization</functionality>
<tab>
<access role="admin" mode="admin"/>
<access role="user" mode="byInstance"/>
diff --git a/ui/css/src/modules/_toolbar.scss b/ui/css/src/modules/_toolbar.scss
index 744d48d..43e48a8 100644
--- a/ui/css/src/modules/_toolbar.scss
+++ b/ui/css/src/modules/_toolbar.scss
@@ -47,7 +47,7 @@
vertical-align: middle;
padding: 6px 0 !important;
margin-left: 50px !important;
- font-weight: 600;
+ font-weight: 400;
width: auto;
min-width: auto;
}
@@ -74,4 +74,11 @@
}
}
}
+}
+
+ at each $tab, $bgcolor in $colors {
+
+#tabPanel.#{$tab}{
+ background-color: map-get($colors,$tab) !important;
+ }
}
\ No newline at end of file
diff --git a/ui/css/src/modules/_wok-variables.scss b/ui/css/src/modules/_wok-variables.scss
index d67672d..7381335 100644
--- a/ui/css/src/modules/_wok-variables.scss
+++ b/ui/css/src/modules/_wok-variables.scss
@@ -60,10 +60,11 @@ $colors: (
templates: #00a6a0,
storage: #feb813,
network: #7f1c7d,
- administration: #d9182d
+ administration: #d9182d,
+ Virtualization-tab: #59930c,
+ Host-tab: #00578c
);
-
//== Scaffolding
//
//## Settings for some of the most global styles.
@@ -978,4 +979,4 @@ $color-grey-arrow: rgb(204, 204, 204);
$width-default: 220px;
-$zindex-select-dropdown: 1035 !default;
\ No newline at end of file
+$zindex-select-dropdown: 1035 !default;
diff --git a/ui/js/src/wok.main.js b/ui/js/src/wok.main.js
index 1330ac1..6043832 100644
--- a/ui/js/src/wok.main.js
+++ b/ui/js/src/wok.main.js
@@ -25,6 +25,7 @@ wok.main = function() {
var genTabs = function(tabs) {
var tabsHtml = [];
+ //var tabs = allTabs[$(funcItem).text()];
$(tabs).each(function(i, tab) {
var title = tab['title'];
var cssClass = tab['css'];
@@ -44,10 +45,30 @@ wok.main = function() {
}
});
return tabsHtml.join('');
+ //var tabElements = tabsHtml.join('')
+ //$(tabElements).appendTo($('tabPanel'));
};
+ var genFunctTabs = function(tabs){
+ var functionalTabHtml = [];
+ var functionalTabs = Object.keys(tabs);
+ var css ="";
+ $(functionalTabs).each(function(i, tab) {
+ functionalTabHtml.push(
+ '<li>',
+ '<a class="item',' ',tab,'-tab','" href="#">',
+ tab,
+ '</a>',
+ '</li>'
+ );
+ });
+ return functionalTabHtml.join('');
+ }
+
var parseTabs = function(xmlData) {
var tabs = [];
+ var functionalTabs = {};
+ var functionality = $(xmlData).find('functionality').text();
$(xmlData).find('tab').each(function() {
var $tab = $(this);
var titleKey = $tab.find('title').text();
@@ -69,8 +90,17 @@ wok.main = function() {
document.location.href = 'login.html';
}
});
+ var tabsDetails = JSON.parse(wok.cookie.get('tabs'));
- return tabs;
+ var isExisting = tabsDetails[functionality] && (tabsDetails[functionality].length)>0;
+
+ if(isExisting){
+ tabs.push.apply(tabs,tabsDetails[functionality]);
+ }
+
+ functionalTabs[functionality] = tabs;
+
+ return functionalTabs;
};
var retrieveTabs = function(url) {
@@ -89,7 +119,8 @@ wok.main = function() {
var pluginI18nUrl = 'plugins/{plugin}/i18n.json';
var DEFAULT_HASH;
var buildTabs = function(callback) {
- var tabs = [];
+ var tabs = {};
+ wok.cookie.set('tabs',JSON.stringify(tabs));
wok.listPlugins(function(plugins) {
$(plugins).each(function(i, p) {
var url = wok.substitute(pluginConfigUrl, {
@@ -101,10 +132,19 @@ wok.main = function() {
wok.getI18n(function(i18nObj){ $.extend(i18n, i18nObj)},
function(i18nObj){ //i18n is not define by plugin
}, i18nUrl, true);
- tabs.push.apply(tabs, retrieveTabs(url));
+ //tabs.push.apply(tabs, retrieveTabs(url));
+ tabs = $.extend({},tabs, retrieveTabs(url));
+ wok.cookie.set('tabs',JSON.stringify(tabs));
+ });
+
+ var orderedtabs ={};
+ Object.keys(tabs).sort().forEach(function(key){
+ orderedtabs[key]=tabs[key];
});
- var defaultTab = tabs[0]
+ var defaultFunctionalTab = Object.keys(orderedtabs)[0];
+
+ var defaultTab = tabs[defaultFunctionalTab][0];
var defaultTabPath = defaultTab && defaultTab['path']
@@ -116,7 +156,11 @@ wok.main = function() {
DEFAULT_HASH = defaultTabPath &&
defaultTabPath.substring(0, defaultTabPath.lastIndexOf('.'))
}
- $('#nav-menu ul.navbar-nav li.hostname').after(genTabs(tabs));
+ $('#nav-menu ul.navbar-nav li.hostname').after(genFunctTabs(orderedtabs));
+ $('#nav-menu ul.navbar-nav li a.item').first().parent().addClass('active').focus();
+ $('#tabPanel').addClass(defaultFunctionalTab+'-tab');
+ $(genTabs(tabs[defaultFunctionalTab])).appendTo('#tabPanel ul');
+
wok.getHostname();
callback && callback();
@@ -146,7 +190,7 @@ wok.main = function() {
* point to the tab. If nothing found, inform user the URL is invalid
* and clear location.hash to jump to home page.
*/
- var tab = $('#nav-menu ul li a[href="' + url + '"]');
+ var tab = $('#tabPanel ul.navbar-nav li a[href="' + url + '"]');
if (tab.length === 0 && url!='wok-empty.html') {
location.hash = '';
return;
@@ -158,7 +202,7 @@ wok.main = function() {
}else{
// Update the visual style of tabs; focus the selected one.
- $('#nav-menu ul li').removeClass('active');
+ $('#tabPanel ul li').removeClass('active');
$(tab).parent().addClass('active');
$(tab).focus();
@@ -238,7 +282,7 @@ wok.main = function() {
* Register click listener of tabs. Replace the default reloading page
* behavior of <a> with Ajax loading.
*/
- $('#nav-menu ul li').on('click', 'a.item', function(event) {
+ $('#tabPanel ul').on('click', 'a.item', function(event) {
var href = $(this).attr('href');
// Remove file extension from 'href'
location.hash = href.substring(0,href.lastIndexOf('.'))
@@ -254,6 +298,25 @@ wok.main = function() {
event.preventDefault();
});
+ $('#nav-menu ul li').on('click', 'a.item', function(event) {
+ var functionalTab = $(this).text();
+ var previousSelection = $('#nav-menu ul li.active a').text();
+ $('#tabPanel').removeClass(previousSelection+'-tab');
+
+ $('#nav-menu ul li').removeClass('active');
+ $(this).parent().addClass('active').focus();
+
+ $('#tabPanel').addClass(functionalTab+'-tab');
+ var tabs = JSON.parse(wok.cookie.get('tabs'));
+ $('#tabPanel ul').empty();
+ $(genTabs(tabs[functionalTab])).appendTo('#tabPanel ul');
+ var firstTab = $('#tabPanel ul.navbar-nav li').first();
+ $(firstTab).addClass('active');
+ var href= $('a.item',firstTab).attr('href');
+ location.hash = href.substring(0,href.lastIndexOf('.'));
+ event.preventDefault();
+
+ });
// Perform logging out via Ajax request.
$('#btn-logout').on('click', function() {
wok.logout(function() {
@@ -392,4 +455,4 @@ wok.openHelp = function(e) {
var url = $(tab).parent().find("input[name='helpPath']").val();
window.open(url, "Wok Help");
e.preventDefault();
-};
\ No newline at end of file
+};
diff --git a/ui/pages/wok-ui.html.tmpl b/ui/pages/wok-ui.html.tmpl
index acfae27..d3f45ea 100644
--- a/ui/pages/wok-ui.html.tmpl
+++ b/ui/pages/wok-ui.html.tmpl
@@ -133,10 +133,14 @@
</button>
</div>
<div class="collapse navbar-collapse" id="nav-menu">
- <ul class="nav navbar-nav">
+ <ul id="functionalTabPanel" class="nav navbar-nav">
<li class="hostname"><span class="host-location"></span></li>
</ul>
</div>
+ <div class="collapse navbar-collapse" id="tabPanel">
+ <ul class="nav navbar-nav">
+ </ul>
+ </div>
</div>
</nav>
</div>
--
2.1.0
More information about the Kimchi-devel
mailing list