X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=web%2Fcore%2Fmodules%2Foutside_in%2Fjs%2Foutside_in.js;fp=web%2Fcore%2Fmodules%2Foutside_in%2Fjs%2Foutside_in.js;h=0000000000000000000000000000000000000000;hb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;hp=eea9075cab52f64a8221b98b3994605a07dc66a9;hpb=aea91e65e895364e460983b890e295aa5d5540a5;p=yaffs-website diff --git a/web/core/modules/outside_in/js/outside_in.js b/web/core/modules/outside_in/js/outside_in.js deleted file mode 100644 index eea9075ca..000000000 --- a/web/core/modules/outside_in/js/outside_in.js +++ /dev/null @@ -1,265 +0,0 @@ -/** - * @file - * Drupal's Settings Tray library. - */ - -(function ($, Drupal) { - - 'use strict'; - - var blockConfigureSelector = '[data-outside-in-edit]'; - var toggleEditSelector = '[data-drupal-outsidein="toggle"]'; - var itemsToToggleSelector = '[data-off-canvas-main-canvas], #toolbar-bar, [data-drupal-outsidein="editable"] a, [data-drupal-outsidein="editable"] button'; - var contextualItemsSelector = '[data-contextual-id] a, [data-contextual-id] button'; - var quickEditItemSelector = '[data-quickedit-entity-id]'; - - /** - * Reacts to contextual links being added. - * - * @param {jQuery.Event} event - * The `drupalContextualLinkAdded` event. - * @param {object} data - * An object containing the data relevant to the event. - * - * @listens event:drupalContextualLinkAdded - */ - $(document).on('drupalContextualLinkAdded', function (event, data) { - // Bind Ajax behaviors to all items showing the class. - // @todo Fix contextual links to work with use-ajax links in - // https://www.drupal.org/node/2764931. - Drupal.attachBehaviors(data.$el[0]); - - // Bind a listener to all 'Quick edit' links for blocks - // Click "Edit" button in toolbar to force Contextual Edit which starts - // Settings Tray edit mode also. - data.$el.find(blockConfigureSelector) - .on('click.outsidein', function () { - if (!isInEditMode()) { - $(toggleEditSelector).trigger('click').trigger('click.outside_in'); - } - // Always disable QuickEdit regardless of whether "EditMode" was just enabled. - disableQuickEdit(); - }); - }); - - $(document).on('keyup.outsidein', function (e) { - if (isInEditMode() && e.keyCode === 27) { - Drupal.announce( - Drupal.t('Exited edit mode.') - ); - toggleEditMode(); - } - }); - - /** - * Gets all items that should be toggled with class during edit mode. - * - * @return {jQuery} - * Items that should be toggled. - */ - function getItemsToToggle() { - return $(itemsToToggleSelector).not(contextualItemsSelector); - } - - /** - * Helper to check the state of the outside-in mode. - * - * @todo don't use a class for this. - * - * @return {boolean} - * State of the outside-in edit mode. - */ - function isInEditMode() { - return $('#toolbar-bar').hasClass('js-outside-in-edit-mode'); - } - - /** - * Helper to toggle Edit mode. - */ - function toggleEditMode() { - setEditModeState(!isInEditMode()); - } - - /** - * Prevent default click events except contextual links. - * - * In edit mode the default action of click events is suppressed. - * - * @param {jQuery.Event} event - * The click event. - */ - function preventClick(event) { - // Do not prevent contextual links. - if ($(event.target).closest('.contextual-links').length) { - return; - } - event.preventDefault(); - } - - /** - * Close any active toolbar tray before entering edit mode. - */ - function closeToolbarTrays() { - $(Drupal.toolbar.models.toolbarModel.get('activeTab')).trigger('click'); - } - - /** - * Disables the QuickEdit module editor if open. - */ - function disableQuickEdit() { - $('.quickedit-toolbar button.action-cancel').trigger('click'); - } - - /** - * Closes/removes off-canvas. - */ - function closeOffCanvas() { - $('.ui-dialog-off-canvas .ui-dialog-titlebar-close').trigger('click'); - } - - /** - * Helper to switch edit mode state. - * - * @param {boolean} editMode - * True enable edit mode, false disable edit mode. - */ - function setEditModeState(editMode) { - if (!document.querySelector('[data-off-canvas-main-canvas]')) { - throw new Error('data-off-canvas-main-canvas is missing from outside-in-page-wrapper.html.twig'); - } - editMode = !!editMode; - var $editButton = $(toggleEditSelector); - var $editables; - // Turn on edit mode. - if (editMode) { - $editButton.text(Drupal.t('Editing')); - closeToolbarTrays(); - - $editables = $('[data-drupal-outsidein="editable"]').once('outsidein'); - if ($editables.length) { - // Use event capture to prevent clicks on links. - document.querySelector('[data-off-canvas-main-canvas]').addEventListener('click', preventClick, true); - - // When a click occurs try and find the outside-in edit link - // and click it. - $editables - .not(contextualItemsSelector) - .on('click.outsidein', function (e) { - // Contextual links are allowed to function in Edit mode. - if ($(e.target).closest('.contextual').length || !localStorage.getItem('Drupal.contextualToolbar.isViewing')) { - return; - } - $(e.currentTarget).find(blockConfigureSelector).trigger('click'); - disableQuickEdit(); - }); - $(quickEditItemSelector) - .not(contextualItemsSelector) - .on('click.outsidein', function (e) { - // For all non-contextual links or the contextual QuickEdit link close the off-canvas dialog. - if (!$(e.target).parent().hasClass('contextual') || $(e.target).parent().hasClass('quickedit')) { - closeOffCanvas(); - } - // Do not trigger if target is quick edit link to avoid loop. - if ($(e.target).parent().hasClass('contextual') || $(e.target).parent().hasClass('quickedit')) { - return; - } - $(e.currentTarget).find('li.quickedit a').trigger('click'); - }); - } - } - // Disable edit mode. - else { - $editables = $('[data-drupal-outsidein="editable"]').removeOnce('outsidein'); - if ($editables.length) { - document.querySelector('[data-off-canvas-main-canvas]').removeEventListener('click', preventClick, true); - $editables.off('.outsidein'); - $(quickEditItemSelector).off('.outsidein'); - } - - $editButton.text(Drupal.t('Edit')); - closeOffCanvas(); - disableQuickEdit(); - } - getItemsToToggle().toggleClass('js-outside-in-edit-mode', editMode); - $('.edit-mode-inactive').toggleClass('visually-hidden', editMode); - } - - /** - * Attaches contextual's edit toolbar tab behavior. - * - * @type {Drupal~behavior} - * - * @prop {Drupal~behaviorAttach} attach - * Attaches contextual toolbar behavior on a contextualToolbar-init event. - */ - Drupal.behaviors.outsideInEdit = { - attach: function () { - var editMode = localStorage.getItem('Drupal.contextualToolbar.isViewing') === 'false'; - if (editMode) { - setEditModeState(true); - } - } - }; - - /** - * Toggle the js-outside-edit-mode class on items that we want to disable while in edit mode. - * - * @type {Drupal~behavior} - * - * @prop {Drupal~behaviorAttach} attach - * Toggle the js-outside-edit-mode class. - */ - Drupal.behaviors.toggleEditMode = { - attach: function () { - - $(toggleEditSelector).once('outsidein').on('click.outsidein', toggleEditMode); - - var search = Drupal.ajax.WRAPPER_FORMAT + '=drupal_dialog'; - var replace = Drupal.ajax.WRAPPER_FORMAT + '=drupal_dialog_off_canvas'; - // Loop through all Ajax links and change the format to dialog-off-canvas when - // needed. - Drupal.ajax.instances - .filter(function (instance) { - var hasElement = instance && !!instance.element; - var rendererOffCanvas = false; - var wrapperOffCanvas = false; - if (hasElement) { - rendererOffCanvas = $(instance.element).attr('data-dialog-renderer') === 'off_canvas'; - wrapperOffCanvas = instance.options.url.indexOf('drupal_dialog_off_canvas') === -1; - } - return hasElement && rendererOffCanvas && wrapperOffCanvas; - }) - .forEach(function (instance) { - // @todo Move logic for data-dialog-renderer attribute into ajax.js - // https://www.drupal.org/node/2784443 - instance.options.url = instance.options.url.replace(search, replace); - // Check to make sure existing dialogOptions aren't overridden. - if (!('dialogOptions' in instance.options.data)) { - instance.options.data.dialogOptions = {}; - } - instance.options.data.dialogOptions.outsideInActiveEditableId = $(instance.element).parents('.outside-in-editable').attr('id'); - instance.progress = {type: 'fullscreen'}; - }); - } - }; - - // Manage Active editable class on opening and closing of the dialog. - $(window).on({ - 'dialog:beforecreate': function (event, dialog, $element, settings) { - if ($element.is('#drupal-off-canvas')) { - $('body .outside-in-active-editable').removeClass('outside-in-active-editable'); - var $activeElement = $('#' + settings.outsideInActiveEditableId); - if ($activeElement.length) { - $activeElement.addClass('outside-in-active-editable'); - settings.dialogClass += ' ui-dialog-outside-in'; - } - } - }, - 'dialog:beforeclose': function (event, dialog, $element) { - if ($element.is('#drupal-off-canvas')) { - $('body .outside-in-active-editable').removeClass('outside-in-active-editable'); - } - } - }); - -})(jQuery, Drupal);