UNPKG

@godfreykaris/tiptap-math-block

Version:

A TipTap extension + React NodeView for editable math blocks (MathQuill + KaTeX)

1,202 lines (1,201 loc) 423 kB
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); // node_modules/jquery/dist/jquery.js var require_jquery = __commonJS({ "node_modules/jquery/dist/jquery.js"(exports, module) { "use strict"; (function(global, factory) { "use strict"; if (typeof module === "object" && typeof module.exports === "object") { module.exports = global.document ? factory(global, true) : function(w) { if (!w.document) { throw new Error("jQuery requires a window with a document"); } return factory(w); }; } else { factory(global); } })(typeof window !== "undefined" ? window : exports, function(window2, noGlobal) { "use strict"; var arr = []; var getProto = Object.getPrototypeOf; var slice = arr.slice; var flat = arr.flat ? function(array) { return arr.flat.call(array); } : function(array) { return arr.concat.apply([], array); }; var push = arr.push; var indexOf = arr.indexOf; var class2type = {}; var toString = class2type.toString; var hasOwn = class2type.hasOwnProperty; var fnToString = hasOwn.toString; var ObjectFunctionString = fnToString.call(Object); var support = {}; var isFunction = function isFunction2(obj) { return typeof obj === "function" && typeof obj.nodeType !== "number" && typeof obj.item !== "function"; }; var isWindow = function isWindow2(obj) { return obj != null && obj === obj.window; }; var document2 = window2.document; var preservedScriptAttributes = { type: true, src: true, nonce: true, noModule: true }; function DOMEval(code, node, doc) { doc = doc || document2; var i, val, script = doc.createElement("script"); script.text = code; if (node) { for (i in preservedScriptAttributes) { val = node[i] || node.getAttribute && node.getAttribute(i); if (val) { script.setAttribute(i, val); } } } doc.head.appendChild(script).parentNode.removeChild(script); } function toType(obj) { if (obj == null) { return obj + ""; } return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj; } var version = "3.7.1", rhtmlSuffix = /HTML$/i, jQuery = function(selector, context) { return new jQuery.fn.init(selector, context); }; jQuery.fn = jQuery.prototype = { // The current version of jQuery being used jquery: version, constructor: jQuery, // The default length of a jQuery object is 0 length: 0, toArray: function() { return slice.call(this); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function(num) { if (num == null) { return slice.call(this); } return num < 0 ? this[num + this.length] : this[num]; }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function(elems) { var ret = jQuery.merge(this.constructor(), elems); ret.prevObject = this; return ret; }, // Execute a callback for every element in the matched set. each: function(callback) { return jQuery.each(this, callback); }, map: function(callback) { return this.pushStack(jQuery.map(this, function(elem, i) { return callback.call(elem, i, elem); })); }, slice: function() { return this.pushStack(slice.apply(this, arguments)); }, first: function() { return this.eq(0); }, last: function() { return this.eq(-1); }, even: function() { return this.pushStack(jQuery.grep(this, function(_elem, i) { return (i + 1) % 2; })); }, odd: function() { return this.pushStack(jQuery.grep(this, function(_elem, i) { return i % 2; })); }, eq: function(i) { var len = this.length, j = +i + (i < 0 ? len : 0); return this.pushStack(j >= 0 && j < len ? [this[j]] : []); }, end: function() { return this.prevObject || this.constructor(); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push, sort: arr.sort, splice: arr.splice }; jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; if (typeof target === "boolean") { deep = target; target = arguments[i] || {}; i++; } if (typeof target !== "object" && !isFunction(target)) { target = {}; } if (i === length) { target = this; i--; } for (; i < length; i++) { if ((options = arguments[i]) != null) { for (name in options) { copy = options[name]; if (name === "__proto__" || target === copy) { continue; } if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) { src = target[name]; if (copyIsArray && !Array.isArray(src)) { clone = []; } else if (!copyIsArray && !jQuery.isPlainObject(src)) { clone = {}; } else { clone = src; } copyIsArray = false; target[name] = jQuery.extend(deep, clone, copy); } else if (copy !== void 0) { target[name] = copy; } } } } return target; }; jQuery.extend({ // Unique for each copy of jQuery on the page expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""), // Assume jQuery is ready without the ready module isReady: true, error: function(msg) { throw new Error(msg); }, noop: function() { }, isPlainObject: function(obj) { var proto, Ctor; if (!obj || toString.call(obj) !== "[object Object]") { return false; } proto = getProto(obj); if (!proto) { return true; } Ctor = hasOwn.call(proto, "constructor") && proto.constructor; return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString; }, isEmptyObject: function(obj) { var name; for (name in obj) { return false; } return true; }, // Evaluates a script in a provided context; falls back to the global one // if not specified. globalEval: function(code, options, doc) { DOMEval(code, { nonce: options && options.nonce }, doc); }, each: function(obj, callback) { var length, i = 0; if (isArrayLike(obj)) { length = obj.length; for (; i < length; i++) { if (callback.call(obj[i], i, obj[i]) === false) { break; } } } else { for (i in obj) { if (callback.call(obj[i], i, obj[i]) === false) { break; } } } return obj; }, // Retrieve the text value of an array of DOM nodes text: function(elem) { var node, ret = "", i = 0, nodeType = elem.nodeType; if (!nodeType) { while (node = elem[i++]) { ret += jQuery.text(node); } } if (nodeType === 1 || nodeType === 11) { return elem.textContent; } if (nodeType === 9) { return elem.documentElement.textContent; } if (nodeType === 3 || nodeType === 4) { return elem.nodeValue; } return ret; }, // results is for internal usage only makeArray: function(arr2, results) { var ret = results || []; if (arr2 != null) { if (isArrayLike(Object(arr2))) { jQuery.merge( ret, typeof arr2 === "string" ? [arr2] : arr2 ); } else { push.call(ret, arr2); } } return ret; }, inArray: function(elem, arr2, i) { return arr2 == null ? -1 : indexOf.call(arr2, elem, i); }, isXMLDoc: function(elem) { var namespace = elem && elem.namespaceURI, docElem = elem && (elem.ownerDocument || elem).documentElement; return !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || "HTML"); }, // Support: Android <=4.0 only, PhantomJS 1 only // push.apply(_, arraylike) throws on ancient WebKit merge: function(first, second) { var len = +second.length, j = 0, i = first.length; for (; j < len; j++) { first[i++] = second[j]; } first.length = i; return first; }, grep: function(elems, callback, invert) { var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert; for (; i < length; i++) { callbackInverse = !callback(elems[i], i); if (callbackInverse !== callbackExpect) { matches.push(elems[i]); } } return matches; }, // arg is for internal usage only map: function(elems, callback, arg) { var length, value, i = 0, ret = []; if (isArrayLike(elems)) { length = elems.length; for (; i < length; i++) { value = callback(elems[i], i, arg); if (value != null) { ret.push(value); } } } else { for (i in elems) { value = callback(elems[i], i, arg); if (value != null) { ret.push(value); } } } return flat(ret); }, // A global GUID counter for objects guid: 1, // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support }); if (typeof Symbol === "function") { jQuery.fn[Symbol.iterator] = arr[Symbol.iterator]; } jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(_i, name) { class2type["[object " + name + "]"] = name.toLowerCase(); } ); function isArrayLike(obj) { var length = !!obj && "length" in obj && obj.length, type = toType(obj); if (isFunction(obj) || isWindow(obj)) { return false; } return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj; } function nodeName(elem, name) { return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); } var pop = arr.pop; var sort = arr.sort; var splice = arr.splice; var whitespace = "[\\x20\\t\\r\\n\\f]"; var rtrimCSS = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ); jQuery.contains = function(a, b) { var bup = b && b.parentNode; return a === bup || !!(bup && bup.nodeType === 1 && // Support: IE 9 - 11+ // IE doesn't have `contains` on SVG. (a.contains ? a.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16)); }; var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; function fcssescape(ch, asCodePoint) { if (asCodePoint) { if (ch === "\0") { return "\uFFFD"; } return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " "; } return "\\" + ch; } jQuery.escapeSelector = function(sel) { return (sel + "").replace(rcssescape, fcssescape); }; var preferredDoc = document2, pushNative = push; (function() { var i, Expr, outermostContext, sortInput, hasDuplicate, push2 = pushNative, document3, documentElement2, documentIsHTML, rbuggyQSA, matches, expando = jQuery.expando, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), nonnativeSelectorCache = createCache(), sortOrder = function(a, b) { if (a === b) { hasDuplicate = true; } return 0; }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" `*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(` + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + `)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|` + attributes + ")*)|.*)\\)|)", rwhitespace = new RegExp(whitespace + "+", "g"), rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"), rleadingCombinator = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"), rdescend = new RegExp(whitespace + "|>"), rpseudo = new RegExp(pseudos), ridentifier = new RegExp("^" + identifier + "$"), matchExpr = { ID: new RegExp("^#(" + identifier + ")"), CLASS: new RegExp("^\\.(" + identifier + ")"), TAG: new RegExp("^(" + identifier + "|[*])"), ATTR: new RegExp("^" + attributes), PSEUDO: new RegExp("^" + pseudos), CHILD: new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), bool: new RegExp("^(?:" + booleans + ")$", "i"), // For use in libraries implementing .is() // We use this for POS matching in `select` needsContext: new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i") }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rquickExpr2 = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g"), funescape = function(escape, nonHex) { var high = "0x" + escape.slice(1) - 65536; if (nonHex) { return nonHex; } return high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320); }, unloadHandler = function() { setDocument(); }, inDisabledFieldset = addCombinator( function(elem) { return elem.disabled === true && nodeName(elem, "fieldset"); }, { dir: "parentNode", next: "legend" } ); function safeActiveElement() { try { return document3.activeElement; } catch (err) { } } try { push2.apply( arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes ); arr[preferredDoc.childNodes.length].nodeType; } catch (e) { push2 = { apply: function(target, els) { pushNative.apply(target, slice.call(els)); }, call: function(target) { pushNative.apply(target, slice.call(arguments, 1)); } }; } function find(selector, context, results, seed) { var m, i2, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, nodeType = context ? context.nodeType : 9; results = results || []; if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) { return results; } if (!seed) { setDocument(context); context = context || document3; if (documentIsHTML) { if (nodeType !== 11 && (match = rquickExpr2.exec(selector))) { if (m = match[1]) { if (nodeType === 9) { if (elem = context.getElementById(m)) { if (elem.id === m) { push2.call(results, elem); return results; } } else { return results; } } else { if (newContext && (elem = newContext.getElementById(m)) && find.contains(context, elem) && elem.id === m) { push2.call(results, elem); return results; } } } else if (match[2]) { push2.apply(results, context.getElementsByTagName(selector)); return results; } else if ((m = match[3]) && context.getElementsByClassName) { push2.apply(results, context.getElementsByClassName(m)); return results; } } if (!nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector))) { newSelector = selector; newContext = context; if (nodeType === 1 && (rdescend.test(selector) || rleadingCombinator.test(selector))) { newContext = rsibling.test(selector) && testContext(context.parentNode) || context; if (newContext != context || !support.scope) { if (nid = context.getAttribute("id")) { nid = jQuery.escapeSelector(nid); } else { context.setAttribute("id", nid = expando); } } groups = tokenize(selector); i2 = groups.length; while (i2--) { groups[i2] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i2]); } newSelector = groups.join(","); } try { push2.apply( results, newContext.querySelectorAll(newSelector) ); return results; } catch (qsaError) { nonnativeSelectorCache(selector, true); } finally { if (nid === expando) { context.removeAttribute("id"); } } } } } return select(selector.replace(rtrimCSS, "$1"), context, results, seed); } function createCache() { var keys = []; function cache(key, value) { if (keys.push(key + " ") > Expr.cacheLength) { delete cache[keys.shift()]; } return cache[key + " "] = value; } return cache; } function markFunction(fn) { fn[expando] = true; return fn; } function assert(fn) { var el = document3.createElement("fieldset"); try { return !!fn(el); } catch (e) { return false; } finally { if (el.parentNode) { el.parentNode.removeChild(el); } el = null; } } function createInputPseudo(type) { return function(elem) { return nodeName(elem, "input") && elem.type === type; }; } function createButtonPseudo(type) { return function(elem) { return (nodeName(elem, "input") || nodeName(elem, "button")) && elem.type === type; }; } function createDisabledPseudo(disabled) { return function(elem) { if ("form" in elem) { if (elem.parentNode && elem.disabled === false) { if ("label" in elem) { if ("label" in elem.parentNode) { return elem.parentNode.disabled === disabled; } else { return elem.disabled === disabled; } } return elem.isDisabled === disabled || // Where there is no isDisabled, check manually elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled; } return elem.disabled === disabled; } else if ("label" in elem) { return elem.disabled === disabled; } return false; }; } function createPositionalPseudo(fn) { return markFunction(function(argument) { argument = +argument; return markFunction(function(seed, matches2) { var j, matchIndexes = fn([], seed.length, argument), i2 = matchIndexes.length; while (i2--) { if (seed[j = matchIndexes[i2]]) { seed[j] = !(matches2[j] = seed[j]); } } }); }); } function testContext(context) { return context && typeof context.getElementsByTagName !== "undefined" && context; } function setDocument(node) { var subWindow, doc = node ? node.ownerDocument || node : preferredDoc; if (doc == document3 || doc.nodeType !== 9 || !doc.documentElement) { return document3; } document3 = doc; documentElement2 = document3.documentElement; documentIsHTML = !jQuery.isXMLDoc(document3); matches = documentElement2.matches || documentElement2.webkitMatchesSelector || documentElement2.msMatchesSelector; if (documentElement2.msMatchesSelector && // Support: IE 11+, Edge 17 - 18+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq preferredDoc != document3 && (subWindow = document3.defaultView) && subWindow.top !== subWindow) { subWindow.addEventListener("unload", unloadHandler); } support.getById = assert(function(el) { documentElement2.appendChild(el).id = jQuery.expando; return !document3.getElementsByName || !document3.getElementsByName(jQuery.expando).length; }); support.disconnectedMatch = assert(function(el) { return matches.call(el, "*"); }); support.scope = assert(function() { return document3.querySelectorAll(":scope"); }); support.cssHas = assert(function() { try { document3.querySelector(":has(*,:jqfake)"); return false; } catch (e) { return true; } }); if (support.getById) { Expr.filter.ID = function(id) { var attrId = id.replace(runescape, funescape); return function(elem) { return elem.getAttribute("id") === attrId; }; }; Expr.find.ID = function(id, context) { if (typeof context.getElementById !== "undefined" && documentIsHTML) { var elem = context.getElementById(id); return elem ? [elem] : []; } }; } else { Expr.filter.ID = function(id) { var attrId = id.replace(runescape, funescape); return function(elem) { var node2 = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); return node2 && node2.value === attrId; }; }; Expr.find.ID = function(id, context) { if (typeof context.getElementById !== "undefined" && documentIsHTML) { var node2, i2, elems, elem = context.getElementById(id); if (elem) { node2 = elem.getAttributeNode("id"); if (node2 && node2.value === id) { return [elem]; } elems = context.getElementsByName(id); i2 = 0; while (elem = elems[i2++]) { node2 = elem.getAttributeNode("id"); if (node2 && node2.value === id) { return [elem]; } } } return []; } }; } Expr.find.TAG = function(tag, context) { if (typeof context.getElementsByTagName !== "undefined") { return context.getElementsByTagName(tag); } else { return context.querySelectorAll(tag); } }; Expr.find.CLASS = function(className, context) { if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) { return context.getElementsByClassName(className); } }; rbuggyQSA = []; assert(function(el) { var input; documentElement2.appendChild(el).innerHTML = "<a id='" + expando + "' href='' disabled='disabled'></a><select id='" + expando + "-\r\\' disabled='disabled'><option selected=''></option></select>"; if (!el.querySelectorAll("[selected]").length) { rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")"); } if (!el.querySelectorAll("[id~=" + expando + "-]").length) { rbuggyQSA.push("~="); } if (!el.querySelectorAll("a#" + expando + "+*").length) { rbuggyQSA.push(".#.+[+~]"); } if (!el.querySelectorAll(":checked").length) { rbuggyQSA.push(":checked"); } input = document3.createElement("input"); input.setAttribute("type", "hidden"); el.appendChild(input).setAttribute("name", "D"); documentElement2.appendChild(el).disabled = true; if (el.querySelectorAll(":disabled").length !== 2) { rbuggyQSA.push(":enabled", ":disabled"); } input = document3.createElement("input"); input.setAttribute("name", ""); el.appendChild(input); if (!el.querySelectorAll("[name='']").length) { rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + `*(?:''|"")`); } }); if (!support.cssHas) { rbuggyQSA.push(":has"); } rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|")); sortOrder = function(a, b) { if (a === b) { hasDuplicate = true; return 0; } var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; if (compare) { return compare; } compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : ( // Otherwise we know they are disconnected 1 ); if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) { if (a === document3 || a.ownerDocument == preferredDoc && find.contains(preferredDoc, a)) { return -1; } if (b === document3 || b.ownerDocument == preferredDoc && find.contains(preferredDoc, b)) { return 1; } return sortInput ? indexOf.call(sortInput, a) - indexOf.call(sortInput, b) : 0; } return compare & 4 ? -1 : 1; }; return document3; } find.matches = function(expr, elements) { return find(expr, null, null, elements); }; find.matchesSelector = function(elem, expr) { setDocument(elem); if (documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyQSA || !rbuggyQSA.test(expr))) { try { var ret = matches.call(elem, expr); if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11) { return ret; } } catch (e) { nonnativeSelectorCache(expr, true); } } return find(expr, document3, null, [elem]).length > 0; }; find.contains = function(context, elem) { if ((context.ownerDocument || context) != document3) { setDocument(context); } return jQuery.contains(context, elem); }; find.attr = function(elem, name) { if ((elem.ownerDocument || elem) != document3) { setDocument(elem); } var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : void 0; if (val !== void 0) { return val; } return elem.getAttribute(name); }; find.error = function(msg) { throw new Error("Syntax error, unrecognized expression: " + msg); }; jQuery.uniqueSort = function(results) { var elem, duplicates = [], j = 0, i2 = 0; hasDuplicate = !support.sortStable; sortInput = !support.sortStable && slice.call(results, 0); sort.call(results, sortOrder); if (hasDuplicate) { while (elem = results[i2++]) { if (elem === results[i2]) { j = duplicates.push(i2); } } while (j--) { splice.call(results, duplicates[j], 1); } } sortInput = null; return results; }; jQuery.fn.uniqueSort = function() { return this.pushStack(jQuery.uniqueSort(slice.apply(this))); }; Expr = jQuery.expr = { // Can be adjusted by the user cacheLength: 50, createPseudo: markFunction, match: matchExpr, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: true }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: true }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function(match) { match[1] = match[1].replace(runescape, funescape); match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape); if (match[2] === "~=") { match[3] = " " + match[3] + " "; } return match.slice(0, 4); }, CHILD: function(match) { match[1] = match[1].toLowerCase(); if (match[1].slice(0, 3) === "nth") { if (!match[3]) { find.error(match[0]); } match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd")); match[5] = +(match[7] + match[8] || match[3] === "odd"); } else if (match[3]) { find.error(match[0]); } return match; }, PSEUDO: function(match) { var excess, unquoted = !match[6] && match[2]; if (matchExpr.CHILD.test(match[0])) { return null; } if (match[3]) { match[2] = match[4] || match[5] || ""; } else if (unquoted && rpseudo.test(unquoted) && // Get excess from tokenize (recursively) (excess = tokenize(unquoted, true)) && // advance to the next closing parenthesis (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) { match[0] = match[0].slice(0, excess); match[2] = unquoted.slice(0, excess); } return match.slice(0, 3); } }, filter: { TAG: function(nodeNameSelector) { var expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase(); return nodeNameSelector === "*" ? function() { return true; } : function(elem) { return nodeName(elem, expectedNodeName); }; }, CLASS: function(className) { var pattern = classCache[className + " "]; return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function(elem) { return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); }); }, ATTR: function(name, operator, check) { return function(elem) { var result = find.attr(elem, name); if (result == null) { return operator === "!="; } if (!operator) { return true; } result += ""; if (operator === "=") { return result === check; } if (operator === "!=") { return result !== check; } if (operator === "^=") { return check && result.indexOf(check) === 0; } if (operator === "*=") { return check && result.indexOf(check) > -1; } if (operator === "$=") { return check && result.slice(-check.length) === check; } if (operator === "~=") { return (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1; } if (operator === "|=") { return result === check || result.slice(0, check.length + 1) === check + "-"; } return false; }; }, CHILD: function(type, what, _argument, first, last) { var simple = type.slice(0, 3) !== "nth", forward = type.slice(-4) !== "last", ofType = what === "of-type"; return first === 1 && last === 0 ? ( // Shortcut for :nth-*(n) function(elem) { return !!elem.parentNode; } ) : function(elem, _context, xml) { var cache, outerCache, node, nodeIndex, start, dir2 = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false; if (parent) { if (simple) { while (dir2) { node = elem; while (node = node[dir2]) { if (ofType ? nodeName(node, name) : node.nodeType === 1) { return false; } } start = dir2 = type === "only" && !start && "nextSibling"; } return true; } start = [forward ? parent.firstChild : parent.lastChild]; if (forward && useCache) { outerCache = parent[expando] || (parent[expando] = {}); cache = outerCache[type] || []; nodeIndex = cache[0] === dirruns && cache[1]; diff = nodeIndex && cache[2]; node = nodeIndex && parent.childNodes[nodeIndex]; while (node = ++nodeIndex && node && node[dir2] || // Fallback to seeking `elem` from the start (diff = nodeIndex = 0) || start.pop()) { if (node.nodeType === 1 && ++diff && node === elem) { outerCache[type] = [dirruns, nodeIndex, diff]; break; } } } else { if (useCache) { outerCache = elem[expando] || (elem[expando] = {}); cache = outerCache[type] || []; nodeIndex = cache[0] === dirruns && cache[1]; diff = nodeIndex; } if (diff === false) { while (node = ++nodeIndex && node && node[dir2] || (diff = nodeIndex = 0) || start.pop()) { if ((ofType ? nodeName(node, name) : node.nodeType === 1) && ++diff) { if (useCache) { outerCache = node[expando] || (node[expando] = {}); outerCache[type] = [dirruns, diff]; } if (node === elem) { break; } } } } } diff -= last; return diff === first || diff % first === 0 && diff / first >= 0; } }; }, PSEUDO: function(pseudo, argument) { var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || find.error("unsupported pseudo: " + pseudo); if (fn[expando]) { return fn(argument); } if (fn.length > 1) { args = [pseudo, pseudo, "", argument]; return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function(seed, matches2) { var idx, matched = fn(seed, argument), i2 = matched.length; while (i2--) { idx = indexOf.call(seed, matched[i2]); seed[idx] = !(matches2[idx] = matched[i2]); } }) : function(elem) { return fn(elem, 0, args); }; } return fn; } }, pseudos: { // Potentially complex pseudos not: markFunction(function(selector) { var input = [], results = [], matcher = compile(selector.replace(rtrimCSS, "$1")); return matcher[expando] ? markFunction(function(seed, matches2, _context, xml) { var elem, unmatched = matcher(seed, null, xml, []), i2 = seed.length; while (i2--) { if (elem = unmatched[i2]) { seed[i2] = !(matches2[i2] = elem); } } }) : function(elem, _context, xml) { input[0] = elem; matcher(input, null, xml, results); input[0] = null; return !results.pop(); }; }), has: markFunction(function(selector) { return function(elem) { return find(selector, elem).length > 0; }; }), contains: markFunction(function(text) { text = text.replace(runescape, funescape); return function(elem) { return (elem.textContent || jQuery.text(elem)).indexOf(text) > -1; }; }), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value // being equal to the identifier C, // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." // https://www.w3.org/TR/selectors/#lang-pseudo lang: markFunction(function(lang) { if (!ridentifier.test(lang || "")) { find.error("unsupported lang: " + lang); } lang = lang.replace(runescape, funescape).toLowerCase(); return function(elem) { var elemLang; do { if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf(lang + "-") === 0; } } while ((elem = elem.parentNode) && elem.nodeType === 1); return false; }; }), // Miscellaneous target: function(elem) { var hash = window2.location && window2.location.hash; return hash && hash.slice(1) === elem.id; }, root: function(elem) { return elem === documentElement2; }, focus: function(elem) { return elem === safeActiveElement() && document3.hasFocus() && !!(elem.type || elem.href || ~elem.tabIndex); }, // Boolean properties enabled: createDisabledPseudo(false), disabled: createDisabledPseudo(true), checked: function(elem) { return nodeName(elem, "input") && !!elem.checked || nodeName(elem, "option") && !!elem.selected; }, selected: function(elem) { if (elem.parentNode) { elem.parentNode.selectedIndex; } return elem.selected === true; }, // Contents empty: function(elem) { for (elem = elem.firstChild; elem; elem = elem.nextSibling) { if (elem.nodeType < 6) { return false; } } return true; }, parent: function(elem) { return !Expr.pseudos.empty(elem); }, // Element/input types header: function(elem) { return rheader.test(elem.nodeName); }, input: function(elem) { return rinputs.test(elem.nodeName); }, button: function(elem) { return nodeName(elem, "input") && elem.type === "button" || nodeName(elem, "button"); }, text: function(elem) { var attr; return nodeName(elem, "input") && elem.type === "text" && // Support: IE <10 only // New HTML5 attribute values (e.g., "search") appear // with elem.type === "text" ((attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text"); }, // Position-in-collection first: createPositionalPseudo(function() { return [0]; }), last: createPositionalPseudo(function(_matchIndexes, length) { return [length - 1]; }), eq: createPositionalPseudo(function(_matchIndexes, length, argument) { return [argument < 0 ? argument + length : argument]; }), even: createPositionalPseudo(function(matchIndexes, length) { var i2 = 0; for (; i2 < length; i2 += 2) { matchIndexes.push(i2); } return matchIndexes; }), odd: createPositionalPseudo(function(matchIndexes, length) { var i2 = 1; for (; i2 < length; i2 += 2) { matchIndexes.push(i2); } return matchIndexes; }), lt: createPositionalPseudo(function(matchIndexes, length, argument) { var i2; if (argument < 0) { i2 = argument + length; } else if (argument > length) { i2 = length; } else { i2 = argument; } for (; --i2 >= 0; ) { matchIndexes.push(i2); } return matchIndexes; }), gt: createPositionalPseudo(function(matchIndexes, length, argument) { var i2 = argument < 0 ? argument + length : argument; for (; ++i2 < length; ) { matchIndexes.push(i2); } return matchIndexes; }) } }; Expr.pseudos.nth = Expr.pseudos.eq; for (i in { radio: true, checkbox: true, file: true, password: true, image: true }) { Expr.pseudos[i] = createInputPseudo(i); } for (i in { submit: true, reset: true }) { Expr.pseudos[i] = createButtonPseudo(i); } function setFilters() { } setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); function tokenize(selector, parseOnly) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + " "]; if (cached) { return parseOnly ? 0 : cached.slice(0); } soFar = selector; groups = []; preFilters = Expr.preFilter; while (soFar) { if (!matched || (match = rcomma.exec(soFar))) { if (match) { soFar = soFar.slice(match[0].length) || soFar; } groups.push(tokens = []); } matched = false; if (match = rleadingCombinator.exec(soFar)) { matched = match.shift(); tokens.push({ value: matched, // Cast descendant combinators to space type: match[0].replace(rtrimCSS, " ") }); soFar = soFar.slice(matched.length); } for (type in Expr.filter) { if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) { matched = match.shift(); tokens.push({ value: matched, type, matches: match }); soFar = soFar.slice(matched.length); } } if (!matched) { break; } } if (parseOnly) { return soFar.length; } return soFar ? find.error(selector) : ( // Cache the tokens tokenCache(selector, groups).slice(0) ); } function toSelector(tokens) { var i2 = 0, len = tokens.length, selector = ""; for (; i2 < len; i2++) { selector += tokens[i2].value; } return selector; } function addCombinator(matcher, combinator, base) { var dir2 = combinator.dir, skip = combinator.next, key = skip || dir2, checkNonElements = base && key ==