From 2aaa48aa8003645c5087f8fd966faa642ec5b8b9 Mon Sep 17 00:00:00 2001 From: Lester Caine Date: Mon, 18 May 2026 09:05:53 +0100 Subject: Remove legacy code --- js/jquery-migrate-3.5.2.js | 1031 -- js/jquery-ui-14.1.js | 18815 ------------------------------ js/jquery-ui.css | 1953 ---- js/jquery-ui.js | 44 - js/jquery224.js | 15 - smartyplugins/function.jscalendar.php | 63 - smartyplugins/function.spellchecker.php | 23 - 7 files changed, 21944 deletions(-) delete mode 100755 js/jquery-migrate-3.5.2.js delete mode 100755 js/jquery-ui-14.1.js delete mode 100755 js/jquery-ui.css delete mode 100755 js/jquery-ui.js delete mode 100755 js/jquery224.js delete mode 100755 smartyplugins/function.jscalendar.php delete mode 100755 smartyplugins/function.spellchecker.php diff --git a/js/jquery-migrate-3.5.2.js b/js/jquery-migrate-3.5.2.js deleted file mode 100755 index 91ba673..0000000 --- a/js/jquery-migrate-3.5.2.js +++ /dev/null @@ -1,1031 +0,0 @@ -/*! - * jQuery Migrate - v3.5.2 - 2024-07-17T22:31Z - * Copyright OpenJS Foundation and other contributors - */ -(function(factory) { - "use strict"; - - if (typeof define === "function" && define.amd) { - - // AMD. Register as an anonymous module. - define(["jquery"], function(jQuery) { - return factory(jQuery, window); - }); - } else if (typeof module === "object" && module.exports) { - - // Node/CommonJS - // eslint-disable-next-line no-undef - module.exports = factory(require("jquery"), window); - } else { - - // Browser globals - factory(jQuery, window); - } -})(function(jQuery, window) { - "use strict"; - - jQuery.migrateVersion = "3.5.2"; - - // Returns 0 if v1 == v2, -1 if v1 < v2, 1 if v1 > v2 - function compareVersions(v1, v2) { - var i, - rVersionParts = /^(\d+)\.(\d+)\.(\d+)/, - v1p = rVersionParts.exec(v1) || [], - v2p = rVersionParts.exec(v2) || []; - - for (i = 1; i <= 3; i++) { - if (+v1p[i] > +v2p[i]) { - return 1; - } - if (+v1p[i] < +v2p[i]) { - return -1; - } - } - return 0; - } - - function jQueryVersionSince(version) { - return compareVersions(jQuery.fn.jquery, version) >= 0; - } - - // A map from disabled patch codes to `true`. This should really - // be a `Set` but those are unsupported in IE. - var disabledPatches = Object.create(null); - - // Don't apply patches for specified codes. Helpful for code bases - // where some Migrate warnings have been addressed and it's desirable - // to avoid needless patches or false positives. - jQuery.migrateDisablePatches = function() { - var i; - for (i = 0; i < arguments.length; i++) { - disabledPatches[arguments[i]] = true; - } - }; - - // Allow enabling patches disabled via `jQuery.migrateDisablePatches`. - // Helpful if you want to disable a patch only for some code that won't - // be updated soon to be able to focus on other warnings - and enable it - // immediately after such a call: - // ```js - // jQuery.migrateDisablePatches( "workaroundA" ); - // elem.pluginViolatingWarningA( "pluginMethod" ); - // jQuery.migrateEnablePatches( "workaroundA" ); - // ``` - jQuery.migrateEnablePatches = function() { - var i; - for (i = 0; i < arguments.length; i++) { - delete disabledPatches[arguments[i]]; - } - }; - - jQuery.migrateIsPatchEnabled = function(patchCode) { - return !disabledPatches[patchCode]; - }; - - (function() { - - // Support: IE9 only - // IE9 only creates console object when dev tools are first opened - // IE9 console is a host object, callable but doesn't have .apply() - if (!window.console || !window.console.log) { - return; - } - - // Need jQuery 3.x-4.x and no older Migrate loaded - if (!jQuery || !jQueryVersionSince("3.0.0") || - jQueryVersionSince("5.0.0")) { - window.console.log("JQMIGRATE: jQuery 3.x-4.x REQUIRED"); - } - if (jQuery.migrateWarnings) { - window.console.log("JQMIGRATE: Migrate plugin loaded multiple times"); - } - - // Show a message on the console so devs know we're active - window.console.log("JQMIGRATE: Migrate is installed" + - (jQuery.migrateMute ? "" : " with logging active") + - ", version " + jQuery.migrateVersion); - - })(); - - var warnedAbout = {}; - - // By default each warning is only reported once. - jQuery.migrateDeduplicateWarnings = true; - - // List of warnings already given; public read only - jQuery.migrateWarnings = []; - - // Set to false to disable traces that appear with warnings - if (jQuery.migrateTrace === undefined) { - jQuery.migrateTrace = true; - } - - // Forget any warnings we've already given; public - jQuery.migrateReset = function() { - warnedAbout = {}; - jQuery.migrateWarnings.length = 0; - }; - - function migrateWarn(code, msg) { - var console = window.console; - if (jQuery.migrateIsPatchEnabled(code) && - (!jQuery.migrateDeduplicateWarnings || !warnedAbout[msg])) { - warnedAbout[msg] = true; - jQuery.migrateWarnings.push(msg + " [" + code + "]"); - if (console && console.warn && !jQuery.migrateMute) { - console.warn("JQMIGRATE: " + msg); - if (jQuery.migrateTrace && console.trace) { - console.trace(); - } - } - } - } - - function migrateWarnProp(obj, prop, value, code, msg) { - Object.defineProperty(obj, prop, { - configurable: true, - enumerable: true, - get: function() { - migrateWarn(code, msg); - return value; - }, - set: function(newValue) { - migrateWarn(code, msg); - value = newValue; - } - }); - } - - function migrateWarnFuncInternal(obj, prop, newFunc, code, msg) { - var finalFunc, - origFunc = obj[prop]; - - obj[prop] = function() { - - // If `msg` not provided, do not warn; more sophisticated warnings - // logic is most likely embedded in `newFunc`, in that case here - // we just care about the logic choosing the proper implementation - // based on whether the patch is disabled or not. - if (msg) { - migrateWarn(code, msg); - } - - // Since patches can be disabled & enabled dynamically, we - // need to decide which implementation to run on each invocation. - finalFunc = jQuery.migrateIsPatchEnabled(code) ? - newFunc : - - // The function may not have existed originally so we need a fallback. - (origFunc || jQuery.noop); - - return finalFunc.apply(this, arguments); - }; - } - - function migratePatchAndWarnFunc(obj, prop, newFunc, code, msg) { - if (!msg) { - throw new Error("No warning message provided"); - } - return migrateWarnFuncInternal(obj, prop, newFunc, code, msg); - } - - function migratePatchFunc(obj, prop, newFunc, code) { - return migrateWarnFuncInternal(obj, prop, newFunc, code); - } - - if (window.document.compatMode === "BackCompat") { - - // jQuery has never supported or tested Quirks Mode - migrateWarn("quirks", "jQuery is not compatible with Quirks Mode"); - } - - var findProp, - class2type = {}, - oldInit = jQuery.fn.init, - oldFind = jQuery.find, - - rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/, - rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g, - - // Require that the "whitespace run" starts from a non-whitespace - // to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. - rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; - - migratePatchFunc(jQuery.fn, "init", function(arg1) { - var args = Array.prototype.slice.call(arguments); - - if (jQuery.migrateIsPatchEnabled("selector-empty-id") && - typeof arg1 === "string" && arg1 === "#") { - - // JQuery( "#" ) is a bogus ID selector, but it returned an empty set - // before jQuery 3.0 - migrateWarn("selector-empty-id", "jQuery( '#' ) is not a valid selector"); - args[0] = []; - } - - return oldInit.apply(this, args); - }, "selector-empty-id"); - - // This is already done in Core but the above patch will lose this assignment - // so we need to redo it. It doesn't matter whether the patch is enabled or not - // as the method is always going to be a Migrate-created wrapper. - jQuery.fn.init.prototype = jQuery.fn; - - migratePatchFunc(jQuery, "find", function(selector) { - var args = Array.prototype.slice.call(arguments); - - // Support: PhantomJS 1.x - // String#match fails to match when used with a //g RegExp, only on some strings - if (typeof selector === "string" && rattrHashTest.test(selector)) { - - // The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0 - // First see if qS thinks it's a valid selector, if so avoid a false positive - try { - window.document.querySelector(selector); - } catch (err1) { - - // Didn't *look* valid to qSA, warn and try quoting what we think is the value - selector = selector.replace(rattrHashGlob, function(_, attr, op, value) { - return "[" + attr + op + "\"" + value + "\"]"; - }); - - // If the regexp *may* have created an invalid selector, don't update it - // Note that there may be false alarms if selector uses jQuery extensions - try { - window.document.querySelector(selector); - migrateWarn("selector-hash", - "Attribute selector with '#' must be quoted: " + args[0]); - args[0] = selector; - } catch (err2) { - migrateWarn("selector-hash", - "Attribute selector with '#' was not fixed: " + args[0]); - } - } - } - - return oldFind.apply(this, args); - }, "selector-hash"); - - // Copy properties attached to original jQuery.find method (e.g. .attr, .isXML) - for (findProp in oldFind) { - if (Object.prototype.hasOwnProperty.call(oldFind, findProp)) { - jQuery.find[findProp] = oldFind[findProp]; - } - } - - // The number of elements contained in the matched element set - migratePatchAndWarnFunc(jQuery.fn, "size", function() { - return this.length; - }, "size", - "jQuery.fn.size() is deprecated and removed; use the .length property"); - - migratePatchAndWarnFunc(jQuery, "parseJSON", function() { - return JSON.parse.apply(null, arguments); - }, "parseJSON", - "jQuery.parseJSON is deprecated; use JSON.parse"); - - migratePatchAndWarnFunc(jQuery, "holdReady", jQuery.holdReady, - "holdReady", "jQuery.holdReady is deprecated"); - - migratePatchAndWarnFunc(jQuery, "unique", jQuery.uniqueSort, - "unique", "jQuery.unique is deprecated; use jQuery.uniqueSort"); - - // Now jQuery.expr.pseudos is the standard incantation - migrateWarnProp(jQuery.expr, "filters", jQuery.expr.pseudos, "expr-pre-pseudos", - "jQuery.expr.filters is deprecated; use jQuery.expr.pseudos"); - migrateWarnProp(jQuery.expr, ":", jQuery.expr.pseudos, "expr-pre-pseudos", - "jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos"); - - // Prior to jQuery 3.1.1 there were internal refs so we don't warn there - if (jQueryVersionSince("3.1.1")) { - migratePatchAndWarnFunc(jQuery, "trim", function(text) { - return text == null ? - "" : - (text + "").replace(rtrim, "$1"); - }, "trim", - "jQuery.trim is deprecated; use String.prototype.trim"); - } - - // Prior to jQuery 3.2 there were internal refs so we don't warn there - if (jQueryVersionSince("3.2.0")) { - migratePatchAndWarnFunc(jQuery, "nodeName", function(elem, name) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, "nodeName", - "jQuery.nodeName is deprecated"); - - migratePatchAndWarnFunc(jQuery, "isArray", Array.isArray, "isArray", - "jQuery.isArray is deprecated; use Array.isArray" - ); - } - - if (jQueryVersionSince("3.3.0")) { - - migratePatchAndWarnFunc(jQuery, "isNumeric", - function(obj) { - - // As of jQuery 3.0, isNumeric is limited to - // strings and numbers (primitives or objects) - // that can be coerced to finite numbers (gh-2662) - var type = typeof obj; - return (type === "number" || type === "string") && - - // parseFloat NaNs numeric-cast false positives ("") - // ...but misinterprets leading-number strings, e.g. hex literals ("0x...") - // subtraction forces infinities to NaN - !isNaN(obj - parseFloat(obj)); - }, "isNumeric", - "jQuery.isNumeric() is deprecated" - ); - - // Populate the class2type map - jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol". - split(" "), - function(_, name) { - class2type["[object " + name + "]"] = name.toLowerCase(); - }); - - migratePatchAndWarnFunc(jQuery, "type", function(obj) { - if (obj == null) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[Object.prototype.toString.call(obj)] || "object" : - typeof obj; - }, "type", - "jQuery.type is deprecated"); - - migratePatchAndWarnFunc(jQuery, "isFunction", - function(obj) { - return typeof obj === "function"; - }, "isFunction", - "jQuery.isFunction() is deprecated"); - - migratePatchAndWarnFunc(jQuery, "isWindow", - function(obj) { - return obj != null && obj === obj.window; - }, "isWindow", - "jQuery.isWindow() is deprecated" - ); - } - - // Support jQuery slim which excludes the ajax module - if (jQuery.ajax) { - - var oldAjax = jQuery.ajax, - rjsonp = /(=)\?(?=&|$)|\?\?/; - - migratePatchFunc(jQuery, "ajax", function() { - var jQXHR = oldAjax.apply(this, arguments); - - // Be sure we got a jQXHR (e.g., not sync) - if (jQXHR.promise) { - migratePatchAndWarnFunc(jQXHR, "success", jQXHR.done, "jqXHR-methods", - "jQXHR.success is deprecated and removed"); - migratePatchAndWarnFunc(jQXHR, "error", jQXHR.fail, "jqXHR-methods", - "jQXHR.error is deprecated and removed"); - migratePatchAndWarnFunc(jQXHR, "complete", jQXHR.always, "jqXHR-methods", - "jQXHR.complete is deprecated and removed"); - } - - return jQXHR; - }, "jqXHR-methods"); - - // Only trigger the logic in jQuery <4 as the JSON-to-JSONP auto-promotion - // behavior is gone in jQuery 4.0 and as it has security implications, we don't - // want to restore the legacy behavior. - if (!jQueryVersionSince("4.0.0")) { - - // Register this prefilter before the jQuery one. Otherwise, a promoted - // request is transformed into one with the script dataType and we can't - // catch it anymore. - jQuery.ajaxPrefilter("+json", function(s) { - - // Warn if JSON-to-JSONP auto-promotion happens. - if (s.jsonp !== false && (rjsonp.test(s.url) || - typeof s.data === "string" && - (s.contentType || "") - .indexOf("application/x-www-form-urlencoded") === 0 && - rjsonp.test(s.data) - )) { - migrateWarn("jsonp-promotion", "JSON-to-JSONP auto-promotion is deprecated"); - } - }); - } - - } - - var oldRemoveAttr = jQuery.fn.removeAttr, - oldToggleClass = jQuery.fn.toggleClass, - rbooleans = /^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$/i, - rmatchNonSpace = /\S+/g; - - migratePatchFunc(jQuery.fn, "removeAttr", function(name) { - var self = this, - patchNeeded = false; - - jQuery.each(name.match(rmatchNonSpace), function(_i, attr) { - if (rbooleans.test(attr)) { - - // Only warn if at least a single node had the property set to - // something else than `false`. Otherwise, this Migrate patch - // doesn't influence the behavior and there's no need to set or warn. - self.each(function() { - if (jQuery(this).prop(attr) !== false) { - patchNeeded = true; - return false; - } - }); - } - - if (patchNeeded) { - migrateWarn("removeAttr-bool", - "jQuery.fn.removeAttr no longer sets boolean properties: " + attr); - self.prop(attr, false); - } - }); - - return oldRemoveAttr.apply(this, arguments); - }, "removeAttr-bool"); - - migratePatchFunc(jQuery.fn, "toggleClass", function(state) { - - // Only deprecating no-args or single boolean arg - if (state !== undefined && typeof state !== "boolean") { - - return oldToggleClass.apply(this, arguments); - } - - migrateWarn("toggleClass-bool", "jQuery.fn.toggleClass( boolean ) is deprecated"); - - // Toggle entire class name of each element - return this.each(function() { - var className = this.getAttribute && this.getAttribute("class") || ""; - - if (className) { - jQuery.data(this, "__className__", className); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if (this.setAttribute) { - this.setAttribute("class", - className || state === false ? - "" : - jQuery.data(this, "__className__") || "" - ); - } - }); - }, "toggleClass-bool"); - - function camelCase(string) { - return string.replace(/-([a-z])/g, function(_, letter) { - return letter.toUpperCase(); - }); - } - - var origFnCss, internalCssNumber, - internalSwapCall = false, - ralphaStart = /^[a-z]/, - - // The regex visualized: - // - // /----------\ - // | | /-------\ - // | / Top \ | | | - // /--- Border ---+-| Right |-+---+- Width -+---\ - // | | Bottom | | - // | \ Left / | - // | | - // | /----------\ | - // | /-------------\ | | |- END - // | | | | / Top \ | | - // | | / Margin \ | | | Right | | | - // |---------+-| |-+---+-| Bottom |-+----| - // | \ Padding / \ Left / | - // BEGIN -| | - // | /---------\ | - // | | | | - // | | / Min \ | / Width \ | - // \--------------+-| |-+---| |---/ - // \ Max / \ Height / - rautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/; - - // If this version of jQuery has .swap(), don't false-alarm on internal uses - if (jQuery.swap) { - jQuery.each(["height", "width", "reliableMarginRight"], function(_, name) { - var oldHook = jQuery.cssHooks[name] && jQuery.cssHooks[name].get; - - if (oldHook) { - jQuery.cssHooks[name].get = function() { - var ret; - - internalSwapCall = true; - ret = oldHook.apply(this, arguments); - internalSwapCall = false; - return ret; - }; - } - }); - } - - migratePatchFunc(jQuery, "swap", function(elem, options, callback, args) { - var ret, name, - old = {}; - - if (!internalSwapCall) { - migrateWarn("swap", "jQuery.swap() is undocumented and deprecated"); - } - - // Remember the old values, and insert the new ones - for (name in options) { - old[name] = elem.style[name]; - elem.style[name] = options[name]; - } - - ret = callback.apply(elem, args || []); - - // Revert the old values - for (name in options) { - elem.style[name] = old[name]; - } - - return ret; - }, "swap"); - - if (jQueryVersionSince("3.4.0") && typeof Proxy !== "undefined") { - jQuery.cssProps = new Proxy(jQuery.cssProps || {}, { - set: function() { - migrateWarn("cssProps", "jQuery.cssProps is deprecated"); - return Reflect.set.apply(this, arguments); - } - }); - } - - // In jQuery >=4 where jQuery.cssNumber is missing fill it with the latest 3.x version: - // https://github.com/jquery/jquery/blob/3.7.1/src/css.js#L216-L246 - // This way, number values for the CSS properties below won't start triggering - // Migrate warnings when jQuery gets updated to >=4.0.0 (gh-438). - if (jQueryVersionSince("4.0.0")) { - - // We need to keep this as a local variable as we need it internally - // in a `jQuery.fn.css` patch and this usage shouldn't warn. - internalCssNumber = { - animationIterationCount: true, - aspectRatio: true, - borderImageSlice: true, - columnCount: true, - flexGrow: true, - flexShrink: true, - fontWeight: true, - gridArea: true, - gridColumn: true, - gridColumnEnd: true, - gridColumnStart: true, - gridRow: true, - gridRowEnd: true, - gridRowStart: true, - lineHeight: true, - opacity: true, - order: true, - orphans: true, - scale: true, - widows: true, - zIndex: true, - zoom: true, - - // SVG-related - fillOpacity: true, - floodOpacity: true, - stopOpacity: true, - strokeMiterlimit: true, - strokeOpacity: true - }; - - if (typeof Proxy !== "undefined") { - jQuery.cssNumber = new Proxy(internalCssNumber, { - get: function() { - migrateWarn("css-number", "jQuery.cssNumber is deprecated"); - return Reflect.get.apply(this, arguments); - }, - set: function() { - migrateWarn("css-number", "jQuery.cssNumber is deprecated"); - return Reflect.set.apply(this, arguments); - } - }); - } else { - - // Support: IE 9-11+ - // IE doesn't support proxies, but we still want to restore the legacy - // jQuery.cssNumber there. - jQuery.cssNumber = internalCssNumber; - } - } else { - - // Make `internalCssNumber` defined for jQuery <4 as well as it's needed - // in the `jQuery.fn.css` patch below. - internalCssNumber = jQuery.cssNumber; - } - - function isAutoPx(prop) { - - // The first test is used to ensure that: - // 1. The prop starts with a lowercase letter (as we uppercase it for the second regex). - // 2. The prop is not empty. - return ralphaStart.test(prop) && - rautoPx.test(prop[0].toUpperCase() + prop.slice(1)); - } - - origFnCss = jQuery.fn.css; - - migratePatchFunc(jQuery.fn, "css", function(name, value) { - var camelName, - origThis = this; - - if (name && typeof name === "object" && !Array.isArray(name)) { - jQuery.each(name, function(n, v) { - jQuery.fn.css.call(origThis, n, v); - }); - return this; - } - - if (typeof value === "number") { - camelName = camelCase(name); - - // Use `internalCssNumber` to avoid triggering our warnings in this - // internal check. - if (!isAutoPx(camelName) && !internalCssNumber[camelName]) { - migrateWarn("css-number", - "Number-typed values are deprecated for jQuery.fn.css( \"" + - name + "\", value )"); - } - } - - return origFnCss.apply(this, arguments); - }, "css-number"); - - var origData = jQuery.data; - - migratePatchFunc(jQuery, "data", function(elem, name, value) { - var curData, sameKeys, key; - - // Name can be an object, and each entry in the object is meant to be set as data - if (name && typeof name === "object" && arguments.length === 2) { - - curData = jQuery.hasData(elem) && origData.call(this, elem); - sameKeys = {}; - for (key in name) { - if (key !== camelCase(key)) { - migrateWarn("data-camelCase", - "jQuery.data() always sets/gets camelCased names: " + key); - curData[key] = name[key]; - } else { - sameKeys[key] = name[key]; - } - } - - origData.call(this, elem, sameKeys); - - return name; - } - - // If the name is transformed, look for the un-transformed name in the data object - if (name && typeof name === "string" && name !== camelCase(name)) { - - curData = jQuery.hasData(elem) && origData.call(this, elem); - if (curData && name in curData) { - migrateWarn("data-camelCase", - "jQuery.data() always sets/gets camelCased names: " + name); - if (arguments.length > 2) { - curData[name] = value; - } - return curData[name]; - } - } - - return origData.apply(this, arguments); - }, "data-camelCase"); - - // Support jQuery slim which excludes the effects module - if (jQuery.fx) { - - var intervalValue, intervalMsg, - oldTweenRun = jQuery.Tween.prototype.run, - linearEasing = function(pct) { - return pct; - }; - - migratePatchFunc(jQuery.Tween.prototype, "run", function() { - if (jQuery.easing[this.easing].length > 1) { - migrateWarn( - "easing-one-arg", - "'jQuery.easing." + this.easing.toString() + "' should use only one argument" - ); - - jQuery.easing[this.easing] = linearEasing; - } - - oldTweenRun.apply(this, arguments); - }, "easing-one-arg"); - - intervalValue = jQuery.fx.interval; - intervalMsg = "jQuery.fx.interval is deprecated"; - - // Support: IE9, Android <=4.4 - // Avoid false positives on browsers that lack rAF - // Don't warn if document is hidden, jQuery uses setTimeout (#292) - if (window.requestAnimationFrame) { - Object.defineProperty(jQuery.fx, "interval", { - configurable: true, - enumerable: true, - get: function() { - if (!window.document.hidden) { - migrateWarn("fx-interval", intervalMsg); - } - - // Only fallback to the default if patch is enabled - if (!jQuery.migrateIsPatchEnabled("fx-interval")) { - return intervalValue; - } - return intervalValue === undefined ? 13 : intervalValue; - }, - set: function(newValue) { - migrateWarn("fx-interval", intervalMsg); - intervalValue = newValue; - } - }); - } - - } - - var oldLoad = jQuery.fn.load, - oldEventAdd = jQuery.event.add, - originalFix = jQuery.event.fix; - - jQuery.event.props = []; - jQuery.event.fixHooks = {}; - - migrateWarnProp(jQuery.event.props, "concat", jQuery.event.props.concat, - "event-old-patch", - "jQuery.event.props.concat() is deprecated and removed"); - - migratePatchFunc(jQuery.event, "fix", function(originalEvent) { - var event, - type = originalEvent.type, - fixHook = this.fixHooks[type], - props = jQuery.event.props; - - if (props.length) { - migrateWarn("event-old-patch", - "jQuery.event.props are deprecated and removed: " + props.join()); - while (props.length) { - jQuery.event.addProp(props.pop()); - } - } - - if (fixHook && !fixHook._migrated_) { - fixHook._migrated_ = true; - migrateWarn("event-old-patch", - "jQuery.event.fixHooks are deprecated and removed: " + type); - if ((props = fixHook.props) && props.length) { - while (props.length) { - jQuery.event.addProp(props.pop()); - } - } - } - - event = originalFix.call(this, originalEvent); - - return fixHook && fixHook.filter ? - fixHook.filter(event, originalEvent) : - event; - }, "event-old-patch"); - - migratePatchFunc(jQuery.event, "add", function(elem, types) { - - // This misses the multiple-types case but that seems awfully rare - if (elem === window && types === "load" && window.document.readyState === "complete") { - migrateWarn("load-after-event", - "jQuery(window).on('load'...) called after load event occurred"); - } - return oldEventAdd.apply(this, arguments); - }, "load-after-event"); - - jQuery.each(["load", "unload", "error"], function(_, name) { - - migratePatchFunc(jQuery.fn, name, function() { - var args = Array.prototype.slice.call(arguments, 0); - - // If this is an ajax load() the first arg should be the string URL; - // technically this could also be the "Anything" arg of the event .load() - // which just goes to show why this dumb signature has been deprecated! - // jQuery custom builds that exclude the Ajax module justifiably die here. - if (name === "load" && typeof args[0] === "string") { - return oldLoad.apply(this, args); - } - - migrateWarn("shorthand-removed-v3", - "jQuery.fn." + name + "() is deprecated"); - - args.splice(0, 0, name); - if (arguments.length) { - return this.on.apply(this, args); - } - - // Use .triggerHandler here because: - // - load and unload events don't need to bubble, only applied to window or image - // - error event should not bubble to window, although it does pre-1.7 - // See http://bugs.jquery.com/ticket/11820 - this.triggerHandler.apply(this, args); - return this; - }, "shorthand-removed-v3"); - - }); - - 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) { - - // Handle event binding - migratePatchAndWarnFunc(jQuery.fn, name, function(data, fn) { - return arguments.length > 0 ? - this.on(name, null, data, fn) : - this.trigger(name); - }, - "shorthand-deprecated-v3", - "jQuery.fn." + name + "() event shorthand is deprecated"); - }); - - // Trigger "ready" event only once, on document ready - jQuery(function() { - jQuery(window.document).triggerHandler("ready"); - }); - - jQuery.event.special.ready = { - setup: function() { - if (this === window.document) { - migrateWarn("ready-event", "'ready' event is deprecated"); - } - } - }; - - migratePatchAndWarnFunc(jQuery.fn, "bind", function(types, data, fn) { - return this.on(types, null, data, fn); - }, "pre-on-methods", "jQuery.fn.bind() is deprecated"); - migratePatchAndWarnFunc(jQuery.fn, "unbind", function(types, fn) { - return this.off(types, null, fn); - }, "pre-on-methods", "jQuery.fn.unbind() is deprecated"); - migratePatchAndWarnFunc(jQuery.fn, "delegate", function(selector, types, data, fn) { - return this.on(types, selector, data, fn); - }, "pre-on-methods", "jQuery.fn.delegate() is deprecated"); - migratePatchAndWarnFunc(jQuery.fn, "undelegate", function(selector, types, fn) { - return arguments.length === 1 ? - this.off(selector, "**") : - this.off(types, selector || "**", fn); - }, "pre-on-methods", "jQuery.fn.undelegate() is deprecated"); - migratePatchAndWarnFunc(jQuery.fn, "hover", function(fnOver, fnOut) { - return this.on("mouseenter", fnOver).on("mouseleave", fnOut || fnOver); - }, "pre-on-methods", "jQuery.fn.hover() is deprecated"); - - var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - makeMarkup = function(html) { - var doc = window.document.implementation.createHTMLDocument(""); - doc.body.innerHTML = html; - return doc.body && doc.body.innerHTML; - }, - warnIfChanged = function(html) { - var changed = html.replace(rxhtmlTag, "<$1>"); - if (changed !== html && makeMarkup(html) !== makeMarkup(changed)) { - migrateWarn("self-closed-tags", - "HTML tags must be properly nested and closed: " + html); - } - }; - - /** - * Deprecated, please use `jQuery.migrateDisablePatches( "self-closed-tags" )` instead. - * @deprecated - */ - migratePatchAndWarnFunc(jQuery, "UNSAFE_restoreLegacyHtmlPrefilter", function() { - jQuery.migrateEnablePatches("self-closed-tags"); - }, "legacy-self-closed-tags", - "jQuery.UNSAFE_restoreLegacyHtmlPrefilter deprecated; use " + - "`jQuery.migrateEnablePatches( \"self-closed-tags\" )`"); - - migratePatchFunc(jQuery, "htmlPrefilter", function(html) { - warnIfChanged(html); - return html.replace(rxhtmlTag, "<$1>"); - }, "self-closed-tags"); - - // This patch needs to be disabled by default as it re-introduces - // security issues (CVE-2020-11022, CVE-2020-11023). - jQuery.migrateDisablePatches("self-closed-tags"); - - var origOffset = jQuery.fn.offset; - - migratePatchFunc(jQuery.fn, "offset", function() { - var elem = this[0]; - - if (elem && (!elem.nodeType || !elem.getBoundingClientRect)) { - migrateWarn("offset-valid-elem", "jQuery.fn.offset() requires a valid DOM element"); - return arguments.length ? this : undefined; - } - - return origOffset.apply(this, arguments); - }, "offset-valid-elem"); - - // Support jQuery slim which excludes the ajax module - // The jQuery.param patch is about respecting `jQuery.ajaxSettings.traditional` - // so it doesn't make sense for the slim build. - if (jQuery.ajax) { - - var origParam = jQuery.param; - - migratePatchFunc(jQuery, "param", function(data, traditional) { - var ajaxTraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; - - if (traditional === undefined && ajaxTraditional) { - - migrateWarn("param-ajax-traditional", - "jQuery.param() no longer uses jQuery.ajaxSettings.traditional"); - traditional = ajaxTraditional; - } - - return origParam.call(this, data, traditional); - }, "param-ajax-traditional"); - - } - - migratePatchAndWarnFunc(jQuery.fn, "andSelf", jQuery.fn.addBack, "andSelf", - "jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()"); - - // Support jQuery slim which excludes the deferred module in jQuery 4.0+ - if (jQuery.Deferred) { - - var oldDeferred = jQuery.Deferred, - tuples = [ - - // Action, add listener, callbacks, .then handlers, final state - ["resolve", "done", jQuery.Callbacks("once memory"), - jQuery.Callbacks("once memory"), "resolved"], - ["reject", "fail", jQuery.Callbacks("once memory"), - jQuery.Callbacks("once memory"), "rejected"], - ["notify", "progress", jQuery.Callbacks("memory"), - jQuery.Callbacks("memory")] - ]; - - migratePatchFunc(jQuery, "Deferred", function(func) { - var deferred = oldDeferred(), - promise = deferred.promise(); - - function newDeferredPipe( /* fnDone, fnFail, fnProgress */) { - var fns = arguments; - - return jQuery.Deferred(function(newDefer) { - jQuery.each(tuples, function(i, tuple) { - var fn = typeof fns[i] === "function" && fns[i]; - - // Deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - deferred[tuple[1]](function() { - var returned = fn && fn.apply(this, arguments); - if (returned && typeof returned.promise === "function") { - returned.promise() - .done(newDefer.resolve) - .fail(newDefer.reject) - .progress(newDefer.notify); - } else { - newDefer[tuple[0] + "With"]( - this === promise ? newDefer.promise() : this, - fn ? [returned] : arguments - ); - } - }); - }); - fns = null; - }).promise(); - } - - migratePatchAndWarnFunc(deferred, "pipe", newDeferredPipe, "deferred-pipe", - "deferred.pipe() is deprecated"); - migratePatchAndWarnFunc(promise, "pipe", newDeferredPipe, "deferred-pipe", - "deferred.pipe() is deprecated"); - - if (func) { - func.call(deferred, deferred); - } - - return deferred; - }, "deferred-pipe"); - - // Preserve handler of uncaught exceptions in promise chains - jQuery.Deferred.exceptionHook = oldDeferred.exceptionHook; - - } - - return jQuery; -}); diff --git a/js/jquery-ui-14.1.js b/js/jquery-ui-14.1.js deleted file mode 100755 index e42f934..0000000 --- a/js/jquery-ui-14.1.js +++ /dev/null @@ -1,18815 +0,0 @@ -/*! jQuery UI - v1.14.1 - 2024-10-30 -* https://jqueryui.com -* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js -* Copyright OpenJS Foundation and other contributors; Licensed MIT */ - -(function(factory) { - "use strict"; - - if (typeof define === "function" && define.amd) { - - // AMD. Register as an anonymous module. - define(["jquery"], factory); - } else { - - // Browser globals - factory(jQuery); - } -})(function($) { - "use strict"; - - $.ui = $.ui || {}; - - var version = $.ui.version = "1.14.1"; - - - /*! - * jQuery UI Widget 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Widget - //>>group: Core - //>>description: Provides a factory for creating stateful widgets with a common API. - //>>docs: https://api.jqueryui.com/jQuery.widget/ - //>>demos: https://jqueryui.com/widget/ - - - var widgetUuid = 0; - var widgetHasOwnProperty = Array.prototype.hasOwnProperty; - var widgetSlice = Array.prototype.slice; - - $.cleanData = (function(orig) { - return function(elems) { - var events, elem, i; - for (i = 0; (elem = elems[i]) != null; i++) { - - // Only trigger remove when necessary to save time - events = $._data(elem, "events"); - if (events && events.remove) { - $(elem).triggerHandler("remove"); - } - } - orig(elems); - }; - })($.cleanData); - - $.widget = function(name, base, prototype) { - var existingConstructor, constructor, basePrototype; - - // ProxiedPrototype allows the provided prototype to remain unmodified - // so that it can be used as a mixin for multiple widgets (#8876) - var proxiedPrototype = {}; - - var namespace = name.split(".")[0]; - name = name.split(".")[1]; - if (name === "__proto__" || name === "constructor") { - return $.error("Invalid widget name: " + name); - } - var fullName = namespace + "-" + name; - - if (!prototype) { - prototype = base; - base = $.Widget; - } - - if (Array.isArray(prototype)) { - prototype = $.extend.apply(null, [{}].concat(prototype)); - } - - // Create selector for plugin - $.expr.pseudos[fullName.toLowerCase()] = function(elem) { - return !!$.data(elem, fullName); - }; - - $[namespace] = $[namespace] || {}; - existingConstructor = $[namespace][name]; - constructor = $[namespace][name] = function(options, element) { - - // Allow instantiation without "new" keyword - if (!this || !this._createWidget) { - return new constructor(options, element); - } - - // Allow instantiation without initializing for simple inheritance - // must use "new" keyword (the code above always passes args) - if (arguments.length) { - this._createWidget(options, element); - } - }; - - // Extend with the existing constructor to carry over any static properties - $.extend(constructor, existingConstructor, { - version: prototype.version, - - // Copy the object used to create the prototype in case we need to - // redefine the widget later - _proto: $.extend({}, prototype), - - // Track widgets that inherit from this widget in case this widget is - // redefined after a widget inherits from it - _childConstructors: [] - }); - - basePrototype = new base(); - - // We need to make the options hash a property directly on the new instance - // otherwise we'll modify the options hash on the prototype that we're - // inheriting from - basePrototype.options = $.widget.extend({}, basePrototype.options); - $.each(prototype, function(prop, value) { - if (typeof value !== "function") { - proxiedPrototype[prop] = value; - return; - } - proxiedPrototype[prop] = (function() { - function _super() { - return base.prototype[prop].apply(this, arguments); - } - - function _superApply(args) { - return base.prototype[prop].apply(this, args); - } - - return function() { - var __super = this._super; - var __superApply = this._superApply; - var returnValue; - - this._super = _super; - this._superApply = _superApply; - - returnValue = value.apply(this, arguments); - - this._super = __super; - this._superApply = __superApply; - - return returnValue; - }; - })(); - }); - constructor.prototype = $.widget.extend(basePrototype, { - - // TODO: remove support for widgetEventPrefix - // always use the name + a colon as the prefix, e.g., draggable:start - // don't prefix for widgets that aren't DOM-based - widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name - }, proxiedPrototype, { - constructor: constructor, - namespace: namespace, - widgetName: name, - widgetFullName: fullName - }); - - // If this widget is being redefined then we need to find all widgets that - // are inheriting from it and redefine all of them so that they inherit from - // the new version of this widget. We're essentially trying to replace one - // level in the prototype chain. - if (existingConstructor) { - $.each(existingConstructor._childConstructors, function(i, child) { - var childPrototype = child.prototype; - - // Redefine the child widget using the same prototype that was - // originally used, but inherit from the new version of the base - $.widget(childPrototype.namespace + "." + childPrototype.widgetName, constructor, - child._proto); - }); - - // Remove the list of existing child constructors from the old constructor - // so the old child constructors can be garbage collected - delete existingConstructor._childConstructors; - } else { - base._childConstructors.push(constructor); - } - - $.widget.bridge(name, constructor); - - return constructor; - }; - - $.widget.extend = function(target) { - var input = widgetSlice.call(arguments, 1); - var inputIndex = 0; - var inputLength = input.length; - var key; - var value; - - for (; inputIndex < inputLength; inputIndex++) { - for (key in input[inputIndex]) { - value = input[inputIndex][key]; - if (widgetHasOwnProperty.call(input[inputIndex], key) && value !== undefined) { - - // Clone objects - if ($.isPlainObject(value)) { - target[key] = $.isPlainObject(target[key]) ? - $.widget.extend({}, target[key], value) : - - // Don't extend strings, arrays, etc. with objects - $.widget.extend({}, value); - - // Copy everything else by reference - } else { - target[key] = value; - } - } - } - } - return target; - }; - - $.widget.bridge = function(name, object) { - var fullName = object.prototype.widgetFullName || name; - $.fn[name] = function(options) { - var isMethodCall = typeof options === "string"; - var args = widgetSlice.call(arguments, 1); - var returnValue = this; - - if (isMethodCall) { - - // If this is an empty collection, we need to have the instance method - // return undefined instead of the jQuery instance - if (!this.length && options === "instance") { - returnValue = undefined; - } else { - this.each(function() { - var methodValue; - var instance = $.data(this, fullName); - - if (options === "instance") { - returnValue = instance; - return false; - } - - if (!instance) { - return $.error("cannot call methods on " + name + - " prior to initialization; " + - "attempted to call method '" + options + "'"); - } - - if (typeof instance[options] !== "function" || - options.charAt(0) === "_") { - return $.error("no such method '" + options + "' for " + name + - " widget instance"); - } - - methodValue = instance[options].apply(instance, args); - - if (methodValue !== instance && methodValue !== undefined) { - returnValue = methodValue && methodValue.jquery ? - returnValue.pushStack(methodValue.get()) : - methodValue; - return false; - } - }); - } - } else { - - // Allow multiple hashes to be passed on init - if (args.length) { - options = $.widget.extend.apply(null, [options].concat(args)); - } - - this.each(function() { - var instance = $.data(this, fullName); - if (instance) { - instance.option(options || {}); - if (instance._init) { - instance._init(); - } - } else { - $.data(this, fullName, new object(options, this)); - } - }); - } - - return returnValue; - }; - }; - - $.Widget = function( /* options, element */) { }; - $.Widget._childConstructors = []; - - $.Widget.prototype = { - widgetName: "widget", - widgetEventPrefix: "", - defaultElement: "
", - - options: { - classes: {}, - disabled: false, - - // Callbacks - create: null - }, - - _createWidget: function(options, element) { - element = $(element || this.defaultElement || this)[0]; - this.element = $(element); - this.uuid = widgetUuid++; - this.eventNamespace = "." + this.widgetName + this.uuid; - - this.bindings = $(); - this.hoverable = $(); - this.focusable = $(); - this.classesElementLookup = {}; - - if (element !== this) { - $.data(element, this.widgetFullName, this); - this._on(true, this.element, { - remove: function(event) { - if (event.target === element) { - this.destroy(); - } - } - }); - this.document = $(element.style ? - - // Element within the document - element.ownerDocument : - - // Element is window or document - element.document || element); - this.window = $(this.document[0].defaultView || this.document[0].parentWindow); - } - - this.options = $.widget.extend({}, - this.options, - this._getCreateOptions(), - options); - - this._create(); - - if (this.options.disabled) { - this._setOptionDisabled(this.options.disabled); - } - - this._trigger("create", null, this._getCreateEventData()); - this._init(); - }, - - _getCreateOptions: function() { - return {}; - }, - - _getCreateEventData: $.noop, - - _create: $.noop, - - _init: $.noop, - - destroy: function() { - var that = this; - - this._destroy(); - $.each(this.classesElementLookup, function(key, value) { - that._removeClass(value, key); - }); - - // We can probably remove the unbind calls in 2.0 - // all event bindings should go through this._on() - this.element - .off(this.eventNamespace) - .removeData(this.widgetFullName); - this.widget() - .off(this.eventNamespace) - .removeAttr("aria-disabled"); - - // Clean up events and states - this.bindings.off(this.eventNamespace); - }, - - _destroy: $.noop, - - widget: function() { - return this.element; - }, - - option: function(key, value) { - var options = key; - var parts; - var curOption; - var i; - - if (arguments.length === 0) { - - // Don't return a reference to the internal hash - return $.widget.extend({}, this.options); - } - - if (typeof key === "string") { - - // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } - options = {}; - parts = key.split("."); - key = parts.shift(); - if (parts.length) { - curOption = options[key] = $.widget.extend({}, this.options[key]); - for (i = 0; i < parts.length - 1; i++) { - curOption[parts[i]] = curOption[parts[i]] || {}; - curOption = curOption[parts[i]]; - } - key = parts.pop(); - if (arguments.length === 1) { - return curOption[key] === undefined ? null : curOption[key]; - } - curOption[key] = value; - } else { - if (arguments.length === 1) { - return this.options[key] === undefined ? null : this.options[key]; - } - options[key] = value; - } - } - - this._setOptions(options); - - return this; - }, - - _setOptions: function(options) { - var key; - - for (key in options) { - this._setOption(key, options[key]); - } - - return this; - }, - - _setOption: function(key, value) { - if (key === "classes") { - this._setOptionClasses(value); - } - - this.options[key] = value; - - if (key === "disabled") { - this._setOptionDisabled(value); - } - - return this; - }, - - _setOptionClasses: function(value) { - var classKey, elements, currentElements; - - for (classKey in value) { - currentElements = this.classesElementLookup[classKey]; - if (value[classKey] === this.options.classes[classKey] || - !currentElements || - !currentElements.length) { - continue; - } - - // We are doing this to create a new jQuery object because the _removeClass() call - // on the next line is going to destroy the reference to the current elements being - // tracked. We need to save a copy of this collection so that we can add the new classes - // below. - elements = $(currentElements.get()); - this._removeClass(currentElements, classKey); - - // We don't use _addClass() here, because that uses this.options.classes - // for generating the string of classes. We want to use the value passed in from - // _setOption(), this is the new value of the classes option which was passed to - // _setOption(). We pass this value directly to _classes(). - elements.addClass(this._classes({ - element: elements, - keys: classKey, - classes: value, - add: true - })); - } - }, - - _setOptionDisabled: function(value) { - this._toggleClass(this.widget(), this.widgetFullName + "-disabled", null, !!value); - - // If the widget is becoming disabled, then nothing is interactive - if (value) { - this._removeClass(this.hoverable, null, "ui-state-hover"); - this._removeClass(this.focusable, null, "ui-state-focus"); - } - }, - - enable: function() { - return this._setOptions({ disabled: false }); - }, - - disable: function() { - return this._setOptions({ disabled: true }); - }, - - _classes: function(options) { - var full = []; - var that = this; - - options = $.extend({ - element: this.element, - classes: this.options.classes || {} - }, options); - - function bindRemoveEvent() { - var nodesToBind = []; - - options.element.each(function(_, element) { - var isTracked = $.map(that.classesElementLookup, function(elements) { - return elements; - }) - .some(function(elements) { - return elements.is(element); - }); - - if (!isTracked) { - nodesToBind.push(element); - } - }); - - that._on($(nodesToBind), { - remove: "_untrackClassesElement" - }); - } - - function processClassString(classes, checkOption) { - var current, i; - for (i = 0; i < classes.length; i++) { - current = that.classesElementLookup[classes[i]] || $(); - if (options.add) { - bindRemoveEvent(); - current = $($.uniqueSort(current.get().concat(options.element.get()))); - } else { - current = $(current.not(options.element).get()); - } - that.classesElementLookup[classes[i]] = current; - full.push(classes[i]); - if (checkOption && options.classes[classes[i]]) { - full.push(options.classes[classes[i]]); - } - } - } - - if (options.keys) { - processClassString(options.keys.match(/\S+/g) || [], true); - } - if (options.extra) { - processClassString(options.extra.match(/\S+/g) || []); - } - - return full.join(" "); - }, - - _untrackClassesElement: function(event) { - var that = this; - $.each(that.classesElementLookup, function(key, value) { - if ($.inArray(event.target, value) !== -1) { - that.classesElementLookup[key] = $(value.not(event.target).get()); - } - }); - - this._off($(event.target)); - }, - - _removeClass: function(element, keys, extra) { - return this._toggleClass(element, keys, extra, false); - }, - - _addClass: function(element, keys, extra) { - return this._toggleClass(element, keys, extra, true); - }, - - _toggleClass: function(element, keys, extra, add) { - add = (typeof add === "boolean") ? add : extra; - var shift = (typeof element === "string" || element === null), - options = { - extra: shift ? keys : extra, - keys: shift ? element : keys, - element: shift ? this.element : element, - add: add - }; - options.element.toggleClass(this._classes(options), add); - return this; - }, - - _on: function(suppressDisabledCheck, element, handlers) { - var delegateElement; - var instance = this; - - // No suppressDisabledCheck flag, shuffle arguments - if (typeof suppressDisabledCheck !== "boolean") { - handlers = element; - element = suppressDisabledCheck; - suppressDisabledCheck = false; - } - - // No element argument, shuffle and use this.element - if (!handlers) { - handlers = element; - element = this.element; - delegateElement = this.widget(); - } else { - element = delegateElement = $(element); - this.bindings = this.bindings.add(element); - } - - $.each(handlers, function(event, handler) { - function handlerProxy() { - - // Allow widgets to customize the disabled handling - // - disabled as an array instead of boolean - // - disabled class as method for disabling individual parts - if (!suppressDisabledCheck && - (instance.options.disabled === true || - $(this).hasClass("ui-state-disabled"))) { - return; - } - return (typeof handler === "string" ? instance[handler] : handler) - .apply(instance, arguments); - } - - // Copy the guid so direct unbinding works - if (typeof handler !== "string") { - handlerProxy.guid = handler.guid = - handler.guid || handlerProxy.guid || $.guid++; - } - - var match = event.match(/^([\w:-]*)\s*(.*)$/); - var eventName = match[1] + instance.eventNamespace; - var selector = match[2]; - - if (selector) { - delegateElement.on(eventName, selector, handlerProxy); - } else { - element.on(eventName, handlerProxy); - } - }); - }, - - _off: function(element, eventName) { - eventName = (eventName || "").split(" ").join(this.eventNamespace + " ") + - this.eventNamespace; - element.off(eventName); - - // Clear the stack to avoid memory leaks (#10056) - this.bindings = $(this.bindings.not(element).get()); - this.focusable = $(this.focusable.not(element).get()); - this.hoverable = $(this.hoverable.not(element).get()); - }, - - _delay: function(handler, delay) { - function handlerProxy() { - return (typeof handler === "string" ? instance[handler] : handler) - .apply(instance, arguments); - } - var instance = this; - return setTimeout(handlerProxy, delay || 0); - }, - - _hoverable: function(element) { - this.hoverable = this.hoverable.add(element); - this._on(element, { - mouseenter: function(event) { - this._addClass($(event.currentTarget), null, "ui-state-hover"); - }, - mouseleave: function(event) { - this._removeClass($(event.currentTarget), null, "ui-state-hover"); - } - }); - }, - - _focusable: function(element) { - this.focusable = this.focusable.add(element); - this._on(element, { - focusin: function(event) { - this._addClass($(event.currentTarget), null, "ui-state-focus"); - }, - focusout: function(event) { - this._removeClass($(event.currentTarget), null, "ui-state-focus"); - } - }); - }, - - _trigger: function(type, event, data) { - var prop, orig; - var callback = this.options[type]; - - data = data || {}; - event = $.Event(event); - event.type = (type === this.widgetEventPrefix ? - type : - this.widgetEventPrefix + type).toLowerCase(); - - // The original event may come from any element - // so we need to reset the target on the new event - event.target = this.element[0]; - - // Copy original event properties over to the new event - orig = event.originalEvent; - if (orig) { - for (prop in orig) { - if (!(prop in event)) { - event[prop] = orig[prop]; - } - } - } - - this.element.trigger(event, data); - return !(typeof callback === "function" && - callback.apply(this.element[0], [event].concat(data)) === false || - event.isDefaultPrevented()); - } - }; - - $.each({ show: "fadeIn", hide: "fadeOut" }, function(method, defaultEffect) { - $.Widget.prototype["_" + method] = function(element, options, callback) { - if (typeof options === "string") { - options = { effect: options }; - } - - var hasOptions; - var effectName = !options ? - method : - options === true || typeof options === "number" ? - defaultEffect : - options.effect || defaultEffect; - - options = options || {}; - if (typeof options === "number") { - options = { duration: options }; - } else if (options === true) { - options = {}; - } - - hasOptions = !$.isEmptyObject(options); - options.complete = callback; - - if (options.delay) { - element.delay(options.delay); - } - - if (hasOptions && $.effects && $.effects.effect[effectName]) { - element[method](options); - } else if (effectName !== method && element[effectName]) { - element[effectName](options.duration, options.easing, callback); - } else { - element.queue(function(next) { - $(this)[method](); - if (callback) { - callback.call(element[0]); - } - next(); - }); - } - }; - }); - - var widget = $.widget; - - - /*! - * jQuery UI Position 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - * - * https://api.jqueryui.com/position/ - */ - - //>>label: Position - //>>group: Core - //>>description: Positions elements relative to other elements. - //>>docs: https://api.jqueryui.com/position/ - //>>demos: https://jqueryui.com/position/ - - - (function() { - var cachedScrollbarWidth, - max = Math.max, - abs = Math.abs, - rhorizontal = /left|center|right/, - rvertical = /top|center|bottom/, - roffset = /[\+\-]\d+(\.[\d]+)?%?/, - rposition = /^\w+/, - rpercent = /%$/, - _position = $.fn.position; - - function getOffsets(offsets, width, height) { - return [ - parseFloat(offsets[0]) * (rpercent.test(offsets[0]) ? width / 100 : 1), - parseFloat(offsets[1]) * (rpercent.test(offsets[1]) ? height / 100 : 1) - ]; - } - - function parseCss(element, property) { - return parseInt($.css(element, property), 10) || 0; - } - - function isWindow(obj) { - return obj != null && obj === obj.window; - } - - function getDimensions(elem) { - var raw = elem[0]; - if (raw.nodeType === 9) { - return { - width: elem.width(), - height: elem.height(), - offset: { top: 0, left: 0 } - }; - } - if (isWindow(raw)) { - return { - width: elem.width(), - height: elem.height(), - offset: { top: elem.scrollTop(), left: elem.scrollLeft() } - }; - } - if (raw.preventDefault) { - return { - width: 0, - height: 0, - offset: { top: raw.pageY, left: raw.pageX } - }; - } - return { - width: elem.outerWidth(), - height: elem.outerHeight(), - offset: elem.offset() - }; - } - - $.position = { - scrollbarWidth: function() { - if (cachedScrollbarWidth !== undefined) { - return cachedScrollbarWidth; - } - var w1, w2, - div = $("
" + - "
"), - innerDiv = div.children()[0]; - - $("body").append(div); - w1 = innerDiv.offsetWidth; - div.css("overflow", "scroll"); - - w2 = innerDiv.offsetWidth; - - if (w1 === w2) { - w2 = div[0].clientWidth; - } - - div.remove(); - - return (cachedScrollbarWidth = w1 - w2); - }, - getScrollInfo: function(within) { - var overflowX = within.isWindow || within.isDocument ? "" : - within.element.css("overflow-x"), - overflowY = within.isWindow || within.isDocument ? "" : - within.element.css("overflow-y"), - hasOverflowX = overflowX === "scroll" || - (overflowX === "auto" && within.width < within.element[0].scrollWidth), - hasOverflowY = overflowY === "scroll" || - (overflowY === "auto" && within.height < within.element[0].scrollHeight); - return { - width: hasOverflowY ? $.position.scrollbarWidth() : 0, - height: hasOverflowX ? $.position.scrollbarWidth() : 0 - }; - }, - getWithinInfo: function(element) { - var withinElement = $(element || window), - isElemWindow = isWindow(withinElement[0]), - isDocument = !!withinElement[0] && withinElement[0].nodeType === 9, - hasOffset = !isElemWindow && !isDocument; - return { - element: withinElement, - isWindow: isElemWindow, - isDocument: isDocument, - offset: hasOffset ? $(element).offset() : { left: 0, top: 0 }, - scrollLeft: withinElement.scrollLeft(), - scrollTop: withinElement.scrollTop(), - width: withinElement.outerWidth(), - height: withinElement.outerHeight() - }; - } - }; - - $.fn.position = function(options) { - if (!options || !options.of) { - return _position.apply(this, arguments); - } - - // Make a copy, we don't want to modify arguments - options = $.extend({}, options); - - var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, - - // Make sure string options are treated as CSS selectors - target = typeof options.of === "string" ? - $(document).find(options.of) : - $(options.of), - - within = $.position.getWithinInfo(options.within), - scrollInfo = $.position.getScrollInfo(within), - collision = (options.collision || "flip").split(" "), - offsets = {}; - - dimensions = getDimensions(target); - if (target[0].preventDefault) { - - // Force left top to allow flipping - options.at = "left top"; - } - targetWidth = dimensions.width; - targetHeight = dimensions.height; - targetOffset = dimensions.offset; - - // Clone to reuse original targetOffset later - basePosition = $.extend({}, targetOffset); - - // Force my and at to have valid horizontal and vertical positions - // if a value is missing or invalid, it will be converted to center - $.each(["my", "at"], function() { - var pos = (options[this] || "").split(" "), - horizontalOffset, - verticalOffset; - - if (pos.length === 1) { - pos = rhorizontal.test(pos[0]) ? - pos.concat(["center"]) : - rvertical.test(pos[0]) ? - ["center"].concat(pos) : - ["center", "center"]; - } - pos[0] = rhorizontal.test(pos[0]) ? pos[0] : "center"; - pos[1] = rvertical.test(pos[1]) ? pos[1] : "center"; - - // Calculate offsets - horizontalOffset = roffset.exec(pos[0]); - verticalOffset = roffset.exec(pos[1]); - offsets[this] = [ - horizontalOffset ? horizontalOffset[0] : 0, - verticalOffset ? verticalOffset[0] : 0 - ]; - - // Reduce to just the positions without the offsets - options[this] = [ - rposition.exec(pos[0])[0], - rposition.exec(pos[1])[0] - ]; - }); - - // Normalize collision option - if (collision.length === 1) { - collision[1] = collision[0]; - } - - if (options.at[0] === "right") { - basePosition.left += targetWidth; - } else if (options.at[0] === "center") { - basePosition.left += targetWidth / 2; - } - - if (options.at[1] === "bottom") { - basePosition.top += targetHeight; - } else if (options.at[1] === "center") { - basePosition.top += targetHeight / 2; - } - - atOffset = getOffsets(offsets.at, targetWidth, targetHeight); - basePosition.left += atOffset[0]; - basePosition.top += atOffset[1]; - - return this.each(function() { - var collisionPosition, using, - elem = $(this), - elemWidth = elem.outerWidth(), - elemHeight = elem.outerHeight(), - marginLeft = parseCss(this, "marginLeft"), - marginTop = parseCss(this, "marginTop"), - collisionWidth = elemWidth + marginLeft + parseCss(this, "marginRight") + - scrollInfo.width, - collisionHeight = elemHeight + marginTop + parseCss(this, "marginBottom") + - scrollInfo.height, - position = $.extend({}, basePosition), - myOffset = getOffsets(offsets.my, elem.outerWidth(), elem.outerHeight()); - - if (options.my[0] === "right") { - position.left -= elemWidth; - } else if (options.my[0] === "center") { - position.left -= elemWidth / 2; - } - - if (options.my[1] === "bottom") { - position.top -= elemHeight; - } else if (options.my[1] === "center") { - position.top -= elemHeight / 2; - } - - position.left += myOffset[0]; - position.top += myOffset[1]; - - collisionPosition = { - marginLeft: marginLeft, - marginTop: marginTop - }; - - $.each(["left", "top"], function(i, dir) { - if ($.ui.position[collision[i]]) { - $.ui.position[collision[i]][dir](position, { - targetWidth: targetWidth, - targetHeight: targetHeight, - elemWidth: elemWidth, - elemHeight: elemHeight, - collisionPosition: collisionPosition, - collisionWidth: collisionWidth, - collisionHeight: collisionHeight, - offset: [atOffset[0] + myOffset[0], atOffset[1] + myOffset[1]], - my: options.my, - at: options.at, - within: within, - elem: elem - }); - } - }); - - if (options.using) { - - // Adds feedback as second argument to using callback, if present - using = function(props) { - var left = targetOffset.left - position.left, - right = left + targetWidth - elemWidth, - top = targetOffset.top - position.top, - bottom = top + targetHeight - elemHeight, - feedback = { - target: { - element: target, - left: targetOffset.left, - top: targetOffset.top, - width: targetWidth, - height: targetHeight - }, - element: { - element: elem, - left: position.left, - top: position.top, - width: elemWidth, - height: elemHeight - }, - horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", - vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" - }; - if (targetWidth < elemWidth && abs(left + right) < targetWidth) { - feedback.horizontal = "center"; - } - if (targetHeight < elemHeight && abs(top + bottom) < targetHeight) { - feedback.vertical = "middle"; - } - if (max(abs(left), abs(right)) > max(abs(top), abs(bottom))) { - feedback.important = "horizontal"; - } else { - feedback.important = "vertical"; - } - options.using.call(this, props, feedback); - }; - } - - elem.offset($.extend(position, { using: using })); - }); - }; - - $.ui.position = { - fit: { - left: function(position, data) { - var within = data.within, - withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, - outerWidth = within.width, - collisionPosLeft = position.left - data.collisionPosition.marginLeft, - overLeft = withinOffset - collisionPosLeft, - overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, - newOverRight; - - // Element is wider than within - if (data.collisionWidth > outerWidth) { - - // Element is initially over the left side of within - if (overLeft > 0 && overRight <= 0) { - newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - - withinOffset; - position.left += overLeft - newOverRight; - - // Element is initially over right side of within - } else if (overRight > 0 && overLeft <= 0) { - position.left = withinOffset; - - // Element is initially over both left and right sides of within - } else { - if (overLeft > overRight) { - position.left = withinOffset + outerWidth - data.collisionWidth; - } else { - position.left = withinOffset; - } - } - - // Too far left -> align with left edge - } else if (overLeft > 0) { - position.left += overLeft; - - // Too far right -> align with right edge - } else if (overRight > 0) { - position.left -= overRight; - - // Adjust based on position and margin - } else { - position.left = max(position.left - collisionPosLeft, position.left); - } - }, - top: function(position, data) { - var within = data.within, - withinOffset = within.isWindow ? within.scrollTop : within.offset.top, - outerHeight = data.within.height, - collisionPosTop = position.top - data.collisionPosition.marginTop, - overTop = withinOffset - collisionPosTop, - overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, - newOverBottom; - - // Element is taller than within - if (data.collisionHeight > outerHeight) { - - // Element is initially over the top of within - if (overTop > 0 && overBottom <= 0) { - newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - - withinOffset; - position.top += overTop - newOverBottom; - - // Element is initially over bottom of within - } else if (overBottom > 0 && overTop <= 0) { - position.top = withinOffset; - - // Element is initially over both top and bottom of within - } else { - if (overTop > overBottom) { - position.top = withinOffset + outerHeight - data.collisionHeight; - } else { - position.top = withinOffset; - } - } - - // Too far up -> align with top - } else if (overTop > 0) { - position.top += overTop; - - // Too far down -> align with bottom edge - } else if (overBottom > 0) { - position.top -= overBottom; - - // Adjust based on position and margin - } else { - position.top = max(position.top - collisionPosTop, position.top); - } - } - }, - flip: { - left: function(position, data) { - var within = data.within, - withinOffset = within.offset.left + within.scrollLeft, - outerWidth = within.width, - offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, - collisionPosLeft = position.left - data.collisionPosition.marginLeft, - overLeft = collisionPosLeft - offsetLeft, - overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, - myOffset = data.my[0] === "left" ? - -data.elemWidth : - data.my[0] === "right" ? - data.elemWidth : - 0, - atOffset = data.at[0] === "left" ? - data.targetWidth : - data.at[0] === "right" ? - -data.targetWidth : - 0, - offset = -2 * data.offset[0], - newOverRight, - newOverLeft; - - if (overLeft < 0) { - newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - - outerWidth - withinOffset; - if (newOverRight < 0 || newOverRight < abs(overLeft)) { - position.left += myOffset + atOffset + offset; - } - } else if (overRight > 0) { - newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + - atOffset + offset - offsetLeft; - if (newOverLeft > 0 || abs(newOverLeft) < overRight) { - position.left += myOffset + atOffset + offset; - } - } - }, - top: function(position, data) { - var within = data.within, - withinOffset = within.offset.top + within.scrollTop, - outerHeight = within.height, - offsetTop = within.isWindow ? within.scrollTop : within.offset.top, - collisionPosTop = position.top - data.collisionPosition.marginTop, - overTop = collisionPosTop - offsetTop, - overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, - top = data.my[1] === "top", - myOffset = top ? - -data.elemHeight : - data.my[1] === "bottom" ? - data.elemHeight : - 0, - atOffset = data.at[1] === "top" ? - data.targetHeight : - data.at[1] === "bottom" ? - -data.targetHeight : - 0, - offset = -2 * data.offset[1], - newOverTop, - newOverBottom; - if (overTop < 0) { - newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - - outerHeight - withinOffset; - if (newOverBottom < 0 || newOverBottom < abs(overTop)) { - position.top += myOffset + atOffset + offset; - } - } else if (overBottom > 0) { - newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + - offset - offsetTop; - if (newOverTop > 0 || abs(newOverTop) < overBottom) { - position.top += myOffset + atOffset + offset; - } - } - } - }, - flipfit: { - left: function() { - $.ui.position.flip.left.apply(this, arguments); - $.ui.position.fit.left.apply(this, arguments); - }, - top: function() { - $.ui.position.flip.top.apply(this, arguments); - $.ui.position.fit.top.apply(this, arguments); - } - } - }; - - })(); - - var position = $.ui.position; - - - /*! - * jQuery UI :data 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: :data Selector - //>>group: Core - //>>description: Selects elements which have data stored under the specified key. - //>>docs: https://api.jqueryui.com/data-selector/ - - - var data = $.extend($.expr.pseudos, { - data: $.expr.createPseudo(function(dataName) { - return function(elem) { - return !!$.data(elem, dataName); - }; - }) - }); - - /*! - * jQuery UI Disable Selection 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: disableSelection - //>>group: Core - //>>description: Disable selection of text content within the set of matched elements. - //>>docs: https://api.jqueryui.com/disableSelection/ - - // This file is deprecated - - var disableSelection = $.fn.extend({ - disableSelection: (function() { - var eventType = "onselectstart" in document.createElement("div") ? - "selectstart" : - "mousedown"; - - return function() { - return this.on(eventType + ".ui-disableSelection", function(event) { - event.preventDefault(); - }); - }; - })(), - - enableSelection: function() { - return this.off(".ui-disableSelection"); - } - }); - - - - // Create a local jQuery because jQuery Color relies on it and the - // global may not exist with AMD and a custom build (#10199). - // This module is a noop if used as a regular AMD module. - // eslint-disable-next-line no-unused-vars - var jQuery = $; - - - /*! - * jQuery Color Animations v3.0.0 - * https://github.com/jquery/jquery-color - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - * - * Date: Wed May 15 16:49:44 2024 +0200 - */ - - - var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " + - "borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor", - - class2type = {}, - toString = class2type.toString, - - // plusequals test for += 100 -= 100 - rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, - - // a set of RE's that can match strings and generate color tuples. - stringParsers = [{ - re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, - parse: function(execResult) { - return [ - execResult[1], - execResult[2], - execResult[3], - execResult[4] - ]; - } - }, { - re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, - parse: function(execResult) { - return [ - execResult[1] * 2.55, - execResult[2] * 2.55, - execResult[3] * 2.55, - execResult[4] - ]; - } - }, { - - // this regex ignores A-F because it's compared against an already lowercased string - re: /#([a-f0-9][2])([a-f0-9][2])([a-f0-9][2])([a-f0-9][2])?/, - parse: function(execResult) { - return [ - parseInt(execResult[1], 16), - parseInt(execResult[2], 16), - parseInt(execResult[3], 16), - execResult[4] ? - (parseInt(execResult[4], 16) / 255).toFixed(2) : - 1 - ]; - } - }, { - - // this regex ignores A-F because it's compared against an already lowercased string - re: /#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/, - parse: function(execResult) { - return [ - parseInt(execResult[1] + execResult[1], 16), - parseInt(execResult[2] + execResult[2], 16), - parseInt(execResult[3] + execResult[3], 16), - execResult[4] ? - (parseInt(execResult[4] + execResult[4], 16) / 255) - .toFixed(2) : - 1 - ]; - } - }, { - re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, - space: "hsla", - parse: function(execResult) { - return [ - execResult[1], - execResult[2] / 100, - execResult[3] / 100, - execResult[4] - ]; - } - }], - - // jQuery.Color( ) - color = jQuery.Color = function(color, green, blue, alpha) { - return new jQuery.Color.fn.parse(color, green, blue, alpha); - }, - spaces = { - rgba: { - props: { - red: { - idx: 0, - type: "byte" - }, - green: { - idx: 1, - type: "byte" - }, - blue: { - idx: 2, - type: "byte" - } - } - }, - - hsla: { - props: { - hue: { - idx: 0, - type: "degrees" - }, - saturation: { - idx: 1, - type: "percent" - }, - lightness: { - idx: 2, - type: "percent" - } - } - } - }, - propTypes = { - "byte": { - floor: true, - max: 255 - }, - "percent": { - max: 1 - }, - "degrees": { - mod: 360, - floor: true - } - }, - - // colors = jQuery.Color.names - colors, - - // local aliases of functions called often - each = jQuery.each; - - // define cache name and alpha properties - // for rgba and hsla spaces - each(spaces, function(spaceName, space) { - space.cache = "_" + spaceName; - space.props.alpha = { - idx: 3, - type: "percent", - def: 1 - }; - }); - - // Populate the class2type map - jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), - function(_i, name) { - class2type["[object " + name + "]"] = name.toLowerCase(); - }); - - function getType(obj) { - if (obj == null) { - return obj + ""; - } - - return typeof obj === "object" ? - class2type[toString.call(obj)] || "object" : - typeof obj; - } - - function clamp(value, prop, allowEmpty) { - var type = propTypes[prop.type] || {}; - - if (value == null) { - return (allowEmpty || !prop.def) ? null : prop.def; - } - - // ~~ is an short way of doing floor for positive numbers - value = type.floor ? ~~value : parseFloat(value); - - if (type.mod) { - - // we add mod before modding to make sure that negatives values - // get converted properly: -10 -> 350 - return (value + type.mod) % type.mod; - } - - // for now all property types without mod have min and max - return Math.min(type.max, Math.max(0, value)); - } - - function stringParse(string) { - var inst = color(), - rgba = inst._rgba = []; - - string = string.toLowerCase(); - - each(stringParsers, function(_i, parser) { - var parsed, - match = parser.re.exec(string), - values = match && parser.parse(match), - spaceName = parser.space || "rgba"; - - if (values) { - parsed = inst[spaceName](values); - - // if this was an rgba parse the assignment might happen twice - // oh well.... - inst[spaces[spaceName].cache] = parsed[spaces[spaceName].cache]; - rgba = inst._rgba = parsed._rgba; - - // exit each( stringParsers ) here because we matched - return false; - } - }); - - // Found a stringParser that handled it - if (rgba.length) { - - // if this came from a parsed string, force "transparent" when alpha is 0 - // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0) - if (rgba.join() === "0,0,0,0") { - jQuery.extend(rgba, colors.transparent); - } - return inst; - } - - // named colors - return colors[string]; - } - - color.fn = jQuery.extend(color.prototype, { - parse: function(red, green, blue, alpha) { - if (red === undefined) { - this._rgba = [null, null, null, null]; - return this; - } - if (red.jquery || red.nodeType) { - red = jQuery(red).css(green); - green = undefined; - } - - var inst = this, - type = getType(red), - rgba = this._rgba = []; - - // more than 1 argument specified - assume ( red, green, blue, alpha ) - if (green !== undefined) { - red = [red, green, blue, alpha]; - type = "array"; - } - - if (type === "string") { - return this.parse(stringParse(red) || colors._default); - } - - if (type === "array") { - each(spaces.rgba.props, function(_key, prop) { - rgba[prop.idx] = clamp(red[prop.idx], prop); - }); - return this; - } - - if (type === "object") { - if (red instanceof color) { - each(spaces, function(_spaceName, space) { - if (red[space.cache]) { - inst[space.cache] = red[space.cache].slice(); - } - }); - } else { - each(spaces, function(_spaceName, space) { - var cache = space.cache; - each(space.props, function(key, prop) { - - // if the cache doesn't exist, and we know how to convert - if (!inst[cache] && space.to) { - - // if the value was null, we don't need to copy it - // if the key was alpha, we don't need to copy it either - if (key === "alpha" || red[key] == null) { - return; - } - inst[cache] = space.to(inst._rgba); - } - - // this is the only case where we allow nulls for ALL properties. - // call clamp with alwaysAllowEmpty - inst[cache][prop.idx] = clamp(red[key], prop, true); - }); - - // everything defined but alpha? - if (inst[cache] && jQuery.inArray( - null, - inst[cache].slice(0, 3) - ) < 0) { - - // use the default of 1 - if (inst[cache][3] == null) { - inst[cache][3] = 1; - } - - if (space.from) { - inst._rgba = space.from(inst[cache]); - } - } - }); - } - return this; - } - }, - is: function(compare) { - var is = color(compare), - same = true, - inst = this; - - each(spaces, function(_, space) { - var localCache, - isCache = is[space.cache]; - if (isCache) { - localCache = inst[space.cache] || space.to && space.to(inst._rgba) || []; - each(space.props, function(_, prop) { - if (isCache[prop.idx] != null) { - same = (isCache[prop.idx] === localCache[prop.idx]); - return same; - } - }); - } - return same; - }); - return same; - }, - _space: function() { - var used = [], - inst = this; - each(spaces, function(spaceName, space) { - if (inst[space.cache]) { - used.push(spaceName); - } - }); - return used.pop(); - }, - transition: function(other, distance) { - var end = color(other), - spaceName = end._space(), - space = spaces[spaceName], - startColor = this.alpha() === 0 ? color("transparent") : this, - start = startColor[space.cache] || space.to(startColor._rgba), - result = start.slice(); - - end = end[space.cache]; - each(space.props, function(_key, prop) { - var index = prop.idx, - startValue = start[index], - endValue = end[index], - type = propTypes[prop.type] || {}; - - // if null, don't override start value - if (endValue === null) { - return; - } - - // if null - use end - if (startValue === null) { - result[index] = endValue; - } else { - if (type.mod) { - if (endValue - startValue > type.mod / 2) { - startValue += type.mod; - } else if (startValue - endValue > type.mod / 2) { - startValue -= type.mod; - } - } - result[index] = clamp((endValue - startValue) * distance + startValue, prop); - } - }); - return this[spaceName](result); - }, - blend: function(opaque) { - - // if we are already opaque - return ourself - if (this._rgba[3] === 1) { - return this; - } - - var rgb = this._rgba.slice(), - a = rgb.pop(), - blend = color(opaque)._rgba; - - return color(jQuery.map(rgb, function(v, i) { - return (1 - a) * blend[i] + a * v; - })); - }, - toRgbaString: function() { - var prefix = "rgba(", - rgba = jQuery.map(this._rgba, function(v, i) { - if (v != null) { - return v; - } - return i > 2 ? 1 : 0; - }); - - if (rgba[3] === 1) { - rgba.pop(); - prefix = "rgb("; - } - - return prefix + rgba.join(", ") + ")"; - }, - toHslaString: function() { - var prefix = "hsla(", - hsla = jQuery.map(this.hsla(), function(v, i) { - if (v == null) { - v = i > 2 ? 1 : 0; - } - - // catch 1 and 2 - if (i && i < 3) { - v = Math.round(v * 100) + "%"; - } - return v; - }); - - if (hsla[3] === 1) { - hsla.pop(); - prefix = "hsl("; - } - return prefix + hsla.join(", ") + ")"; - }, - toHexString: function(includeAlpha) { - var rgba = this._rgba.slice(), - alpha = rgba.pop(); - - if (includeAlpha) { - rgba.push(~~(alpha * 255)); - } - - return "#" + jQuery.map(rgba, function(v) { - - // default to 0 when nulls exist - return ("0" + (v || 0).toString(16)).substr(-2); - }).join(""); - }, - toString: function() { - return this.toRgbaString(); - } - }); - color.fn.parse.prototype = color.fn; - - // hsla conversions adapted from: - // https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021 - - function hue2rgb(p, q, h) { - h = (h + 1) % 1; - if (h * 6 < 1) { - return p + (q - p) * h * 6; - } - if (h * 2 < 1) { - return q; - } - if (h * 3 < 2) { - return p + (q - p) * ((2 / 3) - h) * 6; - } - return p; - } - - spaces.hsla.to = function(rgba) { - if (rgba[0] == null || rgba[1] == null || rgba[2] == null) { - return [null, null, null, rgba[3]]; - } - var r = rgba[0] / 255, - g = rgba[1] / 255, - b = rgba[2] / 255, - a = rgba[3], - max = Math.max(r, g, b), - min = Math.min(r, g, b), - diff = max - min, - add = max + min, - l = add * 0.5, - h, s; - - if (min === max) { - h = 0; - } else if (r === max) { - h = (60 * (g - b) / diff) + 360; - } else if (g === max) { - h = (60 * (b - r) / diff) + 120; - } else { - h = (60 * (r - g) / diff) + 240; - } - - // chroma (diff) == 0 means greyscale which, by definition, saturation = 0% - // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add) - if (diff === 0) { - s = 0; - } else if (l <= 0.5) { - s = diff / add; - } else { - s = diff / (2 - add); - } - return [Math.round(h) % 360, s, l, a == null ? 1 : a]; - }; - - spaces.hsla.from = function(hsla) { - if (hsla[0] == null || hsla[1] == null || hsla[2] == null) { - return [null, null, null, hsla[3]]; - } - var h = hsla[0] / 360, - s = hsla[1], - l = hsla[2], - a = hsla[3], - q = l <= 0.5 ? l * (1 + s) : l + s - l * s, - p = 2 * l - q; - - return [ - Math.round(hue2rgb(p, q, h + (1 / 3)) * 255), - Math.round(hue2rgb(p, q, h) * 255), - Math.round(hue2rgb(p, q, h - (1 / 3)) * 255), - a - ]; - }; - - - each(spaces, function(spaceName, space) { - var props = space.props, - cache = space.cache, - to = space.to, - from = space.from; - - // makes rgba() and hsla() - color.fn[spaceName] = function(value) { - - // generate a cache for this space if it doesn't exist - if (to && !this[cache]) { - this[cache] = to(this._rgba); - } - if (value === undefined) { - return this[cache].slice(); - } - - var ret, - type = getType(value), - arr = (type === "array" || type === "object") ? value : arguments, - local = this[cache].slice(); - - each(props, function(key, prop) { - var val = arr[type === "object" ? key : prop.idx]; - if (val == null) { - val = local[prop.idx]; - } - local[prop.idx] = clamp(val, prop); - }); - - if (from) { - ret = color(from(local)); - ret[cache] = local; - return ret; - } else { - return color(local); - } - }; - - // makes red() green() blue() alpha() hue() saturation() lightness() - each(props, function(key, prop) { - - // alpha is included in more than one space - if (color.fn[key]) { - return; - } - color.fn[key] = function(value) { - var local, cur, match, fn, - vtype = getType(value); - - if (key === "alpha") { - fn = this._hsla ? "hsla" : "rgba"; - } else { - fn = spaceName; - } - local = this[fn](); - cur = local[prop.idx]; - - if (vtype === "undefined") { - return cur; - } - - if (vtype === "function") { - value = value.call(this, cur); - vtype = getType(value); - } - if (value == null && prop.empty) { - return this; - } - if (vtype === "string") { - match = rplusequals.exec(value); - if (match) { - value = cur + parseFloat(match[2]) * (match[1] === "+" ? 1 : -1); - } - } - local[prop.idx] = value; - return this[fn](local); - }; - }); - }); - - // add cssHook and .fx.step function for each named hook. - // accept a space separated string of properties - color.hook = function(hook) { - var hooks = hook.split(" "); - each(hooks, function(_i, hook) { - jQuery.cssHooks[hook] = { - set: function(elem, value) { - var parsed; - - if (value !== "transparent" && - (getType(value) !== "string" || - (parsed = stringParse(value)))) { - value = color(parsed || value); - value = value.toRgbaString(); - } - elem.style[hook] = value; - } - }; - jQuery.fx.step[hook] = function(fx) { - if (!fx.colorInit) { - fx.start = color(fx.elem, hook); - fx.end = color(fx.end); - fx.colorInit = true; - } - jQuery.cssHooks[hook].set(fx.elem, fx.start.transition(fx.end, fx.pos)); - }; - }); - - }; - - color.hook(stepHooks); - - jQuery.cssHooks.borderColor = { - expand: function(value) { - var expanded = {}; - - each(["Top", "Right", "Bottom", "Left"], function(_i, part) { - expanded["border" + part + "Color"] = value; - }); - return expanded; - } - }; - - // Basic color names only. - // Usage of any of the other color names requires adding yourself or including - // jquery.color.svg-names.js. - colors = jQuery.Color.names = { - - // 4.1. Basic color keywords - aqua: "#00ffff", - black: "#000000", - blue: "#0000ff", - fuchsia: "#ff00ff", - gray: "#808080", - green: "#008000", - lime: "#00ff00", - maroon: "#800000", - navy: "#000080", - olive: "#808000", - purple: "#800080", - red: "#ff0000", - silver: "#c0c0c0", - teal: "#008080", - white: "#ffffff", - yellow: "#ffff00", - - // 4.2.3. "transparent" color keyword - transparent: [null, null, null, 0], - - _default: "#ffffff" - }; - - - /*! - * jQuery UI Effects 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Effects Core - //>>group: Effects - /* eslint-disable max-len */ - //>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects. - /* eslint-enable max-len */ - //>>docs: https://api.jqueryui.com/category/effects-core/ - //>>demos: https://jqueryui.com/effect/ - - - var dataSpace = "ui-effects-", - dataSpaceStyle = "ui-effects-style", - dataSpaceAnimated = "ui-effects-animated"; - - $.effects = { - effect: {} - }; - - /******************************************************************************/ - /****************************** CLASS ANIMATIONS ******************************/ - /******************************************************************************/ - (function() { - - var classAnimationActions = ["add", "remove", "toggle"], - shorthandStyles = { - border: 1, - borderBottom: 1, - borderColor: 1, - borderLeft: 1, - borderRight: 1, - borderTop: 1, - borderWidth: 1, - margin: 1, - padding: 1 - }; - - $.each( - ["borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle"], - function(_, prop) { - $.fx.step[prop] = function(fx) { - if (fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr) { - jQuery.style(fx.elem, prop, fx.end); - fx.setAttr = true; - } - }; - } - ); - - function camelCase(string) { - return string.replace(/-([\da-z])/gi, function(all, letter) { - return letter.toUpperCase(); - }); - } - - function getElementStyles(elem) { - var key, len, - style = elem.ownerDocument.defaultView.getComputedStyle(elem), - styles = {}; - - len = style.length; - while (len--) { - key = style[len]; - if (typeof style[key] === "string") { - styles[camelCase(key)] = style[key]; - } - } - - return styles; - } - - function styleDifference(oldStyle, newStyle) { - var diff = {}, - name, value; - - for (name in newStyle) { - value = newStyle[name]; - if (oldStyle[name] !== value) { - if (!shorthandStyles[name]) { - if ($.fx.step[name] || !isNaN(parseFloat(value))) { - diff[name] = value; - } - } - } - } - - return diff; - } - - $.effects.animateClass = function(value, duration, easing, callback) { - var o = $.speed(duration, easing, callback); - - return this.queue(function() { - var animated = $(this), - baseClass = animated.attr("class") || "", - applyClassChange, - allAnimations = o.children ? animated.find("*").addBack() : animated; - - // Map the animated objects to store the original styles. - allAnimations = allAnimations.map(function() { - var el = $(this); - return { - el: el, - start: getElementStyles(this) - }; - }); - - // Apply class change - applyClassChange = function() { - $.each(classAnimationActions, function(i, action) { - if (value[action]) { - animated[action + "Class"](value[action]); - } - }); - }; - applyClassChange(); - - // Map all animated objects again - calculate new styles and diff - allAnimations = allAnimations.map(function() { - this.end = getElementStyles(this.el[0]); - this.diff = styleDifference(this.start, this.end); - return this; - }); - - // Apply original class - animated.attr("class", baseClass); - - // Map all animated objects again - this time collecting a promise - allAnimations = allAnimations.map(function() { - var styleInfo = this, - dfd = $.Deferred(), - opts = $.extend({}, o, { - queue: false, - complete: function() { - dfd.resolve(styleInfo); - } - }); - - this.el.animate(this.diff, opts); - return dfd.promise(); - }); - - // Once all animations have completed: - $.when.apply($, allAnimations.get()).done(function() { - - // Set the final class - applyClassChange(); - - // For each animated element, - // clear all css properties that were animated - $.each(arguments, function() { - var el = this.el; - $.each(this.diff, function(key) { - el.css(key, ""); - }); - }); - - // This is guarnteed to be there if you use jQuery.speed() - // it also handles dequeuing the next anim... - o.complete.call(animated[0]); - }); - }); - }; - - $.fn.extend({ - addClass: (function(orig) { - return function(classNames, speed, easing, callback) { - return speed ? - $.effects.animateClass.call(this, - { add: classNames }, speed, easing, callback) : - orig.apply(this, arguments); - }; - })($.fn.addClass), - - removeClass: (function(orig) { - return function(classNames, speed, easing, callback) { - return arguments.length > 1 ? - $.effects.animateClass.call(this, - { remove: classNames }, speed, easing, callback) : - orig.apply(this, arguments); - }; - })($.fn.removeClass), - - toggleClass: (function(orig) { - return function(classNames, force, speed, easing, callback) { - if (typeof force === "boolean" || force === undefined) { - if (!speed) { - - // Without speed parameter - return orig.apply(this, arguments); - } else { - return $.effects.animateClass.call(this, - (force ? { add: classNames } : { remove: classNames }), - speed, easing, callback); - } - } else { - - // Without force parameter - return $.effects.animateClass.call(this, - { toggle: classNames }, force, speed, easing); - } - }; - })($.fn.toggleClass), - - switchClass: function(remove, add, speed, easing, callback) { - return $.effects.animateClass.call(this, { - add: add, - remove: remove - }, speed, easing, callback); - } - }); - - })(); - - /******************************************************************************/ - /*********************************** EFFECTS **********************************/ - /******************************************************************************/ - - (function() { - - if ($.expr && $.expr.pseudos && $.expr.pseudos.animated) { - $.expr.pseudos.animated = (function(orig) { - return function(elem) { - return !!$(elem).data(dataSpaceAnimated) || orig(elem); - }; - })($.expr.pseudos.animated); - } - - if ($.uiBackCompat === true) { - $.extend($.effects, { - - // Saves a set of properties in a data storage - save: function(element, set) { - var i = 0, length = set.length; - for (; i < length; i++) { - if (set[i] !== null) { - element.data(dataSpace + set[i], element[0].style[set[i]]); - } - } - }, - - // Restores a set of previously saved properties from a data storage - restore: function(element, set) { - var val, i = 0, length = set.length; - for (; i < length; i++) { - if (set[i] !== null) { - val = element.data(dataSpace + set[i]); - element.css(set[i], val); - } - } - }, - - setMode: function(el, mode) { - if (mode === "toggle") { - mode = el.is(":hidden") ? "show" : "hide"; - } - return mode; - }, - - // Wraps the element around a wrapper that copies position properties - createWrapper: function(element) { - - // If the element is already wrapped, return it - if (element.parent().is(".ui-effects-wrapper")) { - return element.parent(); - } - - // Wrap the element - var props = { - width: element.outerWidth(true), - height: element.outerHeight(true), - "float": element.css("float") - }, - wrapper = $("
") - .addClass("ui-effects-wrapper") - .css({ - fontSize: "100%", - background: "transparent", - border: "none", - margin: 0, - padding: 0 - }), - - // Store the size in case width/height are defined in % - Fixes #5245 - size = { - width: element.width(), - height: element.height() - }, - active = document.activeElement; - - // Support: Firefox - // Firefox incorrectly exposes anonymous content - // https://bugzilla.mozilla.org/show_bug.cgi?id=561664 - try { - // eslint-disable-next-line no-unused-expressions - active.id; - } catch (e) { - active = document.body; - } - - element.wrap(wrapper); - - // Fixes #7595 - Elements lose focus when wrapped. - if (element[0] === active || $.contains(element[0], active)) { - $(active).trigger("focus"); - } - - // Hotfix for jQuery 1.4 since some change in wrap() seems to actually - // lose the reference to the wrapped element - wrapper = element.parent(); - - // Transfer positioning properties to the wrapper - if (element.css("position") === "static") { - wrapper.css({ position: "relative" }); - element.css({ position: "relative" }); - } else { - $.extend(props, { - position: element.css("position"), - zIndex: element.css("z-index") - }); - $.each(["top", "left", "bottom", "right"], function(i, pos) { - props[pos] = element.css(pos); - if (isNaN(parseInt(props[pos], 10))) { - props[pos] = "auto"; - } - }); - element.css({ - position: "relative", - top: 0, - left: 0, - right: "auto", - bottom: "auto" - }); - } - element.css(size); - - return wrapper.css(props).show(); - }, - - removeWrapper: function(element) { - var active = document.activeElement; - - if (element.parent().is(".ui-effects-wrapper")) { - element.parent().replaceWith(element); - - // Fixes #7595 - Elements lose focus when wrapped. - if (element[0] === active || $.contains(element[0], active)) { - $(active).trigger("focus"); - } - } - - return element; - } - }); - } - - $.extend($.effects, { - version: "1.14.1", - - define: function(name, mode, effect) { - if (!effect) { - effect = mode; - mode = "effect"; - } - - $.effects.effect[name] = effect; - $.effects.effect[name].mode = mode; - - return effect; - }, - - scaledDimensions: function(element, percent, direction) { - if (percent === 0) { - return { - height: 0, - width: 0, - outerHeight: 0, - outerWidth: 0 - }; - } - - var x = direction !== "horizontal" ? ((percent || 100) / 100) : 1, - y = direction !== "vertical" ? ((percent || 100) / 100) : 1; - - return { - height: element.height() * y, - width: element.width() * x, - outerHeight: element.outerHeight() * y, - outerWidth: element.outerWidth() * x - }; - - }, - - clipToBox: function(animation) { - return { - width: animation.clip.right - animation.clip.left, - height: animation.clip.bottom - animation.clip.top, - left: animation.clip.left, - top: animation.clip.top - }; - }, - - // Injects recently queued functions to be first in line (after "inprogress") - unshift: function(element, queueLength, count) { - var queue = element.queue(); - - if (queueLength > 1) { - queue.splice.apply(queue, - [1, 0].concat(queue.splice(queueLength, count))); - } - element.dequeue(); - }, - - saveStyle: function(element) { - element.data(dataSpaceStyle, element[0].style.cssText); - }, - - restoreStyle: function(element) { - element[0].style.cssText = element.data(dataSpaceStyle) || ""; - element.removeData(dataSpaceStyle); - }, - - mode: function(element, mode) { - var hidden = element.is(":hidden"); - - if (mode === "toggle") { - mode = hidden ? "show" : "hide"; - } - if (hidden ? mode === "hide" : mode === "show") { - mode = "none"; - } - return mode; - }, - - // Translates a [top,left] array into a baseline value - getBaseline: function(origin, original) { - var y, x; - - switch (origin[0]) { - case "top": - y = 0; - break; - case "middle": - y = 0.5; - break; - case "bottom": - y = 1; - break; - default: - y = origin[0] / original.height; - } - - switch (origin[1]) { - case "left": - x = 0; - break; - case "center": - x = 0.5; - break; - case "right": - x = 1; - break; - default: - x = origin[1] / original.width; - } - - return { - x: x, - y: y - }; - }, - - // Creates a placeholder element so that the original element can be made absolute - createPlaceholder: function(element) { - var placeholder, - cssPosition = element.css("position"), - position = element.position(); - - // Lock in margins first to account for form elements, which - // will change margin if you explicitly set height - // see: https://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380 - // Support: Safari - element.css({ - marginTop: element.css("marginTop"), - marginBottom: element.css("marginBottom"), - marginLeft: element.css("marginLeft"), - marginRight: element.css("marginRight") - }) - .outerWidth(element.outerWidth()) - .outerHeight(element.outerHeight()); - - if (/^(static|relative)/.test(cssPosition)) { - cssPosition = "absolute"; - - placeholder = $("<" + element[0].nodeName + ">").insertAfter(element).css({ - - // Convert inline to inline block to account for inline elements - // that turn to inline block based on content (like img) - display: /^(inline|ruby)/.test(element.css("display")) ? - "inline-block" : - "block", - visibility: "hidden", - - // Margins need to be set to account for margin collapse - marginTop: element.css("marginTop"), - marginBottom: element.css("marginBottom"), - marginLeft: element.css("marginLeft"), - marginRight: element.css("marginRight"), - "float": element.css("float") - }) - .outerWidth(element.outerWidth()) - .outerHeight(element.outerHeight()) - .addClass("ui-effects-placeholder"); - - element.data(dataSpace + "placeholder", placeholder); - } - - element.css({ - position: cssPosition, - left: position.left, - top: position.top - }); - - return placeholder; - }, - - removePlaceholder: function(element) { - var dataKey = dataSpace + "placeholder", - placeholder = element.data(dataKey); - - if (placeholder) { - placeholder.remove(); - element.removeData(dataKey); - } - }, - - // Removes a placeholder if it exists and restores - // properties that were modified during placeholder creation - cleanUp: function(element) { - $.effects.restoreStyle(element); - $.effects.removePlaceholder(element); - }, - - setTransition: function(element, list, factor, value) { - value = value || {}; - $.each(list, function(i, x) { - var unit = element.cssUnit(x); - if (unit[0] > 0) { - value[x] = unit[0] * factor + unit[1]; - } - }); - return value; - } - }); - - // Return an effect options object for the given parameters: - function _normalizeArguments(effect, options, speed, callback) { - - // Allow passing all options as the first parameter - if ($.isPlainObject(effect)) { - options = effect; - effect = effect.effect; - } - - // Convert to an object - effect = { effect: effect }; - - // Catch (effect, null, ...) - if (options == null) { - options = {}; - } - - // Catch (effect, callback) - if (typeof options === "function") { - callback = options; - speed = null; - options = {}; - } - - // Catch (effect, speed, ?) - if (typeof options === "number" || $.fx.speeds[options]) { - callback = speed; - speed = options; - options = {}; - } - - // Catch (effect, options, callback) - if (typeof speed === "function") { - callback = speed; - speed = null; - } - - // Add options to effect - if (options) { - $.extend(effect, options); - } - - speed = speed || options.duration; - effect.duration = $.fx.off ? 0 : - typeof speed === "number" ? speed : - speed in $.fx.speeds ? $.fx.speeds[speed] : - $.fx.speeds._default; - - effect.complete = callback || options.complete; - - return effect; - } - - function standardAnimationOption(option) { - - // Valid standard speeds (nothing, number, named speed) - if (!option || typeof option === "number" || $.fx.speeds[option]) { - return true; - } - - // Invalid strings - treat as "normal" speed - if (typeof option === "string" && !$.effects.effect[option]) { - return true; - } - - // Complete callback - if (typeof option === "function") { - return true; - } - - // Options hash (but not naming an effect) - if (typeof option === "object" && !option.effect) { - return true; - } - - // Didn't match any standard API - return false; - } - - $.fn.extend({ - effect: function( /* effect, options, speed, callback */) { - var args = _normalizeArguments.apply(this, arguments), - effectMethod = $.effects.effect[args.effect], - defaultMode = effectMethod.mode, - queue = args.queue, - queueName = queue || "fx", - complete = args.complete, - mode = args.mode, - modes = [], - prefilter = function(next) { - var el = $(this), - normalizedMode = $.effects.mode(el, mode) || defaultMode; - - // Sentinel for duck-punching the :animated pseudo-selector - el.data(dataSpaceAnimated, true); - - // Save effect mode for later use, - // we can't just call $.effects.mode again later, - // as the .show() below destroys the initial state - modes.push(normalizedMode); - - // See $.uiBackCompat inside of run() for removal of defaultMode in 1.14 - if (defaultMode && (normalizedMode === "show" || - (normalizedMode === defaultMode && normalizedMode === "hide"))) { - el.show(); - } - - if (!defaultMode || normalizedMode !== "none") { - $.effects.saveStyle(el); - } - - if (typeof next === "function") { - next(); - } - }; - - if ($.fx.off || !effectMethod) { - - // Delegate to the original method (e.g., .show()) if possible - if (mode) { - return this[mode](args.duration, complete); - } else { - return this.each(function() { - if (complete) { - complete.call(this); - } - }); - } - } - - function run(next) { - var elem = $(this); - - function cleanup() { - elem.removeData(dataSpaceAnimated); - - $.effects.cleanUp(elem); - - if (args.mode === "hide") { - elem.hide(); - } - - done(); - } - - function done() { - if (typeof complete === "function") { - complete.call(elem[0]); - } - - if (typeof next === "function") { - next(); - } - } - - // Override mode option on a per element basis, - // as toggle can be either show or hide depending on element state - args.mode = modes.shift(); - - if ($.uiBackCompat === true && !defaultMode) { - if (elem.is(":hidden") ? mode === "hide" : mode === "show") { - - // Call the core method to track "olddisplay" properly - elem[mode](); - done(); - } else { - effectMethod.call(elem[0], args, done); - } - } else { - if (args.mode === "none") { - - // Call the core method to track "olddisplay" properly - elem[mode](); - done(); - } else { - effectMethod.call(elem[0], args, cleanup); - } - } - } - - // Run prefilter on all elements first to ensure that - // any showing or hiding happens before placeholder creation, - // which ensures that any layout changes are correctly captured. - return queue === false ? - this.each(prefilter).each(run) : - this.queue(queueName, prefilter).queue(queueName, run); - }, - - show: (function(orig) { - return function(option) { - if (standardAnimationOption(option)) { - return orig.apply(this, arguments); - } else { - var args = _normalizeArguments.apply(this, arguments); - args.mode = "show"; - return this.effect.call(this, args); - } - }; - })($.fn.show), - - hide: (function(orig) { - return function(option) { - if (standardAnimationOption(option)) { - return orig.apply(this, arguments); - } else { - var args = _normalizeArguments.apply(this, arguments); - args.mode = "hide"; - return this.effect.call(this, args); - } - }; - })($.fn.hide), - - toggle: (function(orig) { - return function(option) { - if (standardAnimationOption(option) || typeof option === "boolean") { - return orig.apply(this, arguments); - } else { - var args = _normalizeArguments.apply(this, arguments); - args.mode = "toggle"; - return this.effect.call(this, args); - } - }; - })($.fn.toggle), - - cssUnit: function(key) { - var style = this.css(key), - val = []; - - $.each(["em", "px", "%", "pt"], function(i, unit) { - if (style.indexOf(unit) > 0) { - val = [parseFloat(style), unit]; - } - }); - return val; - }, - - cssClip: function(clipObj) { - if (clipObj) { - return this.css("clip", "rect(" + clipObj.top + "px " + clipObj.right + "px " + - clipObj.bottom + "px " + clipObj.left + "px)"); - } - return parseClip(this.css("clip"), this); - }, - - transfer: function(options, done) { - var element = $(this), - target = $(options.to), - targetFixed = target.css("position") === "fixed", - body = $("body"), - fixTop = targetFixed ? body.scrollTop() : 0, - fixLeft = targetFixed ? body.scrollLeft() : 0, - endPosition = target.offset(), - animation = { - top: endPosition.top - fixTop, - left: endPosition.left - fixLeft, - height: target.innerHeight(), - width: target.innerWidth() - }, - startPosition = element.offset(), - transfer = $("
"); - - transfer - .appendTo("body") - .addClass(options.className) - .css({ - top: startPosition.top - fixTop, - left: startPosition.left - fixLeft, - height: element.innerHeight(), - width: element.innerWidth(), - position: targetFixed ? "fixed" : "absolute" - }) - .animate(animation, options.duration, options.easing, function() { - transfer.remove(); - if (typeof done === "function") { - done(); - } - }); - } - }); - - function parseClip(str, element) { - var outerWidth = element.outerWidth(), - outerHeight = element.outerHeight(), - clipRegex = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/, - values = clipRegex.exec(str) || ["", 0, outerWidth, outerHeight, 0]; - - return { - top: parseFloat(values[1]) || 0, - right: values[2] === "auto" ? outerWidth : parseFloat(values[2]), - bottom: values[3] === "auto" ? outerHeight : parseFloat(values[3]), - left: parseFloat(values[4]) || 0 - }; - } - - $.fx.step.clip = function(fx) { - if (!fx.clipInit) { - fx.start = $(fx.elem).cssClip(); - if (typeof fx.end === "string") { - fx.end = parseClip(fx.end, fx.elem); - } - fx.clipInit = true; - } - - $(fx.elem).cssClip({ - top: fx.pos * (fx.end.top - fx.start.top) + fx.start.top, - right: fx.pos * (fx.end.right - fx.start.right) + fx.start.right, - bottom: fx.pos * (fx.end.bottom - fx.start.bottom) + fx.start.bottom, - left: fx.pos * (fx.end.left - fx.start.left) + fx.start.left - }); - }; - - })(); - - /******************************************************************************/ - /*********************************** EASING ***********************************/ - /******************************************************************************/ - - (function() { - - // Based on easing equations from Robert Penner (http://robertpenner.com/easing) - - var baseEasings = {}; - - $.each(["Quad", "Cubic", "Quart", "Quint", "Expo"], function(i, name) { - baseEasings[name] = function(p) { - return Math.pow(p, i + 2); - }; - }); - - $.extend(baseEasings, { - Sine: function(p) { - return 1 - Math.cos(p * Math.PI / 2); - }, - Circ: function(p) { - return 1 - Math.sqrt(1 - p * p); - }, - Elastic: function(p) { - return p === 0 || p === 1 ? p : - -Math.pow(2, 8 * (p - 1)) * Math.sin(((p - 1) * 80 - 7.5) * Math.PI / 15); - }, - Back: function(p) { - return p * p * (3 * p - 2); - }, - Bounce: function(p) { - var pow2, - bounce = 4; - - while (p < ((pow2 = Math.pow(2, --bounce)) - 1) / 11) { } - return 1 / Math.pow(4, 3 - bounce) - 7.5625 * Math.pow((pow2 * 3 - 2) / 22 - p, 2); - } - }); - - $.each(baseEasings, function(name, easeIn) { - $.easing["easeIn" + name] = easeIn; - $.easing["easeOut" + name] = function(p) { - return 1 - easeIn(1 - p); - }; - $.easing["easeInOut" + name] = function(p) { - return p < 0.5 ? - easeIn(p * 2) / 2 : - 1 - easeIn(p * -2 + 2) / 2; - }; - }); - - })(); - - var effect = $.effects; - - - /*! - * jQuery UI Effects Blind 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Blind Effect - //>>group: Effects - //>>description: Blinds the element. - //>>docs: https://api.jqueryui.com/blind-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectBlind = $.effects.define("blind", "hide", function(options, done) { - var map = { - up: ["bottom", "top"], - vertical: ["bottom", "top"], - down: ["top", "bottom"], - left: ["right", "left"], - horizontal: ["right", "left"], - right: ["left", "right"] - }, - element = $(this), - direction = options.direction || "up", - start = element.cssClip(), - animate = { clip: $.extend({}, start) }, - placeholder = $.effects.createPlaceholder(element); - - animate.clip[map[direction][0]] = animate.clip[map[direction][1]]; - - if (options.mode === "show") { - element.cssClip(animate.clip); - if (placeholder) { - placeholder.css($.effects.clipToBox(animate)); - } - - animate.clip = start; - } - - if (placeholder) { - placeholder.animate($.effects.clipToBox(animate), options.duration, options.easing); - } - - element.animate(animate, { - queue: false, - duration: options.duration, - easing: options.easing, - complete: done - }); - }); - - - /*! - * jQuery UI Effects Bounce 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Bounce Effect - //>>group: Effects - //>>description: Bounces an element horizontally or vertically n times. - //>>docs: https://api.jqueryui.com/bounce-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectBounce = $.effects.define("bounce", function(options, done) { - var upAnim, downAnim, refValue, - element = $(this), - - // Defaults: - mode = options.mode, - hide = mode === "hide", - show = mode === "show", - direction = options.direction || "up", - distance = options.distance, - times = options.times || 5, - - // Number of internal animations - anims = times * 2 + (show || hide ? 1 : 0), - speed = options.duration / anims, - easing = options.easing, - - // Utility: - ref = (direction === "up" || direction === "down") ? "top" : "left", - motion = (direction === "up" || direction === "left"), - i = 0, - - queuelen = element.queue().length; - - $.effects.createPlaceholder(element); - - refValue = element.css(ref); - - // Default distance for the BIGGEST bounce is the outer Distance / 3 - if (!distance) { - distance = element[ref === "top" ? "outerHeight" : "outerWidth"]() / 3; - } - - if (show) { - downAnim = { opacity: 1 }; - downAnim[ref] = refValue; - - // If we are showing, force opacity 0 and set the initial position - // then do the "first" animation - element - .css("opacity", 0) - .css(ref, motion ? -distance * 2 : distance * 2) - .animate(downAnim, speed, easing); - } - - // Start at the smallest distance if we are hiding - if (hide) { - distance = distance / Math.pow(2, times - 1); - } - - downAnim = {}; - downAnim[ref] = refValue; - - // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here - for (; i < times; i++) { - upAnim = {}; - upAnim[ref] = (motion ? "-=" : "+=") + distance; - - element - .animate(upAnim, speed, easing) - .animate(downAnim, speed, easing); - - distance = hide ? distance * 2 : distance / 2; - } - - // Last Bounce when Hiding - if (hide) { - upAnim = { opacity: 0 }; - upAnim[ref] = (motion ? "-=" : "+=") + distance; - - element.animate(upAnim, speed, easing); - } - - element.queue(done); - - $.effects.unshift(element, queuelen, anims + 1); - }); - - - /*! - * jQuery UI Effects Clip 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Clip Effect - //>>group: Effects - //>>description: Clips the element on and off like an old TV. - //>>docs: https://api.jqueryui.com/clip-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectClip = $.effects.define("clip", "hide", function(options, done) { - var start, - animate = {}, - element = $(this), - direction = options.direction || "vertical", - both = direction === "both", - horizontal = both || direction === "horizontal", - vertical = both || direction === "vertical"; - - start = element.cssClip(); - animate.clip = { - top: vertical ? (start.bottom - start.top) / 2 : start.top, - right: horizontal ? (start.right - start.left) / 2 : start.right, - bottom: vertical ? (start.bottom - start.top) / 2 : start.bottom, - left: horizontal ? (start.right - start.left) / 2 : start.left - }; - - $.effects.createPlaceholder(element); - - if (options.mode === "show") { - element.cssClip(animate.clip); - animate.clip = start; - } - - element.animate(animate, { - queue: false, - duration: options.duration, - easing: options.easing, - complete: done - }); - - }); - - - /*! - * jQuery UI Effects Drop 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Drop Effect - //>>group: Effects - //>>description: Moves an element in one direction and hides it at the same time. - //>>docs: https://api.jqueryui.com/drop-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectDrop = $.effects.define("drop", "hide", function(options, done) { - - var distance, - element = $(this), - mode = options.mode, - show = mode === "show", - direction = options.direction || "left", - ref = (direction === "up" || direction === "down") ? "top" : "left", - motion = (direction === "up" || direction === "left") ? "-=" : "+=", - oppositeMotion = (motion === "+=") ? "-=" : "+=", - animation = { - opacity: 0 - }; - - $.effects.createPlaceholder(element); - - distance = options.distance || - element[ref === "top" ? "outerHeight" : "outerWidth"](true) / 2; - - animation[ref] = motion + distance; - - if (show) { - element.css(animation); - - animation[ref] = oppositeMotion + distance; - animation.opacity = 1; - } - - // Animate - element.animate(animation, { - queue: false, - duration: options.duration, - easing: options.easing, - complete: done - }); - }); - - - /*! - * jQuery UI Effects Explode 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Explode Effect - //>>group: Effects - /* eslint-disable max-len */ - //>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness. - /* eslint-enable max-len */ - //>>docs: https://api.jqueryui.com/explode-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectExplode = $.effects.define("explode", "hide", function(options, done) { - - var i, j, left, top, mx, my, - rows = options.pieces ? Math.round(Math.sqrt(options.pieces)) : 3, - cells = rows, - element = $(this), - mode = options.mode, - show = mode === "show", - - // Show and then visibility:hidden the element before calculating offset - offset = element.show().css("visibility", "hidden").offset(), - - // Width and height of a piece - width = Math.ceil(element.outerWidth() / cells), - height = Math.ceil(element.outerHeight() / rows), - pieces = []; - - // Children animate complete: - function childComplete() { - pieces.push(this); - if (pieces.length === rows * cells) { - animComplete(); - } - } - - // Clone the element for each row and cell. - for (i = 0; i < rows; i++) { // ===> - top = offset.top + i * height; - my = i - (rows - 1) / 2; - - for (j = 0; j < cells; j++) { // ||| - left = offset.left + j * width; - mx = j - (cells - 1) / 2; - - // Create a clone of the now hidden main element that will be absolute positioned - // within a wrapper div off the -left and -top equal to size of our pieces - element - .clone() - .appendTo("body") - .wrap("
") - .css({ - position: "absolute", - visibility: "visible", - left: -j * width, - top: -i * height - }) - - // Select the wrapper - make it overflow: hidden and absolute positioned based on - // where the original was located +left and +top equal to the size of pieces - .parent() - .addClass("ui-effects-explode") - .css({ - position: "absolute", - overflow: "hidden", - width: width, - height: height, - left: left + (show ? mx * width : 0), - top: top + (show ? my * height : 0), - opacity: show ? 0 : 1 - }) - .animate({ - left: left + (show ? 0 : mx * width), - top: top + (show ? 0 : my * height), - opacity: show ? 1 : 0 - }, options.duration || 500, options.easing, childComplete); - } - } - - function animComplete() { - element.css({ - visibility: "visible" - }); - $(pieces).remove(); - done(); - } - }); - - - /*! - * jQuery UI Effects Fade 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Fade Effect - //>>group: Effects - //>>description: Fades the element. - //>>docs: https://api.jqueryui.com/fade-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectFade = $.effects.define("fade", "toggle", function(options, done) { - var show = options.mode === "show"; - - $(this) - .css("opacity", show ? 0 : 1) - .animate({ - opacity: show ? 1 : 0 - }, { - queue: false, - duration: options.duration, - easing: options.easing, - complete: done - }); - }); - - - /*! - * jQuery UI Effects Fold 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Fold Effect - //>>group: Effects - //>>description: Folds an element first horizontally and then vertically. - //>>docs: https://api.jqueryui.com/fold-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectFold = $.effects.define("fold", "hide", function(options, done) { - - // Create element - var element = $(this), - mode = options.mode, - show = mode === "show", - hide = mode === "hide", - size = options.size || 15, - percent = /([0-9]+)%/.exec(size), - horizFirst = !!options.horizFirst, - ref = horizFirst ? ["right", "bottom"] : ["bottom", "right"], - duration = options.duration / 2, - - placeholder = $.effects.createPlaceholder(element), - - start = element.cssClip(), - animation1 = { clip: $.extend({}, start) }, - animation2 = { clip: $.extend({}, start) }, - - distance = [start[ref[0]], start[ref[1]]], - - queuelen = element.queue().length; - - if (percent) { - size = parseInt(percent[1], 10) / 100 * distance[hide ? 0 : 1]; - } - animation1.clip[ref[0]] = size; - animation2.clip[ref[0]] = size; - animation2.clip[ref[1]] = 0; - - if (show) { - element.cssClip(animation2.clip); - if (placeholder) { - placeholder.css($.effects.clipToBox(animation2)); - } - - animation2.clip = start; - } - - // Animate - element - .queue(function(next) { - if (placeholder) { - placeholder - .animate($.effects.clipToBox(animation1), duration, options.easing) - .animate($.effects.clipToBox(animation2), duration, options.easing); - } - - next(); - }) - .animate(animation1, duration, options.easing) - .animate(animation2, duration, options.easing) - .queue(done); - - $.effects.unshift(element, queuelen, 4); - }); - - - /*! - * jQuery UI Effects Highlight 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Highlight Effect - //>>group: Effects - //>>description: Highlights the background of an element in a defined color for a custom duration. - //>>docs: https://api.jqueryui.com/highlight-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectHighlight = $.effects.define("highlight", "show", function(options, done) { - var element = $(this), - animation = { - backgroundColor: element.css("backgroundColor") - }; - - if (options.mode === "hide") { - animation.opacity = 0; - } - - $.effects.saveStyle(element); - - element - .css({ - backgroundImage: "none", - backgroundColor: options.color || "#ffff99" - }) - .animate(animation, { - queue: false, - duration: options.duration, - easing: options.easing, - complete: done - }); - }); - - - /*! - * jQuery UI Effects Size 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Size Effect - //>>group: Effects - //>>description: Resize an element to a specified width and height. - //>>docs: https://api.jqueryui.com/size-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectSize = $.effects.define("size", function(options, done) { - - // Create element - var baseline, factor, temp, - element = $(this), - - // Copy for children - cProps = ["fontSize"], - vProps = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], - hProps = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"], - - // Set options - mode = options.mode, - restore = mode !== "effect", - scale = options.scale || "both", - origin = options.origin || ["middle", "center"], - position = element.css("position"), - pos = element.position(), - original = $.effects.scaledDimensions(element), - from = options.from || original, - to = options.to || $.effects.scaledDimensions(element, 0); - - $.effects.createPlaceholder(element); - - if (mode === "show") { - temp = from; - from = to; - to = temp; - } - - // Set scaling factor - factor = { - from: { - y: from.height / original.height, - x: from.width / original.width - }, - to: { - y: to.height / original.height, - x: to.width / original.width - } - }; - - // Scale the css box - if (scale === "box" || scale === "both") { - - // Vertical props scaling - if (factor.from.y !== factor.to.y) { - from = $.effects.setTransition(element, vProps, factor.from.y, from); - to = $.effects.setTransition(element, vProps, factor.to.y, to); - } - - // Horizontal props scaling - if (factor.from.x !== factor.to.x) { - from = $.effects.setTransition(element, hProps, factor.from.x, from); - to = $.effects.setTransition(element, hProps, factor.to.x, to); - } - } - - // Scale the content - if (scale === "content" || scale === "both") { - - // Vertical props scaling - if (factor.from.y !== factor.to.y) { - from = $.effects.setTransition(element, cProps, factor.from.y, from); - to = $.effects.setTransition(element, cProps, factor.to.y, to); - } - } - - // Adjust the position properties based on the provided origin points - if (origin) { - baseline = $.effects.getBaseline(origin, original); - from.top = (original.outerHeight - from.outerHeight) * baseline.y + pos.top; - from.left = (original.outerWidth - from.outerWidth) * baseline.x + pos.left; - to.top = (original.outerHeight - to.outerHeight) * baseline.y + pos.top; - to.left = (original.outerWidth - to.outerWidth) * baseline.x + pos.left; - } - delete from.outerHeight; - delete from.outerWidth; - element.css(from); - - // Animate the children if desired - if (scale === "content" || scale === "both") { - - vProps = vProps.concat(["marginTop", "marginBottom"]).concat(cProps); - hProps = hProps.concat(["marginLeft", "marginRight"]); - - // Only animate children with width attributes specified - // TODO: is this right? should we include anything with css width specified as well - element.find("*[width]").each(function() { - var child = $(this), - childOriginal = $.effects.scaledDimensions(child), - childFrom = { - height: childOriginal.height * factor.from.y, - width: childOriginal.width * factor.from.x, - outerHeight: childOriginal.outerHeight * factor.from.y, - outerWidth: childOriginal.outerWidth * factor.from.x - }, - childTo = { - height: childOriginal.height * factor.to.y, - width: childOriginal.width * factor.to.x, - outerHeight: childOriginal.height * factor.to.y, - outerWidth: childOriginal.width * factor.to.x - }; - - // Vertical props scaling - if (factor.from.y !== factor.to.y) { - childFrom = $.effects.setTransition(child, vProps, factor.from.y, childFrom); - childTo = $.effects.setTransition(child, vProps, factor.to.y, childTo); - } - - // Horizontal props scaling - if (factor.from.x !== factor.to.x) { - childFrom = $.effects.setTransition(child, hProps, factor.from.x, childFrom); - childTo = $.effects.setTransition(child, hProps, factor.to.x, childTo); - } - - if (restore) { - $.effects.saveStyle(child); - } - - // Animate children - child.css(childFrom); - child.animate(childTo, options.duration, options.easing, function() { - - // Restore children - if (restore) { - $.effects.restoreStyle(child); - } - }); - }); - } - - // Animate - element.animate(to, { - queue: false, - duration: options.duration, - easing: options.easing, - complete: function() { - - var offset = element.offset(); - - if (to.opacity === 0) { - element.css("opacity", from.opacity); - } - - if (!restore) { - element - .css("position", position === "static" ? "relative" : position) - .offset(offset); - - // Need to save style here so that automatic style restoration - // doesn't restore to the original styles from before the animation. - $.effects.saveStyle(element); - } - - done(); - } - }); - - }); - - - /*! - * jQuery UI Effects Scale 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Scale Effect - //>>group: Effects - //>>description: Grows or shrinks an element and its content. - //>>docs: https://api.jqueryui.com/scale-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectScale = $.effects.define("scale", function(options, done) { - - // Create element - var el = $(this), - mode = options.mode, - percent = parseInt(options.percent, 10) || - (parseInt(options.percent, 10) === 0 ? 0 : (mode !== "effect" ? 0 : 100)), - - newOptions = $.extend(true, { - from: $.effects.scaledDimensions(el), - to: $.effects.scaledDimensions(el, percent, options.direction || "both"), - origin: options.origin || ["middle", "center"] - }, options); - - // Fade option to support puff - if (options.fade) { - newOptions.from.opacity = 1; - newOptions.to.opacity = 0; - } - - $.effects.effect.size.call(this, newOptions, done); - }); - - - /*! - * jQuery UI Effects Puff 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Puff Effect - //>>group: Effects - //>>description: Creates a puff effect by scaling the element up and hiding it at the same time. - //>>docs: https://api.jqueryui.com/puff-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectPuff = $.effects.define("puff", "hide", function(options, done) { - var newOptions = $.extend(true, {}, options, { - fade: true, - percent: parseInt(options.percent, 10) || 150 - }); - - $.effects.effect.scale.call(this, newOptions, done); - }); - - - /*! - * jQuery UI Effects Pulsate 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Pulsate Effect - //>>group: Effects - //>>description: Pulsates an element n times by changing the opacity to zero and back. - //>>docs: https://api.jqueryui.com/pulsate-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectPulsate = $.effects.define("pulsate", "show", function(options, done) { - var element = $(this), - mode = options.mode, - show = mode === "show", - hide = mode === "hide", - showhide = show || hide, - - // Showing or hiding leaves off the "last" animation - anims = ((options.times || 5) * 2) + (showhide ? 1 : 0), - duration = options.duration / anims, - animateTo = 0, - i = 1, - queuelen = element.queue().length; - - if (show || !element.is(":visible")) { - element.css("opacity", 0).show(); - animateTo = 1; - } - - // Anims - 1 opacity "toggles" - for (; i < anims; i++) { - element.animate({ opacity: animateTo }, duration, options.easing); - animateTo = 1 - animateTo; - } - - element.animate({ opacity: animateTo }, duration, options.easing); - - element.queue(done); - - $.effects.unshift(element, queuelen, anims + 1); - }); - - - /*! - * jQuery UI Effects Shake 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Shake Effect - //>>group: Effects - //>>description: Shakes an element horizontally or vertically n times. - //>>docs: https://api.jqueryui.com/shake-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectShake = $.effects.define("shake", function(options, done) { - - var i = 1, - element = $(this), - direction = options.direction || "left", - distance = options.distance || 20, - times = options.times || 3, - anims = times * 2 + 1, - speed = Math.round(options.duration / anims), - ref = (direction === "up" || direction === "down") ? "top" : "left", - positiveMotion = (direction === "up" || direction === "left"), - animation = {}, - animation1 = {}, - animation2 = {}, - - queuelen = element.queue().length; - - $.effects.createPlaceholder(element); - - // Animation - animation[ref] = (positiveMotion ? "-=" : "+=") + distance; - animation1[ref] = (positiveMotion ? "+=" : "-=") + distance * 2; - animation2[ref] = (positiveMotion ? "-=" : "+=") + distance * 2; - - // Animate - element.animate(animation, speed, options.easing); - - // Shakes - for (; i < times; i++) { - element - .animate(animation1, speed, options.easing) - .animate(animation2, speed, options.easing); - } - - element - .animate(animation1, speed, options.easing) - .animate(animation, speed / 2, options.easing) - .queue(done); - - $.effects.unshift(element, queuelen, anims + 1); - }); - - - /*! - * jQuery UI Effects Slide 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Slide Effect - //>>group: Effects - //>>description: Slides an element in and out of the viewport. - //>>docs: https://api.jqueryui.com/slide-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effectsEffectSlide = $.effects.define("slide", "show", function(options, done) { - var startClip, startRef, - element = $(this), - map = { - up: ["bottom", "top"], - down: ["top", "bottom"], - left: ["right", "left"], - right: ["left", "right"] - }, - mode = options.mode, - direction = options.direction || "left", - ref = (direction === "up" || direction === "down") ? "top" : "left", - positiveMotion = (direction === "up" || direction === "left"), - distance = options.distance || - element[ref === "top" ? "outerHeight" : "outerWidth"](true), - animation = {}; - - $.effects.createPlaceholder(element); - - startClip = element.cssClip(); - startRef = element.position()[ref]; - - // Define hide animation - animation[ref] = (positiveMotion ? -1 : 1) * distance + startRef; - animation.clip = element.cssClip(); - animation.clip[map[direction][1]] = animation.clip[map[direction][0]]; - - // Reverse the animation if we're showing - if (mode === "show") { - element.cssClip(animation.clip); - element.css(ref, animation[ref]); - animation.clip = startClip; - animation[ref] = startRef; - } - - // Actually animate - element.animate(animation, { - queue: false, - duration: options.duration, - easing: options.easing, - complete: done - }); - }); - - - /*! - * jQuery UI Effects Transfer 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Transfer Effect - //>>group: Effects - //>>description: Displays a transfer effect from one element to another. - //>>docs: https://api.jqueryui.com/transfer-effect/ - //>>demos: https://jqueryui.com/effect/ - - - var effect; - if ($.uiBackCompat === true) { - effect = $.effects.define("transfer", function(options, done) { - $(this).transfer(options, done); - }); - } - var effectsEffectTransfer = effect; - - - /*! - * jQuery UI Focusable 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: :focusable Selector - //>>group: Core - //>>description: Selects elements which can be focused. - //>>docs: https://api.jqueryui.com/focusable-selector/ - - - // Selectors - $.ui.focusable = function(element, hasTabindex) { - var map, mapName, img, focusableIfVisible, fieldset, - nodeName = element.nodeName.toLowerCase(); - - if ("area" === nodeName) { - map = element.parentNode; - mapName = map.name; - if (!element.href || !mapName || map.nodeName.toLowerCase() !== "map") { - return false; - } - img = $("img[usemap='#" + mapName + "']"); - return img.length > 0 && img.is(":visible"); - } - - if (/^(input|select|textarea|button|object)$/.test(nodeName)) { - focusableIfVisible = !element.disabled; - - if (focusableIfVisible) { - - // Form controls within a disabled fieldset are disabled. - // However, controls within the fieldset's legend do not get disabled. - // Since controls generally aren't placed inside legends, we skip - // this portion of the check. - fieldset = $(element).closest("fieldset")[0]; - if (fieldset) { - focusableIfVisible = !fieldset.disabled; - } - } - } else if ("a" === nodeName) { - focusableIfVisible = element.href || hasTabindex; - } else { - focusableIfVisible = hasTabindex; - } - - return focusableIfVisible && $(element).is(":visible") && - $(element).css("visibility") === "visible"; - }; - - $.extend($.expr.pseudos, { - focusable: function(element) { - return $.ui.focusable(element, $.attr(element, "tabindex") != null); - } - }); - - var focusable = $.ui.focusable; - - - /*! - * jQuery UI Form Reset Mixin 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Form Reset Mixin - //>>group: Core - //>>description: Refresh input widgets when their form is reset - //>>docs: https://api.jqueryui.com/form-reset-mixin/ - - - var formResetMixin = $.ui.formResetMixin = { - _formResetHandler: function() { - var form = $(this); - - // Wait for the form reset to actually happen before refreshing - setTimeout(function() { - var instances = form.data("ui-form-reset-instances"); - $.each(instances, function() { - this.refresh(); - }); - }); - }, - - _bindFormResetHandler: function() { - this.form = $(this.element.prop("form")); - if (!this.form.length) { - return; - } - - var instances = this.form.data("ui-form-reset-instances") || []; - if (!instances.length) { - - // We don't use _on() here because we use a single event handler per form - this.form.on("reset.ui-form-reset", this._formResetHandler); - } - instances.push(this); - this.form.data("ui-form-reset-instances", instances); - }, - - _unbindFormResetHandler: function() { - if (!this.form.length) { - return; - } - - var instances = this.form.data("ui-form-reset-instances"); - instances.splice($.inArray(this, instances), 1); - if (instances.length) { - this.form.data("ui-form-reset-instances", instances); - } else { - this.form - .removeData("ui-form-reset-instances") - .off("reset.ui-form-reset"); - } - } - }; - - - /*! - * jQuery UI Legacy jQuery Core patches 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - * - */ - - //>>label: Legacy jQuery Core patches - //>>group: Core - //>>description: Backport `.even()`, `.odd()` and `$.escapeSelector` to older jQuery Core versions (deprecated) - - - // Support: jQuery 2.2.x or older. - // This method has been defined in jQuery 3.0.0. - // Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js - if (!$.escapeSelector) { - $.escapeSelector = function(id) { - return CSS.escape(id + ""); - }; - } - - // Support: jQuery 3.4.x or older - // These methods have been defined in jQuery 3.5.0. - if (!$.fn.even || !$.fn.odd) { - $.fn.extend({ - even: function() { - return this.filter(function(i) { - return i % 2 === 0; - }); - }, - odd: function() { - return this.filter(function(i) { - return i % 2 === 1; - }); - } - }); - } - - ; - /*! - * jQuery UI Keycode 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Keycode - //>>group: Core - //>>description: Provide keycodes as keynames - //>>docs: https://api.jqueryui.com/jQuery.ui.keyCode/ - - - var keycode = $.ui.keyCode = { - BACKSPACE: 8, - COMMA: 188, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - LEFT: 37, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SPACE: 32, - TAB: 9, - UP: 38 - }; - - - /*! - * jQuery UI Labels 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: labels - //>>group: Core - //>>description: Find all the labels associated with a given input - //>>docs: https://api.jqueryui.com/labels/ - - - var labels = $.fn.labels = function() { - var ancestor, selector, id, labels, ancestors; - - if (!this.length) { - return this.pushStack([]); - } - - // Check control.labels first - if (this[0].labels && this[0].labels.length) { - return this.pushStack(this[0].labels); - } - - // If `control.labels` is empty - e.g. inside of document fragments - find - // the labels manually - labels = this.eq(0).parents("label"); - - // Look for the label based on the id - id = this.attr("id"); - if (id) { - - // We don't search against the document in case the element - // is disconnected from the DOM - ancestor = this.eq(0).parents().last(); - - // Get a full set of top level ancestors - ancestors = ancestor.add(ancestor.length ? ancestor.siblings() : this.siblings()); - - // Create a selector for the label based on the id - selector = "label[for='" + CSS.escape(id) + "']"; - - labels = labels.add(ancestors.find(selector).addBack(selector)); - - } - - // Return whatever we have found for labels - return this.pushStack(labels); - }; - - - /*! - * jQuery UI Scroll Parent 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: scrollParent - //>>group: Core - //>>description: Get the closest ancestor element that is scrollable. - //>>docs: https://api.jqueryui.com/scrollParent/ - - - var scrollParent = $.fn.scrollParent = function(includeHidden) { - var position = this.css("position"), - excludeStaticParent = position === "absolute", - overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, - scrollParent = this.parents().filter(function() { - var parent = $(this); - if (excludeStaticParent && parent.css("position") === "static") { - return false; - } - return overflowRegex.test(parent.css("overflow") + parent.css("overflow-y") + - parent.css("overflow-x")); - }).eq(0); - - return position === "fixed" || !scrollParent.length ? - $(this[0].ownerDocument || document) : - scrollParent; - }; - - - /*! - * jQuery UI Tabbable 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: :tabbable Selector - //>>group: Core - //>>description: Selects elements which can be tabbed to. - //>>docs: https://api.jqueryui.com/tabbable-selector/ - - - var tabbable = $.extend($.expr.pseudos, { - tabbable: function(element) { - var tabIndex = $.attr(element, "tabindex"), - hasTabindex = tabIndex != null; - return (!hasTabindex || tabIndex >= 0) && $.ui.focusable(element, hasTabindex); - } - }); - - - /*! - * jQuery UI Unique ID 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: uniqueId - //>>group: Core - //>>description: Functions to generate and remove uniqueId's - //>>docs: https://api.jqueryui.com/uniqueId/ - - - var uniqueId = $.fn.extend({ - uniqueId: (function() { - var uuid = 0; - - return function() { - return this.each(function() { - if (!this.id) { - this.id = "ui-id-" + (++uuid); - } - }); - }; - })(), - - removeUniqueId: function() { - return this.each(function() { - if (/^ui-id-\d+$/.test(this.id)) { - $(this).removeAttr("id"); - } - }); - } - }); - - - /*! - * jQuery UI Accordion 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Accordion - //>>group: Widgets - /* eslint-disable max-len */ - //>>description: Displays collapsible content panels for presenting information in a limited amount of space. - /* eslint-enable max-len */ - //>>docs: https://api.jqueryui.com/accordion/ - //>>demos: https://jqueryui.com/accordion/ - //>>css.structure: ../../themes/base/core.css - //>>css.structure: ../../themes/base/accordion.css - //>>css.theme: ../../themes/base/theme.css - - - var widgetsAccordion = $.widget("ui.accordion", { - version: "1.14.1", - options: { - active: 0, - animate: {}, - classes: { - "ui-accordion-header": "ui-corner-top", - "ui-accordion-header-collapsed": "ui-corner-all", - "ui-accordion-content": "ui-corner-bottom" - }, - collapsible: false, - event: "click", - header: function(elem) { - return elem - .find("> li > :first-child") - .add( - elem.find("> :not(li)") - - // Support: jQuery <3.5 only - // We could use `.even()` but that's unavailable in older jQuery. - .filter(function(i) { - return i % 2 === 0; - }) - ); - }, - heightStyle: "auto", - icons: { - activeHeader: "ui-icon-triangle-1-s", - header: "ui-icon-triangle-1-e" - }, - - // Callbacks - activate: null, - beforeActivate: null - }, - - hideProps: { - borderTopWidth: "hide", - borderBottomWidth: "hide", - paddingTop: "hide", - paddingBottom: "hide", - height: "hide" - }, - - showProps: { - borderTopWidth: "show", - borderBottomWidth: "show", - paddingTop: "show", - paddingBottom: "show", - height: "show" - }, - - _create: function() { - var options = this.options; - - this.prevShow = this.prevHide = $(); - this._addClass("ui-accordion", "ui-widget ui-helper-reset"); - this.element.attr("role", "tablist"); - - // Don't allow collapsible: false and active: false / null - if (!options.collapsible && (options.active === false || options.active == null)) { - options.active = 0; - } - - this._processPanels(); - - // handle negative values - if (options.active < 0) { - options.active += this.headers.length; - } - this._refresh(); - }, - - _getCreateEventData: function() { - return { - header: this.active, - panel: !this.active.length ? $() : this.active.next() - }; - }, - - _createIcons: function() { - var icon, children, - icons = this.options.icons; - - if (icons) { - icon = $(""); - this._addClass(icon, "ui-accordion-header-icon", "ui-icon " + icons.header); - icon.prependTo(this.headers); - children = this.active.children(".ui-accordion-header-icon"); - this._removeClass(children, icons.header) - ._addClass(children, null, icons.activeHeader) - ._addClass(this.headers, "ui-accordion-icons"); - } - }, - - _destroyIcons: function() { - this._removeClass(this.headers, "ui-accordion-icons"); - this.headers.children(".ui-accordion-header-icon").remove(); - }, - - _destroy: function() { - var contents; - - // Clean up main element - this.element.removeAttr("role"); - - // Clean up headers - this.headers - .removeAttr("role aria-expanded aria-selected aria-controls tabIndex") - .removeUniqueId(); - - this._destroyIcons(); - - // Clean up content panels - contents = this.headers.next() - .css("display", "") - .removeAttr("role aria-hidden aria-labelledby") - .removeUniqueId(); - - if (this.options.heightStyle !== "content") { - contents.css("height", ""); - } - }, - - _setOption: function(key, value) { - if (key === "active") { - - // _activate() will handle invalid values and update this.options - this._activate(value); - return; - } - - if (key === "event") { - if (this.options.event) { - this._off(this.headers, this.options.event); - } - this._setupEvents(value); - } - - this._super(key, value); - - // Setting collapsible: false while collapsed; open first panel - if (key === "collapsible" && !value && this.options.active === false) { - this._activate(0); - } - - if (key === "icons") { - this._destroyIcons(); - if (value) { - this._createIcons(); - } - } - }, - - _setOptionDisabled: function(value) { - this._super(value); - - this.element.attr("aria-disabled", value); - this._toggleClass(null, "ui-state-disabled", !!value); - }, - - _keydown: function(event) { - if (event.altKey || event.ctrlKey) { - return; - } - - var keyCode = $.ui.keyCode, - length = this.headers.length, - currentIndex = this.headers.index(event.target), - toFocus = false; - - switch (event.keyCode) { - case keyCode.RIGHT: - case keyCode.DOWN: - toFocus = this.headers[(currentIndex + 1) % length]; - break; - case keyCode.LEFT: - case keyCode.UP: - toFocus = this.headers[(currentIndex - 1 + length) % length]; - break; - case keyCode.SPACE: - case keyCode.ENTER: - this._eventHandler(event); - break; - case keyCode.HOME: - toFocus = this.headers[0]; - break; - case keyCode.END: - toFocus = this.headers[length - 1]; - break; - } - - if (toFocus) { - $(event.target).attr("tabIndex", -1); - $(toFocus).attr("tabIndex", 0); - $(toFocus).trigger("focus"); - event.preventDefault(); - } - }, - - _panelKeyDown: function(event) { - if (event.keyCode === $.ui.keyCode.UP && event.ctrlKey) { - $(event.currentTarget).prev().trigger("focus"); - } - }, - - refresh: function() { - var options = this.options; - this._processPanels(); - - // Was collapsed or no panel - if ((options.active === false && options.collapsible === true) || - !this.headers.length) { - options.active = false; - this.active = $(); - - // active false only when collapsible is true - } else if (options.active === false) { - this._activate(0); - - // was active, but active panel is gone - } else if (this.active.length && !$.contains(this.element[0], this.active[0])) { - - // all remaining panel are disabled - if (this.headers.length === this.headers.find(".ui-state-disabled").length) { - options.active = false; - this.active = $(); - - // activate previous panel - } else { - this._activate(Math.max(0, options.active - 1)); - } - - // was active, active panel still exists - } else { - - // make sure active index is correct - options.active = this.headers.index(this.active); - } - - this._destroyIcons(); - - this._refresh(); - }, - - _processPanels: function() { - var prevHeaders = this.headers, - prevPanels = this.panels; - - if (typeof this.options.header === "function") { - this.headers = this.options.header(this.element); - } else { - this.headers = this.element.find(this.options.header); - } - this._addClass(this.headers, "ui-accordion-header ui-accordion-header-collapsed", - "ui-state-default"); - - this.panels = this.headers.next().filter(":not(.ui-accordion-content-active)").hide(); - this._addClass(this.panels, "ui-accordion-content", "ui-helper-reset ui-widget-content"); - - // Avoid memory leaks (#10056) - if (prevPanels) { - this._off(prevHeaders.not(this.headers)); - this._off(prevPanels.not(this.panels)); - } - }, - - _refresh: function() { - var maxHeight, - options = this.options, - heightStyle = options.heightStyle, - parent = this.element.parent(); - - this.active = this._findActive(options.active); - this._addClass(this.active, "ui-accordion-header-active", "ui-state-active") - ._removeClass(this.active, "ui-accordion-header-collapsed"); - this._addClass(this.active.next(), "ui-accordion-content-active"); - this.active.next().show(); - - this.headers - .attr("role", "tab") - .each(function() { - var header = $(this), - headerId = header.uniqueId().attr("id"), - panel = header.next(), - panelId = panel.uniqueId().attr("id"); - header.attr("aria-controls", panelId); - panel.attr("aria-labelledby", headerId); - }) - .next() - .attr("role", "tabpanel"); - - this.headers - .not(this.active) - .attr({ - "aria-selected": "false", - "aria-expanded": "false", - tabIndex: -1 - }) - .next() - .attr({ - "aria-hidden": "true" - }) - .hide(); - - // Make sure at least one header is in the tab order - if (!this.active.length) { - this.headers.eq(0).attr("tabIndex", 0); - } else { - this.active.attr({ - "aria-selected": "true", - "aria-expanded": "true", - tabIndex: 0 - }) - .next() - .attr({ - "aria-hidden": "false" - }); - } - - this._createIcons(); - - this._setupEvents(options.event); - - if (heightStyle === "fill") { - maxHeight = parent.height(); - this.element.siblings(":visible").each(function() { - var elem = $(this), - position = elem.css("position"); - - if (position === "absolute" || position === "fixed") { - return; - } - maxHeight -= elem.outerHeight(true); - }); - - this.headers.each(function() { - maxHeight -= $(this).outerHeight(true); - }); - - this.headers.next() - .each(function() { - $(this).height(Math.max(0, maxHeight - - $(this).innerHeight() + $(this).height())); - }) - .css("overflow", "auto"); - } else if (heightStyle === "auto") { - maxHeight = 0; - this.headers.next() - .each(function() { - var isVisible = $(this).is(":visible"); - if (!isVisible) { - $(this).show(); - } - maxHeight = Math.max(maxHeight, $(this).css("height", "").height()); - if (!isVisible) { - $(this).hide(); - } - }) - .height(maxHeight); - } - }, - - _activate: function(index) { - var active = this._findActive(index)[0]; - - // Trying to activate the already active panel - if (active === this.active[0]) { - return; - } - - // Trying to collapse, simulate a click on the currently active header - active = active || this.active[0]; - - this._eventHandler({ - target: active, - currentTarget: active, - preventDefault: $.noop - }); - }, - - _findActive: function(selector) { - return typeof selector === "number" ? this.headers.eq(selector) : $(); - }, - - _setupEvents: function(event) { - var events = { - keydown: "_keydown" - }; - if (event) { - $.each(event.split(" "), function(index, eventName) { - events[eventName] = "_eventHandler"; - }); - } - - this._off(this.headers.add(this.headers.next())); - this._on(this.headers, events); - this._on(this.headers.next(), { keydown: "_panelKeyDown" }); - this._hoverable(this.headers); - this._focusable(this.headers); - }, - - _eventHandler: function(event) { - var activeChildren, clickedChildren, - options = this.options, - active = this.active, - clicked = $(event.currentTarget), - clickedIsActive = clicked[0] === active[0], - collapsing = clickedIsActive && options.collapsible, - toShow = collapsing ? $() : clicked.next(), - toHide = active.next(), - eventData = { - oldHeader: active, - oldPanel: toHide, - newHeader: collapsing ? $() : clicked, - newPanel: toShow - }; - - event.preventDefault(); - - if ( - - // click on active header, but not collapsible - (clickedIsActive && !options.collapsible) || - - // allow canceling activation - (this._trigger("beforeActivate", event, eventData) === false)) { - return; - } - - options.active = collapsing ? false : this.headers.index(clicked); - - // When the call to ._toggle() comes after the class changes - // it causes a very odd bug in IE 8 (see #6720) - this.active = clickedIsActive ? $() : clicked; - this._toggle(eventData); - - // Switch classes - // corner classes on the previously active header stay after the animation - this._removeClass(active, "ui-accordion-header-active", "ui-state-active"); - if (options.icons) { - activeChildren = active.children(".ui-accordion-header-icon"); - this._removeClass(activeChildren, null, options.icons.activeHeader) - ._addClass(activeChildren, null, options.icons.header); - } - - if (!clickedIsActive) { - this._removeClass(clicked, "ui-accordion-header-collapsed") - ._addClass(clicked, "ui-accordion-header-active", "ui-state-active"); - if (options.icons) { - clickedChildren = clicked.children(".ui-accordion-header-icon"); - this._removeClass(clickedChildren, null, options.icons.header) - ._addClass(clickedChildren, null, options.icons.activeHeader); - } - - this._addClass(clicked.next(), "ui-accordion-content-active"); - } - }, - - _toggle: function(data) { - var toShow = data.newPanel, - toHide = this.prevShow.length ? this.prevShow : data.oldPanel; - - // Handle activating a panel during the animation for another activation - this.prevShow.add(this.prevHide).stop(true, true); - this.prevShow = toShow; - this.prevHide = toHide; - - if (this.options.animate) { - this._animate(toShow, toHide, data); - } else { - toHide.hide(); - toShow.show(); - this._toggleComplete(data); - } - - toHide.attr({ - "aria-hidden": "true" - }); - toHide.prev().attr({ - "aria-selected": "false", - "aria-expanded": "false" - }); - - // if we're switching panels, remove the old header from the tab order - // if we're opening from collapsed state, remove the previous header from the tab order - // if we're collapsing, then keep the collapsing header in the tab order - if (toShow.length && toHide.length) { - toHide.prev().attr({ - "tabIndex": -1, - "aria-expanded": "false" - }); - } else if (toShow.length) { - this.headers.filter(function() { - return parseInt($(this).attr("tabIndex"), 10) === 0; - }) - .attr("tabIndex", -1); - } - - toShow - .attr("aria-hidden", "false") - .prev() - .attr({ - "aria-selected": "true", - "aria-expanded": "true", - tabIndex: 0 - }); - }, - - _animate: function(toShow, toHide, data) { - var total, easing, duration, - that = this, - adjust = 0, - boxSizing = toShow.css("box-sizing"), - down = toShow.length && - (!toHide.length || (toShow.index() < toHide.index())), - animate = this.options.animate || {}, - options = down && animate.down || animate, - complete = function() { - that._toggleComplete(data); - }; - - if (typeof options === "number") { - duration = options; - } - if (typeof options === "string") { - easing = options; - } - - // fall back from options to animation in case of partial down settings - easing = easing || options.easing || animate.easing; - duration = duration || options.duration || animate.duration; - - if (!toHide.length) { - return toShow.animate(this.showProps, duration, easing, complete); - } - if (!toShow.length) { - return toHide.animate(this.hideProps, duration, easing, complete); - } - - total = toShow.show().outerHeight(); - toHide.animate(this.hideProps, { - duration: duration, - easing: easing, - step: function(now, fx) { - fx.now = Math.round(now); - } - }); - toShow - .hide() - .animate(this.showProps, { - duration: duration, - easing: easing, - complete: complete, - step: function(now, fx) { - fx.now = Math.round(now); - if (fx.prop !== "height") { - if (boxSizing === "content-box") { - adjust += fx.now; - } - } else if (that.options.heightStyle !== "content") { - fx.now = Math.round(total - toHide.outerHeight() - adjust); - adjust = 0; - } - } - }); - }, - - _toggleComplete: function(data) { - var toHide = data.oldPanel, - prev = toHide.prev(); - - this._removeClass(toHide, "ui-accordion-content-active"); - this._removeClass(prev, "ui-accordion-header-active") - ._addClass(prev, "ui-accordion-header-collapsed"); - - this._trigger("activate", null, data); - } - }); - - - /*! - * jQuery UI Menu 1.14.1 - * https://jqueryui.com - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license. - * https://jquery.org/license - */ - - //>>label: Menu - //>>group: Widgets - //>>description: Creates nestable menus. - //>>docs: https://api.jqueryui.com/menu/ - //>>demos: https://jqueryui.com/menu/ - //>>css.structure: ../../themes/base/core.css - //>>css.structure: ../../themes/base/menu.css - //>>css.theme: ../../themes/base/theme.css - - - var widgetsMenu = $.widget("ui.menu", { - version: "1.14.1", - defaultElement: "