[Kimchi-devel] [PATCH ][Wok] Issue # 28 : Tab order in Host is not consistent

Aline Manera alinefm at linux.vnet.ibm.com
Mon Feb 22 18:02:33 UTC 2016



On 02/18/2016 05:13 PM, atreyee at linux.vnet.ibm.com wrote:
> From: Atreyee Mukhopadhyay <atreyee at linux.vnet.ibm.com>
>
> Second level tabs in Host functionality are sorted using a unique
> number assigned to align them in desired order irrespective of
> the plugin installed
> ---
>   ui/js/src/wok.main.js | 822 +++++++++++++++++++++++++-------------------------
>   1 file changed, 416 insertions(+), 406 deletions(-)
>
> diff --git a/ui/js/src/wok.main.js b/ui/js/src/wok.main.js
> index 7d604b4..8a36235 100644
> --- a/ui/js/src/wok.main.js
> +++ b/ui/js/src/wok.main.js
> @@ -22,454 +22,464 @@ wok.tabMode = {};
>
>   wok.config = undefined;
>   wok.getConfig(function(result) {
> -    wok.config = result;
> +  wok.config = result;
>   }, function() {
> -    wok.config = {};
> +  wok.config = {};
>   });

Please, use 4 spaces for indentation.

It is being really hard to review this patch as all the indentation 
level was changed to 2 spaces.
Please, revert those changes and send a new patch to review.

