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