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, drupalSettings, _, Backbone, JSON, storage) {
|
Chris@0
|
9 var options = $.extend(drupalSettings.contextual, {
|
Chris@0
|
10 strings: {
|
Chris@0
|
11 open: Drupal.t('Open'),
|
Chris@0
|
12 close: Drupal.t('Close')
|
Chris@0
|
13 }
|
Chris@0
|
14 });
|
Chris@0
|
15
|
Chris@0
|
16 var cachedPermissionsHash = storage.getItem('Drupal.contextual.permissionsHash');
|
Chris@0
|
17 var permissionsHash = drupalSettings.user.permissionsHash;
|
Chris@0
|
18 if (cachedPermissionsHash !== permissionsHash) {
|
Chris@0
|
19 if (typeof permissionsHash === 'string') {
|
Chris@0
|
20 _.chain(storage).keys().each(function (key) {
|
Chris@0
|
21 if (key.substring(0, 18) === 'Drupal.contextual.') {
|
Chris@0
|
22 storage.removeItem(key);
|
Chris@0
|
23 }
|
Chris@0
|
24 });
|
Chris@0
|
25 }
|
Chris@0
|
26 storage.setItem('Drupal.contextual.permissionsHash', permissionsHash);
|
Chris@0
|
27 }
|
Chris@0
|
28
|
Chris@17
|
29 function adjustIfNestedAndOverlapping($contextual) {
|
Chris@17
|
30 var $contextuals = $contextual.parents('.contextual-region').eq(-1).find('.contextual');
|
Chris@17
|
31
|
Chris@17
|
32 if ($contextuals.length <= 1) {
|
Chris@17
|
33 return;
|
Chris@17
|
34 }
|
Chris@17
|
35
|
Chris@17
|
36 var firstTop = $contextuals.eq(0).offset().top;
|
Chris@17
|
37 var secondTop = $contextuals.eq(1).offset().top;
|
Chris@17
|
38 if (firstTop === secondTop) {
|
Chris@17
|
39 var $nestedContextual = $contextuals.eq(1);
|
Chris@17
|
40
|
Chris@17
|
41 var height = 0;
|
Chris@17
|
42 var $trigger = $nestedContextual.find('.trigger');
|
Chris@17
|
43
|
Chris@17
|
44 $trigger.removeClass('visually-hidden');
|
Chris@17
|
45 height = $nestedContextual.height();
|
Chris@17
|
46 $trigger.addClass('visually-hidden');
|
Chris@17
|
47
|
Chris@17
|
48 $nestedContextual.css({ top: $nestedContextual.position().top + height });
|
Chris@17
|
49 }
|
Chris@17
|
50 }
|
Chris@17
|
51
|
Chris@0
|
52 function initContextual($contextual, html) {
|
Chris@0
|
53 var $region = $contextual.closest('.contextual-region');
|
Chris@0
|
54 var contextual = Drupal.contextual;
|
Chris@0
|
55
|
Chris@0
|
56 $contextual.html(html).addClass('contextual').prepend(Drupal.theme('contextualTrigger'));
|
Chris@0
|
57
|
Chris@17
|
58 var destination = 'destination=' + Drupal.encodePath(Drupal.url(drupalSettings.path.currentPath));
|
Chris@0
|
59 $contextual.find('.contextual-links a').each(function () {
|
Chris@0
|
60 var url = this.getAttribute('href');
|
Chris@0
|
61 var glue = url.indexOf('?') === -1 ? '?' : '&';
|
Chris@0
|
62 this.setAttribute('href', url + glue + destination);
|
Chris@0
|
63 });
|
Chris@0
|
64
|
Chris@0
|
65 var model = new contextual.StateModel({
|
Chris@0
|
66 title: $region.find('h2').eq(0).text().trim()
|
Chris@0
|
67 });
|
Chris@0
|
68 var viewOptions = $.extend({ el: $contextual, model: model }, options);
|
Chris@0
|
69 contextual.views.push({
|
Chris@0
|
70 visual: new contextual.VisualView(viewOptions),
|
Chris@0
|
71 aural: new contextual.AuralView(viewOptions),
|
Chris@0
|
72 keyboard: new contextual.KeyboardView(viewOptions)
|
Chris@0
|
73 });
|
Chris@0
|
74 contextual.regionViews.push(new contextual.RegionView($.extend({ el: $region, model: model }, options)));
|
Chris@0
|
75
|
Chris@0
|
76 contextual.collection.add(model);
|
Chris@0
|
77
|
Chris@0
|
78 $(document).trigger('drupalContextualLinkAdded', {
|
Chris@0
|
79 $el: $contextual,
|
Chris@0
|
80 $region: $region,
|
Chris@0
|
81 model: model
|
Chris@0
|
82 });
|
Chris@0
|
83
|
Chris@0
|
84 adjustIfNestedAndOverlapping($contextual);
|
Chris@0
|
85 }
|
Chris@0
|
86
|
Chris@0
|
87 Drupal.behaviors.contextual = {
|
Chris@0
|
88 attach: function attach(context) {
|
Chris@0
|
89 var $context = $(context);
|
Chris@0
|
90
|
Chris@0
|
91 var $placeholders = $context.find('[data-contextual-id]').once('contextual-render');
|
Chris@0
|
92 if ($placeholders.length === 0) {
|
Chris@0
|
93 return;
|
Chris@0
|
94 }
|
Chris@0
|
95
|
Chris@0
|
96 var ids = [];
|
Chris@0
|
97 $placeholders.each(function () {
|
Chris@17
|
98 ids.push({
|
Chris@17
|
99 id: $(this).attr('data-contextual-id'),
|
Chris@17
|
100 token: $(this).attr('data-contextual-token')
|
Chris@17
|
101 });
|
Chris@0
|
102 });
|
Chris@0
|
103
|
Chris@17
|
104 var uncachedIDs = [];
|
Chris@17
|
105 var uncachedTokens = [];
|
Chris@17
|
106 ids.forEach(function (contextualID) {
|
Chris@17
|
107 var html = storage.getItem('Drupal.contextual.' + contextualID.id);
|
Chris@0
|
108 if (html && html.length) {
|
Chris@0
|
109 window.setTimeout(function () {
|
Chris@17
|
110 initContextual($context.find('[data-contextual-id="' + contextualID.id + '"]'), html);
|
Chris@0
|
111 });
|
Chris@17
|
112 return;
|
Chris@0
|
113 }
|
Chris@17
|
114 uncachedIDs.push(contextualID.id);
|
Chris@17
|
115 uncachedTokens.push(contextualID.token);
|
Chris@0
|
116 });
|
Chris@0
|
117
|
Chris@0
|
118 if (uncachedIDs.length > 0) {
|
Chris@0
|
119 $.ajax({
|
Chris@0
|
120 url: Drupal.url('contextual/render'),
|
Chris@0
|
121 type: 'POST',
|
Chris@17
|
122 data: { 'ids[]': uncachedIDs, 'tokens[]': uncachedTokens },
|
Chris@0
|
123 dataType: 'json',
|
Chris@0
|
124 success: function success(results) {
|
Chris@0
|
125 _.each(results, function (html, contextualID) {
|
Chris@0
|
126 storage.setItem('Drupal.contextual.' + contextualID, html);
|
Chris@0
|
127
|
Chris@0
|
128 if (html.length > 0) {
|
Chris@0
|
129 $placeholders = $context.find('[data-contextual-id="' + contextualID + '"]');
|
Chris@0
|
130
|
Chris@0
|
131 for (var i = 0; i < $placeholders.length; i++) {
|
Chris@0
|
132 initContextual($placeholders.eq(i), html);
|
Chris@0
|
133 }
|
Chris@0
|
134 }
|
Chris@0
|
135 });
|
Chris@0
|
136 }
|
Chris@0
|
137 });
|
Chris@0
|
138 }
|
Chris@0
|
139 }
|
Chris@0
|
140 };
|
Chris@0
|
141
|
Chris@0
|
142 Drupal.contextual = {
|
Chris@0
|
143 views: [],
|
Chris@0
|
144
|
Chris@0
|
145 regionViews: []
|
Chris@0
|
146 };
|
Chris@0
|
147
|
Chris@17
|
148 Drupal.contextual.collection = new Backbone.Collection([], {
|
Chris@17
|
149 model: Drupal.contextual.StateModel
|
Chris@17
|
150 });
|
Chris@0
|
151
|
Chris@0
|
152 Drupal.theme.contextualTrigger = function () {
|
Chris@0
|
153 return '<button class="trigger visually-hidden focusable" type="button"></button>';
|
Chris@0
|
154 };
|
Chris@14
|
155
|
Chris@14
|
156 $(document).on('drupalContextualLinkAdded', function (event, data) {
|
Chris@14
|
157 Drupal.ajax.bindAjaxLinks(data.$el[0]);
|
Chris@14
|
158 });
|
Chris@0
|
159 })(jQuery, Drupal, drupalSettings, _, Backbone, window.JSON, window.sessionStorage); |