"use strict"; /*global define, socket, app, Mousetrap, Hammer, RELATIVE_PATH*/ var admin = {}; (function() { admin.enableColorPicker = function(inputEl, callback) { (inputEl instanceof jQuery ? inputEl : $(inputEl)).each(function() { var $this = $(this); $this.ColorPicker({ color: $this.val() || '#000', onChange: function(hsb, hex) { $this.val('#' + hex); if (typeof callback === 'function') { callback(hsb, hex); } }, onShow: function(colpkr) { $(colpkr).css('z-index', 1051); } }); }); }; $(document).ready(function() { setupMenu(); setupKeybindings(); if(!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) { require(['admin/modules/search'], function(search) { search.init(); }); } else { activateMobile(); } $(window).on('action:ajaxify.end', function(ev, data) { var url = data.url; selectMenuItem(data.url); setupHeaderMenu(); }); $(window).resize(setupHeaderMenu); }); socket.emit('admin.config.get', function(err, config) { if(err) { return app.alert({ alert_id: 'config_status', timeout: 2500, title: 'Error', message: 'NodeBB encountered a problem getting config: ' + err.message, type: 'danger' }); } // move this to admin.config app.config = config; }); function setupMenu() { var listElements = $('.sidebar-nav li'); listElements.on('click', function() { var $this = $(this); if ($this.hasClass('nav-header')) { $this.parents('.sidebar-nav').toggleClass('open').bind('animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd', function (ev) { $('.nano').nanoScroller(); }); } else { listElements.removeClass('active'); $this.addClass('active'); } }); $('.nano').nanoScroller(); $('#main-menu .nav-list > li a').append(' '); } function setupKeybindings() { Mousetrap.bind('ctrl+shift+a r', function() { console.log('[admin] Reloading NodeBB...'); socket.emit('admin.reload'); }); Mousetrap.bind('ctrl+shift+a R', function() { console.log('[admin] Restarting NodeBB...'); socket.emit('admin.restart'); }); Mousetrap.bind('ctrl+shift+a d', function() { var tid = ajaxify.variables.get('topic_id'), cid = ajaxify.variables.get('category_id'); if (tid && cid) { socket.emit('topics.delete', { tids: [tid], cid: cid }); } }); Mousetrap.bind('/', function(e) { $('#acp-search input').focus(); return false; }); } function activateMobile() { $('.admin').addClass('mobile'); $('#main-menu').addClass('transitioning'); Hammer(document.body).on('swiperight', function(e) { $('#main-menu').addClass('open'); }); Hammer(document.body).on('swipeleft', function(e) { $('#main-menu').removeClass('open'); }); Hammer($('#main-menu')[0]).on('swiperight', function(e) { $('#main-menu').addClass('open'); }); Hammer($('#main-menu')[0]).on('swipeleft', function(e) { $('#main-menu').removeClass('open'); }); $(window).on('scroll', function() { $('#main-menu').height($(window).height() + 20); }); } function selectMenuItem(url) { $('#main-menu .nav-list > li').removeClass('active').each(function() { var menu = $(this), category = menu.parents('.sidebar-nav'), href = menu.children('a').attr('href'); if (href && href.slice(1).indexOf(url) !== -1) { category.addClass('open'); menu.addClass('active'); modifyBreadcrumb(category.find('.nav-header').text(), menu.text()); return false; } }); } function modifyBreadcrumb() { var caret = ' '; $('#breadcrumbs').html(caret + Array.prototype.slice.call(arguments).join(caret)); } function setupHeaderMenu() { var env = utils.findBootstrapEnvironment(); if (env !== 'lg') { if ($('.mobile-header').length || $('#content .col-lg-9').first().height() < 2000) { return; } ($('#content .col-lg-3').first().clone().addClass('mobile-header')) .insertBefore($('#content .col-lg-9').first()); } else { $('.mobile-header').remove(); } } }());