123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- /**
- * DO NOT EDIT THIS FILE.
- * See the following change record for more information,
- * https://www.drupal.org/node/2815083
- * @preserve
- **/
- (function ($, Drupal, drupalSettings, _, Backbone, JSON, storage) {
- var options = $.extend(drupalSettings.contextual, {
- strings: {
- open: Drupal.t('Open'),
- close: Drupal.t('Close')
- }
- });
- var cachedPermissionsHash = storage.getItem('Drupal.contextual.permissionsHash');
- var permissionsHash = drupalSettings.user.permissionsHash;
- if (cachedPermissionsHash !== permissionsHash) {
- if (typeof permissionsHash === 'string') {
- _.chain(storage).keys().each(function (key) {
- if (key.substring(0, 18) === 'Drupal.contextual.') {
- storage.removeItem(key);
- }
- });
- }
- storage.setItem('Drupal.contextual.permissionsHash', permissionsHash);
- }
- function initContextual($contextual, html) {
- var $region = $contextual.closest('.contextual-region');
- var contextual = Drupal.contextual;
- $contextual.html(html).addClass('contextual').prepend(Drupal.theme('contextualTrigger'));
- var destination = 'destination=' + Drupal.encodePath(drupalSettings.path.currentPath);
- $contextual.find('.contextual-links a').each(function () {
- var url = this.getAttribute('href');
- var glue = url.indexOf('?') === -1 ? '?' : '&';
- this.setAttribute('href', url + glue + destination);
- });
- var model = new contextual.StateModel({
- title: $region.find('h2').eq(0).text().trim()
- });
- var viewOptions = $.extend({ el: $contextual, model: 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: model }, options)));
- contextual.collection.add(model);
- $(document).trigger('drupalContextualLinkAdded', {
- $el: $contextual,
- $region: $region,
- model: model
- });
- adjustIfNestedAndOverlapping($contextual);
- }
- function adjustIfNestedAndOverlapping($contextual) {
- var $contextuals = $contextual.parents('.contextual-region').eq(-1).find('.contextual');
- if ($contextuals.length <= 1) {
- return;
- }
- var firstTop = $contextuals.eq(0).offset().top;
- var secondTop = $contextuals.eq(1).offset().top;
- if (firstTop === secondTop) {
- var $nestedContextual = $contextuals.eq(1);
- var height = 0;
- var $trigger = $nestedContextual.find('.trigger');
- $trigger.removeClass('visually-hidden');
- height = $nestedContextual.height();
- $trigger.addClass('visually-hidden');
- $nestedContextual.css({ top: $nestedContextual.position().top + height });
- }
- }
- Drupal.behaviors.contextual = {
- attach: function attach(context) {
- var $context = $(context);
- var $placeholders = $context.find('[data-contextual-id]').once('contextual-render');
- if ($placeholders.length === 0) {
- return;
- }
- var ids = [];
- $placeholders.each(function () {
- ids.push($(this).attr('data-contextual-id'));
- });
- var uncachedIDs = _.filter(ids, function (contextualID) {
- var html = storage.getItem('Drupal.contextual.' + contextualID);
- if (html && html.length) {
- window.setTimeout(function () {
- initContextual($context.find('[data-contextual-id="' + contextualID + '"]'), html);
- });
- return false;
- }
- return true;
- });
- if (uncachedIDs.length > 0) {
- $.ajax({
- url: Drupal.url('contextual/render'),
- type: 'POST',
- data: { 'ids[]': uncachedIDs },
- dataType: 'json',
- success: function success(results) {
- _.each(results, function (html, contextualID) {
- storage.setItem('Drupal.contextual.' + contextualID, html);
- if (html.length > 0) {
- $placeholders = $context.find('[data-contextual-id="' + contextualID + '"]');
- for (var i = 0; i < $placeholders.length; i++) {
- initContextual($placeholders.eq(i), html);
- }
- }
- });
- }
- });
- }
- }
- };
- Drupal.contextual = {
- views: [],
- regionViews: []
- };
- Drupal.contextual.collection = new Backbone.Collection([], { model: Drupal.contextual.StateModel });
- Drupal.theme.contextualTrigger = function () {
- return '<button class="trigger visually-hidden focusable" type="button"></button>';
- };
- })(jQuery, Drupal, drupalSettings, _, Backbone, window.JSON, window.sessionStorage);
|