/** * @namespace WORKAREA.adminToolbar */ WORKAREA.registerModule('adminToolbar', (function () { 'use strict'; var focusSearch = function ($toolbar) { var $scope = $toolbar.contents(); $('#primary_nav_admin_search', $scope).trigger('focus'); }, collapse = function ($toolbar) { var $header = $('.header', $toolbar.contents()); $toolbar.removeClass('admin-toolbar--expanded'); $header.removeClass('header--takeover'); }, expand = function ($toolbar) { var $header = $('.header', $toolbar.contents()); $toolbar.addClass('admin-toolbar--expanded'); $header.addClass('header--takeover'); }, bindEscapeKey = function ($toolbar) { var toolbarWindow = $toolbar[0].contentWindow; $(toolbarWindow).on('keyup.adminToolbar', function (event) { if (event.keyCode !== 27) { return; } // only care about escape collapse($toolbar); }); }, bindTakeoverToggle = function ($toolbar) { var $scope = $toolbar.contents(), triggerSelectors = [ '.header__search-form', '.header__menu-button' ].join(','); $(triggerSelectors, $scope).on('click', function (event) { event.preventDefault(); if ($(event.currentTarget).is('.header__menu-button--close')) { collapse($toolbar); } else { expand($toolbar); focusSearch($toolbar); } }); return $toolbar; }, notify = function ($toolbar) { $(window).trigger('adminToolbar:loaded'); return $toolbar; }, url = function () { var globalId = $('meta[property="global-id"]').attr('content'), params = {}; params.return_to = window.location.href; if (globalId) { params.id = globalId; } return '/admin/toolbar?' + $.param(params); }, shouldDisplay = function (user) { var disable = WORKAREA.url.parse(window.location).queryKey.disable_admin_toolbar; return user.impersonating || user.browsing_as_guest || (user.admin && user.logged_in && disable !== 'true'); }, create = function (user) { if ( ! shouldDisplay(user)) { return; } $('<iframe />').attr({ src: url(), scrolling: 'no', // technically unsupported, but required class: 'admin-toolbar', id: 'admin-toolbar', role: 'document', title: 'Admin Toolbar' }) .prependTo('body') .on('load', function (event) { var $toolbar = $(event.currentTarget); _.flow(notify, bindTakeoverToggle, bindEscapeKey)($toolbar); }); }, init = _.once(function () { if ( ! _.isEmpty($('[data-disable-admin-toolbar]'))) { return; } if (WORKAREA.breakPoints.currentlyLessThan('medium')) { return; } WORKAREA.currentUser.gettingUserData.done(create); }); return { init: init }; }()));