card-mod-script 0.14.2 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/config/late/extend_ansi.rb +1 -0
  3. data/data/real.yml +50 -0
  4. data/lib/card/mod/script.rb +1 -0
  5. data/lib/cardio/utils/ansi2_html.rb +72 -0
  6. data/set/abstract/00_script.rb +4 -4
  7. data/set/abstract/02_coffee_script.rb +9 -1
  8. data/set/all/head_javascript.rb +13 -22
  9. data/set/right/script.rb +1 -1
  10. data/set/type/coffee_script.rb +6 -0
  11. data/set/type/java_script.rb +6 -0
  12. data/set/type/local_script_folder_group.rb +2 -0
  13. data/set/type/local_script_manifest_group.rb +2 -0
  14. data/set/type_plus_right/mod/script.rb +1 -5
  15. data/set/type_plus_right/set/script.rb +3 -1
  16. metadata +15 -120
  17. data/assets/script/decko/autosave.js.coffee +0 -30
  18. data/assets/script/decko/bridge.js.coffee +0 -31
  19. data/assets/script/decko/card_menu.js.coffee +0 -26
  20. data/assets/script/decko/components.js.coffee +0 -49
  21. data/assets/script/decko/decko.js.coffee +0 -82
  22. data/assets/script/decko/doubleclick.js.coffee +0 -30
  23. data/assets/script/decko/editor.js.coffee +0 -57
  24. data/assets/script/decko/filter.js.coffee +0 -183
  25. data/assets/script/decko/filter_items.js.coffee +0 -128
  26. data/assets/script/decko/filter_links.js.coffee +0 -81
  27. data/assets/script/decko/follow.js.coffee +0 -22
  28. data/assets/script/decko/layout.js.coffee +0 -76
  29. data/assets/script/decko/link_editor.js.coffee +0 -61
  30. data/assets/script/decko/mod.js.coffee +0 -79
  31. data/assets/script/decko/modal.js.coffee +0 -113
  32. data/assets/script/decko/name_editor.js.coffee +0 -40
  33. data/assets/script/decko/navbox.js.coffee +0 -74
  34. data/assets/script/decko/nest_editor.js.coffee +0 -166
  35. data/assets/script/decko/nest_editor_name.js.coffee +0 -102
  36. data/assets/script/decko/nest_editor_options.js.coffee +0 -93
  37. data/assets/script/decko/nest_editor_rules.js.coffee +0 -3
  38. data/assets/script/decko/overlay.js.coffee +0 -54
  39. data/assets/script/decko/pointer_config.js.coffee +0 -79
  40. data/assets/script/decko/pointer_list_editor.js.coffee +0 -67
  41. data/assets/script/decko/recaptcha.js.coffee +0 -19
  42. data/assets/script/decko/selectable_filtered_content.js.coffee +0 -12
  43. data/assets/script/decko/slot.js.coffee +0 -182
  44. data/assets/script/decko/slot_ready.js.coffee +0 -12
  45. data/assets/script/decko/slotter.js.coffee +0 -268
  46. data/assets/script/decko/type_editor.js.coffee +0 -21
  47. data/assets/script/decko/upload.js.coffee +0 -64
  48. data/assets/script/jquery-ui.min.js +0 -13
  49. data/assets/script/jquery.autosize.js +0 -274
  50. data/assets/script/manifest.yml +0 -57
  51. data/db/migrate_core_cards/20200804112348_add_mod_script_assets_type.rb +0 -30
  52. data/vendor/jquery_file_upload/LICENSE.txt +0 -20
  53. data/vendor/jquery_file_upload/README.md +0 -224
  54. data/vendor/jquery_file_upload/SECURITY.md +0 -227
  55. data/vendor/jquery_file_upload/VULNERABILITIES.md +0 -118
  56. data/vendor/jquery_file_upload/cors/postmessage.html +0 -85
  57. data/vendor/jquery_file_upload/cors/result.html +0 -26
  58. data/vendor/jquery_file_upload/css/jquery.fileupload-noscript.css +0 -22
  59. data/vendor/jquery_file_upload/css/jquery.fileupload-ui-noscript.css +0 -17
  60. data/vendor/jquery_file_upload/css/jquery.fileupload-ui.css +0 -68
  61. data/vendor/jquery_file_upload/css/jquery.fileupload.css +0 -36
  62. data/vendor/jquery_file_upload/docker-compose.yml +0 -55
  63. data/vendor/jquery_file_upload/img/loading.gif +0 -0
  64. data/vendor/jquery_file_upload/img/progressbar.gif +0 -0
  65. data/vendor/jquery_file_upload/index.html +0 -357
  66. data/vendor/jquery_file_upload/js/cors/jquery.postmessage-transport.js +0 -126
  67. data/vendor/jquery_file_upload/js/cors/jquery.xdr-transport.js +0 -97
  68. data/vendor/jquery_file_upload/js/demo.js +0 -75
  69. data/vendor/jquery_file_upload/js/jquery.fileupload-audio.js +0 -101
  70. data/vendor/jquery_file_upload/js/jquery.fileupload-image.js +0 -347
  71. data/vendor/jquery_file_upload/js/jquery.fileupload-process.js +0 -170
  72. data/vendor/jquery_file_upload/js/jquery.fileupload-ui.js +0 -759
  73. data/vendor/jquery_file_upload/js/jquery.fileupload-validate.js +0 -119
  74. data/vendor/jquery_file_upload/js/jquery.fileupload-video.js +0 -101
  75. data/vendor/jquery_file_upload/js/jquery.fileupload.js +0 -1604
  76. data/vendor/jquery_file_upload/js/jquery.iframe-transport.js +0 -227
  77. data/vendor/jquery_file_upload/js/vendor/jquery.ui.widget.js +0 -805
  78. data/vendor/jquery_file_upload/package-lock.json +0 -6853
  79. data/vendor/jquery_file_upload/package.json +0 -116
  80. data/vendor/jquery_file_upload/server/gae-python/app.yaml +0 -18
  81. data/vendor/jquery_file_upload/server/gae-python/main.py +0 -204
  82. data/vendor/jquery_file_upload/server/gae-python/static/favicon.ico +0 -0
  83. data/vendor/jquery_file_upload/server/gae-python/static/robots.txt +0 -2
  84. data/vendor/jquery_file_upload/server/php/Dockerfile +0 -44
  85. data/vendor/jquery_file_upload/server/php/UploadHandler.php +0 -1480
  86. data/vendor/jquery_file_upload/server/php/index.php +0 -15
  87. data/vendor/jquery_file_upload/server/php/php.ini +0 -5
  88. data/vendor/jquery_file_upload/test/index.html +0 -49
  89. data/vendor/jquery_file_upload/test/unit.js +0 -989
  90. data/vendor/jquery_file_upload/test/vendor/chai.js +0 -10854
  91. data/vendor/jquery_file_upload/test/vendor/mocha.css +0 -325
  92. data/vendor/jquery_file_upload/test/vendor/mocha.js +0 -18178
  93. data/vendor/jquery_file_upload/wdio/LICENSE.txt +0 -20
  94. data/vendor/jquery_file_upload/wdio/assets/black+white-3x2.jpg +0 -0
  95. data/vendor/jquery_file_upload/wdio/assets/black+white-60x40.gif +0 -0
  96. data/vendor/jquery_file_upload/wdio/conf/chrome.js +0 -40
  97. data/vendor/jquery_file_upload/wdio/conf/firefox.js +0 -25
  98. data/vendor/jquery_file_upload/wdio/hooks/index.js +0 -36
  99. data/vendor/jquery_file_upload/wdio/test/pages/file-upload.js +0 -79
  100. data/vendor/jquery_file_upload/wdio/test/specs/01-file-upload.js +0 -25
  101. data/vendor/jquery_file_upload/wdio/wdio.conf.js +0 -4
  102. data/vendor/jquery_rails/CHANGELOG.md +0 -359
  103. data/vendor/jquery_rails/CONTRIBUTING.md +0 -132
  104. data/vendor/jquery_rails/Gemfile +0 -22
  105. data/vendor/jquery_rails/MIT-LICENSE +0 -21
  106. data/vendor/jquery_rails/README.md +0 -75
  107. data/vendor/jquery_rails/Rakefile +0 -59
  108. data/vendor/jquery_rails/VERSIONS.md +0 -62
  109. data/vendor/jquery_rails/jquery-rails.gemspec +0 -26
  110. data/vendor/jquery_rails/lib/jquery/assert_select.rb +0 -149
  111. data/vendor/jquery_rails/lib/jquery/rails/engine.rb +0 -6
  112. data/vendor/jquery_rails/lib/jquery/rails/version.rb +0 -9
  113. data/vendor/jquery_rails/lib/jquery/rails.rb +0 -8
  114. data/vendor/jquery_rails/lib/jquery-rails.rb +0 -1
  115. data/vendor/jquery_rails/test/assert_select_jquery_test.rb +0 -85
  116. data/vendor/jquery_rails/test/test_helper.rb +0 -6
  117. data/vendor/jquery_rails/vendor/assets/javascripts/jquery.js +0 -11008
  118. data/vendor/jquery_rails/vendor/assets/javascripts/jquery.min.js +0 -5
  119. data/vendor/jquery_rails/vendor/assets/javascripts/jquery.min.map +0 -1
  120. data/vendor/jquery_rails/vendor/assets/javascripts/jquery2.js +0 -9814
  121. data/vendor/jquery_rails/vendor/assets/javascripts/jquery2.min.js +0 -4
  122. data/vendor/jquery_rails/vendor/assets/javascripts/jquery2.min.map +0 -1
  123. data/vendor/jquery_rails/vendor/assets/javascripts/jquery3.js +0 -10364
  124. data/vendor/jquery_rails/vendor/assets/javascripts/jquery3.min.js +0 -2
  125. data/vendor/jquery_rails/vendor/assets/javascripts/jquery3.min.map +0 -1
  126. data/vendor/jquery_rails/vendor/assets/javascripts/jquery_ujs.js +0 -555
  127. /data/{init → config}/early/init_execjs.rb +0 -0
