Mercurial > hg > isophonics-drupal-site
diff core/modules/toolbar/js/toolbar.js @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/toolbar/js/toolbar.js Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,153 @@ +/** +* DO NOT EDIT THIS FILE. +* See the following change record for more information, +* https://www.drupal.org/node/2815083 +* @preserve +**/ + +(function ($, Drupal, drupalSettings) { + var options = $.extend({ + breakpoints: { + 'toolbar.narrow': '', + 'toolbar.standard': '', + 'toolbar.wide': '' + } + }, drupalSettings.toolbar, { + strings: { + horizontal: Drupal.t('Horizontal orientation'), + vertical: Drupal.t('Vertical orientation') + } + }); + + Drupal.behaviors.toolbar = { + attach: function attach(context) { + if (!window.matchMedia('only screen').matches) { + return; + } + + $(context).find('#toolbar-administration').once('toolbar').each(function () { + var model = Drupal.toolbar.models.toolbarModel = new Drupal.toolbar.ToolbarModel({ + locked: JSON.parse(localStorage.getItem('Drupal.toolbar.trayVerticalLocked')), + activeTab: document.getElementById(JSON.parse(localStorage.getItem('Drupal.toolbar.activeTabID'))), + height: $('#toolbar-administration').outerHeight() + }); + + for (var label in options.breakpoints) { + if (options.breakpoints.hasOwnProperty(label)) { + var mq = options.breakpoints[label]; + var mql = Drupal.toolbar.mql[label] = window.matchMedia(mq); + + mql.addListener(Drupal.toolbar.mediaQueryChangeHandler.bind(null, model, label)); + + Drupal.toolbar.mediaQueryChangeHandler.call(null, model, label, mql); + } + } + + Drupal.toolbar.views.toolbarVisualView = new Drupal.toolbar.ToolbarVisualView({ + el: this, + model: model, + strings: options.strings + }); + Drupal.toolbar.views.toolbarAuralView = new Drupal.toolbar.ToolbarAuralView({ + el: this, + model: model, + strings: options.strings + }); + Drupal.toolbar.views.bodyVisualView = new Drupal.toolbar.BodyVisualView({ + el: this, + model: model + }); + + model.trigger('change:isFixed', model, model.get('isFixed')); + model.trigger('change:activeTray', model, model.get('activeTray')); + + var menuModel = Drupal.toolbar.models.menuModel = new Drupal.toolbar.MenuModel(); + Drupal.toolbar.views.menuVisualView = new Drupal.toolbar.MenuVisualView({ + el: $(this).find('.toolbar-menu-administration').get(0), + model: menuModel, + strings: options.strings + }); + + Drupal.toolbar.setSubtrees.done(function (subtrees) { + menuModel.set('subtrees', subtrees); + var theme = drupalSettings.ajaxPageState.theme; + localStorage.setItem('Drupal.toolbar.subtrees.' + theme, JSON.stringify(subtrees)); + + model.set('areSubtreesLoaded', true); + }); + + Drupal.toolbar.views.toolbarVisualView.loadSubtrees(); + + $(document).on('drupalViewportOffsetChange.toolbar', function (event, offsets) { + model.set('offsets', offsets); + }); + + model.on('change:orientation', function (model, orientation) { + $(document).trigger('drupalToolbarOrientationChange', orientation); + }).on('change:activeTab', function (model, tab) { + $(document).trigger('drupalToolbarTabChange', tab); + }).on('change:activeTray', function (model, tray) { + $(document).trigger('drupalToolbarTrayChange', tray); + }); + + if (Drupal.toolbar.models.toolbarModel.get('orientation') === 'horizontal' && Drupal.toolbar.models.toolbarModel.get('activeTab') === null) { + Drupal.toolbar.models.toolbarModel.set({ + activeTab: $('.toolbar-bar .toolbar-tab:not(.home-toolbar-tab) a').get(0) + }); + } + }); + } + }; + + Drupal.toolbar = { + views: {}, + + models: {}, + + mql: {}, + + setSubtrees: new $.Deferred(), + + mediaQueryChangeHandler: function mediaQueryChangeHandler(model, label, mql) { + switch (label) { + case 'toolbar.narrow': + model.set({ + isOriented: mql.matches, + isTrayToggleVisible: false + }); + + if (!mql.matches || !model.get('orientation')) { + model.set({ orientation: 'vertical' }, { validate: true }); + } + break; + + case 'toolbar.standard': + model.set({ + isFixed: mql.matches + }); + break; + + case 'toolbar.wide': + model.set({ + orientation: mql.matches && !model.get('locked') ? 'horizontal' : 'vertical' + }, { validate: true }); + + model.set({ + isTrayToggleVisible: mql.matches + }); + break; + + default: + break; + } + } + }; + + Drupal.theme.toolbarOrientationToggle = function () { + return '<div class="toolbar-toggle-orientation"><div class="toolbar-lining">' + '<button class="toolbar-icon" type="button"></button>' + '</div></div>'; + }; + + Drupal.AjaxCommands.prototype.setToolbarSubtrees = function (ajax, response, status) { + Drupal.toolbar.setSubtrees.resolve(response.subtrees); + }; +})(jQuery, Drupal, drupalSettings); \ No newline at end of file