Updated to Drupal 8.6.4, which is PHP 7.3 friendly. Also updated HTMLaw library....
[yaffs-website] / web / core / misc / tabbingmanager.js
1 /**
2 * DO NOT EDIT THIS FILE.
3 * See the following change record for more information,
4 * https://www.drupal.org/node/2815083
5 * @preserve
6 **/
7
8 (function ($, Drupal) {
9   function TabbingManager() {
10     this.stack = [];
11   }
12
13   function TabbingContext(options) {
14     $.extend(this, {
15       level: null,
16
17       $tabbableElements: $(),
18
19       $disabledElements: $(),
20
21       released: false,
22
23       active: false
24     }, options);
25   }
26
27   $.extend(TabbingManager.prototype, {
28     constrain: function constrain(elements) {
29       var il = this.stack.length;
30       for (var i = 0; i < il; i++) {
31         this.stack[i].deactivate();
32       }
33
34       var $elements = $(elements).find(':tabbable').addBack(':tabbable');
35
36       var tabbingContext = new TabbingContext({
37         level: this.stack.length,
38         $tabbableElements: $elements
39       });
40
41       this.stack.push(tabbingContext);
42
43       tabbingContext.activate();
44
45       $(document).trigger('drupalTabbingConstrained', tabbingContext);
46
47       return tabbingContext;
48     },
49     release: function release() {
50       var toActivate = this.stack.length - 1;
51       while (toActivate >= 0 && this.stack[toActivate].released) {
52         toActivate--;
53       }
54
55       this.stack.splice(toActivate + 1);
56
57       if (toActivate >= 0) {
58         this.stack[toActivate].activate();
59       }
60     },
61     activate: function activate(tabbingContext) {
62       var $set = tabbingContext.$tabbableElements;
63       var level = tabbingContext.level;
64
65       var $disabledSet = $(':tabbable').not($set);
66
67       tabbingContext.$disabledElements = $disabledSet;
68
69       var il = $disabledSet.length;
70       for (var i = 0; i < il; i++) {
71         this.recordTabindex($disabledSet.eq(i), level);
72       }
73
74       $disabledSet.prop('tabindex', -1).prop('autofocus', false);
75
76       var $hasFocus = $set.filter('[autofocus]').eq(-1);
77
78       if ($hasFocus.length === 0) {
79         $hasFocus = $set.eq(0);
80       }
81       $hasFocus.trigger('focus');
82     },
83     deactivate: function deactivate(tabbingContext) {
84       var $set = tabbingContext.$disabledElements;
85       var level = tabbingContext.level;
86       var il = $set.length;
87       for (var i = 0; i < il; i++) {
88         this.restoreTabindex($set.eq(i), level);
89       }
90     },
91     recordTabindex: function recordTabindex($el, level) {
92       var tabInfo = $el.data('drupalOriginalTabIndices') || {};
93       tabInfo[level] = {
94         tabindex: $el[0].getAttribute('tabindex'),
95         autofocus: $el[0].hasAttribute('autofocus')
96       };
97       $el.data('drupalOriginalTabIndices', tabInfo);
98     },
99     restoreTabindex: function restoreTabindex($el, level) {
100       var tabInfo = $el.data('drupalOriginalTabIndices');
101       if (tabInfo && tabInfo[level]) {
102         var data = tabInfo[level];
103         if (data.tabindex) {
104           $el[0].setAttribute('tabindex', data.tabindex);
105         } else {
106             $el[0].removeAttribute('tabindex');
107           }
108         if (data.autofocus) {
109           $el[0].setAttribute('autofocus', 'autofocus');
110         }
111
112         if (level === 0) {
113           $el.removeData('drupalOriginalTabIndices');
114         } else {
115           var levelToDelete = level;
116           while (tabInfo.hasOwnProperty(levelToDelete)) {
117             delete tabInfo[levelToDelete];
118             levelToDelete++;
119           }
120           $el.data('drupalOriginalTabIndices', tabInfo);
121         }
122       }
123     }
124   });
125
126   $.extend(TabbingContext.prototype, {
127     release: function release() {
128       if (!this.released) {
129         this.deactivate();
130         this.released = true;
131         Drupal.tabbingManager.release(this);
132
133         $(document).trigger('drupalTabbingContextReleased', this);
134       }
135     },
136     activate: function activate() {
137       if (!this.active && !this.released) {
138         this.active = true;
139         Drupal.tabbingManager.activate(this);
140
141         $(document).trigger('drupalTabbingContextActivated', this);
142       }
143     },
144     deactivate: function deactivate() {
145       if (this.active) {
146         this.active = false;
147         Drupal.tabbingManager.deactivate(this);
148
149         $(document).trigger('drupalTabbingContextDeactivated', this);
150       }
151     }
152   });
153
154   if (Drupal.tabbingManager) {
155     return;
156   }
157
158   Drupal.tabbingManager = new TabbingManager();
159 })(jQuery, Drupal);