var PageTemplate = new function() { var self = this; /**********/ /* PUBLIC */ /**********/ self.init = function() { // Top links initFavorites(); initUserMenu(); initFeedbackLink(); initLanguageMenu(); initFilterDisclosure(); // aowow: custom (visibility toggle for filters was removed at some point) // UI before page contents initFloatingStuff(); initTopTabs(); initTopBar(); initBreadcrumb(); inited = true; } self.get = function(name) { return opt[name]; } self.set = function(options) { if (!options) return; var old = {}; $.extend(old, opt); $.extend(opt, options); opt.activeTab = parseInt(opt.activeTab); if (inited) // Update UI on the fly if already created { if (opt.activeTab != old.activeTab) { updateTopTabs(); updateTopBar(); } if (opt.breadcrumb != old.breadcrumb) { updateBreadcrumb(); } } } self.getBreadcrumb = function() { return $bread; } self.updateBreadcrumb = function() { updateBreadcrumb(); } self.expandBreadcrumb = function() { return expandBreadcrumb(); } /***********/ /* PRIVATE */ /***********/ var inited = false; var opt = {}; var $bread; var $tabs; var checkedMenuItems = []; function construct() { createDomElements(); // Create nodes for which getters are available addBrowserClasses(); } function createDomElements() { $bread = $('
'); } function addBrowserClasses() { // This is done before the tag is loaded, so class names are added to the tag instead } function initFavorites() { var favMenu = $('#toplinks-favorites > a'); favMenu.text(LANG.favorites); if (!Favorites.hasFavorites()) favMenu.parent().hide(); Favorites.refreshMenu() } function initUserMenu() { var $link = $('#toplinks-user'); if (!$link.length) return; $link.attr('href', '?user=' + g_user.name); var menu = []; // User Page var userPage = ['user-page', LANG.userpage, '?user=' + g_user.name, null, {checkedUrl: new RegExp('user=' + g_user.name + '$', 'i')}]; menu.push(userPage); // Settings // var settings = ['settings', LANG.settings, 'http://' + window.location.hostname + '?account', null, {icon: g_staticUrl + '/images/icons/cog.gif', checkedUrl: /account/i}]; var settings = ['settings', LANG.settings, '?account', null, {icon: g_staticUrl + '/images/icons/cog.gif', checkedUrl: /account/i}]; menu.push(settings); // Reputation var reputation = ['reputation', LANG.reputation, '?reputation']; menu.push(reputation); // Guides // var guides = ['guides', 'My Guides', '?my-guides']; var guides = ['guides', LANG.myguides, '?my-guides', null, {onBeforeShow: generateGuidesSubmenu} ]; menu.push(guides); addCharactersMenu(menu); addProfilesMenu(menu); // Premium Upgrade var premiumUpgrade; if (!g_user.premium) { premiumUpgrade = ['premium-upgrade', LANG.premiumupgrade, '?premium', null, {className: 'q7', checkedUrl: /premium/i}]; menu.push(premiumUpgrade); } // Sign Out menu.push(['sign-out', LANG.signout, '?account=signout']); menu.push(['sign-out-global', LANG.logOutEverywhere, '?account=signout&global']); Menu.add($link, menu); $link.addClass('hassubmenu'); } function addCharactersMenu(userMenu) { if (!g_user.characters || !g_user.characters.length) return; // Menu will be generated on the fly var characters = ['characters', LANG.tab_characters, '?user=' + g_user.name + '#characters', null, {onBeforeShow: generateCharactersSubmenu} ]; userMenu.push(characters); } function addProfilesMenu(userMenu) { if (!g_user.profiles || !g_user.profiles.length) return; // Menu will be generated on the fly var profiles = ['profiles', LANG.tab_profiles, '?user=' + g_user.name + '#profiles', null, {onBeforeShow: generateProfilesSubmenu} ]; userMenu.push(profiles); } function generateCharactersSubmenu(menuItem) { var submenu = []; // Sort by realm, region, name g_user.characters.sort(function(a, b) { return $WH.strcmp(a.realmname, b.realmname) || $WH.strcmp(a.region, b.region) || $WH.strcmp(a.name, b.name); }); var lastKey; $.each(g_user.characters, function(idx, character) { if (!character.region || !character.realm || !character.name) return; // Group by realm+region var key = character.region + character.realm; if (key != lastKey) { var heading = [, character.realmname + ' (' + character.region.toUpperCase() + ')', g_getProfileRealmUrl(character)]; submenu.push(heading); lastKey = key; } var menuItem = [character.id, character.name, g_getProfileUrl(character), null, { className: (character.pinned ? 'icon-star-right ' : '') + 'c' + character.classs, // tinyIcon: $WH.g_getProfileIcon(character.race, character.classs, character.gender, character.level, character.id, 'tiny') // aowow - see profile=avatar endpoint for explanation tinyIcon: $WH.g_getProfileIcon(character.race, character.classs, character.gender, character.level, 0, 'tiny') }]; submenu.push(menuItem); }); menuItem[MENU_IDX_SUB] = submenu; } function generateProfilesSubmenu(menuItem) { var submenu = []; // Sort by name g_user.profiles.sort(function(a, b) { return $WH.strcmp(a.name, b.name); }); $.each(g_user.profiles, function(idx, profile) { var menuItem = [profile.id, profile.name, g_getProfileUrl(profile), null, { className: 'c' + profile.classs, tinyIcon: $WH.g_getProfileIcon(profile.race, profile.classs, profile.gender, profile.level, profile.icon, 'tiny') }]; submenu.push(menuItem); }); submenu.push([0, LANG.menu_newprofile, '?profile&new', null, {tinyIcon: 'inv_misc_questionmark'}]); menuItem[MENU_IDX_SUB] = submenu; } // aowow- custom function generateGuidesSubmenu(menuItem) { var submenu = []; if (!g_user.guides || !g_user.guides.length) return; // Sort by name g_user.guides.sort(function(a, b) { return $WH.strcmp(a.title, b.title); }); $.each(g_user.guides, function(idx, guide) { var menuItem = [guide.id, guide.title, guide.url, [[guide.id, LANG.button_edit, '?guide=edit&id=' + guide.id]]]; submenu.push(menuItem); }); if (g_user.id) submenu.push([0, LANG.createnewguide, '?guide=new']); menuItem[MENU_IDX_SUB] = submenu; } function initFeedbackLink() { $('#toplinks-feedback') .attr('href', 'javascript:;') .click(function() { ContactTool.show(); }); } function initLanguageMenu() { var linkBefore = 'http://'; var linkAfter = location.pathname + location.search + location.hash; var localeId = Locale.getId(); var menu = []; var currentLocale; $.each(Locale.getAllByName(), function(idx, locale) { var menuItem = [ locale.id, locale.description, g_host + '/?locale=' + locale.id, // aowow: edited for unsupported subdomains # linkBefore + locale.domain + linkAfter null, // more custom null // also custom ]; if (typeof g_pageInfo != 'undefined' && g_pageInfo.type && g_types[g_pageInfo.type]) menuItem[4] = {rel: g_types[g_pageInfo.type] + '=' + g_pageInfo.typeId + " domain=" + locale.domain}; if (locale.id == localeId) { menuItem.checked = true; currentLocale = locale; } menu.push(menuItem); }); setLanguageMenu($('#toplinks-language'), menu, currentLocale); $(document).ready(function() { setLanguageMenu($('#footer-links-language'), menu, currentLocale); }); } function setLanguageMenu($node, menu, locale) { $node.attr('href', 'javascript:;'); // $node.text(locale.description); $node.addClass('hassubmenu'); Menu.add($node, menu); } function initFloatingStuff() { // Expand button $('#header-expandsite') .attr('href', 'javascript:;') .click(expandButtonClick); } function initTopTabs() { var $topTabs = $('#toptabs'); if (!$topTabs.length) return; $tabs = $('