Version Description
(2020-04-18) = * Fixed: accidentally packed the entire jQuery library in scripts.js * Cleaned up some console.logs that was still hanging around in the code.
Download this release
Release Info
Developer | Jules Colle |
Plugin | Conditional Fields for Contact Form 7 |
Version | 1.8.6 |
Comparing to | |
See all releases |
Code changes from version 1.8.5 to 1.8.6
- contact-form-7-conditional-fields.php +1 -1
- init.php +1 -1
- js/scripts.js +56 -9542
- js/scripts.js.map +0 -1
contact-form-7-conditional-fields.php
CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Contact Form 7 Conditional Fields
|
|
4 |
Plugin URI: http://bdwm.be/
|
5 |
Description: Adds support for conditional fields to Contact Form 7. This plugin depends on Contact Form 7.
|
6 |
Author: Jules Colle
|
7 |
-
Version: 1.8.
|
8 |
Author URI: http://bdwm.be/
|
9 |
*/
|
10 |
|
4 |
Plugin URI: http://bdwm.be/
|
5 |
Description: Adds support for conditional fields to Contact Form 7. This plugin depends on Contact Form 7.
|
6 |
Author: Jules Colle
|
7 |
+
Version: 1.8.6
|
8 |
Author URI: http://bdwm.be/
|
9 |
*/
|
10 |
|
init.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if (!defined('WPCF7CF_VERSION')) define( 'WPCF7CF_VERSION', '1.8.
|
4 |
if (!defined('WPCF7CF_REQUIRED_WP_VERSION')) define( 'WPCF7CF_REQUIRED_WP_VERSION', '4.1' );
|
5 |
if (!defined('WPCF7CF_PLUGIN')) define( 'WPCF7CF_PLUGIN', __FILE__ );
|
6 |
if (!defined('WPCF7CF_PLUGIN_BASENAME')) define( 'WPCF7CF_PLUGIN_BASENAME', plugin_basename( WPCF7CF_PLUGIN ) );
|
1 |
<?php
|
2 |
|
3 |
+
if (!defined('WPCF7CF_VERSION')) define( 'WPCF7CF_VERSION', '1.8.6' );
|
4 |
if (!defined('WPCF7CF_REQUIRED_WP_VERSION')) define( 'WPCF7CF_REQUIRED_WP_VERSION', '4.1' );
|
5 |
if (!defined('WPCF7CF_PLUGIN')) define( 'WPCF7CF_PLUGIN', __FILE__ );
|
6 |
if (!defined('WPCF7CF_PLUGIN_BASENAME')) define( 'WPCF7CF_PLUGIN_BASENAME', plugin_basename( WPCF7CF_PLUGIN ) );
|
js/scripts.js
CHANGED
@@ -99,9 +99,6 @@ __webpack_require__.r(__webpack_exports__);
|
|
99 |
/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
|
100 |
/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js");
|
101 |
/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);
|
102 |
-
/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");
|
103 |
-
/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_2__);
|
104 |
-
|
105 |
|
106 |
|
107 |
|
@@ -110,7 +107,6 @@ var cf7signature_resized = 0; // for compatibility with contact-form-7-signature
|
|
110 |
|
111 |
var wpcf7cf_timeout;
|
112 |
var wpcf7cf_change_time_ms = window.wpcf7cf_running_tests ? 0 : 100;
|
113 |
-
console.log(wpcf7cf_change_time_ms);
|
114 |
var wpcf7cf_show_animation = {
|
115 |
"height": "show",
|
116 |
"marginTop": "show",
|
@@ -177,7 +173,7 @@ var Wpcf7cfForm = function Wpcf7cfForm($form) {
|
|
177 |
|
178 |
form.initial_conditions = form.conditions;
|
179 |
form.settings = form_options['settings'];
|
180 |
-
form.$groups =
|
181 |
|
182 |
form.repeaters = [];
|
183 |
form.multistep = null;
|
@@ -206,13 +202,13 @@ var Wpcf7cfForm = function Wpcf7cfForm($form) {
|
|
206 |
}, 200);
|
207 |
}); // PRO ONLY
|
208 |
|
209 |
-
|
210 |
-
form.repeaters.push(new Wpcf7cfRepeater(
|
211 |
});
|
212 |
form.$input_repeaters.val(JSON.stringify(form.repeaters.map(function (item) {
|
213 |
return item.params.$repeater.id;
|
214 |
})));
|
215 |
-
var $multistep =
|
216 |
|
217 |
if ($multistep.length) {
|
218 |
form.multistep = new Wpcf7cfMultistep($multistep, form); // window.wpcf7cf.updateMultistepState(form.multistep);
|
@@ -242,8 +238,8 @@ Wpcf7cfForm.prototype.displayFields = function () {
|
|
242 |
if (cf7signature_resized === 0 && typeof signatures !== 'undefined' && signatures.constructor === Array && signatures.length > 0) {
|
243 |
for (var i = 0; i < signatures.length; i++) {
|
244 |
if (signatures[i].canvas.width === 0) {
|
245 |
-
var $sig_canvas =
|
246 |
-
var $sig_wrap =
|
247 |
$sig_canvas.eq(i).attr('width', $sig_wrap.width());
|
248 |
$sig_canvas.eq(i).attr('height', $sig_wrap.height());
|
249 |
cf7signature_resized = 1;
|
@@ -258,14 +254,14 @@ Wpcf7cfForm.prototype.displayFields = function () {
|
|
258 |
var show_group = window.wpcf7cf.should_group_be_shown(condition, form.$form);
|
259 |
|
260 |
if (show_group) {
|
261 |
-
|
262 |
}
|
263 |
}
|
264 |
|
265 |
var animation_intime = wpcf7cf_settings.animation_intime;
|
266 |
var animation_outtime = wpcf7cf_settings.animation_outtime;
|
267 |
form.$groups.each(function (index) {
|
268 |
-
var $group =
|
269 |
if ($group.is(':animated')) $group.finish(); // stop any current animations on the group
|
270 |
|
271 |
if ($group.css('display') === 'none' && !$group.hasClass('wpcf7cf-hidden')) {
|
@@ -276,20 +272,20 @@ Wpcf7cfForm.prototype.displayFields = function () {
|
|
276 |
}
|
277 |
} else if ($group.css('display') !== 'none' && $group.hasClass('wpcf7cf-hidden')) {
|
278 |
if ($group.attr('data-clear_on_hide') !== undefined) {
|
279 |
-
var $inputs =
|
280 |
$inputs.each(function () {
|
281 |
-
var $this =
|
282 |
$this.val(this.defaultValue);
|
283 |
$this.prop('checked', this.defaultChecked);
|
284 |
});
|
285 |
-
|
286 |
this.selected = this.defaultSelected;
|
287 |
});
|
288 |
-
|
289 |
-
var $select =
|
290 |
|
291 |
if ($select.val() === null) {
|
292 |
-
$select.val(
|
293 |
}
|
294 |
});
|
295 |
$inputs.change(); //display_fields();
|
@@ -307,14 +303,14 @@ Wpcf7cfForm.prototype.displayFields = function () {
|
|
307 |
};
|
308 |
|
309 |
Wpcf7cfForm.prototype.updateSummaryFields = function () {
|
310 |
-
var $summary =
|
311 |
if ($summary.length == 0 || !$summary.is(':visible')) return;
|
312 |
var fd = new FormData();
|
313 |
var formdata = this.$form.serializeArray();
|
314 |
-
|
315 |
fd.append(input.name, input.value);
|
316 |
});
|
317 |
-
|
318 |
url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_get_summary',
|
319 |
type: 'POST',
|
320 |
data: fd,
|
@@ -333,12 +329,12 @@ Wpcf7cfForm.prototype.updateHiddenFields = function () {
|
|
333 |
var hidden_groups = [];
|
334 |
var visible_groups = [];
|
335 |
form.$groups.each(function () {
|
336 |
-
var $this =
|
337 |
|
338 |
if ($this.hasClass('wpcf7cf-hidden')) {
|
339 |
hidden_groups.push($this.data('id'));
|
340 |
$this.find('input,select,textarea').each(function () {
|
341 |
-
hidden_fields.push(
|
342 |
});
|
343 |
} else {
|
344 |
visible_groups.push($this.data('id'));
|
@@ -362,7 +358,7 @@ Wpcf7cfForm.prototype.updateGroups = function () {
|
|
362 |
Wpcf7cfForm.prototype.updateEventListeners = function () {
|
363 |
var form = this; // monitor input changes, and call display_fields() if something has changed
|
364 |
|
365 |
-
|
366 |
var form = e.data;
|
367 |
clearTimeout(wpcf7cf_timeout);
|
368 |
wpcf7cf_timeout = setTimeout(function () {
|
@@ -370,8 +366,8 @@ Wpcf7cfForm.prototype.updateEventListeners = function () {
|
|
370 |
}, wpcf7cf_change_time_ms);
|
371 |
}); // PRO ONLY
|
372 |
|
373 |
-
|
374 |
-
var $this =
|
375 |
|
376 |
if ($this.text() === $this.data('val-1')) {
|
377 |
$this.text($this.data('val-2'));
|
@@ -385,7 +381,7 @@ Wpcf7cfForm.prototype.updateEventListeners = function () {
|
|
385 |
|
386 |
|
387 |
function Wpcf7cfRepeater($repeater, form) {
|
388 |
-
var $ =
|
389 |
var repeater = this;
|
390 |
var wpcf7cf_settings = form.settings;
|
391 |
repeater.form = form;
|
@@ -400,13 +396,13 @@ function Wpcf7cfRepeater($repeater, form) {
|
|
400 |
var $repeater_controls = $repeater.children('.wpcf7cf_repeater_controls').eq(0);
|
401 |
var $repeater_sub_clone = $repeater_sub.clone();
|
402 |
$repeater_sub_clone.find('.wpcf7cf_repeater_sub').addBack('.wpcf7cf_repeater_sub').each(function () {
|
403 |
-
var $this =
|
404 |
var prev_suffix = $this.attr('data-repeater_sub_suffix');
|
405 |
var new_suffix = prev_suffix + '__{{repeater_sub_suffix}}';
|
406 |
$this.attr('data-repeater_sub_suffix', new_suffix);
|
407 |
});
|
408 |
$repeater_sub_clone.find('[name]').each(function () {
|
409 |
-
var $this =
|
410 |
var prev_name = $this.attr('name');
|
411 |
var orig_name = $this.attr('data-orig_name') != null ? $this.attr('data-orig_name') : prev_name;
|
412 |
var new_name = prev_name + '__{{repeater_sub_suffix}}';
|
@@ -420,7 +416,7 @@ function Wpcf7cfRepeater($repeater, form) {
|
|
420 |
$this.closest('.wpcf7-form-control-wrap').addClass(new_name);
|
421 |
});
|
422 |
$repeater_sub_clone.find('.wpcf7cf_repeater,[data-class="wpcf7cf_group"]').each(function () {
|
423 |
-
var $this =
|
424 |
var prev_data_id = $this.attr('data-id');
|
425 |
var orig_data_id = $this.attr('data-orig_data_id') != null ? $this.attr('data-orig_data_id') : prev_data_id;
|
426 |
var new_data_id = prev_data_id + '__{{repeater_sub_suffix}}';
|
@@ -434,7 +430,7 @@ function Wpcf7cfRepeater($repeater, form) {
|
|
434 |
$this.closest('.wpcf7-form-control-wrap').addClass(new_data_id);
|
435 |
});
|
436 |
$repeater_sub_clone.find('[id]').each(function () {
|
437 |
-
var $this =
|
438 |
var prev_id = $this.attr('id');
|
439 |
var orig_id = $this.attr('data-orig_id') != null ? $this.attr('data-orig_id') : prev_id;
|
440 |
var new_id = prev_id + '__{{repeater_sub_suffix}}';
|
@@ -443,7 +439,7 @@ function Wpcf7cfRepeater($repeater, form) {
|
|
443 |
$this.closest('.wpcf7-form-control-wrap').addClass(new_id);
|
444 |
});
|
445 |
$repeater_sub_clone.find('[for]').each(function () {
|
446 |
-
var $this =
|
447 |
var prev_for = $this.attr('for');
|
448 |
var orig_for = $this.attr('data-orig_for') != null ? $this.attr('data-orig_for') : prev_for;
|
449 |
var new_for = prev_for + '__{{repeater_sub_suffix}}';
|
@@ -473,7 +469,7 @@ function Wpcf7cfRepeater($repeater, form) {
|
|
473 |
var repeater = e.data;
|
474 |
repeater.updateSubs(params.$repeater.num_subs - 1);
|
475 |
});
|
476 |
-
|
477 |
|
478 |
repeater.updateSubs($repeater.initial_subs);
|
479 |
}
|
@@ -516,7 +512,7 @@ Wpcf7cfRepeater.prototype.updateSubs = function (subs_to_show) {
|
|
516 |
};
|
517 |
|
518 |
Wpcf7cfRepeater.prototype.addSubs = function (subs_to_add) {
|
519 |
-
var $ =
|
520 |
var params = this.params;
|
521 |
var repeater = this;
|
522 |
var form = repeater.form;
|
@@ -530,11 +526,11 @@ Wpcf7cfRepeater.prototype.addSubs = function (subs_to_add) {
|
|
530 |
html_str += params.repeater_sub_html.replace(/\{\{repeater_sub_suffix\}\}/g, sub_suffix).replace(new RegExp('\{\{' + $repeater.orig_id + '_index\}\}', 'g'), sub_suffix);
|
531 |
}
|
532 |
|
533 |
-
var $html =
|
534 |
|
535 |
$html.hide().insertBefore($repeater_controls).animate(wpcf7cf_show_animation, params.wpcf7cf_settings.animation_intime).trigger('wpcf7cf_repeater_added');
|
536 |
-
|
537 |
-
form.repeaters.push(new Wpcf7cfRepeater(
|
538 |
});
|
539 |
form.$input_repeaters.val(JSON.stringify(form.repeaters.map(function (item) {
|
540 |
return item.params.$repeater.id;
|
@@ -558,14 +554,14 @@ Wpcf7cfRepeater.prototype.addSubs = function (subs_to_add) {
|
|
558 |
};
|
559 |
|
560 |
Wpcf7cfRepeater.prototype.removeSubs = function (num_subs) {
|
561 |
-
var $ =
|
562 |
var params = this.params;
|
563 |
var form = this.form;
|
564 |
params.$repeater.num_subs -= num_subs;
|
565 |
-
|
566 |
duration: params.wpcf7cf_settings.animation_intime,
|
567 |
done: function done() {
|
568 |
-
var $this =
|
569 |
|
570 |
$this.remove();
|
571 |
params.$repeater.trigger('wpcf7cf_repeater_removed');
|
@@ -632,9 +628,9 @@ function Wpcf7cfMultistep($multistep, form) {
|
|
632 |
multistep.moveToStep(1);
|
633 |
}
|
634 |
|
635 |
-
|
636 |
if (xhr.hasOwnProperty('responseJSON') && xhr.responseJSON != null && xhr.responseJSON.hasOwnProperty('status') && xhr.responseJSON.hasOwnProperty('into') && xhr.responseJSON.status === "mail_success") {
|
637 |
-
|
638 |
}
|
639 |
});
|
640 |
|
@@ -646,17 +642,17 @@ Wpcf7cfMultistep.prototype.validateStep = function (step_index) {
|
|
646 |
return new Promise(function (resolve) {
|
647 |
var fd = new FormData(); // Make sure to add file fields to FormData
|
648 |
|
649 |
-
|
650 |
if (!el.files.length) return false;
|
651 |
var file = el.files[0];
|
652 |
var fieldName = el.name;
|
653 |
fd.append(fieldName, file);
|
654 |
});
|
655 |
var formdata = $form.serializeArray();
|
656 |
-
|
657 |
fd.append(input.name, input.value);
|
658 |
});
|
659 |
-
|
660 |
url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_validate_step',
|
661 |
type: 'POST',
|
662 |
data: fd,
|
@@ -681,10 +677,10 @@ Wpcf7cfMultistep.prototype.validateStep = function (step_index) {
|
|
681 |
|
682 |
if (!json.success) {
|
683 |
var checkError = 0;
|
684 |
-
|
685 |
if ($multistep.find('input[name="' + index + '"]').length || $multistep.find('input[name="' + index + '[]"]').length || $multistep.find('select[name="' + index + '"]').length || $multistep.find('select[name="' + index + '[]"]').length || $multistep.find('textarea[name="' + index + '"]').length || $multistep.find('textarea[name="' + index + '[]"]').length) {
|
686 |
checkError = checkError + 1;
|
687 |
-
var controlWrap =
|
688 |
|
689 |
controlWrap.find('input').addClass('wpcf7-not-valid');
|
690 |
controlWrap.find('span.wpcf7-not-valid-tip').remove();
|
@@ -693,7 +689,6 @@ Wpcf7cfMultistep.prototype.validateStep = function (step_index) {
|
|
693 |
});
|
694 |
resolve('failed'); //$multistep.append('<div class="wpcf7-response-output wpcf7-display-none wpcf7-validation-errors" style="display: block;" role="alert">' + json.message + '</div>');
|
695 |
|
696 |
-
console.log($multistep.parent().find('.wpcf7-response-output'));
|
697 |
$multistep.parent().find('.wpcf7-response-output').removeClass('wpcf7-display-none').html(json.message);
|
698 |
} else if (json.success) {
|
699 |
resolve('success');
|
@@ -896,13 +891,13 @@ window.wpcf7cf = {
|
|
896 |
}
|
897 |
},
|
898 |
should_group_be_shown: function should_group_be_shown(condition, $current_form) {
|
899 |
-
var $ =
|
900 |
var show_group = true;
|
901 |
|
902 |
for (var and_rule_i = 0; and_rule_i < condition.and_rules.length; and_rule_i++) {
|
903 |
var condition_ok = false;
|
904 |
var condition_and_rule = condition.and_rules[and_rule_i];
|
905 |
-
var $field =
|
906 |
var if_val = condition_and_rule.if_value;
|
907 |
var if_val_as_number = isFinite(parseFloat(if_val)) ? parseFloat(if_val) : 0;
|
908 |
var operator = condition_and_rule.operator;
|
@@ -926,10 +921,10 @@ window.wpcf7cf = {
|
|
926 |
var all_values = [];
|
927 |
var checked_values = [];
|
928 |
$field.each(function () {
|
929 |
-
all_values.push(
|
930 |
|
931 |
-
if (
|
932 |
-
checked_values.push(
|
933 |
}
|
934 |
});
|
935 |
condition_ok = this.isConditionTrue(checked_values, operator, if_val, $field);
|
@@ -944,7 +939,7 @@ window.wpcf7cf = {
|
|
944 |
},
|
945 |
isConditionTrue: function isConditionTrue(values, operator) {
|
946 |
var testValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
|
947 |
-
var $field = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] :
|
948 |
|
949 |
if (!Array.isArray(values)) {
|
950 |
values = [values];
|
@@ -1014,23 +1009,23 @@ window.wpcf7cf = {
|
|
1014 |
return condition_ok;
|
1015 |
}
|
1016 |
};
|
1017 |
-
|
1018 |
-
wpcf7cf_forms.push(new Wpcf7cfForm(
|
1019 |
}); // Call displayFields again on all forms
|
1020 |
// Necessary in case some theme or plugin changed a form value by the time the entire page is fully loaded.
|
1021 |
|
1022 |
-
|
1023 |
wpcf7cf_forms.forEach(function (f) {
|
1024 |
f.displayFields();
|
1025 |
});
|
1026 |
}); // fix for exclusive checkboxes in IE (this will call the change-event again after all other checkboxes are unchecked, triggering the display_fields() function)
|
1027 |
|
1028 |
-
var old_wpcf7ExclusiveCheckbox =
|
1029 |
|
1030 |
-
|
1031 |
return this.find('input:checkbox').click(function () {
|
1032 |
-
var name =
|
1033 |
-
|
1034 |
});
|
1035 |
};
|
1036 |
|
@@ -1094,9487 +1089,6 @@ module.exports = __webpack_require__(/*! regenerator-runtime */ "./node_modules/
|
|
1094 |
|
1095 |
/***/ }),
|
1096 |
|
1097 |
-
/***/ "./node_modules/jquery/dist/jquery.js":
|
1098 |
-
/*!********************************************!*\
|
1099 |
-
!*** ./node_modules/jquery/dist/jquery.js ***!
|
1100 |
-
\********************************************/
|
1101 |
-
/*! no static exports found */
|
1102 |
-
/***/ (function(module, exports, __webpack_require__) {
|
1103 |
-
|
1104 |
-
/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
1105 |
-
|
1106 |
-
/*!
|
1107 |
-
* jQuery JavaScript Library v3.5.0
|
1108 |
-
* https://jquery.com/
|
1109 |
-
*
|
1110 |
-
* Includes Sizzle.js
|
1111 |
-
* https://sizzlejs.com/
|
1112 |
-
*
|
1113 |
-
* Copyright JS Foundation and other contributors
|
1114 |
-
* Released under the MIT license
|
1115 |
-
* https://jquery.org/license
|
1116 |
-
*
|
1117 |
-
* Date: 2020-04-10T15:07Z
|
1118 |
-
*/
|
1119 |
-
(function (global, factory) {
|
1120 |
-
"use strict";
|
1121 |
-
|
1122 |
-
if (( false ? undefined : _typeof(module)) === "object" && _typeof(module.exports) === "object") {
|
1123 |
-
// For CommonJS and CommonJS-like environments where a proper `window`
|
1124 |
-
// is present, execute the factory and get jQuery.
|
1125 |
-
// For environments that do not have a `window` with a `document`
|
1126 |
-
// (such as Node.js), expose a factory as module.exports.
|
1127 |
-
// This accentuates the need for the creation of a real `window`.
|
1128 |
-
// e.g. var jQuery = require("jquery")(window);
|
1129 |
-
// See ticket #14549 for more info.
|
1130 |
-
module.exports = global.document ? factory(global, true) : function (w) {
|
1131 |
-
if (!w.document) {
|
1132 |
-
throw new Error("jQuery requires a window with a document");
|
1133 |
-
}
|
1134 |
-
|
1135 |
-
return factory(w);
|
1136 |
-
};
|
1137 |
-
} else {
|
1138 |
-
factory(global);
|
1139 |
-
} // Pass this if window is not defined yet
|
1140 |
-
|
1141 |
-
})(typeof window !== "undefined" ? window : this, function (window, noGlobal) {
|
1142 |
-
// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
|
1143 |
-
// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
|
1144 |
-
// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
|
1145 |
-
// enough that all such attempts are guarded in a try block.
|
1146 |
-
"use strict";
|
1147 |
-
|
1148 |
-
var arr = [];
|
1149 |
-
var getProto = Object.getPrototypeOf;
|
1150 |
-
var _slice = arr.slice;
|
1151 |
-
var flat = arr.flat ? function (array) {
|
1152 |
-
return arr.flat.call(array);
|
1153 |
-
} : function (array) {
|
1154 |
-
return arr.concat.apply([], array);
|
1155 |
-
};
|
1156 |
-
var push = arr.push;
|
1157 |
-
var indexOf = arr.indexOf;
|
1158 |
-
var class2type = {};
|
1159 |
-
var toString = class2type.toString;
|
1160 |
-
var hasOwn = class2type.hasOwnProperty;
|
1161 |
-
var fnToString = hasOwn.toString;
|
1162 |
-
var ObjectFunctionString = fnToString.call(Object);
|
1163 |
-
var support = {};
|
1164 |
-
|
1165 |
-
var isFunction = function isFunction(obj) {
|
1166 |
-
// Support: Chrome <=57, Firefox <=52
|
1167 |
-
// In some browsers, typeof returns "function" for HTML <object> elements
|
1168 |
-
// (i.e., `typeof document.createElement( "object" ) === "function"`).
|
1169 |
-
// We don't want to classify *any* DOM node as a function.
|
1170 |
-
return typeof obj === "function" && typeof obj.nodeType !== "number";
|
1171 |
-
};
|
1172 |
-
|
1173 |
-
var isWindow = function isWindow(obj) {
|
1174 |
-
return obj != null && obj === obj.window;
|
1175 |
-
};
|
1176 |
-
|
1177 |
-
var document = window.document;
|
1178 |
-
var preservedScriptAttributes = {
|
1179 |
-
type: true,
|
1180 |
-
src: true,
|
1181 |
-
nonce: true,
|
1182 |
-
noModule: true
|
1183 |
-
};
|
1184 |
-
|
1185 |
-
function DOMEval(code, node, doc) {
|
1186 |
-
doc = doc || document;
|
1187 |
-
var i,
|
1188 |
-
val,
|
1189 |
-
script = doc.createElement("script");
|
1190 |
-
script.text = code;
|
1191 |
-
|
1192 |
-
if (node) {
|
1193 |
-
for (i in preservedScriptAttributes) {
|
1194 |
-
// Support: Firefox 64+, Edge 18+
|
1195 |
-
// Some browsers don't support the "nonce" property on scripts.
|
1196 |
-
// On the other hand, just using `getAttribute` is not enough as
|
1197 |
-
// the `nonce` attribute is reset to an empty string whenever it
|
1198 |
-
// becomes browsing-context connected.
|
1199 |
-
// See https://github.com/whatwg/html/issues/2369
|
1200 |
-
// See https://html.spec.whatwg.org/#nonce-attributes
|
1201 |
-
// The `node.getAttribute` check was added for the sake of
|
1202 |
-
// `jQuery.globalEval` so that it can fake a nonce-containing node
|
1203 |
-
// via an object.
|
1204 |
-
val = node[i] || node.getAttribute && node.getAttribute(i);
|
1205 |
-
|
1206 |
-
if (val) {
|
1207 |
-
script.setAttribute(i, val);
|
1208 |
-
}
|
1209 |
-
}
|
1210 |
-
}
|
1211 |
-
|
1212 |
-
doc.head.appendChild(script).parentNode.removeChild(script);
|
1213 |
-
}
|
1214 |
-
|
1215 |
-
function toType(obj) {
|
1216 |
-
if (obj == null) {
|
1217 |
-
return obj + "";
|
1218 |
-
} // Support: Android <=2.3 only (functionish RegExp)
|
1219 |
-
|
1220 |
-
|
1221 |
-
return _typeof(obj) === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : _typeof(obj);
|
1222 |
-
}
|
1223 |
-
/* global Symbol */
|
1224 |
-
// Defining this global in .eslintrc.json would create a danger of using the global
|
1225 |
-
// unguarded in another place, it seems safer to define global only for this module
|
1226 |
-
|
1227 |
-
|
1228 |
-
var version = "3.5.0",
|
1229 |
-
// Define a local copy of jQuery
|
1230 |
-
jQuery = function jQuery(selector, context) {
|
1231 |
-
// The jQuery object is actually just the init constructor 'enhanced'
|
1232 |
-
// Need init if jQuery is called (just allow error to be thrown if not included)
|
1233 |
-
return new jQuery.fn.init(selector, context);
|
1234 |
-
};
|
1235 |
-
|
1236 |
-
jQuery.fn = jQuery.prototype = {
|
1237 |
-
// The current version of jQuery being used
|
1238 |
-
jquery: version,
|
1239 |
-
constructor: jQuery,
|
1240 |
-
// The default length of a jQuery object is 0
|
1241 |
-
length: 0,
|
1242 |
-
toArray: function toArray() {
|
1243 |
-
return _slice.call(this);
|
1244 |
-
},
|
1245 |
-
// Get the Nth element in the matched element set OR
|
1246 |
-
// Get the whole matched element set as a clean array
|
1247 |
-
get: function get(num) {
|
1248 |
-
// Return all the elements in a clean array
|
1249 |
-
if (num == null) {
|
1250 |
-
return _slice.call(this);
|
1251 |
-
} // Return just the one element from the set
|
1252 |
-
|
1253 |
-
|
1254 |
-
return num < 0 ? this[num + this.length] : this[num];
|
1255 |
-
},
|
1256 |
-
// Take an array of elements and push it onto the stack
|
1257 |
-
// (returning the new matched element set)
|
1258 |
-
pushStack: function pushStack(elems) {
|
1259 |
-
// Build a new jQuery matched element set
|
1260 |
-
var ret = jQuery.merge(this.constructor(), elems); // Add the old object onto the stack (as a reference)
|
1261 |
-
|
1262 |
-
ret.prevObject = this; // Return the newly-formed element set
|
1263 |
-
|
1264 |
-
return ret;
|
1265 |
-
},
|
1266 |
-
// Execute a callback for every element in the matched set.
|
1267 |
-
each: function each(callback) {
|
1268 |
-
return jQuery.each(this, callback);
|
1269 |
-
},
|
1270 |
-
map: function map(callback) {
|
1271 |
-
return this.pushStack(jQuery.map(this, function (elem, i) {
|
1272 |
-
return callback.call(elem, i, elem);
|
1273 |
-
}));
|
1274 |
-
},
|
1275 |
-
slice: function slice() {
|
1276 |
-
return this.pushStack(_slice.apply(this, arguments));
|
1277 |
-
},
|
1278 |
-
first: function first() {
|
1279 |
-
return this.eq(0);
|
1280 |
-
},
|
1281 |
-
last: function last() {
|
1282 |
-
return this.eq(-1);
|
1283 |
-
},
|
1284 |
-
even: function even() {
|
1285 |
-
return this.pushStack(jQuery.grep(this, function (_elem, i) {
|
1286 |
-
return (i + 1) % 2;
|
1287 |
-
}));
|
1288 |
-
},
|
1289 |
-
odd: function odd() {
|
1290 |
-
return this.pushStack(jQuery.grep(this, function (_elem, i) {
|
1291 |
-
return i % 2;
|
1292 |
-
}));
|
1293 |
-
},
|
1294 |
-
eq: function eq(i) {
|
1295 |
-
var len = this.length,
|
1296 |
-
j = +i + (i < 0 ? len : 0);
|
1297 |
-
return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
|
1298 |
-
},
|
1299 |
-
end: function end() {
|
1300 |
-
return this.prevObject || this.constructor();
|
1301 |
-
},
|
1302 |
-
// For internal use only.
|
1303 |
-
// Behaves like an Array's method, not like a jQuery method.
|
1304 |
-
push: push,
|
1305 |
-
sort: arr.sort,
|
1306 |
-
splice: arr.splice
|
1307 |
-
};
|
1308 |
-
|
1309 |
-
jQuery.extend = jQuery.fn.extend = function () {
|
1310 |
-
var options,
|
1311 |
-
name,
|
1312 |
-
src,
|
1313 |
-
copy,
|
1314 |
-
copyIsArray,
|
1315 |
-
clone,
|
1316 |
-
target = arguments[0] || {},
|
1317 |
-
i = 1,
|
1318 |
-
length = arguments.length,
|
1319 |
-
deep = false; // Handle a deep copy situation
|
1320 |
-
|
1321 |
-
if (typeof target === "boolean") {
|
1322 |
-
deep = target; // Skip the boolean and the target
|
1323 |
-
|
1324 |
-
target = arguments[i] || {};
|
1325 |
-
i++;
|
1326 |
-
} // Handle case when target is a string or something (possible in deep copy)
|
1327 |
-
|
1328 |
-
|
1329 |
-
if (_typeof(target) !== "object" && !isFunction(target)) {
|
1330 |
-
target = {};
|
1331 |
-
} // Extend jQuery itself if only one argument is passed
|
1332 |
-
|
1333 |
-
|
1334 |
-
if (i === length) {
|
1335 |
-
target = this;
|
1336 |
-
i--;
|
1337 |
-
}
|
1338 |
-
|
1339 |
-
for (; i < length; i++) {
|
1340 |
-
// Only deal with non-null/undefined values
|
1341 |
-
if ((options = arguments[i]) != null) {
|
1342 |
-
// Extend the base object
|
1343 |
-
for (name in options) {
|
1344 |
-
copy = options[name]; // Prevent Object.prototype pollution
|
1345 |
-
// Prevent never-ending loop
|
1346 |
-
|
1347 |
-
if (name === "__proto__" || target === copy) {
|
1348 |
-
continue;
|
1349 |
-
} // Recurse if we're merging plain objects or arrays
|
1350 |
-
|
1351 |
-
|
1352 |
-
if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
|
1353 |
-
src = target[name]; // Ensure proper type for the source value
|
1354 |
-
|
1355 |
-
if (copyIsArray && !Array.isArray(src)) {
|
1356 |
-
clone = [];
|
1357 |
-
} else if (!copyIsArray && !jQuery.isPlainObject(src)) {
|
1358 |
-
clone = {};
|
1359 |
-
} else {
|
1360 |
-
clone = src;
|
1361 |
-
}
|
1362 |
-
|
1363 |
-
copyIsArray = false; // Never move original objects, clone them
|
1364 |
-
|
1365 |
-
target[name] = jQuery.extend(deep, clone, copy); // Don't bring in undefined values
|
1366 |
-
} else if (copy !== undefined) {
|
1367 |
-
target[name] = copy;
|
1368 |
-
}
|
1369 |
-
}
|
1370 |
-
}
|
1371 |
-
} // Return the modified object
|
1372 |
-
|
1373 |
-
|
1374 |
-
return target;
|
1375 |
-
};
|
1376 |
-
|
1377 |
-
jQuery.extend({
|
1378 |
-
// Unique for each copy of jQuery on the page
|
1379 |
-
expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""),
|
1380 |
-
// Assume jQuery is ready without the ready module
|
1381 |
-
isReady: true,
|
1382 |
-
error: function error(msg) {
|
1383 |
-
throw new Error(msg);
|
1384 |
-
},
|
1385 |
-
noop: function noop() {},
|
1386 |
-
isPlainObject: function isPlainObject(obj) {
|
1387 |
-
var proto, Ctor; // Detect obvious negatives
|
1388 |
-
// Use toString instead of jQuery.type to catch host objects
|
1389 |
-
|
1390 |
-
if (!obj || toString.call(obj) !== "[object Object]") {
|
1391 |
-
return false;
|
1392 |
-
}
|
1393 |
-
|
1394 |
-
proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain
|
1395 |
-
|
1396 |
-
if (!proto) {
|
1397 |
-
return true;
|
1398 |
-
} // Objects with prototype are plain iff they were constructed by a global Object function
|
1399 |
-
|
1400 |
-
|
1401 |
-
Ctor = hasOwn.call(proto, "constructor") && proto.constructor;
|
1402 |
-
return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString;
|
1403 |
-
},
|
1404 |
-
isEmptyObject: function isEmptyObject(obj) {
|
1405 |
-
var name;
|
1406 |
-
|
1407 |
-
for (name in obj) {
|
1408 |
-
return false;
|
1409 |
-
}
|
1410 |
-
|
1411 |
-
return true;
|
1412 |
-
},
|
1413 |
-
// Evaluates a script in a provided context; falls back to the global one
|
1414 |
-
// if not specified.
|
1415 |
-
globalEval: function globalEval(code, options, doc) {
|
1416 |
-
DOMEval(code, {
|
1417 |
-
nonce: options && options.nonce
|
1418 |
-
}, doc);
|
1419 |
-
},
|
1420 |
-
each: function each(obj, callback) {
|
1421 |
-
var length,
|
1422 |
-
i = 0;
|
1423 |
-
|
1424 |
-
if (isArrayLike(obj)) {
|
1425 |
-
length = obj.length;
|
1426 |
-
|
1427 |
-
for (; i < length; i++) {
|
1428 |
-
if (callback.call(obj[i], i, obj[i]) === false) {
|
1429 |
-
break;
|
1430 |
-
}
|
1431 |
-
}
|
1432 |
-
} else {
|
1433 |
-
for (i in obj) {
|
1434 |
-
if (callback.call(obj[i], i, obj[i]) === false) {
|
1435 |
-
break;
|
1436 |
-
}
|
1437 |
-
}
|
1438 |
-
}
|
1439 |
-
|
1440 |
-
return obj;
|
1441 |
-
},
|
1442 |
-
// results is for internal usage only
|
1443 |
-
makeArray: function makeArray(arr, results) {
|
1444 |
-
var ret = results || [];
|
1445 |
-
|
1446 |
-
if (arr != null) {
|
1447 |
-
if (isArrayLike(Object(arr))) {
|
1448 |
-
jQuery.merge(ret, typeof arr === "string" ? [arr] : arr);
|
1449 |
-
} else {
|
1450 |
-
push.call(ret, arr);
|
1451 |
-
}
|
1452 |
-
}
|
1453 |
-
|
1454 |
-
return ret;
|
1455 |
-
},
|
1456 |
-
inArray: function inArray(elem, arr, i) {
|
1457 |
-
return arr == null ? -1 : indexOf.call(arr, elem, i);
|
1458 |
-
},
|
1459 |
-
// Support: Android <=4.0 only, PhantomJS 1 only
|
1460 |
-
// push.apply(_, arraylike) throws on ancient WebKit
|
1461 |
-
merge: function merge(first, second) {
|
1462 |
-
var len = +second.length,
|
1463 |
-
j = 0,
|
1464 |
-
i = first.length;
|
1465 |
-
|
1466 |
-
for (; j < len; j++) {
|
1467 |
-
first[i++] = second[j];
|
1468 |
-
}
|
1469 |
-
|
1470 |
-
first.length = i;
|
1471 |
-
return first;
|
1472 |
-
},
|
1473 |
-
grep: function grep(elems, callback, invert) {
|
1474 |
-
var callbackInverse,
|
1475 |
-
matches = [],
|
1476 |
-
i = 0,
|
1477 |
-
length = elems.length,
|
1478 |
-
callbackExpect = !invert; // Go through the array, only saving the items
|
1479 |
-
// that pass the validator function
|
1480 |
-
|
1481 |
-
for (; i < length; i++) {
|
1482 |
-
callbackInverse = !callback(elems[i], i);
|
1483 |
-
|
1484 |
-
if (callbackInverse !== callbackExpect) {
|
1485 |
-
matches.push(elems[i]);
|
1486 |
-
}
|
1487 |
-
}
|
1488 |
-
|
1489 |
-
return matches;
|
1490 |
-
},
|
1491 |
-
// arg is for internal usage only
|
1492 |
-
map: function map(elems, callback, arg) {
|
1493 |
-
var length,
|
1494 |
-
value,
|
1495 |
-
i = 0,
|
1496 |
-
ret = []; // Go through the array, translating each of the items to their new values
|
1497 |
-
|
1498 |
-
if (isArrayLike(elems)) {
|
1499 |
-
length = elems.length;
|
1500 |
-
|
1501 |
-
for (; i < length; i++) {
|
1502 |
-
value = callback(elems[i], i, arg);
|
1503 |
-
|
1504 |
-
if (value != null) {
|
1505 |
-
ret.push(value);
|
1506 |
-
}
|
1507 |
-
} // Go through every key on the object,
|
1508 |
-
|
1509 |
-
} else {
|
1510 |
-
for (i in elems) {
|
1511 |
-
value = callback(elems[i], i, arg);
|
1512 |
-
|
1513 |
-
if (value != null) {
|
1514 |
-
ret.push(value);
|
1515 |
-
}
|
1516 |
-
}
|
1517 |
-
} // Flatten any nested arrays
|
1518 |
-
|
1519 |
-
|
1520 |
-
return flat(ret);
|
1521 |
-
},
|
1522 |
-
// A global GUID counter for objects
|
1523 |
-
guid: 1,
|
1524 |
-
// jQuery.support is not used in Core but other projects attach their
|
1525 |
-
// properties to it so it needs to exist.
|
1526 |
-
support: support
|
1527 |
-
});
|
1528 |
-
|
1529 |
-
if (typeof Symbol === "function") {
|
1530 |
-
jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];
|
1531 |
-
} // Populate the class2type map
|
1532 |
-
|
1533 |
-
|
1534 |
-
jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (_i, name) {
|
1535 |
-
class2type["[object " + name + "]"] = name.toLowerCase();
|
1536 |
-
});
|
1537 |
-
|
1538 |
-
function isArrayLike(obj) {
|
1539 |
-
// Support: real iOS 8.2 only (not reproducible in simulator)
|
1540 |
-
// `in` check used to prevent JIT error (gh-2145)
|
1541 |
-
// hasOwn isn't used here due to false negatives
|
1542 |
-
// regarding Nodelist length in IE
|
1543 |
-
var length = !!obj && "length" in obj && obj.length,
|
1544 |
-
type = toType(obj);
|
1545 |
-
|
1546 |
-
if (isFunction(obj) || isWindow(obj)) {
|
1547 |
-
return false;
|
1548 |
-
}
|
1549 |
-
|
1550 |
-
return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj;
|
1551 |
-
}
|
1552 |
-
|
1553 |
-
var Sizzle =
|
1554 |
-
/*!
|
1555 |
-
* Sizzle CSS Selector Engine v2.3.5
|
1556 |
-
* https://sizzlejs.com/
|
1557 |
-
*
|
1558 |
-
* Copyright JS Foundation and other contributors
|
1559 |
-
* Released under the MIT license
|
1560 |
-
* https://js.foundation/
|
1561 |
-
*
|
1562 |
-
* Date: 2020-03-14
|
1563 |
-
*/
|
1564 |
-
function (window) {
|
1565 |
-
var i,
|
1566 |
-
support,
|
1567 |
-
Expr,
|
1568 |
-
getText,
|
1569 |
-
isXML,
|
1570 |
-
tokenize,
|
1571 |
-
compile,
|
1572 |
-
select,
|
1573 |
-
outermostContext,
|
1574 |
-
sortInput,
|
1575 |
-
hasDuplicate,
|
1576 |
-
// Local document vars
|
1577 |
-
setDocument,
|
1578 |
-
document,
|
1579 |
-
docElem,
|
1580 |
-
documentIsHTML,
|
1581 |
-
rbuggyQSA,
|
1582 |
-
rbuggyMatches,
|
1583 |
-
matches,
|
1584 |
-
contains,
|
1585 |
-
// Instance-specific data
|
1586 |
-
expando = "sizzle" + 1 * new Date(),
|
1587 |
-
preferredDoc = window.document,
|
1588 |
-
dirruns = 0,
|
1589 |
-
done = 0,
|
1590 |
-
classCache = createCache(),
|
1591 |
-
tokenCache = createCache(),
|
1592 |
-
compilerCache = createCache(),
|
1593 |
-
nonnativeSelectorCache = createCache(),
|
1594 |
-
sortOrder = function sortOrder(a, b) {
|
1595 |
-
if (a === b) {
|
1596 |
-
hasDuplicate = true;
|
1597 |
-
}
|
1598 |
-
|
1599 |
-
return 0;
|
1600 |
-
},
|
1601 |
-
// Instance methods
|
1602 |
-
hasOwn = {}.hasOwnProperty,
|
1603 |
-
arr = [],
|
1604 |
-
pop = arr.pop,
|
1605 |
-
pushNative = arr.push,
|
1606 |
-
push = arr.push,
|
1607 |
-
slice = arr.slice,
|
1608 |
-
// Use a stripped-down indexOf as it's faster than native
|
1609 |
-
// https://jsperf.com/thor-indexof-vs-for/5
|
1610 |
-
indexOf = function indexOf(list, elem) {
|
1611 |
-
var i = 0,
|
1612 |
-
len = list.length;
|
1613 |
-
|
1614 |
-
for (; i < len; i++) {
|
1615 |
-
if (list[i] === elem) {
|
1616 |
-
return i;
|
1617 |
-
}
|
1618 |
-
}
|
1619 |
-
|
1620 |
-
return -1;
|
1621 |
-
},
|
1622 |
-
booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + "ismap|loop|multiple|open|readonly|required|scoped",
|
1623 |
-
// Regular expressions
|
1624 |
-
// http://www.w3.org/TR/css3-selectors/#whitespace
|
1625 |
-
whitespace = "[\\x20\\t\\r\\n\\f]",
|
1626 |
-
// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
|
1627 |
-
identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
|
1628 |
-
// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
|
1629 |
-
attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2)
|
1630 |
-
"*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5]
|
1631 |
-
// or strings [capture 3 or capture 4]"
|
1632 |
-
"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]",
|
1633 |
-
pseudos = ":(" + identifier + ")(?:\\((" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
|
1634 |
-
// 1. quoted (capture 3; capture 4 or capture 5)
|
1635 |
-
"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + // 2. simple (capture 6)
|
1636 |
-
"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + // 3. anything else (capture 2)
|
1637 |
-
".*" + ")\\)|)",
|
1638 |
-
// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
|
1639 |
-
rwhitespace = new RegExp(whitespace + "+", "g"),
|
1640 |
-
rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"),
|
1641 |
-
rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"),
|
1642 |
-
rcombinators = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"),
|
1643 |
-
rdescend = new RegExp(whitespace + "|>"),
|
1644 |
-
rpseudo = new RegExp(pseudos),
|
1645 |
-
ridentifier = new RegExp("^" + identifier + "$"),
|
1646 |
-
matchExpr = {
|
1647 |
-
"ID": new RegExp("^#(" + identifier + ")"),
|
1648 |
-
"CLASS": new RegExp("^\\.(" + identifier + ")"),
|
1649 |
-
"TAG": new RegExp("^(" + identifier + "|[*])"),
|
1650 |
-
"ATTR": new RegExp("^" + attributes),
|
1651 |
-
"PSEUDO": new RegExp("^" + pseudos),
|
1652 |
-
"CHILD": new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i"),
|
1653 |
-
"bool": new RegExp("^(?:" + booleans + ")$", "i"),
|
1654 |
-
// For use in libraries implementing .is()
|
1655 |
-
// We use this for POS matching in `select`
|
1656 |
-
"needsContext": new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
|
1657 |
-
},
|
1658 |
-
rhtml = /HTML$/i,
|
1659 |
-
rinputs = /^(?:input|select|textarea|button)$/i,
|
1660 |
-
rheader = /^h\d$/i,
|
1661 |
-
rnative = /^[^{]+\{\s*\[native \w/,
|
1662 |
-
// Easily-parseable/retrievable ID or TAG or CLASS selectors
|
1663 |
-
rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
|
1664 |
-
rsibling = /[+~]/,
|
1665 |
-
// CSS escapes
|
1666 |
-
// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
|
1667 |
-
runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g"),
|
1668 |
-
funescape = function funescape(escape, nonHex) {
|
1669 |
-
var high = "0x" + escape.slice(1) - 0x10000;
|
1670 |
-
return nonHex ? // Strip the backslash prefix from a non-hex escape sequence
|
1671 |
-
nonHex : // Replace a hexadecimal escape sequence with the encoded Unicode code point
|
1672 |
-
// Support: IE <=11+
|
1673 |
-
// For values outside the Basic Multilingual Plane (BMP), manually construct a
|
1674 |
-
// surrogate pair
|
1675 |
-
high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);
|
1676 |
-
},
|
1677 |
-
// CSS string/identifier serialization
|
1678 |
-
// https://drafts.csswg.org/cssom/#common-serializing-idioms
|
1679 |
-
rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
|
1680 |
-
fcssescape = function fcssescape(ch, asCodePoint) {
|
1681 |
-
if (asCodePoint) {
|
1682 |
-
// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
|
1683 |
-
if (ch === "\0") {
|
1684 |
-
return "\uFFFD";
|
1685 |
-
} // Control characters and (dependent upon position) numbers get escaped as code points
|
1686 |
-
|
1687 |
-
|
1688 |
-
return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
|
1689 |
-
} // Other potentially-special ASCII characters get backslash-escaped
|
1690 |
-
|
1691 |
-
|
1692 |
-
return "\\" + ch;
|
1693 |
-
},
|
1694 |
-
// Used for iframes
|
1695 |
-
// See setDocument()
|
1696 |
-
// Removing the function wrapper causes a "Permission Denied"
|
1697 |
-
// error in IE
|
1698 |
-
unloadHandler = function unloadHandler() {
|
1699 |
-
setDocument();
|
1700 |
-
},
|
1701 |
-
inDisabledFieldset = addCombinator(function (elem) {
|
1702 |
-
return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
|
1703 |
-
}, {
|
1704 |
-
dir: "parentNode",
|
1705 |
-
next: "legend"
|
1706 |
-
}); // Optimize for push.apply( _, NodeList )
|
1707 |
-
|
1708 |
-
|
1709 |
-
try {
|
1710 |
-
push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); // Support: Android<4.0
|
1711 |
-
// Detect silently failing push.apply
|
1712 |
-
// eslint-disable-next-line no-unused-expressions
|
1713 |
-
|
1714 |
-
arr[preferredDoc.childNodes.length].nodeType;
|
1715 |
-
} catch (e) {
|
1716 |
-
push = {
|
1717 |
-
apply: arr.length ? // Leverage slice if possible
|
1718 |
-
function (target, els) {
|
1719 |
-
pushNative.apply(target, slice.call(els));
|
1720 |
-
} : // Support: IE<9
|
1721 |
-
// Otherwise append directly
|
1722 |
-
function (target, els) {
|
1723 |
-
var j = target.length,
|
1724 |
-
i = 0; // Can't trust NodeList.length
|
1725 |
-
|
1726 |
-
while (target[j++] = els[i++]) {}
|
1727 |
-
|
1728 |
-
target.length = j - 1;
|
1729 |
-
}
|
1730 |
-
};
|
1731 |
-
}
|
1732 |
-
|
1733 |
-
function Sizzle(selector, context, results, seed) {
|
1734 |
-
var m,
|
1735 |
-
i,
|
1736 |
-
elem,
|
1737 |
-
nid,
|
1738 |
-
match,
|
1739 |
-
groups,
|
1740 |
-
newSelector,
|
1741 |
-
newContext = context && context.ownerDocument,
|
1742 |
-
// nodeType defaults to 9, since context defaults to document
|
1743 |
-
nodeType = context ? context.nodeType : 9;
|
1744 |
-
results = results || []; // Return early from calls with invalid selector or context
|
1745 |
-
|
1746 |
-
if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
|
1747 |
-
return results;
|
1748 |
-
} // Try to shortcut find operations (as opposed to filters) in HTML documents
|
1749 |
-
|
1750 |
-
|
1751 |
-
if (!seed) {
|
1752 |
-
setDocument(context);
|
1753 |
-
context = context || document;
|
1754 |
-
|
1755 |
-
if (documentIsHTML) {
|
1756 |
-
// If the selector is sufficiently simple, try using a "get*By*" DOM method
|
1757 |
-
// (excepting DocumentFragment context, where the methods don't exist)
|
1758 |
-
if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {
|
1759 |
-
// ID selector
|
1760 |
-
if (m = match[1]) {
|
1761 |
-
// Document context
|
1762 |
-
if (nodeType === 9) {
|
1763 |
-
if (elem = context.getElementById(m)) {
|
1764 |
-
// Support: IE, Opera, Webkit
|
1765 |
-
// TODO: identify versions
|
1766 |
-
// getElementById can match elements by name instead of ID
|
1767 |
-
if (elem.id === m) {
|
1768 |
-
results.push(elem);
|
1769 |
-
return results;
|
1770 |
-
}
|
1771 |
-
} else {
|
1772 |
-
return results;
|
1773 |
-
} // Element context
|
1774 |
-
|
1775 |
-
} else {
|
1776 |
-
// Support: IE, Opera, Webkit
|
1777 |
-
// TODO: identify versions
|
1778 |
-
// getElementById can match elements by name instead of ID
|
1779 |
-
if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {
|
1780 |
-
results.push(elem);
|
1781 |
-
return results;
|
1782 |
-
}
|
1783 |
-
} // Type selector
|
1784 |
-
|
1785 |
-
} else if (match[2]) {
|
1786 |
-
push.apply(results, context.getElementsByTagName(selector));
|
1787 |
-
return results; // Class selector
|
1788 |
-
} else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {
|
1789 |
-
push.apply(results, context.getElementsByClassName(m));
|
1790 |
-
return results;
|
1791 |
-
}
|
1792 |
-
} // Take advantage of querySelectorAll
|
1793 |
-
|
1794 |
-
|
1795 |
-
if (support.qsa && !nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && ( // Support: IE 8 only
|
1796 |
-
// Exclude object elements
|
1797 |
-
nodeType !== 1 || context.nodeName.toLowerCase() !== "object")) {
|
1798 |
-
newSelector = selector;
|
1799 |
-
newContext = context; // qSA considers elements outside a scoping root when evaluating child or
|
1800 |
-
// descendant combinators, which is not what we want.
|
1801 |
-
// In such cases, we work around the behavior by prefixing every selector in the
|
1802 |
-
// list with an ID selector referencing the scope context.
|
1803 |
-
// The technique has to be used as well when a leading combinator is used
|
1804 |
-
// as such selectors are not recognized by querySelectorAll.
|
1805 |
-
// Thanks to Andrew Dupont for this technique.
|
1806 |
-
|
1807 |
-
if (nodeType === 1 && (rdescend.test(selector) || rcombinators.test(selector))) {
|
1808 |
-
// Expand context for sibling selectors
|
1809 |
-
newContext = rsibling.test(selector) && testContext(context.parentNode) || context; // We can use :scope instead of the ID hack if the browser
|
1810 |
-
// supports it & if we're not changing the context.
|
1811 |
-
|
1812 |
-
if (newContext !== context || !support.scope) {
|
1813 |
-
// Capture the context ID, setting it first if necessary
|
1814 |
-
if (nid = context.getAttribute("id")) {
|
1815 |
-
nid = nid.replace(rcssescape, fcssescape);
|
1816 |
-
} else {
|
1817 |
-
context.setAttribute("id", nid = expando);
|
1818 |
-
}
|
1819 |
-
} // Prefix every selector in the list
|
1820 |
-
|
1821 |
-
|
1822 |
-
groups = tokenize(selector);
|
1823 |
-
i = groups.length;
|
1824 |
-
|
1825 |
-
while (i--) {
|
1826 |
-
groups[i] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i]);
|
1827 |
-
}
|
1828 |
-
|
1829 |
-
newSelector = groups.join(",");
|
1830 |
-
}
|
1831 |
-
|
1832 |
-
try {
|
1833 |
-
push.apply(results, newContext.querySelectorAll(newSelector));
|
1834 |
-
return results;
|
1835 |
-
} catch (qsaError) {
|
1836 |
-
nonnativeSelectorCache(selector, true);
|
1837 |
-
} finally {
|
1838 |
-
if (nid === expando) {
|
1839 |
-
context.removeAttribute("id");
|
1840 |
-
}
|
1841 |
-
}
|
1842 |
-
}
|
1843 |
-
}
|
1844 |
-
} // All others
|
1845 |
-
|
1846 |
-
|
1847 |
-
return select(selector.replace(rtrim, "$1"), context, results, seed);
|
1848 |
-
}
|
1849 |
-
/**
|
1850 |
-
* Create key-value caches of limited size
|
1851 |
-
* @returns {function(string, object)} Returns the Object data after storing it on itself with
|
1852 |
-
* property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
|
1853 |
-
* deleting the oldest entry
|
1854 |
-
*/
|
1855 |
-
|
1856 |
-
|
1857 |
-
function createCache() {
|
1858 |
-
var keys = [];
|
1859 |
-
|
1860 |
-
function cache(key, value) {
|
1861 |
-
// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
|
1862 |
-
if (keys.push(key + " ") > Expr.cacheLength) {
|
1863 |
-
// Only keep the most recent entries
|
1864 |
-
delete cache[keys.shift()];
|
1865 |
-
}
|
1866 |
-
|
1867 |
-
return cache[key + " "] = value;
|
1868 |
-
}
|
1869 |
-
|
1870 |
-
return cache;
|
1871 |
-
}
|
1872 |
-
/**
|
1873 |
-
* Mark a function for special use by Sizzle
|
1874 |
-
* @param {Function} fn The function to mark
|
1875 |
-
*/
|
1876 |
-
|
1877 |
-
|
1878 |
-
function markFunction(fn) {
|
1879 |
-
fn[expando] = true;
|
1880 |
-
return fn;
|
1881 |
-
}
|
1882 |
-
/**
|
1883 |
-
* Support testing using an element
|
1884 |
-
* @param {Function} fn Passed the created element and returns a boolean result
|
1885 |
-
*/
|
1886 |
-
|
1887 |
-
|
1888 |
-
function assert(fn) {
|
1889 |
-
var el = document.createElement("fieldset");
|
1890 |
-
|
1891 |
-
try {
|
1892 |
-
return !!fn(el);
|
1893 |
-
} catch (e) {
|
1894 |
-
return false;
|
1895 |
-
} finally {
|
1896 |
-
// Remove from its parent by default
|
1897 |
-
if (el.parentNode) {
|
1898 |
-
el.parentNode.removeChild(el);
|
1899 |
-
} // release memory in IE
|
1900 |
-
|
1901 |
-
|
1902 |
-
el = null;
|
1903 |
-
}
|
1904 |
-
}
|
1905 |
-
/**
|
1906 |
-
* Adds the same handler for all of the specified attrs
|
1907 |
-
* @param {String} attrs Pipe-separated list of attributes
|
1908 |
-
* @param {Function} handler The method that will be applied
|
1909 |
-
*/
|
1910 |
-
|
1911 |
-
|
1912 |
-
function addHandle(attrs, handler) {
|
1913 |
-
var arr = attrs.split("|"),
|
1914 |
-
i = arr.length;
|
1915 |
-
|
1916 |
-
while (i--) {
|
1917 |
-
Expr.attrHandle[arr[i]] = handler;
|
1918 |
-
}
|
1919 |
-
}
|
1920 |
-
/**
|
1921 |
-
* Checks document order of two siblings
|
1922 |
-
* @param {Element} a
|
1923 |
-
* @param {Element} b
|
1924 |
-
* @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
|
1925 |
-
*/
|
1926 |
-
|
1927 |
-
|
1928 |
-
function siblingCheck(a, b) {
|
1929 |
-
var cur = b && a,
|
1930 |
-
diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex; // Use IE sourceIndex if available on both nodes
|
1931 |
-
|
1932 |
-
if (diff) {
|
1933 |
-
return diff;
|
1934 |
-
} // Check if b follows a
|
1935 |
-
|
1936 |
-
|
1937 |
-
if (cur) {
|
1938 |
-
while (cur = cur.nextSibling) {
|
1939 |
-
if (cur === b) {
|
1940 |
-
return -1;
|
1941 |
-
}
|
1942 |
-
}
|
1943 |
-
}
|
1944 |
-
|
1945 |
-
return a ? 1 : -1;
|
1946 |
-
}
|
1947 |
-
/**
|
1948 |
-
* Returns a function to use in pseudos for input types
|
1949 |
-
* @param {String} type
|
1950 |
-
*/
|
1951 |
-
|
1952 |
-
|
1953 |
-
function createInputPseudo(type) {
|
1954 |
-
return function (elem) {
|
1955 |
-
var name = elem.nodeName.toLowerCase();
|
1956 |
-
return name === "input" && elem.type === type;
|
1957 |
-
};
|
1958 |
-
}
|
1959 |
-
/**
|
1960 |
-
* Returns a function to use in pseudos for buttons
|
1961 |
-
* @param {String} type
|
1962 |
-
*/
|
1963 |
-
|
1964 |
-
|
1965 |
-
function createButtonPseudo(type) {
|
1966 |
-
return function (elem) {
|
1967 |
-
var name = elem.nodeName.toLowerCase();
|
1968 |
-
return (name === "input" || name === "button") && elem.type === type;
|
1969 |
-
};
|
1970 |
-
}
|
1971 |
-
/**
|
1972 |
-
* Returns a function to use in pseudos for :enabled/:disabled
|
1973 |
-
* @param {Boolean} disabled true for :disabled; false for :enabled
|
1974 |
-
*/
|
1975 |
-
|
1976 |
-
|
1977 |
-
function createDisabledPseudo(disabled) {
|
1978 |
-
// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
|
1979 |
-
return function (elem) {
|
1980 |
-
// Only certain elements can match :enabled or :disabled
|
1981 |
-
// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
|
1982 |
-
// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
|
1983 |
-
if ("form" in elem) {
|
1984 |
-
// Check for inherited disabledness on relevant non-disabled elements:
|
1985 |
-
// * listed form-associated elements in a disabled fieldset
|
1986 |
-
// https://html.spec.whatwg.org/multipage/forms.html#category-listed
|
1987 |
-
// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
|
1988 |
-
// * option elements in a disabled optgroup
|
1989 |
-
// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
|
1990 |
-
// All such elements have a "form" property.
|
1991 |
-
if (elem.parentNode && elem.disabled === false) {
|
1992 |
-
// Option elements defer to a parent optgroup if present
|
1993 |
-
if ("label" in elem) {
|
1994 |
-
if ("label" in elem.parentNode) {
|
1995 |
-
return elem.parentNode.disabled === disabled;
|
1996 |
-
} else {
|
1997 |
-
return elem.disabled === disabled;
|
1998 |
-
}
|
1999 |
-
} // Support: IE 6 - 11
|
2000 |
-
// Use the isDisabled shortcut property to check for disabled fieldset ancestors
|
2001 |
-
|
2002 |
-
|
2003 |
-
return elem.isDisabled === disabled || // Where there is no isDisabled, check manually
|
2004 |
-
|
2005 |
-
/* jshint -W018 */
|
2006 |
-
elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;
|
2007 |
-
}
|
2008 |
-
|
2009 |
-
return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property.
|
2010 |
-
// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
|
2011 |
-
// even exist on them, let alone have a boolean value.
|
2012 |
-
} else if ("label" in elem) {
|
2013 |
-
return elem.disabled === disabled;
|
2014 |
-
} // Remaining elements are neither :enabled nor :disabled
|
2015 |
-
|
2016 |
-
|
2017 |
-
return false;
|
2018 |
-
};
|
2019 |
-
}
|
2020 |
-
/**
|
2021 |
-
* Returns a function to use in pseudos for positionals
|
2022 |
-
* @param {Function} fn
|
2023 |
-
*/
|
2024 |
-
|
2025 |
-
|
2026 |
-
function createPositionalPseudo(fn) {
|
2027 |
-
return markFunction(function (argument) {
|
2028 |
-
argument = +argument;
|
2029 |
-
return markFunction(function (seed, matches) {
|
2030 |
-
var j,
|
2031 |
-
matchIndexes = fn([], seed.length, argument),
|
2032 |
-
i = matchIndexes.length; // Match elements found at the specified indexes
|
2033 |
-
|
2034 |
-
while (i--) {
|
2035 |
-
if (seed[j = matchIndexes[i]]) {
|
2036 |
-
seed[j] = !(matches[j] = seed[j]);
|
2037 |
-
}
|
2038 |
-
}
|
2039 |
-
});
|
2040 |
-
});
|
2041 |
-
}
|
2042 |
-
/**
|
2043 |
-
* Checks a node for validity as a Sizzle context
|
2044 |
-
* @param {Element|Object=} context
|
2045 |
-
* @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
|
2046 |
-
*/
|
2047 |
-
|
2048 |
-
|
2049 |
-
function testContext(context) {
|
2050 |
-
return context && typeof context.getElementsByTagName !== "undefined" && context;
|
2051 |
-
} // Expose support vars for convenience
|
2052 |
-
|
2053 |
-
|
2054 |
-
support = Sizzle.support = {};
|
2055 |
-
/**
|
2056 |
-
* Detects XML nodes
|
2057 |
-
* @param {Element|Object} elem An element or a document
|
2058 |
-
* @returns {Boolean} True iff elem is a non-HTML XML node
|
2059 |
-
*/
|
2060 |
-
|
2061 |
-
isXML = Sizzle.isXML = function (elem) {
|
2062 |
-
var namespace = elem.namespaceURI,
|
2063 |
-
docElem = (elem.ownerDocument || elem).documentElement; // Support: IE <=8
|
2064 |
-
// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
|
2065 |
-
// https://bugs.jquery.com/ticket/4833
|
2066 |
-
|
2067 |
-
return !rhtml.test(namespace || docElem && docElem.nodeName || "HTML");
|
2068 |
-
};
|
2069 |
-
/**
|
2070 |
-
* Sets document-related variables once based on the current document
|
2071 |
-
* @param {Element|Object} [doc] An element or document object to use to set the document
|
2072 |
-
* @returns {Object} Returns the current document
|
2073 |
-
*/
|
2074 |
-
|
2075 |
-
|
2076 |
-
setDocument = Sizzle.setDocument = function (node) {
|
2077 |
-
var hasCompare,
|
2078 |
-
subWindow,
|
2079 |
-
doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected
|
2080 |
-
// Support: IE 11+, Edge 17 - 18+
|
2081 |
-
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
2082 |
-
// two documents; shallow comparisons work.
|
2083 |
-
// eslint-disable-next-line eqeqeq
|
2084 |
-
|
2085 |
-
if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {
|
2086 |
-
return document;
|
2087 |
-
} // Update global variables
|
2088 |
-
|
2089 |
-
|
2090 |
-
document = doc;
|
2091 |
-
docElem = document.documentElement;
|
2092 |
-
documentIsHTML = !isXML(document); // Support: IE 9 - 11+, Edge 12 - 18+
|
2093 |
-
// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
|
2094 |
-
// Support: IE 11+, Edge 17 - 18+
|
2095 |
-
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
2096 |
-
// two documents; shallow comparisons work.
|
2097 |
-
// eslint-disable-next-line eqeqeq
|
2098 |
-
|
2099 |
-
if (preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {
|
2100 |
-
// Support: IE 11, Edge
|
2101 |
-
if (subWindow.addEventListener) {
|
2102 |
-
subWindow.addEventListener("unload", unloadHandler, false); // Support: IE 9 - 10 only
|
2103 |
-
} else if (subWindow.attachEvent) {
|
2104 |
-
subWindow.attachEvent("onunload", unloadHandler);
|
2105 |
-
}
|
2106 |
-
} // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
|
2107 |
-
// Safari 4 - 5 only, Opera <=11.6 - 12.x only
|
2108 |
-
// IE/Edge & older browsers don't support the :scope pseudo-class.
|
2109 |
-
// Support: Safari 6.0 only
|
2110 |
-
// Safari 6.0 supports :scope but it's an alias of :root there.
|
2111 |
-
|
2112 |
-
|
2113 |
-
support.scope = assert(function (el) {
|
2114 |
-
docElem.appendChild(el).appendChild(document.createElement("div"));
|
2115 |
-
return typeof el.querySelectorAll !== "undefined" && !el.querySelectorAll(":scope fieldset div").length;
|
2116 |
-
});
|
2117 |
-
/* Attributes
|
2118 |
-
---------------------------------------------------------------------- */
|
2119 |
-
// Support: IE<8
|
2120 |
-
// Verify that getAttribute really returns attributes and not properties
|
2121 |
-
// (excepting IE8 booleans)
|
2122 |
-
|
2123 |
-
support.attributes = assert(function (el) {
|
2124 |
-
el.className = "i";
|
2125 |
-
return !el.getAttribute("className");
|
2126 |
-
});
|
2127 |
-
/* getElement(s)By*
|
2128 |
-
---------------------------------------------------------------------- */
|
2129 |
-
// Check if getElementsByTagName("*") returns only elements
|
2130 |
-
|
2131 |
-
support.getElementsByTagName = assert(function (el) {
|
2132 |
-
el.appendChild(document.createComment(""));
|
2133 |
-
return !el.getElementsByTagName("*").length;
|
2134 |
-
}); // Support: IE<9
|
2135 |
-
|
2136 |
-
support.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10
|
2137 |
-
// Check if getElementById returns elements by name
|
2138 |
-
// The broken getElementById methods don't pick up programmatically-set names,
|
2139 |
-
// so use a roundabout getElementsByName test
|
2140 |
-
|
2141 |
-
support.getById = assert(function (el) {
|
2142 |
-
docElem.appendChild(el).id = expando;
|
2143 |
-
return !document.getElementsByName || !document.getElementsByName(expando).length;
|
2144 |
-
}); // ID filter and find
|
2145 |
-
|
2146 |
-
if (support.getById) {
|
2147 |
-
Expr.filter["ID"] = function (id) {
|
2148 |
-
var attrId = id.replace(runescape, funescape);
|
2149 |
-
return function (elem) {
|
2150 |
-
return elem.getAttribute("id") === attrId;
|
2151 |
-
};
|
2152 |
-
};
|
2153 |
-
|
2154 |
-
Expr.find["ID"] = function (id, context) {
|
2155 |
-
if (typeof context.getElementById !== "undefined" && documentIsHTML) {
|
2156 |
-
var elem = context.getElementById(id);
|
2157 |
-
return elem ? [elem] : [];
|
2158 |
-
}
|
2159 |
-
};
|
2160 |
-
} else {
|
2161 |
-
Expr.filter["ID"] = function (id) {
|
2162 |
-
var attrId = id.replace(runescape, funescape);
|
2163 |
-
return function (elem) {
|
2164 |
-
var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
|
2165 |
-
return node && node.value === attrId;
|
2166 |
-
};
|
2167 |
-
}; // Support: IE 6 - 7 only
|
2168 |
-
// getElementById is not reliable as a find shortcut
|
2169 |
-
|
2170 |
-
|
2171 |
-
Expr.find["ID"] = function (id, context) {
|
2172 |
-
if (typeof context.getElementById !== "undefined" && documentIsHTML) {
|
2173 |
-
var node,
|
2174 |
-
i,
|
2175 |
-
elems,
|
2176 |
-
elem = context.getElementById(id);
|
2177 |
-
|
2178 |
-
if (elem) {
|
2179 |
-
// Verify the id attribute
|
2180 |
-
node = elem.getAttributeNode("id");
|
2181 |
-
|
2182 |
-
if (node && node.value === id) {
|
2183 |
-
return [elem];
|
2184 |
-
} // Fall back on getElementsByName
|
2185 |
-
|
2186 |
-
|
2187 |
-
elems = context.getElementsByName(id);
|
2188 |
-
i = 0;
|
2189 |
-
|
2190 |
-
while (elem = elems[i++]) {
|
2191 |
-
node = elem.getAttributeNode("id");
|
2192 |
-
|
2193 |
-
if (node && node.value === id) {
|
2194 |
-
return [elem];
|
2195 |
-
}
|
2196 |
-
}
|
2197 |
-
}
|
2198 |
-
|
2199 |
-
return [];
|
2200 |
-
}
|
2201 |
-
};
|
2202 |
-
} // Tag
|
2203 |
-
|
2204 |
-
|
2205 |
-
Expr.find["TAG"] = support.getElementsByTagName ? function (tag, context) {
|
2206 |
-
if (typeof context.getElementsByTagName !== "undefined") {
|
2207 |
-
return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN
|
2208 |
-
} else if (support.qsa) {
|
2209 |
-
return context.querySelectorAll(tag);
|
2210 |
-
}
|
2211 |
-
} : function (tag, context) {
|
2212 |
-
var elem,
|
2213 |
-
tmp = [],
|
2214 |
-
i = 0,
|
2215 |
-
// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
|
2216 |
-
results = context.getElementsByTagName(tag); // Filter out possible comments
|
2217 |
-
|
2218 |
-
if (tag === "*") {
|
2219 |
-
while (elem = results[i++]) {
|
2220 |
-
if (elem.nodeType === 1) {
|
2221 |
-
tmp.push(elem);
|
2222 |
-
}
|
2223 |
-
}
|
2224 |
-
|
2225 |
-
return tmp;
|
2226 |
-
}
|
2227 |
-
|
2228 |
-
return results;
|
2229 |
-
}; // Class
|
2230 |
-
|
2231 |
-
Expr.find["CLASS"] = support.getElementsByClassName && function (className, context) {
|
2232 |
-
if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) {
|
2233 |
-
return context.getElementsByClassName(className);
|
2234 |
-
}
|
2235 |
-
};
|
2236 |
-
/* QSA/matchesSelector
|
2237 |
-
---------------------------------------------------------------------- */
|
2238 |
-
// QSA and matchesSelector support
|
2239 |
-
// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
|
2240 |
-
|
2241 |
-
|
2242 |
-
rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)
|
2243 |
-
// We allow this because of a bug in IE8/9 that throws an error
|
2244 |
-
// whenever `document.activeElement` is accessed on an iframe
|
2245 |
-
// So, we allow :focus to pass through QSA all the time to avoid the IE error
|
2246 |
-
// See https://bugs.jquery.com/ticket/13378
|
2247 |
-
|
2248 |
-
rbuggyQSA = [];
|
2249 |
-
|
2250 |
-
if (support.qsa = rnative.test(document.querySelectorAll)) {
|
2251 |
-
// Build QSA regex
|
2252 |
-
// Regex strategy adopted from Diego Perini
|
2253 |
-
assert(function (el) {
|
2254 |
-
var input; // Select is set to empty string on purpose
|
2255 |
-
// This is to test IE's treatment of not explicitly
|
2256 |
-
// setting a boolean content attribute,
|
2257 |
-
// since its presence should be enough
|
2258 |
-
// https://bugs.jquery.com/ticket/12359
|
2259 |
-
|
2260 |
-
docElem.appendChild(el).innerHTML = "<a id='" + expando + "'></a>" + "<select id='" + expando + "-\r\\' msallowcapture=''>" + "<option selected=''></option></select>"; // Support: IE8, Opera 11-12.16
|
2261 |
-
// Nothing should be selected when empty strings follow ^= or $= or *=
|
2262 |
-
// The test attribute must be unknown in Opera but "safe" for WinRT
|
2263 |
-
// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
|
2264 |
-
|
2265 |
-
if (el.querySelectorAll("[msallowcapture^='']").length) {
|
2266 |
-
rbuggyQSA.push("[*^$]=" + whitespace + "*(?:''|\"\")");
|
2267 |
-
} // Support: IE8
|
2268 |
-
// Boolean attributes and "value" are not treated correctly
|
2269 |
-
|
2270 |
-
|
2271 |
-
if (!el.querySelectorAll("[selected]").length) {
|
2272 |
-
rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
|
2273 |
-
} // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
|
2274 |
-
|
2275 |
-
|
2276 |
-
if (!el.querySelectorAll("[id~=" + expando + "-]").length) {
|
2277 |
-
rbuggyQSA.push("~=");
|
2278 |
-
} // Support: IE 11+, Edge 15 - 18+
|
2279 |
-
// IE 11/Edge don't find elements on a `[name='']` query in some cases.
|
2280 |
-
// Adding a temporary attribute to the document before the selection works
|
2281 |
-
// around the issue.
|
2282 |
-
// Interestingly, IE 10 & older don't seem to have the issue.
|
2283 |
-
|
2284 |
-
|
2285 |
-
input = document.createElement("input");
|
2286 |
-
input.setAttribute("name", "");
|
2287 |
-
el.appendChild(input);
|
2288 |
-
|
2289 |
-
if (!el.querySelectorAll("[name='']").length) {
|
2290 |
-
rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + "*(?:''|\"\")");
|
2291 |
-
} // Webkit/Opera - :checked should return selected option elements
|
2292 |
-
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
|
2293 |
-
// IE8 throws error here and will not see later tests
|
2294 |
-
|
2295 |
-
|
2296 |
-
if (!el.querySelectorAll(":checked").length) {
|
2297 |
-
rbuggyQSA.push(":checked");
|
2298 |
-
} // Support: Safari 8+, iOS 8+
|
2299 |
-
// https://bugs.webkit.org/show_bug.cgi?id=136851
|
2300 |
-
// In-page `selector#id sibling-combinator selector` fails
|
2301 |
-
|
2302 |
-
|
2303 |
-
if (!el.querySelectorAll("a#" + expando + "+*").length) {
|
2304 |
-
rbuggyQSA.push(".#.+[+~]");
|
2305 |
-
} // Support: Firefox <=3.6 - 5 only
|
2306 |
-
// Old Firefox doesn't throw on a badly-escaped identifier.
|
2307 |
-
|
2308 |
-
|
2309 |
-
el.querySelectorAll("\\\f");
|
2310 |
-
rbuggyQSA.push("[\\r\\n\\f]");
|
2311 |
-
});
|
2312 |
-
assert(function (el) {
|
2313 |
-
el.innerHTML = "<a href='' disabled='disabled'></a>" + "<select disabled='disabled'><option/></select>"; // Support: Windows 8 Native Apps
|
2314 |
-
// The type and name attributes are restricted during .innerHTML assignment
|
2315 |
-
|
2316 |
-
var input = document.createElement("input");
|
2317 |
-
input.setAttribute("type", "hidden");
|
2318 |
-
el.appendChild(input).setAttribute("name", "D"); // Support: IE8
|
2319 |
-
// Enforce case-sensitivity of name attribute
|
2320 |
-
|
2321 |
-
if (el.querySelectorAll("[name=d]").length) {
|
2322 |
-
rbuggyQSA.push("name" + whitespace + "*[*^$|!~]?=");
|
2323 |
-
} // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
|
2324 |
-
// IE8 throws error here and will not see later tests
|
2325 |
-
|
2326 |
-
|
2327 |
-
if (el.querySelectorAll(":enabled").length !== 2) {
|
2328 |
-
rbuggyQSA.push(":enabled", ":disabled");
|
2329 |
-
} // Support: IE9-11+
|
2330 |
-
// IE's :disabled selector does not pick up the children of disabled fieldsets
|
2331 |
-
|
2332 |
-
|
2333 |
-
docElem.appendChild(el).disabled = true;
|
2334 |
-
|
2335 |
-
if (el.querySelectorAll(":disabled").length !== 2) {
|
2336 |
-
rbuggyQSA.push(":enabled", ":disabled");
|
2337 |
-
} // Support: Opera 10 - 11 only
|
2338 |
-
// Opera 10-11 does not throw on post-comma invalid pseudos
|
2339 |
-
|
2340 |
-
|
2341 |
-
el.querySelectorAll("*,:x");
|
2342 |
-
rbuggyQSA.push(",.*:");
|
2343 |
-
});
|
2344 |
-
}
|
2345 |
-
|
2346 |
-
if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {
|
2347 |
-
assert(function (el) {
|
2348 |
-
// Check to see if it's possible to do matchesSelector
|
2349 |
-
// on a disconnected node (IE 9)
|
2350 |
-
support.disconnectedMatch = matches.call(el, "*"); // This should fail with an exception
|
2351 |
-
// Gecko does not error, returns false instead
|
2352 |
-
|
2353 |
-
matches.call(el, "[s!='']:x");
|
2354 |
-
rbuggyMatches.push("!=", pseudos);
|
2355 |
-
});
|
2356 |
-
}
|
2357 |
-
|
2358 |
-
rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
|
2359 |
-
rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join("|"));
|
2360 |
-
/* Contains
|
2361 |
-
---------------------------------------------------------------------- */
|
2362 |
-
|
2363 |
-
hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another
|
2364 |
-
// Purposefully self-exclusive
|
2365 |
-
// As in, an element does not contain itself
|
2366 |
-
|
2367 |
-
contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {
|
2368 |
-
var adown = a.nodeType === 9 ? a.documentElement : a,
|
2369 |
-
bup = b && b.parentNode;
|
2370 |
-
return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));
|
2371 |
-
} : function (a, b) {
|
2372 |
-
if (b) {
|
2373 |
-
while (b = b.parentNode) {
|
2374 |
-
if (b === a) {
|
2375 |
-
return true;
|
2376 |
-
}
|
2377 |
-
}
|
2378 |
-
}
|
2379 |
-
|
2380 |
-
return false;
|
2381 |
-
};
|
2382 |
-
/* Sorting
|
2383 |
-
---------------------------------------------------------------------- */
|
2384 |
-
// Document order sorting
|
2385 |
-
|
2386 |
-
sortOrder = hasCompare ? function (a, b) {
|
2387 |
-
// Flag for duplicate removal
|
2388 |
-
if (a === b) {
|
2389 |
-
hasDuplicate = true;
|
2390 |
-
return 0;
|
2391 |
-
} // Sort on method existence if only one input has compareDocumentPosition
|
2392 |
-
|
2393 |
-
|
2394 |
-
var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
|
2395 |
-
|
2396 |
-
if (compare) {
|
2397 |
-
return compare;
|
2398 |
-
} // Calculate position if both inputs belong to the same document
|
2399 |
-
// Support: IE 11+, Edge 17 - 18+
|
2400 |
-
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
2401 |
-
// two documents; shallow comparisons work.
|
2402 |
-
// eslint-disable-next-line eqeqeq
|
2403 |
-
|
2404 |
-
|
2405 |
-
compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : // Otherwise we know they are disconnected
|
2406 |
-
1; // Disconnected nodes
|
2407 |
-
|
2408 |
-
if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {
|
2409 |
-
// Choose the first element that is related to our preferred document
|
2410 |
-
// Support: IE 11+, Edge 17 - 18+
|
2411 |
-
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
2412 |
-
// two documents; shallow comparisons work.
|
2413 |
-
// eslint-disable-next-line eqeqeq
|
2414 |
-
if (a == document || a.ownerDocument == preferredDoc && contains(preferredDoc, a)) {
|
2415 |
-
return -1;
|
2416 |
-
} // Support: IE 11+, Edge 17 - 18+
|
2417 |
-
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
2418 |
-
// two documents; shallow comparisons work.
|
2419 |
-
// eslint-disable-next-line eqeqeq
|
2420 |
-
|
2421 |
-
|
2422 |
-
if (b == document || b.ownerDocument == preferredDoc && contains(preferredDoc, b)) {
|
2423 |
-
return 1;
|
2424 |
-
} // Maintain original order
|
2425 |
-
|
2426 |
-
|
2427 |
-
return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;
|
2428 |
-
}
|
2429 |
-
|
2430 |
-
return compare & 4 ? -1 : 1;
|
2431 |
-
} : function (a, b) {
|
2432 |
-
// Exit early if the nodes are identical
|
2433 |
-
if (a === b) {
|
2434 |
-
hasDuplicate = true;
|
2435 |
-
return 0;
|
2436 |
-
}
|
2437 |
-
|
2438 |
-
var cur,
|
2439 |
-
i = 0,
|
2440 |
-
aup = a.parentNode,
|
2441 |
-
bup = b.parentNode,
|
2442 |
-
ap = [a],
|
2443 |
-
bp = [b]; // Parentless nodes are either documents or disconnected
|
2444 |
-
|
2445 |
-
if (!aup || !bup) {
|
2446 |
-
// Support: IE 11+, Edge 17 - 18+
|
2447 |
-
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
2448 |
-
// two documents; shallow comparisons work.
|
2449 |
-
|
2450 |
-
/* eslint-disable eqeqeq */
|
2451 |
-
return a == document ? -1 : b == document ? 1 :
|
2452 |
-
/* eslint-enable eqeqeq */
|
2453 |
-
aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; // If the nodes are siblings, we can do a quick check
|
2454 |
-
} else if (aup === bup) {
|
2455 |
-
return siblingCheck(a, b);
|
2456 |
-
} // Otherwise we need full lists of their ancestors for comparison
|
2457 |
-
|
2458 |
-
|
2459 |
-
cur = a;
|
2460 |
-
|
2461 |
-
while (cur = cur.parentNode) {
|
2462 |
-
ap.unshift(cur);
|
2463 |
-
}
|
2464 |
-
|
2465 |
-
cur = b;
|
2466 |
-
|
2467 |
-
while (cur = cur.parentNode) {
|
2468 |
-
bp.unshift(cur);
|
2469 |
-
} // Walk down the tree looking for a discrepancy
|
2470 |
-
|
2471 |
-
|
2472 |
-
while (ap[i] === bp[i]) {
|
2473 |
-
i++;
|
2474 |
-
}
|
2475 |
-
|
2476 |
-
return i ? // Do a sibling check if the nodes have a common ancestor
|
2477 |
-
siblingCheck(ap[i], bp[i]) : // Otherwise nodes in our document sort first
|
2478 |
-
// Support: IE 11+, Edge 17 - 18+
|
2479 |
-
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
2480 |
-
// two documents; shallow comparisons work.
|
2481 |
-
|
2482 |
-
/* eslint-disable eqeqeq */
|
2483 |
-
ap[i] == preferredDoc ? -1 : bp[i] == preferredDoc ? 1 :
|
2484 |
-
/* eslint-enable eqeqeq */
|
2485 |
-
0;
|
2486 |
-
};
|
2487 |
-
return document;
|
2488 |
-
};
|
2489 |
-
|
2490 |
-
Sizzle.matches = function (expr, elements) {
|
2491 |
-
return Sizzle(expr, null, null, elements);
|
2492 |
-
};
|
2493 |
-
|
2494 |
-
Sizzle.matchesSelector = function (elem, expr) {
|
2495 |
-
setDocument(elem);
|
2496 |
-
|
2497 |
-
if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {
|
2498 |
-
try {
|
2499 |
-
var ret = matches.call(elem, expr); // IE 9's matchesSelector returns false on disconnected nodes
|
2500 |
-
|
2501 |
-
if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document
|
2502 |
-
// fragment in IE 9
|
2503 |
-
elem.document && elem.document.nodeType !== 11) {
|
2504 |
-
return ret;
|
2505 |
-
}
|
2506 |
-
} catch (e) {
|
2507 |
-
nonnativeSelectorCache(expr, true);
|
2508 |
-
}
|
2509 |
-
}
|
2510 |
-
|
2511 |
-
return Sizzle(expr, document, null, [elem]).length > 0;
|
2512 |
-
};
|
2513 |
-
|
2514 |
-
Sizzle.contains = function (context, elem) {
|
2515 |
-
// Set document vars if needed
|
2516 |
-
// Support: IE 11+, Edge 17 - 18+
|
2517 |
-
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
2518 |
-
// two documents; shallow comparisons work.
|
2519 |
-
// eslint-disable-next-line eqeqeq
|
2520 |
-
if ((context.ownerDocument || context) != document) {
|
2521 |
-
setDocument(context);
|
2522 |
-
}
|
2523 |
-
|
2524 |
-
return contains(context, elem);
|
2525 |
-
};
|
2526 |
-
|
2527 |
-
Sizzle.attr = function (elem, name) {
|
2528 |
-
// Set document vars if needed
|
2529 |
-
// Support: IE 11+, Edge 17 - 18+
|
2530 |
-
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
2531 |
-
// two documents; shallow comparisons work.
|
2532 |
-
// eslint-disable-next-line eqeqeq
|
2533 |
-
if ((elem.ownerDocument || elem) != document) {
|
2534 |
-
setDocument(elem);
|
2535 |
-
}
|
2536 |
-
|
2537 |
-
var fn = Expr.attrHandle[name.toLowerCase()],
|
2538 |
-
// Don't get fooled by Object.prototype properties (jQuery #13807)
|
2539 |
-
val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;
|
2540 |
-
return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
|
2541 |
-
};
|
2542 |
-
|
2543 |
-
Sizzle.escape = function (sel) {
|
2544 |
-
return (sel + "").replace(rcssescape, fcssescape);
|
2545 |
-
};
|
2546 |
-
|
2547 |
-
Sizzle.error = function (msg) {
|
2548 |
-
throw new Error("Syntax error, unrecognized expression: " + msg);
|
2549 |
-
};
|
2550 |
-
/**
|
2551 |
-
* Document sorting and removing duplicates
|
2552 |
-
* @param {ArrayLike} results
|
2553 |
-
*/
|
2554 |
-
|
2555 |
-
|
2556 |
-
Sizzle.uniqueSort = function (results) {
|
2557 |
-
var elem,
|
2558 |
-
duplicates = [],
|
2559 |
-
j = 0,
|
2560 |
-
i = 0; // Unless we *know* we can detect duplicates, assume their presence
|
2561 |
-
|
2562 |
-
hasDuplicate = !support.detectDuplicates;
|
2563 |
-
sortInput = !support.sortStable && results.slice(0);
|
2564 |
-
results.sort(sortOrder);
|
2565 |
-
|
2566 |
-
if (hasDuplicate) {
|
2567 |
-
while (elem = results[i++]) {
|
2568 |
-
if (elem === results[i]) {
|
2569 |
-
j = duplicates.push(i);
|
2570 |
-
}
|
2571 |
-
}
|
2572 |
-
|
2573 |
-
while (j--) {
|
2574 |
-
results.splice(duplicates[j], 1);
|
2575 |
-
}
|
2576 |
-
} // Clear input after sorting to release objects
|
2577 |
-
// See https://github.com/jquery/sizzle/pull/225
|
2578 |
-
|
2579 |
-
|
2580 |
-
sortInput = null;
|
2581 |
-
return results;
|
2582 |
-
};
|
2583 |
-
/**
|
2584 |
-
* Utility function for retrieving the text value of an array of DOM nodes
|
2585 |
-
* @param {Array|Element} elem
|
2586 |
-
*/
|
2587 |
-
|
2588 |
-
|
2589 |
-
getText = Sizzle.getText = function (elem) {
|
2590 |
-
var node,
|
2591 |
-
ret = "",
|
2592 |
-
i = 0,
|
2593 |
-
nodeType = elem.nodeType;
|
2594 |
-
|
2595 |
-
if (!nodeType) {
|
2596 |
-
// If no nodeType, this is expected to be an array
|
2597 |
-
while (node = elem[i++]) {
|
2598 |
-
// Do not traverse comment nodes
|
2599 |
-
ret += getText(node);
|
2600 |
-
}
|
2601 |
-
} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
|
2602 |
-
// Use textContent for elements
|
2603 |
-
// innerText usage removed for consistency of new lines (jQuery #11153)
|
2604 |
-
if (typeof elem.textContent === "string") {
|
2605 |
-
return elem.textContent;
|
2606 |
-
} else {
|
2607 |
-
// Traverse its children
|
2608 |
-
for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
|
2609 |
-
ret += getText(elem);
|
2610 |
-
}
|
2611 |
-
}
|
2612 |
-
} else if (nodeType === 3 || nodeType === 4) {
|
2613 |
-
return elem.nodeValue;
|
2614 |
-
} // Do not include comment or processing instruction nodes
|
2615 |
-
|
2616 |
-
|
2617 |
-
return ret;
|
2618 |
-
};
|
2619 |
-
|
2620 |
-
Expr = Sizzle.selectors = {
|
2621 |
-
// Can be adjusted by the user
|
2622 |
-
cacheLength: 50,
|
2623 |
-
createPseudo: markFunction,
|
2624 |
-
match: matchExpr,
|
2625 |
-
attrHandle: {},
|
2626 |
-
find: {},
|
2627 |
-
relative: {
|
2628 |
-
">": {
|
2629 |
-
dir: "parentNode",
|
2630 |
-
first: true
|
2631 |
-
},
|
2632 |
-
" ": {
|
2633 |
-
dir: "parentNode"
|
2634 |
-
},
|
2635 |
-
"+": {
|
2636 |
-
dir: "previousSibling",
|
2637 |
-
first: true
|
2638 |
-
},
|
2639 |
-
"~": {
|
2640 |
-
dir: "previousSibling"
|
2641 |
-
}
|
2642 |
-
},
|
2643 |
-
preFilter: {
|
2644 |
-
"ATTR": function ATTR(match) {
|
2645 |
-
match[1] = match[1].replace(runescape, funescape); // Move the given value to match[3] whether quoted or unquoted
|
2646 |
-
|
2647 |
-
match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape);
|
2648 |
-
|
2649 |
-
if (match[2] === "~=") {
|
2650 |
-
match[3] = " " + match[3] + " ";
|
2651 |
-
}
|
2652 |
-
|
2653 |
-
return match.slice(0, 4);
|
2654 |
-
},
|
2655 |
-
"CHILD": function CHILD(match) {
|
2656 |
-
/* matches from matchExpr["CHILD"]
|
2657 |
-
1 type (only|nth|...)
|
2658 |
-
2 what (child|of-type)
|
2659 |
-
3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
|
2660 |
-
4 xn-component of xn+y argument ([+-]?\d*n|)
|
2661 |
-
5 sign of xn-component
|
2662 |
-
6 x of xn-component
|
2663 |
-
7 sign of y-component
|
2664 |
-
8 y of y-component
|
2665 |
-
*/
|
2666 |
-
match[1] = match[1].toLowerCase();
|
2667 |
-
|
2668 |
-
if (match[1].slice(0, 3) === "nth") {
|
2669 |
-
// nth-* requires argument
|
2670 |
-
if (!match[3]) {
|
2671 |
-
Sizzle.error(match[0]);
|
2672 |
-
} // numeric x and y parameters for Expr.filter.CHILD
|
2673 |
-
// remember that false/true cast respectively to 0/1
|
2674 |
-
|
2675 |
-
|
2676 |
-
match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd"));
|
2677 |
-
match[5] = +(match[7] + match[8] || match[3] === "odd"); // other types prohibit arguments
|
2678 |
-
} else if (match[3]) {
|
2679 |
-
Sizzle.error(match[0]);
|
2680 |
-
}
|
2681 |
-
|
2682 |
-
return match;
|
2683 |
-
},
|
2684 |
-
"PSEUDO": function PSEUDO(match) {
|
2685 |
-
var excess,
|
2686 |
-
unquoted = !match[6] && match[2];
|
2687 |
-
|
2688 |
-
if (matchExpr["CHILD"].test(match[0])) {
|
2689 |
-
return null;
|
2690 |
-
} // Accept quoted arguments as-is
|
2691 |
-
|
2692 |
-
|
2693 |
-
if (match[3]) {
|
2694 |
-
match[2] = match[4] || match[5] || ""; // Strip excess characters from unquoted arguments
|
2695 |
-
} else if (unquoted && rpseudo.test(unquoted) && ( // Get excess from tokenize (recursively)
|
2696 |
-
excess = tokenize(unquoted, true)) && ( // advance to the next closing parenthesis
|
2697 |
-
excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
|
2698 |
-
// excess is a negative index
|
2699 |
-
match[0] = match[0].slice(0, excess);
|
2700 |
-
match[2] = unquoted.slice(0, excess);
|
2701 |
-
} // Return only captures needed by the pseudo filter method (type and argument)
|
2702 |
-
|
2703 |
-
|
2704 |
-
return match.slice(0, 3);
|
2705 |
-
}
|
2706 |
-
},
|
2707 |
-
filter: {
|
2708 |
-
"TAG": function TAG(nodeNameSelector) {
|
2709 |
-
var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
|
2710 |
-
return nodeNameSelector === "*" ? function () {
|
2711 |
-
return true;
|
2712 |
-
} : function (elem) {
|
2713 |
-
return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
|
2714 |
-
};
|
2715 |
-
},
|
2716 |
-
"CLASS": function CLASS(className) {
|
2717 |
-
var pattern = classCache[className + " "];
|
2718 |
-
return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function (elem) {
|
2719 |
-
return pattern.test(typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "");
|
2720 |
-
});
|
2721 |
-
},
|
2722 |
-
"ATTR": function ATTR(name, operator, check) {
|
2723 |
-
return function (elem) {
|
2724 |
-
var result = Sizzle.attr(elem, name);
|
2725 |
-
|
2726 |
-
if (result == null) {
|
2727 |
-
return operator === "!=";
|
2728 |
-
}
|
2729 |
-
|
2730 |
-
if (!operator) {
|
2731 |
-
return true;
|
2732 |
-
}
|
2733 |
-
|
2734 |
-
result += "";
|
2735 |
-
/* eslint-disable max-len */
|
2736 |
-
|
2737 |
-
return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf(check) === 0 : operator === "*=" ? check && result.indexOf(check) > -1 : operator === "$=" ? check && result.slice(-check.length) === check : operator === "~=" ? (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1 : operator === "|=" ? result === check || result.slice(0, check.length + 1) === check + "-" : false;
|
2738 |
-
/* eslint-enable max-len */
|
2739 |
-
};
|
2740 |
-
},
|
2741 |
-
"CHILD": function CHILD(type, what, _argument, first, last) {
|
2742 |
-
var simple = type.slice(0, 3) !== "nth",
|
2743 |
-
forward = type.slice(-4) !== "last",
|
2744 |
-
ofType = what === "of-type";
|
2745 |
-
return first === 1 && last === 0 ? // Shortcut for :nth-*(n)
|
2746 |
-
function (elem) {
|
2747 |
-
return !!elem.parentNode;
|
2748 |
-
} : function (elem, _context, xml) {
|
2749 |
-
var cache,
|
2750 |
-
uniqueCache,
|
2751 |
-
outerCache,
|
2752 |
-
node,
|
2753 |
-
nodeIndex,
|
2754 |
-
start,
|
2755 |
-
dir = simple !== forward ? "nextSibling" : "previousSibling",
|
2756 |
-
parent = elem.parentNode,
|
2757 |
-
name = ofType && elem.nodeName.toLowerCase(),
|
2758 |
-
useCache = !xml && !ofType,
|
2759 |
-
diff = false;
|
2760 |
-
|
2761 |
-
if (parent) {
|
2762 |
-
// :(first|last|only)-(child|of-type)
|
2763 |
-
if (simple) {
|
2764 |
-
while (dir) {
|
2765 |
-
node = elem;
|
2766 |
-
|
2767 |
-
while (node = node[dir]) {
|
2768 |
-
if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {
|
2769 |
-
return false;
|
2770 |
-
}
|
2771 |
-
} // Reverse direction for :only-* (if we haven't yet done so)
|
2772 |
-
|
2773 |
-
|
2774 |
-
start = dir = type === "only" && !start && "nextSibling";
|
2775 |
-
}
|
2776 |
-
|
2777 |
-
return true;
|
2778 |
-
}
|
2779 |
-
|
2780 |
-
start = [forward ? parent.firstChild : parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`
|
2781 |
-
|
2782 |
-
if (forward && useCache) {
|
2783 |
-
// Seek `elem` from a previously-cached index
|
2784 |
-
// ...in a gzip-friendly way
|
2785 |
-
node = parent;
|
2786 |
-
outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only
|
2787 |
-
// Defend against cloned attroperties (jQuery gh-1709)
|
2788 |
-
|
2789 |
-
uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
|
2790 |
-
cache = uniqueCache[type] || [];
|
2791 |
-
nodeIndex = cache[0] === dirruns && cache[1];
|
2792 |
-
diff = nodeIndex && cache[2];
|
2793 |
-
node = nodeIndex && parent.childNodes[nodeIndex];
|
2794 |
-
|
2795 |
-
while (node = ++nodeIndex && node && node[dir] || ( // Fallback to seeking `elem` from the start
|
2796 |
-
diff = nodeIndex = 0) || start.pop()) {
|
2797 |
-
// When found, cache indexes on `parent` and break
|
2798 |
-
if (node.nodeType === 1 && ++diff && node === elem) {
|
2799 |
-
uniqueCache[type] = [dirruns, nodeIndex, diff];
|
2800 |
-
break;
|
2801 |
-
}
|
2802 |
-
}
|
2803 |
-
} else {
|
2804 |
-
// Use previously-cached element index if available
|
2805 |
-
if (useCache) {
|
2806 |
-
// ...in a gzip-friendly way
|
2807 |
-
node = elem;
|
2808 |
-
outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only
|
2809 |
-
// Defend against cloned attroperties (jQuery gh-1709)
|
2810 |
-
|
2811 |
-
uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
|
2812 |
-
cache = uniqueCache[type] || [];
|
2813 |
-
nodeIndex = cache[0] === dirruns && cache[1];
|
2814 |
-
diff = nodeIndex;
|
2815 |
-
} // xml :nth-child(...)
|
2816 |
-
// or :nth-last-child(...) or :nth(-last)?-of-type(...)
|
2817 |
-
|
2818 |
-
|
2819 |
-
if (diff === false) {
|
2820 |
-
// Use the same loop as above to seek `elem` from the start
|
2821 |
-
while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {
|
2822 |
-
if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {
|
2823 |
-
// Cache the index of each encountered element
|
2824 |
-
if (useCache) {
|
2825 |
-
outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only
|
2826 |
-
// Defend against cloned attroperties (jQuery gh-1709)
|
2827 |
-
|
2828 |
-
uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
|
2829 |
-
uniqueCache[type] = [dirruns, diff];
|
2830 |
-
}
|
2831 |
-
|
2832 |
-
if (node === elem) {
|
2833 |
-
break;
|
2834 |
-
}
|
2835 |
-
}
|
2836 |
-
}
|
2837 |
-
}
|
2838 |
-
} // Incorporate the offset, then check against cycle size
|
2839 |
-
|
2840 |
-
|
2841 |
-
diff -= last;
|
2842 |
-
return diff === first || diff % first === 0 && diff / first >= 0;
|
2843 |
-
}
|
2844 |
-
};
|
2845 |
-
},
|
2846 |
-
"PSEUDO": function PSEUDO(pseudo, argument) {
|
2847 |
-
// pseudo-class names are case-insensitive
|
2848 |
-
// http://www.w3.org/TR/selectors/#pseudo-classes
|
2849 |
-
// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
|
2850 |
-
// Remember that setFilters inherits from pseudos
|
2851 |
-
var args,
|
2852 |
-
fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error("unsupported pseudo: " + pseudo); // The user may use createPseudo to indicate that
|
2853 |
-
// arguments are needed to create the filter function
|
2854 |
-
// just as Sizzle does
|
2855 |
-
|
2856 |
-
if (fn[expando]) {
|
2857 |
-
return fn(argument);
|
2858 |
-
} // But maintain support for old signatures
|
2859 |
-
|
2860 |
-
|
2861 |
-
if (fn.length > 1) {
|
2862 |
-
args = [pseudo, pseudo, "", argument];
|
2863 |
-
return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {
|
2864 |
-
var idx,
|
2865 |
-
matched = fn(seed, argument),
|
2866 |
-
i = matched.length;
|
2867 |
-
|
2868 |
-
while (i--) {
|
2869 |
-
idx = indexOf(seed, matched[i]);
|
2870 |
-
seed[idx] = !(matches[idx] = matched[i]);
|
2871 |
-
}
|
2872 |
-
}) : function (elem) {
|
2873 |
-
return fn(elem, 0, args);
|
2874 |
-
};
|
2875 |
-
}
|
2876 |
-
|
2877 |
-
return fn;
|
2878 |
-
}
|
2879 |
-
},
|
2880 |
-
pseudos: {
|
2881 |
-
// Potentially complex pseudos
|
2882 |
-
"not": markFunction(function (selector) {
|
2883 |
-
// Trim the selector passed to compile
|
2884 |
-
// to avoid treating leading and trailing
|
2885 |
-
// spaces as combinators
|
2886 |
-
var input = [],
|
2887 |
-
results = [],
|
2888 |
-
matcher = compile(selector.replace(rtrim, "$1"));
|
2889 |
-
return matcher[expando] ? markFunction(function (seed, matches, _context, xml) {
|
2890 |
-
var elem,
|
2891 |
-
unmatched = matcher(seed, null, xml, []),
|
2892 |
-
i = seed.length; // Match elements unmatched by `matcher`
|
2893 |
-
|
2894 |
-
while (i--) {
|
2895 |
-
if (elem = unmatched[i]) {
|
2896 |
-
seed[i] = !(matches[i] = elem);
|
2897 |
-
}
|
2898 |
-
}
|
2899 |
-
}) : function (elem, _context, xml) {
|
2900 |
-
input[0] = elem;
|
2901 |
-
matcher(input, null, xml, results); // Don't keep the element (issue #299)
|
2902 |
-
|
2903 |
-
input[0] = null;
|
2904 |
-
return !results.pop();
|
2905 |
-
};
|
2906 |
-
}),
|
2907 |
-
"has": markFunction(function (selector) {
|
2908 |
-
return function (elem) {
|
2909 |
-
return Sizzle(selector, elem).length > 0;
|
2910 |
-
};
|
2911 |
-
}),
|
2912 |
-
"contains": markFunction(function (text) {
|
2913 |
-
text = text.replace(runescape, funescape);
|
2914 |
-
return function (elem) {
|
2915 |
-
return (elem.textContent || getText(elem)).indexOf(text) > -1;
|
2916 |
-
};
|
2917 |
-
}),
|
2918 |
-
// "Whether an element is represented by a :lang() selector
|
2919 |
-
// is based solely on the element's language value
|
2920 |
-
// being equal to the identifier C,
|
2921 |
-
// or beginning with the identifier C immediately followed by "-".
|
2922 |
-
// The matching of C against the element's language value is performed case-insensitively.
|
2923 |
-
// The identifier C does not have to be a valid language name."
|
2924 |
-
// http://www.w3.org/TR/selectors/#lang-pseudo
|
2925 |
-
"lang": markFunction(function (lang) {
|
2926 |
-
// lang value must be a valid identifier
|
2927 |
-
if (!ridentifier.test(lang || "")) {
|
2928 |
-
Sizzle.error("unsupported lang: " + lang);
|
2929 |
-
}
|
2930 |
-
|
2931 |
-
lang = lang.replace(runescape, funescape).toLowerCase();
|
2932 |
-
return function (elem) {
|
2933 |
-
var elemLang;
|
2934 |
-
|
2935 |
-
do {
|
2936 |
-
if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) {
|
2937 |
-
elemLang = elemLang.toLowerCase();
|
2938 |
-
return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
|
2939 |
-
}
|
2940 |
-
} while ((elem = elem.parentNode) && elem.nodeType === 1);
|
2941 |
-
|
2942 |
-
return false;
|
2943 |
-
};
|
2944 |
-
}),
|
2945 |
-
// Miscellaneous
|
2946 |
-
"target": function target(elem) {
|
2947 |
-
var hash = window.location && window.location.hash;
|
2948 |
-
return hash && hash.slice(1) === elem.id;
|
2949 |
-
},
|
2950 |
-
"root": function root(elem) {
|
2951 |
-
return elem === docElem;
|
2952 |
-
},
|
2953 |
-
"focus": function focus(elem) {
|
2954 |
-
return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
|
2955 |
-
},
|
2956 |
-
// Boolean properties
|
2957 |
-
"enabled": createDisabledPseudo(false),
|
2958 |
-
"disabled": createDisabledPseudo(true),
|
2959 |
-
"checked": function checked(elem) {
|
2960 |
-
// In CSS3, :checked should return both checked and selected elements
|
2961 |
-
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
|
2962 |
-
var nodeName = elem.nodeName.toLowerCase();
|
2963 |
-
return nodeName === "input" && !!elem.checked || nodeName === "option" && !!elem.selected;
|
2964 |
-
},
|
2965 |
-
"selected": function selected(elem) {
|
2966 |
-
// Accessing this property makes selected-by-default
|
2967 |
-
// options in Safari work properly
|
2968 |
-
if (elem.parentNode) {
|
2969 |
-
// eslint-disable-next-line no-unused-expressions
|
2970 |
-
elem.parentNode.selectedIndex;
|
2971 |
-
}
|
2972 |
-
|
2973 |
-
return elem.selected === true;
|
2974 |
-
},
|
2975 |
-
// Contents
|
2976 |
-
"empty": function empty(elem) {
|
2977 |
-
// http://www.w3.org/TR/selectors/#empty-pseudo
|
2978 |
-
// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
|
2979 |
-
// but not by others (comment: 8; processing instruction: 7; etc.)
|
2980 |
-
// nodeType < 6 works because attributes (2) do not appear as children
|
2981 |
-
for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
|
2982 |
-
if (elem.nodeType < 6) {
|
2983 |
-
return false;
|
2984 |
-
}
|
2985 |
-
}
|
2986 |
-
|
2987 |
-
return true;
|
2988 |
-
},
|
2989 |
-
"parent": function parent(elem) {
|
2990 |
-
return !Expr.pseudos["empty"](elem);
|
2991 |
-
},
|
2992 |
-
// Element/input types
|
2993 |
-
"header": function header(elem) {
|
2994 |
-
return rheader.test(elem.nodeName);
|
2995 |
-
},
|
2996 |
-
"input": function input(elem) {
|
2997 |
-
return rinputs.test(elem.nodeName);
|
2998 |
-
},
|
2999 |
-
"button": function button(elem) {
|
3000 |
-
var name = elem.nodeName.toLowerCase();
|
3001 |
-
return name === "input" && elem.type === "button" || name === "button";
|
3002 |
-
},
|
3003 |
-
"text": function text(elem) {
|
3004 |
-
var attr;
|
3005 |
-
return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && ( // Support: IE<8
|
3006 |
-
// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
|
3007 |
-
(attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text");
|
3008 |
-
},
|
3009 |
-
// Position-in-collection
|
3010 |
-
"first": createPositionalPseudo(function () {
|
3011 |
-
return [0];
|
3012 |
-
}),
|
3013 |
-
"last": createPositionalPseudo(function (_matchIndexes, length) {
|
3014 |
-
return [length - 1];
|
3015 |
-
}),
|
3016 |
-
"eq": createPositionalPseudo(function (_matchIndexes, length, argument) {
|
3017 |
-
return [argument < 0 ? argument + length : argument];
|
3018 |
-
}),
|
3019 |
-
"even": createPositionalPseudo(function (matchIndexes, length) {
|
3020 |
-
var i = 0;
|
3021 |
-
|
3022 |
-
for (; i < length; i += 2) {
|
3023 |
-
matchIndexes.push(i);
|
3024 |
-
}
|
3025 |
-
|
3026 |
-
return matchIndexes;
|
3027 |
-
}),
|
3028 |
-
"odd": createPositionalPseudo(function (matchIndexes, length) {
|
3029 |
-
var i = 1;
|
3030 |
-
|
3031 |
-
for (; i < length; i += 2) {
|
3032 |
-
matchIndexes.push(i);
|
3033 |
-
}
|
3034 |
-
|
3035 |
-
return matchIndexes;
|
3036 |
-
}),
|
3037 |
-
"lt": createPositionalPseudo(function (matchIndexes, length, argument) {
|
3038 |
-
var i = argument < 0 ? argument + length : argument > length ? length : argument;
|
3039 |
-
|
3040 |
-
for (; --i >= 0;) {
|
3041 |
-
matchIndexes.push(i);
|
3042 |
-
}
|
3043 |
-
|
3044 |
-
return matchIndexes;
|
3045 |
-
}),
|
3046 |
-
"gt": createPositionalPseudo(function (matchIndexes, length, argument) {
|
3047 |
-
var i = argument < 0 ? argument + length : argument;
|
3048 |
-
|
3049 |
-
for (; ++i < length;) {
|
3050 |
-
matchIndexes.push(i);
|
3051 |
-
}
|
3052 |
-
|
3053 |
-
return matchIndexes;
|
3054 |
-
})
|
3055 |
-
}
|
3056 |
-
};
|
3057 |
-
Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Add button/input type pseudos
|
3058 |
-
|
3059 |
-
for (i in {
|
3060 |
-
radio: true,
|
3061 |
-
checkbox: true,
|
3062 |
-
file: true,
|
3063 |
-
password: true,
|
3064 |
-
image: true
|
3065 |
-
}) {
|
3066 |
-
Expr.pseudos[i] = createInputPseudo(i);
|
3067 |
-
}
|
3068 |
-
|
3069 |
-
for (i in {
|
3070 |
-
submit: true,
|
3071 |
-
reset: true
|
3072 |
-
}) {
|
3073 |
-
Expr.pseudos[i] = createButtonPseudo(i);
|
3074 |
-
} // Easy API for creating new setFilters
|
3075 |
-
|
3076 |
-
|
3077 |
-
function setFilters() {}
|
3078 |
-
|
3079 |
-
setFilters.prototype = Expr.filters = Expr.pseudos;
|
3080 |
-
Expr.setFilters = new setFilters();
|
3081 |
-
|
3082 |
-
tokenize = Sizzle.tokenize = function (selector, parseOnly) {
|
3083 |
-
var matched,
|
3084 |
-
match,
|
3085 |
-
tokens,
|
3086 |
-
type,
|
3087 |
-
soFar,
|
3088 |
-
groups,
|
3089 |
-
preFilters,
|
3090 |
-
cached = tokenCache[selector + " "];
|
3091 |
-
|
3092 |
-
if (cached) {
|
3093 |
-
return parseOnly ? 0 : cached.slice(0);
|
3094 |
-
}
|
3095 |
-
|
3096 |
-
soFar = selector;
|
3097 |
-
groups = [];
|
3098 |
-
preFilters = Expr.preFilter;
|
3099 |
-
|
3100 |
-
while (soFar) {
|
3101 |
-
// Comma and first run
|
3102 |
-
if (!matched || (match = rcomma.exec(soFar))) {
|
3103 |
-
if (match) {
|
3104 |
-
// Don't consume trailing commas as valid
|
3105 |
-
soFar = soFar.slice(match[0].length) || soFar;
|
3106 |
-
}
|
3107 |
-
|
3108 |
-
groups.push(tokens = []);
|
3109 |
-
}
|
3110 |
-
|
3111 |
-
matched = false; // Combinators
|
3112 |
-
|
3113 |
-
if (match = rcombinators.exec(soFar)) {
|
3114 |
-
matched = match.shift();
|
3115 |
-
tokens.push({
|
3116 |
-
value: matched,
|
3117 |
-
// Cast descendant combinators to space
|
3118 |
-
type: match[0].replace(rtrim, " ")
|
3119 |
-
});
|
3120 |
-
soFar = soFar.slice(matched.length);
|
3121 |
-
} // Filters
|
3122 |
-
|
3123 |
-
|
3124 |
-
for (type in Expr.filter) {
|
3125 |
-
if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
|
3126 |
-
matched = match.shift();
|
3127 |
-
tokens.push({
|
3128 |
-
value: matched,
|
3129 |
-
type: type,
|
3130 |
-
matches: match
|
3131 |
-
});
|
3132 |
-
soFar = soFar.slice(matched.length);
|
3133 |
-
}
|
3134 |
-
}
|
3135 |
-
|
3136 |
-
if (!matched) {
|
3137 |
-
break;
|
3138 |
-
}
|
3139 |
-
} // Return the length of the invalid excess
|
3140 |
-
// if we're just parsing
|
3141 |
-
// Otherwise, throw an error or return tokens
|
3142 |
-
|
3143 |
-
|
3144 |
-
return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : // Cache the tokens
|
3145 |
-
tokenCache(selector, groups).slice(0);
|
3146 |
-
};
|
3147 |
-
|
3148 |
-
function toSelector(tokens) {
|
3149 |
-
var i = 0,
|
3150 |
-
len = tokens.length,
|
3151 |
-
selector = "";
|
3152 |
-
|
3153 |
-
for (; i < len; i++) {
|
3154 |
-
selector += tokens[i].value;
|
3155 |
-
}
|
3156 |
-
|
3157 |
-
return selector;
|
3158 |
-
}
|
3159 |
-
|
3160 |
-
function addCombinator(matcher, combinator, base) {
|
3161 |
-
var dir = combinator.dir,
|
3162 |
-
skip = combinator.next,
|
3163 |
-
key = skip || dir,
|
3164 |
-
checkNonElements = base && key === "parentNode",
|
3165 |
-
doneName = done++;
|
3166 |
-
return combinator.first ? // Check against closest ancestor/preceding element
|
3167 |
-
function (elem, context, xml) {
|
3168 |
-
while (elem = elem[dir]) {
|
3169 |
-
if (elem.nodeType === 1 || checkNonElements) {
|
3170 |
-
return matcher(elem, context, xml);
|
3171 |
-
}
|
3172 |
-
}
|
3173 |
-
|
3174 |
-
return false;
|
3175 |
-
} : // Check against all ancestor/preceding elements
|
3176 |
-
function (elem, context, xml) {
|
3177 |
-
var oldCache,
|
3178 |
-
uniqueCache,
|
3179 |
-
outerCache,
|
3180 |
-
newCache = [dirruns, doneName]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
|
3181 |
-
|
3182 |
-
if (xml) {
|
3183 |
-
while (elem = elem[dir]) {
|
3184 |
-
if (elem.nodeType === 1 || checkNonElements) {
|
3185 |
-
if (matcher(elem, context, xml)) {
|
3186 |
-
return true;
|
3187 |
-
}
|
3188 |
-
}
|
3189 |
-
}
|
3190 |
-
} else {
|
3191 |
-
while (elem = elem[dir]) {
|
3192 |
-
if (elem.nodeType === 1 || checkNonElements) {
|
3193 |
-
outerCache = elem[expando] || (elem[expando] = {}); // Support: IE <9 only
|
3194 |
-
// Defend against cloned attroperties (jQuery gh-1709)
|
3195 |
-
|
3196 |
-
uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});
|
3197 |
-
|
3198 |
-
if (skip && skip === elem.nodeName.toLowerCase()) {
|
3199 |
-
elem = elem[dir] || elem;
|
3200 |
-
} else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {
|
3201 |
-
// Assign to newCache so results back-propagate to previous elements
|
3202 |
-
return newCache[2] = oldCache[2];
|
3203 |
-
} else {
|
3204 |
-
// Reuse newcache so results back-propagate to previous elements
|
3205 |
-
uniqueCache[key] = newCache; // A match means we're done; a fail means we have to keep checking
|
3206 |
-
|
3207 |
-
if (newCache[2] = matcher(elem, context, xml)) {
|
3208 |
-
return true;
|
3209 |
-
}
|
3210 |
-
}
|
3211 |
-
}
|
3212 |
-
}
|
3213 |
-
}
|
3214 |
-
|
3215 |
-
return false;
|
3216 |
-
};
|
3217 |
-
}
|
3218 |
-
|
3219 |
-
function elementMatcher(matchers) {
|
3220 |
-
return matchers.length > 1 ? function (elem, context, xml) {
|
3221 |
-
var i = matchers.length;
|
3222 |
-
|
3223 |
-
while (i--) {
|
3224 |
-
if (!matchers[i](elem, context, xml)) {
|
3225 |
-
return false;
|
3226 |
-
}
|
3227 |
-
}
|
3228 |
-
|
3229 |
-
return true;
|
3230 |
-
} : matchers[0];
|
3231 |
-
}
|
3232 |
-
|
3233 |
-
function multipleContexts(selector, contexts, results) {
|
3234 |
-
var i = 0,
|
3235 |
-
len = contexts.length;
|
3236 |
-
|
3237 |
-
for (; i < len; i++) {
|
3238 |
-
Sizzle(selector, contexts[i], results);
|
3239 |
-
}
|
3240 |
-
|
3241 |
-
return results;
|
3242 |
-
}
|
3243 |
-
|
3244 |
-
function condense(unmatched, map, filter, context, xml) {
|
3245 |
-
var elem,
|
3246 |
-
newUnmatched = [],
|
3247 |
-
i = 0,
|
3248 |
-
len = unmatched.length,
|
3249 |
-
mapped = map != null;
|
3250 |
-
|
3251 |
-
for (; i < len; i++) {
|
3252 |
-
if (elem = unmatched[i]) {
|
3253 |
-
if (!filter || filter(elem, context, xml)) {
|
3254 |
-
newUnmatched.push(elem);
|
3255 |
-
|
3256 |
-
if (mapped) {
|
3257 |
-
map.push(i);
|
3258 |
-
}
|
3259 |
-
}
|
3260 |
-
}
|
3261 |
-
}
|
3262 |
-
|
3263 |
-
return newUnmatched;
|
3264 |
-
}
|
3265 |
-
|
3266 |
-
function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
|
3267 |
-
if (postFilter && !postFilter[expando]) {
|
3268 |
-
postFilter = setMatcher(postFilter);
|
3269 |
-
}
|
3270 |
-
|
3271 |
-
if (postFinder && !postFinder[expando]) {
|
3272 |
-
postFinder = setMatcher(postFinder, postSelector);
|
3273 |
-
}
|
3274 |
-
|
3275 |
-
return markFunction(function (seed, results, context, xml) {
|
3276 |
-
var temp,
|
3277 |
-
i,
|
3278 |
-
elem,
|
3279 |
-
preMap = [],
|
3280 |
-
postMap = [],
|
3281 |
-
preexisting = results.length,
|
3282 |
-
// Get initial elements from seed or context
|
3283 |
-
elems = seed || multipleContexts(selector || "*", context.nodeType ? [context] : context, []),
|
3284 |
-
// Prefilter to get matcher input, preserving a map for seed-results synchronization
|
3285 |
-
matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,
|
3286 |
-
matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
|
3287 |
-
postFinder || (seed ? preFilter : preexisting || postFilter) ? // ...intermediate processing is necessary
|
3288 |
-
[] : // ...otherwise use results directly
|
3289 |
-
results : matcherIn; // Find primary matches
|
3290 |
-
|
3291 |
-
if (matcher) {
|
3292 |
-
matcher(matcherIn, matcherOut, context, xml);
|
3293 |
-
} // Apply postFilter
|
3294 |
-
|
3295 |
-
|
3296 |
-
if (postFilter) {
|
3297 |
-
temp = condense(matcherOut, postMap);
|
3298 |
-
postFilter(temp, [], context, xml); // Un-match failing elements by moving them back to matcherIn
|
3299 |
-
|
3300 |
-
i = temp.length;
|
3301 |
-
|
3302 |
-
while (i--) {
|
3303 |
-
if (elem = temp[i]) {
|
3304 |
-
matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);
|
3305 |
-
}
|
3306 |
-
}
|
3307 |
-
}
|
3308 |
-
|
3309 |
-
if (seed) {
|
3310 |
-
if (postFinder || preFilter) {
|
3311 |
-
if (postFinder) {
|
3312 |
-
// Get the final matcherOut by condensing this intermediate into postFinder contexts
|
3313 |
-
temp = [];
|
3314 |
-
i = matcherOut.length;
|
3315 |
-
|
3316 |
-
while (i--) {
|
3317 |
-
if (elem = matcherOut[i]) {
|
3318 |
-
// Restore matcherIn since elem is not yet a final match
|
3319 |
-
temp.push(matcherIn[i] = elem);
|
3320 |
-
}
|
3321 |
-
}
|
3322 |
-
|
3323 |
-
postFinder(null, matcherOut = [], temp, xml);
|
3324 |
-
} // Move matched elements from seed to results to keep them synchronized
|
3325 |
-
|
3326 |
-
|
3327 |
-
i = matcherOut.length;
|
3328 |
-
|
3329 |
-
while (i--) {
|
3330 |
-
if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {
|
3331 |
-
seed[temp] = !(results[temp] = elem);
|
3332 |
-
}
|
3333 |
-
}
|
3334 |
-
} // Add elements to results, through postFinder if defined
|
3335 |
-
|
3336 |
-
} else {
|
3337 |
-
matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);
|
3338 |
-
|
3339 |
-
if (postFinder) {
|
3340 |
-
postFinder(null, results, matcherOut, xml);
|
3341 |
-
} else {
|
3342 |
-
push.apply(results, matcherOut);
|
3343 |
-
}
|
3344 |
-
}
|
3345 |
-
});
|
3346 |
-
}
|
3347 |
-
|
3348 |
-
function matcherFromTokens(tokens) {
|
3349 |
-
var checkContext,
|
3350 |
-
matcher,
|
3351 |
-
j,
|
3352 |
-
len = tokens.length,
|
3353 |
-
leadingRelative = Expr.relative[tokens[0].type],
|
3354 |
-
implicitRelative = leadingRelative || Expr.relative[" "],
|
3355 |
-
i = leadingRelative ? 1 : 0,
|
3356 |
-
// The foundational matcher ensures that elements are reachable from top-level context(s)
|
3357 |
-
matchContext = addCombinator(function (elem) {
|
3358 |
-
return elem === checkContext;
|
3359 |
-
}, implicitRelative, true),
|
3360 |
-
matchAnyContext = addCombinator(function (elem) {
|
3361 |
-
return indexOf(checkContext, elem) > -1;
|
3362 |
-
}, implicitRelative, true),
|
3363 |
-
matchers = [function (elem, context, xml) {
|
3364 |
-
var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); // Avoid hanging onto element (issue #299)
|
3365 |
-
|
3366 |
-
checkContext = null;
|
3367 |
-
return ret;
|
3368 |
-
}];
|
3369 |
-
|
3370 |
-
for (; i < len; i++) {
|
3371 |
-
if (matcher = Expr.relative[tokens[i].type]) {
|
3372 |
-
matchers = [addCombinator(elementMatcher(matchers), matcher)];
|
3373 |
-
} else {
|
3374 |
-
matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); // Return special upon seeing a positional matcher
|
3375 |
-
|
3376 |
-
if (matcher[expando]) {
|
3377 |
-
// Find the next relative operator (if any) for proper handling
|
3378 |
-
j = ++i;
|
3379 |
-
|
3380 |
-
for (; j < len; j++) {
|
3381 |
-
if (Expr.relative[tokens[j].type]) {
|
3382 |
-
break;
|
3383 |
-
}
|
3384 |
-
}
|
3385 |
-
|
3386 |
-
return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*`
|
3387 |
-
tokens.slice(0, i - 1).concat({
|
3388 |
-
value: tokens[i - 2].type === " " ? "*" : ""
|
3389 |
-
})).replace(rtrim, "$1"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));
|
3390 |
-
}
|
3391 |
-
|
3392 |
-
matchers.push(matcher);
|
3393 |
-
}
|
3394 |
-
}
|
3395 |
-
|
3396 |
-
return elementMatcher(matchers);
|
3397 |
-
}
|
3398 |
-
|
3399 |
-
function matcherFromGroupMatchers(elementMatchers, setMatchers) {
|
3400 |
-
var bySet = setMatchers.length > 0,
|
3401 |
-
byElement = elementMatchers.length > 0,
|
3402 |
-
superMatcher = function superMatcher(seed, context, xml, results, outermost) {
|
3403 |
-
var elem,
|
3404 |
-
j,
|
3405 |
-
matcher,
|
3406 |
-
matchedCount = 0,
|
3407 |
-
i = "0",
|
3408 |
-
unmatched = seed && [],
|
3409 |
-
setMatched = [],
|
3410 |
-
contextBackup = outermostContext,
|
3411 |
-
// We must always have either seed elements or outermost context
|
3412 |
-
elems = seed || byElement && Expr.find["TAG"]("*", outermost),
|
3413 |
-
// Use integer dirruns iff this is the outermost matcher
|
3414 |
-
dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,
|
3415 |
-
len = elems.length;
|
3416 |
-
|
3417 |
-
if (outermost) {
|
3418 |
-
// Support: IE 11+, Edge 17 - 18+
|
3419 |
-
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
3420 |
-
// two documents; shallow comparisons work.
|
3421 |
-
// eslint-disable-next-line eqeqeq
|
3422 |
-
outermostContext = context == document || context || outermost;
|
3423 |
-
} // Add elements passing elementMatchers directly to results
|
3424 |
-
// Support: IE<9, Safari
|
3425 |
-
// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
|
3426 |
-
|
3427 |
-
|
3428 |
-
for (; i !== len && (elem = elems[i]) != null; i++) {
|
3429 |
-
if (byElement && elem) {
|
3430 |
-
j = 0; // Support: IE 11+, Edge 17 - 18+
|
3431 |
-
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
3432 |
-
// two documents; shallow comparisons work.
|
3433 |
-
// eslint-disable-next-line eqeqeq
|
3434 |
-
|
3435 |
-
if (!context && elem.ownerDocument != document) {
|
3436 |
-
setDocument(elem);
|
3437 |
-
xml = !documentIsHTML;
|
3438 |
-
}
|
3439 |
-
|
3440 |
-
while (matcher = elementMatchers[j++]) {
|
3441 |
-
if (matcher(elem, context || document, xml)) {
|
3442 |
-
results.push(elem);
|
3443 |
-
break;
|
3444 |
-
}
|
3445 |
-
}
|
3446 |
-
|
3447 |
-
if (outermost) {
|
3448 |
-
dirruns = dirrunsUnique;
|
3449 |
-
}
|
3450 |
-
} // Track unmatched elements for set filters
|
3451 |
-
|
3452 |
-
|
3453 |
-
if (bySet) {
|
3454 |
-
// They will have gone through all possible matchers
|
3455 |
-
if (elem = !matcher && elem) {
|
3456 |
-
matchedCount--;
|
3457 |
-
} // Lengthen the array for every element, matched or not
|
3458 |
-
|
3459 |
-
|
3460 |
-
if (seed) {
|
3461 |
-
unmatched.push(elem);
|
3462 |
-
}
|
3463 |
-
}
|
3464 |
-
} // `i` is now the count of elements visited above, and adding it to `matchedCount`
|
3465 |
-
// makes the latter nonnegative.
|
3466 |
-
|
3467 |
-
|
3468 |
-
matchedCount += i; // Apply set filters to unmatched elements
|
3469 |
-
// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
|
3470 |
-
// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
|
3471 |
-
// no element matchers and no seed.
|
3472 |
-
// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
|
3473 |
-
// case, which will result in a "00" `matchedCount` that differs from `i` but is also
|
3474 |
-
// numerically zero.
|
3475 |
-
|
3476 |
-
if (bySet && i !== matchedCount) {
|
3477 |
-
j = 0;
|
3478 |
-
|
3479 |
-
while (matcher = setMatchers[j++]) {
|
3480 |
-
matcher(unmatched, setMatched, context, xml);
|
3481 |
-
}
|
3482 |
-
|
3483 |
-
if (seed) {
|
3484 |
-
// Reintegrate element matches to eliminate the need for sorting
|
3485 |
-
if (matchedCount > 0) {
|
3486 |
-
while (i--) {
|
3487 |
-
if (!(unmatched[i] || setMatched[i])) {
|
3488 |
-
setMatched[i] = pop.call(results);
|
3489 |
-
}
|
3490 |
-
}
|
3491 |
-
} // Discard index placeholder values to get only actual matches
|
3492 |
-
|
3493 |
-
|
3494 |
-
setMatched = condense(setMatched);
|
3495 |
-
} // Add matches to results
|
3496 |
-
|
3497 |
-
|
3498 |
-
push.apply(results, setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting
|
3499 |
-
|
3500 |
-
if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
|
3501 |
-
Sizzle.uniqueSort(results);
|
3502 |
-
}
|
3503 |
-
} // Override manipulation of globals by nested matchers
|
3504 |
-
|
3505 |
-
|
3506 |
-
if (outermost) {
|
3507 |
-
dirruns = dirrunsUnique;
|
3508 |
-
outermostContext = contextBackup;
|
3509 |
-
}
|
3510 |
-
|
3511 |
-
return unmatched;
|
3512 |
-
};
|
3513 |
-
|
3514 |
-
return bySet ? markFunction(superMatcher) : superMatcher;
|
3515 |
-
}
|
3516 |
-
|
3517 |
-
compile = Sizzle.compile = function (selector, match
|
3518 |
-
/* Internal Use Only */
|
3519 |
-
) {
|
3520 |
-
var i,
|
3521 |
-
setMatchers = [],
|
3522 |
-
elementMatchers = [],
|
3523 |
-
cached = compilerCache[selector + " "];
|
3524 |
-
|
3525 |
-
if (!cached) {
|
3526 |
-
// Generate a function of recursive functions that can be used to check each element
|
3527 |
-
if (!match) {
|
3528 |
-
match = tokenize(selector);
|
3529 |
-
}
|
3530 |
-
|
3531 |
-
i = match.length;
|
3532 |
-
|
3533 |
-
while (i--) {
|
3534 |
-
cached = matcherFromTokens(match[i]);
|
3535 |
-
|
3536 |
-
if (cached[expando]) {
|
3537 |
-
setMatchers.push(cached);
|
3538 |
-
} else {
|
3539 |
-
elementMatchers.push(cached);
|
3540 |
-
}
|
3541 |
-
} // Cache the compiled function
|
3542 |
-
|
3543 |
-
|
3544 |
-
cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); // Save selector and tokenization
|
3545 |
-
|
3546 |
-
cached.selector = selector;
|
3547 |
-
}
|
3548 |
-
|
3549 |
-
return cached;
|
3550 |
-
};
|
3551 |
-
/**
|
3552 |
-
* A low-level selection function that works with Sizzle's compiled
|
3553 |
-
* selector functions
|
3554 |
-
* @param {String|Function} selector A selector or a pre-compiled
|
3555 |
-
* selector function built with Sizzle.compile
|
3556 |
-
* @param {Element} context
|
3557 |
-
* @param {Array} [results]
|
3558 |
-
* @param {Array} [seed] A set of elements to match against
|
3559 |
-
*/
|
3560 |
-
|
3561 |
-
|
3562 |
-
select = Sizzle.select = function (selector, context, results, seed) {
|
3563 |
-
var i,
|
3564 |
-
tokens,
|
3565 |
-
token,
|
3566 |
-
type,
|
3567 |
-
find,
|
3568 |
-
compiled = typeof selector === "function" && selector,
|
3569 |
-
match = !seed && tokenize(selector = compiled.selector || selector);
|
3570 |
-
results = results || []; // Try to minimize operations if there is only one selector in the list and no seed
|
3571 |
-
// (the latter of which guarantees us context)
|
3572 |
-
|
3573 |
-
if (match.length === 1) {
|
3574 |
-
// Reduce context if the leading compound selector is an ID
|
3575 |
-
tokens = match[0] = match[0].slice(0);
|
3576 |
-
|
3577 |
-
if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {
|
3578 |
-
context = (Expr.find["ID"](token.matches[0].replace(runescape, funescape), context) || [])[0];
|
3579 |
-
|
3580 |
-
if (!context) {
|
3581 |
-
return results; // Precompiled matchers will still verify ancestry, so step up a level
|
3582 |
-
} else if (compiled) {
|
3583 |
-
context = context.parentNode;
|
3584 |
-
}
|
3585 |
-
|
3586 |
-
selector = selector.slice(tokens.shift().value.length);
|
3587 |
-
} // Fetch a seed set for right-to-left matching
|
3588 |
-
|
3589 |
-
|
3590 |
-
i = matchExpr["needsContext"].test(selector) ? 0 : tokens.length;
|
3591 |
-
|
3592 |
-
while (i--) {
|
3593 |
-
token = tokens[i]; // Abort if we hit a combinator
|
3594 |
-
|
3595 |
-
if (Expr.relative[type = token.type]) {
|
3596 |
-
break;
|
3597 |
-
}
|
3598 |
-
|
3599 |
-
if (find = Expr.find[type]) {
|
3600 |
-
// Search, expanding context for leading sibling combinators
|
3601 |
-
if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {
|
3602 |
-
// If seed is empty or no tokens remain, we can return early
|
3603 |
-
tokens.splice(i, 1);
|
3604 |
-
selector = seed.length && toSelector(tokens);
|
3605 |
-
|
3606 |
-
if (!selector) {
|
3607 |
-
push.apply(results, seed);
|
3608 |
-
return results;
|
3609 |
-
}
|
3610 |
-
|
3611 |
-
break;
|
3612 |
-
}
|
3613 |
-
}
|
3614 |
-
}
|
3615 |
-
} // Compile and execute a filtering function if one is not provided
|
3616 |
-
// Provide `match` to avoid retokenization if we modified the selector above
|
3617 |
-
|
3618 |
-
|
3619 |
-
(compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);
|
3620 |
-
return results;
|
3621 |
-
}; // One-time assignments
|
3622 |
-
// Sort stability
|
3623 |
-
|
3624 |
-
|
3625 |
-
support.sortStable = expando.split("").sort(sortOrder).join("") === expando; // Support: Chrome 14-35+
|
3626 |
-
// Always assume duplicates if they aren't passed to the comparison function
|
3627 |
-
|
3628 |
-
support.detectDuplicates = !!hasDuplicate; // Initialize against the default document
|
3629 |
-
|
3630 |
-
setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
|
3631 |
-
// Detached nodes confoundingly follow *each other*
|
3632 |
-
|
3633 |
-
support.sortDetached = assert(function (el) {
|
3634 |
-
// Should return 1, but returns 4 (following)
|
3635 |
-
return el.compareDocumentPosition(document.createElement("fieldset")) & 1;
|
3636 |
-
}); // Support: IE<8
|
3637 |
-
// Prevent attribute/property "interpolation"
|
3638 |
-
// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
|
3639 |
-
|
3640 |
-
if (!assert(function (el) {
|
3641 |
-
el.innerHTML = "<a href='#'></a>";
|
3642 |
-
return el.firstChild.getAttribute("href") === "#";
|
3643 |
-
})) {
|
3644 |
-
addHandle("type|href|height|width", function (elem, name, isXML) {
|
3645 |
-
if (!isXML) {
|
3646 |
-
return elem.getAttribute(name, name.toLowerCase() === "type" ? 1 : 2);
|
3647 |
-
}
|
3648 |
-
});
|
3649 |
-
} // Support: IE<9
|
3650 |
-
// Use defaultValue in place of getAttribute("value")
|
3651 |
-
|
3652 |
-
|
3653 |
-
if (!support.attributes || !assert(function (el) {
|
3654 |
-
el.innerHTML = "<input/>";
|
3655 |
-
el.firstChild.setAttribute("value", "");
|
3656 |
-
return el.firstChild.getAttribute("value") === "";
|
3657 |
-
})) {
|
3658 |
-
addHandle("value", function (elem, _name, isXML) {
|
3659 |
-
if (!isXML && elem.nodeName.toLowerCase() === "input") {
|
3660 |
-
return elem.defaultValue;
|
3661 |
-
}
|
3662 |
-
});
|
3663 |
-
} // Support: IE<9
|
3664 |
-
// Use getAttributeNode to fetch booleans when getAttribute lies
|
3665 |
-
|
3666 |
-
|
3667 |
-
if (!assert(function (el) {
|
3668 |
-
return el.getAttribute("disabled") == null;
|
3669 |
-
})) {
|
3670 |
-
addHandle(booleans, function (elem, name, isXML) {
|
3671 |
-
var val;
|
3672 |
-
|
3673 |
-
if (!isXML) {
|
3674 |
-
return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
|
3675 |
-
}
|
3676 |
-
});
|
3677 |
-
}
|
3678 |
-
|
3679 |
-
return Sizzle;
|
3680 |
-
}(window);
|
3681 |
-
|
3682 |
-
jQuery.find = Sizzle;
|
3683 |
-
jQuery.expr = Sizzle.selectors; // Deprecated
|
3684 |
-
|
3685 |
-
jQuery.expr[":"] = jQuery.expr.pseudos;
|
3686 |
-
jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
|
3687 |
-
jQuery.text = Sizzle.getText;
|
3688 |
-
jQuery.isXMLDoc = Sizzle.isXML;
|
3689 |
-
jQuery.contains = Sizzle.contains;
|
3690 |
-
jQuery.escapeSelector = Sizzle.escape;
|
3691 |
-
|
3692 |
-
var dir = function dir(elem, _dir, until) {
|
3693 |
-
var matched = [],
|
3694 |
-
truncate = until !== undefined;
|
3695 |
-
|
3696 |
-
while ((elem = elem[_dir]) && elem.nodeType !== 9) {
|
3697 |
-
if (elem.nodeType === 1) {
|
3698 |
-
if (truncate && jQuery(elem).is(until)) {
|
3699 |
-
break;
|
3700 |
-
}
|
3701 |
-
|
3702 |
-
matched.push(elem);
|
3703 |
-
}
|
3704 |
-
}
|
3705 |
-
|
3706 |
-
return matched;
|
3707 |
-
};
|
3708 |
-
|
3709 |
-
var _siblings = function siblings(n, elem) {
|
3710 |
-
var matched = [];
|
3711 |
-
|
3712 |
-
for (; n; n = n.nextSibling) {
|
3713 |
-
if (n.nodeType === 1 && n !== elem) {
|
3714 |
-
matched.push(n);
|
3715 |
-
}
|
3716 |
-
}
|
3717 |
-
|
3718 |
-
return matched;
|
3719 |
-
};
|
3720 |
-
|
3721 |
-
var rneedsContext = jQuery.expr.match.needsContext;
|
3722 |
-
|
3723 |
-
function nodeName(elem, name) {
|
3724 |
-
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
|
3725 |
-
}
|
3726 |
-
|
3727 |
-
;
|
3728 |
-
var rsingleTag = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i; // Implement the identical functionality for filter and not
|
3729 |
-
|
3730 |
-
function winnow(elements, qualifier, not) {
|
3731 |
-
if (isFunction(qualifier)) {
|
3732 |
-
return jQuery.grep(elements, function (elem, i) {
|
3733 |
-
return !!qualifier.call(elem, i, elem) !== not;
|
3734 |
-
});
|
3735 |
-
} // Single element
|
3736 |
-
|
3737 |
-
|
3738 |
-
if (qualifier.nodeType) {
|
3739 |
-
return jQuery.grep(elements, function (elem) {
|
3740 |
-
return elem === qualifier !== not;
|
3741 |
-
});
|
3742 |
-
} // Arraylike of elements (jQuery, arguments, Array)
|
3743 |
-
|
3744 |
-
|
3745 |
-
if (typeof qualifier !== "string") {
|
3746 |
-
return jQuery.grep(elements, function (elem) {
|
3747 |
-
return indexOf.call(qualifier, elem) > -1 !== not;
|
3748 |
-
});
|
3749 |
-
} // Filtered directly for both simple and complex selectors
|
3750 |
-
|
3751 |
-
|
3752 |
-
return jQuery.filter(qualifier, elements, not);
|
3753 |
-
}
|
3754 |
-
|
3755 |
-
jQuery.filter = function (expr, elems, not) {
|
3756 |
-
var elem = elems[0];
|
3757 |
-
|
3758 |
-
if (not) {
|
3759 |
-
expr = ":not(" + expr + ")";
|
3760 |
-
}
|
3761 |
-
|
3762 |
-
if (elems.length === 1 && elem.nodeType === 1) {
|
3763 |
-
return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];
|
3764 |
-
}
|
3765 |
-
|
3766 |
-
return jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {
|
3767 |
-
return elem.nodeType === 1;
|
3768 |
-
}));
|
3769 |
-
};
|
3770 |
-
|
3771 |
-
jQuery.fn.extend({
|
3772 |
-
find: function find(selector) {
|
3773 |
-
var i,
|
3774 |
-
ret,
|
3775 |
-
len = this.length,
|
3776 |
-
self = this;
|
3777 |
-
|
3778 |
-
if (typeof selector !== "string") {
|
3779 |
-
return this.pushStack(jQuery(selector).filter(function () {
|
3780 |
-
for (i = 0; i < len; i++) {
|
3781 |
-
if (jQuery.contains(self[i], this)) {
|
3782 |
-
return true;
|
3783 |
-
}
|
3784 |
-
}
|
3785 |
-
}));
|
3786 |
-
}
|
3787 |
-
|
3788 |
-
ret = this.pushStack([]);
|
3789 |
-
|
3790 |
-
for (i = 0; i < len; i++) {
|
3791 |
-
jQuery.find(selector, self[i], ret);
|
3792 |
-
}
|
3793 |
-
|
3794 |
-
return len > 1 ? jQuery.uniqueSort(ret) : ret;
|
3795 |
-
},
|
3796 |
-
filter: function filter(selector) {
|
3797 |
-
return this.pushStack(winnow(this, selector || [], false));
|
3798 |
-
},
|
3799 |
-
not: function not(selector) {
|
3800 |
-
return this.pushStack(winnow(this, selector || [], true));
|
3801 |
-
},
|
3802 |
-
is: function is(selector) {
|
3803 |
-
return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set
|
3804 |
-
// so $("p:first").is("p:last") won't return true for a doc with two "p".
|
3805 |
-
typeof selector === "string" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;
|
3806 |
-
}
|
3807 |
-
}); // Initialize a jQuery object
|
3808 |
-
// A central reference to the root jQuery(document)
|
3809 |
-
|
3810 |
-
var rootjQuery,
|
3811 |
-
// A simple way to check for HTML strings
|
3812 |
-
// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
|
3813 |
-
// Strict HTML recognition (#11290: must start with <)
|
3814 |
-
// Shortcut simple #id case for speed
|
3815 |
-
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
|
3816 |
-
init = jQuery.fn.init = function (selector, context, root) {
|
3817 |
-
var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false)
|
3818 |
-
|
3819 |
-
if (!selector) {
|
3820 |
-
return this;
|
3821 |
-
} // Method init() accepts an alternate rootjQuery
|
3822 |
-
// so migrate can support jQuery.sub (gh-2101)
|
3823 |
-
|
3824 |
-
|
3825 |
-
root = root || rootjQuery; // Handle HTML strings
|
3826 |
-
|
3827 |
-
if (typeof selector === "string") {
|
3828 |
-
if (selector[0] === "<" && selector[selector.length - 1] === ">" && selector.length >= 3) {
|
3829 |
-
// Assume that strings that start and end with <> are HTML and skip the regex check
|
3830 |
-
match = [null, selector, null];
|
3831 |
-
} else {
|
3832 |
-
match = rquickExpr.exec(selector);
|
3833 |
-
} // Match html or make sure no context is specified for #id
|
3834 |
-
|
3835 |
-
|
3836 |
-
if (match && (match[1] || !context)) {
|
3837 |
-
// HANDLE: $(html) -> $(array)
|
3838 |
-
if (match[1]) {
|
3839 |
-
context = context instanceof jQuery ? context[0] : context; // Option to run scripts is true for back-compat
|
3840 |
-
// Intentionally let the error be thrown if parseHTML is not present
|
3841 |
-
|
3842 |
-
jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); // HANDLE: $(html, props)
|
3843 |
-
|
3844 |
-
if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
|
3845 |
-
for (match in context) {
|
3846 |
-
// Properties of context are called as methods if possible
|
3847 |
-
if (isFunction(this[match])) {
|
3848 |
-
this[match](context[match]); // ...and otherwise set as attributes
|
3849 |
-
} else {
|
3850 |
-
this.attr(match, context[match]);
|
3851 |
-
}
|
3852 |
-
}
|
3853 |
-
}
|
3854 |
-
|
3855 |
-
return this; // HANDLE: $(#id)
|
3856 |
-
} else {
|
3857 |
-
elem = document.getElementById(match[2]);
|
3858 |
-
|
3859 |
-
if (elem) {
|
3860 |
-
// Inject the element directly into the jQuery object
|
3861 |
-
this[0] = elem;
|
3862 |
-
this.length = 1;
|
3863 |
-
}
|
3864 |
-
|
3865 |
-
return this;
|
3866 |
-
} // HANDLE: $(expr, $(...))
|
3867 |
-
|
3868 |
-
} else if (!context || context.jquery) {
|
3869 |
-
return (context || root).find(selector); // HANDLE: $(expr, context)
|
3870 |
-
// (which is just equivalent to: $(context).find(expr)
|
3871 |
-
} else {
|
3872 |
-
return this.constructor(context).find(selector);
|
3873 |
-
} // HANDLE: $(DOMElement)
|
3874 |
-
|
3875 |
-
} else if (selector.nodeType) {
|
3876 |
-
this[0] = selector;
|
3877 |
-
this.length = 1;
|
3878 |
-
return this; // HANDLE: $(function)
|
3879 |
-
// Shortcut for document ready
|
3880 |
-
} else if (isFunction(selector)) {
|
3881 |
-
return root.ready !== undefined ? root.ready(selector) : // Execute immediately if ready is not present
|
3882 |
-
selector(jQuery);
|
3883 |
-
}
|
3884 |
-
|
3885 |
-
return jQuery.makeArray(selector, this);
|
3886 |
-
}; // Give the init function the jQuery prototype for later instantiation
|
3887 |
-
|
3888 |
-
|
3889 |
-
init.prototype = jQuery.fn; // Initialize central reference
|
3890 |
-
|
3891 |
-
rootjQuery = jQuery(document);
|
3892 |
-
var rparentsprev = /^(?:parents|prev(?:Until|All))/,
|
3893 |
-
// Methods guaranteed to produce a unique set when starting from a unique set
|
3894 |
-
guaranteedUnique = {
|
3895 |
-
children: true,
|
3896 |
-
contents: true,
|
3897 |
-
next: true,
|
3898 |
-
prev: true
|
3899 |
-
};
|
3900 |
-
jQuery.fn.extend({
|
3901 |
-
has: function has(target) {
|
3902 |
-
var targets = jQuery(target, this),
|
3903 |
-
l = targets.length;
|
3904 |
-
return this.filter(function () {
|
3905 |
-
var i = 0;
|
3906 |
-
|
3907 |
-
for (; i < l; i++) {
|
3908 |
-
if (jQuery.contains(this, targets[i])) {
|
3909 |
-
return true;
|
3910 |
-
}
|
3911 |
-
}
|
3912 |
-
});
|
3913 |
-
},
|
3914 |
-
closest: function closest(selectors, context) {
|
3915 |
-
var cur,
|
3916 |
-
i = 0,
|
3917 |
-
l = this.length,
|
3918 |
-
matched = [],
|
3919 |
-
targets = typeof selectors !== "string" && jQuery(selectors); // Positional selectors never match, since there's no _selection_ context
|
3920 |
-
|
3921 |
-
if (!rneedsContext.test(selectors)) {
|
3922 |
-
for (; i < l; i++) {
|
3923 |
-
for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
|
3924 |
-
// Always skip document fragments
|
3925 |
-
if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : // Don't pass non-elements to Sizzle
|
3926 |
-
cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {
|
3927 |
-
matched.push(cur);
|
3928 |
-
break;
|
3929 |
-
}
|
3930 |
-
}
|
3931 |
-
}
|
3932 |
-
}
|
3933 |
-
|
3934 |
-
return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);
|
3935 |
-
},
|
3936 |
-
// Determine the position of an element within the set
|
3937 |
-
index: function index(elem) {
|
3938 |
-
// No argument, return index in parent
|
3939 |
-
if (!elem) {
|
3940 |
-
return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
|
3941 |
-
} // Index in selector
|
3942 |
-
|
3943 |
-
|
3944 |
-
if (typeof elem === "string") {
|
3945 |
-
return indexOf.call(jQuery(elem), this[0]);
|
3946 |
-
} // Locate the position of the desired element
|
3947 |
-
|
3948 |
-
|
3949 |
-
return indexOf.call(this, // If it receives a jQuery object, the first element is used
|
3950 |
-
elem.jquery ? elem[0] : elem);
|
3951 |
-
},
|
3952 |
-
add: function add(selector, context) {
|
3953 |
-
return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));
|
3954 |
-
},
|
3955 |
-
addBack: function addBack(selector) {
|
3956 |
-
return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));
|
3957 |
-
}
|
3958 |
-
});
|
3959 |
-
|
3960 |
-
function sibling(cur, dir) {
|
3961 |
-
while ((cur = cur[dir]) && cur.nodeType !== 1) {}
|
3962 |
-
|
3963 |
-
return cur;
|
3964 |
-
}
|
3965 |
-
|
3966 |
-
jQuery.each({
|
3967 |
-
parent: function parent(elem) {
|
3968 |
-
var parent = elem.parentNode;
|
3969 |
-
return parent && parent.nodeType !== 11 ? parent : null;
|
3970 |
-
},
|
3971 |
-
parents: function parents(elem) {
|
3972 |
-
return dir(elem, "parentNode");
|
3973 |
-
},
|
3974 |
-
parentsUntil: function parentsUntil(elem, _i, until) {
|
3975 |
-
return dir(elem, "parentNode", until);
|
3976 |
-
},
|
3977 |
-
next: function next(elem) {
|
3978 |
-
return sibling(elem, "nextSibling");
|
3979 |
-
},
|
3980 |
-
prev: function prev(elem) {
|
3981 |
-
return sibling(elem, "previousSibling");
|
3982 |
-
},
|
3983 |
-
nextAll: function nextAll(elem) {
|
3984 |
-
return dir(elem, "nextSibling");
|
3985 |
-
},
|
3986 |
-
prevAll: function prevAll(elem) {
|
3987 |
-
return dir(elem, "previousSibling");
|
3988 |
-
},
|
3989 |
-
nextUntil: function nextUntil(elem, _i, until) {
|
3990 |
-
return dir(elem, "nextSibling", until);
|
3991 |
-
},
|
3992 |
-
prevUntil: function prevUntil(elem, _i, until) {
|
3993 |
-
return dir(elem, "previousSibling", until);
|
3994 |
-
},
|
3995 |
-
siblings: function siblings(elem) {
|
3996 |
-
return _siblings((elem.parentNode || {}).firstChild, elem);
|
3997 |
-
},
|
3998 |
-
children: function children(elem) {
|
3999 |
-
return _siblings(elem.firstChild);
|
4000 |
-
},
|
4001 |
-
contents: function contents(elem) {
|
4002 |
-
if (elem.contentDocument != null && // Support: IE 11+
|
4003 |
-
// <object> elements with no `data` attribute has an object
|
4004 |
-
// `contentDocument` with a `null` prototype.
|
4005 |
-
getProto(elem.contentDocument)) {
|
4006 |
-
return elem.contentDocument;
|
4007 |
-
} // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
|
4008 |
-
// Treat the template element as a regular one in browsers that
|
4009 |
-
// don't support it.
|
4010 |
-
|
4011 |
-
|
4012 |
-
if (nodeName(elem, "template")) {
|
4013 |
-
elem = elem.content || elem;
|
4014 |
-
}
|
4015 |
-
|
4016 |
-
return jQuery.merge([], elem.childNodes);
|
4017 |
-
}
|
4018 |
-
}, function (name, fn) {
|
4019 |
-
jQuery.fn[name] = function (until, selector) {
|
4020 |
-
var matched = jQuery.map(this, fn, until);
|
4021 |
-
|
4022 |
-
if (name.slice(-5) !== "Until") {
|
4023 |
-
selector = until;
|
4024 |
-
}
|
4025 |
-
|
4026 |
-
if (selector && typeof selector === "string") {
|
4027 |
-
matched = jQuery.filter(selector, matched);
|
4028 |
-
}
|
4029 |
-
|
4030 |
-
if (this.length > 1) {
|
4031 |
-
// Remove duplicates
|
4032 |
-
if (!guaranteedUnique[name]) {
|
4033 |
-
jQuery.uniqueSort(matched);
|
4034 |
-
} // Reverse order for parents* and prev-derivatives
|
4035 |
-
|
4036 |
-
|
4037 |
-
if (rparentsprev.test(name)) {
|
4038 |
-
matched.reverse();
|
4039 |
-
}
|
4040 |
-
}
|
4041 |
-
|
4042 |
-
return this.pushStack(matched);
|
4043 |
-
};
|
4044 |
-
});
|
4045 |
-
var rnothtmlwhite = /[^\x20\t\r\n\f]+/g; // Convert String-formatted options into Object-formatted ones
|
4046 |
-
|
4047 |
-
function createOptions(options) {
|
4048 |
-
var object = {};
|
4049 |
-
jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {
|
4050 |
-
object[flag] = true;
|
4051 |
-
});
|
4052 |
-
return object;
|
4053 |
-
}
|
4054 |
-
/*
|
4055 |
-
* Create a callback list using the following parameters:
|
4056 |
-
*
|
4057 |
-
* options: an optional list of space-separated options that will change how
|
4058 |
-
* the callback list behaves or a more traditional option object
|
4059 |
-
*
|
4060 |
-
* By default a callback list will act like an event callback list and can be
|
4061 |
-
* "fired" multiple times.
|
4062 |
-
*
|
4063 |
-
* Possible options:
|
4064 |
-
*
|
4065 |
-
* once: will ensure the callback list can only be fired once (like a Deferred)
|
4066 |
-
*
|
4067 |
-
* memory: will keep track of previous values and will call any callback added
|
4068 |
-
* after the list has been fired right away with the latest "memorized"
|
4069 |
-
* values (like a Deferred)
|
4070 |
-
*
|
4071 |
-
* unique: will ensure a callback can only be added once (no duplicate in the list)
|
4072 |
-
*
|
4073 |
-
* stopOnFalse: interrupt callings when a callback returns false
|
4074 |
-
*
|
4075 |
-
*/
|
4076 |
-
|
4077 |
-
|
4078 |
-
jQuery.Callbacks = function (options) {
|
4079 |
-
// Convert options from String-formatted to Object-formatted if needed
|
4080 |
-
// (we check in cache first)
|
4081 |
-
options = typeof options === "string" ? createOptions(options) : jQuery.extend({}, options);
|
4082 |
-
|
4083 |
-
var // Flag to know if list is currently firing
|
4084 |
-
firing,
|
4085 |
-
// Last fire value for non-forgettable lists
|
4086 |
-
memory,
|
4087 |
-
// Flag to know if list was already fired
|
4088 |
-
_fired,
|
4089 |
-
// Flag to prevent firing
|
4090 |
-
_locked,
|
4091 |
-
// Actual callback list
|
4092 |
-
list = [],
|
4093 |
-
// Queue of execution data for repeatable lists
|
4094 |
-
queue = [],
|
4095 |
-
// Index of currently firing callback (modified by add/remove as needed)
|
4096 |
-
firingIndex = -1,
|
4097 |
-
// Fire callbacks
|
4098 |
-
fire = function fire() {
|
4099 |
-
// Enforce single-firing
|
4100 |
-
_locked = _locked || options.once; // Execute callbacks for all pending executions,
|
4101 |
-
// respecting firingIndex overrides and runtime changes
|
4102 |
-
|
4103 |
-
_fired = firing = true;
|
4104 |
-
|
4105 |
-
for (; queue.length; firingIndex = -1) {
|
4106 |
-
memory = queue.shift();
|
4107 |
-
|
4108 |
-
while (++firingIndex < list.length) {
|
4109 |
-
// Run callback and check for early termination
|
4110 |
-
if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {
|
4111 |
-
// Jump to end and forget the data so .add doesn't re-fire
|
4112 |
-
firingIndex = list.length;
|
4113 |
-
memory = false;
|
4114 |
-
}
|
4115 |
-
}
|
4116 |
-
} // Forget the data if we're done with it
|
4117 |
-
|
4118 |
-
|
4119 |
-
if (!options.memory) {
|
4120 |
-
memory = false;
|
4121 |
-
}
|
4122 |
-
|
4123 |
-
firing = false; // Clean up if we're done firing for good
|
4124 |
-
|
4125 |
-
if (_locked) {
|
4126 |
-
// Keep an empty list if we have data for future add calls
|
4127 |
-
if (memory) {
|
4128 |
-
list = []; // Otherwise, this object is spent
|
4129 |
-
} else {
|
4130 |
-
list = "";
|
4131 |
-
}
|
4132 |
-
}
|
4133 |
-
},
|
4134 |
-
// Actual Callbacks object
|
4135 |
-
self = {
|
4136 |
-
// Add a callback or a collection of callbacks to the list
|
4137 |
-
add: function add() {
|
4138 |
-
if (list) {
|
4139 |
-
// If we have memory from a past run, we should fire after adding
|
4140 |
-
if (memory && !firing) {
|
4141 |
-
firingIndex = list.length - 1;
|
4142 |
-
queue.push(memory);
|
4143 |
-
}
|
4144 |
-
|
4145 |
-
(function add(args) {
|
4146 |
-
jQuery.each(args, function (_, arg) {
|
4147 |
-
if (isFunction(arg)) {
|
4148 |
-
if (!options.unique || !self.has(arg)) {
|
4149 |
-
list.push(arg);
|
4150 |
-
}
|
4151 |
-
} else if (arg && arg.length && toType(arg) !== "string") {
|
4152 |
-
// Inspect recursively
|
4153 |
-
add(arg);
|
4154 |
-
}
|
4155 |
-
});
|
4156 |
-
})(arguments);
|
4157 |
-
|
4158 |
-
if (memory && !firing) {
|
4159 |
-
fire();
|
4160 |
-
}
|
4161 |
-
}
|
4162 |
-
|
4163 |
-
return this;
|
4164 |
-
},
|
4165 |
-
// Remove a callback from the list
|
4166 |
-
remove: function remove() {
|
4167 |
-
jQuery.each(arguments, function (_, arg) {
|
4168 |
-
var index;
|
4169 |
-
|
4170 |
-
while ((index = jQuery.inArray(arg, list, index)) > -1) {
|
4171 |
-
list.splice(index, 1); // Handle firing indexes
|
4172 |
-
|
4173 |
-
if (index <= firingIndex) {
|
4174 |
-
firingIndex--;
|
4175 |
-
}
|
4176 |
-
}
|
4177 |
-
});
|
4178 |
-
return this;
|
4179 |
-
},
|
4180 |
-
// Check if a given callback is in the list.
|
4181 |
-
// If no argument is given, return whether or not list has callbacks attached.
|
4182 |
-
has: function has(fn) {
|
4183 |
-
return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;
|
4184 |
-
},
|
4185 |
-
// Remove all callbacks from the list
|
4186 |
-
empty: function empty() {
|
4187 |
-
if (list) {
|
4188 |
-
list = [];
|
4189 |
-
}
|
4190 |
-
|
4191 |
-
return this;
|
4192 |
-
},
|
4193 |
-
// Disable .fire and .add
|
4194 |
-
// Abort any current/pending executions
|
4195 |
-
// Clear all callbacks and values
|
4196 |
-
disable: function disable() {
|
4197 |
-
_locked = queue = [];
|
4198 |
-
list = memory = "";
|
4199 |
-
return this;
|
4200 |
-
},
|
4201 |
-
disabled: function disabled() {
|
4202 |
-
return !list;
|
4203 |
-
},
|
4204 |
-
// Disable .fire
|
4205 |
-
// Also disable .add unless we have memory (since it would have no effect)
|
4206 |
-
// Abort any pending executions
|
4207 |
-
lock: function lock() {
|
4208 |
-
_locked = queue = [];
|
4209 |
-
|
4210 |
-
if (!memory && !firing) {
|
4211 |
-
list = memory = "";
|
4212 |
-
}
|
4213 |
-
|
4214 |
-
return this;
|
4215 |
-
},
|
4216 |
-
locked: function locked() {
|
4217 |
-
return !!_locked;
|
4218 |
-
},
|
4219 |
-
// Call all callbacks with the given context and arguments
|
4220 |
-
fireWith: function fireWith(context, args) {
|
4221 |
-
if (!_locked) {
|
4222 |
-
args = args || [];
|
4223 |
-
args = [context, args.slice ? args.slice() : args];
|
4224 |
-
queue.push(args);
|
4225 |
-
|
4226 |
-
if (!firing) {
|
4227 |
-
fire();
|
4228 |
-
}
|
4229 |
-
}
|
4230 |
-
|
4231 |
-
return this;
|
4232 |
-
},
|
4233 |
-
// Call all the callbacks with the given arguments
|
4234 |
-
fire: function fire() {
|
4235 |
-
self.fireWith(this, arguments);
|
4236 |
-
return this;
|
4237 |
-
},
|
4238 |
-
// To know if the callbacks have already been called at least once
|
4239 |
-
fired: function fired() {
|
4240 |
-
return !!_fired;
|
4241 |
-
}
|
4242 |
-
};
|
4243 |
-
|
4244 |
-
return self;
|
4245 |
-
};
|
4246 |
-
|
4247 |
-
function Identity(v) {
|
4248 |
-
return v;
|
4249 |
-
}
|
4250 |
-
|
4251 |
-
function Thrower(ex) {
|
4252 |
-
throw ex;
|
4253 |
-
}
|
4254 |
-
|
4255 |
-
function adoptValue(value, resolve, reject, noValue) {
|
4256 |
-
var method;
|
4257 |
-
|
4258 |
-
try {
|
4259 |
-
// Check for promise aspect first to privilege synchronous behavior
|
4260 |
-
if (value && isFunction(method = value.promise)) {
|
4261 |
-
method.call(value).done(resolve).fail(reject); // Other thenables
|
4262 |
-
} else if (value && isFunction(method = value.then)) {
|
4263 |
-
method.call(value, resolve, reject); // Other non-thenables
|
4264 |
-
} else {
|
4265 |
-
// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
|
4266 |
-
// * false: [ value ].slice( 0 ) => resolve( value )
|
4267 |
-
// * true: [ value ].slice( 1 ) => resolve()
|
4268 |
-
resolve.apply(undefined, [value].slice(noValue));
|
4269 |
-
} // For Promises/A+, convert exceptions into rejections
|
4270 |
-
// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
|
4271 |
-
// Deferred#then to conditionally suppress rejection.
|
4272 |
-
|
4273 |
-
} catch (value) {
|
4274 |
-
// Support: Android 4.0 only
|
4275 |
-
// Strict mode functions invoked without .call/.apply get global-object context
|
4276 |
-
reject.apply(undefined, [value]);
|
4277 |
-
}
|
4278 |
-
}
|
4279 |
-
|
4280 |
-
jQuery.extend({
|
4281 |
-
Deferred: function Deferred(func) {
|
4282 |
-
var tuples = [// action, add listener, callbacks,
|
4283 |
-
// ... .then handlers, argument index, [final state]
|
4284 |
-
["notify", "progress", jQuery.Callbacks("memory"), jQuery.Callbacks("memory"), 2], ["resolve", "done", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 1, "rejected"]],
|
4285 |
-
_state = "pending",
|
4286 |
-
_promise = {
|
4287 |
-
state: function state() {
|
4288 |
-
return _state;
|
4289 |
-
},
|
4290 |
-
always: function always() {
|
4291 |
-
deferred.done(arguments).fail(arguments);
|
4292 |
-
return this;
|
4293 |
-
},
|
4294 |
-
"catch": function _catch(fn) {
|
4295 |
-
return _promise.then(null, fn);
|
4296 |
-
},
|
4297 |
-
// Keep pipe for back-compat
|
4298 |
-
pipe: function pipe()
|
4299 |
-
/* fnDone, fnFail, fnProgress */
|
4300 |
-
{
|
4301 |
-
var fns = arguments;
|
4302 |
-
return jQuery.Deferred(function (newDefer) {
|
4303 |
-
jQuery.each(tuples, function (_i, tuple) {
|
4304 |
-
// Map tuples (progress, done, fail) to arguments (done, fail, progress)
|
4305 |
-
var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; // deferred.progress(function() { bind to newDefer or newDefer.notify })
|
4306 |
-
// deferred.done(function() { bind to newDefer or newDefer.resolve })
|
4307 |
-
// deferred.fail(function() { bind to newDefer or newDefer.reject })
|
4308 |
-
|
4309 |
-
deferred[tuple[1]](function () {
|
4310 |
-
var returned = fn && fn.apply(this, arguments);
|
4311 |
-
|
4312 |
-
if (returned && isFunction(returned.promise)) {
|
4313 |
-
returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);
|
4314 |
-
} else {
|
4315 |
-
newDefer[tuple[0] + "With"](this, fn ? [returned] : arguments);
|
4316 |
-
}
|
4317 |
-
});
|
4318 |
-
});
|
4319 |
-
fns = null;
|
4320 |
-
}).promise();
|
4321 |
-
},
|
4322 |
-
then: function then(onFulfilled, onRejected, onProgress) {
|
4323 |
-
var maxDepth = 0;
|
4324 |
-
|
4325 |
-
function resolve(depth, deferred, handler, special) {
|
4326 |
-
return function () {
|
4327 |
-
var that = this,
|
4328 |
-
args = arguments,
|
4329 |
-
mightThrow = function mightThrow() {
|
4330 |
-
var returned, then; // Support: Promises/A+ section 2.3.3.3.3
|
4331 |
-
// https://promisesaplus.com/#point-59
|
4332 |
-
// Ignore double-resolution attempts
|
4333 |
-
|
4334 |
-
if (depth < maxDepth) {
|
4335 |
-
return;
|
4336 |
-
}
|
4337 |
-
|
4338 |
-
returned = handler.apply(that, args); // Support: Promises/A+ section 2.3.1
|
4339 |
-
// https://promisesaplus.com/#point-48
|
4340 |
-
|
4341 |
-
if (returned === deferred.promise()) {
|
4342 |
-
throw new TypeError("Thenable self-resolution");
|
4343 |
-
} // Support: Promises/A+ sections 2.3.3.1, 3.5
|
4344 |
-
// https://promisesaplus.com/#point-54
|
4345 |
-
// https://promisesaplus.com/#point-75
|
4346 |
-
// Retrieve `then` only once
|
4347 |
-
|
4348 |
-
|
4349 |
-
then = returned && ( // Support: Promises/A+ section 2.3.4
|
4350 |
-
// https://promisesaplus.com/#point-64
|
4351 |
-
// Only check objects and functions for thenability
|
4352 |
-
_typeof(returned) === "object" || typeof returned === "function") && returned.then; // Handle a returned thenable
|
4353 |
-
|
4354 |
-
if (isFunction(then)) {
|
4355 |
-
// Special processors (notify) just wait for resolution
|
4356 |
-
if (special) {
|
4357 |
-
then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); // Normal processors (resolve) also hook into progress
|
4358 |
-
} else {
|
4359 |
-
// ...and disregard older resolution values
|
4360 |
-
maxDepth++;
|
4361 |
-
then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));
|
4362 |
-
} // Handle all other returned values
|
4363 |
-
|
4364 |
-
} else {
|
4365 |
-
// Only substitute handlers pass on context
|
4366 |
-
// and multiple values (non-spec behavior)
|
4367 |
-
if (handler !== Identity) {
|
4368 |
-
that = undefined;
|
4369 |
-
args = [returned];
|
4370 |
-
} // Process the value(s)
|
4371 |
-
// Default process is resolve
|
4372 |
-
|
4373 |
-
|
4374 |
-
(special || deferred.resolveWith)(that, args);
|
4375 |
-
}
|
4376 |
-
},
|
4377 |
-
// Only normal processors (resolve) catch and reject exceptions
|
4378 |
-
process = special ? mightThrow : function () {
|
4379 |
-
try {
|
4380 |
-
mightThrow();
|
4381 |
-
} catch (e) {
|
4382 |
-
if (jQuery.Deferred.exceptionHook) {
|
4383 |
-
jQuery.Deferred.exceptionHook(e, process.stackTrace);
|
4384 |
-
} // Support: Promises/A+ section 2.3.3.3.4.1
|
4385 |
-
// https://promisesaplus.com/#point-61
|
4386 |
-
// Ignore post-resolution exceptions
|
4387 |
-
|
4388 |
-
|
4389 |
-
if (depth + 1 >= maxDepth) {
|
4390 |
-
// Only substitute handlers pass on context
|
4391 |
-
// and multiple values (non-spec behavior)
|
4392 |
-
if (handler !== Thrower) {
|
4393 |
-
that = undefined;
|
4394 |
-
args = [e];
|
4395 |
-
}
|
4396 |
-
|
4397 |
-
deferred.rejectWith(that, args);
|
4398 |
-
}
|
4399 |
-
}
|
4400 |
-
}; // Support: Promises/A+ section 2.3.3.3.1
|
4401 |
-
// https://promisesaplus.com/#point-57
|
4402 |
-
// Re-resolve promises immediately to dodge false rejection from
|
4403 |
-
// subsequent errors
|
4404 |
-
|
4405 |
-
|
4406 |
-
if (depth) {
|
4407 |
-
process();
|
4408 |
-
} else {
|
4409 |
-
// Call an optional hook to record the stack, in case of exception
|
4410 |
-
// since it's otherwise lost when execution goes async
|
4411 |
-
if (jQuery.Deferred.getStackHook) {
|
4412 |
-
process.stackTrace = jQuery.Deferred.getStackHook();
|
4413 |
-
}
|
4414 |
-
|
4415 |
-
window.setTimeout(process);
|
4416 |
-
}
|
4417 |
-
};
|
4418 |
-
}
|
4419 |
-
|
4420 |
-
return jQuery.Deferred(function (newDefer) {
|
4421 |
-
// progress_handlers.add( ... )
|
4422 |
-
tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); // fulfilled_handlers.add( ... )
|
4423 |
-
|
4424 |
-
tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); // rejected_handlers.add( ... )
|
4425 |
-
|
4426 |
-
tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));
|
4427 |
-
}).promise();
|
4428 |
-
},
|
4429 |
-
// Get a promise for this deferred
|
4430 |
-
// If obj is provided, the promise aspect is added to the object
|
4431 |
-
promise: function promise(obj) {
|
4432 |
-
return obj != null ? jQuery.extend(obj, _promise) : _promise;
|
4433 |
-
}
|
4434 |
-
},
|
4435 |
-
deferred = {}; // Add list-specific methods
|
4436 |
-
|
4437 |
-
jQuery.each(tuples, function (i, tuple) {
|
4438 |
-
var list = tuple[2],
|
4439 |
-
stateString = tuple[5]; // promise.progress = list.add
|
4440 |
-
// promise.done = list.add
|
4441 |
-
// promise.fail = list.add
|
4442 |
-
|
4443 |
-
_promise[tuple[1]] = list.add; // Handle state
|
4444 |
-
|
4445 |
-
if (stateString) {
|
4446 |
-
list.add(function () {
|
4447 |
-
// state = "resolved" (i.e., fulfilled)
|
4448 |
-
// state = "rejected"
|
4449 |
-
_state = stateString;
|
4450 |
-
}, // rejected_callbacks.disable
|
4451 |
-
// fulfilled_callbacks.disable
|
4452 |
-
tuples[3 - i][2].disable, // rejected_handlers.disable
|
4453 |
-
// fulfilled_handlers.disable
|
4454 |
-
tuples[3 - i][3].disable, // progress_callbacks.lock
|
4455 |
-
tuples[0][2].lock, // progress_handlers.lock
|
4456 |
-
tuples[0][3].lock);
|
4457 |
-
} // progress_handlers.fire
|
4458 |
-
// fulfilled_handlers.fire
|
4459 |
-
// rejected_handlers.fire
|
4460 |
-
|
4461 |
-
|
4462 |
-
list.add(tuple[3].fire); // deferred.notify = function() { deferred.notifyWith(...) }
|
4463 |
-
// deferred.resolve = function() { deferred.resolveWith(...) }
|
4464 |
-
// deferred.reject = function() { deferred.rejectWith(...) }
|
4465 |
-
|
4466 |
-
deferred[tuple[0]] = function () {
|
4467 |
-
deferred[tuple[0] + "With"](this === deferred ? undefined : this, arguments);
|
4468 |
-
return this;
|
4469 |
-
}; // deferred.notifyWith = list.fireWith
|
4470 |
-
// deferred.resolveWith = list.fireWith
|
4471 |
-
// deferred.rejectWith = list.fireWith
|
4472 |
-
|
4473 |
-
|
4474 |
-
deferred[tuple[0] + "With"] = list.fireWith;
|
4475 |
-
}); // Make the deferred a promise
|
4476 |
-
|
4477 |
-
_promise.promise(deferred); // Call given func if any
|
4478 |
-
|
4479 |
-
|
4480 |
-
if (func) {
|
4481 |
-
func.call(deferred, deferred);
|
4482 |
-
} // All done!
|
4483 |
-
|
4484 |
-
|
4485 |
-
return deferred;
|
4486 |
-
},
|
4487 |
-
// Deferred helper
|
4488 |
-
when: function when(singleValue) {
|
4489 |
-
var // count of uncompleted subordinates
|
4490 |
-
remaining = arguments.length,
|
4491 |
-
// count of unprocessed arguments
|
4492 |
-
i = remaining,
|
4493 |
-
// subordinate fulfillment data
|
4494 |
-
resolveContexts = Array(i),
|
4495 |
-
resolveValues = _slice.call(arguments),
|
4496 |
-
// the master Deferred
|
4497 |
-
master = jQuery.Deferred(),
|
4498 |
-
// subordinate callback factory
|
4499 |
-
updateFunc = function updateFunc(i) {
|
4500 |
-
return function (value) {
|
4501 |
-
resolveContexts[i] = this;
|
4502 |
-
resolveValues[i] = arguments.length > 1 ? _slice.call(arguments) : value;
|
4503 |
-
|
4504 |
-
if (! --remaining) {
|
4505 |
-
master.resolveWith(resolveContexts, resolveValues);
|
4506 |
-
}
|
4507 |
-
};
|
4508 |
-
}; // Single- and empty arguments are adopted like Promise.resolve
|
4509 |
-
|
4510 |
-
|
4511 |
-
if (remaining <= 1) {
|
4512 |
-
adoptValue(singleValue, master.done(updateFunc(i)).resolve, master.reject, !remaining); // Use .then() to unwrap secondary thenables (cf. gh-3000)
|
4513 |
-
|
4514 |
-
if (master.state() === "pending" || isFunction(resolveValues[i] && resolveValues[i].then)) {
|
4515 |
-
return master.then();
|
4516 |
-
}
|
4517 |
-
} // Multiple arguments are aggregated like Promise.all array elements
|
4518 |
-
|
4519 |
-
|
4520 |
-
while (i--) {
|
4521 |
-
adoptValue(resolveValues[i], updateFunc(i), master.reject);
|
4522 |
-
}
|
4523 |
-
|
4524 |
-
return master.promise();
|
4525 |
-
}
|
4526 |
-
}); // These usually indicate a programmer mistake during development,
|
4527 |
-
// warn about them ASAP rather than swallowing them by default.
|
4528 |
-
|
4529 |
-
var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
|
4530 |
-
|
4531 |
-
jQuery.Deferred.exceptionHook = function (error, stack) {
|
4532 |
-
// Support: IE 8 - 9 only
|
4533 |
-
// Console exists when dev tools are open, which can happen at any time
|
4534 |
-
if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {
|
4535 |
-
window.console.warn("jQuery.Deferred exception: " + error.message, error.stack, stack);
|
4536 |
-
}
|
4537 |
-
};
|
4538 |
-
|
4539 |
-
jQuery.readyException = function (error) {
|
4540 |
-
window.setTimeout(function () {
|
4541 |
-
throw error;
|
4542 |
-
});
|
4543 |
-
}; // The deferred used on DOM ready
|
4544 |
-
|
4545 |
-
|
4546 |
-
var readyList = jQuery.Deferred();
|
4547 |
-
|
4548 |
-
jQuery.fn.ready = function (fn) {
|
4549 |
-
readyList.then(fn) // Wrap jQuery.readyException in a function so that the lookup
|
4550 |
-
// happens at the time of error handling instead of callback
|
4551 |
-
// registration.
|
4552 |
-
["catch"](function (error) {
|
4553 |
-
jQuery.readyException(error);
|
4554 |
-
});
|
4555 |
-
return this;
|
4556 |
-
};
|
4557 |
-
|
4558 |
-
jQuery.extend({
|
4559 |
-
// Is the DOM ready to be used? Set to true once it occurs.
|
4560 |
-
isReady: false,
|
4561 |
-
// A counter to track how many items to wait for before
|
4562 |
-
// the ready event fires. See #6781
|
4563 |
-
readyWait: 1,
|
4564 |
-
// Handle when the DOM is ready
|
4565 |
-
ready: function ready(wait) {
|
4566 |
-
// Abort if there are pending holds or we're already ready
|
4567 |
-
if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
|
4568 |
-
return;
|
4569 |
-
} // Remember that the DOM is ready
|
4570 |
-
|
4571 |
-
|
4572 |
-
jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be
|
4573 |
-
|
4574 |
-
if (wait !== true && --jQuery.readyWait > 0) {
|
4575 |
-
return;
|
4576 |
-
} // If there are functions bound, to execute
|
4577 |
-
|
4578 |
-
|
4579 |
-
readyList.resolveWith(document, [jQuery]);
|
4580 |
-
}
|
4581 |
-
});
|
4582 |
-
jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method
|
4583 |
-
|
4584 |
-
function completed() {
|
4585 |
-
document.removeEventListener("DOMContentLoaded", completed);
|
4586 |
-
window.removeEventListener("load", completed);
|
4587 |
-
jQuery.ready();
|
4588 |
-
} // Catch cases where $(document).ready() is called
|
4589 |
-
// after the browser event has already occurred.
|
4590 |
-
// Support: IE <=9 - 10 only
|
4591 |
-
// Older IE sometimes signals "interactive" too soon
|
4592 |
-
|
4593 |
-
|
4594 |
-
if (document.readyState === "complete" || document.readyState !== "loading" && !document.documentElement.doScroll) {
|
4595 |
-
// Handle it asynchronously to allow scripts the opportunity to delay ready
|
4596 |
-
window.setTimeout(jQuery.ready);
|
4597 |
-
} else {
|
4598 |
-
// Use the handy event callback
|
4599 |
-
document.addEventListener("DOMContentLoaded", completed); // A fallback to window.onload, that will always work
|
4600 |
-
|
4601 |
-
window.addEventListener("load", completed);
|
4602 |
-
} // Multifunctional method to get and set values of a collection
|
4603 |
-
// The value/s can optionally be executed if it's a function
|
4604 |
-
|
4605 |
-
|
4606 |
-
var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {
|
4607 |
-
var i = 0,
|
4608 |
-
len = elems.length,
|
4609 |
-
bulk = key == null; // Sets many values
|
4610 |
-
|
4611 |
-
if (toType(key) === "object") {
|
4612 |
-
chainable = true;
|
4613 |
-
|
4614 |
-
for (i in key) {
|
4615 |
-
access(elems, fn, i, key[i], true, emptyGet, raw);
|
4616 |
-
} // Sets one value
|
4617 |
-
|
4618 |
-
} else if (value !== undefined) {
|
4619 |
-
chainable = true;
|
4620 |
-
|
4621 |
-
if (!isFunction(value)) {
|
4622 |
-
raw = true;
|
4623 |
-
}
|
4624 |
-
|
4625 |
-
if (bulk) {
|
4626 |
-
// Bulk operations run against the entire set
|
4627 |
-
if (raw) {
|
4628 |
-
fn.call(elems, value);
|
4629 |
-
fn = null; // ...except when executing function values
|
4630 |
-
} else {
|
4631 |
-
bulk = fn;
|
4632 |
-
|
4633 |
-
fn = function fn(elem, _key, value) {
|
4634 |
-
return bulk.call(jQuery(elem), value);
|
4635 |
-
};
|
4636 |
-
}
|
4637 |
-
}
|
4638 |
-
|
4639 |
-
if (fn) {
|
4640 |
-
for (; i < len; i++) {
|
4641 |
-
fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));
|
4642 |
-
}
|
4643 |
-
}
|
4644 |
-
}
|
4645 |
-
|
4646 |
-
if (chainable) {
|
4647 |
-
return elems;
|
4648 |
-
} // Gets
|
4649 |
-
|
4650 |
-
|
4651 |
-
if (bulk) {
|
4652 |
-
return fn.call(elems);
|
4653 |
-
}
|
4654 |
-
|
4655 |
-
return len ? fn(elems[0], key) : emptyGet;
|
4656 |
-
}; // Matches dashed string for camelizing
|
4657 |
-
|
4658 |
-
|
4659 |
-
var rmsPrefix = /^-ms-/,
|
4660 |
-
rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace()
|
4661 |
-
|
4662 |
-
function fcamelCase(_all, letter) {
|
4663 |
-
return letter.toUpperCase();
|
4664 |
-
} // Convert dashed to camelCase; used by the css and data modules
|
4665 |
-
// Support: IE <=9 - 11, Edge 12 - 15
|
4666 |
-
// Microsoft forgot to hump their vendor prefix (#9572)
|
4667 |
-
|
4668 |
-
|
4669 |
-
function camelCase(string) {
|
4670 |
-
return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
|
4671 |
-
}
|
4672 |
-
|
4673 |
-
var acceptData = function acceptData(owner) {
|
4674 |
-
// Accepts only:
|
4675 |
-
// - Node
|
4676 |
-
// - Node.ELEMENT_NODE
|
4677 |
-
// - Node.DOCUMENT_NODE
|
4678 |
-
// - Object
|
4679 |
-
// - Any
|
4680 |
-
return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;
|
4681 |
-
};
|
4682 |
-
|
4683 |
-
function Data() {
|
4684 |
-
this.expando = jQuery.expando + Data.uid++;
|
4685 |
-
}
|
4686 |
-
|
4687 |
-
Data.uid = 1;
|
4688 |
-
Data.prototype = {
|
4689 |
-
cache: function cache(owner) {
|
4690 |
-
// Check if the owner object already has a cache
|
4691 |
-
var value = owner[this.expando]; // If not, create one
|
4692 |
-
|
4693 |
-
if (!value) {
|
4694 |
-
value = Object.create(null); // We can accept data for non-element nodes in modern browsers,
|
4695 |
-
// but we should not, see #8335.
|
4696 |
-
// Always return an empty object.
|
4697 |
-
|
4698 |
-
if (acceptData(owner)) {
|
4699 |
-
// If it is a node unlikely to be stringify-ed or looped over
|
4700 |
-
// use plain assignment
|
4701 |
-
if (owner.nodeType) {
|
4702 |
-
owner[this.expando] = value; // Otherwise secure it in a non-enumerable property
|
4703 |
-
// configurable must be true to allow the property to be
|
4704 |
-
// deleted when data is removed
|
4705 |
-
} else {
|
4706 |
-
Object.defineProperty(owner, this.expando, {
|
4707 |
-
value: value,
|
4708 |
-
configurable: true
|
4709 |
-
});
|
4710 |
-
}
|
4711 |
-
}
|
4712 |
-
}
|
4713 |
-
|
4714 |
-
return value;
|
4715 |
-
},
|
4716 |
-
set: function set(owner, data, value) {
|
4717 |
-
var prop,
|
4718 |
-
cache = this.cache(owner); // Handle: [ owner, key, value ] args
|
4719 |
-
// Always use camelCase key (gh-2257)
|
4720 |
-
|
4721 |
-
if (typeof data === "string") {
|
4722 |
-
cache[camelCase(data)] = value; // Handle: [ owner, { properties } ] args
|
4723 |
-
} else {
|
4724 |
-
// Copy the properties one-by-one to the cache object
|
4725 |
-
for (prop in data) {
|
4726 |
-
cache[camelCase(prop)] = data[prop];
|
4727 |
-
}
|
4728 |
-
}
|
4729 |
-
|
4730 |
-
return cache;
|
4731 |
-
},
|
4732 |
-
get: function get(owner, key) {
|
4733 |
-
return key === undefined ? this.cache(owner) : // Always use camelCase key (gh-2257)
|
4734 |
-
owner[this.expando] && owner[this.expando][camelCase(key)];
|
4735 |
-
},
|
4736 |
-
access: function access(owner, key, value) {
|
4737 |
-
// In cases where either:
|
4738 |
-
//
|
4739 |
-
// 1. No key was specified
|
4740 |
-
// 2. A string key was specified, but no value provided
|
4741 |
-
//
|
4742 |
-
// Take the "read" path and allow the get method to determine
|
4743 |
-
// which value to return, respectively either:
|
4744 |
-
//
|
4745 |
-
// 1. The entire cache object
|
4746 |
-
// 2. The data stored at the key
|
4747 |
-
//
|
4748 |
-
if (key === undefined || key && typeof key === "string" && value === undefined) {
|
4749 |
-
return this.get(owner, key);
|
4750 |
-
} // When the key is not a string, or both a key and value
|
4751 |
-
// are specified, set or extend (existing objects) with either:
|
4752 |
-
//
|
4753 |
-
// 1. An object of properties
|
4754 |
-
// 2. A key and value
|
4755 |
-
//
|
4756 |
-
|
4757 |
-
|
4758 |
-
this.set(owner, key, value); // Since the "set" path can have two possible entry points
|
4759 |
-
// return the expected data based on which path was taken[*]
|
4760 |
-
|
4761 |
-
return value !== undefined ? value : key;
|
4762 |
-
},
|
4763 |
-
remove: function remove(owner, key) {
|
4764 |
-
var i,
|
4765 |
-
cache = owner[this.expando];
|
4766 |
-
|
4767 |
-
if (cache === undefined) {
|
4768 |
-
return;
|
4769 |
-
}
|
4770 |
-
|
4771 |
-
if (key !== undefined) {
|
4772 |
-
// Support array or space separated string of keys
|
4773 |
-
if (Array.isArray(key)) {
|
4774 |
-
// If key is an array of keys...
|
4775 |
-
// We always set camelCase keys, so remove that.
|
4776 |
-
key = key.map(camelCase);
|
4777 |
-
} else {
|
4778 |
-
key = camelCase(key); // If a key with the spaces exists, use it.
|
4779 |
-
// Otherwise, create an array by matching non-whitespace
|
4780 |
-
|
4781 |
-
key = key in cache ? [key] : key.match(rnothtmlwhite) || [];
|
4782 |
-
}
|
4783 |
-
|
4784 |
-
i = key.length;
|
4785 |
-
|
4786 |
-
while (i--) {
|
4787 |
-
delete cache[key[i]];
|
4788 |
-
}
|
4789 |
-
} // Remove the expando if there's no more data
|
4790 |
-
|
4791 |
-
|
4792 |
-
if (key === undefined || jQuery.isEmptyObject(cache)) {
|
4793 |
-
// Support: Chrome <=35 - 45
|
4794 |
-
// Webkit & Blink performance suffers when deleting properties
|
4795 |
-
// from DOM nodes, so set to undefined instead
|
4796 |
-
// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
|
4797 |
-
if (owner.nodeType) {
|
4798 |
-
owner[this.expando] = undefined;
|
4799 |
-
} else {
|
4800 |
-
delete owner[this.expando];
|
4801 |
-
}
|
4802 |
-
}
|
4803 |
-
},
|
4804 |
-
hasData: function hasData(owner) {
|
4805 |
-
var cache = owner[this.expando];
|
4806 |
-
return cache !== undefined && !jQuery.isEmptyObject(cache);
|
4807 |
-
}
|
4808 |
-
};
|
4809 |
-
var dataPriv = new Data();
|
4810 |
-
var dataUser = new Data(); // Implementation Summary
|
4811 |
-
//
|
4812 |
-
// 1. Enforce API surface and semantic compatibility with 1.9.x branch
|
4813 |
-
// 2. Improve the module's maintainability by reducing the storage
|
4814 |
-
// paths to a single mechanism.
|
4815 |
-
// 3. Use the same single mechanism to support "private" and "user" data.
|
4816 |
-
// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
|
4817 |
-
// 5. Avoid exposing implementation details on user objects (eg. expando properties)
|
4818 |
-
// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
|
4819 |
-
|
4820 |
-
var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
|
4821 |
-
rmultiDash = /[A-Z]/g;
|
4822 |
-
|
4823 |
-
function getData(data) {
|
4824 |
-
if (data === "true") {
|
4825 |
-
return true;
|
4826 |
-
}
|
4827 |
-
|
4828 |
-
if (data === "false") {
|
4829 |
-
return false;
|
4830 |
-
}
|
4831 |
-
|
4832 |
-
if (data === "null") {
|
4833 |
-
return null;
|
4834 |
-
} // Only convert to a number if it doesn't change the string
|
4835 |
-
|
4836 |
-
|
4837 |
-
if (data === +data + "") {
|
4838 |
-
return +data;
|
4839 |
-
}
|
4840 |
-
|
4841 |
-
if (rbrace.test(data)) {
|
4842 |
-
return JSON.parse(data);
|
4843 |
-
}
|
4844 |
-
|
4845 |
-
return data;
|
4846 |
-
}
|
4847 |
-
|
4848 |
-
function dataAttr(elem, key, data) {
|
4849 |
-
var name; // If nothing was found internally, try to fetch any
|
4850 |
-
// data from the HTML5 data-* attribute
|
4851 |
-
|
4852 |
-
if (data === undefined && elem.nodeType === 1) {
|
4853 |
-
name = "data-" + key.replace(rmultiDash, "-$&").toLowerCase();
|
4854 |
-
data = elem.getAttribute(name);
|
4855 |
-
|
4856 |
-
if (typeof data === "string") {
|
4857 |
-
try {
|
4858 |
-
data = getData(data);
|
4859 |
-
} catch (e) {} // Make sure we set the data so it isn't changed later
|
4860 |
-
|
4861 |
-
|
4862 |
-
dataUser.set(elem, key, data);
|
4863 |
-
} else {
|
4864 |
-
data = undefined;
|
4865 |
-
}
|
4866 |
-
}
|
4867 |
-
|
4868 |
-
return data;
|
4869 |
-
}
|
4870 |
-
|
4871 |
-
jQuery.extend({
|
4872 |
-
hasData: function hasData(elem) {
|
4873 |
-
return dataUser.hasData(elem) || dataPriv.hasData(elem);
|
4874 |
-
},
|
4875 |
-
data: function data(elem, name, _data) {
|
4876 |
-
return dataUser.access(elem, name, _data);
|
4877 |
-
},
|
4878 |
-
removeData: function removeData(elem, name) {
|
4879 |
-
dataUser.remove(elem, name);
|
4880 |
-
},
|
4881 |
-
// TODO: Now that all calls to _data and _removeData have been replaced
|
4882 |
-
// with direct calls to dataPriv methods, these can be deprecated.
|
4883 |
-
_data: function _data(elem, name, data) {
|
4884 |
-
return dataPriv.access(elem, name, data);
|
4885 |
-
},
|
4886 |
-
_removeData: function _removeData(elem, name) {
|
4887 |
-
dataPriv.remove(elem, name);
|
4888 |
-
}
|
4889 |
-
});
|
4890 |
-
jQuery.fn.extend({
|
4891 |
-
data: function data(key, value) {
|
4892 |
-
var i,
|
4893 |
-
name,
|
4894 |
-
data,
|
4895 |
-
elem = this[0],
|
4896 |
-
attrs = elem && elem.attributes; // Gets all values
|
4897 |
-
|
4898 |
-
if (key === undefined) {
|
4899 |
-
if (this.length) {
|
4900 |
-
data = dataUser.get(elem);
|
4901 |
-
|
4902 |
-
if (elem.nodeType === 1 && !dataPriv.get(elem, "hasDataAttrs")) {
|
4903 |
-
i = attrs.length;
|
4904 |
-
|
4905 |
-
while (i--) {
|
4906 |
-
// Support: IE 11 only
|
4907 |
-
// The attrs elements can be null (#14894)
|
4908 |
-
if (attrs[i]) {
|
4909 |
-
name = attrs[i].name;
|
4910 |
-
|
4911 |
-
if (name.indexOf("data-") === 0) {
|
4912 |
-
name = camelCase(name.slice(5));
|
4913 |
-
dataAttr(elem, name, data[name]);
|
4914 |
-
}
|
4915 |
-
}
|
4916 |
-
}
|
4917 |
-
|
4918 |
-
dataPriv.set(elem, "hasDataAttrs", true);
|
4919 |
-
}
|
4920 |
-
}
|
4921 |
-
|
4922 |
-
return data;
|
4923 |
-
} // Sets multiple values
|
4924 |
-
|
4925 |
-
|
4926 |
-
if (_typeof(key) === "object") {
|
4927 |
-
return this.each(function () {
|
4928 |
-
dataUser.set(this, key);
|
4929 |
-
});
|
4930 |
-
}
|
4931 |
-
|
4932 |
-
return access(this, function (value) {
|
4933 |
-
var data; // The calling jQuery object (element matches) is not empty
|
4934 |
-
// (and therefore has an element appears at this[ 0 ]) and the
|
4935 |
-
// `value` parameter was not undefined. An empty jQuery object
|
4936 |
-
// will result in `undefined` for elem = this[ 0 ] which will
|
4937 |
-
// throw an exception if an attempt to read a data cache is made.
|
4938 |
-
|
4939 |
-
if (elem && value === undefined) {
|
4940 |
-
// Attempt to get data from the cache
|
4941 |
-
// The key will always be camelCased in Data
|
4942 |
-
data = dataUser.get(elem, key);
|
4943 |
-
|
4944 |
-
if (data !== undefined) {
|
4945 |
-
return data;
|
4946 |
-
} // Attempt to "discover" the data in
|
4947 |
-
// HTML5 custom data-* attrs
|
4948 |
-
|
4949 |
-
|
4950 |
-
data = dataAttr(elem, key);
|
4951 |
-
|
4952 |
-
if (data !== undefined) {
|
4953 |
-
return data;
|
4954 |
-
} // We tried really hard, but the data doesn't exist.
|
4955 |
-
|
4956 |
-
|
4957 |
-
return;
|
4958 |
-
} // Set the data...
|
4959 |
-
|
4960 |
-
|
4961 |
-
this.each(function () {
|
4962 |
-
// We always store the camelCased key
|
4963 |
-
dataUser.set(this, key, value);
|
4964 |
-
});
|
4965 |
-
}, null, value, arguments.length > 1, null, true);
|
4966 |
-
},
|
4967 |
-
removeData: function removeData(key) {
|
4968 |
-
return this.each(function () {
|
4969 |
-
dataUser.remove(this, key);
|
4970 |
-
});
|
4971 |
-
}
|
4972 |
-
});
|
4973 |
-
jQuery.extend({
|
4974 |
-
queue: function queue(elem, type, data) {
|
4975 |
-
var queue;
|
4976 |
-
|
4977 |
-
if (elem) {
|
4978 |
-
type = (type || "fx") + "queue";
|
4979 |
-
queue = dataPriv.get(elem, type); // Speed up dequeue by getting out quickly if this is just a lookup
|
4980 |
-
|
4981 |
-
if (data) {
|
4982 |
-
if (!queue || Array.isArray(data)) {
|
4983 |
-
queue = dataPriv.access(elem, type, jQuery.makeArray(data));
|
4984 |
-
} else {
|
4985 |
-
queue.push(data);
|
4986 |
-
}
|
4987 |
-
}
|
4988 |
-
|
4989 |
-
return queue || [];
|
4990 |
-
}
|
4991 |
-
},
|
4992 |
-
dequeue: function dequeue(elem, type) {
|
4993 |
-
type = type || "fx";
|
4994 |
-
|
4995 |
-
var queue = jQuery.queue(elem, type),
|
4996 |
-
startLength = queue.length,
|
4997 |
-
fn = queue.shift(),
|
4998 |
-
hooks = jQuery._queueHooks(elem, type),
|
4999 |
-
next = function next() {
|
5000 |
-
jQuery.dequeue(elem, type);
|
5001 |
-
}; // If the fx queue is dequeued, always remove the progress sentinel
|
5002 |
-
|
5003 |
-
|
5004 |
-
if (fn === "inprogress") {
|
5005 |
-
fn = queue.shift();
|
5006 |
-
startLength--;
|
5007 |
-
}
|
5008 |
-
|
5009 |
-
if (fn) {
|
5010 |
-
// Add a progress sentinel to prevent the fx queue from being
|
5011 |
-
// automatically dequeued
|
5012 |
-
if (type === "fx") {
|
5013 |
-
queue.unshift("inprogress");
|
5014 |
-
} // Clear up the last queue stop function
|
5015 |
-
|
5016 |
-
|
5017 |
-
delete hooks.stop;
|
5018 |
-
fn.call(elem, next, hooks);
|
5019 |
-
}
|
5020 |
-
|
5021 |
-
if (!startLength && hooks) {
|
5022 |
-
hooks.empty.fire();
|
5023 |
-
}
|
5024 |
-
},
|
5025 |
-
// Not public - generate a queueHooks object, or return the current one
|
5026 |
-
_queueHooks: function _queueHooks(elem, type) {
|
5027 |
-
var key = type + "queueHooks";
|
5028 |
-
return dataPriv.get(elem, key) || dataPriv.access(elem, key, {
|
5029 |
-
empty: jQuery.Callbacks("once memory").add(function () {
|
5030 |
-
dataPriv.remove(elem, [type + "queue", key]);
|
5031 |
-
})
|
5032 |
-
});
|
5033 |
-
}
|
5034 |
-
});
|
5035 |
-
jQuery.fn.extend({
|
5036 |
-
queue: function queue(type, data) {
|
5037 |
-
var setter = 2;
|
5038 |
-
|
5039 |
-
if (typeof type !== "string") {
|
5040 |
-
data = type;
|
5041 |
-
type = "fx";
|
5042 |
-
setter--;
|
5043 |
-
}
|
5044 |
-
|
5045 |
-
if (arguments.length < setter) {
|
5046 |
-
return jQuery.queue(this[0], type);
|
5047 |
-
}
|
5048 |
-
|
5049 |
-
return data === undefined ? this : this.each(function () {
|
5050 |
-
var queue = jQuery.queue(this, type, data); // Ensure a hooks for this queue
|
5051 |
-
|
5052 |
-
jQuery._queueHooks(this, type);
|
5053 |
-
|
5054 |
-
if (type === "fx" && queue[0] !== "inprogress") {
|
5055 |
-
jQuery.dequeue(this, type);
|
5056 |
-
}
|
5057 |
-
});
|
5058 |
-
},
|
5059 |
-
dequeue: function dequeue(type) {
|
5060 |
-
return this.each(function () {
|
5061 |
-
jQuery.dequeue(this, type);
|
5062 |
-
});
|
5063 |
-
},
|
5064 |
-
clearQueue: function clearQueue(type) {
|
5065 |
-
return this.queue(type || "fx", []);
|
5066 |
-
},
|
5067 |
-
// Get a promise resolved when queues of a certain type
|
5068 |
-
// are emptied (fx is the type by default)
|
5069 |
-
promise: function promise(type, obj) {
|
5070 |
-
var tmp,
|
5071 |
-
count = 1,
|
5072 |
-
defer = jQuery.Deferred(),
|
5073 |
-
elements = this,
|
5074 |
-
i = this.length,
|
5075 |
-
resolve = function resolve() {
|
5076 |
-
if (! --count) {
|
5077 |
-
defer.resolveWith(elements, [elements]);
|
5078 |
-
}
|
5079 |
-
};
|
5080 |
-
|
5081 |
-
if (typeof type !== "string") {
|
5082 |
-
obj = type;
|
5083 |
-
type = undefined;
|
5084 |
-
}
|
5085 |
-
|
5086 |
-
type = type || "fx";
|
5087 |
-
|
5088 |
-
while (i--) {
|
5089 |
-
tmp = dataPriv.get(elements[i], type + "queueHooks");
|
5090 |
-
|
5091 |
-
if (tmp && tmp.empty) {
|
5092 |
-
count++;
|
5093 |
-
tmp.empty.add(resolve);
|
5094 |
-
}
|
5095 |
-
}
|
5096 |
-
|
5097 |
-
resolve();
|
5098 |
-
return defer.promise(obj);
|
5099 |
-
}
|
5100 |
-
});
|
5101 |
-
var pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;
|
5102 |
-
var rcssNum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i");
|
5103 |
-
var cssExpand = ["Top", "Right", "Bottom", "Left"];
|
5104 |
-
var documentElement = document.documentElement;
|
5105 |
-
|
5106 |
-
var isAttached = function isAttached(elem) {
|
5107 |
-
return jQuery.contains(elem.ownerDocument, elem);
|
5108 |
-
},
|
5109 |
-
composed = {
|
5110 |
-
composed: true
|
5111 |
-
}; // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
|
5112 |
-
// Check attachment across shadow DOM boundaries when possible (gh-3504)
|
5113 |
-
// Support: iOS 10.0-10.2 only
|
5114 |
-
// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
|
5115 |
-
// leading to errors. We need to check for `getRootNode`.
|
5116 |
-
|
5117 |
-
|
5118 |
-
if (documentElement.getRootNode) {
|
5119 |
-
isAttached = function isAttached(elem) {
|
5120 |
-
return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;
|
5121 |
-
};
|
5122 |
-
}
|
5123 |
-
|
5124 |
-
var isHiddenWithinTree = function isHiddenWithinTree(elem, el) {
|
5125 |
-
// isHiddenWithinTree might be called from jQuery#filter function;
|
5126 |
-
// in that case, element will be second argument
|
5127 |
-
elem = el || elem; // Inline style trumps all
|
5128 |
-
|
5129 |
-
return elem.style.display === "none" || elem.style.display === "" && // Otherwise, check computed style
|
5130 |
-
// Support: Firefox <=43 - 45
|
5131 |
-
// Disconnected elements can have computed display: none, so first confirm that elem is
|
5132 |
-
// in the document.
|
5133 |
-
isAttached(elem) && jQuery.css(elem, "display") === "none";
|
5134 |
-
};
|
5135 |
-
|
5136 |
-
function adjustCSS(elem, prop, valueParts, tween) {
|
5137 |
-
var adjusted,
|
5138 |
-
scale,
|
5139 |
-
maxIterations = 20,
|
5140 |
-
currentValue = tween ? function () {
|
5141 |
-
return tween.cur();
|
5142 |
-
} : function () {
|
5143 |
-
return jQuery.css(elem, prop, "");
|
5144 |
-
},
|
5145 |
-
initial = currentValue(),
|
5146 |
-
unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? "" : "px"),
|
5147 |
-
// Starting value computation is required for potential unit mismatches
|
5148 |
-
initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== "px" && +initial) && rcssNum.exec(jQuery.css(elem, prop));
|
5149 |
-
|
5150 |
-
if (initialInUnit && initialInUnit[3] !== unit) {
|
5151 |
-
// Support: Firefox <=54
|
5152 |
-
// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
|
5153 |
-
initial = initial / 2; // Trust units reported by jQuery.css
|
5154 |
-
|
5155 |
-
unit = unit || initialInUnit[3]; // Iteratively approximate from a nonzero starting point
|
5156 |
-
|
5157 |
-
initialInUnit = +initial || 1;
|
5158 |
-
|
5159 |
-
while (maxIterations--) {
|
5160 |
-
// Evaluate and update our best guess (doubling guesses that zero out).
|
5161 |
-
// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
|
5162 |
-
jQuery.style(elem, prop, initialInUnit + unit);
|
5163 |
-
|
5164 |
-
if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {
|
5165 |
-
maxIterations = 0;
|
5166 |
-
}
|
5167 |
-
|
5168 |
-
initialInUnit = initialInUnit / scale;
|
5169 |
-
}
|
5170 |
-
|
5171 |
-
initialInUnit = initialInUnit * 2;
|
5172 |
-
jQuery.style(elem, prop, initialInUnit + unit); // Make sure we update the tween properties later on
|
5173 |
-
|
5174 |
-
valueParts = valueParts || [];
|
5175 |
-
}
|
5176 |
-
|
5177 |
-
if (valueParts) {
|
5178 |
-
initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified
|
5179 |
-
|
5180 |
-
adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];
|
5181 |
-
|
5182 |
-
if (tween) {
|
5183 |
-
tween.unit = unit;
|
5184 |
-
tween.start = initialInUnit;
|
5185 |
-
tween.end = adjusted;
|
5186 |
-
}
|
5187 |
-
}
|
5188 |
-
|
5189 |
-
return adjusted;
|
5190 |
-
}
|
5191 |
-
|
5192 |
-
var defaultDisplayMap = {};
|
5193 |
-
|
5194 |
-
function getDefaultDisplay(elem) {
|
5195 |
-
var temp,
|
5196 |
-
doc = elem.ownerDocument,
|
5197 |
-
nodeName = elem.nodeName,
|
5198 |
-
display = defaultDisplayMap[nodeName];
|
5199 |
-
|
5200 |
-
if (display) {
|
5201 |
-
return display;
|
5202 |
-
}
|
5203 |
-
|
5204 |
-
temp = doc.body.appendChild(doc.createElement(nodeName));
|
5205 |
-
display = jQuery.css(temp, "display");
|
5206 |
-
temp.parentNode.removeChild(temp);
|
5207 |
-
|
5208 |
-
if (display === "none") {
|
5209 |
-
display = "block";
|
5210 |
-
}
|
5211 |
-
|
5212 |
-
defaultDisplayMap[nodeName] = display;
|
5213 |
-
return display;
|
5214 |
-
}
|
5215 |
-
|
5216 |
-
function showHide(elements, show) {
|
5217 |
-
var display,
|
5218 |
-
elem,
|
5219 |
-
values = [],
|
5220 |
-
index = 0,
|
5221 |
-
length = elements.length; // Determine new display value for elements that need to change
|
5222 |
-
|
5223 |
-
for (; index < length; index++) {
|
5224 |
-
elem = elements[index];
|
5225 |
-
|
5226 |
-
if (!elem.style) {
|
5227 |
-
continue;
|
5228 |
-
}
|
5229 |
-
|
5230 |
-
display = elem.style.display;
|
5231 |
-
|
5232 |
-
if (show) {
|
5233 |
-
// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
|
5234 |
-
// check is required in this first loop unless we have a nonempty display value (either
|
5235 |
-
// inline or about-to-be-restored)
|
5236 |
-
if (display === "none") {
|
5237 |
-
values[index] = dataPriv.get(elem, "display") || null;
|
5238 |
-
|
5239 |
-
if (!values[index]) {
|
5240 |
-
elem.style.display = "";
|
5241 |
-
}
|
5242 |
-
}
|
5243 |
-
|
5244 |
-
if (elem.style.display === "" && isHiddenWithinTree(elem)) {
|
5245 |
-
values[index] = getDefaultDisplay(elem);
|
5246 |
-
}
|
5247 |
-
} else {
|
5248 |
-
if (display !== "none") {
|
5249 |
-
values[index] = "none"; // Remember what we're overwriting
|
5250 |
-
|
5251 |
-
dataPriv.set(elem, "display", display);
|
5252 |
-
}
|
5253 |
-
}
|
5254 |
-
} // Set the display of the elements in a second loop to avoid constant reflow
|
5255 |
-
|
5256 |
-
|
5257 |
-
for (index = 0; index < length; index++) {
|
5258 |
-
if (values[index] != null) {
|
5259 |
-
elements[index].style.display = values[index];
|
5260 |
-
}
|
5261 |
-
}
|
5262 |
-
|
5263 |
-
return elements;
|
5264 |
-
}
|
5265 |
-
|
5266 |
-
jQuery.fn.extend({
|
5267 |
-
show: function show() {
|
5268 |
-
return showHide(this, true);
|
5269 |
-
},
|
5270 |
-
hide: function hide() {
|
5271 |
-
return showHide(this);
|
5272 |
-
},
|
5273 |
-
toggle: function toggle(state) {
|
5274 |
-
if (typeof state === "boolean") {
|
5275 |
-
return state ? this.show() : this.hide();
|
5276 |
-
}
|
5277 |
-
|
5278 |
-
return this.each(function () {
|
5279 |
-
if (isHiddenWithinTree(this)) {
|
5280 |
-
jQuery(this).show();
|
5281 |
-
} else {
|
5282 |
-
jQuery(this).hide();
|
5283 |
-
}
|
5284 |
-
});
|
5285 |
-
}
|
5286 |
-
});
|
5287 |
-
var rcheckableType = /^(?:checkbox|radio)$/i;
|
5288 |
-
var rtagName = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i;
|
5289 |
-
var rscriptType = /^$|^module$|\/(?:java|ecma)script/i;
|
5290 |
-
|
5291 |
-
(function () {
|
5292 |
-
var fragment = document.createDocumentFragment(),
|
5293 |
-
div = fragment.appendChild(document.createElement("div")),
|
5294 |
-
input = document.createElement("input"); // Support: Android 4.0 - 4.3 only
|
5295 |
-
// Check state lost if the name is set (#11217)
|
5296 |
-
// Support: Windows Web Apps (WWA)
|
5297 |
-
// `name` and `type` must use .setAttribute for WWA (#14901)
|
5298 |
-
|
5299 |
-
input.setAttribute("type", "radio");
|
5300 |
-
input.setAttribute("checked", "checked");
|
5301 |
-
input.setAttribute("name", "t");
|
5302 |
-
div.appendChild(input); // Support: Android <=4.1 only
|
5303 |
-
// Older WebKit doesn't clone checked state correctly in fragments
|
5304 |
-
|
5305 |
-
support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE <=11 only
|
5306 |
-
// Make sure textarea (and checkbox) defaultValue is properly cloned
|
5307 |
-
|
5308 |
-
div.innerHTML = "<textarea>x</textarea>";
|
5309 |
-
support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue; // Support: IE <=9 only
|
5310 |
-
// IE <=9 replaces <option> tags with their contents when inserted outside of
|
5311 |
-
// the select element.
|
5312 |
-
|
5313 |
-
div.innerHTML = "<option></option>";
|
5314 |
-
support.option = !!div.lastChild;
|
5315 |
-
})(); // We have to close these tags to support XHTML (#13200)
|
5316 |
-
|
5317 |
-
|
5318 |
-
var wrapMap = {
|
5319 |
-
// XHTML parsers do not magically insert elements in the
|
5320 |
-
// same way that tag soup parsers do. So we cannot shorten
|
5321 |
-
// this by omitting <tbody> or other required elements.
|
5322 |
-
thead: [1, "<table>", "</table>"],
|
5323 |
-
col: [2, "<table><colgroup>", "</colgroup></table>"],
|
5324 |
-
tr: [2, "<table><tbody>", "</tbody></table>"],
|
5325 |
-
td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
|
5326 |
-
_default: [0, "", ""]
|
5327 |
-
};
|
5328 |
-
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
|
5329 |
-
wrapMap.th = wrapMap.td; // Support: IE <=9 only
|
5330 |
-
|
5331 |
-
if (!support.option) {
|
5332 |
-
wrapMap.optgroup = wrapMap.option = [1, "<select multiple='multiple'>", "</select>"];
|
5333 |
-
}
|
5334 |
-
|
5335 |
-
function getAll(context, tag) {
|
5336 |
-
// Support: IE <=9 - 11 only
|
5337 |
-
// Use typeof to avoid zero-argument method invocation on host objects (#15151)
|
5338 |
-
var ret;
|
5339 |
-
|
5340 |
-
if (typeof context.getElementsByTagName !== "undefined") {
|
5341 |
-
ret = context.getElementsByTagName(tag || "*");
|
5342 |
-
} else if (typeof context.querySelectorAll !== "undefined") {
|
5343 |
-
ret = context.querySelectorAll(tag || "*");
|
5344 |
-
} else {
|
5345 |
-
ret = [];
|
5346 |
-
}
|
5347 |
-
|
5348 |
-
if (tag === undefined || tag && nodeName(context, tag)) {
|
5349 |
-
return jQuery.merge([context], ret);
|
5350 |
-
}
|
5351 |
-
|
5352 |
-
return ret;
|
5353 |
-
} // Mark scripts as having already been evaluated
|
5354 |
-
|
5355 |
-
|
5356 |
-
function setGlobalEval(elems, refElements) {
|
5357 |
-
var i = 0,
|
5358 |
-
l = elems.length;
|
5359 |
-
|
5360 |
-
for (; i < l; i++) {
|
5361 |
-
dataPriv.set(elems[i], "globalEval", !refElements || dataPriv.get(refElements[i], "globalEval"));
|
5362 |
-
}
|
5363 |
-
}
|
5364 |
-
|
5365 |
-
var rhtml = /<|&#?\w+;/;
|
5366 |
-
|
5367 |
-
function buildFragment(elems, context, scripts, selection, ignored) {
|
5368 |
-
var elem,
|
5369 |
-
tmp,
|
5370 |
-
tag,
|
5371 |
-
wrap,
|
5372 |
-
attached,
|
5373 |
-
j,
|
5374 |
-
fragment = context.createDocumentFragment(),
|
5375 |
-
nodes = [],
|
5376 |
-
i = 0,
|
5377 |
-
l = elems.length;
|
5378 |
-
|
5379 |
-
for (; i < l; i++) {
|
5380 |
-
elem = elems[i];
|
5381 |
-
|
5382 |
-
if (elem || elem === 0) {
|
5383 |
-
// Add nodes directly
|
5384 |
-
if (toType(elem) === "object") {
|
5385 |
-
// Support: Android <=4.0 only, PhantomJS 1 only
|
5386 |
-
// push.apply(_, arraylike) throws on ancient WebKit
|
5387 |
-
jQuery.merge(nodes, elem.nodeType ? [elem] : elem); // Convert non-html into a text node
|
5388 |
-
} else if (!rhtml.test(elem)) {
|
5389 |
-
nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes
|
5390 |
-
} else {
|
5391 |
-
tmp = tmp || fragment.appendChild(context.createElement("div")); // Deserialize a standard representation
|
5392 |
-
|
5393 |
-
tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase();
|
5394 |
-
wrap = wrapMap[tag] || wrapMap._default;
|
5395 |
-
tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; // Descend through wrappers to the right content
|
5396 |
-
|
5397 |
-
j = wrap[0];
|
5398 |
-
|
5399 |
-
while (j--) {
|
5400 |
-
tmp = tmp.lastChild;
|
5401 |
-
} // Support: Android <=4.0 only, PhantomJS 1 only
|
5402 |
-
// push.apply(_, arraylike) throws on ancient WebKit
|
5403 |
-
|
5404 |
-
|
5405 |
-
jQuery.merge(nodes, tmp.childNodes); // Remember the top-level container
|
5406 |
-
|
5407 |
-
tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392)
|
5408 |
-
|
5409 |
-
tmp.textContent = "";
|
5410 |
-
}
|
5411 |
-
}
|
5412 |
-
} // Remove wrapper from fragment
|
5413 |
-
|
5414 |
-
|
5415 |
-
fragment.textContent = "";
|
5416 |
-
i = 0;
|
5417 |
-
|
5418 |
-
while (elem = nodes[i++]) {
|
5419 |
-
// Skip elements already in the context collection (trac-4087)
|
5420 |
-
if (selection && jQuery.inArray(elem, selection) > -1) {
|
5421 |
-
if (ignored) {
|
5422 |
-
ignored.push(elem);
|
5423 |
-
}
|
5424 |
-
|
5425 |
-
continue;
|
5426 |
-
}
|
5427 |
-
|
5428 |
-
attached = isAttached(elem); // Append to fragment
|
5429 |
-
|
5430 |
-
tmp = getAll(fragment.appendChild(elem), "script"); // Preserve script evaluation history
|
5431 |
-
|
5432 |
-
if (attached) {
|
5433 |
-
setGlobalEval(tmp);
|
5434 |
-
} // Capture executables
|
5435 |
-
|
5436 |
-
|
5437 |
-
if (scripts) {
|
5438 |
-
j = 0;
|
5439 |
-
|
5440 |
-
while (elem = tmp[j++]) {
|
5441 |
-
if (rscriptType.test(elem.type || "")) {
|
5442 |
-
scripts.push(elem);
|
5443 |
-
}
|
5444 |
-
}
|
5445 |
-
}
|
5446 |
-
}
|
5447 |
-
|
5448 |
-
return fragment;
|
5449 |
-
}
|
5450 |
-
|
5451 |
-
var rkeyEvent = /^key/,
|
5452 |
-
rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
|
5453 |
-
rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
|
5454 |
-
|
5455 |
-
function returnTrue() {
|
5456 |
-
return true;
|
5457 |
-
}
|
5458 |
-
|
5459 |
-
function returnFalse() {
|
5460 |
-
return false;
|
5461 |
-
} // Support: IE <=9 - 11+
|
5462 |
-
// focus() and blur() are asynchronous, except when they are no-op.
|
5463 |
-
// So expect focus to be synchronous when the element is already active,
|
5464 |
-
// and blur to be synchronous when the element is not already active.
|
5465 |
-
// (focus and blur are always synchronous in other supported browsers,
|
5466 |
-
// this just defines when we can count on it).
|
5467 |
-
|
5468 |
-
|
5469 |
-
function expectSync(elem, type) {
|
5470 |
-
return elem === safeActiveElement() === (type === "focus");
|
5471 |
-
} // Support: IE <=9 only
|
5472 |
-
// Accessing document.activeElement can throw unexpectedly
|
5473 |
-
// https://bugs.jquery.com/ticket/13393
|
5474 |
-
|
5475 |
-
|
5476 |
-
function safeActiveElement() {
|
5477 |
-
try {
|
5478 |
-
return document.activeElement;
|
5479 |
-
} catch (err) {}
|
5480 |
-
}
|
5481 |
-
|
5482 |
-
function _on(elem, types, selector, data, fn, one) {
|
5483 |
-
var origFn, type; // Types can be a map of types/handlers
|
5484 |
-
|
5485 |
-
if (_typeof(types) === "object") {
|
5486 |
-
// ( types-Object, selector, data )
|
5487 |
-
if (typeof selector !== "string") {
|
5488 |
-
// ( types-Object, data )
|
5489 |
-
data = data || selector;
|
5490 |
-
selector = undefined;
|
5491 |
-
}
|
5492 |
-
|
5493 |
-
for (type in types) {
|
5494 |
-
_on(elem, type, selector, data, types[type], one);
|
5495 |
-
}
|
5496 |
-
|
5497 |
-
return elem;
|
5498 |
-
}
|
5499 |
-
|
5500 |
-
if (data == null && fn == null) {
|
5501 |
-
// ( types, fn )
|
5502 |
-
fn = selector;
|
5503 |
-
data = selector = undefined;
|
5504 |
-
} else if (fn == null) {
|
5505 |
-
if (typeof selector === "string") {
|
5506 |
-
// ( types, selector, fn )
|
5507 |
-
fn = data;
|
5508 |
-
data = undefined;
|
5509 |
-
} else {
|
5510 |
-
// ( types, data, fn )
|
5511 |
-
fn = data;
|
5512 |
-
data = selector;
|
5513 |
-
selector = undefined;
|
5514 |
-
}
|
5515 |
-
}
|
5516 |
-
|
5517 |
-
if (fn === false) {
|
5518 |
-
fn = returnFalse;
|
5519 |
-
} else if (!fn) {
|
5520 |
-
return elem;
|
5521 |
-
}
|
5522 |
-
|
5523 |
-
if (one === 1) {
|
5524 |
-
origFn = fn;
|
5525 |
-
|
5526 |
-
fn = function fn(event) {
|
5527 |
-
// Can use an empty set, since event contains the info
|
5528 |
-
jQuery().off(event);
|
5529 |
-
return origFn.apply(this, arguments);
|
5530 |
-
}; // Use same guid so caller can remove using origFn
|
5531 |
-
|
5532 |
-
|
5533 |
-
fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
|
5534 |
-
}
|
5535 |
-
|
5536 |
-
return elem.each(function () {
|
5537 |
-
jQuery.event.add(this, types, fn, data, selector);
|
5538 |
-
});
|
5539 |
-
}
|
5540 |
-
/*
|
5541 |
-
* Helper functions for managing events -- not part of the public interface.
|
5542 |
-
* Props to Dean Edwards' addEvent library for many of the ideas.
|
5543 |
-
*/
|
5544 |
-
|
5545 |
-
|
5546 |
-
jQuery.event = {
|
5547 |
-
global: {},
|
5548 |
-
add: function add(elem, types, handler, data, selector) {
|
5549 |
-
var handleObjIn,
|
5550 |
-
eventHandle,
|
5551 |
-
tmp,
|
5552 |
-
events,
|
5553 |
-
t,
|
5554 |
-
handleObj,
|
5555 |
-
special,
|
5556 |
-
handlers,
|
5557 |
-
type,
|
5558 |
-
namespaces,
|
5559 |
-
origType,
|
5560 |
-
elemData = dataPriv.get(elem); // Only attach events to objects that accept data
|
5561 |
-
|
5562 |
-
if (!acceptData(elem)) {
|
5563 |
-
return;
|
5564 |
-
} // Caller can pass in an object of custom data in lieu of the handler
|
5565 |
-
|
5566 |
-
|
5567 |
-
if (handler.handler) {
|
5568 |
-
handleObjIn = handler;
|
5569 |
-
handler = handleObjIn.handler;
|
5570 |
-
selector = handleObjIn.selector;
|
5571 |
-
} // Ensure that invalid selectors throw exceptions at attach time
|
5572 |
-
// Evaluate against documentElement in case elem is a non-element node (e.g., document)
|
5573 |
-
|
5574 |
-
|
5575 |
-
if (selector) {
|
5576 |
-
jQuery.find.matchesSelector(documentElement, selector);
|
5577 |
-
} // Make sure that the handler has a unique ID, used to find/remove it later
|
5578 |
-
|
5579 |
-
|
5580 |
-
if (!handler.guid) {
|
5581 |
-
handler.guid = jQuery.guid++;
|
5582 |
-
} // Init the element's event structure and main handler, if this is the first
|
5583 |
-
|
5584 |
-
|
5585 |
-
if (!(events = elemData.events)) {
|
5586 |
-
events = elemData.events = Object.create(null);
|
5587 |
-
}
|
5588 |
-
|
5589 |
-
if (!(eventHandle = elemData.handle)) {
|
5590 |
-
eventHandle = elemData.handle = function (e) {
|
5591 |
-
// Discard the second event of a jQuery.event.trigger() and
|
5592 |
-
// when an event is called after a page has unloaded
|
5593 |
-
return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;
|
5594 |
-
};
|
5595 |
-
} // Handle multiple events separated by a space
|
5596 |
-
|
5597 |
-
|
5598 |
-
types = (types || "").match(rnothtmlwhite) || [""];
|
5599 |
-
t = types.length;
|
5600 |
-
|
5601 |
-
while (t--) {
|
5602 |
-
tmp = rtypenamespace.exec(types[t]) || [];
|
5603 |
-
type = origType = tmp[1];
|
5604 |
-
namespaces = (tmp[2] || "").split(".").sort(); // There *must* be a type, no attaching namespace-only handlers
|
5605 |
-
|
5606 |
-
if (!type) {
|
5607 |
-
continue;
|
5608 |
-
} // If event changes its type, use the special event handlers for the changed type
|
5609 |
-
|
5610 |
-
|
5611 |
-
special = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type
|
5612 |
-
|
5613 |
-
type = (selector ? special.delegateType : special.bindType) || type; // Update special based on newly reset type
|
5614 |
-
|
5615 |
-
special = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers
|
5616 |
-
|
5617 |
-
handleObj = jQuery.extend({
|
5618 |
-
type: type,
|
5619 |
-
origType: origType,
|
5620 |
-
data: data,
|
5621 |
-
handler: handler,
|
5622 |
-
guid: handler.guid,
|
5623 |
-
selector: selector,
|
5624 |
-
needsContext: selector && jQuery.expr.match.needsContext.test(selector),
|
5625 |
-
namespace: namespaces.join(".")
|
5626 |
-
}, handleObjIn); // Init the event handler queue if we're the first
|
5627 |
-
|
5628 |
-
if (!(handlers = events[type])) {
|
5629 |
-
handlers = events[type] = [];
|
5630 |
-
handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false
|
5631 |
-
|
5632 |
-
if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
|
5633 |
-
if (elem.addEventListener) {
|
5634 |
-
elem.addEventListener(type, eventHandle);
|
5635 |
-
}
|
5636 |
-
}
|
5637 |
-
}
|
5638 |
-
|
5639 |
-
if (special.add) {
|
5640 |
-
special.add.call(elem, handleObj);
|
5641 |
-
|
5642 |
-
if (!handleObj.handler.guid) {
|
5643 |
-
handleObj.handler.guid = handler.guid;
|
5644 |
-
}
|
5645 |
-
} // Add to the element's handler list, delegates in front
|
5646 |
-
|
5647 |
-
|
5648 |
-
if (selector) {
|
5649 |
-
handlers.splice(handlers.delegateCount++, 0, handleObj);
|
5650 |
-
} else {
|
5651 |
-
handlers.push(handleObj);
|
5652 |
-
} // Keep track of which events have ever been used, for event optimization
|
5653 |
-
|
5654 |
-
|
5655 |
-
jQuery.event.global[type] = true;
|
5656 |
-
}
|
5657 |
-
},
|
5658 |
-
// Detach an event or set of events from an element
|
5659 |
-
remove: function remove(elem, types, handler, selector, mappedTypes) {
|
5660 |
-
var j,
|
5661 |
-
origCount,
|
5662 |
-
tmp,
|
5663 |
-
events,
|
5664 |
-
t,
|
5665 |
-
handleObj,
|
5666 |
-
special,
|
5667 |
-
handlers,
|
5668 |
-
type,
|
5669 |
-
namespaces,
|
5670 |
-
origType,
|
5671 |
-
elemData = dataPriv.hasData(elem) && dataPriv.get(elem);
|
5672 |
-
|
5673 |
-
if (!elemData || !(events = elemData.events)) {
|
5674 |
-
return;
|
5675 |
-
} // Once for each type.namespace in types; type may be omitted
|
5676 |
-
|
5677 |
-
|
5678 |
-
types = (types || "").match(rnothtmlwhite) || [""];
|
5679 |
-
t = types.length;
|
5680 |
-
|
5681 |
-
while (t--) {
|
5682 |
-
tmp = rtypenamespace.exec(types[t]) || [];
|
5683 |
-
type = origType = tmp[1];
|
5684 |
-
namespaces = (tmp[2] || "").split(".").sort(); // Unbind all events (on this namespace, if provided) for the element
|
5685 |
-
|
5686 |
-
if (!type) {
|
5687 |
-
for (type in events) {
|
5688 |
-
jQuery.event.remove(elem, type + types[t], handler, selector, true);
|
5689 |
-
}
|
5690 |
-
|
5691 |
-
continue;
|
5692 |
-
}
|
5693 |
-
|
5694 |
-
special = jQuery.event.special[type] || {};
|
5695 |
-
type = (selector ? special.delegateType : special.bindType) || type;
|
5696 |
-
handlers = events[type] || [];
|
5697 |
-
tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)"); // Remove matching events
|
5698 |
-
|
5699 |
-
origCount = j = handlers.length;
|
5700 |
-
|
5701 |
-
while (j--) {
|
5702 |
-
handleObj = handlers[j];
|
5703 |
-
|
5704 |
-
if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === "**" && handleObj.selector)) {
|
5705 |
-
handlers.splice(j, 1);
|
5706 |
-
|
5707 |
-
if (handleObj.selector) {
|
5708 |
-
handlers.delegateCount--;
|
5709 |
-
}
|
5710 |
-
|
5711 |
-
if (special.remove) {
|
5712 |
-
special.remove.call(elem, handleObj);
|
5713 |
-
}
|
5714 |
-
}
|
5715 |
-
} // Remove generic event handler if we removed something and no more handlers exist
|
5716 |
-
// (avoids potential for endless recursion during removal of special event handlers)
|
5717 |
-
|
5718 |
-
|
5719 |
-
if (origCount && !handlers.length) {
|
5720 |
-
if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
|
5721 |
-
jQuery.removeEvent(elem, type, elemData.handle);
|
5722 |
-
}
|
5723 |
-
|
5724 |
-
delete events[type];
|
5725 |
-
}
|
5726 |
-
} // Remove data and the expando if it's no longer used
|
5727 |
-
|
5728 |
-
|
5729 |
-
if (jQuery.isEmptyObject(events)) {
|
5730 |
-
dataPriv.remove(elem, "handle events");
|
5731 |
-
}
|
5732 |
-
},
|
5733 |
-
dispatch: function dispatch(nativeEvent) {
|
5734 |
-
var i,
|
5735 |
-
j,
|
5736 |
-
ret,
|
5737 |
-
matched,
|
5738 |
-
handleObj,
|
5739 |
-
handlerQueue,
|
5740 |
-
args = new Array(arguments.length),
|
5741 |
-
// Make a writable jQuery.Event from the native event object
|
5742 |
-
event = jQuery.event.fix(nativeEvent),
|
5743 |
-
handlers = (dataPriv.get(this, "events") || Object.create(null))[event.type] || [],
|
5744 |
-
special = jQuery.event.special[event.type] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event
|
5745 |
-
|
5746 |
-
args[0] = event;
|
5747 |
-
|
5748 |
-
for (i = 1; i < arguments.length; i++) {
|
5749 |
-
args[i] = arguments[i];
|
5750 |
-
}
|
5751 |
-
|
5752 |
-
event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired
|
5753 |
-
|
5754 |
-
if (special.preDispatch && special.preDispatch.call(this, event) === false) {
|
5755 |
-
return;
|
5756 |
-
} // Determine handlers
|
5757 |
-
|
5758 |
-
|
5759 |
-
handlerQueue = jQuery.event.handlers.call(this, event, handlers); // Run delegates first; they may want to stop propagation beneath us
|
5760 |
-
|
5761 |
-
i = 0;
|
5762 |
-
|
5763 |
-
while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {
|
5764 |
-
event.currentTarget = matched.elem;
|
5765 |
-
j = 0;
|
5766 |
-
|
5767 |
-
while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {
|
5768 |
-
// If the event is namespaced, then each handler is only invoked if it is
|
5769 |
-
// specially universal or its namespaces are a superset of the event's.
|
5770 |
-
if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {
|
5771 |
-
event.handleObj = handleObj;
|
5772 |
-
event.data = handleObj.data;
|
5773 |
-
ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);
|
5774 |
-
|
5775 |
-
if (ret !== undefined) {
|
5776 |
-
if ((event.result = ret) === false) {
|
5777 |
-
event.preventDefault();
|
5778 |
-
event.stopPropagation();
|
5779 |
-
}
|
5780 |
-
}
|
5781 |
-
}
|
5782 |
-
}
|
5783 |
-
} // Call the postDispatch hook for the mapped type
|
5784 |
-
|
5785 |
-
|
5786 |
-
if (special.postDispatch) {
|
5787 |
-
special.postDispatch.call(this, event);
|
5788 |
-
}
|
5789 |
-
|
5790 |
-
return event.result;
|
5791 |
-
},
|
5792 |
-
handlers: function handlers(event, _handlers) {
|
5793 |
-
var i,
|
5794 |
-
handleObj,
|
5795 |
-
sel,
|
5796 |
-
matchedHandlers,
|
5797 |
-
matchedSelectors,
|
5798 |
-
handlerQueue = [],
|
5799 |
-
delegateCount = _handlers.delegateCount,
|
5800 |
-
cur = event.target; // Find delegate handlers
|
5801 |
-
|
5802 |
-
if (delegateCount && // Support: IE <=9
|
5803 |
-
// Black-hole SVG <use> instance trees (trac-13180)
|
5804 |
-
cur.nodeType && // Support: Firefox <=42
|
5805 |
-
// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
|
5806 |
-
// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
|
5807 |
-
// Support: IE 11 only
|
5808 |
-
// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
|
5809 |
-
!(event.type === "click" && event.button >= 1)) {
|
5810 |
-
for (; cur !== this; cur = cur.parentNode || this) {
|
5811 |
-
// Don't check non-elements (#13208)
|
5812 |
-
// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
|
5813 |
-
if (cur.nodeType === 1 && !(event.type === "click" && cur.disabled === true)) {
|
5814 |
-
matchedHandlers = [];
|
5815 |
-
matchedSelectors = {};
|
5816 |
-
|
5817 |
-
for (i = 0; i < delegateCount; i++) {
|
5818 |
-
handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203)
|
5819 |
-
|
5820 |
-
sel = handleObj.selector + " ";
|
5821 |
-
|
5822 |
-
if (matchedSelectors[sel] === undefined) {
|
5823 |
-
matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;
|
5824 |
-
}
|
5825 |
-
|
5826 |
-
if (matchedSelectors[sel]) {
|
5827 |
-
matchedHandlers.push(handleObj);
|
5828 |
-
}
|
5829 |
-
}
|
5830 |
-
|
5831 |
-
if (matchedHandlers.length) {
|
5832 |
-
handlerQueue.push({
|
5833 |
-
elem: cur,
|
5834 |
-
handlers: matchedHandlers
|
5835 |
-
});
|
5836 |
-
}
|
5837 |
-
}
|
5838 |
-
}
|
5839 |
-
} // Add the remaining (directly-bound) handlers
|
5840 |
-
|
5841 |
-
|
5842 |
-
cur = this;
|
5843 |
-
|
5844 |
-
if (delegateCount < _handlers.length) {
|
5845 |
-
handlerQueue.push({
|
5846 |
-
elem: cur,
|
5847 |
-
handlers: _handlers.slice(delegateCount)
|
5848 |
-
});
|
5849 |
-
}
|
5850 |
-
|
5851 |
-
return handlerQueue;
|
5852 |
-
},
|
5853 |
-
addProp: function addProp(name, hook) {
|
5854 |
-
Object.defineProperty(jQuery.Event.prototype, name, {
|
5855 |
-
enumerable: true,
|
5856 |
-
configurable: true,
|
5857 |
-
get: isFunction(hook) ? function () {
|
5858 |
-
if (this.originalEvent) {
|
5859 |
-
return hook(this.originalEvent);
|
5860 |
-
}
|
5861 |
-
} : function () {
|
5862 |
-
if (this.originalEvent) {
|
5863 |
-
return this.originalEvent[name];
|
5864 |
-
}
|
5865 |
-
},
|
5866 |
-
set: function set(value) {
|
5867 |
-
Object.defineProperty(this, name, {
|
5868 |
-
enumerable: true,
|
5869 |
-
configurable: true,
|
5870 |
-
writable: true,
|
5871 |
-
value: value
|
5872 |
-
});
|
5873 |
-
}
|
5874 |
-
});
|
5875 |
-
},
|
5876 |
-
fix: function fix(originalEvent) {
|
5877 |
-
return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);
|
5878 |
-
},
|
5879 |
-
special: {
|
5880 |
-
load: {
|
5881 |
-
// Prevent triggered image.load events from bubbling to window.load
|
5882 |
-
noBubble: true
|
5883 |
-
},
|
5884 |
-
click: {
|
5885 |
-
// Utilize native event to ensure correct state for checkable inputs
|
5886 |
-
setup: function setup(data) {
|
5887 |
-
// For mutual compressibility with _default, replace `this` access with a local var.
|
5888 |
-
// `|| data` is dead code meant only to preserve the variable through minification.
|
5889 |
-
var el = this || data; // Claim the first handler
|
5890 |
-
|
5891 |
-
if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
|
5892 |
-
// dataPriv.set( el, "click", ... )
|
5893 |
-
leverageNative(el, "click", returnTrue);
|
5894 |
-
} // Return false to allow normal processing in the caller
|
5895 |
-
|
5896 |
-
|
5897 |
-
return false;
|
5898 |
-
},
|
5899 |
-
trigger: function trigger(data) {
|
5900 |
-
// For mutual compressibility with _default, replace `this` access with a local var.
|
5901 |
-
// `|| data` is dead code meant only to preserve the variable through minification.
|
5902 |
-
var el = this || data; // Force setup before triggering a click
|
5903 |
-
|
5904 |
-
if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
|
5905 |
-
leverageNative(el, "click");
|
5906 |
-
} // Return non-false to allow normal event-path propagation
|
5907 |
-
|
5908 |
-
|
5909 |
-
return true;
|
5910 |
-
},
|
5911 |
-
// For cross-browser consistency, suppress native .click() on links
|
5912 |
-
// Also prevent it if we're currently inside a leveraged native-event stack
|
5913 |
-
_default: function _default(event) {
|
5914 |
-
var target = event.target;
|
5915 |
-
return rcheckableType.test(target.type) && target.click && nodeName(target, "input") && dataPriv.get(target, "click") || nodeName(target, "a");
|
5916 |
-
}
|
5917 |
-
},
|
5918 |
-
beforeunload: {
|
5919 |
-
postDispatch: function postDispatch(event) {
|
5920 |
-
// Support: Firefox 20+
|
5921 |
-
// Firefox doesn't alert if the returnValue field is not set.
|
5922 |
-
if (event.result !== undefined && event.originalEvent) {
|
5923 |
-
event.originalEvent.returnValue = event.result;
|
5924 |
-
}
|
5925 |
-
}
|
5926 |
-
}
|
5927 |
-
}
|
5928 |
-
}; // Ensure the presence of an event listener that handles manually-triggered
|
5929 |
-
// synthetic events by interrupting progress until reinvoked in response to
|
5930 |
-
// *native* events that it fires directly, ensuring that state changes have
|
5931 |
-
// already occurred before other listeners are invoked.
|
5932 |
-
|
5933 |
-
function leverageNative(el, type, expectSync) {
|
5934 |
-
// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
|
5935 |
-
if (!expectSync) {
|
5936 |
-
if (dataPriv.get(el, type) === undefined) {
|
5937 |
-
jQuery.event.add(el, type, returnTrue);
|
5938 |
-
}
|
5939 |
-
|
5940 |
-
return;
|
5941 |
-
} // Register the controller as a special universal handler for all event namespaces
|
5942 |
-
|
5943 |
-
|
5944 |
-
dataPriv.set(el, type, false);
|
5945 |
-
jQuery.event.add(el, type, {
|
5946 |
-
namespace: false,
|
5947 |
-
handler: function handler(event) {
|
5948 |
-
var notAsync,
|
5949 |
-
result,
|
5950 |
-
saved = dataPriv.get(this, type);
|
5951 |
-
|
5952 |
-
if (event.isTrigger & 1 && this[type]) {
|
5953 |
-
// Interrupt processing of the outer synthetic .trigger()ed event
|
5954 |
-
// Saved data should be false in such cases, but might be a leftover capture object
|
5955 |
-
// from an async native handler (gh-4350)
|
5956 |
-
if (!saved.length) {
|
5957 |
-
// Store arguments for use when handling the inner native event
|
5958 |
-
// There will always be at least one argument (an event object), so this array
|
5959 |
-
// will not be confused with a leftover capture object.
|
5960 |
-
saved = _slice.call(arguments);
|
5961 |
-
dataPriv.set(this, type, saved); // Trigger the native event and capture its result
|
5962 |
-
// Support: IE <=9 - 11+
|
5963 |
-
// focus() and blur() are asynchronous
|
5964 |
-
|
5965 |
-
notAsync = expectSync(this, type);
|
5966 |
-
this[type]();
|
5967 |
-
result = dataPriv.get(this, type);
|
5968 |
-
|
5969 |
-
if (saved !== result || notAsync) {
|
5970 |
-
dataPriv.set(this, type, false);
|
5971 |
-
} else {
|
5972 |
-
result = {};
|
5973 |
-
}
|
5974 |
-
|
5975 |
-
if (saved !== result) {
|
5976 |
-
// Cancel the outer synthetic event
|
5977 |
-
event.stopImmediatePropagation();
|
5978 |
-
event.preventDefault();
|
5979 |
-
return result.value;
|
5980 |
-
} // If this is an inner synthetic event for an event with a bubbling surrogate
|
5981 |
-
// (focus or blur), assume that the surrogate already propagated from triggering the
|
5982 |
-
// native event and prevent that from happening again here.
|
5983 |
-
// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
|
5984 |
-
// bubbling surrogate propagates *after* the non-bubbling base), but that seems
|
5985 |
-
// less bad than duplication.
|
5986 |
-
|
5987 |
-
} else if ((jQuery.event.special[type] || {}).delegateType) {
|
5988 |
-
event.stopPropagation();
|
5989 |
-
} // If this is a native event triggered above, everything is now in order
|
5990 |
-
// Fire an inner synthetic event with the original arguments
|
5991 |
-
|
5992 |
-
} else if (saved.length) {
|
5993 |
-
// ...and capture the result
|
5994 |
-
dataPriv.set(this, type, {
|
5995 |
-
value: jQuery.event.trigger( // Support: IE <=9 - 11+
|
5996 |
-
// Extend with the prototype to reset the above stopImmediatePropagation()
|
5997 |
-
jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)
|
5998 |
-
}); // Abort handling of the native event
|
5999 |
-
|
6000 |
-
event.stopImmediatePropagation();
|
6001 |
-
}
|
6002 |
-
}
|
6003 |
-
});
|
6004 |
-
}
|
6005 |
-
|
6006 |
-
jQuery.removeEvent = function (elem, type, handle) {
|
6007 |
-
// This "if" is needed for plain objects
|
6008 |
-
if (elem.removeEventListener) {
|
6009 |
-
elem.removeEventListener(type, handle);
|
6010 |
-
}
|
6011 |
-
};
|
6012 |
-
|
6013 |
-
jQuery.Event = function (src, props) {
|
6014 |
-
// Allow instantiation without the 'new' keyword
|
6015 |
-
if (!(this instanceof jQuery.Event)) {
|
6016 |
-
return new jQuery.Event(src, props);
|
6017 |
-
} // Event object
|
6018 |
-
|
6019 |
-
|
6020 |
-
if (src && src.type) {
|
6021 |
-
this.originalEvent = src;
|
6022 |
-
this.type = src.type; // Events bubbling up the document may have been marked as prevented
|
6023 |
-
// by a handler lower down the tree; reflect the correct value.
|
6024 |
-
|
6025 |
-
this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only
|
6026 |
-
src.returnValue === false ? returnTrue : returnFalse; // Create target properties
|
6027 |
-
// Support: Safari <=6 - 7 only
|
6028 |
-
// Target should not be a text node (#504, #13143)
|
6029 |
-
|
6030 |
-
this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;
|
6031 |
-
this.currentTarget = src.currentTarget;
|
6032 |
-
this.relatedTarget = src.relatedTarget; // Event type
|
6033 |
-
} else {
|
6034 |
-
this.type = src;
|
6035 |
-
} // Put explicitly provided properties onto the event object
|
6036 |
-
|
6037 |
-
|
6038 |
-
if (props) {
|
6039 |
-
jQuery.extend(this, props);
|
6040 |
-
} // Create a timestamp if incoming event doesn't have one
|
6041 |
-
|
6042 |
-
|
6043 |
-
this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed
|
6044 |
-
|
6045 |
-
this[jQuery.expando] = true;
|
6046 |
-
}; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
|
6047 |
-
// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
|
6048 |
-
|
6049 |
-
|
6050 |
-
jQuery.Event.prototype = {
|
6051 |
-
constructor: jQuery.Event,
|
6052 |
-
isDefaultPrevented: returnFalse,
|
6053 |
-
isPropagationStopped: returnFalse,
|
6054 |
-
isImmediatePropagationStopped: returnFalse,
|
6055 |
-
isSimulated: false,
|
6056 |
-
preventDefault: function preventDefault() {
|
6057 |
-
var e = this.originalEvent;
|
6058 |
-
this.isDefaultPrevented = returnTrue;
|
6059 |
-
|
6060 |
-
if (e && !this.isSimulated) {
|
6061 |
-
e.preventDefault();
|
6062 |
-
}
|
6063 |
-
},
|
6064 |
-
stopPropagation: function stopPropagation() {
|
6065 |
-
var e = this.originalEvent;
|
6066 |
-
this.isPropagationStopped = returnTrue;
|
6067 |
-
|
6068 |
-
if (e && !this.isSimulated) {
|
6069 |
-
e.stopPropagation();
|
6070 |
-
}
|
6071 |
-
},
|
6072 |
-
stopImmediatePropagation: function stopImmediatePropagation() {
|
6073 |
-
var e = this.originalEvent;
|
6074 |
-
this.isImmediatePropagationStopped = returnTrue;
|
6075 |
-
|
6076 |
-
if (e && !this.isSimulated) {
|
6077 |
-
e.stopImmediatePropagation();
|
6078 |
-
}
|
6079 |
-
|
6080 |
-
this.stopPropagation();
|
6081 |
-
}
|
6082 |
-
}; // Includes all common event props including KeyEvent and MouseEvent specific props
|
6083 |
-
|
6084 |
-
jQuery.each({
|
6085 |
-
altKey: true,
|
6086 |
-
bubbles: true,
|
6087 |
-
cancelable: true,
|
6088 |
-
changedTouches: true,
|
6089 |
-
ctrlKey: true,
|
6090 |
-
detail: true,
|
6091 |
-
eventPhase: true,
|
6092 |
-
metaKey: true,
|
6093 |
-
pageX: true,
|
6094 |
-
pageY: true,
|
6095 |
-
shiftKey: true,
|
6096 |
-
view: true,
|
6097 |
-
"char": true,
|
6098 |
-
code: true,
|
6099 |
-
charCode: true,
|
6100 |
-
key: true,
|
6101 |
-
keyCode: true,
|
6102 |
-
button: true,
|
6103 |
-
buttons: true,
|
6104 |
-
clientX: true,
|
6105 |
-
clientY: true,
|
6106 |
-
offsetX: true,
|
6107 |
-
offsetY: true,
|
6108 |
-
pointerId: true,
|
6109 |
-
pointerType: true,
|
6110 |
-
screenX: true,
|
6111 |
-
screenY: true,
|
6112 |
-
targetTouches: true,
|
6113 |
-
toElement: true,
|
6114 |
-
touches: true,
|
6115 |
-
which: function which(event) {
|
6116 |
-
var button = event.button; // Add which for key events
|
6117 |
-
|
6118 |
-
if (event.which == null && rkeyEvent.test(event.type)) {
|
6119 |
-
return event.charCode != null ? event.charCode : event.keyCode;
|
6120 |
-
} // Add which for click: 1 === left; 2 === middle; 3 === right
|
6121 |
-
|
6122 |
-
|
6123 |
-
if (!event.which && button !== undefined && rmouseEvent.test(event.type)) {
|
6124 |
-
if (button & 1) {
|
6125 |
-
return 1;
|
6126 |
-
}
|
6127 |
-
|
6128 |
-
if (button & 2) {
|
6129 |
-
return 3;
|
6130 |
-
}
|
6131 |
-
|
6132 |
-
if (button & 4) {
|
6133 |
-
return 2;
|
6134 |
-
}
|
6135 |
-
|
6136 |
-
return 0;
|
6137 |
-
}
|
6138 |
-
|
6139 |
-
return event.which;
|
6140 |
-
}
|
6141 |
-
}, jQuery.event.addProp);
|
6142 |
-
jQuery.each({
|
6143 |
-
focus: "focusin",
|
6144 |
-
blur: "focusout"
|
6145 |
-
}, function (type, delegateType) {
|
6146 |
-
jQuery.event.special[type] = {
|
6147 |
-
// Utilize native event if possible so blur/focus sequence is correct
|
6148 |
-
setup: function setup() {
|
6149 |
-
// Claim the first handler
|
6150 |
-
// dataPriv.set( this, "focus", ... )
|
6151 |
-
// dataPriv.set( this, "blur", ... )
|
6152 |
-
leverageNative(this, type, expectSync); // Return false to allow normal processing in the caller
|
6153 |
-
|
6154 |
-
return false;
|
6155 |
-
},
|
6156 |
-
trigger: function trigger() {
|
6157 |
-
// Force setup before trigger
|
6158 |
-
leverageNative(this, type); // Return non-false to allow normal event-path propagation
|
6159 |
-
|
6160 |
-
return true;
|
6161 |
-
},
|
6162 |
-
delegateType: delegateType
|
6163 |
-
};
|
6164 |
-
}); // Create mouseenter/leave events using mouseover/out and event-time checks
|
6165 |
-
// so that event delegation works in jQuery.
|
6166 |
-
// Do the same for pointerenter/pointerleave and pointerover/pointerout
|
6167 |
-
//
|
6168 |
-
// Support: Safari 7 only
|
6169 |
-
// Safari sends mouseenter too often; see:
|
6170 |
-
// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
|
6171 |
-
// for the description of the bug (it existed in older Chrome versions as well).
|
6172 |
-
|
6173 |
-
jQuery.each({
|
6174 |
-
mouseenter: "mouseover",
|
6175 |
-
mouseleave: "mouseout",
|
6176 |
-
pointerenter: "pointerover",
|
6177 |
-
pointerleave: "pointerout"
|
6178 |
-
}, function (orig, fix) {
|
6179 |
-
jQuery.event.special[orig] = {
|
6180 |
-
delegateType: fix,
|
6181 |
-
bindType: fix,
|
6182 |
-
handle: function handle(event) {
|
6183 |
-
var ret,
|
6184 |
-
target = this,
|
6185 |
-
related = event.relatedTarget,
|
6186 |
-
handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target.
|
6187 |
-
// NB: No relatedTarget if the mouse left/entered the browser window
|
6188 |
-
|
6189 |
-
if (!related || related !== target && !jQuery.contains(target, related)) {
|
6190 |
-
event.type = handleObj.origType;
|
6191 |
-
ret = handleObj.handler.apply(this, arguments);
|
6192 |
-
event.type = fix;
|
6193 |
-
}
|
6194 |
-
|
6195 |
-
return ret;
|
6196 |
-
}
|
6197 |
-
};
|
6198 |
-
});
|
6199 |
-
jQuery.fn.extend({
|
6200 |
-
on: function on(types, selector, data, fn) {
|
6201 |
-
return _on(this, types, selector, data, fn);
|
6202 |
-
},
|
6203 |
-
one: function one(types, selector, data, fn) {
|
6204 |
-
return _on(this, types, selector, data, fn, 1);
|
6205 |
-
},
|
6206 |
-
off: function off(types, selector, fn) {
|
6207 |
-
var handleObj, type;
|
6208 |
-
|
6209 |
-
if (types && types.preventDefault && types.handleObj) {
|
6210 |
-
// ( event ) dispatched jQuery.Event
|
6211 |
-
handleObj = types.handleObj;
|
6212 |
-
jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);
|
6213 |
-
return this;
|
6214 |
-
}
|
6215 |
-
|
6216 |
-
if (_typeof(types) === "object") {
|
6217 |
-
// ( types-object [, selector] )
|
6218 |
-
for (type in types) {
|
6219 |
-
this.off(type, selector, types[type]);
|
6220 |
-
}
|
6221 |
-
|
6222 |
-
return this;
|
6223 |
-
}
|
6224 |
-
|
6225 |
-
if (selector === false || typeof selector === "function") {
|
6226 |
-
// ( types [, fn] )
|
6227 |
-
fn = selector;
|
6228 |
-
selector = undefined;
|
6229 |
-
}
|
6230 |
-
|
6231 |
-
if (fn === false) {
|
6232 |
-
fn = returnFalse;
|
6233 |
-
}
|
6234 |
-
|
6235 |
-
return this.each(function () {
|
6236 |
-
jQuery.event.remove(this, types, fn, selector);
|
6237 |
-
});
|
6238 |
-
}
|
6239 |
-
});
|
6240 |
-
var // Support: IE <=10 - 11, Edge 12 - 13 only
|
6241 |
-
// In IE/Edge using regex groups here causes severe slowdowns.
|
6242 |
-
// See https://connect.microsoft.com/IE/feedback/details/1736512/
|
6243 |
-
rnoInnerhtml = /<script|<style|<link/i,
|
6244 |
-
// checked="checked" or checked
|
6245 |
-
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
|
6246 |
-
rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; // Prefer a tbody over its parent table for containing new rows
|
6247 |
-
|
6248 |
-
function manipulationTarget(elem, content) {
|
6249 |
-
if (nodeName(elem, "table") && nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr")) {
|
6250 |
-
return jQuery(elem).children("tbody")[0] || elem;
|
6251 |
-
}
|
6252 |
-
|
6253 |
-
return elem;
|
6254 |
-
} // Replace/restore the type attribute of script elements for safe DOM manipulation
|
6255 |
-
|
6256 |
-
|
6257 |
-
function disableScript(elem) {
|
6258 |
-
elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
|
6259 |
-
return elem;
|
6260 |
-
}
|
6261 |
-
|
6262 |
-
function restoreScript(elem) {
|
6263 |
-
if ((elem.type || "").slice(0, 5) === "true/") {
|
6264 |
-
elem.type = elem.type.slice(5);
|
6265 |
-
} else {
|
6266 |
-
elem.removeAttribute("type");
|
6267 |
-
}
|
6268 |
-
|
6269 |
-
return elem;
|
6270 |
-
}
|
6271 |
-
|
6272 |
-
function cloneCopyEvent(src, dest) {
|
6273 |
-
var i, l, type, pdataOld, udataOld, udataCur, events;
|
6274 |
-
|
6275 |
-
if (dest.nodeType !== 1) {
|
6276 |
-
return;
|
6277 |
-
} // 1. Copy private data: events, handlers, etc.
|
6278 |
-
|
6279 |
-
|
6280 |
-
if (dataPriv.hasData(src)) {
|
6281 |
-
pdataOld = dataPriv.get(src);
|
6282 |
-
events = pdataOld.events;
|
6283 |
-
|
6284 |
-
if (events) {
|
6285 |
-
dataPriv.remove(dest, "handle events");
|
6286 |
-
|
6287 |
-
for (type in events) {
|
6288 |
-
for (i = 0, l = events[type].length; i < l; i++) {
|
6289 |
-
jQuery.event.add(dest, type, events[type][i]);
|
6290 |
-
}
|
6291 |
-
}
|
6292 |
-
}
|
6293 |
-
} // 2. Copy user data
|
6294 |
-
|
6295 |
-
|
6296 |
-
if (dataUser.hasData(src)) {
|
6297 |
-
udataOld = dataUser.access(src);
|
6298 |
-
udataCur = jQuery.extend({}, udataOld);
|
6299 |
-
dataUser.set(dest, udataCur);
|
6300 |
-
}
|
6301 |
-
} // Fix IE bugs, see support tests
|
6302 |
-
|
6303 |
-
|
6304 |
-
function fixInput(src, dest) {
|
6305 |
-
var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.
|
6306 |
-
|
6307 |
-
if (nodeName === "input" && rcheckableType.test(src.type)) {
|
6308 |
-
dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options
|
6309 |
-
} else if (nodeName === "input" || nodeName === "textarea") {
|
6310 |
-
dest.defaultValue = src.defaultValue;
|
6311 |
-
}
|
6312 |
-
}
|
6313 |
-
|
6314 |
-
function domManip(collection, args, callback, ignored) {
|
6315 |
-
// Flatten any nested arrays
|
6316 |
-
args = flat(args);
|
6317 |
-
var fragment,
|
6318 |
-
first,
|
6319 |
-
scripts,
|
6320 |
-
hasScripts,
|
6321 |
-
node,
|
6322 |
-
doc,
|
6323 |
-
i = 0,
|
6324 |
-
l = collection.length,
|
6325 |
-
iNoClone = l - 1,
|
6326 |
-
value = args[0],
|
6327 |
-
valueIsFunction = isFunction(value); // We can't cloneNode fragments that contain checked, in WebKit
|
6328 |
-
|
6329 |
-
if (valueIsFunction || l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value)) {
|
6330 |
-
return collection.each(function (index) {
|
6331 |
-
var self = collection.eq(index);
|
6332 |
-
|
6333 |
-
if (valueIsFunction) {
|
6334 |
-
args[0] = value.call(this, index, self.html());
|
6335 |
-
}
|
6336 |
-
|
6337 |
-
domManip(self, args, callback, ignored);
|
6338 |
-
});
|
6339 |
-
}
|
6340 |
-
|
6341 |
-
if (l) {
|
6342 |
-
fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);
|
6343 |
-
first = fragment.firstChild;
|
6344 |
-
|
6345 |
-
if (fragment.childNodes.length === 1) {
|
6346 |
-
fragment = first;
|
6347 |
-
} // Require either new content or an interest in ignored elements to invoke the callback
|
6348 |
-
|
6349 |
-
|
6350 |
-
if (first || ignored) {
|
6351 |
-
scripts = jQuery.map(getAll(fragment, "script"), disableScript);
|
6352 |
-
hasScripts = scripts.length; // Use the original fragment for the last item
|
6353 |
-
// instead of the first because it can end up
|
6354 |
-
// being emptied incorrectly in certain situations (#8070).
|
6355 |
-
|
6356 |
-
for (; i < l; i++) {
|
6357 |
-
node = fragment;
|
6358 |
-
|
6359 |
-
if (i !== iNoClone) {
|
6360 |
-
node = jQuery.clone(node, true, true); // Keep references to cloned scripts for later restoration
|
6361 |
-
|
6362 |
-
if (hasScripts) {
|
6363 |
-
// Support: Android <=4.0 only, PhantomJS 1 only
|
6364 |
-
// push.apply(_, arraylike) throws on ancient WebKit
|
6365 |
-
jQuery.merge(scripts, getAll(node, "script"));
|
6366 |
-
}
|
6367 |
-
}
|
6368 |
-
|
6369 |
-
callback.call(collection[i], node, i);
|
6370 |
-
}
|
6371 |
-
|
6372 |
-
if (hasScripts) {
|
6373 |
-
doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts
|
6374 |
-
|
6375 |
-
jQuery.map(scripts, restoreScript); // Evaluate executable scripts on first document insertion
|
6376 |
-
|
6377 |
-
for (i = 0; i < hasScripts; i++) {
|
6378 |
-
node = scripts[i];
|
6379 |
-
|
6380 |
-
if (rscriptType.test(node.type || "") && !dataPriv.access(node, "globalEval") && jQuery.contains(doc, node)) {
|
6381 |
-
if (node.src && (node.type || "").toLowerCase() !== "module") {
|
6382 |
-
// Optional AJAX dependency, but won't run scripts if not present
|
6383 |
-
if (jQuery._evalUrl && !node.noModule) {
|
6384 |
-
jQuery._evalUrl(node.src, {
|
6385 |
-
nonce: node.nonce || node.getAttribute("nonce")
|
6386 |
-
}, doc);
|
6387 |
-
}
|
6388 |
-
} else {
|
6389 |
-
DOMEval(node.textContent.replace(rcleanScript, ""), node, doc);
|
6390 |
-
}
|
6391 |
-
}
|
6392 |
-
}
|
6393 |
-
}
|
6394 |
-
}
|
6395 |
-
}
|
6396 |
-
|
6397 |
-
return collection;
|
6398 |
-
}
|
6399 |
-
|
6400 |
-
function _remove(elem, selector, keepData) {
|
6401 |
-
var node,
|
6402 |
-
nodes = selector ? jQuery.filter(selector, elem) : elem,
|
6403 |
-
i = 0;
|
6404 |
-
|
6405 |
-
for (; (node = nodes[i]) != null; i++) {
|
6406 |
-
if (!keepData && node.nodeType === 1) {
|
6407 |
-
jQuery.cleanData(getAll(node));
|
6408 |
-
}
|
6409 |
-
|
6410 |
-
if (node.parentNode) {
|
6411 |
-
if (keepData && isAttached(node)) {
|
6412 |
-
setGlobalEval(getAll(node, "script"));
|
6413 |
-
}
|
6414 |
-
|
6415 |
-
node.parentNode.removeChild(node);
|
6416 |
-
}
|
6417 |
-
}
|
6418 |
-
|
6419 |
-
return elem;
|
6420 |
-
}
|
6421 |
-
|
6422 |
-
jQuery.extend({
|
6423 |
-
htmlPrefilter: function htmlPrefilter(html) {
|
6424 |
-
return html;
|
6425 |
-
},
|
6426 |
-
clone: function clone(elem, dataAndEvents, deepDataAndEvents) {
|
6427 |
-
var i,
|
6428 |
-
l,
|
6429 |
-
srcElements,
|
6430 |
-
destElements,
|
6431 |
-
clone = elem.cloneNode(true),
|
6432 |
-
inPage = isAttached(elem); // Fix IE cloning issues
|
6433 |
-
|
6434 |
-
if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {
|
6435 |
-
// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
|
6436 |
-
destElements = getAll(clone);
|
6437 |
-
srcElements = getAll(elem);
|
6438 |
-
|
6439 |
-
for (i = 0, l = srcElements.length; i < l; i++) {
|
6440 |
-
fixInput(srcElements[i], destElements[i]);
|
6441 |
-
}
|
6442 |
-
} // Copy the events from the original to the clone
|
6443 |
-
|
6444 |
-
|
6445 |
-
if (dataAndEvents) {
|
6446 |
-
if (deepDataAndEvents) {
|
6447 |
-
srcElements = srcElements || getAll(elem);
|
6448 |
-
destElements = destElements || getAll(clone);
|
6449 |
-
|
6450 |
-
for (i = 0, l = srcElements.length; i < l; i++) {
|
6451 |
-
cloneCopyEvent(srcElements[i], destElements[i]);
|
6452 |
-
}
|
6453 |
-
} else {
|
6454 |
-
cloneCopyEvent(elem, clone);
|
6455 |
-
}
|
6456 |
-
} // Preserve script evaluation history
|
6457 |
-
|
6458 |
-
|
6459 |
-
destElements = getAll(clone, "script");
|
6460 |
-
|
6461 |
-
if (destElements.length > 0) {
|
6462 |
-
setGlobalEval(destElements, !inPage && getAll(elem, "script"));
|
6463 |
-
} // Return the cloned set
|
6464 |
-
|
6465 |
-
|
6466 |
-
return clone;
|
6467 |
-
},
|
6468 |
-
cleanData: function cleanData(elems) {
|
6469 |
-
var data,
|
6470 |
-
elem,
|
6471 |
-
type,
|
6472 |
-
special = jQuery.event.special,
|
6473 |
-
i = 0;
|
6474 |
-
|
6475 |
-
for (; (elem = elems[i]) !== undefined; i++) {
|
6476 |
-
if (acceptData(elem)) {
|
6477 |
-
if (data = elem[dataPriv.expando]) {
|
6478 |
-
if (data.events) {
|
6479 |
-
for (type in data.events) {
|
6480 |
-
if (special[type]) {
|
6481 |
-
jQuery.event.remove(elem, type); // This is a shortcut to avoid jQuery.event.remove's overhead
|
6482 |
-
} else {
|
6483 |
-
jQuery.removeEvent(elem, type, data.handle);
|
6484 |
-
}
|
6485 |
-
}
|
6486 |
-
} // Support: Chrome <=35 - 45+
|
6487 |
-
// Assign undefined instead of using delete, see Data#remove
|
6488 |
-
|
6489 |
-
|
6490 |
-
elem[dataPriv.expando] = undefined;
|
6491 |
-
}
|
6492 |
-
|
6493 |
-
if (elem[dataUser.expando]) {
|
6494 |
-
// Support: Chrome <=35 - 45+
|
6495 |
-
// Assign undefined instead of using delete, see Data#remove
|
6496 |
-
elem[dataUser.expando] = undefined;
|
6497 |
-
}
|
6498 |
-
}
|
6499 |
-
}
|
6500 |
-
}
|
6501 |
-
});
|
6502 |
-
jQuery.fn.extend({
|
6503 |
-
detach: function detach(selector) {
|
6504 |
-
return _remove(this, selector, true);
|
6505 |
-
},
|
6506 |
-
remove: function remove(selector) {
|
6507 |
-
return _remove(this, selector);
|
6508 |
-
},
|
6509 |
-
text: function text(value) {
|
6510 |
-
return access(this, function (value) {
|
6511 |
-
return value === undefined ? jQuery.text(this) : this.empty().each(function () {
|
6512 |
-
if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
|
6513 |
-
this.textContent = value;
|
6514 |
-
}
|
6515 |
-
});
|
6516 |
-
}, null, value, arguments.length);
|
6517 |
-
},
|
6518 |
-
append: function append() {
|
6519 |
-
return domManip(this, arguments, function (elem) {
|
6520 |
-
if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
|
6521 |
-
var target = manipulationTarget(this, elem);
|
6522 |
-
target.appendChild(elem);
|
6523 |
-
}
|
6524 |
-
});
|
6525 |
-
},
|
6526 |
-
prepend: function prepend() {
|
6527 |
-
return domManip(this, arguments, function (elem) {
|
6528 |
-
if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
|
6529 |
-
var target = manipulationTarget(this, elem);
|
6530 |
-
target.insertBefore(elem, target.firstChild);
|
6531 |
-
}
|
6532 |
-
});
|
6533 |
-
},
|
6534 |
-
before: function before() {
|
6535 |
-
return domManip(this, arguments, function (elem) {
|
6536 |
-
if (this.parentNode) {
|
6537 |
-
this.parentNode.insertBefore(elem, this);
|
6538 |
-
}
|
6539 |
-
});
|
6540 |
-
},
|
6541 |
-
after: function after() {
|
6542 |
-
return domManip(this, arguments, function (elem) {
|
6543 |
-
if (this.parentNode) {
|
6544 |
-
this.parentNode.insertBefore(elem, this.nextSibling);
|
6545 |
-
}
|
6546 |
-
});
|
6547 |
-
},
|
6548 |
-
empty: function empty() {
|
6549 |
-
var elem,
|
6550 |
-
i = 0;
|
6551 |
-
|
6552 |
-
for (; (elem = this[i]) != null; i++) {
|
6553 |
-
if (elem.nodeType === 1) {
|
6554 |
-
// Prevent memory leaks
|
6555 |
-
jQuery.cleanData(getAll(elem, false)); // Remove any remaining nodes
|
6556 |
-
|
6557 |
-
elem.textContent = "";
|
6558 |
-
}
|
6559 |
-
}
|
6560 |
-
|
6561 |
-
return this;
|
6562 |
-
},
|
6563 |
-
clone: function clone(dataAndEvents, deepDataAndEvents) {
|
6564 |
-
dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
|
6565 |
-
deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
|
6566 |
-
return this.map(function () {
|
6567 |
-
return jQuery.clone(this, dataAndEvents, deepDataAndEvents);
|
6568 |
-
});
|
6569 |
-
},
|
6570 |
-
html: function html(value) {
|
6571 |
-
return access(this, function (value) {
|
6572 |
-
var elem = this[0] || {},
|
6573 |
-
i = 0,
|
6574 |
-
l = this.length;
|
6575 |
-
|
6576 |
-
if (value === undefined && elem.nodeType === 1) {
|
6577 |
-
return elem.innerHTML;
|
6578 |
-
} // See if we can take a shortcut and just use innerHTML
|
6579 |
-
|
6580 |
-
|
6581 |
-
if (typeof value === "string" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) {
|
6582 |
-
value = jQuery.htmlPrefilter(value);
|
6583 |
-
|
6584 |
-
try {
|
6585 |
-
for (; i < l; i++) {
|
6586 |
-
elem = this[i] || {}; // Remove element nodes and prevent memory leaks
|
6587 |
-
|
6588 |
-
if (elem.nodeType === 1) {
|
6589 |
-
jQuery.cleanData(getAll(elem, false));
|
6590 |
-
elem.innerHTML = value;
|
6591 |
-
}
|
6592 |
-
}
|
6593 |
-
|
6594 |
-
elem = 0; // If using innerHTML throws an exception, use the fallback method
|
6595 |
-
} catch (e) {}
|
6596 |
-
}
|
6597 |
-
|
6598 |
-
if (elem) {
|
6599 |
-
this.empty().append(value);
|
6600 |
-
}
|
6601 |
-
}, null, value, arguments.length);
|
6602 |
-
},
|
6603 |
-
replaceWith: function replaceWith() {
|
6604 |
-
var ignored = []; // Make the changes, replacing each non-ignored context element with the new content
|
6605 |
-
|
6606 |
-
return domManip(this, arguments, function (elem) {
|
6607 |
-
var parent = this.parentNode;
|
6608 |
-
|
6609 |
-
if (jQuery.inArray(this, ignored) < 0) {
|
6610 |
-
jQuery.cleanData(getAll(this));
|
6611 |
-
|
6612 |
-
if (parent) {
|
6613 |
-
parent.replaceChild(elem, this);
|
6614 |
-
}
|
6615 |
-
} // Force callback invocation
|
6616 |
-
|
6617 |
-
}, ignored);
|
6618 |
-
}
|
6619 |
-
});
|
6620 |
-
jQuery.each({
|
6621 |
-
appendTo: "append",
|
6622 |
-
prependTo: "prepend",
|
6623 |
-
insertBefore: "before",
|
6624 |
-
insertAfter: "after",
|
6625 |
-
replaceAll: "replaceWith"
|
6626 |
-
}, function (name, original) {
|
6627 |
-
jQuery.fn[name] = function (selector) {
|
6628 |
-
var elems,
|
6629 |
-
ret = [],
|
6630 |
-
insert = jQuery(selector),
|
6631 |
-
last = insert.length - 1,
|
6632 |
-
i = 0;
|
6633 |
-
|
6634 |
-
for (; i <= last; i++) {
|
6635 |
-
elems = i === last ? this : this.clone(true);
|
6636 |
-
jQuery(insert[i])[original](elems); // Support: Android <=4.0 only, PhantomJS 1 only
|
6637 |
-
// .get() because push.apply(_, arraylike) throws on ancient WebKit
|
6638 |
-
|
6639 |
-
push.apply(ret, elems.get());
|
6640 |
-
}
|
6641 |
-
|
6642 |
-
return this.pushStack(ret);
|
6643 |
-
};
|
6644 |
-
});
|
6645 |
-
var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i");
|
6646 |
-
|
6647 |
-
var getStyles = function getStyles(elem) {
|
6648 |
-
// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
|
6649 |
-
// IE throws on elements created in popups
|
6650 |
-
// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
|
6651 |
-
var view = elem.ownerDocument.defaultView;
|
6652 |
-
|
6653 |
-
if (!view || !view.opener) {
|
6654 |
-
view = window;
|
6655 |
-
}
|
6656 |
-
|
6657 |
-
return view.getComputedStyle(elem);
|
6658 |
-
};
|
6659 |
-
|
6660 |
-
var swap = function swap(elem, options, callback) {
|
6661 |
-
var ret,
|
6662 |
-
name,
|
6663 |
-
old = {}; // Remember the old values, and insert the new ones
|
6664 |
-
|
6665 |
-
for (name in options) {
|
6666 |
-
old[name] = elem.style[name];
|
6667 |
-
elem.style[name] = options[name];
|
6668 |
-
}
|
6669 |
-
|
6670 |
-
ret = callback.call(elem); // Revert the old values
|
6671 |
-
|
6672 |
-
for (name in options) {
|
6673 |
-
elem.style[name] = old[name];
|
6674 |
-
}
|
6675 |
-
|
6676 |
-
return ret;
|
6677 |
-
};
|
6678 |
-
|
6679 |
-
var rboxStyle = new RegExp(cssExpand.join("|"), "i");
|
6680 |
-
|
6681 |
-
(function () {
|
6682 |
-
// Executing both pixelPosition & boxSizingReliable tests require only one layout
|
6683 |
-
// so they're executed at the same time to save the second computation.
|
6684 |
-
function computeStyleTests() {
|
6685 |
-
// This is a singleton, we need to execute it only once
|
6686 |
-
if (!div) {
|
6687 |
-
return;
|
6688 |
-
}
|
6689 |
-
|
6690 |
-
container.style.cssText = "position:absolute;left:-11111px;width:60px;" + "margin-top:1px;padding:0;border:0";
|
6691 |
-
div.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + "margin:auto;border:1px;padding:1px;" + "width:60%;top:1%";
|
6692 |
-
documentElement.appendChild(container).appendChild(div);
|
6693 |
-
var divStyle = window.getComputedStyle(div);
|
6694 |
-
pixelPositionVal = divStyle.top !== "1%"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
|
6695 |
-
|
6696 |
-
reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
|
6697 |
-
// Some styles come back with percentage values, even though they shouldn't
|
6698 |
-
|
6699 |
-
div.style.right = "60%";
|
6700 |
-
pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; // Support: IE 9 - 11 only
|
6701 |
-
// Detect misreporting of content dimensions for box-sizing:border-box elements
|
6702 |
-
|
6703 |
-
boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; // Support: IE 9 only
|
6704 |
-
// Detect overflow:scroll screwiness (gh-3699)
|
6705 |
-
// Support: Chrome <=64
|
6706 |
-
// Don't get tricked when zoom affects offsetWidth (gh-4029)
|
6707 |
-
|
6708 |
-
div.style.position = "absolute";
|
6709 |
-
scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;
|
6710 |
-
documentElement.removeChild(container); // Nullify the div so it wouldn't be stored in the memory and
|
6711 |
-
// it will also be a sign that checks already performed
|
6712 |
-
|
6713 |
-
div = null;
|
6714 |
-
}
|
6715 |
-
|
6716 |
-
function roundPixelMeasures(measure) {
|
6717 |
-
return Math.round(parseFloat(measure));
|
6718 |
-
}
|
6719 |
-
|
6720 |
-
var pixelPositionVal,
|
6721 |
-
boxSizingReliableVal,
|
6722 |
-
scrollboxSizeVal,
|
6723 |
-
pixelBoxStylesVal,
|
6724 |
-
reliableTrDimensionsVal,
|
6725 |
-
reliableMarginLeftVal,
|
6726 |
-
container = document.createElement("div"),
|
6727 |
-
div = document.createElement("div"); // Finish early in limited (non-browser) environments
|
6728 |
-
|
6729 |
-
if (!div.style) {
|
6730 |
-
return;
|
6731 |
-
} // Support: IE <=9 - 11 only
|
6732 |
-
// Style of cloned element affects source element cloned (#8908)
|
6733 |
-
|
6734 |
-
|
6735 |
-
div.style.backgroundClip = "content-box";
|
6736 |
-
div.cloneNode(true).style.backgroundClip = "";
|
6737 |
-
support.clearCloneStyle = div.style.backgroundClip === "content-box";
|
6738 |
-
jQuery.extend(support, {
|
6739 |
-
boxSizingReliable: function boxSizingReliable() {
|
6740 |
-
computeStyleTests();
|
6741 |
-
return boxSizingReliableVal;
|
6742 |
-
},
|
6743 |
-
pixelBoxStyles: function pixelBoxStyles() {
|
6744 |
-
computeStyleTests();
|
6745 |
-
return pixelBoxStylesVal;
|
6746 |
-
},
|
6747 |
-
pixelPosition: function pixelPosition() {
|
6748 |
-
computeStyleTests();
|
6749 |
-
return pixelPositionVal;
|
6750 |
-
},
|
6751 |
-
reliableMarginLeft: function reliableMarginLeft() {
|
6752 |
-
computeStyleTests();
|
6753 |
-
return reliableMarginLeftVal;
|
6754 |
-
},
|
6755 |
-
scrollboxSize: function scrollboxSize() {
|
6756 |
-
computeStyleTests();
|
6757 |
-
return scrollboxSizeVal;
|
6758 |
-
},
|
6759 |
-
// Support: IE 9 - 11+, Edge 15 - 18+
|
6760 |
-
// IE/Edge misreport `getComputedStyle` of table rows with width/height
|
6761 |
-
// set in CSS while `offset*` properties report correct values.
|
6762 |
-
// Behavior in IE 9 is more subtle than in newer versions & it passes
|
6763 |
-
// some versions of this test; make sure not to make it pass there!
|
6764 |
-
reliableTrDimensions: function reliableTrDimensions() {
|
6765 |
-
var table, tr, trChild, trStyle;
|
6766 |
-
|
6767 |
-
if (reliableTrDimensionsVal == null) {
|
6768 |
-
table = document.createElement("table");
|
6769 |
-
tr = document.createElement("tr");
|
6770 |
-
trChild = document.createElement("div");
|
6771 |
-
table.style.cssText = "position:absolute;left:-11111px";
|
6772 |
-
tr.style.height = "1px";
|
6773 |
-
trChild.style.height = "9px";
|
6774 |
-
documentElement.appendChild(table).appendChild(tr).appendChild(trChild);
|
6775 |
-
trStyle = window.getComputedStyle(tr);
|
6776 |
-
reliableTrDimensionsVal = parseInt(trStyle.height) > 3;
|
6777 |
-
documentElement.removeChild(table);
|
6778 |
-
}
|
6779 |
-
|
6780 |
-
return reliableTrDimensionsVal;
|
6781 |
-
}
|
6782 |
-
});
|
6783 |
-
})();
|
6784 |
-
|
6785 |
-
function curCSS(elem, name, computed) {
|
6786 |
-
var width,
|
6787 |
-
minWidth,
|
6788 |
-
maxWidth,
|
6789 |
-
ret,
|
6790 |
-
// Support: Firefox 51+
|
6791 |
-
// Retrieving style before computed somehow
|
6792 |
-
// fixes an issue with getting wrong values
|
6793 |
-
// on detached elements
|
6794 |
-
style = elem.style;
|
6795 |
-
computed = computed || getStyles(elem); // getPropertyValue is needed for:
|
6796 |
-
// .css('filter') (IE 9 only, #12537)
|
6797 |
-
// .css('--customProperty) (#3144)
|
6798 |
-
|
6799 |
-
if (computed) {
|
6800 |
-
ret = computed.getPropertyValue(name) || computed[name];
|
6801 |
-
|
6802 |
-
if (ret === "" && !isAttached(elem)) {
|
6803 |
-
ret = jQuery.style(elem, name);
|
6804 |
-
} // A tribute to the "awesome hack by Dean Edwards"
|
6805 |
-
// Android Browser returns percentage for some values,
|
6806 |
-
// but width seems to be reliably pixels.
|
6807 |
-
// This is against the CSSOM draft spec:
|
6808 |
-
// https://drafts.csswg.org/cssom/#resolved-values
|
6809 |
-
|
6810 |
-
|
6811 |
-
if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {
|
6812 |
-
// Remember the original values
|
6813 |
-
width = style.width;
|
6814 |
-
minWidth = style.minWidth;
|
6815 |
-
maxWidth = style.maxWidth; // Put in the new values to get a computed value out
|
6816 |
-
|
6817 |
-
style.minWidth = style.maxWidth = style.width = ret;
|
6818 |
-
ret = computed.width; // Revert the changed values
|
6819 |
-
|
6820 |
-
style.width = width;
|
6821 |
-
style.minWidth = minWidth;
|
6822 |
-
style.maxWidth = maxWidth;
|
6823 |
-
}
|
6824 |
-
}
|
6825 |
-
|
6826 |
-
return ret !== undefined ? // Support: IE <=9 - 11 only
|
6827 |
-
// IE returns zIndex value as an integer.
|
6828 |
-
ret + "" : ret;
|
6829 |
-
}
|
6830 |
-
|
6831 |
-
function addGetHookIf(conditionFn, hookFn) {
|
6832 |
-
// Define the hook, we'll check on the first run if it's really needed.
|
6833 |
-
return {
|
6834 |
-
get: function get() {
|
6835 |
-
if (conditionFn()) {
|
6836 |
-
// Hook not needed (or it's not possible to use it due
|
6837 |
-
// to missing dependency), remove it.
|
6838 |
-
delete this.get;
|
6839 |
-
return;
|
6840 |
-
} // Hook needed; redefine it so that the support test is not executed again.
|
6841 |
-
|
6842 |
-
|
6843 |
-
return (this.get = hookFn).apply(this, arguments);
|
6844 |
-
}
|
6845 |
-
};
|
6846 |
-
}
|
6847 |
-
|
6848 |
-
var cssPrefixes = ["Webkit", "Moz", "ms"],
|
6849 |
-
emptyStyle = document.createElement("div").style,
|
6850 |
-
vendorProps = {}; // Return a vendor-prefixed property or undefined
|
6851 |
-
|
6852 |
-
function vendorPropName(name) {
|
6853 |
-
// Check for vendor prefixed names
|
6854 |
-
var capName = name[0].toUpperCase() + name.slice(1),
|
6855 |
-
i = cssPrefixes.length;
|
6856 |
-
|
6857 |
-
while (i--) {
|
6858 |
-
name = cssPrefixes[i] + capName;
|
6859 |
-
|
6860 |
-
if (name in emptyStyle) {
|
6861 |
-
return name;
|
6862 |
-
}
|
6863 |
-
}
|
6864 |
-
} // Return a potentially-mapped jQuery.cssProps or vendor prefixed property
|
6865 |
-
|
6866 |
-
|
6867 |
-
function finalPropName(name) {
|
6868 |
-
var _final = jQuery.cssProps[name] || vendorProps[name];
|
6869 |
-
|
6870 |
-
if (_final) {
|
6871 |
-
return _final;
|
6872 |
-
}
|
6873 |
-
|
6874 |
-
if (name in emptyStyle) {
|
6875 |
-
return name;
|
6876 |
-
}
|
6877 |
-
|
6878 |
-
return vendorProps[name] = vendorPropName(name) || name;
|
6879 |
-
}
|
6880 |
-
|
6881 |
-
var // Swappable if display is none or starts with table
|
6882 |
-
// except "table", "table-cell", or "table-caption"
|
6883 |
-
// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
|
6884 |
-
rdisplayswap = /^(none|table(?!-c[ea]).+)/,
|
6885 |
-
rcustomProp = /^--/,
|
6886 |
-
cssShow = {
|
6887 |
-
position: "absolute",
|
6888 |
-
visibility: "hidden",
|
6889 |
-
display: "block"
|
6890 |
-
},
|
6891 |
-
cssNormalTransform = {
|
6892 |
-
letterSpacing: "0",
|
6893 |
-
fontWeight: "400"
|
6894 |
-
};
|
6895 |
-
|
6896 |
-
function setPositiveNumber(_elem, value, subtract) {
|
6897 |
-
// Any relative (+/-) values have already been
|
6898 |
-
// normalized at this point
|
6899 |
-
var matches = rcssNum.exec(value);
|
6900 |
-
return matches ? // Guard against undefined "subtract", e.g., when used as in cssHooks
|
6901 |
-
Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || "px") : value;
|
6902 |
-
}
|
6903 |
-
|
6904 |
-
function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {
|
6905 |
-
var i = dimension === "width" ? 1 : 0,
|
6906 |
-
extra = 0,
|
6907 |
-
delta = 0; // Adjustment may not be necessary
|
6908 |
-
|
6909 |
-
if (box === (isBorderBox ? "border" : "content")) {
|
6910 |
-
return 0;
|
6911 |
-
}
|
6912 |
-
|
6913 |
-
for (; i < 4; i += 2) {
|
6914 |
-
// Both box models exclude margin
|
6915 |
-
if (box === "margin") {
|
6916 |
-
delta += jQuery.css(elem, box + cssExpand[i], true, styles);
|
6917 |
-
} // If we get here with a content-box, we're seeking "padding" or "border" or "margin"
|
6918 |
-
|
6919 |
-
|
6920 |
-
if (!isBorderBox) {
|
6921 |
-
// Add padding
|
6922 |
-
delta += jQuery.css(elem, "padding" + cssExpand[i], true, styles); // For "border" or "margin", add border
|
6923 |
-
|
6924 |
-
if (box !== "padding") {
|
6925 |
-
delta += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles); // But still keep track of it otherwise
|
6926 |
-
} else {
|
6927 |
-
extra += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
|
6928 |
-
} // If we get here with a border-box (content + padding + border), we're seeking "content" or
|
6929 |
-
// "padding" or "margin"
|
6930 |
-
|
6931 |
-
} else {
|
6932 |
-
// For "content", subtract padding
|
6933 |
-
if (box === "content") {
|
6934 |
-
delta -= jQuery.css(elem, "padding" + cssExpand[i], true, styles);
|
6935 |
-
} // For "content" or "padding", subtract border
|
6936 |
-
|
6937 |
-
|
6938 |
-
if (box !== "margin") {
|
6939 |
-
delta -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
|
6940 |
-
}
|
6941 |
-
}
|
6942 |
-
} // Account for positive content-box scroll gutter when requested by providing computedVal
|
6943 |
-
|
6944 |
-
|
6945 |
-
if (!isBorderBox && computedVal >= 0) {
|
6946 |
-
// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
|
6947 |
-
// Assuming integer scroll gutter, subtract the rest and round down
|
6948 |
-
delta += Math.max(0, Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
|
6949 |
-
// Use an explicit zero to avoid NaN (gh-3964)
|
6950 |
-
)) || 0;
|
6951 |
-
}
|
6952 |
-
|
6953 |
-
return delta;
|
6954 |
-
}
|
6955 |
-
|
6956 |
-
function getWidthOrHeight(elem, dimension, extra) {
|
6957 |
-
// Start with computed style
|
6958 |
-
var styles = getStyles(elem),
|
6959 |
-
// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
|
6960 |
-
// Fake content-box until we know it's needed to know the true value.
|
6961 |
-
boxSizingNeeded = !support.boxSizingReliable() || extra,
|
6962 |
-
isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box",
|
6963 |
-
valueIsBorderBox = isBorderBox,
|
6964 |
-
val = curCSS(elem, dimension, styles),
|
6965 |
-
offsetProp = "offset" + dimension[0].toUpperCase() + dimension.slice(1); // Support: Firefox <=54
|
6966 |
-
// Return a confounding non-pixel value or feign ignorance, as appropriate.
|
6967 |
-
|
6968 |
-
if (rnumnonpx.test(val)) {
|
6969 |
-
if (!extra) {
|
6970 |
-
return val;
|
6971 |
-
}
|
6972 |
-
|
6973 |
-
val = "auto";
|
6974 |
-
} // Support: IE 9 - 11 only
|
6975 |
-
// Use offsetWidth/offsetHeight for when box sizing is unreliable.
|
6976 |
-
// In those cases, the computed value can be trusted to be border-box.
|
6977 |
-
|
6978 |
-
|
6979 |
-
if ((!support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+
|
6980 |
-
// IE/Edge misreport `getComputedStyle` of table rows with width/height
|
6981 |
-
// set in CSS while `offset*` properties report correct values.
|
6982 |
-
// Interestingly, in some cases IE 9 doesn't suffer from this issue.
|
6983 |
-
!support.reliableTrDimensions() && nodeName(elem, "tr") || // Fall back to offsetWidth/offsetHeight when value is "auto"
|
6984 |
-
// This happens for inline elements with no explicit setting (gh-3571)
|
6985 |
-
val === "auto" || // Support: Android <=4.1 - 4.3 only
|
6986 |
-
// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
|
6987 |
-
!parseFloat(val) && jQuery.css(elem, "display", false, styles) === "inline") && // Make sure the element is visible & connected
|
6988 |
-
elem.getClientRects().length) {
|
6989 |
-
isBorderBox = jQuery.css(elem, "boxSizing", false, styles) === "border-box"; // Where available, offsetWidth/offsetHeight approximate border box dimensions.
|
6990 |
-
// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
|
6991 |
-
// retrieved value as a content box dimension.
|
6992 |
-
|
6993 |
-
valueIsBorderBox = offsetProp in elem;
|
6994 |
-
|
6995 |
-
if (valueIsBorderBox) {
|
6996 |
-
val = elem[offsetProp];
|
6997 |
-
}
|
6998 |
-
} // Normalize "" and auto
|
6999 |
-
|
7000 |
-
|
7001 |
-
val = parseFloat(val) || 0; // Adjust for the element's box model
|
7002 |
-
|
7003 |
-
return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? "border" : "content"), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589)
|
7004 |
-
val) + "px";
|
7005 |
-
}
|
7006 |
-
|
7007 |
-
jQuery.extend({
|
7008 |
-
// Add in style property hooks for overriding the default
|
7009 |
-
// behavior of getting and setting a style property
|
7010 |
-
cssHooks: {
|
7011 |
-
opacity: {
|
7012 |
-
get: function get(elem, computed) {
|
7013 |
-
if (computed) {
|
7014 |
-
// We should always get a number back from opacity
|
7015 |
-
var ret = curCSS(elem, "opacity");
|
7016 |
-
return ret === "" ? "1" : ret;
|
7017 |
-
}
|
7018 |
-
}
|
7019 |
-
}
|
7020 |
-
},
|
7021 |
-
// Don't automatically add "px" to these possibly-unitless properties
|
7022 |
-
cssNumber: {
|
7023 |
-
"animationIterationCount": true,
|
7024 |
-
"columnCount": true,
|
7025 |
-
"fillOpacity": true,
|
7026 |
-
"flexGrow": true,
|
7027 |
-
"flexShrink": true,
|
7028 |
-
"fontWeight": true,
|
7029 |
-
"gridArea": true,
|
7030 |
-
"gridColumn": true,
|
7031 |
-
"gridColumnEnd": true,
|
7032 |
-
"gridColumnStart": true,
|
7033 |
-
"gridRow": true,
|
7034 |
-
"gridRowEnd": true,
|
7035 |
-
"gridRowStart": true,
|
7036 |
-
"lineHeight": true,
|
7037 |
-
"opacity": true,
|
7038 |
-
"order": true,
|
7039 |
-
"orphans": true,
|
7040 |
-
"widows": true,
|
7041 |
-
"zIndex": true,
|
7042 |
-
"zoom": true
|
7043 |
-
},
|
7044 |
-
// Add in properties whose names you wish to fix before
|
7045 |
-
// setting or getting the value
|
7046 |
-
cssProps: {},
|
7047 |
-
// Get and set the style property on a DOM Node
|
7048 |
-
style: function style(elem, name, value, extra) {
|
7049 |
-
// Don't set styles on text and comment nodes
|
7050 |
-
if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
|
7051 |
-
return;
|
7052 |
-
} // Make sure that we're working with the right name
|
7053 |
-
|
7054 |
-
|
7055 |
-
var ret,
|
7056 |
-
type,
|
7057 |
-
hooks,
|
7058 |
-
origName = camelCase(name),
|
7059 |
-
isCustomProp = rcustomProp.test(name),
|
7060 |
-
style = elem.style; // Make sure that we're working with the right name. We don't
|
7061 |
-
// want to query the value if it is a CSS custom property
|
7062 |
-
// since they are user-defined.
|
7063 |
-
|
7064 |
-
if (!isCustomProp) {
|
7065 |
-
name = finalPropName(origName);
|
7066 |
-
} // Gets hook for the prefixed version, then unprefixed version
|
7067 |
-
|
7068 |
-
|
7069 |
-
hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value
|
7070 |
-
|
7071 |
-
if (value !== undefined) {
|
7072 |
-
type = _typeof(value); // Convert "+=" or "-=" to relative numbers (#7345)
|
7073 |
-
|
7074 |
-
if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) {
|
7075 |
-
value = adjustCSS(elem, name, ret); // Fixes bug #9237
|
7076 |
-
|
7077 |
-
type = "number";
|
7078 |
-
} // Make sure that null and NaN values aren't set (#7116)
|
7079 |
-
|
7080 |
-
|
7081 |
-
if (value == null || value !== value) {
|
7082 |
-
return;
|
7083 |
-
} // If a number was passed in, add the unit (except for certain CSS properties)
|
7084 |
-
// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
|
7085 |
-
// "px" to a few hardcoded values.
|
7086 |
-
|
7087 |
-
|
7088 |
-
if (type === "number" && !isCustomProp) {
|
7089 |
-
value += ret && ret[3] || (jQuery.cssNumber[origName] ? "" : "px");
|
7090 |
-
} // background-* props affect original clone's values
|
7091 |
-
|
7092 |
-
|
7093 |
-
if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) {
|
7094 |
-
style[name] = "inherit";
|
7095 |
-
} // If a hook was provided, use that value, otherwise just set the specified value
|
7096 |
-
|
7097 |
-
|
7098 |
-
if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {
|
7099 |
-
if (isCustomProp) {
|
7100 |
-
style.setProperty(name, value);
|
7101 |
-
} else {
|
7102 |
-
style[name] = value;
|
7103 |
-
}
|
7104 |
-
}
|
7105 |
-
} else {
|
7106 |
-
// If a hook was provided get the non-computed value from there
|
7107 |
-
if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {
|
7108 |
-
return ret;
|
7109 |
-
} // Otherwise just get the value from the style object
|
7110 |
-
|
7111 |
-
|
7112 |
-
return style[name];
|
7113 |
-
}
|
7114 |
-
},
|
7115 |
-
css: function css(elem, name, extra, styles) {
|
7116 |
-
var val,
|
7117 |
-
num,
|
7118 |
-
hooks,
|
7119 |
-
origName = camelCase(name),
|
7120 |
-
isCustomProp = rcustomProp.test(name); // Make sure that we're working with the right name. We don't
|
7121 |
-
// want to modify the value if it is a CSS custom property
|
7122 |
-
// since they are user-defined.
|
7123 |
-
|
7124 |
-
if (!isCustomProp) {
|
7125 |
-
name = finalPropName(origName);
|
7126 |
-
} // Try prefixed name followed by the unprefixed name
|
7127 |
-
|
7128 |
-
|
7129 |
-
hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there
|
7130 |
-
|
7131 |
-
if (hooks && "get" in hooks) {
|
7132 |
-
val = hooks.get(elem, true, extra);
|
7133 |
-
} // Otherwise, if a way to get the computed value exists, use that
|
7134 |
-
|
7135 |
-
|
7136 |
-
if (val === undefined) {
|
7137 |
-
val = curCSS(elem, name, styles);
|
7138 |
-
} // Convert "normal" to computed value
|
7139 |
-
|
7140 |
-
|
7141 |
-
if (val === "normal" && name in cssNormalTransform) {
|
7142 |
-
val = cssNormalTransform[name];
|
7143 |
-
} // Make numeric if forced or a qualifier was provided and val looks numeric
|
7144 |
-
|
7145 |
-
|
7146 |
-
if (extra === "" || extra) {
|
7147 |
-
num = parseFloat(val);
|
7148 |
-
return extra === true || isFinite(num) ? num || 0 : val;
|
7149 |
-
}
|
7150 |
-
|
7151 |
-
return val;
|
7152 |
-
}
|
7153 |
-
});
|
7154 |
-
jQuery.each(["height", "width"], function (_i, dimension) {
|
7155 |
-
jQuery.cssHooks[dimension] = {
|
7156 |
-
get: function get(elem, computed, extra) {
|
7157 |
-
if (computed) {
|
7158 |
-
// Certain elements can have dimension info if we invisibly show them
|
7159 |
-
// but it must have a current display style that would benefit
|
7160 |
-
return rdisplayswap.test(jQuery.css(elem, "display")) && ( // Support: Safari 8+
|
7161 |
-
// Table columns in Safari have non-zero offsetWidth & zero
|
7162 |
-
// getBoundingClientRect().width unless display is changed.
|
7163 |
-
// Support: IE <=11 only
|
7164 |
-
// Running getBoundingClientRect on a disconnected node
|
7165 |
-
// in IE throws an error.
|
7166 |
-
!elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {
|
7167 |
-
return getWidthOrHeight(elem, dimension, extra);
|
7168 |
-
}) : getWidthOrHeight(elem, dimension, extra);
|
7169 |
-
}
|
7170 |
-
},
|
7171 |
-
set: function set(elem, value, extra) {
|
7172 |
-
var matches,
|
7173 |
-
styles = getStyles(elem),
|
7174 |
-
// Only read styles.position if the test has a chance to fail
|
7175 |
-
// to avoid forcing a reflow.
|
7176 |
-
scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === "absolute",
|
7177 |
-
// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
|
7178 |
-
boxSizingNeeded = scrollboxSizeBuggy || extra,
|
7179 |
-
isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box",
|
7180 |
-
subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; // Account for unreliable border-box dimensions by comparing offset* to computed and
|
7181 |
-
// faking a content-box to get border and padding (gh-3699)
|
7182 |
-
|
7183 |
-
if (isBorderBox && scrollboxSizeBuggy) {
|
7184 |
-
subtract -= Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, "border", false, styles) - 0.5);
|
7185 |
-
} // Convert to pixels if value adjustment is needed
|
7186 |
-
|
7187 |
-
|
7188 |
-
if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || "px") !== "px") {
|
7189 |
-
elem.style[dimension] = value;
|
7190 |
-
value = jQuery.css(elem, dimension);
|
7191 |
-
}
|
7192 |
-
|
7193 |
-
return setPositiveNumber(elem, value, subtract);
|
7194 |
-
}
|
7195 |
-
};
|
7196 |
-
});
|
7197 |
-
jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {
|
7198 |
-
if (computed) {
|
7199 |
-
return (parseFloat(curCSS(elem, "marginLeft")) || elem.getBoundingClientRect().left - swap(elem, {
|
7200 |
-
marginLeft: 0
|
7201 |
-
}, function () {
|
7202 |
-
return elem.getBoundingClientRect().left;
|
7203 |
-
})) + "px";
|
7204 |
-
}
|
7205 |
-
}); // These hooks are used by animate to expand properties
|
7206 |
-
|
7207 |
-
jQuery.each({
|
7208 |
-
margin: "",
|
7209 |
-
padding: "",
|
7210 |
-
border: "Width"
|
7211 |
-
}, function (prefix, suffix) {
|
7212 |
-
jQuery.cssHooks[prefix + suffix] = {
|
7213 |
-
expand: function expand(value) {
|
7214 |
-
var i = 0,
|
7215 |
-
expanded = {},
|
7216 |
-
// Assumes a single number if not a string
|
7217 |
-
parts = typeof value === "string" ? value.split(" ") : [value];
|
7218 |
-
|
7219 |
-
for (; i < 4; i++) {
|
7220 |
-
expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];
|
7221 |
-
}
|
7222 |
-
|
7223 |
-
return expanded;
|
7224 |
-
}
|
7225 |
-
};
|
7226 |
-
|
7227 |
-
if (prefix !== "margin") {
|
7228 |
-
jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
|
7229 |
-
}
|
7230 |
-
});
|
7231 |
-
jQuery.fn.extend({
|
7232 |
-
css: function css(name, value) {
|
7233 |
-
return access(this, function (elem, name, value) {
|
7234 |
-
var styles,
|
7235 |
-
len,
|
7236 |
-
map = {},
|
7237 |
-
i = 0;
|
7238 |
-
|
7239 |
-
if (Array.isArray(name)) {
|
7240 |
-
styles = getStyles(elem);
|
7241 |
-
len = name.length;
|
7242 |
-
|
7243 |
-
for (; i < len; i++) {
|
7244 |
-
map[name[i]] = jQuery.css(elem, name[i], false, styles);
|
7245 |
-
}
|
7246 |
-
|
7247 |
-
return map;
|
7248 |
-
}
|
7249 |
-
|
7250 |
-
return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);
|
7251 |
-
}, name, value, arguments.length > 1);
|
7252 |
-
}
|
7253 |
-
});
|
7254 |
-
|
7255 |
-
function Tween(elem, options, prop, end, easing) {
|
7256 |
-
return new Tween.prototype.init(elem, options, prop, end, easing);
|
7257 |
-
}
|
7258 |
-
|
7259 |
-
jQuery.Tween = Tween;
|
7260 |
-
Tween.prototype = {
|
7261 |
-
constructor: Tween,
|
7262 |
-
init: function init(elem, options, prop, end, easing, unit) {
|
7263 |
-
this.elem = elem;
|
7264 |
-
this.prop = prop;
|
7265 |
-
this.easing = easing || jQuery.easing._default;
|
7266 |
-
this.options = options;
|
7267 |
-
this.start = this.now = this.cur();
|
7268 |
-
this.end = end;
|
7269 |
-
this.unit = unit || (jQuery.cssNumber[prop] ? "" : "px");
|
7270 |
-
},
|
7271 |
-
cur: function cur() {
|
7272 |
-
var hooks = Tween.propHooks[this.prop];
|
7273 |
-
return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);
|
7274 |
-
},
|
7275 |
-
run: function run(percent) {
|
7276 |
-
var eased,
|
7277 |
-
hooks = Tween.propHooks[this.prop];
|
7278 |
-
|
7279 |
-
if (this.options.duration) {
|
7280 |
-
this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);
|
7281 |
-
} else {
|
7282 |
-
this.pos = eased = percent;
|
7283 |
-
}
|
7284 |
-
|
7285 |
-
this.now = (this.end - this.start) * eased + this.start;
|
7286 |
-
|
7287 |
-
if (this.options.step) {
|
7288 |
-
this.options.step.call(this.elem, this.now, this);
|
7289 |
-
}
|
7290 |
-
|
7291 |
-
if (hooks && hooks.set) {
|
7292 |
-
hooks.set(this);
|
7293 |
-
} else {
|
7294 |
-
Tween.propHooks._default.set(this);
|
7295 |
-
}
|
7296 |
-
|
7297 |
-
return this;
|
7298 |
-
}
|
7299 |
-
};
|
7300 |
-
Tween.prototype.init.prototype = Tween.prototype;
|
7301 |
-
Tween.propHooks = {
|
7302 |
-
_default: {
|
7303 |
-
get: function get(tween) {
|
7304 |
-
var result; // Use a property on the element directly when it is not a DOM element,
|
7305 |
-
// or when there is no matching style property that exists.
|
7306 |
-
|
7307 |
-
if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {
|
7308 |
-
return tween.elem[tween.prop];
|
7309 |
-
} // Passing an empty string as a 3rd parameter to .css will automatically
|
7310 |
-
// attempt a parseFloat and fallback to a string if the parse fails.
|
7311 |
-
// Simple values such as "10px" are parsed to Float;
|
7312 |
-
// complex values such as "rotate(1rad)" are returned as-is.
|
7313 |
-
|
7314 |
-
|
7315 |
-
result = jQuery.css(tween.elem, tween.prop, ""); // Empty strings, null, undefined and "auto" are converted to 0.
|
7316 |
-
|
7317 |
-
return !result || result === "auto" ? 0 : result;
|
7318 |
-
},
|
7319 |
-
set: function set(tween) {
|
7320 |
-
// Use step hook for back compat.
|
7321 |
-
// Use cssHook if its there.
|
7322 |
-
// Use .style if available and use plain properties where available.
|
7323 |
-
if (jQuery.fx.step[tween.prop]) {
|
7324 |
-
jQuery.fx.step[tween.prop](tween);
|
7325 |
-
} else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {
|
7326 |
-
jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);
|
7327 |
-
} else {
|
7328 |
-
tween.elem[tween.prop] = tween.now;
|
7329 |
-
}
|
7330 |
-
}
|
7331 |
-
}
|
7332 |
-
}; // Support: IE <=9 only
|
7333 |
-
// Panic based approach to setting things on disconnected nodes
|
7334 |
-
|
7335 |
-
Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
|
7336 |
-
set: function set(tween) {
|
7337 |
-
if (tween.elem.nodeType && tween.elem.parentNode) {
|
7338 |
-
tween.elem[tween.prop] = tween.now;
|
7339 |
-
}
|
7340 |
-
}
|
7341 |
-
};
|
7342 |
-
jQuery.easing = {
|
7343 |
-
linear: function linear(p) {
|
7344 |
-
return p;
|
7345 |
-
},
|
7346 |
-
swing: function swing(p) {
|
7347 |
-
return 0.5 - Math.cos(p * Math.PI) / 2;
|
7348 |
-
},
|
7349 |
-
_default: "swing"
|
7350 |
-
};
|
7351 |
-
jQuery.fx = Tween.prototype.init; // Back compat <1.8 extension point
|
7352 |
-
|
7353 |
-
jQuery.fx.step = {};
|
7354 |
-
var fxNow,
|
7355 |
-
inProgress,
|
7356 |
-
rfxtypes = /^(?:toggle|show|hide)$/,
|
7357 |
-
rrun = /queueHooks$/;
|
7358 |
-
|
7359 |
-
function schedule() {
|
7360 |
-
if (inProgress) {
|
7361 |
-
if (document.hidden === false && window.requestAnimationFrame) {
|
7362 |
-
window.requestAnimationFrame(schedule);
|
7363 |
-
} else {
|
7364 |
-
window.setTimeout(schedule, jQuery.fx.interval);
|
7365 |
-
}
|
7366 |
-
|
7367 |
-
jQuery.fx.tick();
|
7368 |
-
}
|
7369 |
-
} // Animations created synchronously will run synchronously
|
7370 |
-
|
7371 |
-
|
7372 |
-
function createFxNow() {
|
7373 |
-
window.setTimeout(function () {
|
7374 |
-
fxNow = undefined;
|
7375 |
-
});
|
7376 |
-
return fxNow = Date.now();
|
7377 |
-
} // Generate parameters to create a standard animation
|
7378 |
-
|
7379 |
-
|
7380 |
-
function genFx(type, includeWidth) {
|
7381 |
-
var which,
|
7382 |
-
i = 0,
|
7383 |
-
attrs = {
|
7384 |
-
height: type
|
7385 |
-
}; // If we include width, step value is 1 to do all cssExpand values,
|
7386 |
-
// otherwise step value is 2 to skip over Left and Right
|
7387 |
-
|
7388 |
-
includeWidth = includeWidth ? 1 : 0;
|
7389 |
-
|
7390 |
-
for (; i < 4; i += 2 - includeWidth) {
|
7391 |
-
which = cssExpand[i];
|
7392 |
-
attrs["margin" + which] = attrs["padding" + which] = type;
|
7393 |
-
}
|
7394 |
-
|
7395 |
-
if (includeWidth) {
|
7396 |
-
attrs.opacity = attrs.width = type;
|
7397 |
-
}
|
7398 |
-
|
7399 |
-
return attrs;
|
7400 |
-
}
|
7401 |
-
|
7402 |
-
function createTween(value, prop, animation) {
|
7403 |
-
var tween,
|
7404 |
-
collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners["*"]),
|
7405 |
-
index = 0,
|
7406 |
-
length = collection.length;
|
7407 |
-
|
7408 |
-
for (; index < length; index++) {
|
7409 |
-
if (tween = collection[index].call(animation, prop, value)) {
|
7410 |
-
// We're done with this property
|
7411 |
-
return tween;
|
7412 |
-
}
|
7413 |
-
}
|
7414 |
-
}
|
7415 |
-
|
7416 |
-
function defaultPrefilter(elem, props, opts) {
|
7417 |
-
var prop,
|
7418 |
-
value,
|
7419 |
-
toggle,
|
7420 |
-
hooks,
|
7421 |
-
oldfire,
|
7422 |
-
propTween,
|
7423 |
-
restoreDisplay,
|
7424 |
-
display,
|
7425 |
-
isBox = "width" in props || "height" in props,
|
7426 |
-
anim = this,
|
7427 |
-
orig = {},
|
7428 |
-
style = elem.style,
|
7429 |
-
hidden = elem.nodeType && isHiddenWithinTree(elem),
|
7430 |
-
dataShow = dataPriv.get(elem, "fxshow"); // Queue-skipping animations hijack the fx hooks
|
7431 |
-
|
7432 |
-
if (!opts.queue) {
|
7433 |
-
hooks = jQuery._queueHooks(elem, "fx");
|
7434 |
-
|
7435 |
-
if (hooks.unqueued == null) {
|
7436 |
-
hooks.unqueued = 0;
|
7437 |
-
oldfire = hooks.empty.fire;
|
7438 |
-
|
7439 |
-
hooks.empty.fire = function () {
|
7440 |
-
if (!hooks.unqueued) {
|
7441 |
-
oldfire();
|
7442 |
-
}
|
7443 |
-
};
|
7444 |
-
}
|
7445 |
-
|
7446 |
-
hooks.unqueued++;
|
7447 |
-
anim.always(function () {
|
7448 |
-
// Ensure the complete handler is called before this completes
|
7449 |
-
anim.always(function () {
|
7450 |
-
hooks.unqueued--;
|
7451 |
-
|
7452 |
-
if (!jQuery.queue(elem, "fx").length) {
|
7453 |
-
hooks.empty.fire();
|
7454 |
-
}
|
7455 |
-
});
|
7456 |
-
});
|
7457 |
-
} // Detect show/hide animations
|
7458 |
-
|
7459 |
-
|
7460 |
-
for (prop in props) {
|
7461 |
-
value = props[prop];
|
7462 |
-
|
7463 |
-
if (rfxtypes.test(value)) {
|
7464 |
-
delete props[prop];
|
7465 |
-
toggle = toggle || value === "toggle";
|
7466 |
-
|
7467 |
-
if (value === (hidden ? "hide" : "show")) {
|
7468 |
-
// Pretend to be hidden if this is a "show" and
|
7469 |
-
// there is still data from a stopped show/hide
|
7470 |
-
if (value === "show" && dataShow && dataShow[prop] !== undefined) {
|
7471 |
-
hidden = true; // Ignore all other no-op show/hide data
|
7472 |
-
} else {
|
7473 |
-
continue;
|
7474 |
-
}
|
7475 |
-
}
|
7476 |
-
|
7477 |
-
orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);
|
7478 |
-
}
|
7479 |
-
} // Bail out if this is a no-op like .hide().hide()
|
7480 |
-
|
7481 |
-
|
7482 |
-
propTween = !jQuery.isEmptyObject(props);
|
7483 |
-
|
7484 |
-
if (!propTween && jQuery.isEmptyObject(orig)) {
|
7485 |
-
return;
|
7486 |
-
} // Restrict "overflow" and "display" styles during box animations
|
7487 |
-
|
7488 |
-
|
7489 |
-
if (isBox && elem.nodeType === 1) {
|
7490 |
-
// Support: IE <=9 - 11, Edge 12 - 15
|
7491 |
-
// Record all 3 overflow attributes because IE does not infer the shorthand
|
7492 |
-
// from identically-valued overflowX and overflowY and Edge just mirrors
|
7493 |
-
// the overflowX value there.
|
7494 |
-
opts.overflow = [style.overflow, style.overflowX, style.overflowY]; // Identify a display type, preferring old show/hide data over the CSS cascade
|
7495 |
-
|
7496 |
-
restoreDisplay = dataShow && dataShow.display;
|
7497 |
-
|
7498 |
-
if (restoreDisplay == null) {
|
7499 |
-
restoreDisplay = dataPriv.get(elem, "display");
|
7500 |
-
}
|
7501 |
-
|
7502 |
-
display = jQuery.css(elem, "display");
|
7503 |
-
|
7504 |
-
if (display === "none") {
|
7505 |
-
if (restoreDisplay) {
|
7506 |
-
display = restoreDisplay;
|
7507 |
-
} else {
|
7508 |
-
// Get nonempty value(s) by temporarily forcing visibility
|
7509 |
-
showHide([elem], true);
|
7510 |
-
restoreDisplay = elem.style.display || restoreDisplay;
|
7511 |
-
display = jQuery.css(elem, "display");
|
7512 |
-
showHide([elem]);
|
7513 |
-
}
|
7514 |
-
} // Animate inline elements as inline-block
|
7515 |
-
|
7516 |
-
|
7517 |
-
if (display === "inline" || display === "inline-block" && restoreDisplay != null) {
|
7518 |
-
if (jQuery.css(elem, "float") === "none") {
|
7519 |
-
// Restore the original display value at the end of pure show/hide animations
|
7520 |
-
if (!propTween) {
|
7521 |
-
anim.done(function () {
|
7522 |
-
style.display = restoreDisplay;
|
7523 |
-
});
|
7524 |
-
|
7525 |
-
if (restoreDisplay == null) {
|
7526 |
-
display = style.display;
|
7527 |
-
restoreDisplay = display === "none" ? "" : display;
|
7528 |
-
}
|
7529 |
-
}
|
7530 |
-
|
7531 |
-
style.display = "inline-block";
|
7532 |
-
}
|
7533 |
-
}
|
7534 |
-
}
|
7535 |
-
|
7536 |
-
if (opts.overflow) {
|
7537 |
-
style.overflow = "hidden";
|
7538 |
-
anim.always(function () {
|
7539 |
-
style.overflow = opts.overflow[0];
|
7540 |
-
style.overflowX = opts.overflow[1];
|
7541 |
-
style.overflowY = opts.overflow[2];
|
7542 |
-
});
|
7543 |
-
} // Implement show/hide animations
|
7544 |
-
|
7545 |
-
|
7546 |
-
propTween = false;
|
7547 |
-
|
7548 |
-
for (prop in orig) {
|
7549 |
-
// General show/hide setup for this element animation
|
7550 |
-
if (!propTween) {
|
7551 |
-
if (dataShow) {
|
7552 |
-
if ("hidden" in dataShow) {
|
7553 |
-
hidden = dataShow.hidden;
|
7554 |
-
}
|
7555 |
-
} else {
|
7556 |
-
dataShow = dataPriv.access(elem, "fxshow", {
|
7557 |
-
display: restoreDisplay
|
7558 |
-
});
|
7559 |
-
} // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
|
7560 |
-
|
7561 |
-
|
7562 |
-
if (toggle) {
|
7563 |
-
dataShow.hidden = !hidden;
|
7564 |
-
} // Show elements before animating them
|
7565 |
-
|
7566 |
-
|
7567 |
-
if (hidden) {
|
7568 |
-
showHide([elem], true);
|
7569 |
-
}
|
7570 |
-
/* eslint-disable no-loop-func */
|
7571 |
-
|
7572 |
-
|
7573 |
-
anim.done(function () {
|
7574 |
-
/* eslint-enable no-loop-func */
|
7575 |
-
// The final step of a "hide" animation is actually hiding the element
|
7576 |
-
if (!hidden) {
|
7577 |
-
showHide([elem]);
|
7578 |
-
}
|
7579 |
-
|
7580 |
-
dataPriv.remove(elem, "fxshow");
|
7581 |
-
|
7582 |
-
for (prop in orig) {
|
7583 |
-
jQuery.style(elem, prop, orig[prop]);
|
7584 |
-
}
|
7585 |
-
});
|
7586 |
-
} // Per-property setup
|
7587 |
-
|
7588 |
-
|
7589 |
-
propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);
|
7590 |
-
|
7591 |
-
if (!(prop in dataShow)) {
|
7592 |
-
dataShow[prop] = propTween.start;
|
7593 |
-
|
7594 |
-
if (hidden) {
|
7595 |
-
propTween.end = propTween.start;
|
7596 |
-
propTween.start = 0;
|
7597 |
-
}
|
7598 |
-
}
|
7599 |
-
}
|
7600 |
-
}
|
7601 |
-
|
7602 |
-
function propFilter(props, specialEasing) {
|
7603 |
-
var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass
|
7604 |
-
|
7605 |
-
for (index in props) {
|
7606 |
-
name = camelCase(index);
|
7607 |
-
easing = specialEasing[name];
|
7608 |
-
value = props[index];
|
7609 |
-
|
7610 |
-
if (Array.isArray(value)) {
|
7611 |
-
easing = value[1];
|
7612 |
-
value = props[index] = value[0];
|
7613 |
-
}
|
7614 |
-
|
7615 |
-
if (index !== name) {
|
7616 |
-
props[name] = value;
|
7617 |
-
delete props[index];
|
7618 |
-
}
|
7619 |
-
|
7620 |
-
hooks = jQuery.cssHooks[name];
|
7621 |
-
|
7622 |
-
if (hooks && "expand" in hooks) {
|
7623 |
-
value = hooks.expand(value);
|
7624 |
-
delete props[name]; // Not quite $.extend, this won't overwrite existing keys.
|
7625 |
-
// Reusing 'index' because we have the correct "name"
|
7626 |
-
|
7627 |
-
for (index in value) {
|
7628 |
-
if (!(index in props)) {
|
7629 |
-
props[index] = value[index];
|
7630 |
-
specialEasing[index] = easing;
|
7631 |
-
}
|
7632 |
-
}
|
7633 |
-
} else {
|
7634 |
-
specialEasing[name] = easing;
|
7635 |
-
}
|
7636 |
-
}
|
7637 |
-
}
|
7638 |
-
|
7639 |
-
function Animation(elem, properties, options) {
|
7640 |
-
var result,
|
7641 |
-
stopped,
|
7642 |
-
index = 0,
|
7643 |
-
length = Animation.prefilters.length,
|
7644 |
-
deferred = jQuery.Deferred().always(function () {
|
7645 |
-
// Don't match elem in the :animated selector
|
7646 |
-
delete tick.elem;
|
7647 |
-
}),
|
7648 |
-
tick = function tick() {
|
7649 |
-
if (stopped) {
|
7650 |
-
return false;
|
7651 |
-
}
|
7652 |
-
|
7653 |
-
var currentTime = fxNow || createFxNow(),
|
7654 |
-
remaining = Math.max(0, animation.startTime + animation.duration - currentTime),
|
7655 |
-
// Support: Android 2.3 only
|
7656 |
-
// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
|
7657 |
-
temp = remaining / animation.duration || 0,
|
7658 |
-
percent = 1 - temp,
|
7659 |
-
index = 0,
|
7660 |
-
length = animation.tweens.length;
|
7661 |
-
|
7662 |
-
for (; index < length; index++) {
|
7663 |
-
animation.tweens[index].run(percent);
|
7664 |
-
}
|
7665 |
-
|
7666 |
-
deferred.notifyWith(elem, [animation, percent, remaining]); // If there's more to do, yield
|
7667 |
-
|
7668 |
-
if (percent < 1 && length) {
|
7669 |
-
return remaining;
|
7670 |
-
} // If this was an empty animation, synthesize a final progress notification
|
7671 |
-
|
7672 |
-
|
7673 |
-
if (!length) {
|
7674 |
-
deferred.notifyWith(elem, [animation, 1, 0]);
|
7675 |
-
} // Resolve the animation and report its conclusion
|
7676 |
-
|
7677 |
-
|
7678 |
-
deferred.resolveWith(elem, [animation]);
|
7679 |
-
return false;
|
7680 |
-
},
|
7681 |
-
animation = deferred.promise({
|
7682 |
-
elem: elem,
|
7683 |
-
props: jQuery.extend({}, properties),
|
7684 |
-
opts: jQuery.extend(true, {
|
7685 |
-
specialEasing: {},
|
7686 |
-
easing: jQuery.easing._default
|
7687 |
-
}, options),
|
7688 |
-
originalProperties: properties,
|
7689 |
-
originalOptions: options,
|
7690 |
-
startTime: fxNow || createFxNow(),
|
7691 |
-
duration: options.duration,
|
7692 |
-
tweens: [],
|
7693 |
-
createTween: function createTween(prop, end) {
|
7694 |
-
var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);
|
7695 |
-
animation.tweens.push(tween);
|
7696 |
-
return tween;
|
7697 |
-
},
|
7698 |
-
stop: function stop(gotoEnd) {
|
7699 |
-
var index = 0,
|
7700 |
-
// If we are going to the end, we want to run all the tweens
|
7701 |
-
// otherwise we skip this part
|
7702 |
-
length = gotoEnd ? animation.tweens.length : 0;
|
7703 |
-
|
7704 |
-
if (stopped) {
|
7705 |
-
return this;
|
7706 |
-
}
|
7707 |
-
|
7708 |
-
stopped = true;
|
7709 |
-
|
7710 |
-
for (; index < length; index++) {
|
7711 |
-
animation.tweens[index].run(1);
|
7712 |
-
} // Resolve when we played the last frame; otherwise, reject
|
7713 |
-
|
7714 |
-
|
7715 |
-
if (gotoEnd) {
|
7716 |
-
deferred.notifyWith(elem, [animation, 1, 0]);
|
7717 |
-
deferred.resolveWith(elem, [animation, gotoEnd]);
|
7718 |
-
} else {
|
7719 |
-
deferred.rejectWith(elem, [animation, gotoEnd]);
|
7720 |
-
}
|
7721 |
-
|
7722 |
-
return this;
|
7723 |
-
}
|
7724 |
-
}),
|
7725 |
-
props = animation.props;
|
7726 |
-
|
7727 |
-
propFilter(props, animation.opts.specialEasing);
|
7728 |
-
|
7729 |
-
for (; index < length; index++) {
|
7730 |
-
result = Animation.prefilters[index].call(animation, elem, props, animation.opts);
|
7731 |
-
|
7732 |
-
if (result) {
|
7733 |
-
if (isFunction(result.stop)) {
|
7734 |
-
jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);
|
7735 |
-
}
|
7736 |
-
|
7737 |
-
return result;
|
7738 |
-
}
|
7739 |
-
}
|
7740 |
-
|
7741 |
-
jQuery.map(props, createTween, animation);
|
7742 |
-
|
7743 |
-
if (isFunction(animation.opts.start)) {
|
7744 |
-
animation.opts.start.call(elem, animation);
|
7745 |
-
} // Attach callbacks from options
|
7746 |
-
|
7747 |
-
|
7748 |
-
animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);
|
7749 |
-
jQuery.fx.timer(jQuery.extend(tick, {
|
7750 |
-
elem: elem,
|
7751 |
-
anim: animation,
|
7752 |
-
queue: animation.opts.queue
|
7753 |
-
}));
|
7754 |
-
return animation;
|
7755 |
-
}
|
7756 |
-
|
7757 |
-
jQuery.Animation = jQuery.extend(Animation, {
|
7758 |
-
tweeners: {
|
7759 |
-
"*": [function (prop, value) {
|
7760 |
-
var tween = this.createTween(prop, value);
|
7761 |
-
adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);
|
7762 |
-
return tween;
|
7763 |
-
}]
|
7764 |
-
},
|
7765 |
-
tweener: function tweener(props, callback) {
|
7766 |
-
if (isFunction(props)) {
|
7767 |
-
callback = props;
|
7768 |
-
props = ["*"];
|
7769 |
-
} else {
|
7770 |
-
props = props.match(rnothtmlwhite);
|
7771 |
-
}
|
7772 |
-
|
7773 |
-
var prop,
|
7774 |
-
index = 0,
|
7775 |
-
length = props.length;
|
7776 |
-
|
7777 |
-
for (; index < length; index++) {
|
7778 |
-
prop = props[index];
|
7779 |
-
Animation.tweeners[prop] = Animation.tweeners[prop] || [];
|
7780 |
-
Animation.tweeners[prop].unshift(callback);
|
7781 |
-
}
|
7782 |
-
},
|
7783 |
-
prefilters: [defaultPrefilter],
|
7784 |
-
prefilter: function prefilter(callback, prepend) {
|
7785 |
-
if (prepend) {
|
7786 |
-
Animation.prefilters.unshift(callback);
|
7787 |
-
} else {
|
7788 |
-
Animation.prefilters.push(callback);
|
7789 |
-
}
|
7790 |
-
}
|
7791 |
-
});
|
7792 |
-
|
7793 |
-
jQuery.speed = function (speed, easing, fn) {
|
7794 |
-
var opt = speed && _typeof(speed) === "object" ? jQuery.extend({}, speed) : {
|
7795 |
-
complete: fn || !fn && easing || isFunction(speed) && speed,
|
7796 |
-
duration: speed,
|
7797 |
-
easing: fn && easing || easing && !isFunction(easing) && easing
|
7798 |
-
}; // Go to the end state if fx are off
|
7799 |
-
|
7800 |
-
if (jQuery.fx.off) {
|
7801 |
-
opt.duration = 0;
|
7802 |
-
} else {
|
7803 |
-
if (typeof opt.duration !== "number") {
|
7804 |
-
if (opt.duration in jQuery.fx.speeds) {
|
7805 |
-
opt.duration = jQuery.fx.speeds[opt.duration];
|
7806 |
-
} else {
|
7807 |
-
opt.duration = jQuery.fx.speeds._default;
|
7808 |
-
}
|
7809 |
-
}
|
7810 |
-
} // Normalize opt.queue - true/undefined/null -> "fx"
|
7811 |
-
|
7812 |
-
|
7813 |
-
if (opt.queue == null || opt.queue === true) {
|
7814 |
-
opt.queue = "fx";
|
7815 |
-
} // Queueing
|
7816 |
-
|
7817 |
-
|
7818 |
-
opt.old = opt.complete;
|
7819 |
-
|
7820 |
-
opt.complete = function () {
|
7821 |
-
if (isFunction(opt.old)) {
|
7822 |
-
opt.old.call(this);
|
7823 |
-
}
|
7824 |
-
|
7825 |
-
if (opt.queue) {
|
7826 |
-
jQuery.dequeue(this, opt.queue);
|
7827 |
-
}
|
7828 |
-
};
|
7829 |
-
|
7830 |
-
return opt;
|
7831 |
-
};
|
7832 |
-
|
7833 |
-
jQuery.fn.extend({
|
7834 |
-
fadeTo: function fadeTo(speed, to, easing, callback) {
|
7835 |
-
// Show any hidden elements after setting opacity to 0
|
7836 |
-
return this.filter(isHiddenWithinTree).css("opacity", 0).show() // Animate to the value specified
|
7837 |
-
.end().animate({
|
7838 |
-
opacity: to
|
7839 |
-
}, speed, easing, callback);
|
7840 |
-
},
|
7841 |
-
animate: function animate(prop, speed, easing, callback) {
|
7842 |
-
var empty = jQuery.isEmptyObject(prop),
|
7843 |
-
optall = jQuery.speed(speed, easing, callback),
|
7844 |
-
doAnimation = function doAnimation() {
|
7845 |
-
// Operate on a copy of prop so per-property easing won't be lost
|
7846 |
-
var anim = Animation(this, jQuery.extend({}, prop), optall); // Empty animations, or finishing resolves immediately
|
7847 |
-
|
7848 |
-
if (empty || dataPriv.get(this, "finish")) {
|
7849 |
-
anim.stop(true);
|
7850 |
-
}
|
7851 |
-
};
|
7852 |
-
|
7853 |
-
doAnimation.finish = doAnimation;
|
7854 |
-
return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);
|
7855 |
-
},
|
7856 |
-
stop: function stop(type, clearQueue, gotoEnd) {
|
7857 |
-
var stopQueue = function stopQueue(hooks) {
|
7858 |
-
var stop = hooks.stop;
|
7859 |
-
delete hooks.stop;
|
7860 |
-
stop(gotoEnd);
|
7861 |
-
};
|
7862 |
-
|
7863 |
-
if (typeof type !== "string") {
|
7864 |
-
gotoEnd = clearQueue;
|
7865 |
-
clearQueue = type;
|
7866 |
-
type = undefined;
|
7867 |
-
}
|
7868 |
-
|
7869 |
-
if (clearQueue) {
|
7870 |
-
this.queue(type || "fx", []);
|
7871 |
-
}
|
7872 |
-
|
7873 |
-
return this.each(function () {
|
7874 |
-
var dequeue = true,
|
7875 |
-
index = type != null && type + "queueHooks",
|
7876 |
-
timers = jQuery.timers,
|
7877 |
-
data = dataPriv.get(this);
|
7878 |
-
|
7879 |
-
if (index) {
|
7880 |
-
if (data[index] && data[index].stop) {
|
7881 |
-
stopQueue(data[index]);
|
7882 |
-
}
|
7883 |
-
} else {
|
7884 |
-
for (index in data) {
|
7885 |
-
if (data[index] && data[index].stop && rrun.test(index)) {
|
7886 |
-
stopQueue(data[index]);
|
7887 |
-
}
|
7888 |
-
}
|
7889 |
-
}
|
7890 |
-
|
7891 |
-
for (index = timers.length; index--;) {
|
7892 |
-
if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
|
7893 |
-
timers[index].anim.stop(gotoEnd);
|
7894 |
-
dequeue = false;
|
7895 |
-
timers.splice(index, 1);
|
7896 |
-
}
|
7897 |
-
} // Start the next in the queue if the last step wasn't forced.
|
7898 |
-
// Timers currently will call their complete callbacks, which
|
7899 |
-
// will dequeue but only if they were gotoEnd.
|
7900 |
-
|
7901 |
-
|
7902 |
-
if (dequeue || !gotoEnd) {
|
7903 |
-
jQuery.dequeue(this, type);
|
7904 |
-
}
|
7905 |
-
});
|
7906 |
-
},
|
7907 |
-
finish: function finish(type) {
|
7908 |
-
if (type !== false) {
|
7909 |
-
type = type || "fx";
|
7910 |
-
}
|
7911 |
-
|
7912 |
-
return this.each(function () {
|
7913 |
-
var index,
|
7914 |
-
data = dataPriv.get(this),
|
7915 |
-
queue = data[type + "queue"],
|
7916 |
-
hooks = data[type + "queueHooks"],
|
7917 |
-
timers = jQuery.timers,
|
7918 |
-
length = queue ? queue.length : 0; // Enable finishing flag on private data
|
7919 |
-
|
7920 |
-
data.finish = true; // Empty the queue first
|
7921 |
-
|
7922 |
-
jQuery.queue(this, type, []);
|
7923 |
-
|
7924 |
-
if (hooks && hooks.stop) {
|
7925 |
-
hooks.stop.call(this, true);
|
7926 |
-
} // Look for any active animations, and finish them
|
7927 |
-
|
7928 |
-
|
7929 |
-
for (index = timers.length; index--;) {
|
7930 |
-
if (timers[index].elem === this && timers[index].queue === type) {
|
7931 |
-
timers[index].anim.stop(true);
|
7932 |
-
timers.splice(index, 1);
|
7933 |
-
}
|
7934 |
-
} // Look for any animations in the old queue and finish them
|
7935 |
-
|
7936 |
-
|
7937 |
-
for (index = 0; index < length; index++) {
|
7938 |
-
if (queue[index] && queue[index].finish) {
|
7939 |
-
queue[index].finish.call(this);
|
7940 |
-
}
|
7941 |
-
} // Turn off finishing flag
|
7942 |
-
|
7943 |
-
|
7944 |
-
delete data.finish;
|
7945 |
-
});
|
7946 |
-
}
|
7947 |
-
});
|
7948 |
-
jQuery.each(["toggle", "show", "hide"], function (_i, name) {
|
7949 |
-
var cssFn = jQuery.fn[name];
|
7950 |
-
|
7951 |
-
jQuery.fn[name] = function (speed, easing, callback) {
|
7952 |
-
return speed == null || typeof speed === "boolean" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);
|
7953 |
-
};
|
7954 |
-
}); // Generate shortcuts for custom animations
|
7955 |
-
|
7956 |
-
jQuery.each({
|
7957 |
-
slideDown: genFx("show"),
|
7958 |
-
slideUp: genFx("hide"),
|
7959 |
-
slideToggle: genFx("toggle"),
|
7960 |
-
fadeIn: {
|
7961 |
-
opacity: "show"
|
7962 |
-
},
|
7963 |
-
fadeOut: {
|
7964 |
-
opacity: "hide"
|
7965 |
-
},
|
7966 |
-
fadeToggle: {
|
7967 |
-
opacity: "toggle"
|
7968 |
-
}
|
7969 |
-
}, function (name, props) {
|
7970 |
-
jQuery.fn[name] = function (speed, easing, callback) {
|
7971 |
-
return this.animate(props, speed, easing, callback);
|
7972 |
-
};
|
7973 |
-
});
|
7974 |
-
jQuery.timers = [];
|
7975 |
-
|
7976 |
-
jQuery.fx.tick = function () {
|
7977 |
-
var timer,
|
7978 |
-
i = 0,
|
7979 |
-
timers = jQuery.timers;
|
7980 |
-
fxNow = Date.now();
|
7981 |
-
|
7982 |
-
for (; i < timers.length; i++) {
|
7983 |
-
timer = timers[i]; // Run the timer and safely remove it when done (allowing for external removal)
|
7984 |
-
|
7985 |
-
if (!timer() && timers[i] === timer) {
|
7986 |
-
timers.splice(i--, 1);
|
7987 |
-
}
|
7988 |
-
}
|
7989 |
-
|
7990 |
-
if (!timers.length) {
|
7991 |
-
jQuery.fx.stop();
|
7992 |
-
}
|
7993 |
-
|
7994 |
-
fxNow = undefined;
|
7995 |
-
};
|
7996 |
-
|
7997 |
-
jQuery.fx.timer = function (timer) {
|
7998 |
-
jQuery.timers.push(timer);
|
7999 |
-
jQuery.fx.start();
|
8000 |
-
};
|
8001 |
-
|
8002 |
-
jQuery.fx.interval = 13;
|
8003 |
-
|
8004 |
-
jQuery.fx.start = function () {
|
8005 |
-
if (inProgress) {
|
8006 |
-
return;
|
8007 |
-
}
|
8008 |
-
|
8009 |
-
inProgress = true;
|
8010 |
-
schedule();
|
8011 |
-
};
|
8012 |
-
|
8013 |
-
jQuery.fx.stop = function () {
|
8014 |
-
inProgress = null;
|
8015 |
-
};
|
8016 |
-
|
8017 |
-
jQuery.fx.speeds = {
|
8018 |
-
slow: 600,
|
8019 |
-
fast: 200,
|
8020 |
-
// Default speed
|
8021 |
-
_default: 400
|
8022 |
-
}; // Based off of the plugin by Clint Helfers, with permission.
|
8023 |
-
// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
|
8024 |
-
|
8025 |
-
jQuery.fn.delay = function (time, type) {
|
8026 |
-
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
|
8027 |
-
type = type || "fx";
|
8028 |
-
return this.queue(type, function (next, hooks) {
|
8029 |
-
var timeout = window.setTimeout(next, time);
|
8030 |
-
|
8031 |
-
hooks.stop = function () {
|
8032 |
-
window.clearTimeout(timeout);
|
8033 |
-
};
|
8034 |
-
});
|
8035 |
-
};
|
8036 |
-
|
8037 |
-
(function () {
|
8038 |
-
var input = document.createElement("input"),
|
8039 |
-
select = document.createElement("select"),
|
8040 |
-
opt = select.appendChild(document.createElement("option"));
|
8041 |
-
input.type = "checkbox"; // Support: Android <=4.3 only
|
8042 |
-
// Default value for a checkbox should be "on"
|
8043 |
-
|
8044 |
-
support.checkOn = input.value !== ""; // Support: IE <=11 only
|
8045 |
-
// Must access selectedIndex to make default options select
|
8046 |
-
|
8047 |
-
support.optSelected = opt.selected; // Support: IE <=11 only
|
8048 |
-
// An input loses its value after becoming a radio
|
8049 |
-
|
8050 |
-
input = document.createElement("input");
|
8051 |
-
input.value = "t";
|
8052 |
-
input.type = "radio";
|
8053 |
-
support.radioValue = input.value === "t";
|
8054 |
-
})();
|
8055 |
-
|
8056 |
-
var boolHook,
|
8057 |
-
attrHandle = jQuery.expr.attrHandle;
|
8058 |
-
jQuery.fn.extend({
|
8059 |
-
attr: function attr(name, value) {
|
8060 |
-
return access(this, jQuery.attr, name, value, arguments.length > 1);
|
8061 |
-
},
|
8062 |
-
removeAttr: function removeAttr(name) {
|
8063 |
-
return this.each(function () {
|
8064 |
-
jQuery.removeAttr(this, name);
|
8065 |
-
});
|
8066 |
-
}
|
8067 |
-
});
|
8068 |
-
jQuery.extend({
|
8069 |
-
attr: function attr(elem, name, value) {
|
8070 |
-
var ret,
|
8071 |
-
hooks,
|
8072 |
-
nType = elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes
|
8073 |
-
|
8074 |
-
if (nType === 3 || nType === 8 || nType === 2) {
|
8075 |
-
return;
|
8076 |
-
} // Fallback to prop when attributes are not supported
|
8077 |
-
|
8078 |
-
|
8079 |
-
if (typeof elem.getAttribute === "undefined") {
|
8080 |
-
return jQuery.prop(elem, name, value);
|
8081 |
-
} // Attribute hooks are determined by the lowercase version
|
8082 |
-
// Grab necessary hook if one is defined
|
8083 |
-
|
8084 |
-
|
8085 |
-
if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
|
8086 |
-
hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);
|
8087 |
-
}
|
8088 |
-
|
8089 |
-
if (value !== undefined) {
|
8090 |
-
if (value === null) {
|
8091 |
-
jQuery.removeAttr(elem, name);
|
8092 |
-
return;
|
8093 |
-
}
|
8094 |
-
|
8095 |
-
if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
|
8096 |
-
return ret;
|
8097 |
-
}
|
8098 |
-
|
8099 |
-
elem.setAttribute(name, value + "");
|
8100 |
-
return value;
|
8101 |
-
}
|
8102 |
-
|
8103 |
-
if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
|
8104 |
-
return ret;
|
8105 |
-
}
|
8106 |
-
|
8107 |
-
ret = jQuery.find.attr(elem, name); // Non-existent attributes return null, we normalize to undefined
|
8108 |
-
|
8109 |
-
return ret == null ? undefined : ret;
|
8110 |
-
},
|
8111 |
-
attrHooks: {
|
8112 |
-
type: {
|
8113 |
-
set: function set(elem, value) {
|
8114 |
-
if (!support.radioValue && value === "radio" && nodeName(elem, "input")) {
|
8115 |
-
var val = elem.value;
|
8116 |
-
elem.setAttribute("type", value);
|
8117 |
-
|
8118 |
-
if (val) {
|
8119 |
-
elem.value = val;
|
8120 |
-
}
|
8121 |
-
|
8122 |
-
return value;
|
8123 |
-
}
|
8124 |
-
}
|
8125 |
-
}
|
8126 |
-
},
|
8127 |
-
removeAttr: function removeAttr(elem, value) {
|
8128 |
-
var name,
|
8129 |
-
i = 0,
|
8130 |
-
// Attribute names can contain non-HTML whitespace characters
|
8131 |
-
// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
|
8132 |
-
attrNames = value && value.match(rnothtmlwhite);
|
8133 |
-
|
8134 |
-
if (attrNames && elem.nodeType === 1) {
|
8135 |
-
while (name = attrNames[i++]) {
|
8136 |
-
elem.removeAttribute(name);
|
8137 |
-
}
|
8138 |
-
}
|
8139 |
-
}
|
8140 |
-
}); // Hooks for boolean attributes
|
8141 |
-
|
8142 |
-
boolHook = {
|
8143 |
-
set: function set(elem, value, name) {
|
8144 |
-
if (value === false) {
|
8145 |
-
// Remove boolean attributes when set to false
|
8146 |
-
jQuery.removeAttr(elem, name);
|
8147 |
-
} else {
|
8148 |
-
elem.setAttribute(name, name);
|
8149 |
-
}
|
8150 |
-
|
8151 |
-
return name;
|
8152 |
-
}
|
8153 |
-
};
|
8154 |
-
jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function (_i, name) {
|
8155 |
-
var getter = attrHandle[name] || jQuery.find.attr;
|
8156 |
-
|
8157 |
-
attrHandle[name] = function (elem, name, isXML) {
|
8158 |
-
var ret,
|
8159 |
-
handle,
|
8160 |
-
lowercaseName = name.toLowerCase();
|
8161 |
-
|
8162 |
-
if (!isXML) {
|
8163 |
-
// Avoid an infinite loop by temporarily removing this function from the getter
|
8164 |
-
handle = attrHandle[lowercaseName];
|
8165 |
-
attrHandle[lowercaseName] = ret;
|
8166 |
-
ret = getter(elem, name, isXML) != null ? lowercaseName : null;
|
8167 |
-
attrHandle[lowercaseName] = handle;
|
8168 |
-
}
|
8169 |
-
|
8170 |
-
return ret;
|
8171 |
-
};
|
8172 |
-
});
|
8173 |
-
var rfocusable = /^(?:input|select|textarea|button)$/i,
|
8174 |
-
rclickable = /^(?:a|area)$/i;
|
8175 |
-
jQuery.fn.extend({
|
8176 |
-
prop: function prop(name, value) {
|
8177 |
-
return access(this, jQuery.prop, name, value, arguments.length > 1);
|
8178 |
-
},
|
8179 |
-
removeProp: function removeProp(name) {
|
8180 |
-
return this.each(function () {
|
8181 |
-
delete this[jQuery.propFix[name] || name];
|
8182 |
-
});
|
8183 |
-
}
|
8184 |
-
});
|
8185 |
-
jQuery.extend({
|
8186 |
-
prop: function prop(elem, name, value) {
|
8187 |
-
var ret,
|
8188 |
-
hooks,
|
8189 |
-
nType = elem.nodeType; // Don't get/set properties on text, comment and attribute nodes
|
8190 |
-
|
8191 |
-
if (nType === 3 || nType === 8 || nType === 2) {
|
8192 |
-
return;
|
8193 |
-
}
|
8194 |
-
|
8195 |
-
if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
|
8196 |
-
// Fix name and attach hooks
|
8197 |
-
name = jQuery.propFix[name] || name;
|
8198 |
-
hooks = jQuery.propHooks[name];
|
8199 |
-
}
|
8200 |
-
|
8201 |
-
if (value !== undefined) {
|
8202 |
-
if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
|
8203 |
-
return ret;
|
8204 |
-
}
|
8205 |
-
|
8206 |
-
return elem[name] = value;
|
8207 |
-
}
|
8208 |
-
|
8209 |
-
if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
|
8210 |
-
return ret;
|
8211 |
-
}
|
8212 |
-
|
8213 |
-
return elem[name];
|
8214 |
-
},
|
8215 |
-
propHooks: {
|
8216 |
-
tabIndex: {
|
8217 |
-
get: function get(elem) {
|
8218 |
-
// Support: IE <=9 - 11 only
|
8219 |
-
// elem.tabIndex doesn't always return the
|
8220 |
-
// correct value when it hasn't been explicitly set
|
8221 |
-
// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
|
8222 |
-
// Use proper attribute retrieval(#12072)
|
8223 |
-
var tabindex = jQuery.find.attr(elem, "tabindex");
|
8224 |
-
|
8225 |
-
if (tabindex) {
|
8226 |
-
return parseInt(tabindex, 10);
|
8227 |
-
}
|
8228 |
-
|
8229 |
-
if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {
|
8230 |
-
return 0;
|
8231 |
-
}
|
8232 |
-
|
8233 |
-
return -1;
|
8234 |
-
}
|
8235 |
-
}
|
8236 |
-
},
|
8237 |
-
propFix: {
|
8238 |
-
"for": "htmlFor",
|
8239 |
-
"class": "className"
|
8240 |
-
}
|
8241 |
-
}); // Support: IE <=11 only
|
8242 |
-
// Accessing the selectedIndex property
|
8243 |
-
// forces the browser to respect setting selected
|
8244 |
-
// on the option
|
8245 |
-
// The getter ensures a default option is selected
|
8246 |
-
// when in an optgroup
|
8247 |
-
// eslint rule "no-unused-expressions" is disabled for this code
|
8248 |
-
// since it considers such accessions noop
|
8249 |
-
|
8250 |
-
if (!support.optSelected) {
|
8251 |
-
jQuery.propHooks.selected = {
|
8252 |
-
get: function get(elem) {
|
8253 |
-
/* eslint no-unused-expressions: "off" */
|
8254 |
-
var parent = elem.parentNode;
|
8255 |
-
|
8256 |
-
if (parent && parent.parentNode) {
|
8257 |
-
parent.parentNode.selectedIndex;
|
8258 |
-
}
|
8259 |
-
|
8260 |
-
return null;
|
8261 |
-
},
|
8262 |
-
set: function set(elem) {
|
8263 |
-
/* eslint no-unused-expressions: "off" */
|
8264 |
-
var parent = elem.parentNode;
|
8265 |
-
|
8266 |
-
if (parent) {
|
8267 |
-
parent.selectedIndex;
|
8268 |
-
|
8269 |
-
if (parent.parentNode) {
|
8270 |
-
parent.parentNode.selectedIndex;
|
8271 |
-
}
|
8272 |
-
}
|
8273 |
-
}
|
8274 |
-
};
|
8275 |
-
}
|
8276 |
-
|
8277 |
-
jQuery.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
|
8278 |
-
jQuery.propFix[this.toLowerCase()] = this;
|
8279 |
-
}); // Strip and collapse whitespace according to HTML spec
|
8280 |
-
// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
|
8281 |
-
|
8282 |
-
function stripAndCollapse(value) {
|
8283 |
-
var tokens = value.match(rnothtmlwhite) || [];
|
8284 |
-
return tokens.join(" ");
|
8285 |
-
}
|
8286 |
-
|
8287 |
-
function getClass(elem) {
|
8288 |
-
return elem.getAttribute && elem.getAttribute("class") || "";
|
8289 |
-
}
|
8290 |
-
|
8291 |
-
function classesToArray(value) {
|
8292 |
-
if (Array.isArray(value)) {
|
8293 |
-
return value;
|
8294 |
-
}
|
8295 |
-
|
8296 |
-
if (typeof value === "string") {
|
8297 |
-
return value.match(rnothtmlwhite) || [];
|
8298 |
-
}
|
8299 |
-
|
8300 |
-
return [];
|
8301 |
-
}
|
8302 |
-
|
8303 |
-
jQuery.fn.extend({
|
8304 |
-
addClass: function addClass(value) {
|
8305 |
-
var classes,
|
8306 |
-
elem,
|
8307 |
-
cur,
|
8308 |
-
curValue,
|
8309 |
-
clazz,
|
8310 |
-
j,
|
8311 |
-
finalValue,
|
8312 |
-
i = 0;
|
8313 |
-
|
8314 |
-
if (isFunction(value)) {
|
8315 |
-
return this.each(function (j) {
|
8316 |
-
jQuery(this).addClass(value.call(this, j, getClass(this)));
|
8317 |
-
});
|
8318 |
-
}
|
8319 |
-
|
8320 |
-
classes = classesToArray(value);
|
8321 |
-
|
8322 |
-
if (classes.length) {
|
8323 |
-
while (elem = this[i++]) {
|
8324 |
-
curValue = getClass(elem);
|
8325 |
-
cur = elem.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
|
8326 |
-
|
8327 |
-
if (cur) {
|
8328 |
-
j = 0;
|
8329 |
-
|
8330 |
-
while (clazz = classes[j++]) {
|
8331 |
-
if (cur.indexOf(" " + clazz + " ") < 0) {
|
8332 |
-
cur += clazz + " ";
|
8333 |
-
}
|
8334 |
-
} // Only assign if different to avoid unneeded rendering.
|
8335 |
-
|
8336 |
-
|
8337 |
-
finalValue = stripAndCollapse(cur);
|
8338 |
-
|
8339 |
-
if (curValue !== finalValue) {
|
8340 |
-
elem.setAttribute("class", finalValue);
|
8341 |
-
}
|
8342 |
-
}
|
8343 |
-
}
|
8344 |
-
}
|
8345 |
-
|
8346 |
-
return this;
|
8347 |
-
},
|
8348 |
-
removeClass: function removeClass(value) {
|
8349 |
-
var classes,
|
8350 |
-
elem,
|
8351 |
-
cur,
|
8352 |
-
curValue,
|
8353 |
-
clazz,
|
8354 |
-
j,
|
8355 |
-
finalValue,
|
8356 |
-
i = 0;
|
8357 |
-
|
8358 |
-
if (isFunction(value)) {
|
8359 |
-
return this.each(function (j) {
|
8360 |
-
jQuery(this).removeClass(value.call(this, j, getClass(this)));
|
8361 |
-
});
|
8362 |
-
}
|
8363 |
-
|
8364 |
-
if (!arguments.length) {
|
8365 |
-
return this.attr("class", "");
|
8366 |
-
}
|
8367 |
-
|
8368 |
-
classes = classesToArray(value);
|
8369 |
-
|
8370 |
-
if (classes.length) {
|
8371 |
-
while (elem = this[i++]) {
|
8372 |
-
curValue = getClass(elem); // This expression is here for better compressibility (see addClass)
|
8373 |
-
|
8374 |
-
cur = elem.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
|
8375 |
-
|
8376 |
-
if (cur) {
|
8377 |
-
j = 0;
|
8378 |
-
|
8379 |
-
while (clazz = classes[j++]) {
|
8380 |
-
// Remove *all* instances
|
8381 |
-
while (cur.indexOf(" " + clazz + " ") > -1) {
|
8382 |
-
cur = cur.replace(" " + clazz + " ", " ");
|
8383 |
-
}
|
8384 |
-
} // Only assign if different to avoid unneeded rendering.
|
8385 |
-
|
8386 |
-
|
8387 |
-
finalValue = stripAndCollapse(cur);
|
8388 |
-
|
8389 |
-
if (curValue !== finalValue) {
|
8390 |
-
elem.setAttribute("class", finalValue);
|
8391 |
-
}
|
8392 |
-
}
|
8393 |
-
}
|
8394 |
-
}
|
8395 |
-
|
8396 |
-
return this;
|
8397 |
-
},
|
8398 |
-
toggleClass: function toggleClass(value, stateVal) {
|
8399 |
-
var type = _typeof(value),
|
8400 |
-
isValidValue = type === "string" || Array.isArray(value);
|
8401 |
-
|
8402 |
-
if (typeof stateVal === "boolean" && isValidValue) {
|
8403 |
-
return stateVal ? this.addClass(value) : this.removeClass(value);
|
8404 |
-
}
|
8405 |
-
|
8406 |
-
if (isFunction(value)) {
|
8407 |
-
return this.each(function (i) {
|
8408 |
-
jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);
|
8409 |
-
});
|
8410 |
-
}
|
8411 |
-
|
8412 |
-
return this.each(function () {
|
8413 |
-
var className, i, self, classNames;
|
8414 |
-
|
8415 |
-
if (isValidValue) {
|
8416 |
-
// Toggle individual class names
|
8417 |
-
i = 0;
|
8418 |
-
self = jQuery(this);
|
8419 |
-
classNames = classesToArray(value);
|
8420 |
-
|
8421 |
-
while (className = classNames[i++]) {
|
8422 |
-
// Check each className given, space separated list
|
8423 |
-
if (self.hasClass(className)) {
|
8424 |
-
self.removeClass(className);
|
8425 |
-
} else {
|
8426 |
-
self.addClass(className);
|
8427 |
-
}
|
8428 |
-
} // Toggle whole class name
|
8429 |
-
|
8430 |
-
} else if (value === undefined || type === "boolean") {
|
8431 |
-
className = getClass(this);
|
8432 |
-
|
8433 |
-
if (className) {
|
8434 |
-
// Store className if set
|
8435 |
-
dataPriv.set(this, "__className__", className);
|
8436 |
-
} // If the element has a class name or if we're passed `false`,
|
8437 |
-
// then remove the whole classname (if there was one, the above saved it).
|
8438 |
-
// Otherwise bring back whatever was previously saved (if anything),
|
8439 |
-
// falling back to the empty string if nothing was stored.
|
8440 |
-
|
8441 |
-
|
8442 |
-
if (this.setAttribute) {
|
8443 |
-
this.setAttribute("class", className || value === false ? "" : dataPriv.get(this, "__className__") || "");
|
8444 |
-
}
|
8445 |
-
}
|
8446 |
-
});
|
8447 |
-
},
|
8448 |
-
hasClass: function hasClass(selector) {
|
8449 |
-
var className,
|
8450 |
-
elem,
|
8451 |
-
i = 0;
|
8452 |
-
className = " " + selector + " ";
|
8453 |
-
|
8454 |
-
while (elem = this[i++]) {
|
8455 |
-
if (elem.nodeType === 1 && (" " + stripAndCollapse(getClass(elem)) + " ").indexOf(className) > -1) {
|
8456 |
-
return true;
|
8457 |
-
}
|
8458 |
-
}
|
8459 |
-
|
8460 |
-
return false;
|
8461 |
-
}
|
8462 |
-
});
|
8463 |
-
var rreturn = /\r/g;
|
8464 |
-
jQuery.fn.extend({
|
8465 |
-
val: function val(value) {
|
8466 |
-
var hooks,
|
8467 |
-
ret,
|
8468 |
-
valueIsFunction,
|
8469 |
-
elem = this[0];
|
8470 |
-
|
8471 |
-
if (!arguments.length) {
|
8472 |
-
if (elem) {
|
8473 |
-
hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];
|
8474 |
-
|
8475 |
-
if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) {
|
8476 |
-
return ret;
|
8477 |
-
}
|
8478 |
-
|
8479 |
-
ret = elem.value; // Handle most common string cases
|
8480 |
-
|
8481 |
-
if (typeof ret === "string") {
|
8482 |
-
return ret.replace(rreturn, "");
|
8483 |
-
} // Handle cases where value is null/undef or number
|
8484 |
-
|
8485 |
-
|
8486 |
-
return ret == null ? "" : ret;
|
8487 |
-
}
|
8488 |
-
|
8489 |
-
return;
|
8490 |
-
}
|
8491 |
-
|
8492 |
-
valueIsFunction = isFunction(value);
|
8493 |
-
return this.each(function (i) {
|
8494 |
-
var val;
|
8495 |
-
|
8496 |
-
if (this.nodeType !== 1) {
|
8497 |
-
return;
|
8498 |
-
}
|
8499 |
-
|
8500 |
-
if (valueIsFunction) {
|
8501 |
-
val = value.call(this, i, jQuery(this).val());
|
8502 |
-
} else {
|
8503 |
-
val = value;
|
8504 |
-
} // Treat null/undefined as ""; convert numbers to string
|
8505 |
-
|
8506 |
-
|
8507 |
-
if (val == null) {
|
8508 |
-
val = "";
|
8509 |
-
} else if (typeof val === "number") {
|
8510 |
-
val += "";
|
8511 |
-
} else if (Array.isArray(val)) {
|
8512 |
-
val = jQuery.map(val, function (value) {
|
8513 |
-
return value == null ? "" : value + "";
|
8514 |
-
});
|
8515 |
-
}
|
8516 |
-
|
8517 |
-
hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; // If set returns undefined, fall back to normal setting
|
8518 |
-
|
8519 |
-
if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) {
|
8520 |
-
this.value = val;
|
8521 |
-
}
|
8522 |
-
});
|
8523 |
-
}
|
8524 |
-
});
|
8525 |
-
jQuery.extend({
|
8526 |
-
valHooks: {
|
8527 |
-
option: {
|
8528 |
-
get: function get(elem) {
|
8529 |
-
var val = jQuery.find.attr(elem, "value");
|
8530 |
-
return val != null ? val : // Support: IE <=10 - 11 only
|
8531 |
-
// option.text throws exceptions (#14686, #14858)
|
8532 |
-
// Strip and collapse whitespace
|
8533 |
-
// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
|
8534 |
-
stripAndCollapse(jQuery.text(elem));
|
8535 |
-
}
|
8536 |
-
},
|
8537 |
-
select: {
|
8538 |
-
get: function get(elem) {
|
8539 |
-
var value,
|
8540 |
-
option,
|
8541 |
-
i,
|
8542 |
-
options = elem.options,
|
8543 |
-
index = elem.selectedIndex,
|
8544 |
-
one = elem.type === "select-one",
|
8545 |
-
values = one ? null : [],
|
8546 |
-
max = one ? index + 1 : options.length;
|
8547 |
-
|
8548 |
-
if (index < 0) {
|
8549 |
-
i = max;
|
8550 |
-
} else {
|
8551 |
-
i = one ? index : 0;
|
8552 |
-
} // Loop through all the selected options
|
8553 |
-
|
8554 |
-
|
8555 |
-
for (; i < max; i++) {
|
8556 |
-
option = options[i]; // Support: IE <=9 only
|
8557 |
-
// IE8-9 doesn't update selected after form reset (#2551)
|
8558 |
-
|
8559 |
-
if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup
|
8560 |
-
!option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, "optgroup"))) {
|
8561 |
-
// Get the specific value for the option
|
8562 |
-
value = jQuery(option).val(); // We don't need an array for one selects
|
8563 |
-
|
8564 |
-
if (one) {
|
8565 |
-
return value;
|
8566 |
-
} // Multi-Selects return an array
|
8567 |
-
|
8568 |
-
|
8569 |
-
values.push(value);
|
8570 |
-
}
|
8571 |
-
}
|
8572 |
-
|
8573 |
-
return values;
|
8574 |
-
},
|
8575 |
-
set: function set(elem, value) {
|
8576 |
-
var optionSet,
|
8577 |
-
option,
|
8578 |
-
options = elem.options,
|
8579 |
-
values = jQuery.makeArray(value),
|
8580 |
-
i = options.length;
|
8581 |
-
|
8582 |
-
while (i--) {
|
8583 |
-
option = options[i];
|
8584 |
-
/* eslint-disable no-cond-assign */
|
8585 |
-
|
8586 |
-
if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {
|
8587 |
-
optionSet = true;
|
8588 |
-
}
|
8589 |
-
/* eslint-enable no-cond-assign */
|
8590 |
-
|
8591 |
-
} // Force browsers to behave consistently when non-matching value is set
|
8592 |
-
|
8593 |
-
|
8594 |
-
if (!optionSet) {
|
8595 |
-
elem.selectedIndex = -1;
|
8596 |
-
}
|
8597 |
-
|
8598 |
-
return values;
|
8599 |
-
}
|
8600 |
-
}
|
8601 |
-
}
|
8602 |
-
}); // Radios and checkboxes getter/setter
|
8603 |
-
|
8604 |
-
jQuery.each(["radio", "checkbox"], function () {
|
8605 |
-
jQuery.valHooks[this] = {
|
8606 |
-
set: function set(elem, value) {
|
8607 |
-
if (Array.isArray(value)) {
|
8608 |
-
return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;
|
8609 |
-
}
|
8610 |
-
}
|
8611 |
-
};
|
8612 |
-
|
8613 |
-
if (!support.checkOn) {
|
8614 |
-
jQuery.valHooks[this].get = function (elem) {
|
8615 |
-
return elem.getAttribute("value") === null ? "on" : elem.value;
|
8616 |
-
};
|
8617 |
-
}
|
8618 |
-
}); // Return jQuery for attributes-only inclusion
|
8619 |
-
|
8620 |
-
support.focusin = "onfocusin" in window;
|
8621 |
-
|
8622 |
-
var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
|
8623 |
-
stopPropagationCallback = function stopPropagationCallback(e) {
|
8624 |
-
e.stopPropagation();
|
8625 |
-
};
|
8626 |
-
|
8627 |
-
jQuery.extend(jQuery.event, {
|
8628 |
-
trigger: function trigger(event, data, elem, onlyHandlers) {
|
8629 |
-
var i,
|
8630 |
-
cur,
|
8631 |
-
tmp,
|
8632 |
-
bubbleType,
|
8633 |
-
ontype,
|
8634 |
-
handle,
|
8635 |
-
special,
|
8636 |
-
lastElement,
|
8637 |
-
eventPath = [elem || document],
|
8638 |
-
type = hasOwn.call(event, "type") ? event.type : event,
|
8639 |
-
namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : [];
|
8640 |
-
cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes
|
8641 |
-
|
8642 |
-
if (elem.nodeType === 3 || elem.nodeType === 8) {
|
8643 |
-
return;
|
8644 |
-
} // focus/blur morphs to focusin/out; ensure we're not firing them right now
|
8645 |
-
|
8646 |
-
|
8647 |
-
if (rfocusMorph.test(type + jQuery.event.triggered)) {
|
8648 |
-
return;
|
8649 |
-
}
|
8650 |
-
|
8651 |
-
if (type.indexOf(".") > -1) {
|
8652 |
-
// Namespaced trigger; create a regexp to match event type in handle()
|
8653 |
-
namespaces = type.split(".");
|
8654 |
-
type = namespaces.shift();
|
8655 |
-
namespaces.sort();
|
8656 |
-
}
|
8657 |
-
|
8658 |
-
ontype = type.indexOf(":") < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string
|
8659 |
-
|
8660 |
-
event = event[jQuery.expando] ? event : new jQuery.Event(type, _typeof(event) === "object" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
|
8661 |
-
|
8662 |
-
event.isTrigger = onlyHandlers ? 2 : 3;
|
8663 |
-
event.namespace = namespaces.join(".");
|
8664 |
-
event.rnamespace = event.namespace ? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; // Clean up the event in case it is being reused
|
8665 |
-
|
8666 |
-
event.result = undefined;
|
8667 |
-
|
8668 |
-
if (!event.target) {
|
8669 |
-
event.target = elem;
|
8670 |
-
} // Clone any incoming data and prepend the event, creating the handler arg list
|
8671 |
-
|
8672 |
-
|
8673 |
-
data = data == null ? [event] : jQuery.makeArray(data, [event]); // Allow special events to draw outside the lines
|
8674 |
-
|
8675 |
-
special = jQuery.event.special[type] || {};
|
8676 |
-
|
8677 |
-
if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {
|
8678 |
-
return;
|
8679 |
-
} // Determine event propagation path in advance, per W3C events spec (#9951)
|
8680 |
-
// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
|
8681 |
-
|
8682 |
-
|
8683 |
-
if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {
|
8684 |
-
bubbleType = special.delegateType || type;
|
8685 |
-
|
8686 |
-
if (!rfocusMorph.test(bubbleType + type)) {
|
8687 |
-
cur = cur.parentNode;
|
8688 |
-
}
|
8689 |
-
|
8690 |
-
for (; cur; cur = cur.parentNode) {
|
8691 |
-
eventPath.push(cur);
|
8692 |
-
tmp = cur;
|
8693 |
-
} // Only add window if we got to document (e.g., not plain obj or detached DOM)
|
8694 |
-
|
8695 |
-
|
8696 |
-
if (tmp === (elem.ownerDocument || document)) {
|
8697 |
-
eventPath.push(tmp.defaultView || tmp.parentWindow || window);
|
8698 |
-
}
|
8699 |
-
} // Fire handlers on the event path
|
8700 |
-
|
8701 |
-
|
8702 |
-
i = 0;
|
8703 |
-
|
8704 |
-
while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {
|
8705 |
-
lastElement = cur;
|
8706 |
-
event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler
|
8707 |
-
|
8708 |
-
handle = (dataPriv.get(cur, "events") || Object.create(null))[event.type] && dataPriv.get(cur, "handle");
|
8709 |
-
|
8710 |
-
if (handle) {
|
8711 |
-
handle.apply(cur, data);
|
8712 |
-
} // Native handler
|
8713 |
-
|
8714 |
-
|
8715 |
-
handle = ontype && cur[ontype];
|
8716 |
-
|
8717 |
-
if (handle && handle.apply && acceptData(cur)) {
|
8718 |
-
event.result = handle.apply(cur, data);
|
8719 |
-
|
8720 |
-
if (event.result === false) {
|
8721 |
-
event.preventDefault();
|
8722 |
-
}
|
8723 |
-
}
|
8724 |
-
}
|
8725 |
-
|
8726 |
-
event.type = type; // If nobody prevented the default action, do it now
|
8727 |
-
|
8728 |
-
if (!onlyHandlers && !event.isDefaultPrevented()) {
|
8729 |
-
if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {
|
8730 |
-
// Call a native DOM method on the target with the same name as the event.
|
8731 |
-
// Don't do default actions on window, that's where global variables be (#6170)
|
8732 |
-
if (ontype && isFunction(elem[type]) && !isWindow(elem)) {
|
8733 |
-
// Don't re-trigger an onFOO event when we call its FOO() method
|
8734 |
-
tmp = elem[ontype];
|
8735 |
-
|
8736 |
-
if (tmp) {
|
8737 |
-
elem[ontype] = null;
|
8738 |
-
} // Prevent re-triggering of the same event, since we already bubbled it above
|
8739 |
-
|
8740 |
-
|
8741 |
-
jQuery.event.triggered = type;
|
8742 |
-
|
8743 |
-
if (event.isPropagationStopped()) {
|
8744 |
-
lastElement.addEventListener(type, stopPropagationCallback);
|
8745 |
-
}
|
8746 |
-
|
8747 |
-
elem[type]();
|
8748 |
-
|
8749 |
-
if (event.isPropagationStopped()) {
|
8750 |
-
lastElement.removeEventListener(type, stopPropagationCallback);
|
8751 |
-
}
|
8752 |
-
|
8753 |
-
jQuery.event.triggered = undefined;
|
8754 |
-
|
8755 |
-
if (tmp) {
|
8756 |
-
elem[ontype] = tmp;
|
8757 |
-
}
|
8758 |
-
}
|
8759 |
-
}
|
8760 |
-
}
|
8761 |
-
|
8762 |
-
return event.result;
|
8763 |
-
},
|
8764 |
-
// Piggyback on a donor event to simulate a different one
|
8765 |
-
// Used only for `focus(in | out)` events
|
8766 |
-
simulate: function simulate(type, elem, event) {
|
8767 |
-
var e = jQuery.extend(new jQuery.Event(), event, {
|
8768 |
-
type: type,
|
8769 |
-
isSimulated: true
|
8770 |
-
});
|
8771 |
-
jQuery.event.trigger(e, null, elem);
|
8772 |
-
}
|
8773 |
-
});
|
8774 |
-
jQuery.fn.extend({
|
8775 |
-
trigger: function trigger(type, data) {
|
8776 |
-
return this.each(function () {
|
8777 |
-
jQuery.event.trigger(type, data, this);
|
8778 |
-
});
|
8779 |
-
},
|
8780 |
-
triggerHandler: function triggerHandler(type, data) {
|
8781 |
-
var elem = this[0];
|
8782 |
-
|
8783 |
-
if (elem) {
|
8784 |
-
return jQuery.event.trigger(type, data, elem, true);
|
8785 |
-
}
|
8786 |
-
}
|
8787 |
-
}); // Support: Firefox <=44
|
8788 |
-
// Firefox doesn't have focus(in | out) events
|
8789 |
-
// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
|
8790 |
-
//
|
8791 |
-
// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
|
8792 |
-
// focus(in | out) events fire after focus & blur events,
|
8793 |
-
// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
|
8794 |
-
// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
|
8795 |
-
|
8796 |
-
if (!support.focusin) {
|
8797 |
-
jQuery.each({
|
8798 |
-
focus: "focusin",
|
8799 |
-
blur: "focusout"
|
8800 |
-
}, function (orig, fix) {
|
8801 |
-
// Attach a single capturing handler on the document while someone wants focusin/focusout
|
8802 |
-
var handler = function handler(event) {
|
8803 |
-
jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));
|
8804 |
-
};
|
8805 |
-
|
8806 |
-
jQuery.event.special[fix] = {
|
8807 |
-
setup: function setup() {
|
8808 |
-
// Handle: regular nodes (via `this.ownerDocument`), window
|
8809 |
-
// (via `this.document`) & document (via `this`).
|
8810 |
-
var doc = this.ownerDocument || this.document || this,
|
8811 |
-
attaches = dataPriv.access(doc, fix);
|
8812 |
-
|
8813 |
-
if (!attaches) {
|
8814 |
-
doc.addEventListener(orig, handler, true);
|
8815 |
-
}
|
8816 |
-
|
8817 |
-
dataPriv.access(doc, fix, (attaches || 0) + 1);
|
8818 |
-
},
|
8819 |
-
teardown: function teardown() {
|
8820 |
-
var doc = this.ownerDocument || this.document || this,
|
8821 |
-
attaches = dataPriv.access(doc, fix) - 1;
|
8822 |
-
|
8823 |
-
if (!attaches) {
|
8824 |
-
doc.removeEventListener(orig, handler, true);
|
8825 |
-
dataPriv.remove(doc, fix);
|
8826 |
-
} else {
|
8827 |
-
dataPriv.access(doc, fix, attaches);
|
8828 |
-
}
|
8829 |
-
}
|
8830 |
-
};
|
8831 |
-
});
|
8832 |
-
}
|
8833 |
-
|
8834 |
-
var location = window.location;
|
8835 |
-
var nonce = {
|
8836 |
-
guid: Date.now()
|
8837 |
-
};
|
8838 |
-
var rquery = /\?/; // Cross-browser xml parsing
|
8839 |
-
|
8840 |
-
jQuery.parseXML = function (data) {
|
8841 |
-
var xml;
|
8842 |
-
|
8843 |
-
if (!data || typeof data !== "string") {
|
8844 |
-
return null;
|
8845 |
-
} // Support: IE 9 - 11 only
|
8846 |
-
// IE throws on parseFromString with invalid input.
|
8847 |
-
|
8848 |
-
|
8849 |
-
try {
|
8850 |
-
xml = new window.DOMParser().parseFromString(data, "text/xml");
|
8851 |
-
} catch (e) {
|
8852 |
-
xml = undefined;
|
8853 |
-
}
|
8854 |
-
|
8855 |
-
if (!xml || xml.getElementsByTagName("parsererror").length) {
|
8856 |
-
jQuery.error("Invalid XML: " + data);
|
8857 |
-
}
|
8858 |
-
|
8859 |
-
return xml;
|
8860 |
-
};
|
8861 |
-
|
8862 |
-
var rbracket = /\[\]$/,
|
8863 |
-
rCRLF = /\r?\n/g,
|
8864 |
-
rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
|
8865 |
-
rsubmittable = /^(?:input|select|textarea|keygen)/i;
|
8866 |
-
|
8867 |
-
function buildParams(prefix, obj, traditional, add) {
|
8868 |
-
var name;
|
8869 |
-
|
8870 |
-
if (Array.isArray(obj)) {
|
8871 |
-
// Serialize array item.
|
8872 |
-
jQuery.each(obj, function (i, v) {
|
8873 |
-
if (traditional || rbracket.test(prefix)) {
|
8874 |
-
// Treat each array item as a scalar.
|
8875 |
-
add(prefix, v);
|
8876 |
-
} else {
|
8877 |
-
// Item is non-scalar (array or object), encode its numeric index.
|
8878 |
-
buildParams(prefix + "[" + (_typeof(v) === "object" && v != null ? i : "") + "]", v, traditional, add);
|
8879 |
-
}
|
8880 |
-
});
|
8881 |
-
} else if (!traditional && toType(obj) === "object") {
|
8882 |
-
// Serialize object item.
|
8883 |
-
for (name in obj) {
|
8884 |
-
buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
|
8885 |
-
}
|
8886 |
-
} else {
|
8887 |
-
// Serialize scalar item.
|
8888 |
-
add(prefix, obj);
|
8889 |
-
}
|
8890 |
-
} // Serialize an array of form elements or a set of
|
8891 |
-
// key/values into a query string
|
8892 |
-
|
8893 |
-
|
8894 |
-
jQuery.param = function (a, traditional) {
|
8895 |
-
var prefix,
|
8896 |
-
s = [],
|
8897 |
-
add = function add(key, valueOrFunction) {
|
8898 |
-
// If value is a function, invoke it and use its return value
|
8899 |
-
var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;
|
8900 |
-
s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value == null ? "" : value);
|
8901 |
-
};
|
8902 |
-
|
8903 |
-
if (a == null) {
|
8904 |
-
return "";
|
8905 |
-
} // If an array was passed in, assume that it is an array of form elements.
|
8906 |
-
|
8907 |
-
|
8908 |
-
if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {
|
8909 |
-
// Serialize the form elements
|
8910 |
-
jQuery.each(a, function () {
|
8911 |
-
add(this.name, this.value);
|
8912 |
-
});
|
8913 |
-
} else {
|
8914 |
-
// If traditional, encode the "old" way (the way 1.3.2 or older
|
8915 |
-
// did it), otherwise encode params recursively.
|
8916 |
-
for (prefix in a) {
|
8917 |
-
buildParams(prefix, a[prefix], traditional, add);
|
8918 |
-
}
|
8919 |
-
} // Return the resulting serialization
|
8920 |
-
|
8921 |
-
|
8922 |
-
return s.join("&");
|
8923 |
-
};
|
8924 |
-
|
8925 |
-
jQuery.fn.extend({
|
8926 |
-
serialize: function serialize() {
|
8927 |
-
return jQuery.param(this.serializeArray());
|
8928 |
-
},
|
8929 |
-
serializeArray: function serializeArray() {
|
8930 |
-
return this.map(function () {
|
8931 |
-
// Can add propHook for "elements" to filter or add form elements
|
8932 |
-
var elements = jQuery.prop(this, "elements");
|
8933 |
-
return elements ? jQuery.makeArray(elements) : this;
|
8934 |
-
}).filter(function () {
|
8935 |
-
var type = this.type; // Use .is( ":disabled" ) so that fieldset[disabled] works
|
8936 |
-
|
8937 |
-
return this.name && !jQuery(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));
|
8938 |
-
}).map(function (_i, elem) {
|
8939 |
-
var val = jQuery(this).val();
|
8940 |
-
|
8941 |
-
if (val == null) {
|
8942 |
-
return null;
|
8943 |
-
}
|
8944 |
-
|
8945 |
-
if (Array.isArray(val)) {
|
8946 |
-
return jQuery.map(val, function (val) {
|
8947 |
-
return {
|
8948 |
-
name: elem.name,
|
8949 |
-
value: val.replace(rCRLF, "\r\n")
|
8950 |
-
};
|
8951 |
-
});
|
8952 |
-
}
|
8953 |
-
|
8954 |
-
return {
|
8955 |
-
name: elem.name,
|
8956 |
-
value: val.replace(rCRLF, "\r\n")
|
8957 |
-
};
|
8958 |
-
}).get();
|
8959 |
-
}
|
8960 |
-
});
|
8961 |
-
var r20 = /%20/g,
|
8962 |
-
rhash = /#.*$/,
|
8963 |
-
rantiCache = /([?&])_=[^&]*/,
|
8964 |
-
rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
|
8965 |
-
// #7653, #8125, #8152: local protocol detection
|
8966 |
-
rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
|
8967 |
-
rnoContent = /^(?:GET|HEAD)$/,
|
8968 |
-
rprotocol = /^\/\//,
|
8969 |
-
|
8970 |
-
/* Prefilters
|
8971 |
-
* 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
|
8972 |
-
* 2) These are called:
|
8973 |
-
* - BEFORE asking for a transport
|
8974 |
-
* - AFTER param serialization (s.data is a string if s.processData is true)
|
8975 |
-
* 3) key is the dataType
|
8976 |
-
* 4) the catchall symbol "*" can be used
|
8977 |
-
* 5) execution will start with transport dataType and THEN continue down to "*" if needed
|
8978 |
-
*/
|
8979 |
-
prefilters = {},
|
8980 |
-
|
8981 |
-
/* Transports bindings
|
8982 |
-
* 1) key is the dataType
|
8983 |
-
* 2) the catchall symbol "*" can be used
|
8984 |
-
* 3) selection will start with transport dataType and THEN go to "*" if needed
|
8985 |
-
*/
|
8986 |
-
transports = {},
|
8987 |
-
// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
|
8988 |
-
allTypes = "*/".concat("*"),
|
8989 |
-
// Anchor tag for parsing the document origin
|
8990 |
-
originAnchor = document.createElement("a");
|
8991 |
-
originAnchor.href = location.href; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
|
8992 |
-
|
8993 |
-
function addToPrefiltersOrTransports(structure) {
|
8994 |
-
// dataTypeExpression is optional and defaults to "*"
|
8995 |
-
return function (dataTypeExpression, func) {
|
8996 |
-
if (typeof dataTypeExpression !== "string") {
|
8997 |
-
func = dataTypeExpression;
|
8998 |
-
dataTypeExpression = "*";
|
8999 |
-
}
|
9000 |
-
|
9001 |
-
var dataType,
|
9002 |
-
i = 0,
|
9003 |
-
dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];
|
9004 |
-
|
9005 |
-
if (isFunction(func)) {
|
9006 |
-
// For each dataType in the dataTypeExpression
|
9007 |
-
while (dataType = dataTypes[i++]) {
|
9008 |
-
// Prepend if requested
|
9009 |
-
if (dataType[0] === "+") {
|
9010 |
-
dataType = dataType.slice(1) || "*";
|
9011 |
-
(structure[dataType] = structure[dataType] || []).unshift(func); // Otherwise append
|
9012 |
-
} else {
|
9013 |
-
(structure[dataType] = structure[dataType] || []).push(func);
|
9014 |
-
}
|
9015 |
-
}
|
9016 |
-
}
|
9017 |
-
};
|
9018 |
-
} // Base inspection function for prefilters and transports
|
9019 |
-
|
9020 |
-
|
9021 |
-
function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {
|
9022 |
-
var inspected = {},
|
9023 |
-
seekingTransport = structure === transports;
|
9024 |
-
|
9025 |
-
function inspect(dataType) {
|
9026 |
-
var selected;
|
9027 |
-
inspected[dataType] = true;
|
9028 |
-
jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {
|
9029 |
-
var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);
|
9030 |
-
|
9031 |
-
if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) {
|
9032 |
-
options.dataTypes.unshift(dataTypeOrTransport);
|
9033 |
-
inspect(dataTypeOrTransport);
|
9034 |
-
return false;
|
9035 |
-
} else if (seekingTransport) {
|
9036 |
-
return !(selected = dataTypeOrTransport);
|
9037 |
-
}
|
9038 |
-
});
|
9039 |
-
return selected;
|
9040 |
-
}
|
9041 |
-
|
9042 |
-
return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*");
|
9043 |
-
} // A special extend for ajax options
|
9044 |
-
// that takes "flat" options (not to be deep extended)
|
9045 |
-
// Fixes #9887
|
9046 |
-
|
9047 |
-
|
9048 |
-
function ajaxExtend(target, src) {
|
9049 |
-
var key,
|
9050 |
-
deep,
|
9051 |
-
flatOptions = jQuery.ajaxSettings.flatOptions || {};
|
9052 |
-
|
9053 |
-
for (key in src) {
|
9054 |
-
if (src[key] !== undefined) {
|
9055 |
-
(flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];
|
9056 |
-
}
|
9057 |
-
}
|
9058 |
-
|
9059 |
-
if (deep) {
|
9060 |
-
jQuery.extend(true, target, deep);
|
9061 |
-
}
|
9062 |
-
|
9063 |
-
return target;
|
9064 |
-
}
|
9065 |
-
/* Handles responses to an ajax request:
|
9066 |
-
* - finds the right dataType (mediates between content-type and expected dataType)
|
9067 |
-
* - returns the corresponding response
|
9068 |
-
*/
|
9069 |
-
|
9070 |
-
|
9071 |
-
function ajaxHandleResponses(s, jqXHR, responses) {
|
9072 |
-
var ct,
|
9073 |
-
type,
|
9074 |
-
finalDataType,
|
9075 |
-
firstDataType,
|
9076 |
-
contents = s.contents,
|
9077 |
-
dataTypes = s.dataTypes; // Remove auto dataType and get content-type in the process
|
9078 |
-
|
9079 |
-
while (dataTypes[0] === "*") {
|
9080 |
-
dataTypes.shift();
|
9081 |
-
|
9082 |
-
if (ct === undefined) {
|
9083 |
-
ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
|
9084 |
-
}
|
9085 |
-
} // Check if we're dealing with a known content-type
|
9086 |
-
|
9087 |
-
|
9088 |
-
if (ct) {
|
9089 |
-
for (type in contents) {
|
9090 |
-
if (contents[type] && contents[type].test(ct)) {
|
9091 |
-
dataTypes.unshift(type);
|
9092 |
-
break;
|
9093 |
-
}
|
9094 |
-
}
|
9095 |
-
} // Check to see if we have a response for the expected dataType
|
9096 |
-
|
9097 |
-
|
9098 |
-
if (dataTypes[0] in responses) {
|
9099 |
-
finalDataType = dataTypes[0];
|
9100 |
-
} else {
|
9101 |
-
// Try convertible dataTypes
|
9102 |
-
for (type in responses) {
|
9103 |
-
if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) {
|
9104 |
-
finalDataType = type;
|
9105 |
-
break;
|
9106 |
-
}
|
9107 |
-
|
9108 |
-
if (!firstDataType) {
|
9109 |
-
firstDataType = type;
|
9110 |
-
}
|
9111 |
-
} // Or just use first one
|
9112 |
-
|
9113 |
-
|
9114 |
-
finalDataType = finalDataType || firstDataType;
|
9115 |
-
} // If we found a dataType
|
9116 |
-
// We add the dataType to the list if needed
|
9117 |
-
// and return the corresponding response
|
9118 |
-
|
9119 |
-
|
9120 |
-
if (finalDataType) {
|
9121 |
-
if (finalDataType !== dataTypes[0]) {
|
9122 |
-
dataTypes.unshift(finalDataType);
|
9123 |
-
}
|
9124 |
-
|
9125 |
-
return responses[finalDataType];
|
9126 |
-
}
|
9127 |
-
}
|
9128 |
-
/* Chain conversions given the request and the original response
|
9129 |
-
* Also sets the responseXXX fields on the jqXHR instance
|
9130 |
-
*/
|
9131 |
-
|
9132 |
-
|
9133 |
-
function ajaxConvert(s, response, jqXHR, isSuccess) {
|
9134 |
-
var conv2,
|
9135 |
-
current,
|
9136 |
-
conv,
|
9137 |
-
tmp,
|
9138 |
-
prev,
|
9139 |
-
converters = {},
|
9140 |
-
// Work with a copy of dataTypes in case we need to modify it for conversion
|
9141 |
-
dataTypes = s.dataTypes.slice(); // Create converters map with lowercased keys
|
9142 |
-
|
9143 |
-
if (dataTypes[1]) {
|
9144 |
-
for (conv in s.converters) {
|
9145 |
-
converters[conv.toLowerCase()] = s.converters[conv];
|
9146 |
-
}
|
9147 |
-
}
|
9148 |
-
|
9149 |
-
current = dataTypes.shift(); // Convert to each sequential dataType
|
9150 |
-
|
9151 |
-
while (current) {
|
9152 |
-
if (s.responseFields[current]) {
|
9153 |
-
jqXHR[s.responseFields[current]] = response;
|
9154 |
-
} // Apply the dataFilter if provided
|
9155 |
-
|
9156 |
-
|
9157 |
-
if (!prev && isSuccess && s.dataFilter) {
|
9158 |
-
response = s.dataFilter(response, s.dataType);
|
9159 |
-
}
|
9160 |
-
|
9161 |
-
prev = current;
|
9162 |
-
current = dataTypes.shift();
|
9163 |
-
|
9164 |
-
if (current) {
|
9165 |
-
// There's only work to do if current dataType is non-auto
|
9166 |
-
if (current === "*") {
|
9167 |
-
current = prev; // Convert response if prev dataType is non-auto and differs from current
|
9168 |
-
} else if (prev !== "*" && prev !== current) {
|
9169 |
-
// Seek a direct converter
|
9170 |
-
conv = converters[prev + " " + current] || converters["* " + current]; // If none found, seek a pair
|
9171 |
-
|
9172 |
-
if (!conv) {
|
9173 |
-
for (conv2 in converters) {
|
9174 |
-
// If conv2 outputs current
|
9175 |
-
tmp = conv2.split(" ");
|
9176 |
-
|
9177 |
-
if (tmp[1] === current) {
|
9178 |
-
// If prev can be converted to accepted input
|
9179 |
-
conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]];
|
9180 |
-
|
9181 |
-
if (conv) {
|
9182 |
-
// Condense equivalence converters
|
9183 |
-
if (conv === true) {
|
9184 |
-
conv = converters[conv2]; // Otherwise, insert the intermediate dataType
|
9185 |
-
} else if (converters[conv2] !== true) {
|
9186 |
-
current = tmp[0];
|
9187 |
-
dataTypes.unshift(tmp[1]);
|
9188 |
-
}
|
9189 |
-
|
9190 |
-
break;
|
9191 |
-
}
|
9192 |
-
}
|
9193 |
-
}
|
9194 |
-
} // Apply converter (if not an equivalence)
|
9195 |
-
|
9196 |
-
|
9197 |
-
if (conv !== true) {
|
9198 |
-
// Unless errors are allowed to bubble, catch and return them
|
9199 |
-
if (conv && s["throws"]) {
|
9200 |
-
response = conv(response);
|
9201 |
-
} else {
|
9202 |
-
try {
|
9203 |
-
response = conv(response);
|
9204 |
-
} catch (e) {
|
9205 |
-
return {
|
9206 |
-
state: "parsererror",
|
9207 |
-
error: conv ? e : "No conversion from " + prev + " to " + current
|
9208 |
-
};
|
9209 |
-
}
|
9210 |
-
}
|
9211 |
-
}
|
9212 |
-
}
|
9213 |
-
}
|
9214 |
-
}
|
9215 |
-
|
9216 |
-
return {
|
9217 |
-
state: "success",
|
9218 |
-
data: response
|
9219 |
-
};
|
9220 |
-
}
|
9221 |
-
|
9222 |
-
jQuery.extend({
|
9223 |
-
// Counter for holding the number of active queries
|
9224 |
-
active: 0,
|
9225 |
-
// Last-Modified header cache for next request
|
9226 |
-
lastModified: {},
|
9227 |
-
etag: {},
|
9228 |
-
ajaxSettings: {
|
9229 |
-
url: location.href,
|
9230 |
-
type: "GET",
|
9231 |
-
isLocal: rlocalProtocol.test(location.protocol),
|
9232 |
-
global: true,
|
9233 |
-
processData: true,
|
9234 |
-
async: true,
|
9235 |
-
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
|
9236 |
-
|
9237 |
-
/*
|
9238 |
-
timeout: 0,
|
9239 |
-
data: null,
|
9240 |
-
dataType: null,
|
9241 |
-
username: null,
|
9242 |
-
password: null,
|
9243 |
-
cache: null,
|
9244 |
-
throws: false,
|
9245 |
-
traditional: false,
|
9246 |
-
headers: {},
|
9247 |
-
*/
|
9248 |
-
accepts: {
|
9249 |
-
"*": allTypes,
|
9250 |
-
text: "text/plain",
|
9251 |
-
html: "text/html",
|
9252 |
-
xml: "application/xml, text/xml",
|
9253 |
-
json: "application/json, text/javascript"
|
9254 |
-
},
|
9255 |
-
contents: {
|
9256 |
-
xml: /\bxml\b/,
|
9257 |
-
html: /\bhtml/,
|
9258 |
-
json: /\bjson\b/
|
9259 |
-
},
|
9260 |
-
responseFields: {
|
9261 |
-
xml: "responseXML",
|
9262 |
-
text: "responseText",
|
9263 |
-
json: "responseJSON"
|
9264 |
-
},
|
9265 |
-
// Data converters
|
9266 |
-
// Keys separate source (or catchall "*") and destination types with a single space
|
9267 |
-
converters: {
|
9268 |
-
// Convert anything to text
|
9269 |
-
"* text": String,
|
9270 |
-
// Text to html (true = no transformation)
|
9271 |
-
"text html": true,
|
9272 |
-
// Evaluate text as a json expression
|
9273 |
-
"text json": JSON.parse,
|
9274 |
-
// Parse text as xml
|
9275 |
-
"text xml": jQuery.parseXML
|
9276 |
-
},
|
9277 |
-
// For options that shouldn't be deep extended:
|
9278 |
-
// you can add your own custom options here if
|
9279 |
-
// and when you create one that shouldn't be
|
9280 |
-
// deep extended (see ajaxExtend)
|
9281 |
-
flatOptions: {
|
9282 |
-
url: true,
|
9283 |
-
context: true
|
9284 |
-
}
|
9285 |
-
},
|
9286 |
-
// Creates a full fledged settings object into target
|
9287 |
-
// with both ajaxSettings and settings fields.
|
9288 |
-
// If target is omitted, writes into ajaxSettings.
|
9289 |
-
ajaxSetup: function ajaxSetup(target, settings) {
|
9290 |
-
return settings ? // Building a settings object
|
9291 |
-
ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : // Extending ajaxSettings
|
9292 |
-
ajaxExtend(jQuery.ajaxSettings, target);
|
9293 |
-
},
|
9294 |
-
ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
|
9295 |
-
ajaxTransport: addToPrefiltersOrTransports(transports),
|
9296 |
-
// Main method
|
9297 |
-
ajax: function ajax(url, options) {
|
9298 |
-
// If url is an object, simulate pre-1.5 signature
|
9299 |
-
if (_typeof(url) === "object") {
|
9300 |
-
options = url;
|
9301 |
-
url = undefined;
|
9302 |
-
} // Force options to be an object
|
9303 |
-
|
9304 |
-
|
9305 |
-
options = options || {};
|
9306 |
-
|
9307 |
-
var transport,
|
9308 |
-
// URL without anti-cache param
|
9309 |
-
cacheURL,
|
9310 |
-
// Response headers
|
9311 |
-
responseHeadersString,
|
9312 |
-
responseHeaders,
|
9313 |
-
// timeout handle
|
9314 |
-
timeoutTimer,
|
9315 |
-
// Url cleanup var
|
9316 |
-
urlAnchor,
|
9317 |
-
// Request state (becomes false upon send and true upon completion)
|
9318 |
-
completed,
|
9319 |
-
// To know if global events are to be dispatched
|
9320 |
-
fireGlobals,
|
9321 |
-
// Loop variable
|
9322 |
-
i,
|
9323 |
-
// uncached part of the url
|
9324 |
-
uncached,
|
9325 |
-
// Create the final options object
|
9326 |
-
s = jQuery.ajaxSetup({}, options),
|
9327 |
-
// Callbacks context
|
9328 |
-
callbackContext = s.context || s,
|
9329 |
-
// Context for global events is callbackContext if it is a DOM node or jQuery collection
|
9330 |
-
globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,
|
9331 |
-
// Deferreds
|
9332 |
-
deferred = jQuery.Deferred(),
|
9333 |
-
completeDeferred = jQuery.Callbacks("once memory"),
|
9334 |
-
// Status-dependent callbacks
|
9335 |
-
_statusCode = s.statusCode || {},
|
9336 |
-
// Headers (they are sent all at once)
|
9337 |
-
requestHeaders = {},
|
9338 |
-
requestHeadersNames = {},
|
9339 |
-
// Default abort message
|
9340 |
-
strAbort = "canceled",
|
9341 |
-
// Fake xhr
|
9342 |
-
jqXHR = {
|
9343 |
-
readyState: 0,
|
9344 |
-
// Builds headers hashtable if needed
|
9345 |
-
getResponseHeader: function getResponseHeader(key) {
|
9346 |
-
var match;
|
9347 |
-
|
9348 |
-
if (completed) {
|
9349 |
-
if (!responseHeaders) {
|
9350 |
-
responseHeaders = {};
|
9351 |
-
|
9352 |
-
while (match = rheaders.exec(responseHeadersString)) {
|
9353 |
-
responseHeaders[match[1].toLowerCase() + " "] = (responseHeaders[match[1].toLowerCase() + " "] || []).concat(match[2]);
|
9354 |
-
}
|
9355 |
-
}
|
9356 |
-
|
9357 |
-
match = responseHeaders[key.toLowerCase() + " "];
|
9358 |
-
}
|
9359 |
-
|
9360 |
-
return match == null ? null : match.join(", ");
|
9361 |
-
},
|
9362 |
-
// Raw string
|
9363 |
-
getAllResponseHeaders: function getAllResponseHeaders() {
|
9364 |
-
return completed ? responseHeadersString : null;
|
9365 |
-
},
|
9366 |
-
// Caches the header
|
9367 |
-
setRequestHeader: function setRequestHeader(name, value) {
|
9368 |
-
if (completed == null) {
|
9369 |
-
name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;
|
9370 |
-
requestHeaders[name] = value;
|
9371 |
-
}
|
9372 |
-
|
9373 |
-
return this;
|
9374 |
-
},
|
9375 |
-
// Overrides response content-type header
|
9376 |
-
overrideMimeType: function overrideMimeType(type) {
|
9377 |
-
if (completed == null) {
|
9378 |
-
s.mimeType = type;
|
9379 |
-
}
|
9380 |
-
|
9381 |
-
return this;
|
9382 |
-
},
|
9383 |
-
// Status-dependent callbacks
|
9384 |
-
statusCode: function statusCode(map) {
|
9385 |
-
var code;
|
9386 |
-
|
9387 |
-
if (map) {
|
9388 |
-
if (completed) {
|
9389 |
-
// Execute the appropriate callbacks
|
9390 |
-
jqXHR.always(map[jqXHR.status]);
|
9391 |
-
} else {
|
9392 |
-
// Lazy-add the new callbacks in a way that preserves old ones
|
9393 |
-
for (code in map) {
|
9394 |
-
_statusCode[code] = [_statusCode[code], map[code]];
|
9395 |
-
}
|
9396 |
-
}
|
9397 |
-
}
|
9398 |
-
|
9399 |
-
return this;
|
9400 |
-
},
|
9401 |
-
// Cancel the request
|
9402 |
-
abort: function abort(statusText) {
|
9403 |
-
var finalText = statusText || strAbort;
|
9404 |
-
|
9405 |
-
if (transport) {
|
9406 |
-
transport.abort(finalText);
|
9407 |
-
}
|
9408 |
-
|
9409 |
-
done(0, finalText);
|
9410 |
-
return this;
|
9411 |
-
}
|
9412 |
-
}; // Attach deferreds
|
9413 |
-
|
9414 |
-
|
9415 |
-
deferred.promise(jqXHR); // Add protocol if not provided (prefilters might expect it)
|
9416 |
-
// Handle falsy url in the settings object (#10093: consistency with old signature)
|
9417 |
-
// We also use the url parameter if available
|
9418 |
-
|
9419 |
-
s.url = ((url || s.url || location.href) + "").replace(rprotocol, location.protocol + "//"); // Alias method option to type as per ticket #12004
|
9420 |
-
|
9421 |
-
s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list
|
9422 |
-
|
9423 |
-
s.dataTypes = (s.dataType || "*").toLowerCase().match(rnothtmlwhite) || [""]; // A cross-domain request is in order when the origin doesn't match the current origin.
|
9424 |
-
|
9425 |
-
if (s.crossDomain == null) {
|
9426 |
-
urlAnchor = document.createElement("a"); // Support: IE <=8 - 11, Edge 12 - 15
|
9427 |
-
// IE throws exception on accessing the href property if url is malformed,
|
9428 |
-
// e.g. http://example.com:80x/
|
9429 |
-
|
9430 |
-
try {
|
9431 |
-
urlAnchor.href = s.url; // Support: IE <=8 - 11 only
|
9432 |
-
// Anchor's host property isn't correctly set when s.url is relative
|
9433 |
-
|
9434 |
-
urlAnchor.href = urlAnchor.href;
|
9435 |
-
s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host;
|
9436 |
-
} catch (e) {
|
9437 |
-
// If there is an error parsing the URL, assume it is crossDomain,
|
9438 |
-
// it can be rejected by the transport if it is invalid
|
9439 |
-
s.crossDomain = true;
|
9440 |
-
}
|
9441 |
-
} // Convert data if not already a string
|
9442 |
-
|
9443 |
-
|
9444 |
-
if (s.data && s.processData && typeof s.data !== "string") {
|
9445 |
-
s.data = jQuery.param(s.data, s.traditional);
|
9446 |
-
} // Apply prefilters
|
9447 |
-
|
9448 |
-
|
9449 |
-
inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); // If request was aborted inside a prefilter, stop there
|
9450 |
-
|
9451 |
-
if (completed) {
|
9452 |
-
return jqXHR;
|
9453 |
-
} // We can fire global events as of now if asked to
|
9454 |
-
// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
|
9455 |
-
|
9456 |
-
|
9457 |
-
fireGlobals = jQuery.event && s.global; // Watch for a new set of requests
|
9458 |
-
|
9459 |
-
if (fireGlobals && jQuery.active++ === 0) {
|
9460 |
-
jQuery.event.trigger("ajaxStart");
|
9461 |
-
} // Uppercase the type
|
9462 |
-
|
9463 |
-
|
9464 |
-
s.type = s.type.toUpperCase(); // Determine if request has content
|
9465 |
-
|
9466 |
-
s.hasContent = !rnoContent.test(s.type); // Save the URL in case we're toying with the If-Modified-Since
|
9467 |
-
// and/or If-None-Match header later on
|
9468 |
-
// Remove hash to simplify url manipulation
|
9469 |
-
|
9470 |
-
cacheURL = s.url.replace(rhash, ""); // More options handling for requests with no content
|
9471 |
-
|
9472 |
-
if (!s.hasContent) {
|
9473 |
-
// Remember the hash so we can put it back
|
9474 |
-
uncached = s.url.slice(cacheURL.length); // If data is available and should be processed, append data to url
|
9475 |
-
|
9476 |
-
if (s.data && (s.processData || typeof s.data === "string")) {
|
9477 |
-
cacheURL += (rquery.test(cacheURL) ? "&" : "?") + s.data; // #9682: remove data so that it's not used in an eventual retry
|
9478 |
-
|
9479 |
-
delete s.data;
|
9480 |
-
} // Add or update anti-cache param if needed
|
9481 |
-
|
9482 |
-
|
9483 |
-
if (s.cache === false) {
|
9484 |
-
cacheURL = cacheURL.replace(rantiCache, "$1");
|
9485 |
-
uncached = (rquery.test(cacheURL) ? "&" : "?") + "_=" + nonce.guid++ + uncached;
|
9486 |
-
} // Put hash and anti-cache on the URL that will be requested (gh-1732)
|
9487 |
-
|
9488 |
-
|
9489 |
-
s.url = cacheURL + uncached; // Change '%20' to '+' if this is encoded form body content (gh-2658)
|
9490 |
-
} else if (s.data && s.processData && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0) {
|
9491 |
-
s.data = s.data.replace(r20, "+");
|
9492 |
-
} // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
|
9493 |
-
|
9494 |
-
|
9495 |
-
if (s.ifModified) {
|
9496 |
-
if (jQuery.lastModified[cacheURL]) {
|
9497 |
-
jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]);
|
9498 |
-
}
|
9499 |
-
|
9500 |
-
if (jQuery.etag[cacheURL]) {
|
9501 |
-
jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]);
|
9502 |
-
}
|
9503 |
-
} // Set the correct header, if data is being sent
|
9504 |
-
|
9505 |
-
|
9506 |
-
if (s.data && s.hasContent && s.contentType !== false || options.contentType) {
|
9507 |
-
jqXHR.setRequestHeader("Content-Type", s.contentType);
|
9508 |
-
} // Set the Accepts header for the server, depending on the dataType
|
9509 |
-
|
9510 |
-
|
9511 |
-
jqXHR.setRequestHeader("Accept", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : s.accepts["*"]); // Check for headers option
|
9512 |
-
|
9513 |
-
for (i in s.headers) {
|
9514 |
-
jqXHR.setRequestHeader(i, s.headers[i]);
|
9515 |
-
} // Allow custom headers/mimetypes and early abort
|
9516 |
-
|
9517 |
-
|
9518 |
-
if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {
|
9519 |
-
// Abort if not done already and return
|
9520 |
-
return jqXHR.abort();
|
9521 |
-
} // Aborting is no longer a cancellation
|
9522 |
-
|
9523 |
-
|
9524 |
-
strAbort = "abort"; // Install callbacks on deferreds
|
9525 |
-
|
9526 |
-
completeDeferred.add(s.complete);
|
9527 |
-
jqXHR.done(s.success);
|
9528 |
-
jqXHR.fail(s.error); // Get transport
|
9529 |
-
|
9530 |
-
transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); // If no transport, we auto-abort
|
9531 |
-
|
9532 |
-
if (!transport) {
|
9533 |
-
done(-1, "No Transport");
|
9534 |
-
} else {
|
9535 |
-
jqXHR.readyState = 1; // Send global event
|
9536 |
-
|
9537 |
-
if (fireGlobals) {
|
9538 |
-
globalEventContext.trigger("ajaxSend", [jqXHR, s]);
|
9539 |
-
} // If request was aborted inside ajaxSend, stop there
|
9540 |
-
|
9541 |
-
|
9542 |
-
if (completed) {
|
9543 |
-
return jqXHR;
|
9544 |
-
} // Timeout
|
9545 |
-
|
9546 |
-
|
9547 |
-
if (s.async && s.timeout > 0) {
|
9548 |
-
timeoutTimer = window.setTimeout(function () {
|
9549 |
-
jqXHR.abort("timeout");
|
9550 |
-
}, s.timeout);
|
9551 |
-
}
|
9552 |
-
|
9553 |
-
try {
|
9554 |
-
completed = false;
|
9555 |
-
transport.send(requestHeaders, done);
|
9556 |
-
} catch (e) {
|
9557 |
-
// Rethrow post-completion exceptions
|
9558 |
-
if (completed) {
|
9559 |
-
throw e;
|
9560 |
-
} // Propagate others as results
|
9561 |
-
|
9562 |
-
|
9563 |
-
done(-1, e);
|
9564 |
-
}
|
9565 |
-
} // Callback for when everything is done
|
9566 |
-
|
9567 |
-
|
9568 |
-
function done(status, nativeStatusText, responses, headers) {
|
9569 |
-
var isSuccess,
|
9570 |
-
success,
|
9571 |
-
error,
|
9572 |
-
response,
|
9573 |
-
modified,
|
9574 |
-
statusText = nativeStatusText; // Ignore repeat invocations
|
9575 |
-
|
9576 |
-
if (completed) {
|
9577 |
-
return;
|
9578 |
-
}
|
9579 |
-
|
9580 |
-
completed = true; // Clear timeout if it exists
|
9581 |
-
|
9582 |
-
if (timeoutTimer) {
|
9583 |
-
window.clearTimeout(timeoutTimer);
|
9584 |
-
} // Dereference transport for early garbage collection
|
9585 |
-
// (no matter how long the jqXHR object will be used)
|
9586 |
-
|
9587 |
-
|
9588 |
-
transport = undefined; // Cache response headers
|
9589 |
-
|
9590 |
-
responseHeadersString = headers || ""; // Set readyState
|
9591 |
-
|
9592 |
-
jqXHR.readyState = status > 0 ? 4 : 0; // Determine if successful
|
9593 |
-
|
9594 |
-
isSuccess = status >= 200 && status < 300 || status === 304; // Get response data
|
9595 |
-
|
9596 |
-
if (responses) {
|
9597 |
-
response = ajaxHandleResponses(s, jqXHR, responses);
|
9598 |
-
} // Use a noop converter for missing script
|
9599 |
-
|
9600 |
-
|
9601 |
-
if (!isSuccess && jQuery.inArray("script", s.dataTypes) > -1) {
|
9602 |
-
s.converters["text script"] = function () {};
|
9603 |
-
} // Convert no matter what (that way responseXXX fields are always set)
|
9604 |
-
|
9605 |
-
|
9606 |
-
response = ajaxConvert(s, response, jqXHR, isSuccess); // If successful, handle type chaining
|
9607 |
-
|
9608 |
-
if (isSuccess) {
|
9609 |
-
// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
|
9610 |
-
if (s.ifModified) {
|
9611 |
-
modified = jqXHR.getResponseHeader("Last-Modified");
|
9612 |
-
|
9613 |
-
if (modified) {
|
9614 |
-
jQuery.lastModified[cacheURL] = modified;
|
9615 |
-
}
|
9616 |
-
|
9617 |
-
modified = jqXHR.getResponseHeader("etag");
|
9618 |
-
|
9619 |
-
if (modified) {
|
9620 |
-
jQuery.etag[cacheURL] = modified;
|
9621 |
-
}
|
9622 |
-
} // if no content
|
9623 |
-
|
9624 |
-
|
9625 |
-
if (status === 204 || s.type === "HEAD") {
|
9626 |
-
statusText = "nocontent"; // if not modified
|
9627 |
-
} else if (status === 304) {
|
9628 |
-
statusText = "notmodified"; // If we have data, let's convert it
|
9629 |
-
} else {
|
9630 |
-
statusText = response.state;
|
9631 |
-
success = response.data;
|
9632 |
-
error = response.error;
|
9633 |
-
isSuccess = !error;
|
9634 |
-
}
|
9635 |
-
} else {
|
9636 |
-
// Extract error from statusText and normalize for non-aborts
|
9637 |
-
error = statusText;
|
9638 |
-
|
9639 |
-
if (status || !statusText) {
|
9640 |
-
statusText = "error";
|
9641 |
-
|
9642 |
-
if (status < 0) {
|
9643 |
-
status = 0;
|
9644 |
-
}
|
9645 |
-
}
|
9646 |
-
} // Set data for the fake xhr object
|
9647 |
-
|
9648 |
-
|
9649 |
-
jqXHR.status = status;
|
9650 |
-
jqXHR.statusText = (nativeStatusText || statusText) + ""; // Success/Error
|
9651 |
-
|
9652 |
-
if (isSuccess) {
|
9653 |
-
deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);
|
9654 |
-
} else {
|
9655 |
-
deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);
|
9656 |
-
} // Status-dependent callbacks
|
9657 |
-
|
9658 |
-
|
9659 |
-
jqXHR.statusCode(_statusCode);
|
9660 |
-
_statusCode = undefined;
|
9661 |
-
|
9662 |
-
if (fireGlobals) {
|
9663 |
-
globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError", [jqXHR, s, isSuccess ? success : error]);
|
9664 |
-
} // Complete
|
9665 |
-
|
9666 |
-
|
9667 |
-
completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);
|
9668 |
-
|
9669 |
-
if (fireGlobals) {
|
9670 |
-
globalEventContext.trigger("ajaxComplete", [jqXHR, s]); // Handle the global AJAX counter
|
9671 |
-
|
9672 |
-
if (! --jQuery.active) {
|
9673 |
-
jQuery.event.trigger("ajaxStop");
|
9674 |
-
}
|
9675 |
-
}
|
9676 |
-
}
|
9677 |
-
|
9678 |
-
return jqXHR;
|
9679 |
-
},
|
9680 |
-
getJSON: function getJSON(url, data, callback) {
|
9681 |
-
return jQuery.get(url, data, callback, "json");
|
9682 |
-
},
|
9683 |
-
getScript: function getScript(url, callback) {
|
9684 |
-
return jQuery.get(url, undefined, callback, "script");
|
9685 |
-
}
|
9686 |
-
});
|
9687 |
-
jQuery.each(["get", "post"], function (_i, method) {
|
9688 |
-
jQuery[method] = function (url, data, callback, type) {
|
9689 |
-
// Shift arguments if data argument was omitted
|
9690 |
-
if (isFunction(data)) {
|
9691 |
-
type = type || callback;
|
9692 |
-
callback = data;
|
9693 |
-
data = undefined;
|
9694 |
-
} // The url can be an options object (which then must have .url)
|
9695 |
-
|
9696 |
-
|
9697 |
-
return jQuery.ajax(jQuery.extend({
|
9698 |
-
url: url,
|
9699 |
-
type: method,
|
9700 |
-
dataType: type,
|
9701 |
-
data: data,
|
9702 |
-
success: callback
|
9703 |
-
}, jQuery.isPlainObject(url) && url));
|
9704 |
-
};
|
9705 |
-
});
|
9706 |
-
jQuery.ajaxPrefilter(function (s) {
|
9707 |
-
var i;
|
9708 |
-
|
9709 |
-
for (i in s.headers) {
|
9710 |
-
if (i.toLowerCase() === "content-type") {
|
9711 |
-
s.contentType = s.headers[i] || "";
|
9712 |
-
}
|
9713 |
-
}
|
9714 |
-
});
|
9715 |
-
|
9716 |
-
jQuery._evalUrl = function (url, options, doc) {
|
9717 |
-
return jQuery.ajax({
|
9718 |
-
url: url,
|
9719 |
-
// Make this explicit, since user can override this through ajaxSetup (#11264)
|
9720 |
-
type: "GET",
|
9721 |
-
dataType: "script",
|
9722 |
-
cache: true,
|
9723 |
-
async: false,
|
9724 |
-
global: false,
|
9725 |
-
// Only evaluate the response if it is successful (gh-4126)
|
9726 |
-
// dataFilter is not invoked for failure responses, so using it instead
|
9727 |
-
// of the default converter is kludgy but it works.
|
9728 |
-
converters: {
|
9729 |
-
"text script": function textScript() {}
|
9730 |
-
},
|
9731 |
-
dataFilter: function dataFilter(response) {
|
9732 |
-
jQuery.globalEval(response, options, doc);
|
9733 |
-
}
|
9734 |
-
});
|
9735 |
-
};
|
9736 |
-
|
9737 |
-
jQuery.fn.extend({
|
9738 |
-
wrapAll: function wrapAll(html) {
|
9739 |
-
var wrap;
|
9740 |
-
|
9741 |
-
if (this[0]) {
|
9742 |
-
if (isFunction(html)) {
|
9743 |
-
html = html.call(this[0]);
|
9744 |
-
} // The elements to wrap the target around
|
9745 |
-
|
9746 |
-
|
9747 |
-
wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);
|
9748 |
-
|
9749 |
-
if (this[0].parentNode) {
|
9750 |
-
wrap.insertBefore(this[0]);
|
9751 |
-
}
|
9752 |
-
|
9753 |
-
wrap.map(function () {
|
9754 |
-
var elem = this;
|
9755 |
-
|
9756 |
-
while (elem.firstElementChild) {
|
9757 |
-
elem = elem.firstElementChild;
|
9758 |
-
}
|
9759 |
-
|
9760 |
-
return elem;
|
9761 |
-
}).append(this);
|
9762 |
-
}
|
9763 |
-
|
9764 |
-
return this;
|
9765 |
-
},
|
9766 |
-
wrapInner: function wrapInner(html) {
|
9767 |
-
if (isFunction(html)) {
|
9768 |
-
return this.each(function (i) {
|
9769 |
-
jQuery(this).wrapInner(html.call(this, i));
|
9770 |
-
});
|
9771 |
-
}
|
9772 |
-
|
9773 |
-
return this.each(function () {
|
9774 |
-
var self = jQuery(this),
|
9775 |
-
contents = self.contents();
|
9776 |
-
|
9777 |
-
if (contents.length) {
|
9778 |
-
contents.wrapAll(html);
|
9779 |
-
} else {
|
9780 |
-
self.append(html);
|
9781 |
-
}
|
9782 |
-
});
|
9783 |
-
},
|
9784 |
-
wrap: function wrap(html) {
|
9785 |
-
var htmlIsFunction = isFunction(html);
|
9786 |
-
return this.each(function (i) {
|
9787 |
-
jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);
|
9788 |
-
});
|
9789 |
-
},
|
9790 |
-
unwrap: function unwrap(selector) {
|
9791 |
-
this.parent(selector).not("body").each(function () {
|
9792 |
-
jQuery(this).replaceWith(this.childNodes);
|
9793 |
-
});
|
9794 |
-
return this;
|
9795 |
-
}
|
9796 |
-
});
|
9797 |
-
|
9798 |
-
jQuery.expr.pseudos.hidden = function (elem) {
|
9799 |
-
return !jQuery.expr.pseudos.visible(elem);
|
9800 |
-
};
|
9801 |
-
|
9802 |
-
jQuery.expr.pseudos.visible = function (elem) {
|
9803 |
-
return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
|
9804 |
-
};
|
9805 |
-
|
9806 |
-
jQuery.ajaxSettings.xhr = function () {
|
9807 |
-
try {
|
9808 |
-
return new window.XMLHttpRequest();
|
9809 |
-
} catch (e) {}
|
9810 |
-
};
|
9811 |
-
|
9812 |
-
var xhrSuccessStatus = {
|
9813 |
-
// File protocol always yields status code 0, assume 200
|
9814 |
-
0: 200,
|
9815 |
-
// Support: IE <=9 only
|
9816 |
-
// #1450: sometimes IE returns 1223 when it should be 204
|
9817 |
-
1223: 204
|
9818 |
-
},
|
9819 |
-
xhrSupported = jQuery.ajaxSettings.xhr();
|
9820 |
-
support.cors = !!xhrSupported && "withCredentials" in xhrSupported;
|
9821 |
-
support.ajax = xhrSupported = !!xhrSupported;
|
9822 |
-
jQuery.ajaxTransport(function (options) {
|
9823 |
-
var _callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest
|
9824 |
-
|
9825 |
-
|
9826 |
-
if (support.cors || xhrSupported && !options.crossDomain) {
|
9827 |
-
return {
|
9828 |
-
send: function send(headers, complete) {
|
9829 |
-
var i,
|
9830 |
-
xhr = options.xhr();
|
9831 |
-
xhr.open(options.type, options.url, options.async, options.username, options.password); // Apply custom fields if provided
|
9832 |
-
|
9833 |
-
if (options.xhrFields) {
|
9834 |
-
for (i in options.xhrFields) {
|
9835 |
-
xhr[i] = options.xhrFields[i];
|
9836 |
-
}
|
9837 |
-
} // Override mime type if needed
|
9838 |
-
|
9839 |
-
|
9840 |
-
if (options.mimeType && xhr.overrideMimeType) {
|
9841 |
-
xhr.overrideMimeType(options.mimeType);
|
9842 |
-
} // X-Requested-With header
|
9843 |
-
// For cross-domain requests, seeing as conditions for a preflight are
|
9844 |
-
// akin to a jigsaw puzzle, we simply never set it to be sure.
|
9845 |
-
// (it can always be set on a per-request basis or even using ajaxSetup)
|
9846 |
-
// For same-domain requests, won't change header if already provided.
|
9847 |
-
|
9848 |
-
|
9849 |
-
if (!options.crossDomain && !headers["X-Requested-With"]) {
|
9850 |
-
headers["X-Requested-With"] = "XMLHttpRequest";
|
9851 |
-
} // Set headers
|
9852 |
-
|
9853 |
-
|
9854 |
-
for (i in headers) {
|
9855 |
-
xhr.setRequestHeader(i, headers[i]);
|
9856 |
-
} // Callback
|
9857 |
-
|
9858 |
-
|
9859 |
-
_callback = function callback(type) {
|
9860 |
-
return function () {
|
9861 |
-
if (_callback) {
|
9862 |
-
_callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;
|
9863 |
-
|
9864 |
-
if (type === "abort") {
|
9865 |
-
xhr.abort();
|
9866 |
-
} else if (type === "error") {
|
9867 |
-
// Support: IE <=9 only
|
9868 |
-
// On a manual native abort, IE9 throws
|
9869 |
-
// errors on any property access that is not readyState
|
9870 |
-
if (typeof xhr.status !== "number") {
|
9871 |
-
complete(0, "error");
|
9872 |
-
} else {
|
9873 |
-
complete( // File: protocol always yields status 0; see #8605, #14207
|
9874 |
-
xhr.status, xhr.statusText);
|
9875 |
-
}
|
9876 |
-
} else {
|
9877 |
-
complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, // Support: IE <=9 only
|
9878 |
-
// IE9 has no XHR2 but throws on binary (trac-11426)
|
9879 |
-
// For XHR2 non-text, let the caller handle it (gh-2498)
|
9880 |
-
(xhr.responseType || "text") !== "text" || typeof xhr.responseText !== "string" ? {
|
9881 |
-
binary: xhr.response
|
9882 |
-
} : {
|
9883 |
-
text: xhr.responseText
|
9884 |
-
}, xhr.getAllResponseHeaders());
|
9885 |
-
}
|
9886 |
-
}
|
9887 |
-
};
|
9888 |
-
}; // Listen to events
|
9889 |
-
|
9890 |
-
|
9891 |
-
xhr.onload = _callback();
|
9892 |
-
errorCallback = xhr.onerror = xhr.ontimeout = _callback("error"); // Support: IE 9 only
|
9893 |
-
// Use onreadystatechange to replace onabort
|
9894 |
-
// to handle uncaught aborts
|
9895 |
-
|
9896 |
-
if (xhr.onabort !== undefined) {
|
9897 |
-
xhr.onabort = errorCallback;
|
9898 |
-
} else {
|
9899 |
-
xhr.onreadystatechange = function () {
|
9900 |
-
// Check readyState before timeout as it changes
|
9901 |
-
if (xhr.readyState === 4) {
|
9902 |
-
// Allow onerror to be called first,
|
9903 |
-
// but that will not handle a native abort
|
9904 |
-
// Also, save errorCallback to a variable
|
9905 |
-
// as xhr.onerror cannot be accessed
|
9906 |
-
window.setTimeout(function () {
|
9907 |
-
if (_callback) {
|
9908 |
-
errorCallback();
|
9909 |
-
}
|
9910 |
-
});
|
9911 |
-
}
|
9912 |
-
};
|
9913 |
-
} // Create the abort callback
|
9914 |
-
|
9915 |
-
|
9916 |
-
_callback = _callback("abort");
|
9917 |
-
|
9918 |
-
try {
|
9919 |
-
// Do send the request (this may raise an exception)
|
9920 |
-
xhr.send(options.hasContent && options.data || null);
|
9921 |
-
} catch (e) {
|
9922 |
-
// #14683: Only rethrow if this hasn't been notified as an error yet
|
9923 |
-
if (_callback) {
|
9924 |
-
throw e;
|
9925 |
-
}
|
9926 |
-
}
|
9927 |
-
},
|
9928 |
-
abort: function abort() {
|
9929 |
-
if (_callback) {
|
9930 |
-
_callback();
|
9931 |
-
}
|
9932 |
-
}
|
9933 |
-
};
|
9934 |
-
}
|
9935 |
-
}); // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
|
9936 |
-
|
9937 |
-
jQuery.ajaxPrefilter(function (s) {
|
9938 |
-
if (s.crossDomain) {
|
9939 |
-
s.contents.script = false;
|
9940 |
-
}
|
9941 |
-
}); // Install script dataType
|
9942 |
-
|
9943 |
-
jQuery.ajaxSetup({
|
9944 |
-
accepts: {
|
9945 |
-
script: "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript"
|
9946 |
-
},
|
9947 |
-
contents: {
|
9948 |
-
script: /\b(?:java|ecma)script\b/
|
9949 |
-
},
|
9950 |
-
converters: {
|
9951 |
-
"text script": function textScript(text) {
|
9952 |
-
jQuery.globalEval(text);
|
9953 |
-
return text;
|
9954 |
-
}
|
9955 |
-
}
|
9956 |
-
}); // Handle cache's special case and crossDomain
|
9957 |
-
|
9958 |
-
jQuery.ajaxPrefilter("script", function (s) {
|
9959 |
-
if (s.cache === undefined) {
|
9960 |
-
s.cache = false;
|
9961 |
-
}
|
9962 |
-
|
9963 |
-
if (s.crossDomain) {
|
9964 |
-
s.type = "GET";
|
9965 |
-
}
|
9966 |
-
}); // Bind script tag hack transport
|
9967 |
-
|
9968 |
-
jQuery.ajaxTransport("script", function (s) {
|
9969 |
-
// This transport only deals with cross domain or forced-by-attrs requests
|
9970 |
-
if (s.crossDomain || s.scriptAttrs) {
|
9971 |
-
var script, _callback2;
|
9972 |
-
|
9973 |
-
return {
|
9974 |
-
send: function send(_, complete) {
|
9975 |
-
script = jQuery("<script>").attr(s.scriptAttrs || {}).prop({
|
9976 |
-
charset: s.scriptCharset,
|
9977 |
-
src: s.url
|
9978 |
-
}).on("load error", _callback2 = function callback(evt) {
|
9979 |
-
script.remove();
|
9980 |
-
_callback2 = null;
|
9981 |
-
|
9982 |
-
if (evt) {
|
9983 |
-
complete(evt.type === "error" ? 404 : 200, evt.type);
|
9984 |
-
}
|
9985 |
-
}); // Use native DOM manipulation to avoid our domManip AJAX trickery
|
9986 |
-
|
9987 |
-
document.head.appendChild(script[0]);
|
9988 |
-
},
|
9989 |
-
abort: function abort() {
|
9990 |
-
if (_callback2) {
|
9991 |
-
_callback2();
|
9992 |
-
}
|
9993 |
-
}
|
9994 |
-
};
|
9995 |
-
}
|
9996 |
-
});
|
9997 |
-
var oldCallbacks = [],
|
9998 |
-
rjsonp = /(=)\?(?=&|$)|\?\?/; // Default jsonp settings
|
9999 |
-
|
10000 |
-
jQuery.ajaxSetup({
|
10001 |
-
jsonp: "callback",
|
10002 |
-
jsonpCallback: function jsonpCallback() {
|
10003 |
-
var callback = oldCallbacks.pop() || jQuery.expando + "_" + nonce.guid++;
|
10004 |
-
this[callback] = true;
|
10005 |
-
return callback;
|
10006 |
-
}
|
10007 |
-
}); // Detect, normalize options and install callbacks for jsonp requests
|
10008 |
-
|
10009 |
-
jQuery.ajaxPrefilter("json jsonp", function (s, originalSettings, jqXHR) {
|
10010 |
-
var callbackName,
|
10011 |
-
overwritten,
|
10012 |
-
responseContainer,
|
10013 |
-
jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? "url" : typeof s.data === "string" && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0 && rjsonp.test(s.data) && "data"); // Handle iff the expected data type is "jsonp" or we have a parameter to set
|
10014 |
-
|
10015 |
-
if (jsonProp || s.dataTypes[0] === "jsonp") {
|
10016 |
-
// Get callback name, remembering preexisting value associated with it
|
10017 |
-
callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback; // Insert callback into url or form data
|
10018 |
-
|
10019 |
-
if (jsonProp) {
|
10020 |
-
s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName);
|
10021 |
-
} else if (s.jsonp !== false) {
|
10022 |
-
s.url += (rquery.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName;
|
10023 |
-
} // Use data converter to retrieve json after script execution
|
10024 |
-
|
10025 |
-
|
10026 |
-
s.converters["script json"] = function () {
|
10027 |
-
if (!responseContainer) {
|
10028 |
-
jQuery.error(callbackName + " was not called");
|
10029 |
-
}
|
10030 |
-
|
10031 |
-
return responseContainer[0];
|
10032 |
-
}; // Force json dataType
|
10033 |
-
|
10034 |
-
|
10035 |
-
s.dataTypes[0] = "json"; // Install callback
|
10036 |
-
|
10037 |
-
overwritten = window[callbackName];
|
10038 |
-
|
10039 |
-
window[callbackName] = function () {
|
10040 |
-
responseContainer = arguments;
|
10041 |
-
}; // Clean-up function (fires after converters)
|
10042 |
-
|
10043 |
-
|
10044 |
-
jqXHR.always(function () {
|
10045 |
-
// If previous value didn't exist - remove it
|
10046 |
-
if (overwritten === undefined) {
|
10047 |
-
jQuery(window).removeProp(callbackName); // Otherwise restore preexisting value
|
10048 |
-
} else {
|
10049 |
-
window[callbackName] = overwritten;
|
10050 |
-
} // Save back as free
|
10051 |
-
|
10052 |
-
|
10053 |
-
if (s[callbackName]) {
|
10054 |
-
// Make sure that re-using the options doesn't screw things around
|
10055 |
-
s.jsonpCallback = originalSettings.jsonpCallback; // Save the callback name for future use
|
10056 |
-
|
10057 |
-
oldCallbacks.push(callbackName);
|
10058 |
-
} // Call if it was a function and we have a response
|
10059 |
-
|
10060 |
-
|
10061 |
-
if (responseContainer && isFunction(overwritten)) {
|
10062 |
-
overwritten(responseContainer[0]);
|
10063 |
-
}
|
10064 |
-
|
10065 |
-
responseContainer = overwritten = undefined;
|
10066 |
-
}); // Delegate to script
|
10067 |
-
|
10068 |
-
return "script";
|
10069 |
-
}
|
10070 |
-
}); // Support: Safari 8 only
|
10071 |
-
// In Safari 8 documents created via document.implementation.createHTMLDocument
|
10072 |
-
// collapse sibling forms: the second one becomes a child of the first one.
|
10073 |
-
// Because of that, this security measure has to be disabled in Safari 8.
|
10074 |
-
// https://bugs.webkit.org/show_bug.cgi?id=137337
|
10075 |
-
|
10076 |
-
support.createHTMLDocument = function () {
|
10077 |
-
var body = document.implementation.createHTMLDocument("").body;
|
10078 |
-
body.innerHTML = "<form></form><form></form>";
|
10079 |
-
return body.childNodes.length === 2;
|
10080 |
-
}(); // Argument "data" should be string of html
|
10081 |
-
// context (optional): If specified, the fragment will be created in this context,
|
10082 |
-
// defaults to document
|
10083 |
-
// keepScripts (optional): If true, will include scripts passed in the html string
|
10084 |
-
|
10085 |
-
|
10086 |
-
jQuery.parseHTML = function (data, context, keepScripts) {
|
10087 |
-
if (typeof data !== "string") {
|
10088 |
-
return [];
|
10089 |
-
}
|
10090 |
-
|
10091 |
-
if (typeof context === "boolean") {
|
10092 |
-
keepScripts = context;
|
10093 |
-
context = false;
|
10094 |
-
}
|
10095 |
-
|
10096 |
-
var base, parsed, scripts;
|
10097 |
-
|
10098 |
-
if (!context) {
|
10099 |
-
// Stop scripts or inline event handlers from being executed immediately
|
10100 |
-
// by using document.implementation
|
10101 |
-
if (support.createHTMLDocument) {
|
10102 |
-
context = document.implementation.createHTMLDocument(""); // Set the base href for the created document
|
10103 |
-
// so any parsed elements with URLs
|
10104 |
-
// are based on the document's URL (gh-2965)
|
10105 |
-
|
10106 |
-
base = context.createElement("base");
|
10107 |
-
base.href = document.location.href;
|
10108 |
-
context.head.appendChild(base);
|
10109 |
-
} else {
|
10110 |
-
context = document;
|
10111 |
-
}
|
10112 |
-
}
|
10113 |
-
|
10114 |
-
parsed = rsingleTag.exec(data);
|
10115 |
-
scripts = !keepScripts && []; // Single tag
|
10116 |
-
|
10117 |
-
if (parsed) {
|
10118 |
-
return [context.createElement(parsed[1])];
|
10119 |
-
}
|
10120 |
-
|
10121 |
-
parsed = buildFragment([data], context, scripts);
|
10122 |
-
|
10123 |
-
if (scripts && scripts.length) {
|
10124 |
-
jQuery(scripts).remove();
|
10125 |
-
}
|
10126 |
-
|
10127 |
-
return jQuery.merge([], parsed.childNodes);
|
10128 |
-
};
|
10129 |
-
/**
|
10130 |
-
* Load a url into a page
|
10131 |
-
*/
|
10132 |
-
|
10133 |
-
|
10134 |
-
jQuery.fn.load = function (url, params, callback) {
|
10135 |
-
var selector,
|
10136 |
-
type,
|
10137 |
-
response,
|
10138 |
-
self = this,
|
10139 |
-
off = url.indexOf(" ");
|
10140 |
-
|
10141 |
-
if (off > -1) {
|
10142 |
-
selector = stripAndCollapse(url.slice(off));
|
10143 |
-
url = url.slice(0, off);
|
10144 |
-
} // If it's a function
|
10145 |
-
|
10146 |
-
|
10147 |
-
if (isFunction(params)) {
|
10148 |
-
// We assume that it's the callback
|
10149 |
-
callback = params;
|
10150 |
-
params = undefined; // Otherwise, build a param string
|
10151 |
-
} else if (params && _typeof(params) === "object") {
|
10152 |
-
type = "POST";
|
10153 |
-
} // If we have elements to modify, make the request
|
10154 |
-
|
10155 |
-
|
10156 |
-
if (self.length > 0) {
|
10157 |
-
jQuery.ajax({
|
10158 |
-
url: url,
|
10159 |
-
// If "type" variable is undefined, then "GET" method will be used.
|
10160 |
-
// Make value of this field explicit since
|
10161 |
-
// user can override it through ajaxSetup method
|
10162 |
-
type: type || "GET",
|
10163 |
-
dataType: "html",
|
10164 |
-
data: params
|
10165 |
-
}).done(function (responseText) {
|
10166 |
-
// Save response for use in complete callback
|
10167 |
-
response = arguments;
|
10168 |
-
self.html(selector ? // If a selector was specified, locate the right elements in a dummy div
|
10169 |
-
// Exclude scripts to avoid IE 'Permission Denied' errors
|
10170 |
-
jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : // Otherwise use the full result
|
10171 |
-
responseText); // If the request succeeds, this function gets "data", "status", "jqXHR"
|
10172 |
-
// but they are ignored because response was set above.
|
10173 |
-
// If it fails, this function gets "jqXHR", "status", "error"
|
10174 |
-
}).always(callback && function (jqXHR, status) {
|
10175 |
-
self.each(function () {
|
10176 |
-
callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);
|
10177 |
-
});
|
10178 |
-
});
|
10179 |
-
}
|
10180 |
-
|
10181 |
-
return this;
|
10182 |
-
};
|
10183 |
-
|
10184 |
-
jQuery.expr.pseudos.animated = function (elem) {
|
10185 |
-
return jQuery.grep(jQuery.timers, function (fn) {
|
10186 |
-
return elem === fn.elem;
|
10187 |
-
}).length;
|
10188 |
-
};
|
10189 |
-
|
10190 |
-
jQuery.offset = {
|
10191 |
-
setOffset: function setOffset(elem, options, i) {
|
10192 |
-
var curPosition,
|
10193 |
-
curLeft,
|
10194 |
-
curCSSTop,
|
10195 |
-
curTop,
|
10196 |
-
curOffset,
|
10197 |
-
curCSSLeft,
|
10198 |
-
calculatePosition,
|
10199 |
-
position = jQuery.css(elem, "position"),
|
10200 |
-
curElem = jQuery(elem),
|
10201 |
-
props = {}; // Set position first, in-case top/left are set even on static elem
|
10202 |
-
|
10203 |
-
if (position === "static") {
|
10204 |
-
elem.style.position = "relative";
|
10205 |
-
}
|
10206 |
-
|
10207 |
-
curOffset = curElem.offset();
|
10208 |
-
curCSSTop = jQuery.css(elem, "top");
|
10209 |
-
curCSSLeft = jQuery.css(elem, "left");
|
10210 |
-
calculatePosition = (position === "absolute" || position === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1; // Need to be able to calculate position if either
|
10211 |
-
// top or left is auto and position is either absolute or fixed
|
10212 |
-
|
10213 |
-
if (calculatePosition) {
|
10214 |
-
curPosition = curElem.position();
|
10215 |
-
curTop = curPosition.top;
|
10216 |
-
curLeft = curPosition.left;
|
10217 |
-
} else {
|
10218 |
-
curTop = parseFloat(curCSSTop) || 0;
|
10219 |
-
curLeft = parseFloat(curCSSLeft) || 0;
|
10220 |
-
}
|
10221 |
-
|
10222 |
-
if (isFunction(options)) {
|
10223 |
-
// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
|
10224 |
-
options = options.call(elem, i, jQuery.extend({}, curOffset));
|
10225 |
-
}
|
10226 |
-
|
10227 |
-
if (options.top != null) {
|
10228 |
-
props.top = options.top - curOffset.top + curTop;
|
10229 |
-
}
|
10230 |
-
|
10231 |
-
if (options.left != null) {
|
10232 |
-
props.left = options.left - curOffset.left + curLeft;
|
10233 |
-
}
|
10234 |
-
|
10235 |
-
if ("using" in options) {
|
10236 |
-
options.using.call(elem, props);
|
10237 |
-
} else {
|
10238 |
-
if (typeof props.top === "number") {
|
10239 |
-
props.top += "px";
|
10240 |
-
}
|
10241 |
-
|
10242 |
-
if (typeof props.left === "number") {
|
10243 |
-
props.left += "px";
|
10244 |
-
}
|
10245 |
-
|
10246 |
-
curElem.css(props);
|
10247 |
-
}
|
10248 |
-
}
|
10249 |
-
};
|
10250 |
-
jQuery.fn.extend({
|
10251 |
-
// offset() relates an element's border box to the document origin
|
10252 |
-
offset: function offset(options) {
|
10253 |
-
// Preserve chaining for setter
|
10254 |
-
if (arguments.length) {
|
10255 |
-
return options === undefined ? this : this.each(function (i) {
|
10256 |
-
jQuery.offset.setOffset(this, options, i);
|
10257 |
-
});
|
10258 |
-
}
|
10259 |
-
|
10260 |
-
var rect,
|
10261 |
-
win,
|
10262 |
-
elem = this[0];
|
10263 |
-
|
10264 |
-
if (!elem) {
|
10265 |
-
return;
|
10266 |
-
} // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
|
10267 |
-
// Support: IE <=11 only
|
10268 |
-
// Running getBoundingClientRect on a
|
10269 |
-
// disconnected node in IE throws an error
|
10270 |
-
|
10271 |
-
|
10272 |
-
if (!elem.getClientRects().length) {
|
10273 |
-
return {
|
10274 |
-
top: 0,
|
10275 |
-
left: 0
|
10276 |
-
};
|
10277 |
-
} // Get document-relative position by adding viewport scroll to viewport-relative gBCR
|
10278 |
-
|
10279 |
-
|
10280 |
-
rect = elem.getBoundingClientRect();
|
10281 |
-
win = elem.ownerDocument.defaultView;
|
10282 |
-
return {
|
10283 |
-
top: rect.top + win.pageYOffset,
|
10284 |
-
left: rect.left + win.pageXOffset
|
10285 |
-
};
|
10286 |
-
},
|
10287 |
-
// position() relates an element's margin box to its offset parent's padding box
|
10288 |
-
// This corresponds to the behavior of CSS absolute positioning
|
10289 |
-
position: function position() {
|
10290 |
-
if (!this[0]) {
|
10291 |
-
return;
|
10292 |
-
}
|
10293 |
-
|
10294 |
-
var offsetParent,
|
10295 |
-
offset,
|
10296 |
-
doc,
|
10297 |
-
elem = this[0],
|
10298 |
-
parentOffset = {
|
10299 |
-
top: 0,
|
10300 |
-
left: 0
|
10301 |
-
}; // position:fixed elements are offset from the viewport, which itself always has zero offset
|
10302 |
-
|
10303 |
-
if (jQuery.css(elem, "position") === "fixed") {
|
10304 |
-
// Assume position:fixed implies availability of getBoundingClientRect
|
10305 |
-
offset = elem.getBoundingClientRect();
|
10306 |
-
} else {
|
10307 |
-
offset = this.offset(); // Account for the *real* offset parent, which can be the document or its root element
|
10308 |
-
// when a statically positioned element is identified
|
10309 |
-
|
10310 |
-
doc = elem.ownerDocument;
|
10311 |
-
offsetParent = elem.offsetParent || doc.documentElement;
|
10312 |
-
|
10313 |
-
while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, "position") === "static") {
|
10314 |
-
offsetParent = offsetParent.parentNode;
|
10315 |
-
}
|
10316 |
-
|
10317 |
-
if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {
|
10318 |
-
// Incorporate borders into its offset, since they are outside its content origin
|
10319 |
-
parentOffset = jQuery(offsetParent).offset();
|
10320 |
-
parentOffset.top += jQuery.css(offsetParent, "borderTopWidth", true);
|
10321 |
-
parentOffset.left += jQuery.css(offsetParent, "borderLeftWidth", true);
|
10322 |
-
}
|
10323 |
-
} // Subtract parent offsets and element margins
|
10324 |
-
|
10325 |
-
|
10326 |
-
return {
|
10327 |
-
top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true),
|
10328 |
-
left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true)
|
10329 |
-
};
|
10330 |
-
},
|
10331 |
-
// This method will return documentElement in the following cases:
|
10332 |
-
// 1) For the element inside the iframe without offsetParent, this method will return
|
10333 |
-
// documentElement of the parent window
|
10334 |
-
// 2) For the hidden or detached element
|
10335 |
-
// 3) For body or html element, i.e. in case of the html node - it will return itself
|
10336 |
-
//
|
10337 |
-
// but those exceptions were never presented as a real life use-cases
|
10338 |
-
// and might be considered as more preferable results.
|
10339 |
-
//
|
10340 |
-
// This logic, however, is not guaranteed and can change at any point in the future
|
10341 |
-
offsetParent: function offsetParent() {
|
10342 |
-
return this.map(function () {
|
10343 |
-
var offsetParent = this.offsetParent;
|
10344 |
-
|
10345 |
-
while (offsetParent && jQuery.css(offsetParent, "position") === "static") {
|
10346 |
-
offsetParent = offsetParent.offsetParent;
|
10347 |
-
}
|
10348 |
-
|
10349 |
-
return offsetParent || documentElement;
|
10350 |
-
});
|
10351 |
-
}
|
10352 |
-
}); // Create scrollLeft and scrollTop methods
|
10353 |
-
|
10354 |
-
jQuery.each({
|
10355 |
-
scrollLeft: "pageXOffset",
|
10356 |
-
scrollTop: "pageYOffset"
|
10357 |
-
}, function (method, prop) {
|
10358 |
-
var top = "pageYOffset" === prop;
|
10359 |
-
|
10360 |
-
jQuery.fn[method] = function (val) {
|
10361 |
-
return access(this, function (elem, method, val) {
|
10362 |
-
// Coalesce documents and windows
|
10363 |
-
var win;
|
10364 |
-
|
10365 |
-
if (isWindow(elem)) {
|
10366 |
-
win = elem;
|
10367 |
-
} else if (elem.nodeType === 9) {
|
10368 |
-
win = elem.defaultView;
|
10369 |
-
}
|
10370 |
-
|
10371 |
-
if (val === undefined) {
|
10372 |
-
return win ? win[prop] : elem[method];
|
10373 |
-
}
|
10374 |
-
|
10375 |
-
if (win) {
|
10376 |
-
win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);
|
10377 |
-
} else {
|
10378 |
-
elem[method] = val;
|
10379 |
-
}
|
10380 |
-
}, method, val, arguments.length);
|
10381 |
-
};
|
10382 |
-
}); // Support: Safari <=7 - 9.1, Chrome <=37 - 49
|
10383 |
-
// Add the top/left cssHooks using jQuery.fn.position
|
10384 |
-
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
|
10385 |
-
// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
|
10386 |
-
// getComputedStyle returns percent when specified for top/left/bottom/right;
|
10387 |
-
// rather than make the css module depend on the offset module, just check for it here
|
10388 |
-
|
10389 |
-
jQuery.each(["top", "left"], function (_i, prop) {
|
10390 |
-
jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) {
|
10391 |
-
if (computed) {
|
10392 |
-
computed = curCSS(elem, prop); // If curCSS returns percentage, fallback to offset
|
10393 |
-
|
10394 |
-
return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + "px" : computed;
|
10395 |
-
}
|
10396 |
-
});
|
10397 |
-
}); // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
|
10398 |
-
|
10399 |
-
jQuery.each({
|
10400 |
-
Height: "height",
|
10401 |
-
Width: "width"
|
10402 |
-
}, function (name, type) {
|
10403 |
-
jQuery.each({
|
10404 |
-
padding: "inner" + name,
|
10405 |
-
content: type,
|
10406 |
-
"": "outer" + name
|
10407 |
-
}, function (defaultExtra, funcName) {
|
10408 |
-
// Margin is only for outerHeight, outerWidth
|
10409 |
-
jQuery.fn[funcName] = function (margin, value) {
|
10410 |
-
var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"),
|
10411 |
-
extra = defaultExtra || (margin === true || value === true ? "margin" : "border");
|
10412 |
-
return access(this, function (elem, type, value) {
|
10413 |
-
var doc;
|
10414 |
-
|
10415 |
-
if (isWindow(elem)) {
|
10416 |
-
// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
|
10417 |
-
return funcName.indexOf("outer") === 0 ? elem["inner" + name] : elem.document.documentElement["client" + name];
|
10418 |
-
} // Get document width or height
|
10419 |
-
|
10420 |
-
|
10421 |
-
if (elem.nodeType === 9) {
|
10422 |
-
doc = elem.documentElement; // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
|
10423 |
-
// whichever is greatest
|
10424 |
-
|
10425 |
-
return Math.max(elem.body["scroll" + name], doc["scroll" + name], elem.body["offset" + name], doc["offset" + name], doc["client" + name]);
|
10426 |
-
}
|
10427 |
-
|
10428 |
-
return value === undefined ? // Get width or height on the element, requesting but not forcing parseFloat
|
10429 |
-
jQuery.css(elem, type, extra) : // Set width or height on the element
|
10430 |
-
jQuery.style(elem, type, value, extra);
|
10431 |
-
}, type, chainable ? margin : undefined, chainable);
|
10432 |
-
};
|
10433 |
-
});
|
10434 |
-
});
|
10435 |
-
jQuery.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (_i, type) {
|
10436 |
-
jQuery.fn[type] = function (fn) {
|
10437 |
-
return this.on(type, fn);
|
10438 |
-
};
|
10439 |
-
});
|
10440 |
-
jQuery.fn.extend({
|
10441 |
-
bind: function bind(types, data, fn) {
|
10442 |
-
return this.on(types, null, data, fn);
|
10443 |
-
},
|
10444 |
-
unbind: function unbind(types, fn) {
|
10445 |
-
return this.off(types, null, fn);
|
10446 |
-
},
|
10447 |
-
delegate: function delegate(selector, types, data, fn) {
|
10448 |
-
return this.on(types, selector, data, fn);
|
10449 |
-
},
|
10450 |
-
undelegate: function undelegate(selector, types, fn) {
|
10451 |
-
// ( namespace ) or ( selector, types [, fn] )
|
10452 |
-
return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn);
|
10453 |
-
},
|
10454 |
-
hover: function hover(fnOver, fnOut) {
|
10455 |
-
return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);
|
10456 |
-
}
|
10457 |
-
});
|
10458 |
-
jQuery.each(("blur focus focusin focusout resize scroll click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup contextmenu").split(" "), function (_i, name) {
|
10459 |
-
// Handle event binding
|
10460 |
-
jQuery.fn[name] = function (data, fn) {
|
10461 |
-
return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);
|
10462 |
-
};
|
10463 |
-
}); // Support: Android <=4.0 only
|
10464 |
-
// Make sure we trim BOM and NBSP
|
10465 |
-
|
10466 |
-
var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; // Bind a function to a context, optionally partially applying any
|
10467 |
-
// arguments.
|
10468 |
-
// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
|
10469 |
-
// However, it is not slated for removal any time soon
|
10470 |
-
|
10471 |
-
jQuery.proxy = function (fn, context) {
|
10472 |
-
var tmp, args, proxy;
|
10473 |
-
|
10474 |
-
if (typeof context === "string") {
|
10475 |
-
tmp = fn[context];
|
10476 |
-
context = fn;
|
10477 |
-
fn = tmp;
|
10478 |
-
} // Quick check to determine if target is callable, in the spec
|
10479 |
-
// this throws a TypeError, but we will just return undefined.
|
10480 |
-
|
10481 |
-
|
10482 |
-
if (!isFunction(fn)) {
|
10483 |
-
return undefined;
|
10484 |
-
} // Simulated bind
|
10485 |
-
|
10486 |
-
|
10487 |
-
args = _slice.call(arguments, 2);
|
10488 |
-
|
10489 |
-
proxy = function proxy() {
|
10490 |
-
return fn.apply(context || this, args.concat(_slice.call(arguments)));
|
10491 |
-
}; // Set the guid of unique handler to the same of original handler, so it can be removed
|
10492 |
-
|
10493 |
-
|
10494 |
-
proxy.guid = fn.guid = fn.guid || jQuery.guid++;
|
10495 |
-
return proxy;
|
10496 |
-
};
|
10497 |
-
|
10498 |
-
jQuery.holdReady = function (hold) {
|
10499 |
-
if (hold) {
|
10500 |
-
jQuery.readyWait++;
|
10501 |
-
} else {
|
10502 |
-
jQuery.ready(true);
|
10503 |
-
}
|
10504 |
-
};
|
10505 |
-
|
10506 |
-
jQuery.isArray = Array.isArray;
|
10507 |
-
jQuery.parseJSON = JSON.parse;
|
10508 |
-
jQuery.nodeName = nodeName;
|
10509 |
-
jQuery.isFunction = isFunction;
|
10510 |
-
jQuery.isWindow = isWindow;
|
10511 |
-
jQuery.camelCase = camelCase;
|
10512 |
-
jQuery.type = toType;
|
10513 |
-
jQuery.now = Date.now;
|
10514 |
-
|
10515 |
-
jQuery.isNumeric = function (obj) {
|
10516 |
-
// As of jQuery 3.0, isNumeric is limited to
|
10517 |
-
// strings and numbers (primitives or objects)
|
10518 |
-
// that can be coerced to finite numbers (gh-2662)
|
10519 |
-
var type = jQuery.type(obj);
|
10520 |
-
return (type === "number" || type === "string") && // parseFloat NaNs numeric-cast false positives ("")
|
10521 |
-
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
|
10522 |
-
// subtraction forces infinities to NaN
|
10523 |
-
!isNaN(obj - parseFloat(obj));
|
10524 |
-
};
|
10525 |
-
|
10526 |
-
jQuery.trim = function (text) {
|
10527 |
-
return text == null ? "" : (text + "").replace(rtrim, "");
|
10528 |
-
}; // Register as a named AMD module, since jQuery can be concatenated with other
|
10529 |
-
// files that may use define, but not via a proper concatenation script that
|
10530 |
-
// understands anonymous AMD modules. A named AMD is safest and most robust
|
10531 |
-
// way to register. Lowercase jquery is used because AMD module names are
|
10532 |
-
// derived from file names, and jQuery is normally delivered in a lowercase
|
10533 |
-
// file name. Do this after creating the global so that if an AMD module wants
|
10534 |
-
// to call noConflict to hide this version of jQuery, it will work.
|
10535 |
-
// Note that for maximum portability, libraries that are not jQuery should
|
10536 |
-
// declare themselves as anonymous modules, and avoid setting a global if an
|
10537 |
-
// AMD loader is present. jQuery is a special case. For more information, see
|
10538 |
-
// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
|
10539 |
-
|
10540 |
-
|
10541 |
-
if (true) {
|
10542 |
-
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
|
10543 |
-
return jQuery;
|
10544 |
-
}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
|
10545 |
-
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
10546 |
-
}
|
10547 |
-
|
10548 |
-
var // Map over jQuery in case of overwrite
|
10549 |
-
_jQuery = window.jQuery,
|
10550 |
-
// Map over the $ in case of overwrite
|
10551 |
-
_$ = window.$;
|
10552 |
-
|
10553 |
-
jQuery.noConflict = function (deep) {
|
10554 |
-
if (window.$ === jQuery) {
|
10555 |
-
window.$ = _$;
|
10556 |
-
}
|
10557 |
-
|
10558 |
-
if (deep && window.jQuery === jQuery) {
|
10559 |
-
window.jQuery = _jQuery;
|
10560 |
-
}
|
10561 |
-
|
10562 |
-
return jQuery;
|
10563 |
-
}; // Expose jQuery and $ identifiers, even in AMD
|
10564 |
-
// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
|
10565 |
-
// and CommonJS for browser emulators (#13566)
|
10566 |
-
|
10567 |
-
|
10568 |
-
if (typeof noGlobal === "undefined") {
|
10569 |
-
window.jQuery = window.$ = jQuery;
|
10570 |
-
}
|
10571 |
-
|
10572 |
-
return jQuery;
|
10573 |
-
});
|
10574 |
-
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module)))
|
10575 |
-
|
10576 |
-
/***/ }),
|
10577 |
-
|
10578 |
/***/ "./node_modules/regenerator-runtime/runtime.js":
|
10579 |
/*!*****************************************************!*\
|
10580 |
!*** ./node_modules/regenerator-runtime/runtime.js ***!
|
99 |
/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
|
100 |
/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js");
|
101 |
/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);
|
|
|
|
|
|
|
102 |
|
103 |
|
104 |
|
107 |
|
108 |
var wpcf7cf_timeout;
|
109 |
var wpcf7cf_change_time_ms = window.wpcf7cf_running_tests ? 0 : 100;
|
|
|
110 |
var wpcf7cf_show_animation = {
|
111 |
"height": "show",
|
112 |
"marginTop": "show",
|
173 |
|
174 |
form.initial_conditions = form.conditions;
|
175 |
form.settings = form_options['settings'];
|
176 |
+
form.$groups = jQuery(); // empty jQuery set
|
177 |
|
178 |
form.repeaters = [];
|
179 |
form.multistep = null;
|
202 |
}, 200);
|
203 |
}); // PRO ONLY
|
204 |
|
205 |
+
jQuery('.wpcf7cf_repeater:not(.wpcf7cf_repeater .wpcf7cf_repeater)', $form).each(function () {
|
206 |
+
form.repeaters.push(new Wpcf7cfRepeater(jQuery(this), form));
|
207 |
});
|
208 |
form.$input_repeaters.val(JSON.stringify(form.repeaters.map(function (item) {
|
209 |
return item.params.$repeater.id;
|
210 |
})));
|
211 |
+
var $multistep = jQuery('.wpcf7cf_multistep', $form);
|
212 |
|
213 |
if ($multistep.length) {
|
214 |
form.multistep = new Wpcf7cfMultistep($multistep, form); // window.wpcf7cf.updateMultistepState(form.multistep);
|
238 |
if (cf7signature_resized === 0 && typeof signatures !== 'undefined' && signatures.constructor === Array && signatures.length > 0) {
|
239 |
for (var i = 0; i < signatures.length; i++) {
|
240 |
if (signatures[i].canvas.width === 0) {
|
241 |
+
var $sig_canvas = jQuery(".wpcf7-form-control-signature-body>canvas");
|
242 |
+
var $sig_wrap = jQuery(".wpcf7-form-control-signature-wrap");
|
243 |
$sig_canvas.eq(i).attr('width', $sig_wrap.width());
|
244 |
$sig_canvas.eq(i).attr('height', $sig_wrap.height());
|
245 |
cf7signature_resized = 1;
|
254 |
var show_group = window.wpcf7cf.should_group_be_shown(condition, form.$form);
|
255 |
|
256 |
if (show_group) {
|
257 |
+
jQuery('[data-id="' + condition.then_field + '"]', form.$form).eq(0).removeClass('wpcf7cf-hidden');
|
258 |
}
|
259 |
}
|
260 |
|
261 |
var animation_intime = wpcf7cf_settings.animation_intime;
|
262 |
var animation_outtime = wpcf7cf_settings.animation_outtime;
|
263 |
form.$groups.each(function (index) {
|
264 |
+
var $group = jQuery(this);
|
265 |
if ($group.is(':animated')) $group.finish(); // stop any current animations on the group
|
266 |
|
267 |
if ($group.css('display') === 'none' && !$group.hasClass('wpcf7cf-hidden')) {
|
272 |
}
|
273 |
} else if ($group.css('display') !== 'none' && $group.hasClass('wpcf7cf-hidden')) {
|
274 |
if ($group.attr('data-clear_on_hide') !== undefined) {
|
275 |
+
var $inputs = jQuery(':input', $group).not(':button, :submit, :reset, :hidden');
|
276 |
$inputs.each(function () {
|
277 |
+
var $this = jQuery(this);
|
278 |
$this.val(this.defaultValue);
|
279 |
$this.prop('checked', this.defaultChecked);
|
280 |
});
|
281 |
+
jQuery('option', $group).each(function () {
|
282 |
this.selected = this.defaultSelected;
|
283 |
});
|
284 |
+
jQuery('select', $group).each(function () {
|
285 |
+
var $select = jQuery(this);
|
286 |
|
287 |
if ($select.val() === null) {
|
288 |
+
$select.val(jQuery("option:first", $select).val());
|
289 |
}
|
290 |
});
|
291 |
$inputs.change(); //display_fields();
|
303 |
};
|
304 |
|
305 |
Wpcf7cfForm.prototype.updateSummaryFields = function () {
|
306 |
+
var $summary = jQuery('.wpcf7cf-summary', this.$form);
|
307 |
if ($summary.length == 0 || !$summary.is(':visible')) return;
|
308 |
var fd = new FormData();
|
309 |
var formdata = this.$form.serializeArray();
|
310 |
+
jQuery.each(formdata, function (key, input) {
|
311 |
fd.append(input.name, input.value);
|
312 |
});
|
313 |
+
jQuery.ajax({
|
314 |
url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_get_summary',
|
315 |
type: 'POST',
|
316 |
data: fd,
|
329 |
var hidden_groups = [];
|
330 |
var visible_groups = [];
|
331 |
form.$groups.each(function () {
|
332 |
+
var $this = jQuery(this);
|
333 |
|
334 |
if ($this.hasClass('wpcf7cf-hidden')) {
|
335 |
hidden_groups.push($this.data('id'));
|
336 |
$this.find('input,select,textarea').each(function () {
|
337 |
+
hidden_fields.push(jQuery(this).attr('name'));
|
338 |
});
|
339 |
} else {
|
340 |
visible_groups.push($this.data('id'));
|
358 |
Wpcf7cfForm.prototype.updateEventListeners = function () {
|
359 |
var form = this; // monitor input changes, and call display_fields() if something has changed
|
360 |
|
361 |
+
jQuery('input, select, textarea, button', form.$form).not('.wpcf7cf_add, .wpcf7cf_remove').off(wpcf7cf_change_events).on(wpcf7cf_change_events, form, function (e) {
|
362 |
var form = e.data;
|
363 |
clearTimeout(wpcf7cf_timeout);
|
364 |
wpcf7cf_timeout = setTimeout(function () {
|
366 |
}, wpcf7cf_change_time_ms);
|
367 |
}); // PRO ONLY
|
368 |
|
369 |
+
jQuery('.wpcf7cf-togglebutton', form.$form).off('click.toggle_wpcf7cf').on('click.toggle_wpcf7cf', function () {
|
370 |
+
var $this = jQuery(this);
|
371 |
|
372 |
if ($this.text() === $this.data('val-1')) {
|
373 |
$this.text($this.data('val-2'));
|
381 |
|
382 |
|
383 |
function Wpcf7cfRepeater($repeater, form) {
|
384 |
+
var $ = jQuery;
|
385 |
var repeater = this;
|
386 |
var wpcf7cf_settings = form.settings;
|
387 |
repeater.form = form;
|
396 |
var $repeater_controls = $repeater.children('.wpcf7cf_repeater_controls').eq(0);
|
397 |
var $repeater_sub_clone = $repeater_sub.clone();
|
398 |
$repeater_sub_clone.find('.wpcf7cf_repeater_sub').addBack('.wpcf7cf_repeater_sub').each(function () {
|
399 |
+
var $this = jQuery(this);
|
400 |
var prev_suffix = $this.attr('data-repeater_sub_suffix');
|
401 |
var new_suffix = prev_suffix + '__{{repeater_sub_suffix}}';
|
402 |
$this.attr('data-repeater_sub_suffix', new_suffix);
|
403 |
});
|
404 |
$repeater_sub_clone.find('[name]').each(function () {
|
405 |
+
var $this = jQuery(this);
|
406 |
var prev_name = $this.attr('name');
|
407 |
var orig_name = $this.attr('data-orig_name') != null ? $this.attr('data-orig_name') : prev_name;
|
408 |
var new_name = prev_name + '__{{repeater_sub_suffix}}';
|
416 |
$this.closest('.wpcf7-form-control-wrap').addClass(new_name);
|
417 |
});
|
418 |
$repeater_sub_clone.find('.wpcf7cf_repeater,[data-class="wpcf7cf_group"]').each(function () {
|
419 |
+
var $this = jQuery(this);
|
420 |
var prev_data_id = $this.attr('data-id');
|
421 |
var orig_data_id = $this.attr('data-orig_data_id') != null ? $this.attr('data-orig_data_id') : prev_data_id;
|
422 |
var new_data_id = prev_data_id + '__{{repeater_sub_suffix}}';
|
430 |
$this.closest('.wpcf7-form-control-wrap').addClass(new_data_id);
|
431 |
});
|
432 |
$repeater_sub_clone.find('[id]').each(function () {
|
433 |
+
var $this = jQuery(this);
|
434 |
var prev_id = $this.attr('id');
|
435 |
var orig_id = $this.attr('data-orig_id') != null ? $this.attr('data-orig_id') : prev_id;
|
436 |
var new_id = prev_id + '__{{repeater_sub_suffix}}';
|
439 |
$this.closest('.wpcf7-form-control-wrap').addClass(new_id);
|
440 |
});
|
441 |
$repeater_sub_clone.find('[for]').each(function () {
|
442 |
+
var $this = jQuery(this);
|
443 |
var prev_for = $this.attr('for');
|
444 |
var orig_for = $this.attr('data-orig_for') != null ? $this.attr('data-orig_for') : prev_for;
|
445 |
var new_for = prev_for + '__{{repeater_sub_suffix}}';
|
469 |
var repeater = e.data;
|
470 |
repeater.updateSubs(params.$repeater.num_subs - 1);
|
471 |
});
|
472 |
+
jQuery('> .wpcf7cf_repeater_sub', params.$repeater).eq(0).remove(); // remove the first sub, it's just a template.
|
473 |
|
474 |
repeater.updateSubs($repeater.initial_subs);
|
475 |
}
|
512 |
};
|
513 |
|
514 |
Wpcf7cfRepeater.prototype.addSubs = function (subs_to_add) {
|
515 |
+
var $ = jQuery;
|
516 |
var params = this.params;
|
517 |
var repeater = this;
|
518 |
var form = repeater.form;
|
526 |
html_str += params.repeater_sub_html.replace(/\{\{repeater_sub_suffix\}\}/g, sub_suffix).replace(new RegExp('\{\{' + $repeater.orig_id + '_index\}\}', 'g'), sub_suffix);
|
527 |
}
|
528 |
|
529 |
+
var $html = jQuery(html_str); // Add the newly created fields to the form
|
530 |
|
531 |
$html.hide().insertBefore($repeater_controls).animate(wpcf7cf_show_animation, params.wpcf7cf_settings.animation_intime).trigger('wpcf7cf_repeater_added');
|
532 |
+
jQuery('.wpcf7cf_repeater', $html).each(function () {
|
533 |
+
form.repeaters.push(new Wpcf7cfRepeater(jQuery(this), form));
|
534 |
});
|
535 |
form.$input_repeaters.val(JSON.stringify(form.repeaters.map(function (item) {
|
536 |
return item.params.$repeater.id;
|
554 |
};
|
555 |
|
556 |
Wpcf7cfRepeater.prototype.removeSubs = function (num_subs) {
|
557 |
+
var $ = jQuery;
|
558 |
var params = this.params;
|
559 |
var form = this.form;
|
560 |
params.$repeater.num_subs -= num_subs;
|
561 |
+
jQuery('> .wpcf7cf_repeater_sub', params.$repeater).slice(-num_subs).animate(wpcf7cf_hide_animation, {
|
562 |
duration: params.wpcf7cf_settings.animation_intime,
|
563 |
done: function done() {
|
564 |
+
var $this = jQuery(this); //remove the actual fields from the form
|
565 |
|
566 |
$this.remove();
|
567 |
params.$repeater.trigger('wpcf7cf_repeater_removed');
|
628 |
multistep.moveToStep(1);
|
629 |
}
|
630 |
|
631 |
+
jQuery(document).ajaxComplete(function (e, xhr, settings) {
|
632 |
if (xhr.hasOwnProperty('responseJSON') && xhr.responseJSON != null && xhr.responseJSON.hasOwnProperty('status') && xhr.responseJSON.hasOwnProperty('into') && xhr.responseJSON.status === "mail_success") {
|
633 |
+
jQuery(xhr.responseJSON.into).trigger('reset.wpcf7cf');
|
634 |
}
|
635 |
});
|
636 |
|
642 |
return new Promise(function (resolve) {
|
643 |
var fd = new FormData(); // Make sure to add file fields to FormData
|
644 |
|
645 |
+
jQuery.each($form.find('[data-id="step-' + step_index + '"] input[type="file"]'), function (index, el) {
|
646 |
if (!el.files.length) return false;
|
647 |
var file = el.files[0];
|
648 |
var fieldName = el.name;
|
649 |
fd.append(fieldName, file);
|
650 |
});
|
651 |
var formdata = $form.serializeArray();
|
652 |
+
jQuery.each(formdata, function (key, input) {
|
653 |
fd.append(input.name, input.value);
|
654 |
});
|
655 |
+
jQuery.ajax({
|
656 |
url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_validate_step',
|
657 |
type: 'POST',
|
658 |
data: fd,
|
677 |
|
678 |
if (!json.success) {
|
679 |
var checkError = 0;
|
680 |
+
jQuery.each(json.invalid_fields, function (index, el) {
|
681 |
if ($multistep.find('input[name="' + index + '"]').length || $multistep.find('input[name="' + index + '[]"]').length || $multistep.find('select[name="' + index + '"]').length || $multistep.find('select[name="' + index + '[]"]').length || $multistep.find('textarea[name="' + index + '"]').length || $multistep.find('textarea[name="' + index + '[]"]').length) {
|
682 |
checkError = checkError + 1;
|
683 |
+
var controlWrap = jQuery('.wpcf7-form-control-wrap.' + index, $form); //controlWrap.addClass('cf7mls-invalid');
|
684 |
|
685 |
controlWrap.find('input').addClass('wpcf7-not-valid');
|
686 |
controlWrap.find('span.wpcf7-not-valid-tip').remove();
|
689 |
});
|
690 |
resolve('failed'); //$multistep.append('<div class="wpcf7-response-output wpcf7-display-none wpcf7-validation-errors" style="display: block;" role="alert">' + json.message + '</div>');
|
691 |
|
|
|
692 |
$multistep.parent().find('.wpcf7-response-output').removeClass('wpcf7-display-none').html(json.message);
|
693 |
} else if (json.success) {
|
694 |
resolve('success');
|
891 |
}
|
892 |
},
|
893 |
should_group_be_shown: function should_group_be_shown(condition, $current_form) {
|
894 |
+
var $ = jQuery;
|
895 |
var show_group = true;
|
896 |
|
897 |
for (var and_rule_i = 0; and_rule_i < condition.and_rules.length; and_rule_i++) {
|
898 |
var condition_ok = false;
|
899 |
var condition_and_rule = condition.and_rules[and_rule_i];
|
900 |
+
var $field = jQuery('[name="' + condition_and_rule.if_field + '"], [name="' + condition_and_rule.if_field + '[]"], [data-original-name="' + condition_and_rule.if_field + '"], [data-original-name="' + condition_and_rule.if_field + '[]"]', $current_form);
|
901 |
var if_val = condition_and_rule.if_value;
|
902 |
var if_val_as_number = isFinite(parseFloat(if_val)) ? parseFloat(if_val) : 0;
|
903 |
var operator = condition_and_rule.operator;
|
921 |
var all_values = [];
|
922 |
var checked_values = [];
|
923 |
$field.each(function () {
|
924 |
+
all_values.push(jQuery(this).val());
|
925 |
|
926 |
+
if (jQuery(this).is(':checked')) {
|
927 |
+
checked_values.push(jQuery(this).val());
|
928 |
}
|
929 |
});
|
930 |
condition_ok = this.isConditionTrue(checked_values, operator, if_val, $field);
|
939 |
},
|
940 |
isConditionTrue: function isConditionTrue(values, operator) {
|
941 |
var testValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
|
942 |
+
var $field = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : jQuery();
|
943 |
|
944 |
if (!Array.isArray(values)) {
|
945 |
values = [values];
|
1009 |
return condition_ok;
|
1010 |
}
|
1011 |
};
|
1012 |
+
jQuery('.wpcf7-form').each(function () {
|
1013 |
+
wpcf7cf_forms.push(new Wpcf7cfForm(jQuery(this)));
|
1014 |
}); // Call displayFields again on all forms
|
1015 |
// Necessary in case some theme or plugin changed a form value by the time the entire page is fully loaded.
|
1016 |
|
1017 |
+
jQuery('document').ready(function () {
|
1018 |
wpcf7cf_forms.forEach(function (f) {
|
1019 |
f.displayFields();
|
1020 |
});
|
1021 |
}); // fix for exclusive checkboxes in IE (this will call the change-event again after all other checkboxes are unchecked, triggering the display_fields() function)
|
1022 |
|
1023 |
+
var old_wpcf7ExclusiveCheckbox = jQuery.fn.wpcf7ExclusiveCheckbox;
|
1024 |
|
1025 |
+
jQuery.fn.wpcf7ExclusiveCheckbox = function () {
|
1026 |
return this.find('input:checkbox').click(function () {
|
1027 |
+
var name = jQuery(this).attr('name');
|
1028 |
+
jQuery(this).closest('form').find('input:checkbox[name="' + name + '"]').not(this).prop('checked', false).eq(0).change();
|
1029 |
});
|
1030 |
};
|
1031 |
|
1089 |
|
1090 |
/***/ }),
|
1091 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1092 |
/***/ "./node_modules/regenerator-runtime/runtime.js":
|
1093 |
/*!*****************************************************!*\
|
1094 |
!*** ./node_modules/regenerator-runtime/runtime.js ***!
|
js/scripts.js.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./js/scripts_es6.js","webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///(webpack)/buildin/module.js"],"names":["cf7signature_resized","wpcf7cf_timeout","wpcf7cf_change_time_ms","window","wpcf7cf_running_tests","console","log","wpcf7cf_show_animation","wpcf7cf_hide_animation","wpcf7cf_show_step_animation","wpcf7cf_hide_step_animation","wpcf7cf_change_events","wpcf7cf_forms","String","prototype","endsWith","search","this_len","undefined","length","substring","Wpcf7cfForm","$form","options_element","find","eq","val","form","form_options","JSON","parse","$input_hidden_group_fields","$input_hidden_groups","$input_visible_groups","$input_repeaters","$input_steps","unit_tag","closest","attr","conditions","i","condition","and_rules","if_field","if_value","operator","initial_conditions","settings","$groups","jQuery","repeaters","multistep","fields","animation_intime","parseInt","animation_outtime","animation","updateGroups","updateEventListeners","displayFields","on","e","data","setTimeout","resetRepeaters","moveToStep","each","push","Wpcf7cfRepeater","stringify","map","item","params","$repeater","id","$multistep","Wpcf7cfMultistep","forEach","repeater","updateSubs","initial_subs","wpcf7cf","get_simplified_dom_model","wpcf7cf_conditions","wpcf7cf_settings","signatures","constructor","Array","canvas","width","$sig_canvas","$sig_wrap","height","addClass","show_group","should_group_be_shown","then_field","removeClass","index","$group","is","finish","css","hasClass","prop","show","trigger","animate","$inputs","not","$this","defaultValue","defaultChecked","selected","defaultSelected","$select","change","hide","updateHiddenFields","updateSummaryFields","$summary","fd","FormData","formdata","serializeArray","key","input","append","name","value","ajax","url","wpcf7cf_global_settings","ajaxurl","type","processData","contentType","dataType","success","json","html","summaryHtml","hidden_fields","hidden_groups","visible_groups","get_nested_conditions","off","clearTimeout","text","$","num_subs","orig_id","min","max","$repeater_sub","children","$repeater_controls","$repeater_sub_clone","clone","addBack","prev_suffix","new_suffix","prev_name","orig_name","new_name","replace","prev_data_id","orig_data_id","new_data_id","prev_id","new_id","prev_for","orig_for","new_for","repeater_sub_html","outerHTML","$repeater_count_field","$button_add","$button_remove","click","remove","subs_to_show","subs_to_add","removeSubs","addSubs","showButtonRemove","showButtonAdd","html_str","sub_suffix","RegExp","$html","insertBefore","updateMultistepState","cf7mdInit","slice","duration","done","$steps","$btn_next","$btn_prev","$dots","currentStep","numSteps","validateStep","result","stopImmediatePropagation","document","ajaxComplete","xhr","hasOwnProperty","responseJSON","status","into","step_index","Promise","resolve","el","files","file","fieldName","checkError","invalid_fields","controlWrap","reason","parent","message","fail","always","previousStep","formEl","topOffset","getBoundingClientRect","top","scrollIntoView","behavior","getFieldsInStep","simpleDom","inStep","filter","step","initForm","$current_form","simplified_dom","groups","sub_conditions","g","relevant_conditions","original_name","and_rule","suffix","concat","currentNode","ni","createNodeIterator","NodeFilter","SHOW_ELEMENT","nextNode","classList","contains","dataset","className","hasAttribute","getAttribute","original_name_length","stepsData","fieldsInCurrentStep","$submit_button","$ajax_loader","detach","appendTo","and_rule_i","condition_ok","condition_and_rule","$field","if_val","if_val_as_number","isFinite","parseFloat","regex_patt","isValidRegex","all_values","checked_values","isConditionTrue","values","testValue","isArray","every","v","testValueNumber","NaN","valueNumber","valsAreNumbers","isNaN","test","ready","f","old_wpcf7ExclusiveCheckbox","fn","wpcf7ExclusiveCheckbox","asyncGeneratorStep","gen","reject","_next","_throw","arg","info","error","then","_asyncToGenerator","self","args","arguments","apply","err","module","exports","require","global","factory","w","Error","noGlobal","arr","getProto","Object","getPrototypeOf","flat","array","call","indexOf","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","isWindow","preservedScriptAttributes","src","nonce","noModule","DOMEval","code","node","doc","script","createElement","setAttribute","head","appendChild","parentNode","removeChild","toType","version","selector","context","init","jquery","toArray","get","num","pushStack","elems","ret","merge","prevObject","callback","elem","first","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","copy","copyIsArray","target","deep","isPlainObject","expando","Math","random","isReady","msg","noop","proto","Ctor","isEmptyObject","globalEval","isArrayLike","makeArray","results","inArray","second","invert","callbackInverse","matches","callbackExpect","guid","Symbol","iterator","split","_i","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","Date","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","els","seed","m","nid","match","newSelector","newContext","ownerDocument","exec","getElementById","getElementsByTagName","getElementsByClassName","qsa","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","addEventListener","attachEvent","createComment","getById","getElementsByName","attrId","getAttributeNode","tag","tmp","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","check","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","matcher","unmatched","lang","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","checked","selectedIndex","_matchIndexes","radio","checkbox","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","_name","unique","isXMLDoc","escapeSelector","until","truncate","siblings","n","rneedsContext","needsContext","rsingleTag","winnow","qualifier","rootjQuery","root","parseHTML","rparentsprev","guaranteedUnique","contents","prev","has","targets","l","prevAll","add","sibling","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","createOptions","object","_","flag","Callbacks","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","empty","disable","lock","fireWith","Identity","Thrower","ex","adoptValue","noValue","method","promise","Deferred","func","tuples","state","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","warn","readyException","readyList","readyWait","wait","completed","removeEventListener","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","create","defineProperty","configurable","set","hasData","dataPriv","dataUser","rbrace","rmultiDash","getData","dataAttr","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","toggle","rcheckableType","rtagName","rscriptType","fragment","createDocumentFragment","div","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","tbody","tfoot","colgroup","caption","th","optgroup","getAll","setGlobalEval","refElements","buildFragment","scripts","selection","ignored","wrap","attached","nodes","createTextNode","htmlPrefilter","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","safeActiveElement","types","one","origFn","event","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","preventDefault","stopPropagation","postDispatch","matchedHandlers","matchedSelectors","button","addProp","hook","Event","enumerable","originalEvent","writable","load","noBubble","leverageNative","beforeunload","returnValue","notAsync","saved","isTrigger","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","prepend","before","after","replaceWith","replaceChild","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelBoxStyles","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","curCSS","computed","minWidth","maxWidth","getPropertyValue","addGetHookIf","conditionFn","hookFn","cssPrefixes","emptyStyle","vendorProps","vendorPropName","capName","finalPropName","final","cssProps","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","boxSizingNeeded","valueIsBorderBox","offsetProp","getClientRects","cssHooks","opacity","origName","isCustomProp","setProperty","scrollboxSizeBuggy","left","margin","padding","border","prefix","expand","expanded","parts","Tween","easing","propHooks","run","percent","eased","pos","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","Animation","tweeners","defaultPrefilter","opts","oldfire","propTween","restoreDisplay","isBox","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","properties","stopped","prefilters","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","bind","complete","timer","tweener","prefilter","speed","opt","speeds","fadeTo","to","optall","doAnimation","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","getter","lowercaseName","rfocusable","rclickable","removeProp","propFix","tabindex","stripAndCollapse","getClass","classesToArray","classes","curValue","clazz","finalValue","toggleClass","stateVal","isValidValue","classNames","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","r20","rhash","rantiCache","rheaders","rlocalProtocol","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","responses","ct","finalDataType","firstDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","isLocal","protocol","async","accepts","ajaxSetup","ajaxPrefilter","ajaxTransport","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","overrideMimeType","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","modified","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","trim","define","_jQuery","_$","noConflict","runtime","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","makeInvokeMethod","tryCatch","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","NativeIteratorPrototype","Gp","displayName","defineIteratorMethods","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","__await","AsyncIterator","PromiseImpl","invoke","record","unwrapped","previousPromise","enqueue","callInvokeWithMethodAndArg","iter","doneResult","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","skipTempReset","charAt","rootEntry","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","webpackPolyfill","deprecate","paths"],"mappings":"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","file":"scripts.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./js/scripts_es6.js\");\n","\"use strict\";\n\nimport jQuery from 'jquery';\n\n\nvar cf7signature_resized = 0; // for compatibility with contact-form-7-signature-addon\n\nvar wpcf7cf_timeout;\nvar wpcf7cf_change_time_ms = window.wpcf7cf_running_tests ? 0 : 100;\n\nconsole.log(wpcf7cf_change_time_ms);\n\nvar wpcf7cf_show_animation = { \"height\": \"show\", \"marginTop\": \"show\", \"marginBottom\": \"show\", \"paddingTop\": \"show\", \"paddingBottom\": \"show\" };\nvar wpcf7cf_hide_animation = { \"height\": \"hide\", \"marginTop\": \"hide\", \"marginBottom\": \"hide\", \"paddingTop\": \"hide\", \"paddingBottom\": \"hide\" };\n\nvar wpcf7cf_show_step_animation = { \"opacity\": \"show\" };\nvar wpcf7cf_hide_step_animation = { \"opacity\": \"hide\" };\n\nvar wpcf7cf_change_events = 'input.wpcf7cf paste.wpcf7cf change.wpcf7cf click.wpcf7cf propertychange.wpcf7cf';\n\nvar wpcf7cf_forms = [];\n\n// endswith polyfill\nif (!String.prototype.endsWith) {\n\tString.prototype.endsWith = function(search, this_len) {\n\t\tif (this_len === undefined || this_len > this.length) {\n\t\t\tthis_len = this.length;\n\t\t}\n\t\treturn this.substring(this_len - search.length, this_len) === search;\n\t};\n}\n\nvar Wpcf7cfForm = function($form) {\n\n var options_element = $form.find('input[name=\"_wpcf7cf_options\"]').eq(0);\n if (!options_element.length || !options_element.val()) {\n // doesn't look like a CF7 form created with conditional fields plugin enabled.\n return false;\n }\n\n var form = this;\n\n var form_options = JSON.parse(options_element.val());\n\n form.$form = $form;\n form.$input_hidden_group_fields = $form.find('[name=\"_wpcf7cf_hidden_group_fields\"]');\n form.$input_hidden_groups = $form.find('[name=\"_wpcf7cf_hidden_groups\"]');\n form.$input_visible_groups = $form.find('[name=\"_wpcf7cf_visible_groups\"]');\n form.$input_repeaters = $form.find('[name=\"_wpcf7cf_repeaters\"]');\n form.$input_steps = $form.find('[name=\"_wpcf7cf_steps\"]');\n\n form.unit_tag = $form.closest('.wpcf7').attr('id');\n form.conditions = form_options['conditions'];\n\n // compatibility with conditional forms created with older versions of the plugin ( < 1.4 )\n for (var i=0; i < form.conditions.length; i++) {\n var condition = form.conditions[i];\n if (!('and_rules' in condition)) {\n condition.and_rules = [{'if_field':condition.if_field,'if_value':condition.if_value,'operator':condition.operator}];\n }\n }\n\n form.initial_conditions = form.conditions;\n form.settings = form_options['settings'];\n\n form.$groups = jQuery(); // empty jQuery set\n form.repeaters = [];\n form.multistep = null;\n form.fields = [];\n\n form.settings.animation_intime = parseInt(form.settings.animation_intime);\n form.settings.animation_outtime = parseInt(form.settings.animation_outtime);\n\n if (form.settings.animation === 'no') {\n form.settings.animation_intime = 0;\n form.settings.animation_outtime = 0;\n }\n\n form.updateGroups();\n form.updateEventListeners();\n form.displayFields();\n\n // bring form in initial state if the reset event is fired on it.\n form.$form.on('reset.wpcf7cf', form, function(e) {\n var form = e.data;\n setTimeout(function(){\n form.displayFields();\n form.resetRepeaters();\n if (form.multistep != null) {\n form.multistep.moveToStep(1); \n }\n },200);\n });\n\n // PRO ONLY\n\n jQuery('.wpcf7cf_repeater:not(.wpcf7cf_repeater .wpcf7cf_repeater)', $form).each(function(){\n form.repeaters.push(new Wpcf7cfRepeater(jQuery(this),form));\n });\n\n form.$input_repeaters.val(JSON.stringify(form.repeaters.map((item)=>item.params.$repeater.id)));\n\n var $multistep = jQuery('.wpcf7cf_multistep', $form);\n\n if ($multistep.length) {\n form.multistep = new Wpcf7cfMultistep($multistep, form);\n // window.wpcf7cf.updateMultistepState(form.multistep);\n }\n\n // END PRO ONLY\n\n}\n\n/**\n * reset initial number of subs for each repeater.\n * (does not clear values)\n */\nWpcf7cfForm.prototype.resetRepeaters = function() {\n var form = this;\n form.repeaters.forEach(repeater => {\n repeater.updateSubs( repeater.params.$repeater.initial_subs );\n });\n}\n\nWpcf7cfForm.prototype.displayFields = function() {\n\n var form = this;\n\n window.wpcf7cf.get_simplified_dom_model(form.$form);\n\n var unit_tag = this.unit_tag;\n var wpcf7cf_conditions = this.conditions;\n var wpcf7cf_settings = this.settings;\n\n //for compatibility with contact-form-7-signature-addon\n if (cf7signature_resized === 0 && typeof signatures !== 'undefined' && signatures.constructor === Array && signatures.length > 0 ) {\n for (var i = 0; i < signatures.length; i++) {\n if (signatures[i].canvas.width === 0) {\n\n var $sig_canvas = jQuery(\".wpcf7-form-control-signature-body>canvas\");\n var $sig_wrap = jQuery(\".wpcf7-form-control-signature-wrap\");\n $sig_canvas.eq(i).attr('width', $sig_wrap.width());\n $sig_canvas.eq(i).attr('height', $sig_wrap.height());\n\n cf7signature_resized = 1;\n }\n }\n }\n\n form.$groups.addClass('wpcf7cf-hidden');\n\n for (var i=0; i < wpcf7cf_conditions.length; i++) {\n\n var condition = wpcf7cf_conditions[i];\n\n var show_group = window.wpcf7cf.should_group_be_shown(condition, form.$form);\n\n if (show_group) {\n jQuery('[data-id=\"'+condition.then_field+'\"]',form.$form).eq(0).removeClass('wpcf7cf-hidden');\n }\n }\n\n var animation_intime = wpcf7cf_settings.animation_intime;\n var animation_outtime = wpcf7cf_settings.animation_outtime;\n\n form.$groups.each(function (index) {\n var $group = jQuery(this);\n if ($group.is(':animated')) $group.finish(); // stop any current animations on the group\n if ($group.css('display') === 'none' && !$group.hasClass('wpcf7cf-hidden')) {\n if ($group.prop('tagName') === 'SPAN') {\n $group.show().trigger('wpcf7cf_show_group');\n } else {\n $group.animate(wpcf7cf_show_animation, animation_intime).trigger('wpcf7cf_show_group'); // show\n }\n } else if ($group.css('display') !== 'none' && $group.hasClass('wpcf7cf-hidden')) {\n\n if ($group.attr('data-clear_on_hide') !== undefined) {\n var $inputs = jQuery(':input', $group).not(':button, :submit, :reset, :hidden');\n\n $inputs.each(function(){\n var $this = jQuery(this);\n $this.val(this.defaultValue);\n $this.prop('checked', this.defaultChecked);\n });\n\n jQuery('option', $group).each(function() {\n this.selected = this.defaultSelected;\n });\n\n jQuery('select', $group).each(function() {\n const $select = jQuery(this);\n if ($select.val() === null) {\n $select.val(jQuery(\"option:first\",$select).val());\n }\n });\n\n $inputs.change();\n //display_fields();\n }\n\n if ($group.prop('tagName') === 'SPAN') {\n $group.hide().trigger('wpcf7cf_hide_group');\n } else {\n $group.animate(wpcf7cf_hide_animation, animation_outtime).trigger('wpcf7cf_hide_group'); // hide\n }\n\n }\n });\n\n form.updateHiddenFields();\n form.updateSummaryFields();\n};\n\nWpcf7cfForm.prototype.updateSummaryFields = function() {\n var $summary = jQuery('.wpcf7cf-summary', this.$form);\n\n if ($summary.length == 0 || !$summary.is(':visible')) return;\n\n var fd = new FormData();\n\n var formdata = this.$form.serializeArray();\n jQuery.each(formdata,function(key, input){\n fd.append(input.name, input.value);\n });\n\n jQuery.ajax({\n url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_get_summary',\n type: 'POST',\n data: fd,\n processData: false,\n contentType: false,\n dataType: 'json',\n success: function(json) {\n $summary.html(json.summaryHtml);\n }\n });\n};\n\nWpcf7cfForm.prototype.updateHiddenFields = function() {\n\n var form = this;\n\n var hidden_fields = [];\n var hidden_groups = [];\n var visible_groups = [];\n\n form.$groups.each(function () {\n var $this = jQuery(this);\n if ($this.hasClass('wpcf7cf-hidden')) {\n hidden_groups.push($this.data('id'));\n $this.find('input,select,textarea').each(function () {\n hidden_fields.push(jQuery(this).attr('name'));\n });\n } else {\n visible_groups.push($this.data('id'));\n }\n });\n\n form.hidden_fields = hidden_fields;\n form.hidden_groups = hidden_groups;\n form.visible_groups = visible_groups;\n\n form.$input_hidden_group_fields.val(JSON.stringify(hidden_fields));\n form.$input_hidden_groups.val(JSON.stringify(hidden_groups));\n form.$input_visible_groups.val(JSON.stringify(visible_groups));\n\n return true;\n};\nWpcf7cfForm.prototype.updateGroups = function() {\n var form = this;\n form.$groups = form.$form.find('[data-class=\"wpcf7cf_group\"]');\n\n form.conditions = window.wpcf7cf.get_nested_conditions(form.initial_conditions, form.$form);\n\n};\nWpcf7cfForm.prototype.updateEventListeners = function() {\n\n var form = this;\n\n // monitor input changes, and call display_fields() if something has changed\n jQuery('input, select, textarea, button',form.$form).not('.wpcf7cf_add, .wpcf7cf_remove').off(wpcf7cf_change_events).on(wpcf7cf_change_events,form, function(e) {\n var form = e.data;\n clearTimeout(wpcf7cf_timeout);\n wpcf7cf_timeout = setTimeout(function() {\n form.displayFields();\n }, wpcf7cf_change_time_ms);\n });\n\n // PRO ONLY\n jQuery('.wpcf7cf-togglebutton', form.$form).off('click.toggle_wpcf7cf').on('click.toggle_wpcf7cf',function() {\n var $this = jQuery(this);\n if ($this.text() === $this.data('val-1')) {\n $this.text($this.data('val-2'));\n $this.val($this.data('val-2'));\n } else {\n $this.text($this.data('val-1'));\n $this.val($this.data('val-1'));\n }\n });\n // END PRO ONLY\n};\n\n// PRO ONLY\nfunction Wpcf7cfRepeater($repeater, form) {\n var $ = jQuery;\n\n var repeater = this;\n\n var wpcf7cf_settings = form.settings;\n\n repeater.form = form;\n\n $repeater.num_subs = 0;\n $repeater.id = $repeater.data('id');\n $repeater.orig_id = $repeater.data('orig_data_id');\n $repeater.min = typeof( $repeater.data('min')) !== 'undefined' ? parseInt($repeater.data('min')) : 1;\n $repeater.max = typeof( $repeater.data('max')) !== 'undefined' ? parseInt($repeater.data('max')) : 200;\n $repeater.initial_subs = typeof( $repeater.data('initial')) !== 'undefined' ? parseInt($repeater.data('initial')) : $repeater.min;\n if ($repeater.initial_subs > $repeater.max) $repeater.initial_subs = $repeater.max;\n var $repeater_sub = $repeater.children('.wpcf7cf_repeater_sub').eq(0);\n var $repeater_controls = $repeater.children('.wpcf7cf_repeater_controls').eq(0);\n\n var $repeater_sub_clone = $repeater_sub.clone();\n\n $repeater_sub_clone.find('.wpcf7cf_repeater_sub').addBack('.wpcf7cf_repeater_sub').each(function() {\n var $this = jQuery(this);\n var prev_suffix = $this.attr('data-repeater_sub_suffix');\n var new_suffix = prev_suffix+'__{{repeater_sub_suffix}}';\n $this.attr('data-repeater_sub_suffix', new_suffix);\n });\n\n $repeater_sub_clone.find('[name]').each(function() {\n var $this = jQuery(this);\n var prev_name = $this.attr('name');\n var orig_name = $this.attr('data-orig_name') != null ? $this.attr('data-orig_name') : prev_name;\n var new_name = prev_name+'__{{repeater_sub_suffix}}';\n\n if(prev_name.endsWith('_count')) {\n new_name = prev_name.replace('_count','__{{repeater_sub_suffix}}_count');\n }\n\n $this.attr('name', new_name);\n $this.attr('data-orig_name', orig_name);\n $this.closest('.wpcf7-form-control-wrap').addClass(new_name);\n });\n\n $repeater_sub_clone.find('.wpcf7cf_repeater,[data-class=\"wpcf7cf_group\"]').each(function() {\n var $this = jQuery(this);\n var prev_data_id = $this.attr('data-id');\n var orig_data_id = $this.attr('data-orig_data_id') != null ? $this.attr('data-orig_data_id') : prev_data_id;\n var new_data_id = prev_data_id+'__{{repeater_sub_suffix}}';\n\n if(prev_data_id.endsWith('_count')) {\n new_data_id = prev_data_id.replace('_count','__{{repeater_sub_suffix}}_count');\n }\n\n $this.attr('data-id', new_data_id);\n $this.attr('data-orig_data_id', orig_data_id);\n $this.closest('.wpcf7-form-control-wrap').addClass(new_data_id);\n });\n\n $repeater_sub_clone.find('[id]').each(function() {\n var $this = jQuery(this);\n var prev_id = $this.attr('id');\n var orig_id = $this.attr('data-orig_id') != null ? $this.attr('data-orig_id') : prev_id;\n var new_id = prev_id+'__{{repeater_sub_suffix}}';\n\n $this.attr('id', new_id);\n $this.attr('data-orig_id', orig_id);\n $this.closest('.wpcf7-form-control-wrap').addClass(new_id);\n });\n\n $repeater_sub_clone.find('[for]').each(function() {\n var $this = jQuery(this);\n var prev_for = $this.attr('for');\n var orig_for = $this.attr('data-orig_for') != null ? $this.attr('data-orig_for') : prev_for;\n var new_for = prev_for+'__{{repeater_sub_suffix}}';\n\n $this.attr('for', new_for);\n $this.attr('data-orig_for', orig_for);\n $this.closest('.wpcf7-form-control-wrap').addClass(new_for);\n });\n\n var repeater_sub_html = $repeater_sub_clone[0].outerHTML;\n\n var $repeater_count_field = $repeater.find('[name='+$repeater.id+'_count]').eq(0);\n var $button_add = $repeater_controls.find('.wpcf7cf_add').eq(0);\n var $button_remove = $repeater_controls.find('.wpcf7cf_remove').eq(0);\n\n var params = {\n $repeater: $repeater,\n $repeater_count_field: $repeater_count_field,\n repeater_sub_html: repeater_sub_html,\n $repeater_controls: $repeater_controls,\n $button_add: $button_add,\n $button_remove: $button_remove,\n wpcf7cf_settings: wpcf7cf_settings\n };\n \n this.params = params;\n\n $button_add.click( repeater, function(e) {\n var repeater = e.data;\n repeater.updateSubs(params.$repeater.num_subs+1);\n });\n\n $button_remove.click( repeater,function(e) {\n var repeater = e.data;\n repeater.updateSubs(params.$repeater.num_subs-1);\n });\n\n jQuery('> .wpcf7cf_repeater_sub',params.$repeater).eq(0).remove(); // remove the first sub, it's just a template.\n\n repeater.updateSubs($repeater.initial_subs); \n\n}\n\n\n\nWpcf7cfRepeater.prototype.updateSubs = function(subs_to_show) {\n var repeater = this;\n var params = repeater.params;\n var subs_to_add = subs_to_show - params.$repeater.num_subs;\n\n if (subs_to_add < 0) {\n repeater.removeSubs(-subs_to_add);\n } else if (subs_to_add > 0) {\n repeater.addSubs(subs_to_add);\n }\n\n var showButtonRemove = false;\n var showButtonAdd = false;\n\n if (params.$repeater.num_subs < params.$repeater.max) {\n showButtonAdd = true;\n }\n if (params.$repeater.num_subs > params.$repeater.min) {\n showButtonRemove = true;\n }\n\n if (showButtonAdd) {\n params.$button_add.show();\n } else {\n params.$button_add.hide();\n\n }\n\n if (showButtonRemove) {\n params.$button_remove.show();\n } else {\n params.$button_remove.hide();\n }\n\n params.$repeater_count_field.val(subs_to_show);\n\n};\nWpcf7cfRepeater.prototype.addSubs = function(subs_to_add) {\n var $ = jQuery;\n var params = this.params;\n var repeater = this;\n var form = repeater.form;\n\n\n var $repeater = params.$repeater; \n var $repeater_controls = params.$repeater_controls;\n\n //jQuery(params.repeater_sub_html.replace(/name=\"(.*?)\"/g,'name=\"wpcf7cf_repeater['+$repeater.id+']['+$repeater.num_subs+'][$1]\" data-original-name=\"$1\"')).hide().insertBefore($repeater_controls).animate(wpcf7cf_show_animation, params.wpcf7cf_settings.animation_intime);\n\n var html_str = '';\n\n for(var i=1; i<=subs_to_add; i++) {\n var sub_suffix = $repeater.num_subs+i;\n html_str += params.repeater_sub_html.replace(/\\{\\{repeater_sub_suffix\\}\\}/g,sub_suffix)\n .replace(new RegExp('\\{\\{'+$repeater.orig_id+'_index\\}\\}','g'),sub_suffix);\n }\n\n\n var $html = jQuery(html_str);\n\n // Add the newly created fields to the form\n $html.hide().insertBefore($repeater_controls).animate(wpcf7cf_show_animation, params.wpcf7cf_settings.animation_intime).trigger('wpcf7cf_repeater_added');\n\n jQuery('.wpcf7cf_repeater', $html).each(function(){\n form.repeaters.push(new Wpcf7cfRepeater(jQuery(this),form));\n });\n form.$input_repeaters.val(JSON.stringify(form.repeaters.map((item)=>item.params.$repeater.id)));\n\n $repeater.num_subs+= subs_to_add;\n\n window.wpcf7cf.updateMultistepState(form.multistep);\n form.updateGroups();\n form.updateEventListeners();\n form.displayFields();\n\n // Exclusive Checkbox\n $html.on( 'click', '.wpcf7-exclusive-checkbox input:checkbox', function() {\n var name = $( this ).attr( 'name' );\n $html.find( 'input:checkbox[name=\"' + name + '\"]' ).not( this ).prop( 'checked', false );\n } );\n\n //basic compatibility with material-design-for-contact-form-7\n if (typeof window.cf7mdInit === \"function\") {\n window.cf7mdInit();\n }\n\n return false;\n};\nWpcf7cfRepeater.prototype.removeSubs = function(num_subs) {\n var $ = jQuery;\n var params = this.params;\n var form = this.form;\n\n params.$repeater.num_subs-= num_subs;\n\n jQuery('> .wpcf7cf_repeater_sub',params.$repeater).slice(-num_subs).animate(wpcf7cf_hide_animation, {duration:params.wpcf7cf_settings.animation_intime, done:function() {\n var $this = jQuery(this);\n //remove the actual fields from the form\n $this.remove();\n params.$repeater.trigger('wpcf7cf_repeater_removed');\n window.wpcf7cf.updateMultistepState(form.multistep);\n form.updateGroups();\n form.updateEventListeners();\n form.displayFields();\n }});\n\n return false;\n};\n\nfunction Wpcf7cfMultistep($multistep, form) {\n var multistep = this;\n multistep.$multistep = $multistep;\n multistep.form = form;\n multistep.$steps = $multistep.find('.wpcf7cf_step');\n multistep.$btn_next = $multistep.find('.wpcf7cf_next');\n multistep.$btn_prev = $multistep.find('.wpcf7cf_prev');\n multistep.$dots = $multistep.find('.wpcf7cf_steps-dots');\n multistep.currentStep = 0;\n multistep.numSteps = multistep.$steps.length;\n\n\n multistep.$dots.html('');\n for (var i = 1; i <= multistep.numSteps; i++) {\n multistep.$dots.append(`\n <div class=\"dot\" data-step=\"${i}\">\n <div class=\"step-index\">${i}</div>\n <div class=\"step-title\">${multistep.$steps.eq(i-1).data('title')}</div>\n </div>\n `);\n }\n\n multistep.$btn_next.on('click.wpcf7cf_step', async function() {\n \n var result = await multistep.validateStep(multistep.currentStep);\n if (result === 'success') {\n multistep.moveToStep(multistep.currentStep+1); \n }\n\n });\n\n // If form is submitted (by pressing retrun for example), and if we are not on the last step,\n // then trigger click event on the $next button instead.\n multistep.form.$form.on('submit.wpcf7cf_step', function(e) {\n\n if (multistep.currentStep !== multistep.numSteps) {\n multistep.$btn_next.trigger('click.wpcf7cf_step');\n\n e.stopImmediatePropagation();\n return false;\n }\n });\n\n multistep.$btn_prev.click(function() {\n multistep.moveToStep(multistep.currentStep-1);\n });\n\n multistep.moveToStep(1);\n}\n\njQuery(document).ajaxComplete(function(e, xhr, settings){\n if (\n xhr.hasOwnProperty('responseJSON') &&\n xhr.responseJSON != null &&\n xhr.responseJSON.hasOwnProperty('status') &&\n xhr.responseJSON.hasOwnProperty('into') &&\n xhr.responseJSON.status === \"mail_success\"\n ) {\n jQuery( xhr.responseJSON.into ).trigger('reset.wpcf7cf');\n }\n});\n\nWpcf7cfMultistep.prototype.validateStep = function(step_index) {\n\n var multistep = this;\n var $multistep = multistep.$multistep;\n var $form = multistep.form.$form;\n\n $form.find('.wpcf7-response-output').addClass('wpcf7-display-none');\n\n return new Promise(resolve => {\n\n var fd = new FormData();\n\n // Make sure to add file fields to FormData\n jQuery.each($form.find('[data-id=\"step-'+step_index+'\"] input[type=\"file\"]'), function(index, el) {\n if (! el.files.length) return false;\n const file = el.files[0];\n const fieldName = el.name;\n fd.append(fieldName, file);\n });\n\n var formdata = $form.serializeArray();\n jQuery.each(formdata,function(key, input){\n fd.append(input.name, input.value);\n });\n\n jQuery.ajax({\n url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_validate_step',\n type: 'POST',\n data: fd,\n processData: false,\n contentType: false,\n dataType: 'json',\n }).done(function(json) {\n\n /*\n * Insert _form_data_id if 'json variable' has\n */\n // if (typeof json._cf7mls_db_form_data_id != 'undefined') {\n // if (!form.find('input[name=\"_cf7mls_db_form_data_id\"]').length) {\n // form.append('<input type=\"hidden\" name=\"_cf7mls_db_form_data_id\" value=\"'+json._cf7mls_db_form_data_id+'\" />');\n // }\n // }\n\n //reset error messages\n //$multistep.find('.wpcf7-form-control-wrap').removeClass('cf7mls-invalid');\n $multistep.find('.wpcf7-form-control-wrap .wpcf7-not-valid-tip').remove();\n $multistep.find('.wpcf7-not-valid').removeClass('wpcf7-not-valid');\n $multistep.find('.wpcf7-response-output').remove();\n $multistep.find('.wpcf7-response-output.wpcf7-validation-errors').removeClass('wpcf7-validation-errors');\n\n if (!json.success) {\n var checkError = 0;\n\n jQuery.each(json.invalid_fields, function(index, el) {\n if ($multistep.find('input[name=\"'+index+'\"]').length ||\n $multistep.find('input[name=\"'+index+'[]\"]').length ||\n $multistep.find('select[name=\"'+index+'\"]').length ||\n $multistep.find('select[name=\"'+index+'[]\"]').length ||\n $multistep.find('textarea[name=\"'+index+'\"]').length ||\n $multistep.find('textarea[name=\"'+index+'[]\"]').length\n ) {\n checkError = checkError + 1;\n\n var controlWrap = jQuery('.wpcf7-form-control-wrap.' + index, $form);\n //controlWrap.addClass('cf7mls-invalid');\n controlWrap.find('input').addClass('wpcf7-not-valid');\n controlWrap.find('span.wpcf7-not-valid-tip').remove();\n controlWrap.append('<span role=\"alert\" class=\"wpcf7-not-valid-tip\">' + el.reason + '</span>');\n\n //return false;\n }\n });\n\n resolve('failed');\n //$multistep.append('<div class=\"wpcf7-response-output wpcf7-display-none wpcf7-validation-errors\" style=\"display: block;\" role=\"alert\">' + json.message + '</div>');\n\n console.log($multistep.parent().find('.wpcf7-response-output'));\n $multistep.parent().find('.wpcf7-response-output').removeClass('wpcf7-display-none').html(json.message);\n\n } else if (json.success) {\n resolve('success');\n return false;\n }\n\n }).fail(function() {\n resolve('error');\n }).always(function() {\n // do nothing\n });\n });\n\n};\nWpcf7cfMultistep.prototype.moveToStep = function(step_index) {\n var multistep = this;\n var previousStep = multistep.currentStep;\n\n multistep.currentStep = step_index > multistep.numSteps ? multistep.numSteps\n : step_index < 1 ? 1\n : step_index;\n\n // ANIMATION DISABLED FOR NOW cause it's ugly\n // multistep.$steps.animate(wpcf7cf_hide_step_animation, multistep.form.settings.animation_outtime);\n // multistep.$steps.eq(multistep.currentStep-1).animate(wpcf7cf_show_step_animation, multistep.form.settings.animation_intime);\n\n multistep.$multistep.attr('data-current_step', multistep.currentStep);\n multistep.$steps.hide();\n multistep.$steps\n .eq(multistep.currentStep-1)\n .show()\n .trigger('wpcf7cf_change_step', [previousStep, multistep.currentStep]);\n\n const formEl = multistep.form.$form[0];\n const topOffset = formEl.getBoundingClientRect().top;\n if (topOffset < 0 && previousStep > 0) {\n formEl.scrollIntoView({behavior: \"smooth\"});\n }\n\n multistep.form.updateSummaryFields();\n\n window.wpcf7cf.updateMultistepState(multistep);\n};\n\nWpcf7cfMultistep.prototype.getFieldsInStep = function(step_index) {\n var simpleDom = window.wpcf7cf.get_simplified_dom_model(this.form.$form);\n var inStep = false;\n return simpleDom.filter(function(item, i) {\n if(item.type == 'step') {\n inStep = item.step == step_index+'';\n }\n return inStep && item.type == 'input';\n }).map(function(item) {\n return item.name;\n });\n};\n\n// END PRO ONLY\n\nwindow.wpcf7cf = {\n\n // keep this for backwards compatibility\n initForm : function($form) {\n wpcf7cf_forms.push(new Wpcf7cfForm($form));\n },\n\n get_nested_conditions : function(conditions, $current_form) {\n //loop trough conditions. Then loop trough the dom, and each repeater we pass we should update all sub_values we encounter with __index\n var simplified_dom = window.wpcf7cf.get_simplified_dom_model($current_form);\n var groups = simplified_dom.filter(function(item, i) {\n return item.type==='group';\n });\n\n var sub_conditions = [];\n\n for(var i = 0; i < groups.length; i++) {\n var g = groups[i];\n var relevant_conditions = conditions.filter(function(condition, i) {\n return condition.then_field === g.original_name;\n });\n \n var relevant_conditions = relevant_conditions.map(function(item,i) {\n return {\n then_field : g.name,\n and_rules : item.and_rules.map(function(and_rule, i) {\n return {\n if_field : and_rule.if_field+g.suffix,\n if_value : and_rule.if_value,\n operator : and_rule.operator\n };\n })\n }\n });\n\n sub_conditions = sub_conditions.concat(relevant_conditions);\n }\n return conditions.concat(sub_conditions);\n },\n\n get_simplified_dom_model : function($current_form) {\n // if the dom is something like:\n // <form>\n // <repeater ra>\n // <group ga__1>\n // <repeater rb__1>\n // <input txta__1__1 />\n // <input txta__1__2 />\n // </repeater>\n // <group gb__1>\n // <input txtb__1 />\n // </group>\n // </group>\n // <group ga__2>\n // <repeater rb__2>\n // <input txta__2__1 />\n // </repeater>\n // <group gb__2>\n // <input txtb__2 />\n // </group>\n // </group>\n // </repeater>\n // </form>\n // \n // return something like:\n // [{type:repeater, name:'ra', suffix: '__1'}, {type: group, name:'ga', suffix: '__1'}, ...]\n\n var currentNode;\n var ni = document.createNodeIterator($current_form[0], NodeFilter.SHOW_ELEMENT, null, false); //, NodeFilter.SHOW_ELEMENT, function(){ return NodeFilter.FILTER_ACCEPT; }\n\n var simplified_dom = [];\n\n while(currentNode = ni.nextNode()) {\n if (currentNode.classList.contains('wpcf7cf_repeater')) {\n simplified_dom.push({type:'repeater', name:currentNode.dataset.id, original_name:currentNode.dataset.orig_data_id})\n } else if (currentNode.dataset.class == 'wpcf7cf_group') {\n simplified_dom.push({type:'group', name:currentNode.dataset.id, original_name:currentNode.dataset.orig_data_id})\n } else if (currentNode.className == 'wpcf7cf_step') {\n simplified_dom.push({type:'step', name:currentNode.dataset.id, original_name:currentNode.dataset.id, step: currentNode.dataset.id.substring(5)})\n } else if (currentNode.hasAttribute('name')) {\n simplified_dom.push({type:'input', name:currentNode.getAttribute('name'), original_name:currentNode.getAttribute('data-orig_name')})\n }\n }\n\n simplified_dom = simplified_dom.map(function(item, i){\n var original_name_length = item.original_name == null ? item.name.length : item.original_name.length;\n item.suffix = item.name.substring(original_name_length);\n return item;\n });\n\n //console.table(simplified_dom);\n return simplified_dom;\n\n },\n\n updateMultistepState: function (multistep) {\n if (multistep == null) return;\n\n // update hidden input field\n\n var stepsData = {\n currentStep : multistep.currentStep,\n numSteps : multistep.numSteps,\n fieldsInCurrentStep : multistep.getFieldsInStep(multistep.currentStep)\n };\n multistep.form.$input_steps.val(JSON.stringify(stepsData));\n\n // update Buttons\n multistep.$btn_prev.removeClass('disabled');\n multistep.$btn_next.removeClass('disabled');\n if (multistep.currentStep == multistep.numSteps) {\n multistep.$btn_next.addClass('disabled');\n }\n if (multistep.currentStep == 1) {\n multistep.$btn_prev.addClass('disabled');\n }\n\n // replace next button with submit button on last step.\n // TODO: make this depend on a setting\n var $submit_button = multistep.form.$form.find('input[type=\"submit\"]').eq(0);\n var $ajax_loader = multistep.form.$form.find('.ajax-loader').eq(0);\n if (multistep.currentStep == multistep.numSteps) {\n multistep.$btn_next.hide();\n $ajax_loader.detach().appendTo(multistep.$btn_next.parent());\n $submit_button.detach().appendTo(multistep.$btn_next.parent());\n $submit_button.show();\n } else {\n $submit_button.hide();\n multistep.$btn_next.show();\n }\n\n // update dots\n var $dots = multistep.$dots.find('.dot');\n $dots.removeClass('active').removeClass('completed');\n for(var step = 1; step <= multistep.numSteps; step++) {\n if (step < multistep.currentStep) {\n $dots.eq(step-1).addClass('completed');\n } else if (step == multistep.currentStep) {\n $dots.eq(step-1).addClass('active');\n }\n }\n\n },\n\n should_group_be_shown : function(condition, $current_form) {\n\n var $ = jQuery;\n\n var show_group = true;\n\n for (var and_rule_i = 0; and_rule_i < condition.and_rules.length; and_rule_i++) {\n\n var condition_ok = false;\n\n var condition_and_rule = condition.and_rules[and_rule_i];\n\n var $field = jQuery('[name=\"' + condition_and_rule.if_field + '\"], [name=\"' + condition_and_rule.if_field + '[]\"], [data-original-name=\"' + condition_and_rule.if_field + '\"], [data-original-name=\"' + condition_and_rule.if_field + '[]\"]',$current_form);\n\n var if_val = condition_and_rule.if_value;\n var if_val_as_number = isFinite(parseFloat(if_val)) ? parseFloat(if_val):0;\n var operator = condition_and_rule.operator;\n \n var regex_patt = /.*/i; // fallback regex pattern\n var isValidRegex = true;\n try {\n regex_patt = new RegExp(if_val, 'i');\n } catch(e) {\n isValidRegex = false;\n }\n\n\n //backwards compat\n operator = operator === '≤' ? 'less than or equals' : operator;\n operator = operator === '≥' ? 'greater than or equals' : operator;\n operator = operator === '>' ? 'greater than' : operator;\n operator = operator === '<' ? 'less than' : operator;\n\n\n if ( $field.is(':checkbox') || $field.is(':radio') ) {\n\n var all_values = [];\n var checked_values = [];\n $field.each(function () {\n all_values.push(jQuery(this).val());\n if (jQuery(this).is(':checked')) {\n checked_values.push(jQuery(this).val());\n }\n });\n\n condition_ok = this.isConditionTrue(checked_values,operator,if_val,$field);\n \n } else {\n \n condition_ok = this.isConditionTrue($field.val(),operator,if_val,$field);\n }\n\n show_group = show_group && condition_ok;\n }\n\n return show_group;\n\n },\n isConditionTrue(values, operator, testValue='', $field=jQuery()) {\n\n if (!Array.isArray(values)) {\n values = [values];\n }\n\n let condition_ok = false; // start by assuming that the condition is not met\n\n if (!values || values.length == 0 || values.every((v) => !v||0)) { // no values or only empty values passed (0 is not considered empty)\n if (operator === 'is empty') {\n condition_ok = true;\n }\n if (operator === 'not empty') {\n condition_ok = false;\n }\n } else {\n if (operator === 'is empty') {\n condition_ok = false;\n }\n if (operator === 'not empty') {\n condition_ok = true;\n }\n }\n\n const testValueNumber = isFinite(parseFloat(testValue)) ? parseFloat(testValue) : NaN;\n\n\n if (operator === 'not equals' || operator === 'not equals (regex)') {\n // start by assuming that the condition is met\n condition_ok = true;\n }\n\n if (\n operator === 'function'\n && typeof window[testValue] == 'function'\n && window[testValue]($field) // here we call the actual user defined function\n ) {\n condition_ok = true;\n }\n\n let regex_patt = /.*/i; // fallback regex pattern\n let isValidRegex = true;\n if (operator === 'equals (regex)' || operator === 'not equals (regex)') {\n try {\n regex_patt = new RegExp(testValue, 'i');\n } catch(e) {\n isValidRegex = false;\n }\n }\n\n\n for(let i = 0; i < values.length; i++) {\n\n const value = values[i];\n\n const valueNumber = isFinite(parseFloat(value)) ? parseFloat(value) : NaN;\n const valsAreNumbers = !isNaN(valueNumber) && !isNaN(testValueNumber);\n\n if (\n\n operator === 'equals' && value === testValue ||\n operator === 'equals (regex)' && regex_patt.test(value) ||\n operator === 'greater than' && valsAreNumbers && valueNumber > testValueNumber ||\n operator === 'less than' && valsAreNumbers && valueNumber < testValueNumber ||\n operator === 'greater than or equals' && valsAreNumbers && valueNumber >= testValueNumber ||\n operator === 'less than or equals' && valsAreNumbers && valueNumber <= testValueNumber\n \n ) {\n\n condition_ok = true;\n break;\n\n } else if (\n\n operator === 'not equals' && value === testValue ||\n operator === 'not equals (regex)' && regex_patt.test(value)\n\n ) {\n\n condition_ok = false;\n break;\n\n }\n }\n\n return condition_ok;\n\n }\n\n};\n\n\n\n\njQuery('.wpcf7-form').each(function(){\n wpcf7cf_forms.push(new Wpcf7cfForm(jQuery(this)));\n});\n\n// Call displayFields again on all forms\n// Necessary in case some theme or plugin changed a form value by the time the entire page is fully loaded.\njQuery('document').ready(function() {\n wpcf7cf_forms.forEach(function(f){\n f.displayFields();\n });\n});\n\n// fix for exclusive checkboxes in IE (this will call the change-event again after all other checkboxes are unchecked, triggering the display_fields() function)\nvar old_wpcf7ExclusiveCheckbox = jQuery.fn.wpcf7ExclusiveCheckbox;\njQuery.fn.wpcf7ExclusiveCheckbox = function() {\n return this.find('input:checkbox').click(function() {\n var name = jQuery(this).attr('name');\n jQuery(this).closest('form').find('input:checkbox[name=\"' + name + '\"]').not(this).prop('checked', false).eq(0).change();\n });\n};\n\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;","module.exports = require(\"regenerator-runtime\");\n","/*!\n * jQuery JavaScript Library v3.5.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-04-10T15:07Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML <object> elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.5.0\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = parseInt( trStyle.height ) > 3;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tif ( typeof props.top === \"number\" ) {\n\t\t\t\tprops.top += \"px\";\n\t\t\t}\n\t\t\tif ( typeof props.left === \"number\" ) {\n\t\t\t\tprops.left += \"px\";\n\t\t\t}\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t} );\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTry
|
|