>
>   wok.main = function() {
> -    wok.isLoggingOut = false;
> -    wok.popable();
> -
> -    var genTabs = function(tabs) {
> -        var tabsHtml = [];
> -        $(tabs).each(function(i, tab) {
> -            var functionality = tab['functionality'];
> -            var title = tab['title'];
> -            var path = tab['path'];
> -            var mode = tab['mode'];
> -            if (mode != 'none') {
> -                var helpPath = wok.checkHelpFile(path);
> -                var disableHelp = (helpPath.length == 0 ? "disableHelp" : helpPath);
> -                tabsHtml.push(
> -                    '<li class="', functionality.toLowerCase() + 'Tab', '">',
> -                        '<a class="item ', disableHelp, '" href="', path, '">',
> -                            title,
> -                        '</a>',
> -                        '<input id="funcTab" name="funcTab" class="sr-only" value="' + functionality.toLowerCase() + '" type="hidden"/>',
> -                        '<input id="helpPathId" name="helpPath" class="sr-only" value="' + helpPath + '" type="hidden"/>',
> -                    '</li>'
> -                );
> -            }
> -        });
> -        return tabsHtml.join('');
> -    };
> -
> -    var genFuncTabs  = function(tabs){
> -        var functionalTabHtml = [];
> -        $(tabs).each(function(i, tab) {
> -            functionalTabHtml.push(
> -                '<li>',
> -                    '<a class="item',' ',tab.toLowerCase(),'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();
> -            var title = i18n[titleKey] ? i18n[titleKey] : titleKey;
> -            var path = $tab.find('path').text();
> -            var roles = wok.cookie.get('roles');
> -            if (roles) {
> -                var role = JSON.parse(roles)[titleKey.toLowerCase()];
> -                var mode = $tab.find('[role="' + role + '"]').attr('mode');
> -                wok.tabMode[titleKey.toLowerCase()] = mode;
> -                tabs.push({
> -                    functionality: functionality,
> -                    title: title,
> -                    path: path,
> -                    mode: mode
> -                });
> -            } else {
> -                document.location.href = 'login.html';
> -            }
> +  wok.isLoggingOut = false;
> +  wok.popable();
> +
> +  var genTabs = function(tabs) {
> +    var tabsHtml = [];
> +    $(tabs).each(function(i, tab) {
> +      var functionality = tab['functionality'];
> +      var title = tab['title'];
> +      var path = tab['path'];
> +      var mode = tab['mode'];
> +      if (mode != 'none') {
> +        var helpPath = wok.checkHelpFile(path);
> +        var disableHelp = (helpPath.length == 0 ? "disableHelp" : helpPath);
> +        tabsHtml.push(
> +          '<li class="', functionality.toLowerCase() + 'Tab', '">',
> +          '<a class="item ', disableHelp, '" href="', path, '">',
> +          title,
> +          '</a>',
> +          '<input id="funcTab" name="funcTab" class="sr-only" value="' + functionality.toLowerCase() + '" type="hidden"/>',
> +          '<input id="helpPathId" name="helpPath" class="sr-only" value="' + helpPath + '" type="hidden"/>',
> +          '</li>'
> +        );
> +      }
> +    });
> +    return tabsHtml.join('');
> +  };
> +
> +  var genFuncTabs = function(tabs) {
> +    var functionalTabHtml = [];
> +    $(tabs).each(function(i, tab) {
> +      functionalTabHtml.push(
> +        '<li>',
> +        '<a class="item', ' ', tab.toLowerCase(), '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();
> +      var title = i18n[titleKey] ? i18n[titleKey] : titleKey;
> +      var path = $tab.find('path').text();
> +      var roles = wok.cookie.get('roles');
> +      var order = $tab.find('order').text();
> +
> +      if (roles) {
> +        var role = JSON.parse(roles)[titleKey.toLowerCase()];
> +        var mode = $tab.find('[role="' + role + '"]').attr('mode');
> +        wok.tabMode[titleKey.toLowerCase()] = mode;
> +        tabs.push({
> +          functionality: functionality,
> +          title: title,
> +          path: path,
> +          mode: mode,
> +          order: order
>           });
> +      } else {
> +        document.location.href = 'login.html';
> +      }
> +    });
> +
> +    return tabs;
> +  };
>
> -        return tabs;
> -    };
> -
> -    var retrieveTabs = function(url) {
> -        var tabs = [];
> -        $.ajax({
> -            url : url,
> -            async : false,
> -            success : function(xmlData) {
> -                tabs = parseTabs(xmlData);
> -            },
> -            statusCode : {
> -                404: function() {
> -                    return tabs;
> -                }
> -            }
> +  var retrieveTabs = function(url) {
> +    var tabs = [];
> +    $.ajax({
> +      url: url,
> +      async: false,
> +      success: function(xmlData) {
> +        tabs = parseTabs(xmlData);
> +      },
> +      statusCode: {
> +        404: function() {
> +          return tabs;
> +        }
> +      }
> +    });
> +    return tabs;
> +  };
> +
> +  var pluginConfigUrl = 'plugins/{plugin}/ui/config/tab-ext.xml';
> +  var pluginI18nUrl = 'plugins/{plugin}/i18n.json';
> +  var DEFAULT_HASH;
> +  var buildTabs = function(callback) {
> +    var tabs = [];
> +    var functionalTabs = [];
> +    wok.listPlugins(function(plugins) {
> +      $(plugins).each(function(i, p) {
> +        var url = wok.substitute(pluginConfigUrl, {
> +          plugin: p
>           });
> -        return tabs;
> -    };
> -
> -    var pluginConfigUrl = 'plugins/{plugin}/ui/config/tab-ext.xml';
> -    var pluginI18nUrl = 'plugins/{plugin}/i18n.json';
> -    var DEFAULT_HASH;
> -    var buildTabs = function(callback) {
> -        var tabs = [];
> -        var functionalTabs = [];
> -        wok.listPlugins(function(plugins) {
> -            $(plugins).each(function(i, p) {
> -                var url = wok.substitute(pluginConfigUrl, {
> -                    plugin: p
> -                });
> -                var i18nUrl = wok.substitute(pluginI18nUrl, {
> -                    plugin: p
> -                });
> -                wok.getI18n(function(i18nObj){ $.extend(i18n, i18nObj)},
> -                            function(i18nObj){ //i18n is not define by plugin
> -                            }, i18nUrl, true);
> -                var pluginTabs = retrieveTabs(url);
> -                if(pluginTabs.length > 0){
> -                    var func = pluginTabs[0].functionality
> -                    if (functionalTabs.indexOf(func) == -1) {
> -                        functionalTabs.push(pluginTabs[0].functionality)
> -                    }
> -                    tabs.push.apply(tabs, pluginTabs);
> -                }
> -            });
> -
> -            //redirect to empty page when no plugin installed
> -            if(tabs.length===0){
> -                DEFAULT_HASH = 'wok-empty';
> -            } else {
> -                var defaultTab = tabs[0]
> -                var defaultTabPath = defaultTab && defaultTab['path']
> -
> -                // Remove file extension from 'defaultTabPath'
> -                DEFAULT_HASH = defaultTabPath &&
> -                    defaultTabPath.substring(0, defaultTabPath.lastIndexOf('.'))
> -                }
> -
> -                $('#functionalTabPanel ul').append(genFuncTabs(functionalTabs));
> -                $('#tabPanel ul').append(genTabs(tabs));
> -                wok.getHostname();
> -
> -                callback && callback();
> -            }, function(data) {
> -               wok.message.error(data.responseJSON.reason);
> -            }, true);
> -    };
> -
> -    var onLanguageChanged = function(lang) {
> -        wok.lang.set(lang);
> -        location.reload();
> -    };
> -
> -    /**
> -     * Do the following setup:
> -     *   1) Clear any timing events.
> -     *   2) If the given URL is invalid (i.e., no corresponding href value in
> -     *      page tab list.), then clear location.href and inform the user;
> -     *
> -     *      Or else:
> -     *      Move the page tab indicator to the right position;
> -     *      Load the page content via Ajax.
> -     */
> -    var onWokRedirect = function(url) {
> -        /*
> -         * Find the corresponding tab node and animate the arrow indicator to
> -         * point to the tab. If nothing found, inform user the URL is invalid
> -         * and clear location.hash to jump to home page.
> -         */
> -        var tab = $('#tabPanel a[href="' + url + '"]');
> -        if (tab.length === 0 && url != 'wok-empty.html') {
> -            location.hash = '#';
> -            return;
> +        var i18nUrl = wok.substitute(pluginI18nUrl, {
> +          plugin: p
> +        });
> +        wok.getI18n(function(i18nObj) {
> +            $.extend(i18n, i18nObj)
> +          },
> +          function(i18nObj) { //i18n is not define by plugin
> +          }, i18nUrl, true);
> +        var pluginTabs = retrieveTabs(url);
> +        if (pluginTabs.length > 0) {
> +          var func = pluginTabs[0].functionality
> +          if (functionalTabs.indexOf(func) == -1) {
> +            functionalTabs.push(pluginTabs[0].functionality)
> +          }
> +          tabs.push.apply(tabs, pluginTabs);
>           }
> -        //Remove the tab arrow indicator for no plugin
> -        if (url == 'wok-empty.html') {
> -            $('#main').html('No plugins installed currently.You can download the available plugins <a href="https://github.com/kimchi-project/kimchi">Kimchi</a> and <a href="https://github.com/kimchi-project/ginger">Ginger</a> from Github').addClass('noPluginMessage');
> +      });
> +
> +      //sort second level tab based on their ordering number
> +      var orderedTabs = tabs.slice(0);
> +      orderedTabs.sort(function(a, b) {
> +        return a.order - b.order;
> +      });
> +
> +      //redirect to empty page when no plugin installed
> +      if (tabs.length === 0) {
> +        DEFAULT_HASH = 'wok-empty';
> +      } else {
> +        var defaultTab = tabs[0]
> +        var defaultTabPath = defaultTab && defaultTab['path']
> +
> +        // Remove file extension from 'defaultTabPath'
> +        DEFAULT_HASH = defaultTabPath &&
> +          defaultTabPath.substring(0, defaultTabPath.lastIndexOf('.'))
> +      }
> +
> +      $('#functionalTabPanel ul').append(genFuncTabs(functionalTabs));
> +      $('#tabPanel ul').append(genTabs(orderedTabs));
> +      wok.getHostname();
> +
> +      callback && callback();
> +    }, function(data) {
> +      wok.message.error(data.responseJSON.reason);
> +    }, true);
> +  };
> +
> +  var onLanguageChanged = function(lang) {
> +    wok.lang.set(lang);
> +    location.reload();
> +  };
> +
> +  /**
> +   * Do the following setup:
> +   *   1) Clear any timing events.
> +   *   2) If the given URL is invalid (i.e., no corresponding href value in
> +   *      page tab list.), then clear location.href and inform the user;
> +   *
> +   *      Or else:
> +   *      Move the page tab indicator to the right position;
> +   *      Load the page content via Ajax.
> +   */
> +  var onWokRedirect = function(url) {
> +    /*
> +     * Find the corresponding tab node and animate the arrow indicator to
> +     * point to the tab. If nothing found, inform user the URL is invalid
> +     * and clear location.hash to jump to home page.
> +     */
> +    var tab = $('#tabPanel a[href="' + url + '"]');
> +    if (tab.length === 0 && url != 'wok-empty.html') {
> +      location.hash = '#';
> +      return;
> +    }
> +    //Remove the tab arrow indicator for no plugin
> +    if (url == 'wok-empty.html') {
> +      $('#main').html('No plugins installed currently.You can download the available plugins <a href="https://github.com/kimchi-project/kimchi">Kimchi</a> and <a href="https://github.com/kimchi-project/ginger">Ginger</a> from Github').addClass('noPluginMessage');
> +    } else {
> +      var plugin = $(tab).parent().find("input[name='funcTab']").val();
> +
> +      $('#tabPanel').removeClass(function(i, css) {
> +        return (css.match(/\S+Tab/g) || []).join(' ');
> +      });
> +      $('#tabPanel').addClass(plugin + 'Tab');
> +      $('#tabPanel ul li').removeClass('active');
> +      $.each($('#tabPanel li'), function(i, t) {
> +        if ($(t).hasClass(plugin + 'Tab')) {
> +          $(t).css('display', 'block');
>           } else {
> -            var plugin = $(tab).parent().find("input[name='funcTab']").val();
> -
> -            $('#tabPanel').removeClass(function(i, css) {
> -                return (css.match(/\S+Tab/g) || []).join(' ');
> -            });
> -            $('#tabPanel').addClass(plugin + 'Tab');
> -            $('#tabPanel ul li').removeClass('active');
> -            $.each($('#tabPanel li'), function(i, t) {
> -                if ($(t).hasClass(plugin + 'Tab')) {
> -                    $(t).css('display', 'block');
> -                } else {
> -                    $(t).css('display', 'none');
> -                }
> -            });
> -
> -            $(tab).parent().addClass('active');
> -            $(tab).addClass(plugin + 'Selected').focus();
> -
> -            $('#functionalTabPanel ul li').removeClass('active');
> -            $('#functionalTabPanel ul .' + plugin + 'Tab').parent().addClass('active').focus();
> -
> -            // Disable Help button according to selected tab
> -            if ($(tab).hasClass("disableHelp")) {
> -                $('#btn-help').css('cursor', "not-allowed");
> -                $('#btn-help').off("click");
> -            }
> -            else {
> -                $('#btn-help').css('cursor', "pointer");
> -                $('#btn-help').on("click", wok.openHelp);
> -            }
> -            // Load page content.
> -            loadPage(url);
> +          $(t).css('display', 'none');
>           }
> -    };
> +      });
> +
> +      $(tab).parent().addClass('active');
> +      $(tab).addClass(plugin + 'Selected').focus();
> +
> +      $('#functionalTabPanel ul li').removeClass('active');
> +      $('#functionalTabPanel ul .' + plugin + 'Tab').parent().addClass('active').focus();
> +
> +      // Disable Help button according to selected tab
> +      if ($(tab).hasClass("disableHelp")) {
> +        $('#btn-help').css('cursor', "not-allowed");
> +        $('#btn-help').off("click");
> +      } else {
> +        $('#btn-help').css('cursor', "pointer");
> +        $('#btn-help').on("click", wok.openHelp);
> +      }
> +      // Load page content.
> +      loadPage(url);
> +    }
> +  };
> +
> +  /**
> +   * Use Ajax to dynamically load a page without a page refreshing. Handle
> +   * arrow cursor animation, DOM node focus, and page content rendering.
> +   */
> +  var loadPage = function(url) {
> +    // Get the page content through Ajax and render it.
> +    url && $('#main').load(url, function(responseText, textStatus, jqXHR) {
> +      if (jqXHR['status'] === 401 || jqXHR['status'] === 303) {
> +        var isSessionTimeout = jqXHR['responseText'].indexOf("sessionTimeout") != -1;
> +        document.location.href = isSessionTimeout ? 'login.html?error=sessionTimeout' : 'login.html';
> +        return;
> +      }
> +    });
> +  };
> +
> +  /*
> +   * Update page content.
> +   * 1) If user types in the main page URL without hash, then we apply the
> +   *    default hash. e.g., http://kimchi.company.com:8000;
> +   * 2) If user types a URL with hash, then we publish an "redirect" event
> +   *    to load the page, e.g., http://kimchi.company.com:8000/#templates.
> +   */
> +  var updatePage = function() {
> +    // Parse hash string.
> +    var hashString = (location.hash && location.hash.substr(1));
>
> -    /**
> -     * Use Ajax to dynamically load a page without a page refreshing. Handle
> -     * arrow cursor animation, DOM node focus, and page content rendering.
> +    /*
> +     * If hash string is empty, then apply the default one;
> +     * or else, publish an "redirect" event to load the page.
>        */
> -    var loadPage = function(url) {
> -        // Get the page content through Ajax and render it.
> -        url && $('#main').load(url, function(responseText, textStatus, jqXHR) {
> -            if (jqXHR['status'] === 401 || jqXHR['status'] === 303) {
> -                var isSessionTimeout = jqXHR['responseText'].indexOf("sessionTimeout")!=-1;
> -                document.location.href = isSessionTimeout ? 'login.html?error=sessionTimeout' : 'login.html';
> -                return;
> -            }
> -        });
> -    };
> +    if (!hashString) {
> +      location.hash = DEFAULT_HASH;
> +    } else {
> +      wok.topic('redirect').publish(hashString + '.html');
> +    }
> +  };
> +
> +  /**
> +   * Register listeners including:
> +   * 1) wok redirect event
> +   * 2) hashchange event
> +   * 3) Tab list click event
> +   * 4) Log-out button click event
> +   * 5) About button click event
> +   * 6) Help button click event
> +   * 7) Peers button click event
> +   */
> +  var searchingPeers = false;
> +  var initListeners = function() {
> +    wok.topic('languageChanged').subscribe(onLanguageChanged);
> +    wok.topic('redirect').subscribe(onWokRedirect);
>
>       /*
> -     * Update page content.
> -     * 1) If user types in the main page URL without hash, then we apply the
> -     *    default hash. e.g., http://kimchi.company.com:8000;
> -     * 2) If user types a URL with hash, then we publish an "redirect" event
> -     *    to load the page, e.g., http://kimchi.company.com:8000/#templates.
> +     * If hash value is changed, then we know the user is intended to load
> +     * another page.
>        */
> -    var updatePage = function() {
> -        // Parse hash string.
> -        var hashString = (location.hash && location.hash.substr(1));
> +    window.onhashchange = updatePage;
>
> +    /*
> +     * Register click listener of tabs. Replace the default reloading page
> +     * behavior of <a> with Ajax loading.
> +     */
> +    $('#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('.'))
>           /*
> -         * If hash string is empty, then apply the default one;
> -         * or else, publish an "redirect" event to load the page.
> +         * We use the HTML file name for hash, like: guests for guests.html
> +         * and templates for templates.html.
> +         *     Retrieve hash value from the given URL and update location's
> +         * hash part. It has 2 effects: one is to publish Wok "redirect"
> +         * event to trigger listener, the other is to put an entry into the
> +         * browser's address history to make pages be bookmark-able.
>            */
> -        if (!hashString) {
> -            location.hash = DEFAULT_HASH;
> -        }
> -        else {
> -            wok.topic('redirect').publish(hashString + '.html');
> -        }
> -    };
> -
> -    /**
> -     * Register listeners including:
> -     * 1) wok redirect event
> -     * 2) hashchange event
> -     * 3) Tab list click event
> -     * 4) Log-out button click event
> -     * 5) About button click event
> -     * 6) Help button click event
> -     * 7) Peers button click event
> +        // Prevent <a> causing browser redirecting to other page.
> +      event.preventDefault();
> +    });
> +
> +    /*
> +     * Register click listener of second level tabs. Replace the default reloading page
> +     * behavior of <a> with Ajax loading.
>        */
> -    var searchingPeers = false;
> -    var initListeners = function() {
> -        wok.topic('languageChanged').subscribe(onLanguageChanged);
> -        wok.topic('redirect').subscribe(onWokRedirect);
> +    $('#functionalTabPanel ul li').on('click', 'a.item', function(event) {
> +      var plugin = $(this).text().toLowerCase();
> +      var previousPlugin = $('#functionalTabPanel ul li.active a').text().toLowerCase();
> +
> +      $('#tabPanel').switchClass(previousPlugin + 'Tab', plugin + 'Tab');
> +      $('#tabPanel ul li').removeClass('active');
> +      $.each($('#tabPanel li'), function(i, t) {
> +        if ($(t).hasClass(plugin + 'Tab')) {
> +          $(t).css('display', 'block');
> +        } else {
> +          $(t).css('display', 'none');
> +        }
> +      });
>
> -        /*
> -         * If hash value is changed, then we know the user is intended to load
> -         * another page.
> -         */
> -        window.onhashchange = updatePage;
> +      $('#functionalTabPanel ul li').removeClass('active');
> +      $(this).parent().addClass('active').focus();
>
> -        /*
> -         * Register click listener of tabs. Replace the default reloading page
> -         * behavior of <a> with Ajax loading.
> -         */
> -        $('#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('.'))
> -            /*
> -             * We use the HTML file name for hash, like: guests for guests.html
> -             * and templates for templates.html.
> -             *     Retrieve hash value from the given URL and update location's
> -             * hash part. It has 2 effects: one is to publish Wok "redirect"
> -             * event to trigger listener, the other is to put an entry into the
> -             * browser's address history to make pages be bookmark-able.
> -             */
> -            // Prevent <a> causing browser redirecting to other page.
> -            event.preventDefault();
> -        });
> +      var firstTab = $('#tabPanel ul.navbar-nav li.' + plugin + 'Tab').first();
> +      $(firstTab).addClass('active');
> +      $('a.item', firstTab).addClass(plugin + 'Selected');
>
> -        /*
> -         * Register click listener of second level tabs. Replace the default reloading page
> -         * behavior of <a> with Ajax loading.
> -         */
> -         $('#functionalTabPanel ul li').on('click', 'a.item', function(event) {
> -            var plugin = $(this).text().toLowerCase();
> -            var previousPlugin = $('#functionalTabPanel ul li.active a').text().toLowerCase();
> -
> -            $('#tabPanel').switchClass(previousPlugin + 'Tab', plugin + 'Tab');
> -            $('#tabPanel ul li').removeClass('active');
> -            $.each($('#tabPanel li'), function(i, t) {
> -                if ($(t).hasClass(plugin + 'Tab')) {
> -                    $(t).css('display', 'block');
> -                } else {
> -                    $(t).css('display', 'none');
> -                }
> -            });
> -
> -            $('#functionalTabPanel ul li').removeClass('active');
> -            $(this).parent().addClass('active').focus();
> -
> -            var firstTab = $('#tabPanel ul.navbar-nav li.' + plugin + 'Tab').first();
> -            $(firstTab).addClass('active');
> -            $('a.item', firstTab).addClass(plugin + 'Selected');
> -
> -            var href = $('a.item', firstTab).attr('href');
> -            location.hash = href.substring(0,href.lastIndexOf('.'));
> -            event.preventDefault();
> -        });
> +      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() {
> -                wok.isLoggingOut = true;
> -                document.location.href = "login.html";
> -            }, function(err) {
> -                wok.message.error(err.responseJSON.reason);
> -            });
> -        });
> +    // Perform logging out via Ajax request.
> +    $('#btn-logout').on('click', function() {
> +      wok.logout(function() {
> +        wok.isLoggingOut = true;
> +        document.location.href = "login.html";
> +      }, function(err) {
> +        wok.message.error(err.responseJSON.reason);
> +      });
> +    });
>
> -        // Set handler for about button
> -        $('#btn-about').on('click', function(event) {
> -            event.preventDefault();
> -        });
> +    // Set handler for about button
> +    $('#btn-about').on('click', function(event) {
> +      event.preventDefault();
> +    });
>
> -        $("#aboutModal").append($("#about-tmpl").html());
> +    $("#aboutModal").append($("#about-tmpl").html());
>
> -        // Set handler for help button
> -        $('#btn-help').on('click', wok.openHelp);
> +    // Set handler for help button
> +    $('#btn-help').on('click', wok.openHelp);
>
> -        // Set handler to peers drop down
> -        $('#peers').on('click', function() {
> +    // Set handler to peers drop down
> +    $('#peers').on('click', function() {
>
> -            // Check if any request is in progress
> -            if ($('.dropdown', '#peers').is('.open') || searchingPeers == true)
> -                return
> +      // Check if any request is in progress
> +      if ($('.dropdown', '#peers').is('.open') || searchingPeers == true)
> +        return
>
> -            $('#search-peers').show();
> -            $('#no-peers').addClass('hide-content');
> -            $('a', '#peers').remove();
> +      $('#search-peers').show();
> +      $('#no-peers').addClass('hide-content');
> +      $('a', '#peers').remove();
>
> -            searchingPeers = true;
> +      searchingPeers = true;
>
> -            kimchi.getPeers(function(data){
> -                $('#search-peers').hide();
> -                if (data.length == 0)
> -                    $('#no-peers').removeClass('hide-content');
> +      kimchi.getPeers(function(data) {
> +        $('#search-peers').hide();
> +        if (data.length == 0)
> +          $('#no-peers').removeClass('hide-content');
>
> -                for(var i=0; i<data.length; i++){
> -                    $('.dropdown-menu ', '#peers').append("<li><a href='"+data[i]+"' target='_blank'>"+data[i]+"</a></li>");
> -                }
> -                searchingPeers = false;
> -            });
> -        });
> -    };
> -
> -    var initUI = function() {
> -        var errorMsg = "";
> -        $(document).bind('ajaxError', function(event, jqXHR, ajaxSettings, errorThrown) {
> -            if (!ajaxSettings['wok']) {
> -                return;
> -            }
> -
> -            if (jqXHR['status'] === 401) {
> -                var isSessionTimeout = jqXHR['responseText'].indexOf("sessionTimeout")!=-1;
> -                wok.user.showUser(false);
> -                wok.previousAjax = ajaxSettings;
> -                $(".empty-when-logged-off").empty();
> -                $(".remove-when-logged-off").remove();
> -                document.location.href= isSessionTimeout ? 'login.html?error=sessionTimeout' : 'login.html';
> -                return;
> -            }
> -            else if((jqXHR['status'] == 0) && ("error"==jqXHR.statusText) && !wok.isLoggingOut && errorMsg == "") {
> -               errorMsg = i18n['WOKAPI6007E'].replace("%1", jqXHR.state());
> -               wok.message.error(errorMsg);
> -            }
> -            if(ajaxSettings['originalError']) {
> -                ajaxSettings['originalError'](jqXHR, jqXHR.statusText, errorThrown);
> -            }
> -        });
> +        for (var i = 0; i < data.length; i++) {
> +          $('.dropdown-menu ', '#peers').append("<li><a href='" + data[i] + "' target='_blank'>" + data[i] + "</a></li>");
> +        }
> +        searchingPeers = false;
> +      });
> +    });
> +  };
> +
> +  var initUI = function() {
> +    var errorMsg = "";
> +    $(document).bind('ajaxError', function(event, jqXHR, ajaxSettings, errorThrown) {
> +      if (!ajaxSettings['wok']) {
> +        return;
> +      }
> +
> +      if (jqXHR['status'] === 401) {
> +        var isSessionTimeout = jqXHR['responseText'].indexOf("sessionTimeout") != -1;
> +        wok.user.showUser(false);
> +        wok.previousAjax = ajaxSettings;
> +        $(".empty-when-logged-off").empty();
> +        $(".remove-when-logged-off").remove();
> +        document.location.href = isSessionTimeout ? 'login.html?error=sessionTimeout' : 'login.html';
> +        return;
> +      } else if ((jqXHR['status'] == 0) && ("error" == jqXHR.statusText) && !wok.isLoggingOut && errorMsg == "") {
> +        errorMsg = i18n['WOKAPI6007E'].replace("%1", jqXHR.state());
> +        wok.message.error(errorMsg);
> +      }
> +      if (ajaxSettings['originalError']) {
> +        ajaxSettings['originalError'](jqXHR, jqXHR.statusText, errorThrown);
> +      }
> +    });
>
> -        wok.user.showUser(true);
> -        initListeners();
> -        updatePage();
> -
> -        // Overriding Bootstrap Modal windows to allow a stack of modal windows and backdrops
> -        $(document).on({
> -            'show.bs.modal': function () {
> -                var zIndex = 1040 + (10 * $('.modal:visible').length);
> -                $(this).css('z-index', zIndex);
> -                setTimeout(function() {
> -                    $('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack');
> -                }, 0);
> -            },
> -            'hidden.bs.modal': function() {
> -                if ($('.modal:visible').length > 0) {
> -                    // restore the modal-open class to the body element, so that scrolling works
> -                    // properly after de-stacking a modal.
> -                    setTimeout(function() {
> -                        $(document.body).addClass('modal-open');
> -                    }, 0);
> -                }
> -            }
> -        }, '.modal');
> -
> -
> -    };
> -
> -    // Load i18n translation strings first and then render the page.
> -    wok.getI18n(
> -        function(i18nStrings){ //success
> -            i18n = i18nStrings;
> -            buildTabs(initUI);
> -        },
> -        function(data){ //error
> -            wok.message.error(data.responseJSON.reason);
> +    wok.user.showUser(true);
> +    initListeners();
> +    updatePage();
> +
> +    // Overriding Bootstrap Modal windows to allow a stack of modal windows and backdrops
> +    $(document).on({
> +      'show.bs.modal': function() {
> +        var zIndex = 1040 + (10 * $('.modal:visible').length);
> +        $(this).css('z-index', zIndex);
> +        setTimeout(function() {
> +          $('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack');
> +        }, 0);
> +      },
> +      'hidden.bs.modal': function() {
> +        if ($('.modal:visible').length > 0) {
> +          // restore the modal-open class to the body element, so that scrolling works
> +          // properly after de-stacking a modal.
> +          setTimeout(function() {
> +            $(document.body).addClass('modal-open');
> +          }, 0);
>           }
> -    );
> +      }
> +    }, '.modal');
> +
> +
> +  };
> +
> +  // Load i18n translation strings first and then render the page.
> +  wok.getI18n(
> +    function(i18nStrings) { //success
> +      i18n = i18nStrings;
> +      buildTabs(initUI);
> +    },
> +    function(data) { //error
> +      wok.message.error(data.responseJSON.reason);
> +    }
> +  );
>   };
>
>
>   wok.checkHelpFile = function(path) {
> -    var lang = wok.lang.get();
> -    var url = path.replace("tabs", "help/" + lang);
> -    // Checking if help page exist.
> -    $.ajax({
> -        url: url,
> -        async: false,
> -        error: function() { url = ""; },
> -        success: function() { }
> -    });
> -    return url;
> +  var lang = wok.lang.get();
> +  var url = path.replace("tabs", "help/" + lang);
> +  // Checking if help page exist.
> +  $.ajax({
> +    url: url,
> +    async: false,
> +    error: function() {
> +      url = "";
> +    },
> +    success: function() {}
> +  });
> +  return url;
>   };
>
>   wok.getHostname = function(e) {
> -    host = window.location.hostname;
> -    $('span.host-location').text(host);
> -    return host;
> +  host = window.location.hostname;
> +  $('span.host-location').text(host);
> +  return host;
>   }
>
>   wok.openHelp = function(e) {
> -    var tab = $('#tabPanel ul li.active');
> -    var url = $(tab).find("input[name='helpPath']").val();
> -    window.open(url, "Wok Help");
> -    e.preventDefault();
> +  var tab = $('#tabPanel ul li.active');
> +  var url = $(tab).find("input[name='helpPath']").val();
> +  window.open(url, "Wok Help");
> +  e.preventDefault();
>   };




More information about the Kimchi-devel mailing list