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(function ($, Drupal) { 8 var states = { 9 postponed: [] 10 }; 11 Drupal.states = states; 12 function invert(a, invertState) { 13 return invertState && typeof a !== 'undefined' ? !a : a; 14 } 15 function _compare2(a, b) { 16 if (a === b) { 17 return typeof a === 'undefined' ? a : true; 18 } 19 return typeof a === 'undefined' || typeof b === 'undefined'; 20 } 21 function ternary(a, b) { 22 if (typeof a === 'undefined') { 23 return b; 24 } 25 if (typeof b === 'undefined') { 26 return a; 27 } 28 return a && b; 29 } 30 Drupal.behaviors.states = { 31 attach: function attach(context, settings) { 32 var $states = $(context).find('[data-drupal-states]'); 33 var il = $states.length; 34 var _loop = function _loop(i) { 35 var config = JSON.parse($states[i].getAttribute('data-drupal-states')); 36 Object.keys(config || {}).forEach(function (state) { 37 new states.Dependent({ 38 element: $($states[i]), 39 state: states.State.sanitize(state), 40 constraints: config[state] 41 }); 42 }); 43 }; 44 for (var i = 0; i < il; i++) { 45 _loop(i); 46 } 47 while (states.postponed.length) { 48 states.postponed.shift()(); 49 } 50 } 51 }; 52 states.Dependent = function (args) { 53 var _this = this; 54 $.extend(this, { 55 values: {}, 56 oldValue: null 57 }, args); 58 this.dependees = this.getDependees(); 59 Object.keys(this.dependees || {}).forEach(function (selector) { 60 _this.initializeDependee(selector, _this.dependees[selector]); 61 }); 62 }; 63 states.Dependent.comparisons = { 64 RegExp: function RegExp(reference, value) { 65 return reference.test(value); 66 }, 67 Function: function Function(reference, value) { 68 return reference(value); 69 }, 70 Number: function Number(reference, value) { 71 return typeof value === 'string' ? _compare2(reference.toString(), value) : _compare2(reference, value); 72 } 73 }; 74 states.Dependent.prototype = { 75 initializeDependee: function initializeDependee(selector, dependeeStates) { 76 var _this2 = this; 77 this.values[selector] = {}; 78 Object.keys(dependeeStates).forEach(function (i) { 79 var state = dependeeStates[i]; 80 if ($.inArray(state, dependeeStates) === -1) { 81 return; 82 } 83 state = states.State.sanitize(state); 84 _this2.values[selector][state.name] = null; 85 $(selector).on("state:".concat(state), { 86 selector: selector, 87 state: state 88 }, function (e) { 89 _this2.update(e.data.selector, e.data.state, e.value); 90 }); 91 new states.Trigger({ 92 selector: selector, 93 state: state 94 }); 95 }); 96 }, 97 compare: function compare(reference, selector, state) { 98 var value = this.values[selector][state.name]; 99 if (reference.constructor.name in states.Dependent.comparisons) { 100 return states.Dependent.comparisons[reference.constructor.name](reference, value); 101 } 102 return _compare2(reference, value); 103 }, 104 update: function update(selector, state, value) { 105 if (value !== this.values[selector][state.name]) { 106 this.values[selector][state.name] = value; 107 this.reevaluate(); 108 } 109 }, 110 reevaluate: function reevaluate() { 111 var value = this.verifyConstraints(this.constraints); 112 if (value !== this.oldValue) { 113 this.oldValue = value; 114 value = invert(value, this.state.invert); 115 this.element.trigger({ 116 type: "state:".concat(this.state), 117 value: value, 118 trigger: true 119 }); 120 } 121 }, 122 verifyConstraints: function verifyConstraints(constraints, selector) { 123 var result; 124 if ($.isArray(constraints)) { 125 var hasXor = $.inArray('xor', constraints) === -1; 126 var len = constraints.length; 127 for (var i = 0; i < len; i++) { 128 if (constraints[i] !== 'xor') { 129 var constraint = this.checkConstraints(constraints[i], selector, i); 130 if (constraint && (hasXor || result)) { 131 return hasXor; 132 } 133 result = result || constraint; 134 } 135 } 136 } else if ($.isPlainObject(constraints)) { 137 for (var n in constraints) { 138 if (constraints.hasOwnProperty(n)) { 139 result = ternary(result, this.checkConstraints(constraints[n], selector, n)); 140 if (result === false) { 141 return false;
142 } 143 } 144 } 145 } 146 return result; 147 }, 148 checkConstraints: function checkConstraints(value, selector, state) { 149 if (typeof state !== 'string' || /[0-9]/.test(state[0])) { 150 state = null; 151 } else if (typeof selector === 'undefined') { 152 selector = state; 153 state = null; 154 } 155 if (state !== null) { 156 state = states.State.sanitize(state); 157 return invert(this.compare(value, selector, state), state.invert); 158 } 159 return this.verifyConstraints(value, selector); 160 }, 161 getDependees: function getDependees() { 162 var cache = {}; 163 var _compare = this.compare; 164 this.compare = function (reference, selector, state) { 165 (cache[selector] || (cache[selector] = [])).push(state.name); 166 }; 167 this.verifyConstraints(this.constraints); 168 this.compare = _compare; 169 return cache; 170 } 171 }; 172 states.Trigger = function (args) { 173 $.extend(this, args); 174 if (this.state in states.Trigger.states) { 175 this.element = $(this.selector); 176 if (!this.element.data("trigger:".concat(this.state))) { 177 this.initialize(); 178 } 179 } 180 }; 181 states.Trigger.prototype = { 182 initialize: function initialize() { 183 var _this3 = this; 184 var trigger = states.Trigger.states[this.state]; 185 if (typeof trigger === 'function') { 186 trigger.call(window, this.element); 187 } else { 188 Object.keys(trigger || {}).forEach(function (event) { 189 _this3.defaultTrigger(event, trigger[event]); 190 }); 191 } 192 this.element.data("trigger:".concat(this.state), true); 193 }, 194 defaultTrigger: function defaultTrigger(event, valueFn) { 195 var oldValue = valueFn.call(this.element); 196 this.element.on(event, $.proxy(function (e) { 197 var value = valueFn.call(this.element, e); 198 if (oldValue !== value) { 199 this.element.trigger({ 200 type: "state:".concat(this.state), 201 value: value, 202 oldValue: oldValue 203 }); 204 oldValue = value; 205 } 206 }, this)); 207 states.postponed.push($.proxy(function () { 208 this.element.trigger({ 209 type: "state:".concat(this.state), 210 value: oldValue, 211 oldValue: null 212 }); 213 }, this)); 214 } 215 }; 216 states.Trigger.states = { 217 empty: { 218 keyup: function keyup() { 219 return this.val() === ''; 220 }, 221 change: function change() { 222 return this.val() === ''; 223 } 224 }, 225 checked: { 226 change: function change() { 227 var checked = false; 228 this.each(function () { 229 checked = $(this).prop('checked'); 230 return !checked; 231 }); 232 return checked; 233 } 234 }, 235 value: { 236 keyup: function keyup() { 237 if (this.length > 1) { 238 return this.filter(':checked').val() || false; 239 } 240 return this.val(); 241 }, 242 change: function change() { 243 if (this.length > 1) { 244 return this.filter(':checked').val() || false; 245 } 246 return this.val(); 247 } 248 }, 249 collapsed: { 250 collapsed: function collapsed(e) { 251 return typeof e !== 'undefined' && 'value' in e ? e.value : !this.is('[open]'); 252 } 253 } 254 }; 255 states.State = function (state) { 256 this.pristine = state; 257 this.name = state; 258 var process = true; 259 do { 260 while (this.name.charAt(0) === '!') { 261 this.name = this.name.substring(1); 262 this.invert = !this.invert; 263 } 264 if (this.name in states.State.aliases) { 265 this.name = states.State.aliases[this.name]; 266 } else { 267 process = false; 268 } 269 } while (process); 270 }; 271 states.State.sanitize = function (state) { 272 if (state instanceof states.State) { 273 return state; 274 } 275 return new states.State(state); 276 }; 277 states.State.aliases = { 278 enabled: '!disabled', 279 invisible: '!visible', 280 invalid: '!valid', 281 untouched: '!touched', 282 optional: '!required', 283 filled: '!empty', 284 unchecked: '!checked', 285 irrelevant: '!relevant', 286 expanded: '!collapsed', 287 open: '!collapsed', 288 closed: 'collapsed', 289 readwrite: '!readonly' 290 }; 291 states.State.prototype = { 292 invert: false, 293 toString: function toString() { 294 return this.name; 295 } 296 }; 297 var $document = $(document); 298 $document.on('state:disabled', function (e) { 299 if (e.trigger) { 300 $(e.target).closest('.js-form-item, .js-form-submit, .js-form-wrapper').toggleClass('form-disabled', e.value).find('select, input, textarea').prop('disabled', e.value); 301 } 302 }); 303 $document.on('state:required', function (e) { 304 if (e.trigger) { 305 if (e.value) { 306 var label = "label".concat(e.target.id ? "[for=".concat(e.target.id, "]") : ''); 307 var $label = $(e.target).attr({ 308 required: 'required', 309 'aria-required': 'true' 310 }).closest('.js-form-item, .js-form-wrapper').find(label); 311 if (!$label.hasClass('js-form-required').length) { 312 $label.addClass('js-form-required form-required'); 313 } 314 } else { 315 $(e.target).removeAttr('required aria-required').closest('.js-form-item, .js-form-wrapper').find('label.js-form-required').removeClass('js-form-required form-required'); 316 } 317 } 318 }); 319 $document.on('state:visible', function (e) { 320 if (e.trigger) { 321 $(e.target).closest('.js-form-item, .js-form-submit, .js-form-wrapper').toggle(e.value); 322 } 323 }); 324 $document.on('state:checked', function (e) { 325 if (e.trigger) { 326 $(e.target).closest('.js-form-item, .js-form-wrapper').find('input').prop('checked', e.value).trigger('change'); 327 } 328 }); 329 $document.on('state:collapsed', function (e) { 330 if (e.trigger) { 331 if ($(e.target).is('[open]') === e.value) { 332 $(e.target).find('> summary').trigger('click'); 333 } 334 } 335 }); 336})(jQuery, Drupal);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.