/** * 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 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 }); } } 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); } 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({ id: $(this).attr('data-contextual-id'), token: $(this).attr('data-contextual-token') }); }); var uncachedIDs = []; var uncachedTokens = []; ids.forEach(function (contextualID) { var html = storage.getItem('Drupal.contextual.' + contextualID.id); if (html && html.length) { window.setTimeout(function () { initContextual($context.find('[data-contextual-id="' + contextualID.id + '"]'), html); }); return; } uncachedIDs.push(contextualID.id); uncachedTokens.push(contextualID.token); }); if (uncachedIDs.length > 0) { $.ajax({ url: Drupal.url('contextual/render'), type: 'POST', data: { 'ids[]': uncachedIDs, 'tokens[]': uncachedTokens }, 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 ''; }; $(document).on('drupalContextualLinkAdded', function (event, data) { Drupal.ajax.bindAjaxLinks(data.$el[0]); }); })(jQuery, Drupal, drupalSettings, _, Backbone, window.JSON, window.sessionStorage);