@@ -1,805 +0,0 @@
1
- /*! jQuery UI - v1.12.1+0b7246b6eeadfa9e2696e22f3230f6452f8129dc - 2020-02-20
2
- * http://jqueryui.com
3
- * Includes: widget.js
4
- * Copyright jQuery Foundation and other contributors; Licensed MIT */
5
-
6
- /* global define, require */
7
- /* eslint-disable no-param-reassign, new-cap, jsdoc/require-jsdoc */
8
-
9
- (function (factory) {
10
- 'use strict';
11
- if (typeof define === 'function' && define.amd) {
12
- // AMD. Register as an anonymous module.
13
- define(['jquery'], factory);
14
- } else if (typeof exports === 'object') {
15
- // Node/CommonJS
16
- factory(require('jquery'));
17
- } else {
18
- // Browser globals
19
- factory(window.jQuery);
20
- }
21
- })(function ($) {
22
- ('use strict');
23
-
24
- $.ui = $.ui || {};
25
-
26
- $.ui.version = '1.12.1';
27
-
28
- /*!
29
- * jQuery UI Widget 1.12.1
30
- * http://jqueryui.com
31
- *
32
- * Copyright jQuery Foundation and other contributors
33
- * Released under the MIT license.
34
- * http://jquery.org/license
35
- */
36
-
37
- //>>label: Widget
38
- //>>group: Core
39
- //>>description: Provides a factory for creating stateful widgets with a common API.
40
- //>>docs: http://api.jqueryui.com/jQuery.widget/
41
- //>>demos: http://jqueryui.com/widget/
42
-
43
- // Support: jQuery 1.9.x or older
44
- // $.expr[ ":" ] is deprecated.
45
- if (!$.expr.pseudos) {
46
- $.expr.pseudos = $.expr[':'];
47
- }
48
-
49
- // Support: jQuery 1.11.x or older
50
- // $.unique has been renamed to $.uniqueSort
51
- if (!$.uniqueSort) {
52
- $.uniqueSort = $.unique;
53
- }
54
-
55
- var widgetUuid = 0;
56
- var widgetHasOwnProperty = Array.prototype.hasOwnProperty;
57
- var widgetSlice = Array.prototype.slice;
58
-
59
- $.cleanData = (function (orig) {
60
- return function (elems) {
61
- var events, elem, i;
62
- // eslint-disable-next-line eqeqeq
63
- for (i = 0; (elem = elems[i]) != null; i++) {
64
- // Only trigger remove when necessary to save time
65
- events = $._data(elem, 'events');
66
- if (events && events.remove) {
67
- $(elem).triggerHandler('remove');
68
- }
69
- }
70
- orig(elems);
71
- };
72
- })($.cleanData);
73
-
74
- $.widget = function (name, base, prototype) {
75
- var existingConstructor, constructor, basePrototype;
76
-
77
- // ProxiedPrototype allows the provided prototype to remain unmodified
78
- // so that it can be used as a mixin for multiple widgets (#8876)
79
- var proxiedPrototype = {};
80
-
81
- var namespace = name.split('.')[0];
82
- name = name.split('.')[1];
83
- var fullName = namespace + '-' + name;
84
-
85
- if (!prototype) {
86
- prototype = base;
87
- base = $.Widget;
88
- }
89
-
90
- if ($.isArray(prototype)) {
91
- prototype = $.extend.apply(null, [{}].concat(prototype));
92
- }
93
-
94
- // Create selector for plugin
95
- $.expr.pseudos[fullName.toLowerCase()] = function (elem) {
96
- return !!$.data(elem, fullName);
97
- };
98
-
99
- $[namespace] = $[namespace] || {};
100
- existingConstructor = $[namespace][name];
101
- constructor = $[namespace][name] = function (options, element) {
102
- // Allow instantiation without "new" keyword
103
- if (!this._createWidget) {
104
- return new constructor(options, element);
105
- }
106
-
107
- // Allow instantiation without initializing for simple inheritance
108
- // must use "new" keyword (the code above always passes args)
109
- if (arguments.length) {
110
- this._createWidget(options, element);
111
- }
112
- };
113
-
114
- // Extend with the existing constructor to carry over any static properties
115
- $.extend(constructor, existingConstructor, {
116
- version: prototype.version,
117
-
118
- // Copy the object used to create the prototype in case we need to
119
- // redefine the widget later
120
- _proto: $.extend({}, prototype),
121
-
122
- // Track widgets that inherit from this widget in case this widget is
123
- // redefined after a widget inherits from it
124
- _childConstructors: []
125
- });
126
-
127
- basePrototype = new base();
128
-
129
- // We need to make the options hash a property directly on the new instance
130
- // otherwise we'll modify the options hash on the prototype that we're
131
- // inheriting from
132
- basePrototype.options = $.widget.extend({}, basePrototype.options);
133
- $.each(prototype, function (prop, value) {
134
- if (!$.isFunction(value)) {
135
- proxiedPrototype[prop] = value;
136
- return;
137
- }
138
- proxiedPrototype[prop] = (function () {
139
- function _super() {
140
- return base.prototype[prop].apply(this, arguments);
141
- }
142
-
143
- function _superApply(args) {
144
- return base.prototype[prop].apply(this, args);
145
- }
146
-
147
- return function () {
148
- var __super = this._super;
149
- var __superApply = this._superApply;
150
- var returnValue;
151
-
152
- this._super = _super;
153
- this._superApply = _superApply;
154
-
155
- returnValue = value.apply(this, arguments);
156
-
157
- this._super = __super;
158
- this._superApply = __superApply;
159
-
160
- return returnValue;
161
- };
162
- })();
163
- });
164
- constructor.prototype = $.widget.extend(
165
- basePrototype,
166
- {
167
- // TODO: remove support for widgetEventPrefix
168
- // always use the name + a colon as the prefix, e.g., draggable:start
169
- // don't prefix for widgets that aren't DOM-based
170
- widgetEventPrefix: existingConstructor
171
- ? basePrototype.widgetEventPrefix || name
172
- : name
173
- },
174
- proxiedPrototype,
175
- {
176
- constructor: constructor,
177
- namespace: namespace,
178
- widgetName: name,
179
- widgetFullName: fullName
180
- }
181
- );
182
-
183
- // If this widget is being redefined then we need to find all widgets that
184
- // are inheriting from it and redefine all of them so that they inherit from
185
- // the new version of this widget. We're essentially trying to replace one
186
- // level in the prototype chain.
187
- if (existingConstructor) {
188
- $.each(existingConstructor._childConstructors, function (i, child) {
189
- var childPrototype = child.prototype;
190
-
191
- // Redefine the child widget using the same prototype that was
192
- // originally used, but inherit from the new version of the base
193
- $.widget(
194
- childPrototype.namespace + '.' + childPrototype.widgetName,
195
- constructor,
196
- child._proto
197
- );
198
- });
199
-
200
- // Remove the list of existing child constructors from the old constructor
201
- // so the old child constructors can be garbage collected
202
- delete existingConstructor._childConstructors;
203
- } else {
204
- base._childConstructors.push(constructor);
205
- }
206
-
207
- $.widget.bridge(name, constructor);
208
-
209
- return constructor;
210
- };
211
-
212
- $.widget.extend = function (target) {
213
- var input = widgetSlice.call(arguments, 1);
214
- var inputIndex = 0;
215
- var inputLength = input.length;
216
- var key;
217
- var value;
218
-
219
- for (; inputIndex < inputLength; inputIndex++) {
220
- for (key in input[inputIndex]) {
221
- value = input[inputIndex][key];
222
- if (
223
- widgetHasOwnProperty.call(input[inputIndex], key) &&
224
- value !== undefined
225
- ) {
226
- // Clone objects
227
- if ($.isPlainObject(value)) {
228
- target[key] = $.isPlainObject(target[key])
229
- ? $.widget.extend({}, target[key], value)
230
- : // Don't extend strings, arrays, etc. with objects
231
- $.widget.extend({}, value);
232
-
233
- // Copy everything else by reference
234
- } else {
235
- target[key] = value;
236
- }
237
- }
238
- }
239
- }
240
- return target;
241
- };
242
-
243
- $.widget.bridge = function (name, object) {
244
- var fullName = object.prototype.widgetFullName || name;
245
- $.fn[name] = function (options) {
246
- var isMethodCall = typeof options === 'string';
247
- var args = widgetSlice.call(arguments, 1);
248
- var returnValue = this;
249
-
250
- if (isMethodCall) {
251
- // If this is an empty collection, we need to have the instance method
252
- // return undefined instead of the jQuery instance
253
- if (!this.length && options === 'instance') {
254
- returnValue = undefined;
255
- } else {
256
- this.each(function () {
257
- var methodValue;
258
- var instance = $.data(this, fullName);
259
-
260
- if (options === 'instance') {
261
- returnValue = instance;
262
- return false;
263
- }
264
-
265
- if (!instance) {
266
- return $.error(
267
- 'cannot call methods on ' +
268
- name +
269
- ' prior to initialization; ' +
270
- "attempted to call method '" +
271
- options +
272
- "'"
273
- );
274
- }
275
-
276
- if (!$.isFunction(instance[options]) || options.charAt(0) === '_') {
277
- return $.error(
278
- "no such method '" +
279
- options +
280
- "' for " +
281
- name +
282
- ' widget instance'
283
- );
284
- }
285
-
286
- methodValue = instance[options].apply(instance, args);
287
-
288
- if (methodValue !== instance && methodValue !== undefined) {
289
- returnValue =
290
- methodValue && methodValue.jquery
291
- ? returnValue.pushStack(methodValue.get())
292
- : methodValue;
293
- return false;
294
- }
295
- });
296
- }
297
- } else {
298
- // Allow multiple hashes to be passed on init
299
- if (args.length) {
300
- options = $.widget.extend.apply(null, [options].concat(args));
301
- }
302
-
303
- this.each(function () {
304
- var instance = $.data(this, fullName);
305
- if (instance) {
306
- instance.option(options || {});
307
- if (instance._init) {
308
- instance._init();
309
- }
310
- } else {
311
- $.data(this, fullName, new object(options, this));
312
- }
313
- });
314
- }
315
-
316
- return returnValue;
317
- };
318
- };
319
-
320
- $.Widget = function (/* options, element */) {};
321
- $.Widget._childConstructors = [];
322
-
323
- $.Widget.prototype = {
324
- widgetName: 'widget',
325
- widgetEventPrefix: '',
326
- defaultElement: '<div>',
327
-
328
- options: {
329
- classes: {},
330
- disabled: false,
331
-
332
- // Callbacks
333
- create: null
334
- },
335
-
336
- _createWidget: function (options, element) {
337
- element = $(element || this.defaultElement || this)[0];
338
- this.element = $(element);
339
- this.uuid = widgetUuid++;
340
- this.eventNamespace = '.' + this.widgetName + this.uuid;
341
-
342
- this.bindings = $();
343
- this.hoverable = $();
344
- this.focusable = $();
345
- this.classesElementLookup = {};
346
-
347
- if (element !== this) {
348
- $.data(element, this.widgetFullName, this);
349
- this._on(true, this.element, {
350
- remove: function (event) {
351
- if (event.target === element) {
352
- this.destroy();
353
- }
354
- }
355
- });
356
- this.document = $(
357
- element.style
358
- ? // Element within the document
359
- element.ownerDocument
360
- : // Element is window or document
361
- element.document || element
362
- );
363
- this.window = $(
364
- this.document[0].defaultView || this.document[0].parentWindow
365
- );
366
- }
367
-
368
- this.options = $.widget.extend(
369
- {},
370
- this.options,
371
- this._getCreateOptions(),
372
- options
373
- );
374
-
375
- this._create();
376
-
377
- if (this.options.disabled) {
378
- this._setOptionDisabled(this.options.disabled);
379
- }
380
-
381
- this._trigger('create', null, this._getCreateEventData());
382
- this._init();
383
- },
384
-
385
- _getCreateOptions: function () {
386
- return {};
387
- },
388
-
389
- _getCreateEventData: $.noop,
390
-
391
- _create: $.noop,
392
-
393
- _init: $.noop,
394
-
395
- destroy: function () {
396
- var that = this;
397
-
398
- this._destroy();
399
- $.each(this.classesElementLookup, function (key, value) {
400
- that._removeClass(value, key);
401
- });
402
-
403
- // We can probably remove the unbind calls in 2.0
404
- // all event bindings should go through this._on()
405
- this.element.off(this.eventNamespace).removeData(this.widgetFullName);
406
- this.widget().off(this.eventNamespace).removeAttr('aria-disabled');
407
-
408
- // Clean up events and states
409
- this.bindings.off(this.eventNamespace);
410
- },
411
-
412
- _destroy: $.noop,
413
-
414
- widget: function () {
415
- return this.element;
416
- },
417
-
418
- option: function (key, value) {
419
- var options = key;
420
- var parts;
421
- var curOption;
422
- var i;
423
-
424
- if (arguments.length === 0) {
425
- // Don't return a reference to the internal hash
426
- return $.widget.extend({}, this.options);
427
- }
428
-
429
- if (typeof key === 'string') {
430
- // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
431
- options = {};
432
- parts = key.split('.');
433
- key = parts.shift();
434
- if (parts.length) {
435
- curOption = options[key] = $.widget.extend({}, this.options[key]);
436
- for (i = 0; i < parts.length - 1; i++) {
437
- curOption[parts[i]] = curOption[parts[i]] || {};
438
- curOption = curOption[parts[i]];
439
- }
440
- key = parts.pop();
441
- if (arguments.length === 1) {
442
- return curOption[key] === undefined ? null : curOption[key];
443
- }
444
- curOption[key] = value;
445
- } else {
446
- if (arguments.length === 1) {
447
- return this.options[key] === undefined ? null : this.options[key];
448
- }
449
- options[key] = value;
450
- }
451
- }
452
-
453
- this._setOptions(options);
454
-
455
- return this;
456
- },
457
-
458
- _setOptions: function (options) {
459
- var key;
460
-
461
- for (key in options) {
462
- this._setOption(key, options[key]);
463
- }
464
-
465
- return this;
466
- },
467
-
468
- _setOption: function (key, value) {
469
- if (key === 'classes') {
470
- this._setOptionClasses(value);
471
- }
472
-
473
- this.options[key] = value;
474
-
475
- if (key === 'disabled') {
476
- this._setOptionDisabled(value);
477
- }
478
-
479
- return this;
480
- },
481
-
482
- _setOptionClasses: function (value) {
483
- var classKey, elements, currentElements;
484
-
485
- for (classKey in value) {
486
- currentElements = this.classesElementLookup[classKey];
487
- if (
488
- value[classKey] === this.options.classes[classKey] ||
489
- !currentElements ||
490
- !currentElements.length
491
- ) {
492
- continue;
493
- }
494
-
495
- // We are doing this to create a new jQuery object because the _removeClass() call
496
- // on the next line is going to destroy the reference to the current elements being
497
- // tracked. We need to save a copy of this collection so that we can add the new classes
498
- // below.
499
- elements = $(currentElements.get());
500
- this._removeClass(currentElements, classKey);
501
-
502
- // We don't use _addClass() here, because that uses this.options.classes
503
- // for generating the string of classes. We want to use the value passed in from
504
- // _setOption(), this is the new value of the classes option which was passed to
505
- // _setOption(). We pass this value directly to _classes().
506
- elements.addClass(
507
- this._classes({
508
- element: elements,
509
- keys: classKey,
510
- classes: value,
511
- add: true
512
- })
513
- );
514
- }
515
- },
516
-
517
- _setOptionDisabled: function (value) {
518
- this._toggleClass(
519
- this.widget(),
520
- this.widgetFullName + '-disabled',
521
- null,
522
- !!value
523
- );
524
-
525
- // If the widget is becoming disabled, then nothing is interactive
526
- if (value) {
527
- this._removeClass(this.hoverable, null, 'ui-state-hover');
528
- this._removeClass(this.focusable, null, 'ui-state-focus');
529
- }
530
- },
531
-
532
- enable: function () {
533
- return this._setOptions({ disabled: false });
534
- },
535
-
536
- disable: function () {
537
- return this._setOptions({ disabled: true });
538
- },
539
-
540
- _classes: function (options) {
541
- var full = [];
542
- var that = this;
543
-
544
- options = $.extend(
545
- {
546
- element: this.element,
547
- classes: this.options.classes || {}
548
- },
549
- options
550
- );
551
-
552
- function bindRemoveEvent() {
553
- options.element.each(function (_, element) {
554
- var isTracked = $.map(that.classesElementLookup, function (elements) {
555
- return elements;
556
- }).some(function (elements) {
557
- return elements.is(element);
558
- });
559
-
560
- if (!isTracked) {
561
- that._on($(element), {
562
- remove: '_untrackClassesElement'
563
- });
564
- }
565
- });
566
- }
567
-
568
- function processClassString(classes, checkOption) {
569
- var current, i;
570
- for (i = 0; i < classes.length; i++) {
571
- current = that.classesElementLookup[classes[i]] || $();
572
- if (options.add) {
573
- bindRemoveEvent();
574
- current = $(
575
- $.uniqueSort(current.get().concat(options.element.get()))
576
- );
577
- } else {
578
- current = $(current.not(options.element).get());
579
- }
580
- that.classesElementLookup[classes[i]] = current;
581
- full.push(classes[i]);
582
- if (checkOption && options.classes[classes[i]]) {
583
- full.push(options.classes[classes[i]]);
584
- }
585
- }
586
- }
587
-
588
- if (options.keys) {
589
- processClassString(options.keys.match(/\S+/g) || [], true);
590
- }
591
- if (options.extra) {
592
- processClassString(options.extra.match(/\S+/g) || []);
593
- }
594
-
595
- return full.join(' ');
596
- },
597
-
598
- _untrackClassesElement: function (event) {
599
- var that = this;
600
- $.each(that.classesElementLookup, function (key, value) {
601
- if ($.inArray(event.target, value) !== -1) {
602
- that.classesElementLookup[key] = $(value.not(event.target).get());
603
- }
604
- });
605
-
606
- this._off($(event.target));
607
- },
608
-
609
- _removeClass: function (element, keys, extra) {
610
- return this._toggleClass(element, keys, extra, false);
611
- },
612
-
613
- _addClass: function (element, keys, extra) {
614
- return this._toggleClass(element, keys, extra, true);
615
- },
616
-
617
- _toggleClass: function (element, keys, extra, add) {
618
- add = typeof add === 'boolean' ? add : extra;
619
- var shift = typeof element === 'string' || element === null,
620
- options = {
621
- extra: shift ? keys : extra,
622
- keys: shift ? element : keys,
623
- element: shift ? this.element : element,
624
- add: add
625
- };
626
- options.element.toggleClass(this._classes(options), add);
627
- return this;
628
- },
629
-
630
- _on: function (suppressDisabledCheck, element, handlers) {
631
- var delegateElement;
632
- var instance = this;
633
-
634
- // No suppressDisabledCheck flag, shuffle arguments
635
- if (typeof suppressDisabledCheck !== 'boolean') {
636
- handlers = element;
637
- element = suppressDisabledCheck;
638
- suppressDisabledCheck = false;
639
- }
640
-
641
- // No element argument, shuffle and use this.element
642
- if (!handlers) {
643
- handlers = element;
644
- element = this.element;
645
- delegateElement = this.widget();
646
- } else {
647
- element = delegateElement = $(element);
648
- this.bindings = this.bindings.add(element);
649
- }
650
-
651
- $.each(handlers, function (event, handler) {
652
- function handlerProxy() {
653
- // Allow widgets to customize the disabled handling
654
- // - disabled as an array instead of boolean
655
- // - disabled class as method for disabling individual parts
656
- if (
657
- !suppressDisabledCheck &&
658
- (instance.options.disabled === true ||
659
- $(this).hasClass('ui-state-disabled'))
660
- ) {
661
- return;
662
- }
663
- return (
664
- typeof handler === 'string' ? instance[handler] : handler
665
- ).apply(instance, arguments);
666
- }
667
-
668
- // Copy the guid so direct unbinding works
669
- if (typeof handler !== 'string') {
670
- handlerProxy.guid = handler.guid =
671
- handler.guid || handlerProxy.guid || $.guid++;
672
- }
673
-
674
- var match = event.match(/^([\w:-]*)\s*(.*)$/);
675
- var eventName = match[1] + instance.eventNamespace;
676
- var selector = match[2];
677
-
678
- if (selector) {
679
- delegateElement.on(eventName, selector, handlerProxy);
680
- } else {
681
- element.on(eventName, handlerProxy);
682
- }
683
- });
684
- },
685
-
686
- _off: function (element, eventName) {
687
- eventName =
688
- (eventName || '').split(' ').join(this.eventNamespace + ' ') +
689
- this.eventNamespace;
690
- element.off(eventName);
691
-
692
- // Clear the stack to avoid memory leaks (#10056)
693
- this.bindings = $(this.bindings.not(element).get());
694
- this.focusable = $(this.focusable.not(element).get());
695
- this.hoverable = $(this.hoverable.not(element).get());
696
- },
697
-
698
- _delay: function (handler, delay) {
699
- var instance = this;
700
- function handlerProxy() {
701
- return (
702
- typeof handler === 'string' ? instance[handler] : handler
703
- ).apply(instance, arguments);
704
- }
705
- return setTimeout(handlerProxy, delay || 0);
706
- },
707
-
708
- _hoverable: function (element) {
709
- this.hoverable = this.hoverable.add(element);
710
- this._on(element, {
711
- mouseenter: function (event) {
712
- this._addClass($(event.currentTarget), null, 'ui-state-hover');
713
- },
714
- mouseleave: function (event) {
715
- this._removeClass($(event.currentTarget), null, 'ui-state-hover');
716
- }
717
- });
718
- },
719
-
720
- _focusable: function (element) {
721
- this.focusable = this.focusable.add(element);
722
- this._on(element, {
723
- focusin: function (event) {
724
- this._addClass($(event.currentTarget), null, 'ui-state-focus');
725
- },
726
- focusout: function (event) {
727
- this._removeClass($(event.currentTarget), null, 'ui-state-focus');
728
- }
729
- });
730
- },
731
-
732
- _trigger: function (type, event, data) {
733
- var prop, orig;
734
- var callback = this.options[type];
735
-
736
- data = data || {};
737
- event = $.Event(event);
738
- event.type = (
739
- type === this.widgetEventPrefix ? type : this.widgetEventPrefix + type
740
- ).toLowerCase();
741
-
742
- // The original event may come from any element
743
- // so we need to reset the target on the new event
744
- event.target = this.element[0];
745
-
746
- // Copy original event properties over to the new event
747
- orig = event.originalEvent;
748
- if (orig) {
749
- for (prop in orig) {
750
- if (!(prop in event)) {
751
- event[prop] = orig[prop];
752
- }
753
- }
754
- }
755
-
756
- this.element.trigger(event, data);
757
- return !(
758
- ($.isFunction(callback) &&
759
- callback.apply(this.element[0], [event].concat(data)) === false) ||
760
- event.isDefaultPrevented()
761
- );
762
- }
763
- };
764
-
765
- $.each({ show: 'fadeIn', hide: 'fadeOut' }, function (method, defaultEffect) {
766
- $.Widget.prototype['_' + method] = function (element, options, callback) {
767
- if (typeof options === 'string') {
768
- options = { effect: options };
769
- }
770
-
771
- var hasOptions;
772
- var effectName = !options
773
- ? method
774
- : options === true || typeof options === 'number'
775
- ? defaultEffect
776
- : options.effect || defaultEffect;
777
-
778
- options = options || {};
779
- if (typeof options === 'number') {
780
- options = { duration: options };
781
- }
782
-
783
- hasOptions = !$.isEmptyObject(options);
784
- options.complete = callback;
785
-
786
- if (options.delay) {
787
- element.delay(options.delay);
788
- }
789
-
790
- if (hasOptions && $.effects && $.effects.effect[effectName]) {
791
- element[method](options);
792
- } else if (effectName !== method && element[effectName]) {
793
- element[effectName](options.duration, options.easing, callback);
794
- } else {
795
- element.queue(function (next) {
796
- $(this)[method]();
797
- if (callback) {
798
- callback.call(element[0]);
799
- }
800
- next();
801
- });
802
- }
803
- };
804
- });
805
- });