annotate core/modules/settings_tray/js/settings_tray.js @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
Chris@0 1 /**
Chris@0 2 * DO NOT EDIT THIS FILE.
Chris@0 3 * See the following change record for more information,
Chris@0 4 * https://www.drupal.org/node/2815083
Chris@0 5 * @preserve
Chris@0 6 **/
Chris@0 7
Chris@0 8 (function ($, Drupal) {
Chris@0 9 var blockConfigureSelector = '[data-settings-tray-edit]';
Chris@0 10 var toggleEditSelector = '[data-drupal-settingstray="toggle"]';
Chris@0 11 var itemsToToggleSelector = '[data-off-canvas-main-canvas], #toolbar-bar, [data-drupal-settingstray="editable"] a, [data-drupal-settingstray="editable"] button';
Chris@0 12 var contextualItemsSelector = '[data-contextual-id] a, [data-contextual-id] button';
Chris@0 13 var quickEditItemSelector = '[data-quickedit-entity-id]';
Chris@0 14
Chris@0 15 function preventClick(event) {
Chris@0 16 if ($(event.target).closest('.contextual-links').length) {
Chris@0 17 return;
Chris@0 18 }
Chris@0 19 event.preventDefault();
Chris@0 20 }
Chris@0 21
Chris@0 22 function closeToolbarTrays() {
Chris@0 23 $(Drupal.toolbar.models.toolbarModel.get('activeTab')).trigger('click');
Chris@0 24 }
Chris@0 25
Chris@0 26 function disableQuickEdit() {
Chris@0 27 $('.quickedit-toolbar button.action-cancel').trigger('click');
Chris@0 28 }
Chris@0 29
Chris@0 30 function closeOffCanvas() {
Chris@0 31 $('.ui-dialog-off-canvas .ui-dialog-titlebar-close').trigger('click');
Chris@0 32 }
Chris@0 33
Chris@0 34 function getItemsToToggle() {
Chris@0 35 return $(itemsToToggleSelector).not(contextualItemsSelector);
Chris@0 36 }
Chris@0 37
Chris@0 38 function setEditModeState(editMode) {
Chris@0 39 if (!document.querySelector('[data-off-canvas-main-canvas]')) {
Chris@0 40 throw new Error('data-off-canvas-main-canvas is missing from settings-tray-page-wrapper.html.twig');
Chris@0 41 }
Chris@0 42 editMode = !!editMode;
Chris@0 43 var $editButton = $(toggleEditSelector);
Chris@0 44 var $editables = void 0;
Chris@0 45
Chris@0 46 if (editMode) {
Chris@0 47 $editButton.text(Drupal.t('Editing'));
Chris@0 48 closeToolbarTrays();
Chris@0 49
Chris@0 50 $editables = $('[data-drupal-settingstray="editable"]').once('settingstray');
Chris@0 51 if ($editables.length) {
Chris@0 52 document.querySelector('[data-off-canvas-main-canvas]').addEventListener('click', preventClick, true);
Chris@0 53
Chris@0 54 $editables.not(contextualItemsSelector).on('click.settingstray', function (e) {
Chris@0 55 if ($(e.target).closest('.contextual').length || !localStorage.getItem('Drupal.contextualToolbar.isViewing')) {
Chris@0 56 return;
Chris@0 57 }
Chris@0 58 $(e.currentTarget).find(blockConfigureSelector).trigger('click');
Chris@0 59 disableQuickEdit();
Chris@0 60 });
Chris@0 61 $(quickEditItemSelector).not(contextualItemsSelector).on('click.settingstray', function (e) {
Chris@0 62 if (!$(e.target).parent().hasClass('contextual') || $(e.target).parent().hasClass('quickedit')) {
Chris@0 63 closeOffCanvas();
Chris@0 64 }
Chris@0 65
Chris@0 66 if ($(e.target).parent().hasClass('contextual') || $(e.target).parent().hasClass('quickedit')) {
Chris@0 67 return;
Chris@0 68 }
Chris@0 69 $(e.currentTarget).find('li.quickedit a').trigger('click');
Chris@0 70 });
Chris@0 71 }
Chris@0 72 } else {
Chris@0 73 $editables = $('[data-drupal-settingstray="editable"]').removeOnce('settingstray');
Chris@0 74 if ($editables.length) {
Chris@0 75 document.querySelector('[data-off-canvas-main-canvas]').removeEventListener('click', preventClick, true);
Chris@0 76 $editables.off('.settingstray');
Chris@0 77 $(quickEditItemSelector).off('.settingstray');
Chris@0 78 }
Chris@0 79
Chris@0 80 $editButton.text(Drupal.t('Edit'));
Chris@0 81 closeOffCanvas();
Chris@0 82 disableQuickEdit();
Chris@0 83 }
Chris@0 84 getItemsToToggle().toggleClass('js-settings-tray-edit-mode', editMode);
Chris@0 85 $('.edit-mode-inactive').toggleClass('visually-hidden', editMode);
Chris@0 86 }
Chris@0 87
Chris@0 88 function isInEditMode() {
Chris@0 89 return $('#toolbar-bar').hasClass('js-settings-tray-edit-mode');
Chris@0 90 }
Chris@0 91
Chris@0 92 function toggleEditMode() {
Chris@0 93 setEditModeState(!isInEditMode());
Chris@0 94 }
Chris@0 95
Chris@14 96 function prepareAjaxLinks() {
Chris@14 97 Drupal.ajax.instances.filter(function (instance) {
Chris@14 98 return instance && $(instance.element).attr('data-dialog-renderer') === 'off_canvas';
Chris@14 99 }).forEach(function (instance) {
Chris@14 100 if (!instance.options.data.hasOwnProperty('dialogOptions')) {
Chris@14 101 instance.options.data.dialogOptions = {};
Chris@14 102 }
Chris@14 103 instance.options.data.dialogOptions.settingsTrayActiveEditableId = $(instance.element).parents('.settings-tray-editable').attr('id');
Chris@14 104 instance.progress = { type: 'fullscreen' };
Chris@14 105 });
Chris@14 106 }
Chris@14 107
Chris@0 108 $(document).on('drupalContextualLinkAdded', function (event, data) {
Chris@14 109 prepareAjaxLinks();
Chris@14 110
Chris@0 111 $('body').once('settings_tray.edit_mode_init').each(function () {
Chris@0 112 var editMode = localStorage.getItem('Drupal.contextualToolbar.isViewing') === 'false';
Chris@0 113 if (editMode) {
Chris@0 114 setEditModeState(true);
Chris@0 115 }
Chris@0 116 });
Chris@0 117
Chris@0 118 data.$el.find(blockConfigureSelector).on('click.settingstray', function () {
Chris@0 119 if (!isInEditMode()) {
Chris@0 120 $(toggleEditSelector).trigger('click').trigger('click.settings_tray');
Chris@0 121 }
Chris@0 122
Chris@0 123 disableQuickEdit();
Chris@0 124 });
Chris@0 125 });
Chris@0 126
Chris@0 127 $(document).on('keyup.settingstray', function (e) {
Chris@0 128 if (isInEditMode() && e.keyCode === 27) {
Chris@0 129 Drupal.announce(Drupal.t('Exited edit mode.'));
Chris@0 130 toggleEditMode();
Chris@0 131 }
Chris@0 132 });
Chris@0 133
Chris@0 134 Drupal.behaviors.toggleEditMode = {
Chris@0 135 attach: function attach() {
Chris@0 136 $(toggleEditSelector).once('settingstray').on('click.settingstray', toggleEditMode);
Chris@0 137 }
Chris@0 138 };
Chris@0 139
Chris@0 140 $(window).on({
Chris@0 141 'dialog:beforecreate': function dialogBeforecreate(event, dialog, $element, settings) {
Chris@0 142 if ($element.is('#drupal-off-canvas')) {
Chris@0 143 $('body .settings-tray-active-editable').removeClass('settings-tray-active-editable');
Chris@0 144 var $activeElement = $('#' + settings.settingsTrayActiveEditableId);
Chris@0 145 if ($activeElement.length) {
Chris@0 146 $activeElement.addClass('settings-tray-active-editable');
Chris@0 147 }
Chris@0 148 }
Chris@0 149 },
Chris@0 150 'dialog:beforeclose': function dialogBeforeclose(event, dialog, $element) {
Chris@0 151 if ($element.is('#drupal-off-canvas')) {
Chris@0 152 $('body .settings-tray-active-editable').removeClass('settings-tray-active-editable');
Chris@0 153 }
Chris@0 154 }
Chris@0 155 });
Chris@0 156 })(jQuery, Drupal);