%PDF- %PDF-
Direktori : /home/lightco1/public_html/kichler.com.au/plugins/system/jsnpoweradmin/assets/js/ |
Current File : /home/lightco1/public_html/kichler.com.au/plugins/system/jsnpoweradmin/assets/js/adminbar.js |
/** * @version $Id$ * @package JSNPoweradmin * @author JoomlaShine Team <support@joomlashine.com> * @copyright Copyright (C) 2012 JoomlaShine.com. All Rights Reserved. * @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html * * Websites: http://www.joomlashine.com * Technical Support: Feedback - http://www.joomlashine.com/contact-us/get-support.html */ var JSNAdminBar = new Class ({ /** * Class initialize * @param options */ initialize: function (options) { var windowSize = jsnpa_m(window).getSize(); var maxSupportedWindowSize = 975; if (windowSize.x < maxSupportedWindowSize) { jsnpa_m('header-box').show(); jsnpa_m('border-top').show(); return; } this.uiHelper = new JSNAdminBarUIHelper(); var self = this; this.options = options; try{ this.uiHelper.beforeRenderHook(); }catch (e) { // TODO: handle exception } this.createUI(); try{ this.uiHelper.afterCreateUiHook(); }catch (e) { // TODO: handle exception } this.addEvents(); this.preloadImages(); this.sessionTime = parseInt(Cookie.read('last-request-time')); this.lifetime = parseInt(Cookie.read('session-life-time')); // Start configuration monitor this.monitorInterval = setInterval(function () { var sessionTime = parseInt(Cookie.read('last-request-time')); if (sessionTime != self.sessionTime) { self.sessionTime = sessionTime; self.lifetime = parseInt(Cookie.read('session-life-time')); self.options.warningTime = parseInt(Cookie.read('session-warning-time')); self.options.disableWarning = parseInt(Cookie.read('session-disable-warning')) === 1; clearInterval(self.countdownInterval); self.startCountdown(); } }, 5000); this.lastRequestTime = parseInt(Cookie.read('last-request-time')); this.startCountdown(); try{ this.uiHelper.afterRenderHook(); }catch (e) { // TODO: handle exception } }, preloadImages: function () { var baseUrl = this.options.rootUrl + 'plugins/system/jsnpoweradmin/assets/images/'; if (this.options.preloadImages !== undefined) { var imageList = new Array(); this.options.preloadImages.each(function (name) { var image = new Image(); image.src = baseUrl + name; imageList.push(image); }); } }, /** * Create user interface for admin bar * @return void */ createUI: function () { var self = this; this.mouseClickCord = ''; this.uiHelper = new JSNAdminBarUIHelper(); this.bodyWrapper = jsnpa_m('jsn-body-wrapper'); this.body = jsnpa_m(document.body); this.toolbarWrapper = jsnpa_m('jsn-adminbar'); this.dropdown_class = 'dropdown-menu'; this.submenu_dropdown_class = 'dropdown-submenu'; if (typeof(self.uiHelper.getParentMenuClass) != 'undefined') { this.dropdown_class = self.uiHelper.getParentMenuClass(); } if (typeof(self.uiHelper.getParentSubMenuClass) != 'undefined') { this.submenu_dropdown_class = self.uiHelper.getParentSubMenuClass(); } this.body.addClass((this.options.pinned == true) ? 'jsn-adminbar-pinned' : 'jsn-adminbar-notpinned'); // Copy styles of body to body wrapper element this.bodyWrapper.setStyles({ paddingLeft : parseInt(this.body.getStyle('padding-left')) + parseInt(this.body.getStyle('margin-left')), paddingRight : parseInt(this.body.getStyle('padding-right')) + parseInt(this.body.getStyle('margin-right')), paddingTop : 2, paddingBottom : parseInt(this.body.getStyle('padding-bottom')) + parseInt(this.body.getStyle('margin-bottom')), borderLeft : this.body.getStyle('border-left'), borderRight : this.body.getStyle('border-right'), borderTop : this.body.getStyle('border-top'), borderBottom : this.body.getStyle('border-bottom') }); var background = this.body.getStyle('background'); if (background !== undefined) { this.bodyWrapper.setStyle('background', background); } // Reset styles for body element this.body.setStyles({ margin: 0, border: 0, backgroundImage: 'none' }); //this.headerbox = new Element('div', { id: 'jsn-adminbar-headerbox' }); this.toolbar = new Element(Mooml.render('admin-toolbar', this.options)); this.toolbar.inject(jsnpa_m('jsn-adminbar'), 'top'); // Append menu bar this.menubar = this.toolbar.getElementById('jsn-adminbar-mainmenu'); this.menubar.grab(this.uiHelper.getMenuPosition()); var jsnMenu = 'jsn-adminbar-menu'; jsnpa_mm('#menu').setProperty('id', jsnMenu).addClass('nav'); try{ jsnpa_m(jsnMenu).getElements('>.has-child').addClass('dropdown'); jsnpa_m(jsnMenu).getElements('>.has-child>a').addClass('dropdown-toggle'); jsnpa_m(jsnMenu).getElements('>.has-child>ul').addClass('dropdown-menu'); jsnpa_m(jsnMenu).getElements('>.has-child>ul li.has-child').addClass('dropdown-submenu'); jsnpa_m(jsnMenu).getElements('>.has-child>ul>li>ul').addClass('dropdown-menu'); jsnpa_m(jsnMenu).getElements('>.has-child>.menu-wrapper>ul').addClass('dropdown-menu'); jsnpa_m(jsnMenu).getElements('>.has-child>.menu-wrapper>ul li.has-child').addClass('dropdown-submenu'); jsnpa_m(jsnMenu).getElements('>.has-child>.menu-wrapper>ul>li>ul').addClass('dropdown-menu'); jsnpa_m(jsnMenu).getElements('.separator').removeClass('separator').addClass('divider'); jsnpa_m(jsnMenu).getElements('>li')[0].getElements('ul>li.divider').dispose(); // Remove all elements which have "icon-" in class name // to avoid conflict with bootstrap this.menubar.getElements('[class*="icon-"]').each(function (element){ //element.grab(new Element('i', {'class': origClassName}), 'top'); element.erase('class'); }); // Change anchor's target to void this.menubar.getElements('[href="#"]').each(function (element){ element.setProperty('href', 'javascript:void(0)'); }); // Process open and close behavior var _isMouseClickedIn = false; var _isMouseIn = false; var jsnpa_jquery = jQuery; function resizeMenu( menuElement ) { var parent = menuElement; var wrapper = jsnpa_m(parent).getElements('>.menu-wrapper'); var ul = jsnpa_m(parent).getElement('ul.dropdown-menu'); if (wrapper && wrapper.length) { var h = jsnpa_m(parent).getElement('ul').getHeight(), w = jsnpa_m(parent).getElement('ul').getWidth(); if (h > window.innerHeight) { jsnpa_jquery('.menu-wrapper').append(ul); wrapper.addClass('menu-fit').setStyle('width', w); wrapper.removeClass('hidden') jsnpa_jquery('.scroll-up').css({'display': 'block','width': w}); jsnpa_jquery('.scroll-down').css({'display':'block', 'width': w}) } else { parent.appendChild(ul); ul.setStyle('top', 'auto'); wrapper.addClass('hidden') } } } function resizeSubMenu( event, menuElement ) { var parent = menuElement; if (event.target.parentElement.hasClass('dropdown-submenu')) { var ul = event.target.parentElement.getElement('ul.dropdown-menu'); if (ul) { var element_height = jsnpa_jquery(event.target.parentElement).offset().top + ul.getHeight(); if (element_height > window.innerHeight) { var top = element_height - window.innerHeight - 5; ul.setStyle('top', '-'+top+'px'); } } } } var scrollUpInterval, scrollDownInterval; function scrollMenu(el, value) { var $list = jsnpa_jquery(el).siblings('.dropdown-menu'); var top = $list.offset().top; var offset = top + value; if (offset > 5) {offset = 5}; if (offset < window.innerHeight - $list.height() - 5) { offset = window.innerHeight - $list.height() - 5; } if ((window.innerHeight - offset) - ($list.height() + 5) == 0) { jsnpa_jquery('.scroll-up').css({'display':'none'}) } else { jsnpa_jquery('.scroll-up').css({'display':'block'}) } if(offset == 5) { jsnpa_jquery('.scroll-down').css({'display':'none'}) } else { jsnpa_jquery('.scroll-down').css({'display':'block'}) } $list.css({ top: offset }); } jsnpa_jquery('#'+jsnMenu).on('mouseenter', '.scroll-up', function(e) { window.scrollTo(0,0); scrollUpInterval = setInterval(function() { scrollMenu(e.currentTarget, -100); }, 100); }); jsnpa_jquery('#'+jsnMenu).on('mouseenter', '.scroll-down', function(e) { window.scrollTo(0,0); scrollUpInterval = setInterval(function() { scrollMenu(e.currentTarget, +100); }, 100); }); jsnpa_jquery('#'+jsnMenu).on('mouseleave', '.scroll-down,.scroll-up', function(e) { clearInterval(scrollUpInterval); clearInterval(scrollDownInterval); }); //jsnpa_jquery('#'+jsnMenu).on('mousewheel', '.menu-wrapper', function(e) { // e.preventDefault(); // e.stopPropagation(); // window.scrollTo(0,0); // var offset = e.originalEvent.deltaY; // scrollMenu(jsnpa_jquery(e.currentTarget).find('.scroll-up'), -offset); //}); jsnpa_m(jsnMenu).getElements('>li').addEvent('click', function (e){ _isMouseClickedIn = true; jsnpa_m(jsnMenu).getElements('.open').removeClass('open'); if (!this.hasClass('open')) { this.addClass('open'); }else{ this.removeClass('open'); } resizeMenu(e.target.parentNode); }); jsnpa_m(jsnMenu).getElements('>li').addEvent('mouseover', function (e){ _isMouseIn = true; if (_isMouseClickedIn ) { jsnpa_m(jsnMenu).getElements('.open').removeClass('open'); this.addClass('open'); resizeSubMenu(e,e.target.parentNode); resizeMenu(e.target.parentNode); } }); jsnpa_m(jsnMenu).getElements('>li').addEvent('mouseout', function (e){ _isMouseIn = false; }); jsnpa_m(jsnMenu).getElements('>li').addEvent('mouseout', function (e){ _isMouseIn = false; }); jsnpa_mm('body').addEvent('click', function(){ if (_isMouseClickedIn == false) { jsnpa_m(jsnMenu).getElements('.open').removeClass('open'); } if (_isMouseIn == false){ _isMouseClickedIn = false; jsnpa_m(jsnMenu).getElements('.open').removeClass('open'); } _isMouseIn = false; }); }catch (e){ } // END OF - Process open and close behavior // Apply for extendsion 3rd-party this.menuDefault = this.toolbar.getElementById('menu'); if(this.menuDefault != null){ this.menuDefault.getElements('[href="javascript:void(0)"]').each(function(element){ element.setProperty('href', '#'); }) } if (this.options.logoFile !== undefined && this.options.logoFile != 'N/A') { // Declare logo position this.logo = this.toolbar.getElement('#jsn-adminbar-logo'); this.loadLogo(); } this.statusPosition = this.toolbar.getElement('#module-status'); this.moduleStatus = this.uiHelper.getStatusPosition(); this.siteMenuStatus = this.toolbar.getElement('#jsn-adminbar-sitemenu-status'); if (this.moduleStatus != null) { var loggedInItem = this.moduleStatus.getElement('.loggedin-users'), backLoggedInItem = this.moduleStatus.getElement('.backloggedin-users'); if (loggedInItem != null) { var loggedInIcon = loggedInItem.getStyle('background-image'); loggedInItem.setStyle('background-image', loggedInIcon); this.siteMenuStatus.grab(loggedInItem); } if (backLoggedInItem) { var backLoggedInIcon = loggedInItem.getStyle('background-image'); backLoggedInItem.setStyle('background-image', backLoggedInIcon); this.siteMenuStatus.grab(backLoggedInItem); } } if (this.moduleStatus != null) { var self = this; this.moduleStatus.getChildren().each(function (element) { if (element.id == 'user-status' || element.hasClass('loggedin-users') || element.hasClass('backloggedin-users') || element.hasClass('no-unread-messages') || element.hasClass('viewsite') || element.hasClass('logout')) { return; } element.inject(self.statusPosition); }); } this.spotlightBox = this.toolbar.getElement('#jsn-adminbar-spotlight'); this.spotlightInput = this.spotlightBox.getElement('input'); this.spotlightPlaceHolder = this.spotlightBox.getElement('span.placeholder'); this.spotlightCloseButton = this.spotlightBox.getElement('a.close'); this.spotlightItems = this.spotlightBox.getElement('div.items'); this.historyButton = this.toolbar.getElement('#jsn-adminbar-history-button'); this.historyItems = this.historyButton.getElement('div.items'); this.favouriteButton = this.toolbar.getElement('#jsn-adminbar-favourite-button'); this.favouriteItems = this.favouriteButton.getElement('div.items'); this.toolbarWrapper.setStyle('display', 'block'); if (this.options.pinned == true) { this.bodyWrapper.setStyle('margin-top', 8); } this.toolbarWrapper.addClass('jsn-bootstrap'); this.toolbarWrapper.addClass(JoomlaShine.defaultTemplate); this.addMenus(); this.refresh(); this.dispatchMenuBarPosition('jsn-adminbar'); }, loadLogo: function () { if (this.options.logoFile === undefined || this.options.logoFile == null || this.options.logoFile == '' || this.options.logoFile == 'N/A') { return; } // Load logo file var self = this, logoImage = new Element('img'); logoImage.src = this.options.logoFile; logoImage.addEvent('load', function () { this.setStyles({ 'visibility': 'hidden', 'position' : 'absolute' }); this.inject(self.body); // Get real size of image var logoSize = this.getSize(); if (logoSize.y > 24) { this.setStyle('height', 24); } if (self.options.logoLink != '' && self.options.logoLink != 'N/A') { var logoLink = new Element('a', { 'href': self.options.logoLink, 'target': self.options.logoLinkTarget, 'title': self.options.logoTitle }); logoLink.grab(this); logoLink.inject(self.logo); } else { // Inject image to logo position this.inject(self.logo); } this.setStyles({ visibility: 'visible', position: 'relative' }) }); }, /** * Register events for elements on admin toolbar * @return void */ addEvents: function () { var self = this, dropdownMenus = this.toolbar.getElements('.jsn-adminbar-menu-dropdown'), dropdownButtons = this.toolbar.getElements('.jsn-adminbar-button-dropdown'); this.toolbar.getElements('.jsn-adminbar-menu-dropdown').addEvent('click', function () { self.abortSpotlightProgress(); self.setSpotlightState((self.spotlightKeyword !== undefined && self.spotlightKeyword != '') ? 'inactive' : 'closed'); }); // User profile link dropdownMenus .addEvent('click', function (e) { self.mouseClickCord = 'adminbar-plugin'; e.stopPropagation(); dropdownButtons.removeClass('active'); dropdownMenus.removeClass('active'); this.addClass('active'); }); // User profile link this.toolbar.getElement('#jsn-adminbar-usermenu-profile a') .addEvent('click', function (e) { e.stop(); self.openProfile(); }); // History button var historyButton = this.historyButton.getElement('.jsn-history-button-wrapper'); historyButton.addEvent('click', function (e) { self.favouriteButton.removeClass('active'); dropdownMenus.removeClass('active'); self.abortSpotlightProgress(); self.setSpotlightState((self.spotlightKeyword !== undefined && self.spotlightKeyword != '') ? 'inactive' : 'closed'); self.historyButton .toggleClass('active') .getElement('ul'); historyButton .addEvent('click', function (e) { e.stop(); }); // Retrieve data from server when button is active if (self.historyButton.hasClass('active')) { self.loadHistory(self.historyButton); } e.stop(); }); var favouriteButton = this.favouriteButton.getElement('.jsn-favourite-button-wrapper'); favouriteButton.addEvent('click', function (e) { self.historyButton.removeClass('active'); dropdownMenus.removeClass('active'); self.abortSpotlightProgress(); self.setSpotlightState((self.spotlightKeyword !== undefined && self.spotlightKeyword != '') ? 'inactive' : 'closed'); self.favouriteButton .toggleClass('active') .getElement('ul'); favouriteButton .addEvent('click', function (e) { e.stop(); }); // Retrieve data from server when button is active if (self.favouriteButton.hasClass('active')) { self.loadFavourites(); } if(self.favouriteState == 'done') { self.refreshFavouriteSize(); } e.stop(); }); self.proceedFavourites(); // Spotlight events // self.spotlightInput.addEvent('click', function (e) { // self.setSpotlightState('init'); // e.stop(); // }); self.spotlightInput.addEvents({ 'click': function (e) { if (self.spotlightKeyword !== undefined && self.spotlightKeyword != null && self.spotlightKeyword != '') { self.setSpotlightState('active'); } dropdownMenus.removeClass('active'); e.stop(); }, 'focus': function (e) { self.spotlightPlaceHolder.hide(); }, 'blur': function (e) { if (!this.value || this.value.length < 3) { this.value = ''; self.spotlightPlaceHolder.show(); } }, 'keyup': function (e) { dropdownMenus.removeClass('active'); var newKeyword = self.spotlightInput.get('value').trim(); if(newKeyword.length < 3){ self.spotlightBox.removeClass('has-results'); self.setSpotlightState('active'); return false; } if (newKeyword != self.spotlightKeyword) { self.spotlightKeyword = newKeyword; self.spotlightItems .getElements('li.item, li.group') .destroy(); self.spotlightBox .removeClass('has-results') .removeClass('no-results'); if (newKeyword == '') { self.abortSpotlightProgress(); self.setSpotlightState('init'); return; } self.resetSpotlight(); self.loadSpotlightResults(); } } }); self.spotlightBox.getChildren('.placeholder').addEvents({ 'click': function (){ self.spotlightInput.focus(); } }); self.spotlightCloseButton.addEvent('click', function (e) { self.setSpotlightState('closed'); self.spotlightKeyword = undefined; self.spotlightInput.value = ''; self.spotlightPlaceHolder.show(); e.stop(); }); self.spotlightInput.addEvent('focus', function (e) { dropdownButtons.removeClass('active'); }); // Check if all Dropdown of Adminbar can be closed canCloseDropdownButtons = function (e){ if ( ((typeof(self.spotlightScrollbar) != 'undefined' && e.target != self.spotlightScrollbar.handle) || typeof(self.spotlightScrollbar) == 'undefined') && !self.favouriteButton.getElements('#favourite-addnew a').contains(e.target) && !self.favouriteButton.getElements('#favourite-addnew-box-wrapper input, #favourite-addnew-box-wrapper button, #favourite-addnew-box-wrapper i').contains(e.target) ) { return true; } return false; } // Close dropdown buttons when clicked to outside of button jsnpa_m(document).addEvents({ 'click': function (e) { if(canCloseDropdownButtons(e)){ self.setSpotlightState((self.spotlightKeyword !== undefined && self.spotlightKeyword != '') ? 'inactive' : 'closed'); dropdownButtons.removeClass('active'); dropdownMenus.removeClass('active'); } }, 'touchstart': function (e) { if (self.mouseClickCord != 'adminbar-plugin'){ self.setSpotlightState((self.spotlightKeyword !== undefined && self.spotlightKeyword != '') ? 'inactive' : 'closed'); dropdownMenus.removeClass('active'); dropdownButtons.removeClass('active'); }else{ self.mouseClickCord = ''; } }, 'keydown': function (e) { var activeDropdownButton = self.toolbar.getElement('.jsn-adminbar-button-dropdown.active, #jsn-adminbar-spotlight.state-done.has-results'); if (activeDropdownButton != null && ['up', 'down', 'enter'].indexOf(e.key) != -1) { self.navigateItem(activeDropdownButton, e); e.stop(); } if (['esc'].indexOf(e.key) != -1) { self.setSpotlightState((self.spotlightKeyword !== undefined && self.spotlightKeyword != '') ? 'inactive' : 'closed'); dropdownMenus.removeClass('active'); dropdownButtons.removeClass('active'); } } }); this.spotlightItems.addEvents({ 'touchstart': function (e){ e.stopPropagation(); } }); this.spotlightBox.addEvents({ 'touchstart': function (e){ e.stopPropagation(); } }); jsnpa_m(window).addEvent('resize', function () { self.refresh(); }); jsnpa_m(window).addEvent('scroll', function () { self.refresh(); }); }, resetSpotlight: function () { this.spotlightItems.getElements('li.item').destroy(); this.spotlightItems.getElements('li.group').destroy(); this.spotlightItems.getElements('li.spotlight-notice').destroy(); this.spotlightItems.setStyle('height', 'auto'); if (!/iPhone|iPod|iPad/.test(navigator.userAgent)) { if (this.spotlightScrollbar !== undefined) { this.spotlightScrollbar.refresh(); this.spotlightScrollbar.scrollToPosition('top'); } } }, /** * Set current state for spotlight box * @param state * @param clearValue * @return void */ setSpotlightState: function (state, clearValue) { if (this.spotlightState !== undefined) { this.spotlightBox.removeClass('state-' + this.spotlightState); } this.spotlightState = state; this.spotlightBox.addClass('state-' + this.spotlightState); if (state == 'init') { this.spotlightInput.set('value', ''); this.spotlightInput.focus(); } // Clear result items if (state == 'closed') { this.spotlightItems .getElements('li.item, li.group') .destroy(); } this.refreshSpotlightSize(); }, /** * Retrieve results for the keyword to display on spotlight box * @param index * @return void */ loadSpotlightResults: function (index) { var coverageIndex = index || 0, coverage = this.options.searchCoverages[coverageIndex] || null, self = this; if (coverage == null) { this.spotlightBox.removeClass('has-results no-results'); this.spotlightBox.addClass((this.spotlightItems.getElements('li.item').length > 0) ? 'has-results' : 'no-results'); this.setSpotlightState('done'); return; } this.setSpotlightState('loading'); this.abortSpotlightProgress(); if (coverage == 'adminmenus') { var result = this.lookupMenus(this.spotlightKeyword.toLowerCase()); if (result.length > 0) { jsnpa_m(Mooml.render('admin-spotlight-item', { title: JoomlaShine.language.JSN_ADMINBAR_ADMINMENUS, type: 'group', hasMore: false })).inject(self.spotlightItems.getElement('li.jsn-loading'), 'before'); result.each(function (item) { item.keyword = self.spotlightKeyword; item.target = self.options.linkTarget; item.title = self.highlight(item.title, self.spotlightKeyword); jsnpa_m(Mooml.render('admin-spotlight-item', item)).inject(self.spotlightItems.getElement('li.jsn-loading'), 'before'); }); } self.refreshSpotlightSize(); self.loadSpotlightResults(coverageIndex + 1); return; } this.spotlightRequest = new Request.JSON({ url: 'index.php?'+ self.options.token + '=1', onSuccess: function (response) { if (response.length > 0) { response.each(function (item) { item.keyword = self.spotlightKeyword; item.target = self.options.linkTarget; if (item.type == 'item') { item.title = self.highlight(item.title, self.spotlightKeyword); if(item.checkedOut > 0){ item.title += '<i class="icon-lock"></i>'; } } jsnpa_m(Mooml.render('admin-spotlight-item', item)).inject(self.spotlightItems.getElement('li.jsn-loading'), 'before'); }); } self.refreshSpotlightSize(); self.loadSpotlightResults(coverageIndex + 1); } }) .get({ option: 'com_poweradmin', task: 'search.json', keyword: this.spotlightKeyword, coverages: coverage }); }, lookupMenus: function (keyword) { var matchedMenu = []; var parseMenuItem = function (menuItem, hasParent) { var menuLink = menuItem.getElement('a'); if (menuLink !== null) { var menuText = menuLink.get('text').trim() + ''; if (menuText != null && menuText.toLowerCase().indexOf(keyword) != -1) { var parent = hasParent !== undefined && hasParent == true ? menuItem.getParent().getPrevious() : null; var item = { title: menuText, link: menuLink.getProperty('href'), icon: menuLink.getProperty('class'), type: 'item', description: parent != null ? JoomlaShine.language.JSN_ADMINBAR_PARENT_MENUS + parent.get('text') : '' }; matchedMenu.push(item); } } }; this.menubar .getElement('ul') .getChildren().each(function (rootMenu) { var children = rootMenu.getElement('ul'); if (children != null) { children.getChildren().each(function (menuItem) { parseMenuItem(menuItem); var submenu = menuItem.getElement('ul'); if (submenu != null) { submenu.getChildren().each(function (submenuItem) { parseMenuItem(submenuItem, true); }); } }); } }); return matchedMenu.slice(0, this.options.spotlight.limit); }, refreshSpotlightSize: function () { var contentSize = this.spotlightItems.getElement('ul').getSize(); var containerSize = this.spotlightItems.getSize(); var windowSize = windowSize = jsnpa_m(window).getSize(); if (containerSize.y < contentSize.y) { this.spotlightItems.setStyle('height', (contentSize.y > windowSize.y - 100) ? windowSize.y - 100 : contentSize.y); } else { this.spotlightItems.setStyle('height', contentSize.y); } if (!/iPhone|iPod|iPad/.test(navigator.userAgent)) { if (this.spotlightScrollbar === undefined) { this.spotlightScrollbar = new JSNScrollbar(this.spotlightItems); this.spotlightBox.store('scrollbar', this.spotlightScrollbar); } this.spotlightScrollbar.refresh(); } }, /** * Stop search progress for spotlight * @return void */ abortSpotlightProgress: function () { if (this.spotlightTimeout !== undefined) { clearTimeout(this.spotlightTimeout); } if (this.spotlightRequest !== undefined && instanceOf(this.spotlightRequest, Request.JSON) == true) { this.spotlightRequest.cancel(); } }, /** * Add uninstall menu to removable extensions * @return void */ addMenus: function () { var self = this; var components = this.uiHelper.getComponentMenu(this.menubar);//this.menubar.getChildren()[4].getElement('ul').getChildren(); var extensions = this.uiHelper.getExtensionMenu(this.menubar); if (components != null && this.options.allowUninstall == true) { components.each(function (menu) { var elm = menu.getElement('a'); if (elm == null) { return; } var link = elm.getProperty('href'); var caption = elm.get('text'); var params = link.substring(link.indexOf('?')+1).parseQueryString(); // Add uninstall menu if component is unprotected if (self.options.protected.indexOf(params['option']) == -1) { var submenu = menu.getElement('ul'); if (submenu == null) { submenu = self.uiHelper.createMenuContainer(); submenu.addClass(self.dropdown_class); submenu.inject(menu); menu.addClass('node'); menu.addClass('has-child ' + self.submenu_dropdown_class); self.uiHelper.formatParentMenu(menu); }else{ submenu.addClass(self.dropdown_class); } var hasChildren = submenu.getChildren().length > 0; if (hasChildren) { submenu.adopt(self.uiHelper.getMenuSeparator()); } var uninstallMenu = self.uiHelper.createMenuItem( JoomlaShine.language.JSN_ADMINBAR_UNINSTALL, 'index.php?option=com_poweradmin&task=removeExtension&component=' + params['option'], '_parent' ); uninstallMenu .inject(submenu) .getElement('a').addEvent('click', function (e) { e.stop(); var element = this; var answer = confirm(JoomlaShine.language.JSN_ADMINBAR_UNINSTALL_CONFIRM.replace('{component}', caption)); if ( answer) { window.location = element.href; }else{ return; } }); } }); } // Create submenu for menu "Extensions" if (extensions != null) { extensions.each(function (menu) { var element = menu.getElement('a'); if (element == null) { return true; } var link = element.getProperty('href') + ''; var params = link.substring(link.indexOf('?')+1).parseQueryString(); if (params['option'] == 'com_templates') { self.addTemplateMenus(menu); } if (params['option'] == 'com_installer') { self.addExtensionMenus(menu); } }); } }, /** * make menu be absolute if the submenu list * is longer than the window height * @param menuWrapper : menubar wrapper id * @param menuContainer: root menu ul id */ dispatchMenuBarPosition: function (menuWrapper, menuContainer) { var oddTopSpace = 0; var windowOffsetTop = window.pageYOffset; var menuIsClicked = false; jsnpa_mm("#module-menu").getChildren('ul>li').each(function (el){ el.addEvent('click',function (e){ menuIsClicked = true; var scrollableHeight = (window.innerHeight-20); if((this.getElement('ul').getHeight()) >= scrollableHeight){ jsnpa_m(menuWrapper).getElement('#jsn-adminbar-wrapper').setStyle('position','fixed'); if(window.pageYOffset < windowOffsetTop){ jsnpa_m(menuWrapper).setStyle('top',window.pageYOffset + oddTopSpace); }else{ jsnpa_m(menuWrapper).setStyle('top',windowOffsetTop + oddTopSpace); } } }); }); jsnpa_mm("#module-menu").getChildren('ul>li').each(function (el){ el.addEvent('mouseover', function (e) { if (menuIsClicked) { if (jsnpa_m("module-menu").getChildren('ul>li>a').contains(e.target)) { var scrollableHeight = (window.innerHeight-20); if((this.getElement('ul').getHeight()) >= scrollableHeight){ jsnpa_m(menuWrapper).getElement('#jsn-adminbar-wrapper').setStyle('position','absolute'); if(window.pageYOffset < windowOffsetTop){ jsnpa_m(menuWrapper).setStyle('top',window.pageYOffset + oddTopSpace); }else{ jsnpa_m(menuWrapper).setStyle('top',windowOffsetTop + oddTopSpace); } } window.scrollTo(0, 0); } } }); }); jsnpa_m(document).addEvent('click', function (e) { if (!jsnpa_m(menuWrapper).getElements('#module-menu>ul>li>a').contains(e.target)) { jsnpa_m(menuWrapper).getElement('#jsn-adminbar-wrapper').setStyle('position', 'fixed') .setStyle('top',oddTopSpace); menuIsClicked = false; } }); }, /** * Add submenus for Template Manage menu of Joomla * @param menu * @return void */ addTemplateMenus: function (menu) { var buttons = {}; var uOption = this.options.urlparams.option; var uView = this.options.urlparams.view; var uLayout = this.options.urlparams.layout; var uId = this.options.urlparams.id; var extParam = ''; var refreshAfterClosing = false; // Add template and style ID to frame url // if it is being edited if (uOption == 'com_templates') { if (uView == 'style' && uLayout == "edit") { extParam = '&sid=' + uId; }else if (uView == 'template') { extParam = '&tid=' + uId; }else{ refreshAfterClosing = true; } }else if (uOption == 'com_poweradmin' && uView == 'rawmode') { refreshAfterClosing = true; } buttons[JoomlaShine.language.JCLOSE] = function (ui) { ui.close(); var currentUrl = window.location + ''; if (refreshAfterClosing) { window.location.reload(); } }; var menuTemplate = this.uiHelper.createMenuItem(JoomlaShine.language.JSN_ADMINBAR_STYLES, 'index.php?option=com_poweradmin&view=templates', '_parent'); menuTemplate.addEvent('click', function (e) { e.stop(); var modal = new JSNWindow({ handle: 'iframe', source: 'index.php?option=com_poweradmin&view=templates&tmpl=component' + extParam, width: 830, height: 730, title: JoomlaShine.language.JSN_ADMINBAR_STYLES_MANAGER, buttons: buttons, toolbarPosition: 'bottom' }); modal.open(); }); this.menuStyles = menuTemplate; var container = menu.getElement('ul'); if (container == null) { container = this.uiHelper.createMenuContainer(); } else { container.adopt(this.uiHelper.getMenuSeparator()) } container .adopt(this.menuStyles) .adopt(this.uiHelper.getMenuSeparator()) .adopt(this.uiHelper.createMenuItem(this.options.defaultStyles.site.title, 'index.php?option=com_templates&task=style.edit&id=' + this.options.defaultStyles.site.id, this.options.linkTarget)) .adopt(this.uiHelper.createMenuItem(this.options.defaultStyles.admin.title, 'index.php?option=com_templates&task=style.edit&id=' + this.options.defaultStyles.admin.id, this.options.linkTarget)) .inject(menu); container.addClass(this.dropdown_class); menu.addClass('node'); menu.addClass('has-child ' + this.submenu_dropdown_class); this.uiHelper.formatParentMenu(menu); }, /** * Extension Manager submenus * @param menu * @return void */ addExtensionMenus: function (menu) { menu.addClass('node'); menu.addClass('has-child ' + this.submenu_dropdown_class); this.uiHelper.formatParentMenu(menu); var container = this.uiHelper.createMenuContainer(); container.adopt(this.uiHelper.createMenuItem(JoomlaShine.language.JSN_ADMINBAR_EXT_INSTALL, 'index.php?option=com_installer', this.options.linkTarget)); container.adopt(this.uiHelper.createMenuItem(JoomlaShine.language.JSN_ADMINBAR_EXT_MANAGE, 'index.php?option=com_installer&view=manage', this.options.linkTarget)); container.adopt(this.uiHelper.createMenuItem(JoomlaShine.language.JSN_ADMINBAR_EXT_UPDATE, 'index.php?option=com_installer&view=update', this.options.linkTarget)); container.inject(menu); container.addClass(this.dropdown_class); }, /** * Run countdown for session lifetime * @return void */ startCountdown: function () { var self = this; var lifetime = this.lifetime * 60; var lefttime = lifetime; var userButton = self.toolbar.getElement('#jsn-adminbar-user-button'); var countdown = self.toolbar.getElement('#jsn-adminbar-usermenu-welcome .countdown'); var icon = self.toolbar.getElement('#jsn-adminbar-user-button .ico-user'); var warningTime = self.options.warningTime * 60; var disableWarning = self.options.disableWarning; self.countdownInterval = setInterval(function () { var time = self.secondsToTime(lefttime, true); countdown.set('text', time['h'] + ':' + time['m'] + ':' + time['s']); userButton.addClass('has-countdown'); if (lefttime == warningTime && disableWarning === false) { alert(JoomlaShine.language.JSN_ADMINBAR_TIMEOUT_WARNING.replace('{minutes}', Math.round(lefttime/60))); } if (lefttime == 0) { clearInterval(self.countdownInterval); } self.updateUserIcon(icon, lefttime, lifetime); lefttime--; }, 1000); }, /** * Stop and hide countdown * @return void */ removeCountdown: function () { var self = this; var countdown = self.toolbar.getElement('#jsn-adminbar-usermenu-welcome .countdown'); countdown.setStyle('visibility', 'hidden'); clearInterval(self.countdownInterval); }, /** * Update background position for user menu icon * @param icon * @param lefttime * @param lifetime */ updateUserIcon: function (icon, lefttime, lifetime) { var remainingPercent = Math.round(lefttime/lifetime*100); var backgroundTop = 0; if (lefttime == 0) backgroundTop = 96; else if (remainingPercent < 10) backgroundTop = 80; else if(remainingPercent < 30) backgroundTop = 64; else if(remainingPercent < 50) backgroundTop = 48; else if(remainingPercent < 70) backgroundTop = 32; else if(remainingPercent < 90) backgroundTop = 16; else backgroundTop = 0; icon.setStyle('background-position', '0 -' + backgroundTop + 'px'); }, /** * Open user profile on modal box * @return void */ openProfile: function () { var buttons = {}; buttons[JoomlaShine.language.JSAVE] = function (ui) { if (ui.processForm()) { ui.submitForm('form'); } }; buttons[JoomlaShine.language.JCANCEL] = function (ui) { ui.close(); }; var newWindow = new JSNWindow({ source: 'index.php?option=com_admin&task=profile.edit&id=' + this.options.userId + '&tmpl=component&poweradmin=true', handle: 'iframe', injectCSS: this.options.rootUrl + 'plugins/system/jsnpoweradmin/assets/css/adminbar.extra.css', injectJS: this.options.rootUrl + 'media/system/js/mootools-core.js', width: 900, height: 550, scrollable: true, title: JoomlaShine.language.JSN_ADMINBAR_EDIT_PROFILE, buttons: buttons, toolbarPosition: 'bottom', // Callback method to listen state of window stateChanged: function (ui) { if (ui.currentState == 'active') { var checkCount = 0; setTimeout(function checkLoaded() { if (typeof ui.iframe.contentDocument.getElement == 'function') { loadIframe(); } else if (checkCount < 10) { setTimeout(checkLoaded, 100); checkCount++; } else { throw "Page never load"; } }, 100); function loadIframe() { var form = ui.iframe.contentDocument.getDocument().getElement('form'); if (form == null) { return; } // Inject processForm method to set window state to process ui.processForm = function (e) { var password = form.getElement('input#jform_password').value, confirm = form.getElement('input#jform_password2').value; if ((password != '' || confirm != '') && password != confirm) { form.getElement('input#jform_password') .getParent() .getChildren() .addClass('invalid'); form.getElement('input#jform_password2') .getParent() .getChildren() .addClass('invalid'); return false; } ui.setOptions({ contentLoaded: function () { ui.close(); return true; } }); ui.setState('processing'); return true; }; form.getElements('input') .removeEvents('keydown') .addEvent('keydown', function (e) { if (e.key == 'enter') { ui.processForm(e); } }); form.getElements('input#jform_email') .addEvent('keydown', function (e) { if (e.key == 'space') { e.preventDefault(); } }); form.getElements('#jform_username, input.readonly').setProperty('tabindex', '-1'); // Add necessarily information to form form.getElement('input[name=task]').setProperty('value', 'profile.save'); } } } }) .open(); }, /** * Retrieve all history from server and show to browser as a list * @param button Button clicked to load history * @return void */ loadHistory: function (button) { var self = this; var list = button.getElement('ul'); if (this.historyRequest !== undefined && instanceOf(this.historyRequest, Request.JSON) === true && this.historyRequest.isRunning()) { this.historyRequest.cancel(); } if (list.getElements('li.item') !== null) { list.getElements('li.item').destroy(); } this.setHistoryState('loading'); this.historyRequest = new Request.JSON({ url: self.options.history.url, onSuccess: function (data) { if (data.length == 0) { self.setHistoryState('done-empty'); } else { data.each(function (item) { item.target = self.options.linkTarget; Mooml.render('admin-history-item', item).inject(list); }); self.setHistoryState('done'); } self.refreshHistorySize(); } }).get(); }, /** * Retrieve all favourite items from server and show to browser as a list * @param button Button clicked to load history * @return void */ loadFavourites: function () { var self = this; var list = self.favouriteButton.getElement('ul'); if (self.favouriteState == 'done') { return; } if (this.favouriteRequest !== undefined && instanceOf(this.favouriteRequest, Request.JSON) === true && this.favouriteRequest.isRunning()) { this.favouriteRequest.cancel(); } if (list.getElements('li.item') !== null) { list.getElements('li.item').destroy(); } self.favouriteButton.getElement('.jsn-loading').show(); self.favouriteState = 'loading'; this.favouriteRequest = new Request.JSON({ url: 'index.php?option=com_poweradmin&task=favourite.load&' + self.options.token + '=1', onSuccess: function (data) { if (data.length == 0) { self.favouriteState = 'done-empty'; list.getElement('.jsn-empty').show(); }else { list.getElement('.jsn-empty').hide(); data.each(function (item) { item.target = self.options.linkTarget; var _item = Mooml.render('admin-favourite-item', item).inject(list) var btnData = new Array({classname: 'btn-mini btn-danger', title: JoomlaShine.language.JSN_ADMINBAR_FAVOURITE_REMOVE}); var btn = Mooml.render('admin-favourite-item-delete-button', btnData).inject(_item.getElement('a')); btn.addEvent('click', function (e){ e.stop(); self.removeFavourite(item.id); _item.dispose(); }); }); self.favouriteState = 'done'; } self.favouriteButton.getElement('.jsn-loading').hide(); self.refreshFavouriteSize(); } }).get(); }, removeFavourite: function (itemId) { var self = this; var myRequest = new Request({ url: 'index.php?option=com_poweradmin&task=favourite.remove&'+ self.options.token + '=1', method: 'post', onFailure: function(){ alert('Sorry, there was an error during removing. Please try again.'); self.loadFavourites(); } }); myRequest.send('id=' + itemId); }, proceedFavourites: function () { var self = this; var favActivate = self.favouriteButton.getElement('#favourite-addnew'); var favInputWrapper = self.favouriteButton.getElement('#favourite-addnew-box-wrapper'); favActivate.addEvent('click', function (){ this.setStyle('display', 'none'); favInputWrapper.setStyle('display', 'block'); favInputWrapper.getElement('#favourite-title').setAttribute('value', self.getPageTitle(self.options.urlparams).trim()); favInputWrapper.getElement('#favourite-title').focus(); }); favInputWrapper.getElements('#btn-favourite-add').addEvent('click', function (){ var favTitle = favInputWrapper.getElement('#favourite-title').value; var currentUrl = self.options.currentUrl; var baseUrl = self.options.baseUrl; var relativeUrl = encodeURIComponent(currentUrl.replace(baseUrl, '')); var myRequest = new Request({ url: 'index.php?option=com_poweradmin&task=favourite.save&'+ self.options.token + '=1', method: 'post', onRequest: function(){ favInputWrapper.getElement('#btn-favourite-add').addClass('jsn-loading').setStyles({'display': 'inline'}); favInputWrapper.getElement('#favourite-title').setAttribute('disabled', 'disabled'); }, onSuccess: function(responseText){ favInputWrapper.getElement('#btn-favourite-add').removeClass('jsn-loading').setStyles({'display': 'inline'}); favInputWrapper.getElement('#favourite-title').removeAttribute('disabled'); favInputWrapper.getElement('#favourite-title').setAttribute('value', ''); favInputWrapper.setStyle('display', 'none'); favActivate.setStyle('display', 'block'); // reload the list self.favouriteState = 'reload'; self.loadFavourites(); }, onFailure: function(){ alert('Sorry, there was an error during saving. Please try again.'); favInputWrapper.getElement('#btn-favourite-add').removeClass('jsn-loading').setStyles({'display': 'inline'}); favInputWrapper.getElement('#favourite-title').removeAttribute('disabled'); favInputWrapper.getElement('#favourite-title').setAttribute('value', ''); } }); myRequest.send('title=' + favTitle + '&url=' + relativeUrl); }); favInputWrapper.getElements('#btn-favourite-cancel').addEvent('click', function (){ favInputWrapper.getElement('#favourite-title').setAttribute('value', ''); favInputWrapper.setStyle('display', 'none'); favActivate.setStyle('display', 'block'); }); }, refreshHistorySize: function () { var contentSize = this.historyItems.getElement('ul').getSize(); var containerSize = this.historyItems.getSize(); var windowSize = windowSize = jsnpa_m(window).getSize(); if (containerSize.y < contentSize.y || windowSize.y < contentSize.y) { this.historyItems.setStyle('height', (contentSize.y > windowSize.y - 100) ? windowSize.y - 100 : contentSize.y); } else { this.historyItems.setStyle('height', contentSize.y); } if (this.historyScrollbar === undefined) { this.historyScrollbar = new JSNScrollbar(this.historyItems); this.historyButton.store('scrollbar', this.historyScrollbar); } this.historyScrollbar.refresh(); }, refreshFavouriteSize: function () { var adminbarSize = this.toolbarWrapper.getElement('#jsn-adminbar-container').getSize(); var contentSize = this.favouriteItems.getElement('ul').getSize(); var containerSize = this.favouriteItems.getSize(); var windowSize = windowSize = jsnpa_m(window).getSize(); if (windowSize.y < containerSize.y + adminbarSize.y) { this.favouriteItems.getElement('#jsn-adminbar-favourite-items-ul-wrapper').setStyle('height',windowSize.y - adminbarSize.y - (containerSize.y - contentSize.y)); } else { this.favouriteItems.getElement('#jsn-adminbar-favourite-items-ul-wrapper').setStyle('height', contentSize.y); } if (this.favouriteScrollbar === undefined) { this.favouriteScrollbar = new JSNScrollbar(this.favouriteItems.getElement('#jsn-adminbar-favourite-items-ul-wrapper')); this.favouriteButton.store('favscrollbar', this.favouriteScrollbar); } this.favouriteScrollbar.scrollToPosition('top'); this.favouriteScrollbar.refresh(); }, /** * Set current state of history button * @param state * @return void */ setHistoryState: function (state) { if (this.historyState !== undefined) { this.historyButton.removeClass('state-' + this.historyState); } this.historyState = state; this.historyButton.addClass('state-' + state); }, /** * Navigate to item on list items by using keyboard * @param button * @param event * @return void */ navigateItem: function (button, event) { var container = button.getElements('div.items'); if (container === null) { return; } var items = button.getElements('div.items ul li.item'); var current = button.getElement('div.items ul li.item.jsn-active'); var currentIndex = -1; if (current != null) { currentIndex = items.indexOf(current); } switch (event.key) { case 'up': currentIndex--; if (currentIndex < 0) currentIndex = 0; break; case 'down': currentIndex++; if (currentIndex > items.length) currentIndex = items.length - 1; break; case 'enter': if (items[currentIndex] !== undefined) { var link = items[currentIndex].getElement('a'); if (link != null) { window.location = link.getProperty('href'); } } break; } if (items[currentIndex] !== undefined) { items.removeClass('jsn-active'); items[currentIndex].addClass('jsn-active'); if (container.hasClass('scrollable')) { var scrollbar = button.retrieve('scrollbar'); if (scrollbar == null) { return; } var topHeight = items[currentIndex].getSize().y; items[currentIndex].getAllPrevious().each(function (element) { topHeight += element.getSize().y; }); var currentOffset = scrollbar.getCurrentOffset(); var viewportHeight = button.getElement('.viewport').getSize().y; var mustScrollDown = topHeight >= currentOffset + viewportHeight; if (mustScrollDown) { scrollbar.scrollToPosition(topHeight - viewportHeight); } else if (topHeight - items[currentIndex].getSize().y < currentOffset) { scrollbar.scrollToPosition(topHeight - items[currentIndex].getSize().y); } } } }, /** * Convert number of seconds into time object * @param integer secs Number of seconds to convert * @param boolean addZero * @return object */ secondsToTime: function (secs, addZero) { var hours = Math.floor(secs / (60 * 60)); var divisor_for_minutes = secs % (60 * 60); var minutes = Math.floor(divisor_for_minutes / 60); var divisor_for_seconds = divisor_for_minutes % 60; var seconds = Math.ceil(divisor_for_seconds); var isAddZero = (typeof(addZero) == 'undefined' || addZero == true); var obj = { "h": (hours < 10 && isAddZero) ? '0' + hours : hours, "m": (minutes < 10 && isAddZero) ? '0' + minutes : minutes, "s": (seconds < 10 && isAddZero) ? '0' + seconds : seconds }; return obj; }, /** * Update toolbar size, position * @return void */ refresh: function () { this.toolbar.getParent().setStyles({'min-width': '960px', 'width': '100%'}); if (this.options.pinned == 1) { this.toolbar.setStyle('width', '100%'); }else{ this.toolbar.getParent().setStyle('position', 'relative'); this.toolbar.setStyle('margin','10px'); } this.refreshSpotlightSize(); this.refreshHistorySize(); }, /** * This is the function that actually highlights a text string by * adding HTML tags before and after all occurrences of the search * term. You can pass your own tags if you'd like, or if the * highlightStartTag or highlightEndTag parameters are omitted or * are empty strings then the default <font> tags will be used. * * @param String text Original text * @param String keyword Keyword to highlight * @param String startTag Start tag markup * @param String endTag End tag markup * @return String */ highlight: function(text, keyword, startTag, endTag) { // the highlightStartTag and highlightEndTag parameters are optional if ((!startTag) || (!endTag)) { startTag = "<span class='jsn-filter-highlight'>"; endTag = "</span>"; } var newText = ""; var i = -1; var lcSearchTerm = keyword.toLowerCase(); if(text !=null){ var lcBodyText = text.toLowerCase(); while(text.length > 0) { i = lcBodyText.indexOf(lcSearchTerm, i + 1); if(i < 0) { newText += text; text = ""; } else { // skip anything inside an HTML tag if(text.lastIndexOf(">", i) >= text.lastIndexOf("<", i)) { // skip anything inside a <script> block if(lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i)) { newText += text.substring(0, i) + startTag + text.substr(i, keyword.length) + endTag; text = text.substr(i + keyword.length); lcBodyText = text.toLowerCase(); i = -1; } } } } } return newText; }, /** * Method to get current page title * @param array urlparams * */ getPageTitle: function (urlparams) { var pagetitle = ''; if (typeof(this.uiHelper.getPageTitle) != 'undefined') { pagetitle = this.uiHelper.getPageTitle(urlparams); } if (!pagetitle){ if (jsnpa_mm('body').getElement('.page-title') == null) { return ''; } pagetitle = jsnpa_mm('body').getElement('.page-title')[0].textContent; if (pagetitle != undefined && pagetitle != '') { pagetitle = pagetitle; }else{ var uOption = urlparams.option; var uView = urlparams.view; pagetitle = "Component: "+ uOption + ' - View: ' + uView; } } return pagetitle; } }); /** * Register admin toolbar template */ Mooml.register('admin-toolbar', function (options) { var editors = new Array(); var _editorTextInd = ''; if (typeof(options.editors) != 'undefined') { options.editors.each (function (el) { var active = ''; if (el.active) { active = i({'class':'current'}); _editorTextInd = span({'html': el.value}); } editors.push (li({ 'class': 'jsn-adminbar-usermenu-editor-none', 'id': 'adminbar-editor-' + el.value }, a({ target: '_parent', href: 'javascript:setEditor("' + el.value +'", "' + options.rootUrl +'", "adminbar-editor-' + el.value + '", "'+options.token+'");' }, el.name)), active ); }) } var _fixedClassName = options.pinned == 1 ? 'navbar-fixed-top': 'navbar-not-fixed'; div({ id: 'jsn-adminbar-wrapper', 'class': 'clearafter navbar ' + _fixedClassName }, div({ id: 'jsn-adminbar-container', 'class': 'clearafter navbar-inner' }, div({ id: 'jsn-adminbar-logo' }), div({ id: 'jsn-adminbar-mainmenu', 'class': 'nav' }), div({ id: 'jsn-adminbar-plugins' }, /* Site menu */ div({ id: 'jsn-adminbar-site-button', 'class': 'jsn-adminbar-menu-dropdown' }, span({ 'class': 'jsn-icon-16 ico-display' }), ul( li({ id: 'jsn-adminbar-sitemenu-status' }), li({ id: 'jsn-adminbar-sitemenu-manager' }, a({ target: options.linkTarget, href: options.sitemenu.manager }, JoomlaShine.language.JSN_ADMINBAR_SITEMANAGER)), li({ id: 'jsn-adminbar-sitemenu-preview' }, a({ target: '_blank', href: options.sitemenu.preview }, JoomlaShine.language.JSN_ADMINBAR_SITEPREVIEW)) ) ), /* User menu */ div({ id: 'jsn-adminbar-user-button', 'class': 'jsn-adminbar-menu-dropdown' }, span({ 'class': 'jsn-icon-16 ico-user' }), ul( li({ id: 'jsn-adminbar-usermenu-welcome' }, span({ 'class': 'jsn-welcome-text' }, JoomlaShine.language.JSN_ADMINBAR_USERMENU_WELCOME, span({ 'class': 'countdown', 'text': ' ' }))), li({ id: 'jsn-adminbar-usermenu-profile' }, a({ target: '_parent', href: options.usermenu.profileLink }, JoomlaShine.language.JSN_ADMINBAR_USERMENU_PROFILE)), li({ id: 'jsn-adminbar-usermenu-editor', 'class': 'jsn-adminbar-submenu' }, a({ target: '_parent'}, JoomlaShine.language.JSN_ADMINBAR_USERMENU_EDITOR, _editorTextInd), ul(editors) ), li({ id: 'jsn-adminbar-usermenu-message' }, a({ target: '_parent', href: options.usermenu.messageLink }, JoomlaShine.language.JSN_ADMINBAR_USERMENU_MESSAGE, span(options.usermenu.messages))), li({ id: 'jsn-adminbar-usermenu-logout' }, a({ target: '_parent', href: options.usermenu.logoutLink }, JoomlaShine.language.JSN_ADMINBAR_USERMENU_LOGOUT)) ) ), /* Separator */ div({ 'class': 'jsn-adminbar-separator' }), /* Favourite */ div({ id: 'jsn-adminbar-favourite-button', 'class': 'jsn-adminbar-button-dropdown' }, div({ 'class': 'jsn-favourite-button-wrapper' }, span({ 'class': 'jsn-icon-16 ico-favourite', 'title': JoomlaShine.language.JSN_ADMINBAR_HISTORY_TITLE }) ), div({ 'class': 'items' }, div({'class': 'favourite-addnew-box-wrapper input-append', 'id': 'favourite-addnew-box-wrapper'}, div({}, input({'type': 'text', 'id': 'favourite-title', 'name': 'favourite-title'}), button({'class': 'btn', 'type': 'button', 'id': 'btn-favourite-add'}, i({'class': 'icon-plus'},'') ), button({'class': 'btn', 'type': 'button', 'id': 'btn-favourite-cancel'}, i({'class': 'icon-remove'}) ) ) ), div({'class': 'favourite-addnew', 'id': 'favourite-addnew'}, a({'href': 'javascript:void(0)'}, JoomlaShine.language.JSN_ADMINBAR_FAVOURITE_TITLE, i({'class': 'icon-star'}) ) ), div({'id': 'jsn-adminbar-favourite-items-ul-wrapper'}, ul( li({ 'class': 'jsn-loading' }, ' '), li({ 'class': 'jsn-empty' }, JoomlaShine.language.JSN_ADMINBAR_HISTORY_EMPTY) ) ) ) ), /* History */ div({ id: 'jsn-adminbar-history-button', 'class': 'jsn-adminbar-button-dropdown' }, div({ 'class': 'jsn-history-button-wrapper' }, span({ 'class': 'jsn-icon-16 ico-timer', 'title': JoomlaShine.language.JSN_ADMINBAR_HISTORY_TITLE }) ), div({ 'class': 'items' }, ul( li({ 'class': 'jsn-loading' }, ' '), li({ 'class': 'jsn-empty' }, JoomlaShine.language.JSN_ADMINBAR_HISTORY_EMPTY) ) ) ), /* Spotlight */ div({ id: 'jsn-adminbar-spotlight' }, span({ 'class': 'placeholder' }, JoomlaShine.language.JSN_ADMINBAR_SPOTLIGHT_SEARCH), input({ id: 'jsn-adminbar-spotlight-box', type: 'text', autocomplete: 'off' }), a({ 'class': 'close', href: 'javascript:void()' }), div({ 'class': 'items scrollable' }, ul( li({ 'class': 'jsn-loading' }, ' '), li({ 'class': 'jsn-empty' }, JoomlaShine.language.JSN_ADMINBAR_SPOTLIGHT_EMPTY) ) ) ), div({ 'class': 'jsn-adminbar-separator' }), div({ id: 'jsn-adminbar-jsnlogo' }, a({href: 'http://www.joomlashine.com', target: '_blank'}) ) ), div({ id: 'module-status' }) ) ); }); /** * Admin open button bar template */ Mooml.register('admin-buttonbar', function (options) { div({ id: 'jsn-adminbar-openbar' }, button({ id:'jsn-adminbar-open-button' }, JoomlaShine.language.JSN_ADMINBAR_BUTTON ) ); }); Mooml.register('admin-uninstall-menu', function (options) { li( a({ 'class': 'icon-16-uninstall', href: 'index.php?option=com_poweradmin&task=removeExtension&component=' + (options.component) }, options.caption) ); }); /** * Template for history item */ Mooml.register('admin-history-item', function (data) { li({ 'class': 'item' }, a({ 'class': data.css, title: data.fulltitle, href: data.link, 'target': data.target }, data.title) ); }); /** * Template for favourite item */ Mooml.register('admin-favourite-item', function (data) { li({ 'class': 'item' }, a({ title: data.title, href: data.url, 'target': data.target, id: data.id }, data.title) ); }); /** * Template for favourite item remove button */ Mooml.register('admin-favourite-item-delete-button', function (data) { button({ 'class': 'favourite-item-delete-button btn ' + data.classname },data.title ); }); /** * Template for spotlight item */ Mooml.register('admin-spotlight-item', function (data) { if (data.type == 'item') { if (data.icon != null && data.icon.indexOf(':') != -1) { data.icon = data.icon.substring(data.icon.indexOf(':') + 1); } li({ 'class': 'item' }, a({ 'class': data.icon + '', 'title': data.description, 'href': data.link, 'target': data.target }, data.title) ); } else if (data.type == 'notice') { li({ 'class': 'spotlight-notice' }, a({ 'class': data.icon + '', 'title': data.description, 'href': data.link, 'target': data.target }, data.title) ); } else { li({ 'class': 'group ' + ((data.hasMore > 0) ? 'has-more' : 'no-more') }, span(data.title), a({ 'class': 'more', 'target': data.target, 'href': 'index.php?option=com_poweradmin&view=search&keyword=' + data.keyword + '&coverages=' + data.type }, JoomlaShine.language.JSN_ADMINBAR_SPOTLIGHT_SEE_MORE.replace('{num}', data.hasMore) ) ); } }); function setEditor(value, baseUrl, elementId, token) { var loading = new Element ('i', {'class': 'jsn-editor-loading'}); var url = baseUrl + 'administrator/index.php?option=com_poweradmin&task=configuration.changeEditor&editor=' + value+'&'+ token + '=1'; var indicator = jsnpa_mm('#jsn-adminbar-user-button li .current'); var req = new Request({ method: 'get', url: url, onRequest: function (event) { loading.inject(document.querySelector('#jsn-adminbar-user-button #'+elementId)); }, onComplete: function(response) { if (response == 'success') { indicator.inject(document.querySelector('#jsn-adminbar-user-button #'+elementId)); jsnpa_mm('#jsn-adminbar-user-button .jsn-editor-loading').destroy(); jsnpa_mm('#jsn-adminbar-user-button #jsn-adminbar-usermenu-editor a span').set('html', value); }else { alert ('There was an error while trying to set Editor.') } } }).send(); }