| ! function(e, t) { |
| for (var n in t) e[n] = t[n] |
| }(window, function(n) { |
| var r = {}; |
| |
| function i(e) { |
| if (r[e]) return r[e].exports; |
| var t = r[e] = { |
| i: e, |
| l: !1, |
| exports: {} |
| }; |
| return n[e].call(t.exports, t, t.exports, i), t.l = !0, t.exports |
| } |
| return i.m = n, i.c = r, i.d = function(e, t, n) { |
| i.o(e, t) || Object.defineProperty(e, t, { |
| enumerable: !0, |
| get: n |
| }) |
| }, i.r = function(e) { |
| "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { |
| value: "Module" |
| }), Object.defineProperty(e, "__esModule", { |
| value: !0 |
| }) |
| }, i.t = function(t, e) { |
| if (1 & e && (t = i(t)), 8 & e) return t; |
| if (4 & e && "object" == typeof t && t && t.__esModule) return t; |
| var n = Object.create(null); |
| if (i.r(n), Object.defineProperty(n, "default", { |
| enumerable: !0, |
| value: t |
| }), 2 & e && "string" != typeof t) |
| for (var r in t) i.d(n, r, function(e) { |
| return t[e] |
| }.bind(null, r)); |
| return n |
| }, i.n = function(e) { |
| var t = e && e.__esModule ? function() { |
| return e.default |
| } : function() { |
| return e |
| }; |
| return i.d(t, "a", t), t |
| }, i.o = function(e, t) { |
| return Object.prototype.hasOwnProperty.call(e, t) |
| }, i.p = "", i(i.s = 13) |
| }([function(e, t, n) { |
| "use strict"; |
| var r = { |
| Listener: function() { |
| function e(e, t, n) { |
| var r = this; |
| this.els_ = Array.prototype.slice.call("string" == typeof e ? document.querySelectorAll(e) : [].concat(e)), this.handler_ = "function" == typeof n ? { |
| update: n |
| } : n, this.events_ = [].concat(t), this.update_ = function(e) { |
| return r.handler_.update(e) |
| } |
| } |
| var t = e.prototype; |
| return t.listen = function() { |
| var n = this; |
| this.els_.forEach(function(t) { |
| n.events_.forEach(function(e) { |
| t.addEventListener(e, n.update_, !1) |
| }) |
| }), "function" == typeof this.handler_.setup && this.handler_.setup() |
| }, t.unlisten = function() { |
| var n = this; |
| this.els_.forEach(function(t) { |
| n.events_.forEach(function(e) { |
| t.removeEventListener(e, n.update_) |
| }) |
| }), "function" == typeof this.handler_.reset && this.handler_.reset() |
| }, e |
| }(), |
| MatchMedia: function(e, t) { |
| this.handler_ = function(e) { |
| e.matches ? t.listen() : t.unlisten() |
| }; |
| var n = window.matchMedia(e); |
| n.addListener(this.handler_), this.handler_(n) |
| } |
| }, |
| i = { |
| Shadow: function() { |
| function e(e, t) { |
| var n = "string" == typeof e ? document.querySelector(e) : e; |
| if (!(n instanceof HTMLElement && n.parentNode instanceof HTMLElement)) throw new ReferenceError; |
| if (this.el_ = n.parentNode, !((n = "string" == typeof t ? document.querySelector(t) : t) instanceof HTMLElement)) throw new ReferenceError; |
| this.header_ = n, this.height_ = 0, this.active_ = !1 |
| } |
| var t = e.prototype; |
| return t.setup = function() { |
| for (var e = this.el_; e = e.previousElementSibling;) { |
| if (!(e instanceof HTMLElement)) throw new ReferenceError; |
| this.height_ += e.offsetHeight |
| } |
| this.update() |
| }, t.update = function(e) { |
| if (!e || "resize" !== e.type && "orientationchange" !== e.type) { |
| var t = window.pageYOffset >= this.height_; |
| t !== this.active_ && (this.header_.dataset.mdState = (this.active_ = t) ? "shadow" : "") |
| } else this.height_ = 0, this.setup() |
| }, t.reset = function() { |
| this.header_.dataset.mdState = "", this.height_ = 0, this.active_ = !1 |
| }, e |
| }(), |
| Title: function() { |
| function e(e, t) { |
| var n = "string" == typeof e ? document.querySelector(e) : e; |
| if (!(n instanceof HTMLElement)) throw new ReferenceError; |
| if (this.el_ = n, !((n = "string" == typeof t ? document.querySelector(t) : t) instanceof HTMLHeadingElement)) throw new ReferenceError; |
| this.header_ = n, this.active_ = !1 |
| } |
| var t = e.prototype; |
| return t.setup = function() { |
| var t = this; |
| Array.prototype.forEach.call(this.el_.children, function(e) { |
| e.style.width = t.el_.offsetWidth - 20 + "px" |
| }) |
| }, t.update = function(e) { |
| var t = this, |
| n = window.pageYOffset >= this.header_.offsetTop; |
| n !== this.active_ && (this.el_.dataset.mdState = (this.active_ = n) ? "active" : ""), "resize" !== e.type && "orientationchange" !== e.type || Array.prototype.forEach.call(this.el_.children, function(e) { |
| e.style.width = t.el_.offsetWidth - 20 + "px" |
| }) |
| }, t.reset = function() { |
| this.el_.dataset.mdState = "", this.el_.style.width = "", this.active_ = !1 |
| }, e |
| }() |
| }, |
| o = { |
| Blur: function() { |
| function e(e) { |
| this.els_ = "string" == typeof e ? document.querySelectorAll(e) : e, this.index_ = 0, this.offset_ = window.pageYOffset, this.dir_ = !1, this.anchors_ = [].reduce.call(this.els_, function(e, t) { |
| var n = decodeURIComponent(t.hash); |
| return e.concat(document.getElementById(n.substring(1)) || []) |
| }, []) |
| } |
| var t = e.prototype; |
| return t.setup = function() { |
| this.update() |
| }, t.update = function() { |
| var e = window.pageYOffset, |
| t = this.offset_ - e < 0; |
| if (this.dir_ !== t && (this.index_ = this.index_ = t ? 0 : this.els_.length - 1), 0 !== this.anchors_.length) { |
| if (this.offset_ <= e) |
| for (var n = this.index_ + 1; n < this.els_.length && this.anchors_[n].offsetTop - 80 <= e; n++) 0 < n && (this.els_[n - 1].dataset.mdState = "blur"), this.index_ = n; |
| else |
| for (var r = this.index_; 0 <= r; r--) { |
| if (!(this.anchors_[r].offsetTop - 80 > e)) { |
| this.index_ = r; |
| break |
| } |
| 0 < r && (this.els_[r - 1].dataset.mdState = "") |
| } |
| this.offset_ = e, this.dir_ = t |
| } |
| }, t.reset = function() { |
| Array.prototype.forEach.call(this.els_, function(e) { |
| e.dataset.mdState = "" |
| }), this.index_ = 0, this.offset_ = window.pageYOffset |
| }, e |
| }(), |
| Collapse: function() { |
| function e(e) { |
| var t = "string" == typeof e ? document.querySelector(e) : e; |
| if (!(t instanceof HTMLElement)) throw new ReferenceError; |
| this.el_ = t |
| } |
| var t = e.prototype; |
| return t.setup = function() { |
| var e = this.el_.getBoundingClientRect().height; |
| this.el_.style.display = e ? "block" : "none", this.el_.style.overflow = e ? "visible" : "hidden" |
| }, t.update = function() { |
| var e = this, |
| t = this.el_.getBoundingClientRect().height; |
| this.el_.style.display = "block", this.el_.style.overflow = ""; |
| var r = this.el_.previousElementSibling.previousElementSibling.checked; |
| if (r) this.el_.style.maxHeight = t + "px", requestAnimationFrame(function() { |
| e.el_.setAttribute("data-md-state", "animate"), e.el_.style.maxHeight = "0px" |
| }); |
| else { |
| this.el_.setAttribute("data-md-state", "expand"), this.el_.style.maxHeight = ""; |
| var n = this.el_.getBoundingClientRect().height; |
| this.el_.removeAttribute("data-md-state"), this.el_.style.maxHeight = "0px", requestAnimationFrame(function() { |
| e.el_.setAttribute("data-md-state", "animate"), e.el_.style.maxHeight = n + "px" |
| }) |
| } |
| this.el_.addEventListener("transitionend", function e(t) { |
| var n = t.target; |
| if (!(n instanceof HTMLElement)) throw new ReferenceError; |
| n.removeAttribute("data-md-state"), n.style.maxHeight = "", n.style.display = r ? "none" : "block", n.style.overflow = r ? "hidden" : "visible", n.removeEventListener("transitionend", e) |
| }, !1) |
| }, t.reset = function() { |
| this.el_.dataset.mdState = "", this.el_.style.maxHeight = "", this.el_.style.display = "", this.el_.style.overflow = "" |
| }, e |
| }(), |
| Scrolling: function() { |
| function e(e) { |
| var t = "string" == typeof e ? document.querySelector(e) : e; |
| if (!(t instanceof HTMLElement)) throw new ReferenceError; |
| this.el_ = t |
| } |
| var t = e.prototype; |
| return t.setup = function() { |
| this.el_.children[this.el_.children.length - 1].style.webkitOverflowScrolling = "touch"; |
| var e = this.el_.querySelectorAll("[data-md-toggle]"); |
| Array.prototype.forEach.call(e, function(e) { |
| if (!(e instanceof HTMLInputElement)) throw new ReferenceError; |
| if (e.checked) { |
| var t = e.nextElementSibling; |
| if (!(t instanceof HTMLElement)) throw new ReferenceError; |
| for (; |
| "NAV" !== t.tagName && t.nextElementSibling;) t = t.nextElementSibling; |
| if (!(e.parentNode instanceof HTMLElement && e.parentNode.parentNode instanceof HTMLElement)) throw new ReferenceError; |
| var n = e.parentNode.parentNode, |
| r = t.children[t.children.length - 1]; |
| n.style.webkitOverflowScrolling = "", r.style.webkitOverflowScrolling = "touch" |
| } |
| }) |
| }, t.update = function(e) { |
| var t = e.target; |
| if (!(t instanceof HTMLElement)) throw new ReferenceError; |
| var n = t.nextElementSibling; |
| if (!(n instanceof HTMLElement)) throw new ReferenceError; |
| for (; |
| "NAV" !== n.tagName && n.nextElementSibling;) n = n.nextElementSibling; |
| if (!(t.parentNode instanceof HTMLElement && t.parentNode.parentNode instanceof HTMLElement)) throw new ReferenceError; |
| var r = t.parentNode.parentNode, |
| i = n.children[n.children.length - 1]; |
| if (r.style.webkitOverflowScrolling = "", i.style.webkitOverflowScrolling = "", !t.checked) { |
| n.addEventListener("transitionend", function e() { |
| n instanceof HTMLElement && (r.style.webkitOverflowScrolling = "touch", n.removeEventListener("transitionend", e)) |
| }, !1) |
| } |
| if (t.checked) { |
| n.addEventListener("transitionend", function e() { |
| n instanceof HTMLElement && (i.style.webkitOverflowScrolling = "touch", n.removeEventListener("transitionend", e)) |
| }, !1) |
| } |
| }, t.reset = function() { |
| this.el_.children[1].style.webkitOverflowScrolling = ""; |
| var e = this.el_.querySelectorAll("[data-md-toggle]"); |
| Array.prototype.forEach.call(e, function(e) { |
| if (!(e instanceof HTMLInputElement)) throw new ReferenceError; |
| if (e.checked) { |
| var t = e.nextElementSibling; |
| if (!(t instanceof HTMLElement)) throw new ReferenceError; |
| for (; |
| "NAV" !== t.tagName && t.nextElementSibling;) t = t.nextElementSibling; |
| if (!(e.parentNode instanceof HTMLElement && e.parentNode.parentNode instanceof HTMLElement)) throw new ReferenceError; |
| var n = e.parentNode.parentNode, |
| r = t.children[t.children.length - 1]; |
| n.style.webkitOverflowScrolling = "", r.style.webkitOverflowScrolling = "" |
| } |
| }) |
| }, e |
| }() |
| }, |
| a = { |
| Lock: function() { |
| function e(e) { |
| var t = "string" == typeof e ? document.querySelector(e) : e; |
| if (!(t instanceof HTMLInputElement)) throw new ReferenceError; |
| if (this.el_ = t, !document.body) throw new ReferenceError; |
| this.lock_ = document.body |
| } |
| var t = e.prototype; |
| return t.setup = function() { |
| this.update() |
| }, t.update = function() { |
| var e = this; |
| this.el_.checked ? (this.offset_ = window.pageYOffset, setTimeout(function() { |
| window.scrollTo(0, 0), e.el_.checked && (e.lock_.dataset.mdState = "lock") |
| }, 400)) : (this.lock_.dataset.mdState = "", setTimeout(function() { |
| void 0 !== e.offset_ && window.scrollTo(0, e.offset_) |
| }, 100)) |
| }, t.reset = function() { |
| "lock" === this.lock_.dataset.mdState && window.scrollTo(0, this.offset_), this.lock_.dataset.mdState = "" |
| }, e |
| }(), |
| Result: n(9).a |
| }, |
| s = { |
| Position: function() { |
| function e(e, t) { |
| var n = "string" == typeof e ? document.querySelector(e) : e; |
| if (!(n instanceof HTMLElement && n.parentNode instanceof HTMLElement)) throw new ReferenceError; |
| if (this.el_ = n, this.parent_ = n.parentNode, !((n = "string" == typeof t ? document.querySelector(t) : t) instanceof HTMLElement)) throw new ReferenceError; |
| this.header_ = n, this.height_ = 0, this.pad_ = "fixed" === window.getComputedStyle(this.header_).position |
| } |
| var t = e.prototype; |
| return t.setup = function() { |
| var e = Array.prototype.reduce.call(this.parent_.children, function(e, t) { |
| return Math.max(e, t.offsetTop) |
| }, 0); |
| this.offset_ = e - (this.pad_ ? this.header_.offsetHeight : 0), this.update() |
| }, t.update = function(e) { |
| var t = window.pageYOffset, |
| n = window.innerHeight; |
| e && "resize" === e.type && this.setup(); |
| var r = this.pad_ ? this.header_.offsetHeight : 0, |
| i = this.parent_.offsetTop + this.parent_.offsetHeight, |
| o = n - r - Math.max(0, this.offset_ - t) - Math.max(0, t + n - i); |
| o !== this.height_ && (this.el_.style.height = (this.height_ = o) + "px"), t >= this.offset_ ? "lock" !== this.el_.dataset.mdState && (this.el_.dataset.mdState = "lock") : "lock" === this.el_.dataset.mdState && (this.el_.dataset.mdState = "") |
| }, t.reset = function() { |
| this.el_.dataset.mdState = "", this.el_.style.height = "", this.height_ = 0 |
| }, e |
| }() |
| }, |
| c = n(6), |
| l = n.n(c); |
| var u = { |
| Adapter: { |
| GitHub: function(o) { |
| var e, t; |
| |
| function n(e) { |
| var t; |
| t = o.call(this, e) || this; |
| var n = /^.+github\.com\/([^/]+)\/?([^/]+)?.*$/.exec(t.base_); |
| if (n && 3 === n.length) { |
| var r = n[1], |
| i = n[2]; |
| t.base_ = "https://api.github.com/users/" + r + "/repos", t.name_ = i |
| } |
| return t |
| } |
| return t = o, (e = n).prototype = Object.create(t.prototype), (e.prototype.constructor = e).__proto__ = t, n.prototype.fetch_ = function() { |
| var i = this; |
| return function n(r) { |
| return void 0 === r && (r = 0), fetch(i.base_ + "?per_page=30&page=" + r).then(function(e) { |
| return e.json() |
| }).then(function(e) { |
| if (!(e instanceof Array)) throw new TypeError; |
| if (i.name_) { |
| var t = e.find(function(e) { |
| return e.name === i.name_ |
| }); |
| return t || 30 !== e.length ? t ? [i.format_(t.stargazers_count) + " Stars", i.format_(t.forks_count) + " Forks"] : [] : n(r + 1) |
| } |
| return [e.length + " Repositories"] |
| }) |
| }() |
| }, n |
| }(function() { |
| function e(e) { |
| var t = "string" == typeof e ? document.querySelector(e) : e; |
| if (!(t instanceof HTMLAnchorElement)) throw new ReferenceError; |
| this.el_ = t, this.base_ = this.el_.href, this.salt_ = this.hash_(this.base_) |
| } |
| var t = e.prototype; |
| return t.fetch = function() { |
| var n = this; |
| return new Promise(function(t) { |
| var e = l.a.getJSON(n.salt_ + ".cache-source"); |
| void 0 !== e ? t(e) : n.fetch_().then(function(e) { |
| l.a.set(n.salt_ + ".cache-source", e, { |
| expires: 1 / 96 |
| }), t(e) |
| }) |
| }) |
| }, t.fetch_ = function() { |
| throw new Error("fetch_(): Not implemented") |
| }, t.format_ = function(e) { |
| return 1e4 < e ? (e / 1e3).toFixed(0) + "k" : 1e3 < e ? (e / 1e3).toFixed(1) + "k" : "" + e |
| }, t.hash_ = function(e) { |
| var t = 0; |
| if (0 === e.length) return t; |
| for (var n = 0, r = e.length; n < r; n++) t = (t << 5) - t + e.charCodeAt(n), t |= 0; |
| return t |
| }, e |
| }()) |
| }, |
| Repository: n(10).a |
| }, |
| f = { |
| Toggle: function() { |
| function e(e) { |
| var t = "string" == typeof e ? document.querySelector(e) : e; |
| if (!(t instanceof Node)) throw new ReferenceError; |
| this.el_ = t; |
| var n = document.querySelector("[data-md-component=header]"); |
| this.height_ = n.offsetHeight, this.active_ = !1 |
| } |
| var t = e.prototype; |
| return t.update = function() { |
| var e = window.pageYOffset >= this.el_.children[0].offsetTop + (5 - this.height_); |
| e !== this.active_ && (this.el_.dataset.mdState = (this.active_ = e) ? "hidden" : "") |
| }, t.reset = function() { |
| this.el_.dataset.mdState = "", this.active_ = !1 |
| }, e |
| }() |
| }; |
| t.a = { |
| Event: r, |
| Header: i, |
| Nav: o, |
| Search: a, |
| Sidebar: s, |
| Source: u, |
| Tabs: f |
| } |
| }, function(t, e, n) { |
| (function(e) { |
| t.exports = e.lunr = n(24) |
| }).call(this, n(4)) |
| }, function(e, f, d) { |
| "use strict"; |
| (function(t) { |
| var e = d(8), |
| n = setTimeout; |
| |
| function r() {} |
| |
| function o(e) { |
| if (!(this instanceof o)) throw new TypeError("Promises must be constructed via new"); |
| if ("function" != typeof e) throw new TypeError("not a function"); |
| this._state = 0, this._handled = !1, this._value = void 0, this._deferreds = [], u(e, this) |
| } |
| |
| function i(n, r) { |
| for (; 3 === n._state;) n = n._value; |
| 0 !== n._state ? (n._handled = !0, o._immediateFn(function() { |
| var e = 1 === n._state ? r.onFulfilled : r.onRejected; |
| if (null !== e) { |
| var t; |
| try { |
| t = e(n._value) |
| } catch (e) { |
| return void s(r.promise, e) |
| } |
| a(r.promise, t) |
| } else(1 === n._state ? a : s)(r.promise, n._value) |
| })) : n._deferreds.push(r) |
| } |
| |
| function a(t, e) { |
| try { |
| if (e === t) throw new TypeError("A promise cannot be resolved with itself."); |
| if (e && ("object" == typeof e || "function" == typeof e)) { |
| var n = e.then; |
| if (e instanceof o) return t._state = 3, t._value = e, void c(t); |
| if ("function" == typeof n) return void u((r = n, i = e, function() { |
| r.apply(i, arguments) |
| }), t) |
| } |
| t._state = 1, t._value = e, c(t) |
| } catch (e) { |
| s(t, e) |
| } |
| var r, i |
| } |
| |
| function s(e, t) { |
| e._state = 2, e._value = t, c(e) |
| } |
| |
| function c(e) { |
| 2 === e._state && 0 === e._deferreds.length && o._immediateFn(function() { |
| e._handled || o._unhandledRejectionFn(e._value) |
| }); |
| for (var t = 0, n = e._deferreds.length; t < n; t++) i(e, e._deferreds[t]); |
| e._deferreds = null |
| } |
| |
| function l(e, t, n) { |
| this.onFulfilled = "function" == typeof e ? e : null, this.onRejected = "function" == typeof t ? t : null, this.promise = n |
| } |
| |
| function u(e, t) { |
| var n = !1; |
| try { |
| e(function(e) { |
| n || (n = !0, a(t, e)) |
| }, function(e) { |
| n || (n = !0, s(t, e)) |
| }) |
| } catch (e) { |
| if (n) return; |
| n = !0, s(t, e) |
| } |
| } |
| o.prototype.catch = function(e) { |
| return this.then(null, e) |
| }, o.prototype.then = function(e, t) { |
| var n = new this.constructor(r); |
| return i(this, new l(e, t, n)), n |
| }, o.prototype.finally = e.a, o.all = function(t) { |
| return new o(function(r, i) { |
| if (!t || void 0 === t.length) throw new TypeError("Promise.all accepts an array"); |
| var o = Array.prototype.slice.call(t); |
| if (0 === o.length) return r([]); |
| var a = o.length; |
| |
| function s(t, e) { |
| try { |
| if (e && ("object" == typeof e || "function" == typeof e)) { |
| var n = e.then; |
| if ("function" == typeof n) return void n.call(e, function(e) { |
| s(t, e) |
| }, i) |
| } |
| o[t] = e, 0 == --a && r(o) |
| } catch (e) { |
| i(e) |
| } |
| } |
| for (var e = 0; e < o.length; e++) s(e, o[e]) |
| }) |
| }, o.resolve = function(t) { |
| return t && "object" == typeof t && t.constructor === o ? t : new o(function(e) { |
| e(t) |
| }) |
| }, o.reject = function(n) { |
| return new o(function(e, t) { |
| t(n) |
| }) |
| }, o.race = function(i) { |
| return new o(function(e, t) { |
| for (var n = 0, r = i.length; n < r; n++) i[n].then(e, t) |
| }) |
| }, o._immediateFn = "function" == typeof t && function(e) { |
| t(e) |
| } || function(e) { |
| n(e, 0) |
| }, o._unhandledRejectionFn = function(e) { |
| "undefined" != typeof console && console && console.warn("Possible Unhandled Promise Rejection:", e) |
| }, f.a = o |
| }).call(this, d(21).setImmediate) |
| }, function(e, t, n) { |
| "use strict"; |
| |
| function r(e, t) { |
| var n = document.createElement(e); |
| t && Array.prototype.forEach.call(Object.keys(t), function(e) { |
| n.setAttribute(e, t[e]) |
| }); |
| for (var r = arguments.length, i = new Array(2 < r ? r - 2 : 0), o = 2; o < r; o++) i[o - 2] = arguments[o]; |
| return function t(e) { |
| Array.prototype.forEach.call(e, function(e) { |
| "string" == typeof e || "number" == typeof e ? n.textContent += e : Array.isArray(e) ? t(e) : void 0 !== e.__html ? n.innerHTML += e.__html : e instanceof Node && n.appendChild(e) |
| }) |
| }(i), n |
| } |
| n.r(t), n.d(t, "createElement", function() { |
| return r |
| }) |
| }, function(e, t) { |
| var n; |
| n = function() { |
| return this |
| }(); |
| try { |
| n = n || new Function("return this")() |
| } catch (e) { |
| "object" == typeof window && (n = window) |
| } |
| e.exports = n |
| }, function(e, t, n) { |
| var r; |
| r = function() { |
| return function(n) { |
| var r = {}; |
| |
| function i(e) { |
| if (r[e]) return r[e].exports; |
| var t = r[e] = { |
| i: e, |
| l: !1, |
| exports: {} |
| }; |
| return n[e].call(t.exports, t, t.exports, i), t.l = !0, t.exports |
| } |
| return i.m = n, i.c = r, i.d = function(e, t, n) { |
| i.o(e, t) || Object.defineProperty(e, t, { |
| enumerable: !0, |
| get: n |
| }) |
| }, i.r = function(e) { |
| "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { |
| value: "Module" |
| }), Object.defineProperty(e, "__esModule", { |
| value: !0 |
| }) |
| }, i.t = function(t, e) { |
| if (1 & e && (t = i(t)), 8 & e) return t; |
| if (4 & e && "object" == typeof t && t && t.__esModule) return t; |
| var n = Object.create(null); |
| if (i.r(n), Object.defineProperty(n, "default", { |
| enumerable: !0, |
| value: t |
| }), 2 & e && "string" != typeof t) |
| for (var r in t) i.d(n, r, function(e) { |
| return t[e] |
| }.bind(null, r)); |
| return n |
| }, i.n = function(e) { |
| var t = e && e.__esModule ? function() { |
| return e.default |
| } : function() { |
| return e |
| }; |
| return i.d(t, "a", t), t |
| }, i.o = function(e, t) { |
| return Object.prototype.hasOwnProperty.call(e, t) |
| }, i.p = "", i(i.s = 0) |
| }([function(e, t, n) { |
| "use strict"; |
| var i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { |
| return typeof e |
| } : function(e) { |
| return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e |
| }, |
| o = function() { |
| function r(e, t) { |
| for (var n = 0; n < t.length; n++) { |
| var r = t[n]; |
| r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r) |
| } |
| } |
| return function(e, t, n) { |
| return t && r(e.prototype, t), n && r(e, n), e |
| } |
| }(), |
| a = r(n(1)), |
| s = r(n(3)), |
| c = r(n(4)); |
| |
| function r(e) { |
| return e && e.__esModule ? e : { |
| default: e |
| } |
| } |
| var l = function(e) { |
| function r(e, t) { |
| ! function(e, t) { |
| if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") |
| }(this, r); |
| var n = function(e, t) { |
| if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); |
| return !t || "object" != typeof t && "function" != typeof t ? e : t |
| }(this, (r.__proto__ || Object.getPrototypeOf(r)).call(this)); |
| return n.resolveOptions(t), n.listenClick(e), n |
| } |
| return function(e, t) { |
| if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); |
| e.prototype = Object.create(t && t.prototype, { |
| constructor: { |
| value: e, |
| enumerable: !1, |
| writable: !0, |
| configurable: !0 |
| } |
| }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) |
| }(r, s.default), o(r, [{ |
| key: "resolveOptions", |
| value: function() { |
| var e = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : {}; |
| this.action = "function" == typeof e.action ? e.action : this.defaultAction, this.target = "function" == typeof e.target ? e.target : this.defaultTarget, this.text = "function" == typeof e.text ? e.text : this.defaultText, this.container = "object" === i(e.container) ? e.container : document.body |
| } |
| }, { |
| key: "listenClick", |
| value: function(e) { |
| var t = this; |
| this.listener = (0, c.default)(e, "click", function(e) { |
| return t.onClick(e) |
| }) |
| } |
| }, { |
| key: "onClick", |
| value: function(e) { |
| var t = e.delegateTarget || e.currentTarget; |
| this.clipboardAction && (this.clipboardAction = null), this.clipboardAction = new a.default({ |
| action: this.action(t), |
| target: this.target(t), |
| text: this.text(t), |
| container: this.container, |
| trigger: t, |
| emitter: this |
| }) |
| } |
| }, { |
| key: "defaultAction", |
| value: function(e) { |
| return u("action", e) |
| } |
| }, { |
| key: "defaultTarget", |
| value: function(e) { |
| var t = u("target", e); |
| if (t) return document.querySelector(t) |
| } |
| }, { |
| key: "defaultText", |
| value: function(e) { |
| return u("text", e) |
| } |
| }, { |
| key: "destroy", |
| value: function() { |
| this.listener.destroy(), this.clipboardAction && (this.clipboardAction.destroy(), this.clipboardAction = null) |
| } |
| }], [{ |
| key: "isSupported", |
| value: function() { |
| var e = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : ["copy", "cut"], |
| t = "string" == typeof e ? [e] : e, |
| n = !!document.queryCommandSupported; |
| return t.forEach(function(e) { |
| n = n && !!document.queryCommandSupported(e) |
| }), n |
| } |
| }]), r |
| }(); |
| |
| function u(e, t) { |
| var n = "data-clipboard-" + e; |
| if (t.hasAttribute(n)) return t.getAttribute(n) |
| } |
| e.exports = l |
| }, function(e, t, n) { |
| "use strict"; |
| var r, i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { |
| return typeof e |
| } : function(e) { |
| return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e |
| }, |
| o = function() { |
| function r(e, t) { |
| for (var n = 0; n < t.length; n++) { |
| var r = t[n]; |
| r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r) |
| } |
| } |
| return function(e, t, n) { |
| return t && r(e.prototype, t), n && r(e, n), e |
| } |
| }(), |
| a = n(2), |
| s = (r = a) && r.__esModule ? r : { |
| default: r |
| }; |
| var c = function() { |
| function t(e) { |
| ! function(e, t) { |
| if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") |
| }(this, t), this.resolveOptions(e), this.initSelection() |
| } |
| return o(t, [{ |
| key: "resolveOptions", |
| value: function() { |
| var e = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : {}; |
| this.action = e.action, this.container = e.container, this.emitter = e.emitter, this.target = e.target, this.text = e.text, this.trigger = e.trigger, this.selectedText = "" |
| } |
| }, { |
| key: "initSelection", |
| value: function() { |
| this.text ? this.selectFake() : this.target && this.selectTarget() |
| } |
| }, { |
| key: "selectFake", |
| value: function() { |
| var e = this, |
| t = "rtl" == document.documentElement.getAttribute("dir"); |
| this.removeFake(), this.fakeHandlerCallback = function() { |
| return e.removeFake() |
| }, this.fakeHandler = this.container.addEventListener("click", this.fakeHandlerCallback) || !0, this.fakeElem = document.createElement("textarea"), this.fakeElem.style.fontSize = "12pt", this.fakeElem.style.border = "0", this.fakeElem.style.padding = "0", this.fakeElem.style.margin = "0", this.fakeElem.style.position = "absolute", this.fakeElem.style[t ? "right" : "left"] = "-9999px"; |
| var n = window.pageYOffset || document.documentElement.scrollTop; |
| this.fakeElem.style.top = n + "px", this.fakeElem.setAttribute("readonly", ""), this.fakeElem.value = this.text, this.container.appendChild(this.fakeElem), this.selectedText = (0, s.default)(this.fakeElem), this.copyText() |
| } |
| }, { |
| key: "removeFake", |
| value: function() { |
| this.fakeHandler && (this.container.removeEventListener("click", this.fakeHandlerCallback), this.fakeHandler = null, this.fakeHandlerCallback = null), this.fakeElem && (this.container.removeChild(this.fakeElem), this.fakeElem = null) |
| } |
| }, { |
| key: "selectTarget", |
| value: function() { |
| this.selectedText = (0, s.default)(this.target), this.copyText() |
| } |
| }, { |
| key: "copyText", |
| value: function() { |
| var t = void 0; |
| try { |
| t = document.execCommand(this.action) |
| } catch (e) { |
| t = !1 |
| } |
| this.handleResult(t) |
| } |
| }, { |
| key: "handleResult", |
| value: function(e) { |
| this.emitter.emit(e ? "success" : "error", { |
| action: this.action, |
| text: this.selectedText, |
| trigger: this.trigger, |
| clearSelection: this.clearSelection.bind(this) |
| }) |
| } |
| }, { |
| key: "clearSelection", |
| value: function() { |
| this.trigger && this.trigger.focus(), window.getSelection().removeAllRanges() |
| } |
| }, { |
| key: "destroy", |
| value: function() { |
| this.removeFake() |
| } |
| }, { |
| key: "action", |
| set: function() { |
| var e = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : "copy"; |
| if (this._action = e, "copy" !== this._action && "cut" !== this._action) throw new Error('Invalid "action" value, use either "copy" or "cut"') |
| }, |
| get: function() { |
| return this._action |
| } |
| }, { |
| key: "target", |
| set: function(e) { |
| if (void 0 !== e) { |
| if (!e || "object" !== (void 0 === e ? "undefined" : i(e)) || 1 !== e.nodeType) throw new Error('Invalid "target" value, use a valid Element'); |
| if ("copy" === this.action && e.hasAttribute("disabled")) throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute'); |
| if ("cut" === this.action && (e.hasAttribute("readonly") || e.hasAttribute("disabled"))) throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes'); |
| this._target = e |
| } |
| }, |
| get: function() { |
| return this._target |
| } |
| }]), t |
| }(); |
| e.exports = c |
| }, function(e, t) { |
| e.exports = function(e) { |
| var t; |
| if ("SELECT" === e.nodeName) e.focus(), t = e.value; |
| else if ("INPUT" === e.nodeName || "TEXTAREA" === e.nodeName) { |
| var n = e.hasAttribute("readonly"); |
| n || e.setAttribute("readonly", ""), e.select(), e.setSelectionRange(0, e.value.length), n || e.removeAttribute("readonly"), t = e.value |
| } else { |
| e.hasAttribute("contenteditable") && e.focus(); |
| var r = window.getSelection(), |
| i = document.createRange(); |
| i.selectNodeContents(e), r.removeAllRanges(), r.addRange(i), t = r.toString() |
| } |
| return t |
| } |
| }, function(e, t) { |
| function n() {} |
| n.prototype = { |
| on: function(e, t, n) { |
| var r = this.e || (this.e = {}); |
| return (r[e] || (r[e] = [])).push({ |
| fn: t, |
| ctx: n |
| }), this |
| }, |
| once: function(e, t, n) { |
| var r = this; |
| |
| function i() { |
| r.off(e, i), t.apply(n, arguments) |
| } |
| return i._ = t, this.on(e, i, n) |
| }, |
| emit: function(e) { |
| for (var t = [].slice.call(arguments, 1), n = ((this.e || (this.e = {}))[e] || []).slice(), r = 0, i = n.length; r < i; r++) n[r].fn.apply(n[r].ctx, t); |
| return this |
| }, |
| off: function(e, t) { |
| var n = this.e || (this.e = {}), |
| r = n[e], |
| i = []; |
| if (r && t) |
| for (var o = 0, a = r.length; o < a; o++) r[o].fn !== t && r[o].fn._ !== t && i.push(r[o]); |
| return i.length ? n[e] = i : delete n[e], this |
| } |
| }, e.exports = n |
| }, function(e, t, n) { |
| var d = n(5), |
| h = n(6); |
| e.exports = function(e, t, n) { |
| if (!e && !t && !n) throw new Error("Missing required arguments"); |
| if (!d.string(t)) throw new TypeError("Second argument must be a String"); |
| if (!d.fn(n)) throw new TypeError("Third argument must be a Function"); |
| if (d.node(e)) return u = t, f = n, (l = e).addEventListener(u, f), { |
| destroy: function() { |
| l.removeEventListener(u, f) |
| } |
| }; |
| if (d.nodeList(e)) return a = e, s = t, c = n, Array.prototype.forEach.call(a, function(e) { |
| e.addEventListener(s, c) |
| }), { |
| destroy: function() { |
| Array.prototype.forEach.call(a, function(e) { |
| e.removeEventListener(s, c) |
| }) |
| } |
| }; |
| if (d.string(e)) return r = e, i = t, o = n, h(document.body, r, i, o); |
| throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList"); |
| var r, i, o, a, s, c, l, u, f |
| } |
| }, function(e, n) { |
| n.node = function(e) { |
| return void 0 !== e && e instanceof HTMLElement && 1 === e.nodeType |
| }, n.nodeList = function(e) { |
| var t = Object.prototype.toString.call(e); |
| return void 0 !== e && ("[object NodeList]" === t || "[object HTMLCollection]" === t) && "length" in e && (0 === e.length || n.node(e[0])) |
| }, n.string = function(e) { |
| return "string" == typeof e || e instanceof String |
| }, n.fn = function(e) { |
| return "[object Function]" === Object.prototype.toString.call(e) |
| } |
| }, function(e, t, n) { |
| var a = n(7); |
| |
| function o(e, t, n, r, i) { |
| var o = function(t, n, e, r) { |
| return function(e) { |
| e.delegateTarget = a(e.target, n), e.delegateTarget && r.call(t, e) |
| } |
| }.apply(this, arguments); |
| return e.addEventListener(n, o, i), { |
| destroy: function() { |
| e.removeEventListener(n, o, i) |
| } |
| } |
| } |
| e.exports = function(e, t, n, r, i) { |
| return "function" == typeof e.addEventListener ? o.apply(null, arguments) : "function" == typeof n ? o.bind(null, document).apply(null, arguments) : ("string" == typeof e && (e = document.querySelectorAll(e)), Array.prototype.map.call(e, function(e) { |
| return o(e, t, n, r, i) |
| })) |
| } |
| }, function(e, t) { |
| if ("undefined" != typeof Element && !Element.prototype.matches) { |
| var n = Element.prototype; |
| n.matches = n.matchesSelector || n.mozMatchesSelector || n.msMatchesSelector || n.oMatchesSelector || n.webkitMatchesSelector |
| } |
| e.exports = function(e, t) { |
| for (; e && 9 !== e.nodeType;) { |
| if ("function" == typeof e.matches && e.matches(t)) return e; |
| e = e.parentNode |
| } |
| } |
| }]) |
| }, e.exports = r() |
| }, function(r, i, o) { |
| var a, s; |
| ! function(e) { |
| if (void 0 === (s = "function" == typeof(a = e) ? a.call(i, o, i, r) : a) || (r.exports = s), !0, r.exports = e(), !!0) { |
| var t = window.Cookies, |
| n = window.Cookies = e(); |
| n.noConflict = function() { |
| return window.Cookies = t, n |
| } |
| } |
| }(function() { |
| function m() { |
| for (var e = 0, t = {}; e < arguments.length; e++) { |
| var n = arguments[e]; |
| for (var r in n) t[r] = n[r] |
| } |
| return t |
| } |
| return function e(h) { |
| function p(e, t, n) { |
| var r; |
| if ("undefined" != typeof document) { |
| if (1 < arguments.length) { |
| if ("number" == typeof(n = m({ |
| path: "/" |
| }, p.defaults, n)).expires) { |
| var i = new Date; |
| i.setMilliseconds(i.getMilliseconds() + 864e5 * n.expires), n.expires = i |
| } |
| n.expires = n.expires ? n.expires.toUTCString() : ""; |
| try { |
| r = JSON.stringify(t), /^[\{\[]/.test(r) && (t = r) |
| } catch (e) {} |
| t = h.write ? h.write(t, e) : encodeURIComponent(String(t)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent), e = (e = (e = encodeURIComponent(String(e))).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)).replace(/[\(\)]/g, escape); |
| var o = ""; |
| for (var a in n) n[a] && (o += "; " + a, !0 !== n[a] && (o += "=" + n[a])); |
| return document.cookie = e + "=" + t + o |
| } |
| e || (r = {}); |
| for (var s = document.cookie ? document.cookie.split("; ") : [], c = /(%[0-9A-Z]{2})+/g, l = 0; l < s.length; l++) { |
| var u = s[l].split("="), |
| f = u.slice(1).join("="); |
| this.json || '"' !== f.charAt(0) || (f = f.slice(1, -1)); |
| try { |
| var d = u[0].replace(c, decodeURIComponent); |
| if (f = h.read ? h.read(f, d) : h(f, d) || f.replace(c, decodeURIComponent), this.json) try { |
| f = JSON.parse(f) |
| } catch (e) {} |
| if (e === d) { |
| r = f; |
| break |
| } |
| e || (r[d] = f) |
| } catch (e) {} |
| } |
| return r |
| } |
| } |
| return (p.set = p).get = function(e) { |
| return p.call(p, e) |
| }, p.getJSON = function() { |
| return p.apply({ |
| json: !0 |
| }, [].slice.call(arguments)) |
| }, p.defaults = {}, p.remove = function(e, t) { |
| p(e, "", m(t, { |
| expires: -1 |
| })) |
| }, p.withConverter = e, p |
| }(function() {}) |
| }) |
| }, function(e, t, n) { |
| "use strict"; |
| n.r(t); |
| var r = "function" == typeof fetch ? fetch.bind() : function(i, o) { |
| return o = o || {}, new Promise(function(e, t) { |
| var n = new XMLHttpRequest; |
| for (var r in n.open(o.method || "get", i, !0), o.headers) n.setRequestHeader(r, o.headers[r]); |
| |
| function s() { |
| var r, i = [], |
| o = [], |
| a = {}; |
| return n.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm, function(e, t, n) { |
| i.push(t = t.toLowerCase()), o.push([t, n]), r = a[t], a[t] = r ? r + "," + n : n |
| }), { |
| ok: 2 == (n.status / 100 | 0), |
| status: n.status, |
| statusText: n.statusText, |
| url: n.responseURL, |
| clone: s, |
| text: function() { |
| return Promise.resolve(n.responseText) |
| }, |
| json: function() { |
| return Promise.resolve(n.responseText).then(JSON.parse) |
| }, |
| blob: function() { |
| return Promise.resolve(new Blob([n.response])) |
| }, |
| headers: { |
| keys: function() { |
| return i |
| }, |
| entries: function() { |
| return o |
| }, |
| get: function(e) { |
| return a[e.toLowerCase()] |
| }, |
| has: function(e) { |
| return e.toLowerCase() in a |
| } |
| } |
| } |
| } |
| n.withCredentials = "include" == o.credentials, n.onload = function() { |
| e(s()) |
| }, n.onerror = t, n.send(o.body || null) |
| }) |
| }; |
| t.default = r |
| }, function(e, t, n) { |
| "use strict"; |
| t.a = function(t) { |
| var n = this.constructor; |
| return this.then(function(e) { |
| return n.resolve(t()).then(function() { |
| return e |
| }) |
| }, function(e) { |
| return n.resolve(t()).then(function() { |
| return n.reject(e) |
| }) |
| }) |
| } |
| }, function(e, n, r) { |
| "use strict"; |
| (function(f) { |
| r.d(n, "a", function() { |
| return t |
| }); |
| var e = r(1), |
| d = r.n(e), |
| h = function(e) { |
| var t = document.getElementsByName("lang:" + e)[0]; |
| if (!(t instanceof HTMLMetaElement)) throw new ReferenceError; |
| return t.content |
| }, |
| t = function() { |
| function e(e, t) { |
| var n = "string" == typeof e ? document.querySelector(e) : e; |
| if (!(n instanceof HTMLElement)) throw new ReferenceError; |
| this.el_ = n; |
| var r = Array.prototype.slice.call(this.el_.children), |
| i = r[0], |
| o = r[1]; |
| this.data_ = t, this.meta_ = i, this.list_ = o, this.message_ = { |
| placeholder: this.meta_.textContent, |
| none: h("search.result.none"), |
| one: h("search.result.one"), |
| other: h("search.result.other") |
| }; |
| var a = h("search.tokenizer"); |
| a.length && (d.a.tokenizer.separator = a), this.lang_ = h("search.language").split(",").filter(Boolean).map(function(e) { |
| return e.trim() |
| }) |
| } |
| return e.prototype.update = function(e) { |
| var t, a = this; |
| if ("focus" !== e.type || this.index_) { |
| if ("focus" === e.type || "keyup" === e.type) { |
| var n = e.target; |
| if (!(n instanceof HTMLInputElement)) throw new ReferenceError; |
| if (!this.index_ || n.value === this.value_) return; |
| for (; this.list_.firstChild;) this.list_.removeChild(this.list_.firstChild); |
| if (this.value_ = n.value, 0 === this.value_.length) return void(this.meta_.textContent = this.message_.placeholder); |
| var r = this.index_.query(function(t) { |
| a.value_.toLowerCase().split(" ").filter(Boolean).forEach(function(e) { |
| t.term(e, { |
| wildcard: d.a.Query.wildcard.TRAILING |
| }) |
| }) |
| }).reduce(function(e, t) { |
| var n = a.docs_.get(t.ref); |
| if (n.parent) { |
| var r = n.parent.location; |
| e.set(r, (e.get(r) || []).concat(t)) |
| } else { |
| var i = n.location; |
| e.set(i, e.get(i) || []) |
| } |
| return e |
| }, new Map), |
| i = (t = this.value_.trim(), t.replace(/[|\\{}()[\]^$+*?.-]/g, "\\$&")).replace(new RegExp(d.a.tokenizer.separator, "img"), "|"), |
| s = new RegExp("(^|" + d.a.tokenizer.separator + ")(" + i + ")", "img"), |
| c = function(e, t, n) { |
| return t + "<em>" + n + "</em>" |
| }; |
| this.stack_ = [], r.forEach(function(e, t) { |
| var n, r = a.docs_.get(t), |
| i = f.createElement("li", { |
| class: "md-search-result__item" |
| }, f.createElement("a", { |
| href: r.location, |
| title: r.title, |
| class: "md-search-result__link", |
| tabindex: "-1" |
| }, f.createElement("article", { |
| class: "md-search-result__article md-search-result__article--document" |
| }, f.createElement("h1", { |
| class: "md-search-result__title" |
| }, { |
| __html: r.title.replace(s, c) |
| }), r.text.length ? f.createElement("p", { |
| class: "md-search-result__teaser" |
| }, { |
| __html: r.text.replace(s, c) |
| }) : {}))), |
| o = e.map(function(t) { |
| return function() { |
| var e = a.docs_.get(t.ref); |
| i.appendChild(f.createElement("a", { |
| href: e.location, |
| title: e.title, |
| class: "md-search-result__link", |
| "data-md-rel": "anchor", |
| tabindex: "-1" |
| }, f.createElement("article", { |
| class: "md-search-result__article" |
| }, f.createElement("h1", { |
| class: "md-search-result__title" |
| }, { |
| __html: e.title.replace(s, c) |
| }), e.text.length ? f.createElement("p", { |
| class: "md-search-result__teaser" |
| }, { |
| __html: function(e, t) { |
| var n = t; |
| if (e.length > n) { |
| for (; |
| " " !== e[n] && 0 < --n;); |
| return e.substring(0, n) + "..." |
| } |
| return e |
| }(e.text.replace(s, c), 400) |
| }) : {}))) |
| } |
| }); |
| (n = a.stack_).push.apply(n, [function() { |
| return a.list_.appendChild(i) |
| }].concat(o)) |
| }); |
| var o = this.el_.parentNode; |
| if (!(o instanceof HTMLElement)) throw new ReferenceError; |
| for (; this.stack_.length && o.offsetHeight >= o.scrollHeight - 16;) this.stack_.shift()(); |
| var l = this.list_.querySelectorAll("[data-md-rel=anchor]"); |
| switch (Array.prototype.forEach.call(l, function(r) { |
| ["click", "keydown"].forEach(function(n) { |
| r.addEventListener(n, function(e) { |
| if ("keydown" !== n || 13 === e.keyCode) { |
| var t = document.querySelector("[data-md-toggle=search]"); |
| if (!(t instanceof HTMLInputElement)) throw new ReferenceError; |
| t.checked && (t.checked = !1, t.dispatchEvent(new CustomEvent("change"))), e.preventDefault(), setTimeout(function() { |
| document.location.href = r.href |
| }, 100) |
| } |
| }) |
| }) |
| }), r.size) { |
| case 0: |
| this.meta_.textContent = this.message_.none; |
| break; |
| case 1: |
| this.meta_.textContent = this.message_.one; |
| break; |
| default: |
| this.meta_.textContent = this.message_.other.replace("#", r.size) |
| } |
| } |
| } else { |
| var u = function(e) { |
| a.docs_ = e.reduce(function(e, t) { |
| var n, r, i, o = t.location.split("#"), |
| a = o[0], |
| s = o[1]; |
| return t.text = (n = t.text, r = document.createTextNode(n), (i = document.createElement("p")).appendChild(r), i.innerHTML), s && (t.parent = e.get(a), t.parent && !t.parent.done && (t.parent.title = t.title, t.parent.text = t.text, t.parent.done = !0)), t.text = t.text.replace(/\n/g, " ").replace(/\s+/g, " ").replace(/\s+([,.:;!?])/g, function(e, t) { |
| return t |
| }), t.parent && t.parent.title === t.title || e.set(t.location, t), e |
| }, new Map); |
| var i = a.docs_, |
| o = a.lang_; |
| a.stack_ = [], a.index_ = d()(function() { |
| var e, t = this, |
| n = { |
| "search.pipeline.trimmer": d.a.trimmer, |
| "search.pipeline.stopwords": d.a.stopWordFilter |
| }, |
| r = Object.keys(n).reduce(function(e, t) { |
| return h(t).match(/^false$/i) || e.push(n[t]), e |
| }, []); |
| this.pipeline.reset(), r && (e = this.pipeline).add.apply(e, r), 1 === o.length && "en" !== o[0] && d.a[o[0]] ? this.use(d.a[o[0]]) : 1 < o.length && this.use(d.a.multiLanguage.apply(d.a, o)), this.field("title", { |
| boost: 10 |
| }), this.field("text"), this.ref("location"), i.forEach(function(e) { |
| return t.add(e) |
| }) |
| }); |
| var t = a.el_.parentNode; |
| if (!(t instanceof HTMLElement)) throw new ReferenceError; |
| t.addEventListener("scroll", function() { |
| for (; a.stack_.length && t.scrollTop + t.offsetHeight >= t.scrollHeight - 16;) a.stack_.splice(0, 10).forEach(function(e) { |
| return e() |
| }) |
| }) |
| }; |
| setTimeout(function() { |
| return "function" == typeof a.data_ ? a.data_().then(u) : u(a.data_) |
| }, 250) |
| } |
| }, e |
| }() |
| }).call(this, r(3)) |
| }, function(e, n, r) { |
| "use strict"; |
| (function(t) { |
| r.d(n, "a", function() { |
| return e |
| }); |
| var e = function() { |
| function e(e) { |
| var t = "string" == typeof e ? document.querySelector(e) : e; |
| if (!(t instanceof HTMLElement)) throw new ReferenceError; |
| this.el_ = t |
| } |
| return e.prototype.initialize = function(e) { |
| e.length && this.el_.children.length && this.el_.children[this.el_.children.length - 1].appendChild(t.createElement("ul", { |
| class: "md-source__facts" |
| }, e.map(function(e) { |
| return t.createElement("li", { |
| class: "md-source__fact" |
| }, e) |
| }))), this.el_.dataset.mdState = "done" |
| }, e |
| }() |
| }).call(this, r(3)) |
| }, , , function(e, n, c) { |
| "use strict"; |
| c.r(n), |
| function(o) { |
| c.d(n, "app", function() { |
| return t |
| }); |
| c(14), c(15), c(16), c(17), c(18), c(19), c(20); |
| var r = c(2), |
| e = c(5), |
| a = c.n(e), |
| i = c(0); |
| window.Promise = window.Promise || r.a; |
| var s = function(e) { |
| var t = document.getElementsByName("lang:" + e)[0]; |
| if (!(t instanceof HTMLMetaElement)) throw new ReferenceError; |
| return t.content |
| }; |
| var t = { |
| initialize: function(t) { |
| new i.a.Event.Listener(document, "DOMContentLoaded", function() { |
| if (!(document.body instanceof HTMLElement)) throw new ReferenceError; |
| Modernizr.addTest("ios", function() { |
| return !!navigator.userAgent.match(/(iPad|iPhone|iPod)/g) |
| }); |
| var e = document.querySelectorAll("table:not([class])"); |
| if (Array.prototype.forEach.call(e, function(e) { |
| var t = o.createElement("div", { |
| class: "md-typeset__scrollwrap" |
| }, o.createElement("div", { |
| class: "md-typeset__table" |
| })); |
| e.nextSibling ? e.parentNode.insertBefore(t, e.nextSibling) : e.parentNode.appendChild(t), t.children[0].appendChild(e) |
| }), a.a.isSupported()) { |
| var t = document.querySelectorAll(".codehilite > pre, pre > code"); |
| Array.prototype.forEach.call(t, function(e, t) { |
| var n = "__code_" + t, |
| r = o.createElement("button", { |
| class: "md-clipboard", |
| title: s("clipboard.copy"), |
| "data-clipboard-target": "#" + n + " pre, #" + n + " code" |
| }, o.createElement("span", { |
| class: "md-clipboard__message" |
| })), |
| i = e.parentNode; |
| i.id = n, i.insertBefore(r, e) |
| }), new a.a(".md-clipboard").on("success", function(e) { |
| var t = e.trigger.querySelector(".md-clipboard__message"); |
| if (!(t instanceof HTMLElement)) throw new ReferenceError; |
| e.clearSelection(), t.dataset.mdTimer && clearTimeout(parseInt(t.dataset.mdTimer, 10)), t.classList.add("md-clipboard__message--active"), t.innerHTML = s("clipboard.copied"), t.dataset.mdTimer = setTimeout(function() { |
| t.classList.remove("md-clipboard__message--active"), t.dataset.mdTimer = "" |
| }, 2e3).toString() |
| }) |
| } |
| if (!Modernizr.details) { |
| var n = document.querySelectorAll("details > summary"); |
| Array.prototype.forEach.call(n, function(e) { |
| e.addEventListener("click", function(e) { |
| var t = e.target.parentNode; |
| t.hasAttribute("open") ? t.removeAttribute("open") : t.setAttribute("open", "") |
| }) |
| }) |
| } |
| var r = function() { |
| if (document.location.hash) { |
| var e = document.getElementById(document.location.hash.substring(1)); |
| if (!e) return; |
| for (var t = e.parentNode; t && !(t instanceof HTMLDetailsElement);) t = t.parentNode; |
| if (t && !t.open) { |
| t.open = !0; |
| var n = location.hash; |
| location.hash = " ", location.hash = n |
| } |
| } |
| }; |
| if (window.addEventListener("hashchange", r), r(), Modernizr.ios) { |
| var i = document.querySelectorAll("[data-md-scrollfix]"); |
| Array.prototype.forEach.call(i, function(t) { |
| t.addEventListener("touchstart", function() { |
| var e = t.scrollTop; |
| 0 === e ? t.scrollTop = 1 : e + t.offsetHeight === t.scrollHeight && (t.scrollTop = e - 1) |
| }) |
| }) |
| } |
| }).listen(), new i.a.Event.Listener(window, ["scroll", "resize", "orientationchange"], new i.a.Header.Shadow("[data-md-component=container]", "[data-md-component=header]")).listen(), new i.a.Event.Listener(window, ["scroll", "resize", "orientationchange"], new i.a.Header.Title("[data-md-component=title]", ".md-typeset h1")).listen(), document.querySelector("[data-md-component=hero]") && new i.a.Event.Listener(window, ["scroll", "resize", "orientationchange"], new i.a.Tabs.Toggle("[data-md-component=hero]")).listen(), document.querySelector("[data-md-component=tabs]") && new i.a.Event.Listener(window, ["scroll", "resize", "orientationchange"], new i.a.Tabs.Toggle("[data-md-component=tabs]")).listen(), new i.a.Event.MatchMedia("(min-width: 1220px)", new i.a.Event.Listener(window, ["scroll", "resize", "orientationchange"], new i.a.Sidebar.Position("[data-md-component=navigation]", "[data-md-component=header]"))), document.querySelector("[data-md-component=toc]") && new i.a.Event.MatchMedia("(min-width: 960px)", new i.a.Event.Listener(window, ["scroll", "resize", "orientationchange"], new i.a.Sidebar.Position("[data-md-component=toc]", "[data-md-component=header]"))), new i.a.Event.MatchMedia("(min-width: 960px)", new i.a.Event.Listener(window, "scroll", new i.a.Nav.Blur("[data-md-component=toc] .md-nav__link"))); |
| var e = document.querySelectorAll("[data-md-component=collapsible]"); |
| Array.prototype.forEach.call(e, function(e) { |
| new i.a.Event.MatchMedia("(min-width: 1220px)", new i.a.Event.Listener(e.previousElementSibling, "click", new i.a.Nav.Collapse(e))) |
| }), new i.a.Event.MatchMedia("(max-width: 1219px)", new i.a.Event.Listener("[data-md-component=navigation] [data-md-toggle]", "change", new i.a.Nav.Scrolling("[data-md-component=navigation] nav"))), document.querySelector("[data-md-component=search]") && (new i.a.Event.MatchMedia("(max-width: 959px)", new i.a.Event.Listener("[data-md-toggle=search]", "change", new i.a.Search.Lock("[data-md-toggle=search]")))), |
| new i.a.Event.Listener(document.body, "keydown", function(e) { |
| if (9 === e.keyCode) { |
| var t = document.querySelectorAll("[data-md-component=navigation] .md-nav__link[for]:not([tabindex])"); |
| Array.prototype.forEach.call(t, function(e) { |
| e.offsetHeight && (e.tabIndex = 0) |
| }) |
| } |
| }).listen(), new i.a.Event.Listener(document.body, "mousedown", function() { |
| var e = document.querySelectorAll("[data-md-component=navigation] .md-nav__link[tabindex]"); |
| Array.prototype.forEach.call(e, function(e) { |
| e.removeAttribute("tabIndex") |
| }) |
| }).listen(), document.body.addEventListener("click", function() { |
| "tabbing" === document.body.dataset.mdState && (document.body.dataset.mdState = "") |
| }), new i.a.Event.MatchMedia("(max-width: 959px)", new i.a.Event.Listener("[data-md-component=navigation] [href^='#']", "click", function() { |
| var e = document.querySelector("[data-md-toggle=drawer]"); |
| if (!(e instanceof HTMLInputElement)) throw new ReferenceError; |
| e.checked && (e.checked = !1, e.dispatchEvent(new CustomEvent("change"))) |
| })), |
| function() { |
| var e = document.querySelector("[data-md-source]"); |
| if (!e) return r.a.resolve([]); |
| if (!(e instanceof HTMLAnchorElement)) throw new ReferenceError; |
| switch (e.dataset.mdSource) { |
| case "github": |
| return new i.a.Source.Adapter.GitHub(e).fetch(); |
| default: |
| return r.a.resolve([]) |
| } |
| }().then(function(t) { |
| var e = document.querySelectorAll("[data-md-source]"); |
| Array.prototype.forEach.call(e, function(e) { |
| new i.a.Source.Repository(e).initialize(t) |
| }) |
| }); |
| var n = function() { |
| var e = document.querySelectorAll("details"); |
| Array.prototype.forEach.call(e, function(e) { |
| e.setAttribute("open", "") |
| }) |
| }; |
| new i.a.Event.MatchMedia("print", { |
| listen: n, |
| unlisten: function() {} |
| }), window.onbeforeprint = n |
| } |
| } |
| }.call(this, c(3)) |
| }, function(e, t, n) { |
| e.exports = n.p + "assets/images/icons/bitbucket.1b09e088.svg" |
| }, function(e, t, n) { |
| e.exports = n.p + "assets/images/icons/github.f0b8504a.svg" |
| }, function(e, t, n) { |
| e.exports = n.p + "assets/images/icons/gitlab.6dd19c00.svg" |
| }, function(e, t) { |
| e.exports = "/Users/squidfunk/Desktop/General/Sources/mkdocs-material/material/application.4031d38b.css" |
| }, function(e, t) { |
| e.exports = "/Users/squidfunk/Desktop/General/Sources/mkdocs-material/material/application-palette.224b79ff.css" |
| }, function(e, t) { |
| ! function() { |
| if ("undefined" != typeof window) try { |
| var e = new window.CustomEvent("test", { |
| cancelable: !0 |
| }); |
| if (e.preventDefault(), !0 !== e.defaultPrevented) throw new Error("Could not prevent default") |
| } catch (e) { |
| var t = function(e, t) { |
| var n, r; |
| return (t = t || {}).bubbles = !!t.bubbles, t.cancelable = !!t.cancelable, (n = document.createEvent("CustomEvent")).initCustomEvent(e, t.bubbles, t.cancelable, t.detail), r = n.preventDefault, n.preventDefault = function() { |
| r.call(this); |
| try { |
| Object.defineProperty(this, "defaultPrevented", { |
| get: function() { |
| return !0 |
| } |
| }) |
| } catch (e) { |
| this.defaultPrevented = !0 |
| } |
| }, n |
| }; |
| t.prototype = window.Event.prototype, window.CustomEvent = t |
| } |
| }() |
| }, function(e, t, n) { |
| window.fetch || (window.fetch = n(7).default || n(7)) |
| }, function(e, i, o) { |
| (function(e) { |
| var t = void 0 !== e && e || "undefined" != typeof self && self || window, |
| n = Function.prototype.apply; |
| |
| function r(e, t) { |
| this._id = e, this._clearFn = t |
| } |
| i.setTimeout = function() { |
| return new r(n.call(setTimeout, t, arguments), clearTimeout) |
| }, i.setInterval = function() { |
| return new r(n.call(setInterval, t, arguments), clearInterval) |
| }, i.clearTimeout = i.clearInterval = function(e) { |
| e && e.close() |
| }, r.prototype.unref = r.prototype.ref = function() {}, r.prototype.close = function() { |
| this._clearFn.call(t, this._id) |
| }, i.enroll = function(e, t) { |
| clearTimeout(e._idleTimeoutId), e._idleTimeout = t |
| }, i.unenroll = function(e) { |
| clearTimeout(e._idleTimeoutId), e._idleTimeout = -1 |
| }, i._unrefActive = i.active = function(e) { |
| clearTimeout(e._idleTimeoutId); |
| var t = e._idleTimeout; |
| 0 <= t && (e._idleTimeoutId = setTimeout(function() { |
| e._onTimeout && e._onTimeout() |
| }, t)) |
| }, o(22), i.setImmediate = "undefined" != typeof self && self.setImmediate || void 0 !== e && e.setImmediate || this && this.setImmediate, i.clearImmediate = "undefined" != typeof self && self.clearImmediate || void 0 !== e && e.clearImmediate || this && this.clearImmediate |
| }).call(this, o(4)) |
| }, function(e, t, n) { |
| (function(e, p) { |
| ! function(n, r) { |
| "use strict"; |
| if (!n.setImmediate) { |
| var i, o, t, a, e, s = 1, |
| c = {}, |
| l = !1, |
| u = n.document, |
| f = Object.getPrototypeOf && Object.getPrototypeOf(n); |
| f = f && f.setTimeout ? f : n, i = "[object process]" === {}.toString.call(n.process) ? function(e) { |
| p.nextTick(function() { |
| h(e) |
| }) |
| } : function() { |
| if (n.postMessage && !n.importScripts) { |
| var e = !0, |
| t = n.onmessage; |
| return n.onmessage = function() { |
| e = !1 |
| }, n.postMessage("", "*"), n.onmessage = t, e |
| } |
| }() ? (a = "setImmediate$" + Math.random() + "$", e = function(e) { |
| e.source === n && "string" == typeof e.data && 0 === e.data.indexOf(a) && h(+e.data.slice(a.length)) |
| }, n.addEventListener ? n.addEventListener("message", e, !1) : n.attachEvent("onmessage", e), function(e) { |
| n.postMessage(a + e, "*") |
| }) : n.MessageChannel ? ((t = new MessageChannel).port1.onmessage = function(e) { |
| h(e.data) |
| }, function(e) { |
| t.port2.postMessage(e) |
| }) : u && "onreadystatechange" in u.createElement("script") ? (o = u.documentElement, function(e) { |
| var t = u.createElement("script"); |
| t.onreadystatechange = function() { |
| h(e), t.onreadystatechange = null, o.removeChild(t), t = null |
| }, o.appendChild(t) |
| }) : function(e) { |
| setTimeout(h, 0, e) |
| }, f.setImmediate = function(e) { |
| "function" != typeof e && (e = new Function("" + e)); |
| for (var t = new Array(arguments.length - 1), n = 0; n < t.length; n++) t[n] = arguments[n + 1]; |
| var r = { |
| callback: e, |
| args: t |
| }; |
| return c[s] = r, i(s), s++ |
| }, f.clearImmediate = d |
| } |
| |
| function d(e) { |
| delete c[e] |
| } |
| |
| function h(e) { |
| if (l) setTimeout(h, 0, e); |
| else { |
| var t = c[e]; |
| if (t) { |
| l = !0; |
| try { |
| ! function(e) { |
| var t = e.callback, |
| n = e.args; |
| switch (n.length) { |
| case 0: |
| t(); |
| break; |
| case 1: |
| t(n[0]); |
| break; |
| case 2: |
| t(n[0], n[1]); |
| break; |
| case 3: |
| t(n[0], n[1], n[2]); |
| break; |
| default: |
| t.apply(r, n) |
| } |
| }(t) |
| } finally { |
| d(e), l = !1 |
| } |
| } |
| } |
| } |
| }("undefined" == typeof self ? void 0 === e ? this : e : self) |
| }).call(this, n(4), n(23)) |
| }, function(e, t) { |
| var n, r, i = e.exports = {}; |
| |
| function o() { |
| throw new Error("setTimeout has not been defined") |
| } |
| |
| function a() { |
| throw new Error("clearTimeout has not been defined") |
| } |
| |
| function s(t) { |
| if (n === setTimeout) return setTimeout(t, 0); |
| if ((n === o || !n) && setTimeout) return n = setTimeout, setTimeout(t, 0); |
| try { |
| return n(t, 0) |
| } catch (e) { |
| try { |
| return n.call(null, t, 0) |
| } catch (e) { |
| return n.call(this, t, 0) |
| } |
| } |
| }! function() { |
| try { |
| n = "function" == typeof setTimeout ? setTimeout : o |
| } catch (e) { |
| n = o |
| } |
| try { |
| r = "function" == typeof clearTimeout ? clearTimeout : a |
| } catch (e) { |
| r = a |
| } |
| }(); |
| var c, l = [], |
| u = !1, |
| f = -1; |
| |
| function d() { |
| u && c && (u = !1, c.length ? l = c.concat(l) : f = -1, l.length && h()) |
| } |
| |
| function h() { |
| if (!u) { |
| var e = s(d); |
| u = !0; |
| for (var t = l.length; t;) { |
| for (c = l, l = []; ++f < t;) c && c[f].run(); |
| f = -1, t = l.length |
| } |
| c = null, u = !1, |
| function(t) { |
| if (r === clearTimeout) return clearTimeout(t); |
| if ((r === a || !r) && clearTimeout) return r = clearTimeout, clearTimeout(t); |
| try { |
| r(t) |
| } catch (e) { |
| try { |
| return r.call(null, t) |
| } catch (e) { |
| return r.call(this, t) |
| } |
| } |
| }(e) |
| } |
| } |
| |
| function p(e, t) { |
| this.fun = e, this.array = t |
| } |
| |
| function m() {} |
| i.nextTick = function(e) { |
| var t = new Array(arguments.length - 1); |
| if (1 < arguments.length) |
| for (var n = 1; n < arguments.length; n++) t[n - 1] = arguments[n]; |
| l.push(new p(e, t)), 1 !== l.length || u || s(h) |
| }, p.prototype.run = function() { |
| this.fun.apply(null, this.array) |
| }, i.title = "browser", i.browser = !0, i.env = {}, i.argv = [], i.version = "", i.versions = {}, i.on = m, i.addListener = m, i.once = m, i.off = m, i.removeListener = m, i.removeAllListeners = m, i.emit = m, i.prependListener = m, i.prependOnceListener = m, i.listeners = function(e) { |
| return [] |
| }, i.binding = function(e) { |
| throw new Error("process.binding is not supported") |
| }, i.cwd = function() { |
| return "/" |
| }, i.chdir = function(e) { |
| throw new Error("process.chdir is not supported") |
| }, i.umask = function() { |
| return 0 |
| } |
| }, function(i, o, a) { |
| var s, c; |
| /** |
| * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.6 |
| * Copyright (C) 2019 Oliver Nightingale |
| * @license MIT |
| */ |
| ! function() { |
| var t, l, u, e, n, f, d, h, p, m, y, v, g, w, _, E, x, b, k, S, T, L, R, O, C, r, D = function(e) { |
| var t = new D.Builder; |
| return t.pipeline.add(D.trimmer, D.stopWordFilter, D.stemmer), t.searchPipeline.add(D.stemmer), e.call(t, t), t.build() |
| }; |
| D.version = "2.3.6", D.utils = {}, D.utils.warn = (t = this, function(e) { |
| t.console && console.warn && console.warn(e) |
| }), D.utils.asString = function(e) { |
| return null == e ? "" : e.toString() |
| }, D.utils.clone = function(e) { |
| if (null == e) return e; |
| for (var t = Object.create(null), n = Object.keys(e), r = 0; r < n.length; r++) { |
| var i = n[r], |
| o = e[i]; |
| if (Array.isArray(o)) t[i] = o.slice(); |
| else { |
| if ("string" != typeof o && "number" != typeof o && "boolean" != typeof o) throw new TypeError("clone is not deep and does not support nested objects"); |
| t[i] = o |
| } |
| } |
| return t |
| }, D.FieldRef = function(e, t, n) { |
| this.docRef = e, this.fieldName = t, this._stringValue = n |
| }, D.FieldRef.joiner = "/", D.FieldRef.fromString = function(e) { |
| var t = e.indexOf(D.FieldRef.joiner); |
| if (-1 === t) throw "malformed field ref string"; |
| var n = e.slice(0, t), |
| r = e.slice(t + 1); |
| return new D.FieldRef(r, n, e) |
| }, D.FieldRef.prototype.toString = function() { |
| return null == this._stringValue && (this._stringValue = this.fieldName + D.FieldRef.joiner + this.docRef), this._stringValue |
| }, D.Set = function(e) { |
| if (this.elements = Object.create(null), e) { |
| this.length = e.length; |
| for (var t = 0; t < this.length; t++) this.elements[e[t]] = !0 |
| } else this.length = 0 |
| }, D.Set.complete = { |
| intersect: function(e) { |
| return e |
| }, |
| union: function(e) { |
| return e |
| }, |
| contains: function() { |
| return !0 |
| } |
| }, D.Set.empty = { |
| intersect: function() { |
| return this |
| }, |
| union: function(e) { |
| return e |
| }, |
| contains: function() { |
| return !1 |
| } |
| }, D.Set.prototype.contains = function(e) { |
| return !!this.elements[e] |
| }, D.Set.prototype.intersect = function(e) { |
| var t, n, r, i = []; |
| if (e === D.Set.complete) return this; |
| if (e === D.Set.empty) return e; |
| n = this.length < e.length ? (t = this, e) : (t = e, this), r = Object.keys(t.elements); |
| for (var o = 0; o < r.length; o++) { |
| var a = r[o]; |
| a in n.elements && i.push(a) |
| } |
| return new D.Set(i) |
| }, D.Set.prototype.union = function(e) { |
| return e === D.Set.complete ? D.Set.complete : e === D.Set.empty ? this : new D.Set(Object.keys(this.elements).concat(Object.keys(e.elements))) |
| }, D.idf = function(e, t) { |
| var n = 0; |
| for (var r in e) "_index" != r && (n += Object.keys(e[r]).length); |
| var i = (t - n + .5) / (n + .5); |
| return Math.log(1 + Math.abs(i)) |
| }, D.Token = function(e, t) { |
| this.str = e || "", this.metadata = t || {} |
| }, D.Token.prototype.toString = function() { |
| return this.str |
| }, D.Token.prototype.update = function(e) { |
| return this.str = e(this.str, this.metadata), this |
| }, D.Token.prototype.clone = function(e) { |
| return e = e || function(e) { |
| return e |
| }, new D.Token(e(this.str, this.metadata), this.metadata) |
| }, D.tokenizer = function(e, t) { |
| if (null == e || null == e) return []; |
| if (Array.isArray(e)) return e.map(function(e) { |
| return new D.Token(D.utils.asString(e).toLowerCase(), D.utils.clone(t)) |
| }); |
| for (var n = e.toString().trim().toLowerCase(), r = n.length, i = [], o = 0, a = 0; o <= r; o++) { |
| var s = o - a; |
| if (n.charAt(o).match(D.tokenizer.separator) || o == r) { |
| if (0 < s) { |
| var c = D.utils.clone(t) || {}; |
| c.position = [a, s], c.index = i.length, i.push(new D.Token(n.slice(a, o), c)) |
| } |
| a = o + 1 |
| } |
| } |
| return i |
| }, D.tokenizer.separator = /[\s\-]+/, D.Pipeline = function() { |
| this._stack = [] |
| }, D.Pipeline.registeredFunctions = Object.create(null), D.Pipeline.registerFunction = function(e, t) { |
| t in this.registeredFunctions && D.utils.warn("Overwriting existing registered function: " + t), e.label = t, D.Pipeline.registeredFunctions[e.label] = e |
| }, D.Pipeline.warnIfFunctionNotRegistered = function(e) { |
| e.label && e.label in this.registeredFunctions || D.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n", e) |
| }, D.Pipeline.load = function(e) { |
| var n = new D.Pipeline; |
| return e.forEach(function(e) { |
| var t = D.Pipeline.registeredFunctions[e]; |
| if (!t) throw new Error("Cannot load unregistered function: " + e); |
| n.add(t) |
| }), n |
| }, D.Pipeline.prototype.add = function() { |
| Array.prototype.slice.call(arguments).forEach(function(e) { |
| D.Pipeline.warnIfFunctionNotRegistered(e), this._stack.push(e) |
| }, this) |
| }, D.Pipeline.prototype.after = function(e, t) { |
| D.Pipeline.warnIfFunctionNotRegistered(t); |
| var n = this._stack.indexOf(e); |
| if (-1 == n) throw new Error("Cannot find existingFn"); |
| n += 1, this._stack.splice(n, 0, t) |
| }, D.Pipeline.prototype.before = function(e, t) { |
| D.Pipeline.warnIfFunctionNotRegistered(t); |
| var n = this._stack.indexOf(e); |
| if (-1 == n) throw new Error("Cannot find existingFn"); |
| this._stack.splice(n, 0, t) |
| }, D.Pipeline.prototype.remove = function(e) { |
| var t = this._stack.indexOf(e); - 1 != t && this._stack.splice(t, 1) |
| }, D.Pipeline.prototype.run = function(e) { |
| for (var t = this._stack.length, n = 0; n < t; n++) { |
| for (var r = this._stack[n], i = [], o = 0; o < e.length; o++) { |
| var a = r(e[o], o, e); |
| if (void 0 !== a && "" !== a) |
| if (Array.isArray(a)) |
| for (var s = 0; s < a.length; s++) i.push(a[s]); |
| else i.push(a) |
| } |
| e = i |
| } |
| return e |
| }, D.Pipeline.prototype.runString = function(e, t) { |
| var n = new D.Token(e, t); |
| return this.run([n]).map(function(e) { |
| return e.toString() |
| }) |
| }, D.Pipeline.prototype.reset = function() { |
| this._stack = [] |
| }, D.Pipeline.prototype.toJSON = function() { |
| return this._stack.map(function(e) { |
| return D.Pipeline.warnIfFunctionNotRegistered(e), e.label |
| }) |
| }, D.Vector = function(e) { |
| this._magnitude = 0, this.elements = e || [] |
| }, D.Vector.prototype.positionForIndex = function(e) { |
| if (0 == this.elements.length) return 0; |
| for (var t = 0, n = this.elements.length / 2, r = n - t, i = Math.floor(r / 2), o = this.elements[2 * i]; 1 < r && (o < e && (t = i), e < o && (n = i), o != e);) r = n - t, i = t + Math.floor(r / 2), o = this.elements[2 * i]; |
| return o == e ? 2 * i : e < o ? 2 * i : o < e ? 2 * (i + 1) : void 0 |
| }, D.Vector.prototype.insert = function(e, t) { |
| this.upsert(e, t, function() { |
| throw "duplicate index" |
| }) |
| }, D.Vector.prototype.upsert = function(e, t, n) { |
| this._magnitude = 0; |
| var r = this.positionForIndex(e); |
| this.elements[r] == e ? this.elements[r + 1] = n(this.elements[r + 1], t) : this.elements.splice(r, 0, e, t) |
| }, D.Vector.prototype.magnitude = function() { |
| if (this._magnitude) return this._magnitude; |
| for (var e = 0, t = this.elements.length, n = 1; n < t; n += 2) { |
| var r = this.elements[n]; |
| e += r * r |
| } |
| return this._magnitude = Math.sqrt(e) |
| }, D.Vector.prototype.dot = function(e) { |
| for (var t = 0, n = this.elements, r = e.elements, i = n.length, o = r.length, a = 0, s = 0, c = 0, l = 0; c < i && l < o;)(a = n[c]) < (s = r[l]) ? c += 2 : s < a ? l += 2 : a == s && (t += n[c + 1] * r[l + 1], c += 2, l += 2); |
| return t |
| }, D.Vector.prototype.similarity = function(e) { |
| return this.dot(e) / this.magnitude() || 0 |
| }, D.Vector.prototype.toArray = function() { |
| for (var e = new Array(this.elements.length / 2), t = 1, n = 0; t < this.elements.length; t += 2, n++) e[n] = this.elements[t]; |
| return e |
| }, D.Vector.prototype.toJSON = function() { |
| return this.elements |
| }, D.stemmer = (l = { |
| ational: "ate", |
| tional: "tion", |
| enci: "ence", |
| anci: "ance", |
| izer: "ize", |
| bli: "ble", |
| alli: "al", |
| entli: "ent", |
| eli: "e", |
| ousli: "ous", |
| ization: "ize", |
| ation: "ate", |
| ator: "ate", |
| alism: "al", |
| iveness: "ive", |
| fulness: "ful", |
| ousness: "ous", |
| aliti: "al", |
| iviti: "ive", |
| biliti: "ble", |
| logi: "log" |
| }, u = { |
| icate: "ic", |
| ative: "", |
| alize: "al", |
| iciti: "ic", |
| ical: "ic", |
| ful: "", |
| ness: "" |
| }, e = "[aeiouy]", n = "[^aeiou][^aeiouy]*", f = new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"), d = new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"), h = new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"), p = new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"), m = /^(.+?)(ss|i)es$/, y = /^(.+?)([^s])s$/, v = /^(.+?)eed$/, g = /^(.+?)(ed|ing)$/, w = /.$/, _ = /(at|bl|iz)$/, E = new RegExp("([^aeiouylsz])\\1$"), x = new RegExp("^" + n + e + "[^aeiouwxy]$"), b = /^(.+?[^aeiou])y$/, k = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/, S = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/, T = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/, L = /^(.+?)(s|t)(ion)$/, R = /^(.+?)e$/, O = /ll$/, C = new RegExp("^" + n + e + "[^aeiouwxy]$"), r = function(e) { |
| var t, n, r, i, o, a, s; |
| if (e.length < 3) return e; |
| if ("y" == (r = e.substr(0, 1)) && (e = r.toUpperCase() + e.substr(1)), o = y, (i = m).test(e) ? e = e.replace(i, "$1$2") : o.test(e) && (e = e.replace(o, "$1$2")), o = g, (i = v).test(e)) { |
| var c = i.exec(e); |
| (i = f).test(c[1]) && (i = w, e = e.replace(i, "")) |
| } else if (o.test(e)) { |
| t = (c = o.exec(e))[1], (o = p).test(t) && (a = E, s = x, (o = _).test(e = t) ? e += "e" : a.test(e) ? (i = w, e = e.replace(i, "")) : s.test(e) && (e += "e")) |
| }(i = b).test(e) && (e = (t = (c = i.exec(e))[1]) + "i"); |
| (i = k).test(e) && (t = (c = i.exec(e))[1], n = c[2], (i = f).test(t) && (e = t + l[n])); |
| (i = S).test(e) && (t = (c = i.exec(e))[1], n = c[2], (i = f).test(t) && (e = t + u[n])); |
| if (o = L, (i = T).test(e)) t = (c = i.exec(e))[1], (i = d).test(t) && (e = t); |
| else if (o.test(e)) { |
| t = (c = o.exec(e))[1] + c[2], (o = d).test(t) && (e = t) |
| }(i = R).test(e) && (t = (c = i.exec(e))[1], o = h, a = C, ((i = d).test(t) || o.test(t) && !a.test(t)) && (e = t)); |
| return o = d, (i = O).test(e) && o.test(e) && (i = w, e = e.replace(i, "")), "y" == r && (e = r.toLowerCase() + e.substr(1)), e |
| }, function(e) { |
| return e.update(r) |
| }), D.Pipeline.registerFunction(D.stemmer, "stemmer"), D.generateStopWordFilter = function(e) { |
| var t = e.reduce(function(e, t) { |
| return e[t] = t, e |
| }, {}); |
| return function(e) { |
| if (e && t[e.toString()] !== e.toString()) return e |
| } |
| }, D.stopWordFilter = D.generateStopWordFilter(["a", "able", "about", "across", "after", "all", "almost", "also", "am", "among", "an", "and", "any", "are", "as", "at", "be", "because", "been", "but", "by", "can", "cannot", "could", "dear", "did", "do", "does", "either", "else", "ever", "every", "for", "from", "get", "got", "had", "has", "have", "he", "her", "hers", "him", "his", "how", "however", "i", "if", "in", "into", "is", "it", "its", "just", "least", "let", "like", "likely", "may", "me", "might", "most", "must", "my", "neither", "no", "nor", "not", "of", "off", "often", "on", "only", "or", "other", "our", "own", "rather", "said", "say", "says", "she", "should", "since", "so", "some", "than", "that", "the", "their", "them", "then", "there", "these", "they", "this", "tis", "to", "too", "twas", "us", "wants", "was", "we", "were", "what", "when", "where", "which", "while", "who", "whom", "why", "will", "with", "would", "yet", "you", "your"]), D.Pipeline.registerFunction(D.stopWordFilter, "stopWordFilter"), D.trimmer = function(e) { |
| return e.update(function(e) { |
| return e.replace(/^\W+/, "").replace(/\W+$/, "") |
| }) |
| }, D.Pipeline.registerFunction(D.trimmer, "trimmer"), D.TokenSet = function() { |
| this.final = !1, this.edges = {}, this.id = D.TokenSet._nextId, D.TokenSet._nextId += 1 |
| }, D.TokenSet._nextId = 1, D.TokenSet.fromArray = function(e) { |
| for (var t = new D.TokenSet.Builder, n = 0, r = e.length; n < r; n++) t.insert(e[n]); |
| return t.finish(), t.root |
| }, D.TokenSet.fromClause = function(e) { |
| return "editDistance" in e ? D.TokenSet.fromFuzzyString(e.term, e.editDistance) : D.TokenSet.fromString(e.term) |
| }, D.TokenSet.fromFuzzyString = function(e, t) { |
| for (var n = new D.TokenSet, r = [{ |
| node: n, |
| editsRemaining: t, |
| str: e |
| }]; r.length;) { |
| var i = r.pop(); |
| if (0 < i.str.length) { |
| var o, a = i.str.charAt(0); |
| a in i.node.edges ? o = i.node.edges[a] : (o = new D.TokenSet, i.node.edges[a] = o), 1 == i.str.length && (o.final = !0), r.push({ |
| node: o, |
| editsRemaining: i.editsRemaining, |
| str: i.str.slice(1) |
| }) |
| } |
| if (0 != i.editsRemaining) { |
| if ("*" in i.node.edges) var s = i.node.edges["*"]; |
| else { |
| s = new D.TokenSet; |
| i.node.edges["*"] = s |
| } |
| if (0 == i.str.length && (s.final = !0), r.push({ |
| node: s, |
| editsRemaining: i.editsRemaining - 1, |
| str: i.str |
| }), 1 < i.str.length && r.push({ |
| node: i.node, |
| editsRemaining: i.editsRemaining - 1, |
| str: i.str.slice(1) |
| }), 1 == i.str.length && (i.node.final = !0), 1 <= i.str.length) { |
| if ("*" in i.node.edges) var c = i.node.edges["*"]; |
| else { |
| c = new D.TokenSet; |
| i.node.edges["*"] = c |
| } |
| 1 == i.str.length && (c.final = !0), r.push({ |
| node: c, |
| editsRemaining: i.editsRemaining - 1, |
| str: i.str.slice(1) |
| }) |
| } |
| if (1 < i.str.length) { |
| var l, u = i.str.charAt(0), |
| f = i.str.charAt(1); |
| f in i.node.edges ? l = i.node.edges[f] : (l = new D.TokenSet, i.node.edges[f] = l), 1 == i.str.length && (l.final = !0), r.push({ |
| node: l, |
| editsRemaining: i.editsRemaining - 1, |
| str: u + i.str.slice(2) |
| }) |
| } |
| } |
| } |
| return n |
| }, D.TokenSet.fromString = function(e) { |
| for (var t = new D.TokenSet, n = t, r = 0, i = e.length; r < i; r++) { |
| var o = e[r], |
| a = r == i - 1; |
| if ("*" == o)(t.edges[o] = t).final = a; |
| else { |
| var s = new D.TokenSet; |
| s.final = a, t.edges[o] = s, t = s |
| } |
| } |
| return n |
| }, D.TokenSet.prototype.toArray = function() { |
| for (var e = [], t = [{ |
| prefix: "", |
| node: this |
| }]; t.length;) { |
| var n = t.pop(), |
| r = Object.keys(n.node.edges), |
| i = r.length; |
| n.node.final && (n.prefix.charAt(0), e.push(n.prefix)); |
| for (var o = 0; o < i; o++) { |
| var a = r[o]; |
| t.push({ |
| prefix: n.prefix.concat(a), |
| node: n.node.edges[a] |
| }) |
| } |
| } |
| return e |
| }, D.TokenSet.prototype.toString = function() { |
| if (this._str) return this._str; |
| for (var e = this.final ? "1" : "0", t = Object.keys(this.edges).sort(), n = t.length, r = 0; r < n; r++) { |
| var i = t[r]; |
| e = e + i + this.edges[i].id |
| } |
| return e |
| }, D.TokenSet.prototype.intersect = function(e) { |
| for (var t = new D.TokenSet, n = void 0, r = [{ |
| qNode: e, |
| output: t, |
| node: this |
| }]; r.length;) { |
| n = r.pop(); |
| for (var i = Object.keys(n.qNode.edges), o = i.length, a = Object.keys(n.node.edges), s = a.length, c = 0; c < o; c++) |
| for (var l = i[c], u = 0; u < s; u++) { |
| var f = a[u]; |
| if (f == l || "*" == l) { |
| var d = n.node.edges[f], |
| h = n.qNode.edges[l], |
| p = d.final && h.final, |
| m = void 0; |
| f in n.output.edges ? (m = n.output.edges[f]).final = m.final || p : ((m = new D.TokenSet).final = p, n.output.edges[f] = m), r.push({ |
| qNode: h, |
| output: m, |
| node: d |
| }) |
| } |
| } |
| } |
| return t |
| }, D.TokenSet.Builder = function() { |
| this.previousWord = "", this.root = new D.TokenSet, this.uncheckedNodes = [], this.minimizedNodes = {} |
| }, D.TokenSet.Builder.prototype.insert = function(e) { |
| var t, n = 0; |
| if (e < this.previousWord) throw new Error("Out of order word insertion"); |
| for (var r = 0; r < e.length && r < this.previousWord.length && e[r] == this.previousWord[r]; r++) n++; |
| this.minimize(n), t = 0 == this.uncheckedNodes.length ? this.root : this.uncheckedNodes[this.uncheckedNodes.length - 1].child; |
| for (r = n; r < e.length; r++) { |
| var i = new D.TokenSet, |
| o = e[r]; |
| t.edges[o] = i, this.uncheckedNodes.push({ |
| parent: t, |
| char: o, |
| child: i |
| }), t = i |
| } |
| t.final = !0, this.previousWord = e |
| }, D.TokenSet.Builder.prototype.finish = function() { |
| this.minimize(0) |
| }, D.TokenSet.Builder.prototype.minimize = function(e) { |
| for (var t = this.uncheckedNodes.length - 1; e <= t; t--) { |
| var n = this.uncheckedNodes[t], |
| r = n.child.toString(); |
| r in this.minimizedNodes ? n.parent.edges[n.char] = this.minimizedNodes[r] : (n.child._str = r, this.minimizedNodes[r] = n.child), this.uncheckedNodes.pop() |
| } |
| }, D.Index = function(e) { |
| this.invertedIndex = e.invertedIndex, this.fieldVectors = e.fieldVectors, this.tokenSet = e.tokenSet, this.fields = e.fields, this.pipeline = e.pipeline |
| }, D.Index.prototype.search = function(t) { |
| return this.query(function(e) { |
| new D.QueryParser(t, e).parse() |
| }) |
| }, D.Index.prototype.query = function(e) { |
| for (var t = new D.Query(this.fields), n = Object.create(null), r = Object.create(null), i = Object.create(null), o = Object.create(null), a = Object.create(null), s = 0; s < this.fields.length; s++) r[this.fields[s]] = new D.Vector; |
| e.call(t, t); |
| for (s = 0; s < t.clauses.length; s++) { |
| var c = t.clauses[s], |
| l = null, |
| u = D.Set.complete; |
| l = c.usePipeline ? this.pipeline.runString(c.term, { |
| fields: c.fields |
| }) : [c.term]; |
| for (var f = 0; f < l.length; f++) { |
| var d = l[f]; |
| c.term = d; |
| var h = D.TokenSet.fromClause(c), |
| p = this.tokenSet.intersect(h).toArray(); |
| if (0 === p.length && c.presence === D.Query.presence.REQUIRED) { |
| for (var m = 0; m < c.fields.length; m++) { |
| o[Q = c.fields[m]] = D.Set.empty |
| } |
| break |
| } |
| for (var y = 0; y < p.length; y++) { |
| var v = p[y], |
| g = this.invertedIndex[v], |
| w = g._index; |
| for (m = 0; m < c.fields.length; m++) { |
| var _ = g[Q = c.fields[m]], |
| E = Object.keys(_), |
| x = v + "/" + Q, |
| b = new D.Set(E); |
| if (c.presence == D.Query.presence.REQUIRED && (u = u.union(b), void 0 === o[Q] && (o[Q] = D.Set.complete)), c.presence != D.Query.presence.PROHIBITED) { |
| if (r[Q].upsert(w, c.boost, function(e, t) { |
| return e + t |
| }), !i[x]) { |
| for (var k = 0; k < E.length; k++) { |
| var S, T = E[k], |
| L = new D.FieldRef(T, Q), |
| R = _[T]; |
| void 0 === (S = n[L]) ? n[L] = new D.MatchData(v, Q, R) : S.add(v, Q, R) |
| } |
| i[x] = !0 |
| } |
| } else void 0 === a[Q] && (a[Q] = D.Set.empty), a[Q] = a[Q].union(b) |
| } |
| } |
| } |
| if (c.presence === D.Query.presence.REQUIRED) |
| for (m = 0; m < c.fields.length; m++) { |
| o[Q = c.fields[m]] = o[Q].intersect(u) |
| } |
| } |
| var O = D.Set.complete, |
| C = D.Set.empty; |
| for (s = 0; s < this.fields.length; s++) { |
| var Q; |
| o[Q = this.fields[s]] && (O = O.intersect(o[Q])), a[Q] && (C = C.union(a[Q])) |
| } |
| var P = Object.keys(n), |
| A = [], |
| I = Object.create(null); |
| if (t.isNegated()) { |
| P = Object.keys(this.fieldVectors); |
| for (s = 0; s < P.length; s++) { |
| L = P[s]; |
| var M = D.FieldRef.fromString(L); |
| n[L] = new D.MatchData |
| } |
| } |
| for (s = 0; s < P.length; s++) { |
| var N = (M = D.FieldRef.fromString(P[s])).docRef; |
| if (O.contains(N) && !C.contains(N)) { |
| var j, F = this.fieldVectors[M], |
| H = r[M.fieldName].similarity(F); |
| if (void 0 !== (j = I[N])) j.score += H, j.matchData.combine(n[M]); |
| else { |
| var q = { |
| ref: N, |
| score: H, |
| matchData: n[M] |
| }; |
| I[N] = q, A.push(q) |
| } |
| } |
| } |
| return A.sort(function(e, t) { |
| return t.score - e.score |
| }) |
| }, D.Index.prototype.toJSON = function() { |
| var e = Object.keys(this.invertedIndex).sort().map(function(e) { |
| return [e, this.invertedIndex[e]] |
| }, this), |
| t = Object.keys(this.fieldVectors).map(function(e) { |
| return [e, this.fieldVectors[e].toJSON()] |
| }, this); |
| return { |
| version: D.version, |
| fields: this.fields, |
| fieldVectors: t, |
| invertedIndex: e, |
| pipeline: this.pipeline.toJSON() |
| } |
| }, D.Index.load = function(e) { |
| var t = {}, |
| n = {}, |
| r = e.fieldVectors, |
| i = Object.create(null), |
| o = e.invertedIndex, |
| a = new D.TokenSet.Builder, |
| s = D.Pipeline.load(e.pipeline); |
| e.version != D.version && D.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + D.version + "' does not match serialized index '" + e.version + "'"); |
| for (var c = 0; c < r.length; c++) { |
| var l = (f = r[c])[0], |
| u = f[1]; |
| n[l] = new D.Vector(u) |
| } |
| for (c = 0; c < o.length; c++) { |
| var f, d = (f = o[c])[0], |
| h = f[1]; |
| a.insert(d), i[d] = h |
| } |
| return a.finish(), t.fields = e.fields, t.fieldVectors = n, t.invertedIndex = i, t.tokenSet = a.root, t.pipeline = s, new D.Index(t) |
| }, D.Builder = function() { |
| this._ref = "id", this._fields = Object.create(null), this._documents = Object.create(null), this.invertedIndex = Object.create(null), this.fieldTermFrequencies = {}, this.fieldLengths = {}, this.tokenizer = D.tokenizer, this.pipeline = new D.Pipeline, this.searchPipeline = new D.Pipeline, this.documentCount = 0, this._b = .75, this._k1 = 1.2, this.termIndex = 0, this.metadataWhitelist = [] |
| }, D.Builder.prototype.ref = function(e) { |
| this._ref = e |
| }, D.Builder.prototype.field = function(e, t) { |
| if (/\//.test(e)) throw new RangeError("Field '" + e + "' contains illegal character '/'"); |
| this._fields[e] = t || {} |
| }, D.Builder.prototype.b = function(e) { |
| this._b = e < 0 ? 0 : 1 < e ? 1 : e |
| }, D.Builder.prototype.k1 = function(e) { |
| this._k1 = e |
| }, D.Builder.prototype.add = function(e, t) { |
| var n = e[this._ref], |
| r = Object.keys(this._fields); |
| this._documents[n] = t || {}, this.documentCount += 1; |
| for (var i = 0; i < r.length; i++) { |
| var o = r[i], |
| a = this._fields[o].extractor, |
| s = a ? a(e) : e[o], |
| c = this.tokenizer(s, { |
| fields: [o] |
| }), |
| l = this.pipeline.run(c), |
| u = new D.FieldRef(n, o), |
| f = Object.create(null); |
| this.fieldTermFrequencies[u] = f, this.fieldLengths[u] = 0, this.fieldLengths[u] += l.length; |
| for (var d = 0; d < l.length; d++) { |
| var h = l[d]; |
| if (null == f[h] && (f[h] = 0), f[h] += 1, null == this.invertedIndex[h]) { |
| var p = Object.create(null); |
| p._index = this.termIndex, this.termIndex += 1; |
| for (var m = 0; m < r.length; m++) p[r[m]] = Object.create(null); |
| this.invertedIndex[h] = p |
| } |
| null == this.invertedIndex[h][o][n] && (this.invertedIndex[h][o][n] = Object.create(null)); |
| for (var y = 0; y < this.metadataWhitelist.length; y++) { |
| var v = this.metadataWhitelist[y], |
| g = h.metadata[v]; |
| null == this.invertedIndex[h][o][n][v] && (this.invertedIndex[h][o][n][v] = []), this.invertedIndex[h][o][n][v].push(g) |
| } |
| } |
| } |
| }, D.Builder.prototype.calculateAverageFieldLengths = function() { |
| for (var e = Object.keys(this.fieldLengths), t = e.length, n = {}, r = {}, i = 0; i < t; i++) { |
| var o = D.FieldRef.fromString(e[i]), |
| a = o.fieldName; |
| r[a] || (r[a] = 0), r[a] += 1, n[a] || (n[a] = 0), n[a] += this.fieldLengths[o] |
| } |
| var s = Object.keys(this._fields); |
| for (i = 0; i < s.length; i++) { |
| var c = s[i]; |
| n[c] = n[c] / r[c] |
| } |
| this.averageFieldLength = n |
| }, D.Builder.prototype.createFieldVectors = function() { |
| for (var e = {}, t = Object.keys(this.fieldTermFrequencies), n = t.length, r = Object.create(null), i = 0; i < n; i++) { |
| for (var o = D.FieldRef.fromString(t[i]), a = o.fieldName, s = this.fieldLengths[o], c = new D.Vector, l = this.fieldTermFrequencies[o], u = Object.keys(l), f = u.length, d = this._fields[a].boost || 1, h = this._documents[o.docRef].boost || 1, p = 0; p < f; p++) { |
| var m, y, v, g = u[p], |
| w = l[g], |
| _ = this.invertedIndex[g]._index; |
| void 0 === r[g] ? (m = D.idf(this.invertedIndex[g], this.documentCount), r[g] = m) : m = r[g], y = m * ((this._k1 + 1) * w) / (this._k1 * (1 - this._b + this._b * (s / this.averageFieldLength[a])) + w), y *= d, y *= h, v = Math.round(1e3 * y) / 1e3, c.insert(_, v) |
| } |
| e[o] = c |
| } |
| this.fieldVectors = e |
| }, D.Builder.prototype.createTokenSet = function() { |
| this.tokenSet = D.TokenSet.fromArray(Object.keys(this.invertedIndex).sort()) |
| }, D.Builder.prototype.build = function() { |
| return this.calculateAverageFieldLengths(), this.createFieldVectors(), this.createTokenSet(), new D.Index({ |
| invertedIndex: this.invertedIndex, |
| fieldVectors: this.fieldVectors, |
| tokenSet: this.tokenSet, |
| fields: Object.keys(this._fields), |
| pipeline: this.searchPipeline |
| }) |
| }, D.Builder.prototype.use = function(e) { |
| var t = Array.prototype.slice.call(arguments, 1); |
| t.unshift(this), e.apply(this, t) |
| }, D.MatchData = function(e, t, n) { |
| for (var r = Object.create(null), i = Object.keys(n || {}), o = 0; o < i.length; o++) { |
| var a = i[o]; |
| r[a] = n[a].slice() |
| } |
| this.metadata = Object.create(null), void 0 !== e && (this.metadata[e] = Object.create(null), this.metadata[e][t] = r) |
| }, D.MatchData.prototype.combine = function(e) { |
| for (var t = Object.keys(e.metadata), n = 0; n < t.length; n++) { |
| var r = t[n], |
| i = Object.keys(e.metadata[r]); |
| null == this.metadata[r] && (this.metadata[r] = Object.create(null)); |
| for (var o = 0; o < i.length; o++) { |
| var a = i[o], |
| s = Object.keys(e.metadata[r][a]); |
| null == this.metadata[r][a] && (this.metadata[r][a] = Object.create(null)); |
| for (var c = 0; c < s.length; c++) { |
| var l = s[c]; |
| null == this.metadata[r][a][l] ? this.metadata[r][a][l] = e.metadata[r][a][l] : this.metadata[r][a][l] = this.metadata[r][a][l].concat(e.metadata[r][a][l]) |
| } |
| } |
| } |
| }, D.MatchData.prototype.add = function(e, t, n) { |
| if (!(e in this.metadata)) return this.metadata[e] = Object.create(null), void(this.metadata[e][t] = n); |
| if (t in this.metadata[e]) |
| for (var r = Object.keys(n), i = 0; i < r.length; i++) { |
| var o = r[i]; |
| o in this.metadata[e][t] ? this.metadata[e][t][o] = this.metadata[e][t][o].concat(n[o]) : this.metadata[e][t][o] = n[o] |
| } else this.metadata[e][t] = n |
| }, D.Query = function(e) { |
| this.clauses = [], this.allFields = e |
| }, D.Query.wildcard = new String("*"), D.Query.wildcard.NONE = 0, D.Query.wildcard.LEADING = 1, D.Query.wildcard.TRAILING = 2, D.Query.presence = { |
| OPTIONAL: 1, |
| REQUIRED: 2, |
| PROHIBITED: 3 |
| }, D.Query.prototype.clause = function(e) { |
| return "fields" in e || (e.fields = this.allFields), "boost" in e || (e.boost = 1), "usePipeline" in e || (e.usePipeline = !0), "wildcard" in e || (e.wildcard = D.Query.wildcard.NONE), e.wildcard & D.Query.wildcard.LEADING && e.term.charAt(0) != D.Query.wildcard && (e.term = "*" + e.term), e.wildcard & D.Query.wildcard.TRAILING && e.term.slice(-1) != D.Query.wildcard && (e.term = e.term + "*"), "presence" in e || (e.presence = D.Query.presence.OPTIONAL), this.clauses.push(e), this |
| }, D.Query.prototype.isNegated = function() { |
| for (var e = 0; e < this.clauses.length; e++) |
| if (this.clauses[e].presence != D.Query.presence.PROHIBITED) return !1; |
| return !0 |
| }, D.Query.prototype.term = function(e, t) { |
| if (Array.isArray(e)) return e.forEach(function(e) { |
| this.term(e, D.utils.clone(t)) |
| }, this), this; |
| var n = t || {}; |
| return n.term = e.toString(), this.clause(n), this |
| }, D.QueryParseError = function(e, t, n) { |
| this.name = "QueryParseError", this.message = e, this.start = t, this.end = n |
| }, D.QueryParseError.prototype = new Error, D.QueryLexer = function(e) { |
| this.lexemes = [], this.str = e, this.length = e.length, this.pos = 0, this.start = 0, this.escapeCharPositions = [] |
| }, D.QueryLexer.prototype.run = function() { |
| for (var e = D.QueryLexer.lexText; e;) e = e(this) |
| }, D.QueryLexer.prototype.sliceString = function() { |
| for (var e = [], t = this.start, n = this.pos, r = 0; r < this.escapeCharPositions.length; r++) n = this.escapeCharPositions[r], e.push(this.str.slice(t, n)), t = n + 1; |
| return e.push(this.str.slice(t, this.pos)), this.escapeCharPositions.length = 0, e.join("") |
| }, D.QueryLexer.prototype.emit = function(e) { |
| this.lexemes.push({ |
| type: e, |
| str: this.sliceString(), |
| start: this.start, |
| end: this.pos |
| }), this.start = this.pos |
| }, D.QueryLexer.prototype.escapeCharacter = function() { |
| this.escapeCharPositions.push(this.pos - 1), this.pos += 1 |
| }, D.QueryLexer.prototype.next = function() { |
| if (this.pos >= this.length) return D.QueryLexer.EOS; |
| var e = this.str.charAt(this.pos); |
| return this.pos += 1, e |
| }, D.QueryLexer.prototype.width = function() { |
| return this.pos - this.start |
| }, D.QueryLexer.prototype.ignore = function() { |
| this.start == this.pos && (this.pos += 1), this.start = this.pos |
| }, D.QueryLexer.prototype.backup = function() { |
| this.pos -= 1 |
| }, D.QueryLexer.prototype.acceptDigitRun = function() { |
| for (var e, t; 47 < (t = (e = this.next()).charCodeAt(0)) && t < 58;); |
| e != D.QueryLexer.EOS && this.backup() |
| }, D.QueryLexer.prototype.more = function() { |
| return this.pos < this.length |
| }, D.QueryLexer.EOS = "EOS", D.QueryLexer.FIELD = "FIELD", D.QueryLexer.TERM = "TERM", D.QueryLexer.EDIT_DISTANCE = "EDIT_DISTANCE", D.QueryLexer.BOOST = "BOOST", D.QueryLexer.PRESENCE = "PRESENCE", D.QueryLexer.lexField = function(e) { |
| return e.backup(), e.emit(D.QueryLexer.FIELD), e.ignore(), D.QueryLexer.lexText |
| }, D.QueryLexer.lexTerm = function(e) { |
| if (1 < e.width() && (e.backup(), e.emit(D.QueryLexer.TERM)), e.ignore(), e.more()) return D.QueryLexer.lexText |
| }, D.QueryLexer.lexEditDistance = function(e) { |
| return e.ignore(), e.acceptDigitRun(), e.emit(D.QueryLexer.EDIT_DISTANCE), D.QueryLexer.lexText |
| }, D.QueryLexer.lexBoost = function(e) { |
| return e.ignore(), e.acceptDigitRun(), e.emit(D.QueryLexer.BOOST), D.QueryLexer.lexText |
| }, D.QueryLexer.lexEOS = function(e) { |
| 0 < e.width() && e.emit(D.QueryLexer.TERM) |
| }, D.QueryLexer.termSeparator = D.tokenizer.separator, D.QueryLexer.lexText = function(e) { |
| for (;;) { |
| var t = e.next(); |
| if (t == D.QueryLexer.EOS) return D.QueryLexer.lexEOS; |
| if (92 != t.charCodeAt(0)) { |
| if (":" == t) return D.QueryLexer.lexField; |
| if ("~" == t) return e.backup(), 0 < e.width() && e.emit(D.QueryLexer.TERM), D.QueryLexer.lexEditDistance; |
| if ("^" == t) return e.backup(), 0 < e.width() && e.emit(D.QueryLexer.TERM), D.QueryLexer.lexBoost; |
| if ("+" == t && 1 === e.width()) return e.emit(D.QueryLexer.PRESENCE), D.QueryLexer.lexText; |
| if ("-" == t && 1 === e.width()) return e.emit(D.QueryLexer.PRESENCE), D.QueryLexer.lexText; |
| if (t.match(D.QueryLexer.termSeparator)) return D.QueryLexer.lexTerm |
| } else e.escapeCharacter() |
| } |
| }, D.QueryParser = function(e, t) { |
| this.lexer = new D.QueryLexer(e), this.query = t, this.currentClause = {}, this.lexemeIdx = 0 |
| }, D.QueryParser.prototype.parse = function() { |
| this.lexer.run(), this.lexemes = this.lexer.lexemes; |
| for (var e = D.QueryParser.parseClause; e;) e = e(this); |
| return this.query |
| }, D.QueryParser.prototype.peekLexeme = function() { |
| return this.lexemes[this.lexemeIdx] |
| }, D.QueryParser.prototype.consumeLexeme = function() { |
| var e = this.peekLexeme(); |
| return this.lexemeIdx += 1, e |
| }, D.QueryParser.prototype.nextClause = function() { |
| var e = this.currentClause; |
| this.query.clause(e), this.currentClause = {} |
| }, D.QueryParser.parseClause = function(e) { |
| var t = e.peekLexeme(); |
| if (null != t) switch (t.type) { |
| case D.QueryLexer.PRESENCE: |
| return D.QueryParser.parsePresence; |
| case D.QueryLexer.FIELD: |
| return D.QueryParser.parseField; |
| case D.QueryLexer.TERM: |
| return D.QueryParser.parseTerm; |
| default: |
| var n = "expected either a field or a term, found " + t.type; |
| throw 1 <= t.str.length && (n += " with value '" + t.str + "'"), new D.QueryParseError(n, t.start, t.end) |
| } |
| }, D.QueryParser.parsePresence = function(e) { |
| var t = e.consumeLexeme(); |
| if (null != t) { |
| switch (t.str) { |
| case "-": |
| e.currentClause.presence = D.Query.presence.PROHIBITED; |
| break; |
| case "+": |
| e.currentClause.presence = D.Query.presence.REQUIRED; |
| break; |
| default: |
| var n = "unrecognised presence operator'" + t.str + "'"; |
| throw new D.QueryParseError(n, t.start, t.end) |
| } |
| var r = e.peekLexeme(); |
| if (null == r) { |
| n = "expecting term or field, found nothing"; |
| throw new D.QueryParseError(n, t.start, t.end) |
| } |
| switch (r.type) { |
| case D.QueryLexer.FIELD: |
| return D.QueryParser.parseField; |
| case D.QueryLexer.TERM: |
| return D.QueryParser.parseTerm; |
| default: |
| n = "expecting term or field, found '" + r.type + "'"; |
| throw new D.QueryParseError(n, r.start, r.end) |
| } |
| } |
| }, D.QueryParser.parseField = function(e) { |
| var t = e.consumeLexeme(); |
| if (null != t) { |
| if (-1 == e.query.allFields.indexOf(t.str)) { |
| var n = e.query.allFields.map(function(e) { |
| return "'" + e + "'" |
| }).join(", "), |
| r = "unrecognised field '" + t.str + "', possible fields: " + n; |
| throw new D.QueryParseError(r, t.start, t.end) |
| } |
| e.currentClause.fields = [t.str]; |
| var i = e.peekLexeme(); |
| if (null == i) { |
| r = "expecting term, found nothing"; |
| throw new D.QueryParseError(r, t.start, t.end) |
| } |
| switch (i.type) { |
| case D.QueryLexer.TERM: |
| return D.QueryParser.parseTerm; |
| default: |
| r = "expecting term, found '" + i.type + "'"; |
| throw new D.QueryParseError(r, i.start, i.end) |
| } |
| } |
| }, D.QueryParser.parseTerm = function(e) { |
| var t = e.consumeLexeme(); |
| if (null != t) { |
| e.currentClause.term = t.str.toLowerCase(), -1 != t.str.indexOf("*") && (e.currentClause.usePipeline = !1); |
| var n = e.peekLexeme(); |
| if (null != n) switch (n.type) { |
| case D.QueryLexer.TERM: |
| return e.nextClause(), D.QueryParser.parseTerm; |
| case D.QueryLexer.FIELD: |
| return e.nextClause(), D.QueryParser.parseField; |
| case D.QueryLexer.EDIT_DISTANCE: |
| return D.QueryParser.parseEditDistance; |
| case D.QueryLexer.BOOST: |
| return D.QueryParser.parseBoost; |
| case D.QueryLexer.PRESENCE: |
| return e.nextClause(), D.QueryParser.parsePresence; |
| default: |
| var r = "Unexpected lexeme type '" + n.type + "'"; |
| throw new D.QueryParseError(r, n.start, n.end) |
| } else e.nextClause() |
| } |
| }, D.QueryParser.parseEditDistance = function(e) { |
| var t = e.consumeLexeme(); |
| if (null != t) { |
| var n = parseInt(t.str, 10); |
| if (isNaN(n)) { |
| var r = "edit distance must be numeric"; |
| throw new D.QueryParseError(r, t.start, t.end) |
| } |
| e.currentClause.editDistance = n; |
| var i = e.peekLexeme(); |
| if (null != i) switch (i.type) { |
| case D.QueryLexer.TERM: |
| return e.nextClause(), D.QueryParser.parseTerm; |
| case D.QueryLexer.FIELD: |
| return e.nextClause(), D.QueryParser.parseField; |
| case D.QueryLexer.EDIT_DISTANCE: |
| return D.QueryParser.parseEditDistance; |
| case D.QueryLexer.BOOST: |
| return D.QueryParser.parseBoost; |
| case D.QueryLexer.PRESENCE: |
| return e.nextClause(), D.QueryParser.parsePresence; |
| default: |
| r = "Unexpected lexeme type '" + i.type + "'"; |
| throw new D.QueryParseError(r, i.start, i.end) |
| } else e.nextClause() |
| } |
| }, D.QueryParser.parseBoost = function(e) { |
| var t = e.consumeLexeme(); |
| if (null != t) { |
| var n = parseInt(t.str, 10); |
| if (isNaN(n)) { |
| var r = "boost must be numeric"; |
| throw new D.QueryParseError(r, t.start, t.end) |
| } |
| e.currentClause.boost = n; |
| var i = e.peekLexeme(); |
| if (null != i) switch (i.type) { |
| case D.QueryLexer.TERM: |
| return e.nextClause(), D.QueryParser.parseTerm; |
| case D.QueryLexer.FIELD: |
| return e.nextClause(), D.QueryParser.parseField; |
| case D.QueryLexer.EDIT_DISTANCE: |
| return D.QueryParser.parseEditDistance; |
| case D.QueryLexer.BOOST: |
| return D.QueryParser.parseBoost; |
| case D.QueryLexer.PRESENCE: |
| return e.nextClause(), D.QueryParser.parsePresence; |
| default: |
| r = "Unexpected lexeme type '" + i.type + "'"; |
| throw new D.QueryParseError(r, i.start, i.end) |
| } else e.nextClause() |
| } |
| }, void 0 === (c = "function" == typeof(s = function() { |
| return D |
| }) ? s.call(o, a, o, i) : s) || (i.exports = c) |
| }() |
| }])); |