[Kimchi-devel] [PATCH] Issue#343 & #353: Improve&Correct UI Init Logic Flow
Aline Manera
alinefm at linux.vnet.ibm.com
Tue Apr 1 18:55:17 UTC 2014
Reviewed-by: Aline Manera <alinefm at linux.vnet.ibm.com>
On 03/28/2014 06:30 AM, Hongliang Wang wrote:
> Fixed the 2 issues:
> 1) When refreshing (F5) a plugin tab, default tab will be redirected then;
> 2) tabs.xml is requested twice.
>
> Signed-off-by: Hongliang Wang <hlwang at linux.vnet.ibm.com>
> ---
> ui/js/src/kimchi.main.js | 127 +++++++++++++++++++++++++++--------------------
> 1 file changed, 72 insertions(+), 55 deletions(-)
>
> diff --git a/ui/js/src/kimchi.main.js b/ui/js/src/kimchi.main.js
> index aac7e28..9b0acbf 100644
> --- a/ui/js/src/kimchi.main.js
> +++ b/ui/js/src/kimchi.main.js
> @@ -16,10 +16,75 @@
> * limitations under the License.
> */
> kimchi.main = function() {
> - var tabUrl = "/config/ui/tabs.xml";
> - var DEFAULT_HASH = kimchi.getDefaultPage(tabUrl);
> kimchi.popable();
>
> + var genTabs = function(tabs) {
> + var tabsHtml = [];
> + $(tabs).each(function(i, tab) {
> + var title = tab['title'];
> + var path = tab['path'];
> + tabsHtml.push(
> + '<li>',
> + '<a class="item" href="', path, '">',
> + title,
> + '</a>',
> + '</li>'
> + );
> + });
> + return tabsHtml.join('');
> + };
> +
> + var parseTabs = function(xmlData) {
> + var tabs = [];
> + $(xmlData).find('tab').each(function() {
> + var $tab = $(this);
> + var titleKey = $tab.find('title').text();
> + var title = i18n[titleKey];
> + var path = $tab.find('path').text();
> + tabs.push({
> + title: title,
> + path: path
> + });
> + });
> +
> + return tabs;
> + };
> +
> + var retrieveTabs = function(url) {
> + var tabs;
> + $.ajax({
> + url : url,
> + async : false,
> + success : function(xmlData) {
> + tabs = parseTabs(xmlData);
> + }
> + });
> + return tabs;
> + };
> +
> + var tabConfigUrl = '/config/ui/tabs.xml';
> + var pluginConfigUrl = '/plugins/{plugin}/ui/config/tab-ext.xml';
> + var DEFAULT_HASH;
> + var buildTabs = function(callback) {
> + var tabs = retrieveTabs(tabConfigUrl);
> + kimchi.listPlugins(function(plugins) {
> + $(plugins).each(function(i, p) {
> + var url = kimchi.template(pluginConfigUrl, {
> + plugin: p
> + });
> + tabs.concat(retrieveTabs(url));
> + });
> +
> + var firstTabPath = tabs[0] && tabs[0]['path'];
> + DEFAULT_HASH = firstTabPath &&
> + firstTabPath.substring(0, firstTabPath.length - 5);
> +
> + $('#nav-menu').append(genTabs(tabs));
> +
> + callback && callback();
> + });
> + };
> +
> var onLanguageChanged = function(lang) {
> kimchi.lang.set(lang);
> location.reload();
> @@ -132,8 +197,6 @@ kimchi.main = function() {
> });
>
> // Perform logging out via Ajax request.
> -
> -
> $('#btn-logout').on('click', function() {
> kimchi.logout(function() {
> updatePage();
> @@ -145,9 +208,7 @@ kimchi.main = function() {
> $('#btn-help').on('click', kimchi.getHelp);
> };
>
> - // Load i18n translation strings first and then render the page.
> - $('#main').load('i18n.html', function() {
> - kimchi.addTabs(tabUrl);
> + var initUI = function() {
> $(document).bind('ajaxError', function(event, jqXHR, ajaxSettings, errorThrown) {
> if (!ajaxSettings['kimchi']) {
> return;
> @@ -175,56 +236,12 @@ kimchi.main = function() {
> kimchi.user.showUser(true);
> initListeners();
> updatePage();
> - });
> -};
> -
> -kimchi.addTabs = function(url) {
> - var tabsHtml = kimchi.getTabHtml(url);
> - $('#nav-menu').prepend(tabsHtml);
> - kimchi.addExtTabs();
> -};
> -
> -kimchi.addExtTabs = function() {
> - kimchi.listPlugins(function(results) {
> - for ( var i = 0; i < results.length; i++) {
> - var tabsHtml = kimchi.getTabHtml("/plugins/" + results[i] + "/ui/config/tab-ext.xml");
> - $('#nav-menu').append(tabsHtml);
> - }
> - });
> -};
> -
> -kimchi.getDefaultPage = function(url) {
> - var defautLocation = "";
> - $.ajax({
> - url : url,
> - async : false,
> - success : function(xmlData) {
> - var tab = $(xmlData).find('tab').first();
> - var path = tab.find('path').text();
> - if (path) {
> - defautLocation = path.substring(0, path.length - 5);
> - }
> - }
> - });
> - return defautLocation;
> -};
> + };
>
> -kimchi.getTabHtml = function(url) {
> - var tabsHtml = "";
> - $.ajax({
> - url : url,
> - async : false,
> - success : function(xmlData) {
> - $(xmlData).find('tab').each(function() {
> - var $tab = $(this);
> - var titleKey = $tab.find('title').text();
> - var title = i18n[titleKey];
> - var path = $tab.find('path').text();
> - tabsHtml += "<li><a class='item' href=" + path + ">" + title + "</a></li>";
> - });
> - }
> + // Load i18n translation strings first and then render the page.
> + $('#main').load('i18n.html', function() {
> + buildTabs(initUI);
> });
> - return tabsHtml;
> };
>
> kimchi.getHelp = function(e) {
More information about the Kimchi-devel
mailing list