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