summaryrefslogtreecommitdiffstatshomepage
path: root/core/modules/contextual/js/contextual.es6.js
diff options
context:
space:
mode:
authorcatch <catch@35733.no-reply.drupal.org>2022-09-09 07:26:42 +0100
committercatch <catch@35733.no-reply.drupal.org>2022-09-09 07:26:42 +0100
commit8aa8ce1ffbcca9c727f46e58c714e1d351f7ef88 (patch)
tree27be6908992c340ba0b4c0bd3f4339670aa71e90 /core/modules/contextual/js/contextual.es6.js
parent09f8f13d8a72b8e482cc689fcd10f023df41b899 (diff)
downloaddrupal-8aa8ce1ffbcca9c727f46e58c714e1d351f7ef88.tar.gz
drupal-8aa8ce1ffbcca9c727f46e58c714e1d351f7ef88.zip
Issue #3278415 by nod_, lauriii, catch, Wim Leers, longwave, xjm, claudiu.cristea: Remove usages of the JavaScript ES6 build step, the build step itself, and associated dev dependencies
Diffstat (limited to 'core/modules/contextual/js/contextual.es6.js')
-rw-r--r--core/modules/contextual/js/contextual.es6.js321
1 files changed, 0 insertions, 321 deletions
diff --git a/core/modules/contextual/js/contextual.es6.js b/core/modules/contextual/js/contextual.es6.js
deleted file mode 100644
index b5fe7d094fb0..000000000000
--- a/core/modules/contextual/js/contextual.es6.js
+++ /dev/null
@@ -1,321 +0,0 @@
-/**
- * @file
- * Attaches behaviors for the Contextual module.
- */
-
-(function ($, Drupal, drupalSettings, _, Backbone, JSON, storage) {
- const options = $.extend(
- drupalSettings.contextual,
- // Merge strings on top of drupalSettings so that they are not mutable.
- {
- strings: {
- open: Drupal.t('Open'),
- close: Drupal.t('Close'),
- },
- },
- );
-
- // Clear the cached contextual links whenever the current user's set of
- // permissions changes.
- const cachedPermissionsHash = storage.getItem(
- 'Drupal.contextual.permissionsHash',
- );
- const permissionsHash = drupalSettings.user.permissionsHash;
- if (cachedPermissionsHash !== permissionsHash) {
- if (typeof permissionsHash === 'string') {
- _.chain(storage)
- .keys()
- .each((key) => {
- if (key.substring(0, 18) === 'Drupal.contextual.') {
- storage.removeItem(key);
- }
- });
- }
- storage.setItem('Drupal.contextual.permissionsHash', permissionsHash);
- }
-
- /**
- * Determines if a contextual link is nested & overlapping, if so: adjusts it.
- *
- * This only deals with two levels of nesting; deeper levels are not touched.
- *
- * @param {jQuery} $contextual
- * A contextual links placeholder DOM element, containing the actual
- * contextual links as rendered by the server.
- */
- function adjustIfNestedAndOverlapping($contextual) {
- const $contextuals = $contextual
- // @todo confirm that .closest() is not sufficient
- .parents('.contextual-region')
- .eq(-1)
- .find('.contextual');
-
- // Early-return when there's no nesting.
- if ($contextuals.length <= 1) {
- return;
- }
-
- // If the two contextual links overlap, then we move the second one.
- const firstTop = $contextuals.eq(0).offset().top;
- const secondTop = $contextuals.eq(1).offset().top;
- if (firstTop === secondTop) {
- const $nestedContextual = $contextuals.eq(1);
-
- // Retrieve height of nested contextual link.
- let height = 0;
- const $trigger = $nestedContextual.find('.trigger');
- // Elements with the .visually-hidden class have no dimensions, so this
- // class must be temporarily removed to the calculate the height.
- $trigger.removeClass('visually-hidden');
- height = $nestedContextual.height();
- $trigger.addClass('visually-hidden');
-
- // Adjust nested contextual link's position.
- $nestedContextual.css({ top: $nestedContextual.position().top + height });
- }
- }
-
- /**
- * Initializes a contextual link: updates its DOM, sets up model and views.
- *
- * @param {jQuery} $contextual
- * A contextual links placeholder DOM element, containing the actual
- * contextual links as rendered by the server.
- * @param {string} html
- * The server-side rendered HTML for this contextual link.
- */
- function initContextual($contextual, html) {
- const $region = $contextual.closest('.contextual-region');
- const contextual = Drupal.contextual;
-
- $contextual
- // Update the placeholder to contain its rendered contextual links.
- .html(html)
- // Use the placeholder as a wrapper with a specific class to provide
- // positioning and behavior attachment context.
- .addClass('contextual')
- // Ensure a trigger element exists before the actual contextual links.
- .prepend(Drupal.theme('contextualTrigger'));
-
- // Set the destination parameter on each of the contextual links.
- const destination = `destination=${Drupal.encodePath(
- Drupal.url(drupalSettings.path.currentPath),
- )}`;
- $contextual.find('.contextual-links a').each(function () {
- const url = this.getAttribute('href');
- const glue = url.indexOf('?') === -1 ? '?' : '&';
- this.setAttribute('href', url + glue + destination);
- });
-
- let title = '';
- const $regionHeading = $region.find('h2');
- if ($regionHeading.length) {
- title = $regionHeading[0].textContent.trim();
- }
- // Create a model and the appropriate views.
- const model = new contextual.StateModel({
- title,
- });
- const viewOptions = $.extend({ el: $contextual, model }, options);
- contextual.views.push({
- visual: new contextual.VisualView(viewOptions),
- aural: new contextual.AuralView(viewOptions),
- keyboard: new contextual.KeyboardView(viewOptions),
- });
- contextual.regionViews.push(
- new contextual.RegionView($.extend({ el: $region, model }, options)),
- );
-
- // Add the model to the collection. This must happen after the views have
- // been associated with it, otherwise collection change event handlers can't
- // trigger the model change event handler in its views.
- contextual.collection.add(model);
-
- // Let other JavaScript react to the adding of a new contextual link.
- $(document).trigger(
- 'drupalContextualLinkAdded',
- Drupal.deprecatedProperty({
- target: {
- $el: $contextual,
- $region,
- model,
- },
- deprecatedProperty: 'model',
- message:
- 'The model property is deprecated in drupal:9.4.0 and is removed from drupal:10.0.0. There is no replacement.',
- }),
- );
-
- // Fix visual collisions between contextual link triggers.
- adjustIfNestedAndOverlapping($contextual);
- }
-
- /**
- * Attaches outline behavior for regions associated with contextual links.
- *
- * Events
- * Contextual triggers an event that can be used by other scripts.
- * - drupalContextualLinkAdded: Triggered when a contextual link is added.
- *
- * @type {Drupal~behavior}
- *
- * @prop {Drupal~behaviorAttach} attach
- * Attaches the outline behavior to the right context.
- */
- Drupal.behaviors.contextual = {
- attach(context) {
- const $context = $(context);
-
- // Find all contextual links placeholders, if any.
- let $placeholders = $(
- once('contextual-render', '[data-contextual-id]', context),
- );
- if ($placeholders.length === 0) {
- return;
- }
-
- // Collect the IDs for all contextual links placeholders.
- const ids = [];
- $placeholders.each(function () {
- ids.push({
- id: $(this).attr('data-contextual-id'),
- token: $(this).attr('data-contextual-token'),
- });
- });
-
- const uncachedIDs = [];
- const uncachedTokens = [];
- ids.forEach((contextualID) => {
- const html = storage.getItem(`Drupal.contextual.${contextualID.id}`);
- if (html && html.length) {
- // Initialize after the current execution cycle, to make the AJAX
- // request for retrieving the uncached contextual links as soon as
- // possible, but also to ensure that other Drupal behaviors have had
- // the chance to set up an event listener on the Backbone collection
- // Drupal.contextual.collection.
- window.setTimeout(() => {
- initContextual(
- $context
- .find(`[data-contextual-id="${contextualID.id}"]:empty`)
- .eq(0),
- html,
- );
- });
- return;
- }
- uncachedIDs.push(contextualID.id);
- uncachedTokens.push(contextualID.token);
- });
-
- // Perform an AJAX request to let the server render the contextual links
- // for each of the placeholders.
- if (uncachedIDs.length > 0) {
- $.ajax({
- url: Drupal.url('contextual/render'),
- type: 'POST',
- data: { 'ids[]': uncachedIDs, 'tokens[]': uncachedTokens },
- dataType: 'json',
- success(results) {
- _.each(results, (html, contextualID) => {
- // Store the metadata.
- storage.setItem(`Drupal.contextual.${contextualID}`, html);
- // If the rendered contextual links are empty, then the current
- // user does not have permission to access the associated links:
- // don't render anything.
- if (html.length > 0) {
- // Update the placeholders to contain its rendered contextual
- // links. Usually there will only be one placeholder, but it's
- // possible for multiple identical placeholders exist on the
- // page (probably because the same content appears more than
- // once).
- $placeholders = $context.find(
- `[data-contextual-id="${contextualID}"]`,
- );
-
- // Initialize the contextual links.
- for (let i = 0; i < $placeholders.length; i++) {
- initContextual($placeholders.eq(i), html);
- }
- }
- });
- },
- });
- }
- },
- };
-
- /**
- * Namespace for contextual related functionality.
- *
- * @namespace
- *
- * @private
- */
- Drupal.contextual = {
- /**
- * The {@link Drupal.contextual.View} instances associated with each list
- * element of contextual links.
- *
- * @type {Array}
- *
- * @deprecated in drupal:9.4.0 and is removed from drupal:10.0.0. There is no
- * replacement.
- */
- views: [],
-
- /**
- * The {@link Drupal.contextual.RegionView} instances associated with each
- * contextual region element.
- *
- * @type {Array}
- *
- * @deprecated in drupal:9.4.0 and is removed from drupal:10.0.0. There is no
- * replacement.
- */
- regionViews: [],
- };
-
- /**
- * A Backbone.Collection of {@link Drupal.contextual.StateModel} instances.
- *
- * @type {Backbone.Collection}
- *
- * @deprecated in drupal:9.4.0 and is removed from drupal:10.0.0. There is no
- * replacement.
- */
- Drupal.contextual.collection = new Backbone.Collection([], {
- model: Drupal.contextual.StateModel,
- });
-
- /**
- * A trigger is an interactive element often bound to a click handler.
- *
- * @return {string}
- * A string representing a DOM fragment.
- */
- Drupal.theme.contextualTrigger = function () {
- return '<button class="trigger visually-hidden focusable" type="button"></button>';
- };
-
- /**
- * Bind Ajax contextual links when 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', (event, data) => {
- Drupal.ajax.bindAjaxLinks(data.$el[0]);
- });
-})(
- jQuery,
- Drupal,
- drupalSettings,
- _,
- Backbone,
- window.JSON,
- window.sessionStorage,
-);