Mercurial > hg > cmmr2012-drupal-site
diff core/modules/settings_tray/js/settings_tray.js @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/settings_tray/js/settings_tray.js Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,156 @@ +/** +* DO NOT EDIT THIS FILE. +* See the following change record for more information, +* https://www.drupal.org/node/2815083 +* @preserve +**/ + +(function ($, Drupal) { + var blockConfigureSelector = '[data-settings-tray-edit]'; + var toggleEditSelector = '[data-drupal-settingstray="toggle"]'; + var itemsToToggleSelector = '[data-off-canvas-main-canvas], #toolbar-bar, [data-drupal-settingstray="editable"] a, [data-drupal-settingstray="editable"] button'; + var contextualItemsSelector = '[data-contextual-id] a, [data-contextual-id] button'; + var quickEditItemSelector = '[data-quickedit-entity-id]'; + + function preventClick(event) { + if ($(event.target).closest('.contextual-links').length) { + return; + } + event.preventDefault(); + } + + function closeToolbarTrays() { + $(Drupal.toolbar.models.toolbarModel.get('activeTab')).trigger('click'); + } + + function disableQuickEdit() { + $('.quickedit-toolbar button.action-cancel').trigger('click'); + } + + function closeOffCanvas() { + $('.ui-dialog-off-canvas .ui-dialog-titlebar-close').trigger('click'); + } + + function getItemsToToggle() { + return $(itemsToToggleSelector).not(contextualItemsSelector); + } + + function setEditModeState(editMode) { + if (!document.querySelector('[data-off-canvas-main-canvas]')) { + throw new Error('data-off-canvas-main-canvas is missing from settings-tray-page-wrapper.html.twig'); + } + editMode = !!editMode; + var $editButton = $(toggleEditSelector); + var $editables = void 0; + + if (editMode) { + $editButton.text(Drupal.t('Editing')); + closeToolbarTrays(); + + $editables = $('[data-drupal-settingstray="editable"]').once('settingstray'); + if ($editables.length) { + document.querySelector('[data-off-canvas-main-canvas]').addEventListener('click', preventClick, true); + + $editables.not(contextualItemsSelector).on('click.settingstray', function (e) { + if ($(e.target).closest('.contextual').length || !localStorage.getItem('Drupal.contextualToolbar.isViewing')) { + return; + } + $(e.currentTarget).find(blockConfigureSelector).trigger('click'); + disableQuickEdit(); + }); + $(quickEditItemSelector).not(contextualItemsSelector).on('click.settingstray', function (e) { + if (!$(e.target).parent().hasClass('contextual') || $(e.target).parent().hasClass('quickedit')) { + closeOffCanvas(); + } + + if ($(e.target).parent().hasClass('contextual') || $(e.target).parent().hasClass('quickedit')) { + return; + } + $(e.currentTarget).find('li.quickedit a').trigger('click'); + }); + } + } else { + $editables = $('[data-drupal-settingstray="editable"]').removeOnce('settingstray'); + if ($editables.length) { + document.querySelector('[data-off-canvas-main-canvas]').removeEventListener('click', preventClick, true); + $editables.off('.settingstray'); + $(quickEditItemSelector).off('.settingstray'); + } + + $editButton.text(Drupal.t('Edit')); + closeOffCanvas(); + disableQuickEdit(); + } + getItemsToToggle().toggleClass('js-settings-tray-edit-mode', editMode); + $('.edit-mode-inactive').toggleClass('visually-hidden', editMode); + } + + function isInEditMode() { + return $('#toolbar-bar').hasClass('js-settings-tray-edit-mode'); + } + + function toggleEditMode() { + setEditModeState(!isInEditMode()); + } + + function prepareAjaxLinks() { + Drupal.ajax.instances.filter(function (instance) { + return instance && $(instance.element).attr('data-dialog-renderer') === 'off_canvas'; + }).forEach(function (instance) { + if (!instance.options.data.hasOwnProperty('dialogOptions')) { + instance.options.data.dialogOptions = {}; + } + instance.options.data.dialogOptions.settingsTrayActiveEditableId = $(instance.element).parents('.settings-tray-editable').attr('id'); + instance.progress = { type: 'fullscreen' }; + }); + } + + $(document).on('drupalContextualLinkAdded', function (event, data) { + prepareAjaxLinks(); + + $('body').once('settings_tray.edit_mode_init').each(function () { + var editMode = localStorage.getItem('Drupal.contextualToolbar.isViewing') === 'false'; + if (editMode) { + setEditModeState(true); + } + }); + + data.$el.find(blockConfigureSelector).on('click.settingstray', function () { + if (!isInEditMode()) { + $(toggleEditSelector).trigger('click').trigger('click.settings_tray'); + } + + disableQuickEdit(); + }); + }); + + $(document).on('keyup.settingstray', function (e) { + if (isInEditMode() && e.keyCode === 27) { + Drupal.announce(Drupal.t('Exited edit mode.')); + toggleEditMode(); + } + }); + + Drupal.behaviors.toggleEditMode = { + attach: function attach() { + $(toggleEditSelector).once('settingstray').on('click.settingstray', toggleEditMode); + } + }; + + $(window).on({ + 'dialog:beforecreate': function dialogBeforecreate(event, dialog, $element, settings) { + if ($element.is('#drupal-off-canvas')) { + $('body .settings-tray-active-editable').removeClass('settings-tray-active-editable'); + var $activeElement = $('#' + settings.settingsTrayActiveEditableId); + if ($activeElement.length) { + $activeElement.addClass('settings-tray-active-editable'); + } + } + }, + 'dialog:beforeclose': function dialogBeforeclose(event, dialog, $element) { + if ($element.is('#drupal-off-canvas')) { + $('body .settings-tray-active-editable').removeClass('settings-tray-active-editable'); + } + } + }); +})(jQuery, Drupal); \ No newline at end of file