From 787901b84c6e75c0c08578f5d2bb00c8bbc4344c Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Mon, 20 Feb 2023 16:09:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D0=BD=D0=B0=20tipue=20?= =?UTF-8?q?=D0=BD=D0=B0=20search?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/css/stork-dark.css | 38 ++ static/css/stork.css | 212 ++++++++ static/js/stork.js | 2 + static/js/stork.js.map | 1 + static/js/stork.wasm | Bin 0 -> 351489 bytes static/tipuesearch/tipuesearch.css | 280 ---------- static/tipuesearch/tipuesearch.min.js | 611 ---------------------- static/tipuesearch/tipuesearch_content.js | 17 - static/tipuesearch/tipuesearch_set.js | 84 --- templates/base.html | 81 +-- templates/search.html | 22 +- 11 files changed, 270 insertions(+), 1078 deletions(-) create mode 100644 static/css/stork-dark.css create mode 100644 static/css/stork.css create mode 100644 static/js/stork.js create mode 100644 static/js/stork.js.map create mode 100644 static/js/stork.wasm delete mode 100644 static/tipuesearch/tipuesearch.css delete mode 100644 static/tipuesearch/tipuesearch.min.js delete mode 100644 static/tipuesearch/tipuesearch_content.js delete mode 100644 static/tipuesearch/tipuesearch_set.js diff --git a/static/css/stork-dark.css b/static/css/stork-dark.css new file mode 100644 index 0000000..96f2b21 --- /dev/null +++ b/static/css/stork-dark.css @@ -0,0 +1,38 @@ +@import url(https://files.stork-search.net/basic.css); + +body:not(.stork-multitheme), +.stork-wrapper-dark { + --stork-border-color: hsl(0, 0%, 36%); + --stork-background-color: hsl(0, 0%, 22%); + --stork-accent-color: hsl(194, 90%, 53%); + + --stork-input-text-color: white; + + --stork-results-hover-color: hsl(210, 83%, 16%); + --stork-results-title-color: white; + --stork-results-excerpt-color: hsla(0, 0%, 80%, 1); + --stork-results-highlight-color: rgb(94, 201, 186); + --stork-results-border-color: hsl(0, 0%, 30%); +} + +body:not(.stork-multitheme) .stork-close-button, +.stork-wrapper-dark .stork-close-button { + background: linear-gradient( + to bottom, + hsl(0, 0%, 60%) 0%, + hsl(0, 0%, 50%) 100% + ); + border: 1px solid hsla(0, 0%, 50%, 0.8); + color: hsl(0, 0%, 25%); +} + +body:not(.stork-multitheme) .stork-close-button:hover, +.stork-wrapper-dark .stork-close-button:hover { + background: hsla(0, 0%, 45%); + cursor: pointer; +} + +body:not(.stork-multitheme) .stork-close-button:active, +.stork-wrapper-dark .stork-close-button:active { + background: hsla(0, 0%, 40%); +} diff --git a/static/css/stork.css b/static/css/stork.css new file mode 100644 index 0000000..381c786 --- /dev/null +++ b/static/css/stork.css @@ -0,0 +1,212 @@ +:root { + --stork-border-color: hsl(0, 0%, 65%); + --stork-background-color: hsla(0, 0%, 97%, 1); + --stork-font-family: inherit; + --stork-size-multiplier: 1; + --stork-accent-color: hsl(210, 72%, 45%); + + --stork-input-width: 100%; + --stork-input-border-radius: 8px; + --stork-input-text-color: black; + --stork-input-shadow: 1; + + --stork-results-width: 100%; + --stork-results-border-radius: 4px; + --stork-results-shadow: 1; + --stork-results-hover-color: hsl(210, 65%, 75%); + --stork-results-title-color: black; + --stork-results-excerpt-color: black; + --stork-results-highlight-color: rgb(245, 230, 26); + --stork-results-border-color: var(--stork-border-color); +} + +.stork-wrapper { + position: relative; + font-family: var(--stork-font-family); + box-sizing: border-box; + font-size: 1em * var(--stork-size-multiplier); +} + +.stork-wrapper *, +.stork-wrapper *:before, +.stork-wrapper *:after { + box-sizing: border-box; +} + +.stork-input { + width: var(--stork-input-width); + height: 2.4em; + font-size: 1em; + padding: 0.4em 0.8em; + position: relative; + box-shadow: inset 0 0.1em 0.3em + hsla(0, 0%, 0%, calc(var(--stork-input-shadow) * 0.25)); + border: 1px solid var(--stork-border-color); + border-radius: var(--stork-input-border-radius); + background-color: var(--stork-background-color); + color: var(--stork-input-text-color); + font-family: var(--stork-font-family); +} + +.stork-input:focus { + outline: none; +} + +.stork-progress { + position: absolute; + display: block; + content: ""; + bottom: 1px; + background-color: var(--stork-accent-color); + box-shadow: 0 0 8px var(--stork-accent-color); + height: 1px; + transition: width 0.25s ease, opacity 0.4s ease 0.4s; +} + +.stork-output { + position: absolute; + width: var(--stork-results-width); + margin-top: 0.5em; + border-radius: var(--stork-results-border-radius); + display: flex; + flex-direction: column; + z-index: 100; + color: var(--stork-results-title-color); + font-weight: 400; + font-family: var(--stork-font-family); +} + +.stork-attribution a:link, +.stork-attribution a:visited { + color: var(--stork-accent-color); +} + +.stork-output-visible { + border: 1px solid var(--stork-border-color); + box-shadow: 0px 0px 2.2px + rgba(0, 0, 0, calc(var(--stork-results-shadow) * 0.02)), + 0px 0px 5.3px rgba(0, 0, 0, calc(var(--stork-results-shadow) * 0.028)), + 0px 0px 10px rgba(0, 0, 0, calc(var(--stork-results-shadow) * 0.035)), + 0px 0px 17.9px rgba(0, 0, 0, calc(var(--stork-results-shadow) * 0.042)), + 0px 0px 33.4px rgba(0, 0, 0, calc(var(--stork-results-shadow) * 0.05)), + 0px 0px 80px rgba(0, 0, 0, calc(var(--stork-results-shadow) * 0.07)); + background: var(--stork-background-color); +} + +.stork-message { + width: 100%; + padding: 0.5em 1em; + color: var(--stork-results-title-color); +} + +.stork-attribution { + width: 100%; + padding: 0.5em 1em; + font-size: 0.8em; + color: var(--stork-results-title-color); +} + +.stork-results { + margin: 0; + padding: 0.25em 0; + width: 100%; + list-style-type: none; + max-height: 25em; + overflow-y: scroll; + border-top: 1px solid var(--stork-border-color); + border-bottom: 1px solid var(--stork-border-color); + box-shadow: inset 0em 0.7em 0.7em -0.7em hsla(0, 0%, 0%, calc(var( + --stork-results-shadow + ) * 0.34)), + inset 0em -0.7em 0.7em -0.7em + hsl(0, 0%, 0%, calc(var(--stork-results-shadow) * 0.34)); +} + +.stork-result:not(:last-child) { + border-bottom: 1px solid var(--stork-results-border-color); +} + +.stork-result.selected { + background: var(--stork-results-hover-color); +} + +.stork-result a:link { + padding: 1em; + display: block; + color: currentcolor; + text-decoration: none; +} + +.stork-result p { + margin: 0; +} + +.stork-title { + font-weight: bold; + font-size: 0.95em; + margin: 0 0 0.75em 0; + color: var(--stork-results-title-color); + + /* Flexbox container for the title and the score, when debugging */ + display: flex; + justify-content: space-between; +} + +.stork-excerpt { + font-size: 0.8em; + line-height: 1; + margin: 0; + color: var(--stork-results-excerpt-color); + + /* Flexbox container for the title and the score, when debugging */ + display: flex; + justify-content: space-between; +} + +.stork-excerpt:not(:last-of-type) { + margin-bottom: 0.6em; +} + +.stork-highlight { + background-color: var(--stork-results-highlight-color); + padding: 0 0.1em; +} + +.stork-error { + outline: 2px solid hsl(0, 89%, 46%); +} + +.stork-close-button { + position: absolute; + bottom: 0; + right: 0; + margin: 0.3em 0.4em; + height: 1.5em; + width: 1.5em; + padding: 0px; + background: linear-gradient( + to bottom, + hsl(0, 0%, 85%) 0%, + hsl(0, 0%, 75%) 100% + ); + border: 1px solid hsla(0, 0%, 50%, 0.8); + font-size: 1.1em; + color: hsl(0, 0%, 45%); + border-radius: 15%; + line-height: 1; +} + +.stork-close-button svg { + width: 0.8em; + position: relative; + top: 1px; +} + +.stork-close-button:hover { + background: hsla(0, 0%, 70%); + cursor: pointer; +} + +.stork-close-button:active { + background: hsla(0, 0%, 65%); +} diff --git a/static/js/stork.js b/static/js/stork.js new file mode 100644 index 0000000..b464ecd --- /dev/null +++ b/static/js/stork.js @@ -0,0 +1,2 @@ +var stork;(()=>{"use strict";var e={214:(e,t,n)=>{let r;n.r(t),n.d(t,{default:()=>_,wasm_register_index:()=>v,wasm_search:()=>y,wasm_stork_version:()=>w});const o=new Array(32).fill(void 0);function s(e){return o[e]}o.push(void 0,null,!0,!1);let i=o.length;let a=0,l=null;function u(){return null!==l&&l.buffer===r.memory.buffer||(l=new Uint8Array(r.memory.buffer)),l}let c=new TextEncoder("utf-8");const d="function"==typeof c.encodeInto?function(e,t){return c.encodeInto(e,t)}:function(e,t){const n=c.encode(e);return t.set(n),{read:e.length,written:n.length}};function h(e,t,n){if(void 0===n){const n=c.encode(e),r=t(n.length);return u().subarray(r,r+n.length).set(n),a=n.length,r}let r=e.length,o=t(r);const s=u();let i=0;for(;i127)break;s[o+i]=t}if(i!==r){0!==i&&(e=e.slice(i)),o=n(o,r,r=i+3*e.length);const t=u().subarray(o+i,o+r);i+=d(e,t).written}return a=i,o}let f=null;function g(){return null!==f&&f.buffer===r.memory.buffer||(f=new Int32Array(r.memory.buffer)),f}let p=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});function m(e,t){return p.decode(u().subarray(e,e+t))}function v(e,t){try{const d=r.__wbindgen_add_to_stack_pointer(-16);var n=h(e,r.__wbindgen_malloc,r.__wbindgen_realloc),o=a,s=function(e,t){const n=t(1*e.length);return u().set(e,n/1),a=e.length,n}(t,r.__wbindgen_malloc),i=a;r.wasm_register_index(d,n,o,s,i);var l=g()[d/4+0],c=g()[d/4+1];return m(l,c)}finally{r.__wbindgen_add_to_stack_pointer(16),r.__wbindgen_free(l,c)}}function y(e,t){try{const c=r.__wbindgen_add_to_stack_pointer(-16);var n=h(e,r.__wbindgen_malloc,r.__wbindgen_realloc),o=a,s=h(t,r.__wbindgen_malloc,r.__wbindgen_realloc),i=a;r.wasm_search(c,n,o,s,i);var l=g()[c/4+0],u=g()[c/4+1];return m(l,u)}finally{r.__wbindgen_add_to_stack_pointer(16),r.__wbindgen_free(l,u)}}function w(){try{const n=r.__wbindgen_add_to_stack_pointer(-16);r.wasm_stork_version(n);var e=g()[n/4+0],t=g()[n/4+1];return m(e,t)}finally{r.__wbindgen_add_to_stack_pointer(16),r.__wbindgen_free(e,t)}}p.decode();const _=async function e(t){void 0===t&&(t=new URL("stork_bg.wasm",function(e){const t=n.p;let r="";return(!t||t.indexOf("://")<0)&&(r+=window.location.protocol+"//"+window.location.host),r+=t||"/",r+e}("node_modules/stork-search/stork.js")));const l={wbg:{}};l.wbg.__wbg_new_693216e109162396=function(){return function(e){i===o.length&&o.push(o.length+1);const t=i;return i=o[t],o[t]=e,t}(new Error)},l.wbg.__wbg_stack_0ddaca5d1abfb52f=function(e,t){var n=h(s(t).stack,r.__wbindgen_malloc,r.__wbindgen_realloc),o=a;g()[e/4+1]=o,g()[e/4+0]=n},l.wbg.__wbg_error_09919627ac0992f5=function(e,t){try{console.error(m(e,t))}finally{r.__wbindgen_free(e,t)}},l.wbg.__wbindgen_object_drop_ref=function(e){!function(e){const t=s(e);(function(e){e<36||(o[e]=i,i=e)})(e)}(e)},("string"==typeof t||"function"==typeof Request&&t instanceof Request||"function"==typeof URL&&t instanceof URL)&&(t=fetch(t));const{instance:u,module:c}=await async function(e,t){if("function"==typeof Response&&e instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if("application/wasm"==e.headers.get("Content-Type"))throw t;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",t)}const n=await e.arrayBuffer();return await WebAssembly.instantiate(n,t)}{const n=await WebAssembly.instantiate(e,t);return n instanceof WebAssembly.Instance?{instance:n,module:e}:n}}(await t,l);return r=u.exports,e.__wbindgen_wasm_module=c,r}},914:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateOverriddenConfig=t.defaultConfig=void 0;var r=n(445),o=n(466);t.defaultConfig={showProgress:!0,printIndexInfo:!1,showScores:!1,showCloseButton:!0,minimumQueryLength:3,forceOverwrite:!1,resultNoun:{singular:"file",plural:"files"},onQueryUpdate:void 0,onResultSelected:void 0,onResultsHidden:void 0,onInputCleared:void 0,transformResultUrl:function(e){return e}},t.calculateOverriddenConfig=function(e){var n=(0,o.difference)(Object.keys(e),Object.keys(t.defaultConfig));if(n.length>0){var s=(0,o.plural)(n.length,"key","keys"),i=JSON.stringify(n);return new r.default("Invalid ".concat(s," in config object: ").concat(i))}for(var a=Object.assign({},t.defaultConfig),l=0,u=Object.keys(t.defaultConfig);l{Object.defineProperty(t,"__esModule",{value:!0}),t.existsBeyondContainerBounds=t.setText=t.clear=t.add=t.create=void 0,t.create=function(e,t){var n=document.createElement(e);return t.classNames&&n.setAttribute("class",t.classNames.join(" ")),n},t.add=function(e,t,n){n.insertAdjacentElement(t,e)},t.clear=function(e){for(;e&&e.firstChild;)e.removeChild(e.firstChild)},t.setText=function(e,t){var n=document.createTextNode(t);e&&e.firstChild?e.replaceChild(n,e.firstChild):e&&e.appendChild(n)},t.existsBeyondContainerBounds=function(e,t){var n=e.getBoundingClientRect(),r=t.getBoundingClientRect();return n.bottom>r.bottom||n.top{Object.defineProperty(t,"__esModule",{value:!0}),t.Entity=void 0;var r=n(139),o=n(771),s=n(214),i=n(445),a=function(){function e(e,t,n){var r=this;this._state="initialized",this.downloadProgress=0,this.results=[],this.totalResultCount=0,this.eventListenerFunctions={},this.highlightedResult=0,this.resultsVisible=!1,this.hoverSelectEnabled=!0,this.setDownloadProgress=function(e){r.state="loading",r.downloadProgress=e,r.config.showProgress&&r.render()},this.name=e,this.url=t,this.config=n}return Object.defineProperty(e.prototype,"state",{get:function(){return this._state},set:function(e){this._state=e,this.render()},enumerable:!1,configurable:!0}),e.prototype.getCurrentMessage=function(){if(!this.domManager)return null;var e=this.domManager.getQuery();return"error"===this.state?"Error! Check the browser console.":"ready"!=this.state?"Loading...":(null==e?void 0:e.length){Object.defineProperty(t,"__esModule",{value:!0}),t.EntityDom=void 0;var r=n(227),o=n(9),s={results:[],resultsVisible:!1,showScores:!1,message:null,showProgress:!1,progress:1,state:"ready"},i=function(){function e(e,t){var n,o,i=this;this.scrollAnchorPoint="end",this.entity=t;var a=[{selector:'input[data-stork="'.concat(e,'"]'),elementName:"input"},{selector:'div[data-stork="'.concat(e,'-output"]'),elementName:"output"}].map((function(t){var n=document.querySelector(t.selector);if(!n)throw new Error('Could not register search box "'.concat(e,'": ').concat(t.elementName," element not found. Make sure an element matches the query selector `").concat(t.selector,"`"));return n})),l=a[0],u=a[1];this.elements={input:l,output:u,list:(0,r.create)("ul",{classNames:["stork-results"]}),attribution:(0,r.create)("div",{classNames:["stork-attribution"]}),progress:(0,r.create)("div",{classNames:["stork-progress"]}),message:(0,r.create)("div",{classNames:["stork-message"]}),closeButton:(0,r.create)("button",{classNames:["stork-close-button"]})},this.elements.input.removeEventListener("input",this.entity.eventListenerFunctions.inputInputEvent),this.elements.input.removeEventListener("keydown",this.entity.eventListenerFunctions.inputKeydownEvent),this.entity.eventListenerFunctions={inputInputEvent:function(e){i.handleInputEvent(e)},inputKeydownEvent:function(e){i.handleKeyDownEvent(e)}},this.elements.input.addEventListener("input",this.entity.eventListenerFunctions.inputInputEvent),this.elements.input.addEventListener("keydown",this.entity.eventListenerFunctions.inputKeydownEvent),null===(n=this.elements.list)||void 0===n||n.addEventListener("mousemove",(function(){i.hoverSelectEnabled=!0})),this.elements.attribution.innerHTML='Powered by Stork',this.elements.closeButton.innerHTML='\n\n\n\n\n\n\n\n',this.entity.config.showProgress&&(0,r.add)(this.elements.progress,"afterend",this.elements.input),null===(o=this.elements.closeButton)||void 0===o||o.addEventListener("click",(function(){i.elements.input.value="",i.elements.input.focus(),i.render(s);var e=[i.entity.config.onInputCleared,i.entity.config.onResultsHidden],t=e[0],n=e[1];t&&t(),n&&n()}))}return e.prototype.clearDom=function(){var e;(0,r.clear)(this.elements.output),(0,r.clear)(this.elements.list),null===(e=this.elements.closeButton)||void 0===e||e.remove(),this.elements.output.classList.remove("stork-output-visible")},e.prototype.render=function(e){var t,n=this,s=this.elements.input.value;if(this.clearDom(),this.lastRenderState=e,e.showProgress){var i=function(){switch(e.state){case"ready":case"error":return 1;case"initialized":case"loading":return.9*e.progress+.05}}();i<1?(this.elements.progress.style.width="".concat(100*i,"%"),this.elements.progress.style.opacity="1"):(this.elements.progress.style.width="100%",this.elements.progress.style.opacity="0")}if("error"===e.state&&this.elements.input.classList.add("stork-error"),this.getQuery().length>0&&e.resultsVisible&&(this.elements.output.classList.add("stork-output-visible"),(0,r.add)(this.elements.message,"beforeend",this.elements.output)),e.message&&(0,r.setText)(this.elements.message,e.message),(null===(t=e.results)||void 0===t?void 0:t.length)>0&&e.resultsVisible){(0,r.add)(this.elements.list,"beforeend",this.elements.output);for(var a=function(t){var s=e.results[t],i={selected:t===l.highlightedResult,showScores:e.showScores},a=(0,o.resultToListItem)(s,i);(0,r.add)(a,"beforeend",l.elements.list),a.addEventListener("mousemove",(function(){n.hoverSelectEnabled&&t!==n.highlightedResult&&n.changeHighlightedResult({to:t,shouldScrollTo:!1})})),a.addEventListener("mouseleave",(function(){n.hoverSelectEnabled&&t===n.highlightedResult&&n.changeHighlightedResult({to:-1,shouldScrollTo:!1})})),a.addEventListener("click",(function(e){e.preventDefault(),n.selectResult()}))},l=this,u=0;u0&&this.entity.config.showCloseButton&&(0,r.add)(this.elements.closeButton,"afterend",this.elements.input)},e.prototype.selectResult=function(){if(null!=this.highlightedResult){var e=this.entity.results[this.highlightedResult];this.entity.config.onResultSelected?Promise.resolve(this.entity.config.onResultSelected(this.getQuery(),e)).finally((function(){window.location.assign(e.entry.url)})):window.location.assign(e.entry.url)}},e.prototype.changeHighlightedResult=function(e){var t,n=this.highlightedResult,o=Math.max(-1,Math.min(this.entity.results.length-1,e.to));this.highlightedResult=o,this.scrollAnchorPoint=(n||0)0){var n;this.elements.input.value="",this.render(s),(n=this.entity.config.onInputCleared)&&n()}break;default:return}},e.prototype.handleInputEvent=function(e){this.entity.performSearch(e.target.value)},e.prototype.getQuery=function(){return this.elements.input.value},e}();t.EntityDom=i},129:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{Object.defineProperty(t,"__esModule",{value:!0}),t.loadIndexFromUrl=void 0,t.loadIndexFromUrl=function(e,t){var n=new XMLHttpRequest;n.addEventListener("load",(function(e){var n=e.target,r=n.status,o=n.response;0!==r?r<200||r>299?t.error():t.load(o):t.progress(e.loaded/e.total)})),n.addEventListener("error",(function(){t.error()})),n.addEventListener("progress",(function(e){t.progress(e.loaded/e.total)})),n.responseType="arraybuffer",n.open("GET",e),n.send()}},480:function(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{Object.defineProperty(t,"__esModule",{value:!0}),t.highlight=void 0,t.highlight=function(e,t){function n(e,t,n){return e.substr(0,t)+n+e.substr(t)}for(var r=0,o=0,s=t;o',l="";e=n(e,i.beginning+r,a),r+=a.length,e=n(e,i.end+r,l),r+=l.length}return e}},9:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.resultToListItem=void 0;var r=n(112);t.resultToListItem=function(e,t){var n=document.createElement("template");return n.innerHTML='\n
  • \n \n
    \n

    ').concat((0,r.highlight)(e.entry.title,e.title_highlight_ranges||[]),"

    \n ").concat(t.showScores?"".concat(e.score,""):"","\n
    \n ").concat(e.excerpts.length>0?'
    ':"","\n ").concat(e.excerpts.map((function(e){return'

    \n ...'.concat((0,r.highlight)(e.text,e.highlight_ranges||[]),"...\n

    \n ").concat(t.showScores?"".concat(e.score,""):"","\n
    ")})).join(""),"\n ").concat(e.excerpts.length>0?"
    ":"","\n
    \n
  • "),n.content.firstElementChild}},139:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.resolveSearch=void 0;var r=n(214),o=n(445);t.resolveSearch=function(e,t){var n=null,s=null;try{n=(0,r.wasm_search)(e,t),s=JSON.parse(n)}catch(e){throw new o.default("Could not parse data from wasm_search. If you see this, please file a bug: https://jil.im/storkbug "+n)}if(!s)throw new o.default("Data was an empty object");if(s.error)throw new o.default("Could not perform search: the WASM binary failed to return search results.\n You might not be serving your search index properly.\n If you think this is an error, please file a bug: https://jil.im/storkbug\n \n The WASM binary came back with:\n ".concat(s.error));return s}},445:function(e,t){var n,r=this&&this.__extends||(n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},n(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){var n=e.call(this,t)||this;return n.name="StorkError",n}return r(t,e),t}(Error);t.default=o},466:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.plural=t.difference=t.htmlToElement=void 0,t.htmlToElement=function(e){var t=document.createElement("template");return e=e.trim(),t.innerHTML=e,t.content.firstChild},t.difference=function(e,t){var n=new Set(e),r=new Set(t),o=new Set(Array.from(n).filter((function(e){return!r.has(e)})));return Array.from(o)},t.plural=function(e,t,n){return 1==e?t:n}},34:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.validateIndexParams=void 0;var r=n(445);t.validateIndexParams=function(e,t){return"string"!=typeof e?new r.default("Index registration name must be a string."):"string"!=typeof t?new r.default("URL must be a string."):null}},258:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.debug=t.loadWasm=t.runAfterWasmLoaded=void 0;var r=n(214),o=n(445),s="https://files.stork-search.net/releases/v".concat("1.5.0","/stork.wasm"),i=null,a=null,l=[],u=[];t.loadWasm=function(e){if(void 0===e&&(e=null),a)return a;var t=e||s;i=t;var n=(0,r.default)(t).then((function(){return c(),t})).catch((function(){throw d(),new o.default("Error while loading WASM at ".concat(t))}));return a=n,n},t.runAfterWasmLoaded=function(e,t){return a?(a.then((function(){return e()})).catch((function(){return t()})),a):(l.push(e),u.push(t),null)};var c=function(){l.forEach((function(e){e()})),l=[]},d=function(){u.forEach((function(e){e()})),u=[]};t.debug=function(){return{wasmSourceUrl:i,wasmLoadPromise:a,queueLength:l.length}}}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={exports:{}};return e[r].call(s.exports,s,s.exports,n),s.exports}n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;n.g.importScripts&&(e=n.g.location+"");var t=n.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");r.length&&(e=r[r.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})();var r=n(480);stork=r})(); +//# sourceMappingURL=stork.js.map \ No newline at end of file diff --git a/static/js/stork.js.map b/static/js/stork.js.map new file mode 100644 index 0000000..8febdbc --- /dev/null +++ b/static/js/stork.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stork.js","mappings":"kDAmBA,IAAIA,E,mGAEJ,MAAMC,EAAO,IAAIC,MAAM,IAAIC,UAAKC,GAIhC,SAASC,EAAUC,GAAO,OAAOL,EAAKK,GAFtCL,EAAKM,UAAKH,EAAW,MAAM,GAAM,GAIjC,IAAII,EAAYP,EAAKQ,OAcrB,IAAIC,EAAkB,EAElBC,EAAuB,KAC3B,SAASC,IAIL,OAH6B,OAAzBD,GAAiCA,EAAqBE,SAAWb,EAAKc,OAAOD,SAC7EF,EAAuB,IAAII,WAAWf,EAAKc,OAAOD,SAE/CF,EAGX,IAAIK,EAAoB,IAAIC,YAAY,SAExC,MAAMC,EAAwD,mBAAjCF,EAAkBG,WACzC,SAAUC,EAAKC,GACjB,OAAOL,EAAkBG,WAAWC,EAAKC,IAEvC,SAAUD,EAAKC,GACjB,MAAMC,EAAMN,EAAkBO,OAAOH,GAErC,OADAC,EAAKG,IAAIF,GACF,CACHG,KAAML,EAAIX,OACViB,QAASJ,EAAIb,SAIrB,SAASkB,EAAkBP,EAAKQ,EAAQC,GAEpC,QAAgBzB,IAAZyB,EAAuB,CACvB,MAAMP,EAAMN,EAAkBO,OAAOH,GAC/BU,EAAMF,EAAON,EAAIb,QAGvB,OAFAG,IAAkBmB,SAASD,EAAKA,EAAMR,EAAIb,QAAQe,IAAIF,GACtDZ,EAAkBY,EAAIb,OACfqB,EAGX,IAAIE,EAAMZ,EAAIX,OACVqB,EAAMF,EAAOI,GAEjB,MAAMC,EAAMrB,IAEZ,IAAIsB,EAAS,EAEb,KAAOA,EAASF,EAAKE,IAAU,CAC3B,MAAMC,EAAOf,EAAIgB,WAAWF,GAC5B,GAAIC,EAAO,IAAM,MACjBF,EAAIH,EAAMI,GAAUC,EAGxB,GAAID,IAAWF,EAAK,CACD,IAAXE,IACAd,EAAMA,EAAIiB,MAAMH,IAEpBJ,EAAMD,EAAQC,EAAKE,EAAKA,EAAME,EAAsB,EAAbd,EAAIX,QAC3C,MAAMY,EAAOT,IAAkBmB,SAASD,EAAMI,EAAQJ,EAAME,GAG5DE,GAFYhB,EAAaE,EAAKC,GAEhBK,QAIlB,OADAhB,EAAkBwB,EACXJ,EAUX,IAAIQ,EAAuB,KAC3B,SAASC,IAIL,OAH6B,OAAzBD,GAAiCA,EAAqBzB,SAAWb,EAAKc,OAAOD,SAC7EyB,EAAuB,IAAIE,WAAWxC,EAAKc,OAAOD,SAE/CyB,EAGX,IAAIG,EAAoB,IAAIC,YAAY,QAAS,CAAEC,WAAW,EAAMC,OAAO,IAI3E,SAASC,EAAmBf,EAAKE,GAC7B,OAAOS,EAAkBK,OAAOlC,IAAkBmB,SAASD,EAAKA,EAAME,IAOnE,SAASe,EAAoBC,EAAMC,GACtC,IACI,MAAMC,EAASlD,EAAKmD,iCAAiC,IACrD,IAAIC,EAAOzB,EAAkBqB,EAAMhD,EAAKqD,kBAAmBrD,EAAKsD,oBAC5DC,EAAO7C,EACP8C,EAhCZ,SAA2BpC,EAAKQ,GAC5B,MAAME,EAAMF,EAAoB,EAAbR,EAAIX,QAGvB,OAFAG,IAAkBY,IAAIJ,EAAKU,EAAM,GACjCpB,EAAkBU,EAAIX,OACfqB,EA4BQ2B,CAAkBR,EAAMjD,EAAKqD,mBACpCK,EAAOhD,EACXV,EAAK+C,oBAAoBG,EAAQE,EAAMG,EAAMC,EAAME,GACnD,IAAIC,EAAKpB,IAAkBW,EAAS,EAAI,GACpCU,EAAKrB,IAAkBW,EAAS,EAAI,GACxC,OAAOL,EAAmBc,EAAIC,GAChC,QACE5D,EAAKmD,gCAAgC,IACrCnD,EAAK6D,gBAAgBF,EAAIC,IAS1B,SAASE,EAAYd,EAAMe,GAC9B,IACI,MAAMb,EAASlD,EAAKmD,iCAAiC,IACrD,IAAIC,EAAOzB,EAAkBqB,EAAMhD,EAAKqD,kBAAmBrD,EAAKsD,oBAC5DC,EAAO7C,EACP8C,EAAO7B,EAAkBoC,EAAO/D,EAAKqD,kBAAmBrD,EAAKsD,oBAC7DI,EAAOhD,EACXV,EAAK8D,YAAYZ,EAAQE,EAAMG,EAAMC,EAAME,GAC3C,IAAIC,EAAKpB,IAAkBW,EAAS,EAAI,GACpCU,EAAKrB,IAAkBW,EAAS,EAAI,GACxC,OAAOL,EAAmBc,EAAIC,GAChC,QACE5D,EAAKmD,gCAAgC,IACrCnD,EAAK6D,gBAAgBF,EAAIC,IAO1B,SAASI,IACZ,IACI,MAAMd,EAASlD,EAAKmD,iCAAiC,IACrDnD,EAAKgE,mBAAmBd,GACxB,IAAIS,EAAKpB,IAAkBW,EAAS,EAAI,GACpCU,EAAKrB,IAAkBW,EAAS,EAAI,GACxC,OAAOL,EAAmBc,EAAIC,GAChC,QACE5D,EAAKmD,gCAAgC,IACrCnD,EAAK6D,gBAAgBF,EAAIC,IA7DjCnB,EAAkBK,SAmJlB,QA1CAmB,eAAeC,EAAKC,QACK,IAAVA,IACPA,EAAQ,IAAIC,IAAI,gBAnOlB,SAAwBC,GACtB,MAAMC,EAAa,IAEnB,IAAIC,EAAM,GAYV,QAVKD,GAAcA,EAAWE,QAAQ,OAAS,KAC7CD,GAAOE,OAAOC,SAASC,SAAW,KAAOF,OAAOC,SAASE,MAIzDL,GADED,GAGK,IAGFC,EAAMF,EAoN4BQ,CAAe,wCAE5D,MAAMC,EAAU,CAChBA,IAAc,IACdA,EAAQC,IAAIC,2BAA6B,WAErC,OAhDR,SAAuBC,GACfzE,IAAcP,EAAKQ,QAAQR,EAAKM,KAAKN,EAAKQ,OAAS,GACvD,MAAMH,EAAME,EAIZ,OAHAA,EAAYP,EAAKK,GAEjBL,EAAKK,GAAO2E,EACL3E,EA0CI4E,CADG,IAAIC,QAGlBL,EAAQC,IAAIK,6BAA+B,SAASC,EAAMC,GACtD,IACIlC,EAAOzB,EADDtB,EAAUiF,GAAMC,MACQvF,EAAKqD,kBAAmBrD,EAAKsD,oBAC3DC,EAAO7C,EACX6B,IAAkB8C,EAAO,EAAI,GAAK9B,EAClChB,IAAkB8C,EAAO,EAAI,GAAKjC,GAEtC0B,EAAQC,IAAIS,6BAA+B,SAASH,EAAMC,GACtD,IACIG,QAAQC,MAAM7C,EAAmBwC,EAAMC,IACzC,QACEtF,EAAK6D,gBAAgBwB,EAAMC,KAGnCR,EAAQC,IAAIY,2BAA6B,SAASN,IAvNtD,SAAoB/E,GAChB,MAAMsF,EAAMvF,EAAUC,IAP1B,SAAoBA,GACZA,EAAM,KACVL,EAAKK,GAAOE,EACZA,EAAYF,IAKZuF,CAAWvF,GAsNPwF,CAAWT,KAGM,iBAAVlB,GAA0C,mBAAZ4B,SAA0B5B,aAAiB4B,SAA4B,mBAAR3B,KAAsBD,aAAiBC,OAC3ID,EAAQ6B,MAAM7B,IAKlB,MAAM,SAAE8B,EAAQ,OAAEC,SAjEtBjC,eAAoBiC,EAAQpB,GACxB,GAAwB,mBAAbqB,UAA2BD,aAAkBC,SAAU,CAC9D,GAAgD,mBAArCC,YAAYC,qBACnB,IACI,aAAaD,YAAYC,qBAAqBH,EAAQpB,GAExD,MAAOwB,GACL,GAA0C,oBAAtCJ,EAAOK,QAAQC,IAAI,gBAInB,MAAMF,EAHNb,QAAQgB,KAAK,oMAAqMH,GAQ9N,MAAMI,QAAcR,EAAOS,cAC3B,aAAaP,YAAYQ,YAAYF,EAAO5B,GAEzC,CACH,MAAMmB,QAAiBG,YAAYQ,YAAYV,EAAQpB,GAEvD,OAAImB,aAAoBG,YAAYS,SACzB,CAAEZ,SAAAA,EAAUC,OAAAA,GAGZD,GAuCoBa,OAAW3C,EAAOW,GAKrD,OAHA9E,EAAOiG,EAASc,QAChB7C,EAAK8C,uBAAyBd,EAEvBlG,I,kHCzQX,aACA,SAiBa,EAAAiH,cAAyC,CACpDC,cAAc,EACdC,gBAAgB,EAChBC,YAAY,EACZC,iBAAiB,EACjBC,mBAAoB,EACpBC,gBAAgB,EAChBC,WAAY,CAAEC,SAAU,OAAQC,OAAQ,SACxCC,mBAAevH,EACfwH,sBAAkBxH,EAClByH,qBAAiBzH,EACjB0H,oBAAgB1H,EAChB2H,mBAAoB,SAAAxD,GAAO,OAAAA,IAG7B,qCACEyD,GAEA,IAAMC,GAAgB,IAAAC,YACpBC,OAAOC,KAAKJ,GACZG,OAAOC,KAAK,EAAAnB,gBAGd,GAAIgB,EAAcxH,OAAS,EAAG,CAC5B,IAAM2H,GAAO,IAAAV,QAAOO,EAAcxH,OAAQ,MAAO,QAC3C4H,EAAcC,KAAKC,UAAUN,GACnC,OAAO,IAAI,UAAW,kBAAWG,EAAI,8BAAsBC,IAK7D,IAFA,IAAMG,EAAwBL,OAAOM,OAAO,GAAI,EAAAxB,eAE9B,MAAAkB,OAAOC,KAAK,EAAAnB,eAAZ,eAA0D,CAAvE,IAAMyB,EAAG,KACNC,EAAcX,EAAUU,QACVtI,IAAhBuI,IAGFH,EAAOE,GAAOC,GAIlB,OAAOH,I,mIC1DT,kBACExF,EACA4F,GAEA,IAAMC,EAAOC,SAASC,cAAc/F,GAIpC,OAHI4F,EAAWI,YACbH,EAAKI,aAAa,QAASL,EAAWI,WAAWE,KAAK,MAEjDL,GAGT,eACEA,EACAnE,EACAyE,GAEAA,EAAUC,sBAAsB1E,EAAUmE,IAG5C,iBAAsBA,GACpB,KAAOA,GAAQA,EAAKQ,YAClBR,EAAKS,YAAYT,EAAKQ,aAI1B,mBAAwBR,EAA0BU,GAChD,IAAMC,EAAWV,SAASW,eAAeF,GACrCV,GAAQA,EAAKQ,WACfR,EAAKa,aAAaF,EAAUX,EAAKQ,YACxBR,GACTA,EAAKc,YAAYH,IAIrB,uCACEX,EACAe,GAEA,IAAMC,EAAkBhB,EAAKiB,wBACvBC,EAAuBH,EAAUE,wBAEvC,OACED,EAAgBG,OAASD,EAAqBC,QAC9CH,EAAgBI,IAAMF,EAAqBE,M,+EC1C/C,aACA,SACA,SACA,SAIA,aAmBE,WAAYjH,EAAcuB,EAAa2F,GAAvC,WAdQ,KAAAC,OAAsB,cAE9B,KAAAC,iBAAmB,EAGnB,KAAAC,QAAyB,GACzB,KAAAC,iBAAmB,EAGnB,KAAAC,uBAA6D,GAC7D,KAAAC,kBAAoB,EACpB,KAAAC,gBAAiB,EACjB,KAAAC,oBAAqB,EA+HrB,KAAAC,oBAAsB,SAACC,GACrB,EAAKC,MAAQ,UACb,EAAKT,iBAAmBQ,EACpB,EAAKV,OAAOhD,cACd,EAAK4D,UAhIPC,KAAK/H,KAAOA,EACZ+H,KAAKxG,IAAMA,EACXwG,KAAKb,OAASA,EA+JlB,OA5JE,sBAAW,oBAAK,C,IAAhB,WACE,OAAOa,KAAKZ,Q,IAGd,SAAiBa,GACfD,KAAKZ,OAASa,EACdD,KAAKD,U,gCAGC,YAAAG,kBAAR,WACE,IAAKF,KAAKG,WAAY,OAAO,KAC7B,IAAMnH,EAAQgH,KAAKG,WAAWC,WAC9B,MAAmB,UAAfJ,KAAKF,MACA,oCACgB,SAAdE,KAAKF,MACP,cACE9G,MAAAA,OAAK,EAALA,EAAOtD,QAASsK,KAAKb,OAAO5C,mBAC9B,eACEyD,KAAKV,QACgB,IAA1BU,KAAKT,iBACA,aAAMS,KAAKb,OAAO1C,WAAWE,OAAM,WACP,IAA1BqD,KAAKT,iBACP,YAAKS,KAAKb,OAAO1C,WAAWC,SAAQ,WAEpC,UAAGsD,KAAKT,iBAAgB,YAAIS,KAAKb,OAAO1C,WAAWE,OAAM,WAI7D,MAGD,YAAA0D,qBAAR,WACE,MAAO,CACLf,QAASU,KAAKV,QACdI,gBAAgB,EAChBrD,WAAY2D,KAAKb,OAAO9C,WACxBiE,QAASN,KAAKE,oBACd/D,aAAc6D,KAAKb,OAAOhD,aAC1BoE,SAAUP,KAAKX,iBACfS,MAAOE,KAAKF,QAIR,YAAAC,OAAR,WACOC,KAAKG,YACVH,KAAKG,WAAWJ,OAAOC,KAAKK,yBAG9B,YAAAG,cAAA,SAActI,GAAd,WACE,OAAO,IAAIuI,SAAQ,SAACC,EAASC,GAC3B,IAAMC,EAAYrD,KAAKsD,OAAM,IAAA7I,qBAAoB,EAAKC,KAAMC,IACxD0I,EAAUjG,MACZgG,EAAO,IAAI,UAAWC,EAAUjG,SAE5B,EAAKwE,OAAO/C,gBACd1B,QAAQoG,IAAIF,GAGd,EAAKd,MAAQ,QACbY,EAAQE,QAKd,YAAAG,YAAA,WACEf,KAAKG,WAAa,IAAI,EAAAa,UAAUhB,KAAK/H,KAAM+H,MAC3CA,KAAKD,UAGP,YAAAkB,iBAAA,SAAiB/I,GAAjB,WACE8H,KAAKV,QAAUpH,EAAKoH,QACpBU,KAAKT,iBAAmBrH,EAAKgJ,gBAC7BlB,KAAKP,kBAAoB,EAGzB,IAAM0B,EAAYjJ,EAAKkJ,YAAc,GACrCpB,KAAKV,QAAQ+B,KAAI,SAAAC,GACf,IAAIC,EAAY,GAEVC,EAA2BF,EAAEG,SAChCJ,KAAI,SAAA9F,GAAK,OAAAA,EAAEmG,wBACXC,QAAO,SAAAC,GAAM,QAAEA,KAAI,GAEtB,GAAIJ,GAA4BA,EAAyB,GAAI,CAC3D,IAAMK,EAAgBL,EAAyB,GACb,iBAAvBK,EAAiB,IAC1BN,GAAaM,EAAiB,GAMhCP,EAAEG,UACFH,EAAEG,SAAS,IACXH,EAAEG,SAAS,GAAGC,sBACdJ,EAAEG,SAAS,GAAGC,qBAAqB,IACnCJ,EAAEG,SAAS,GAAGC,qBAAqB,GAAM,GACa,iBAA/CJ,EAAEG,SAAS,GAAGC,qBAAqB,GAAM,IAEhDH,EAAYD,EAAEG,SAAS,GAAGC,qBAAqB,GAAM,GAEvDJ,EAAEQ,MAAMtI,IAAM,EAAK2F,OAAOnC,mBAAmB,UAAGmE,GAAS,OAAGG,EAAEQ,MAAMtI,KAAG,OAAG+H,OAG5EvB,KAAKD,UAGC,YAAAgC,oBAAR,WACE,IAAMzC,EAAUU,KAAKV,QAQrB,OAPAA,EAAQ+B,KAAI,SAAAW,UACHA,EAAOC,uBACdD,EAAOP,SAASJ,KAAI,SAAAa,UACXA,EAAQC,wBACRD,EAAQR,2BAGZpC,GAWT,YAAA8C,iBAAA,WACEpC,KAAKF,MAAQ,SAGf,YAAAuC,cAAA,SAAcrJ,GACZ,GAAmB,UAAfgH,KAAKF,MAAT,CAKA,GAAI9G,EAAMtD,OAASsK,KAAKb,OAAO5C,mBAG7B,OAFAyD,KAAKV,QAAU,QACfU,KAAKD,SAIP,IACE,IAAM7H,GAAO,IAAAoK,eAActC,KAAK/H,KAAMe,GACtC,IAAKd,EAAM,OAEX8H,KAAKiB,iBAAiB/I,GAElB8H,KAAKb,OAAOvC,eACdoD,KAAKb,OAAOvC,cAAc5D,EAAOgH,KAAK+B,uBAExC,MAAOpH,GACPD,QAAQC,MAAMA,SApBdqF,KAAKD,UAuBX,EArLA,GAAa,EAAAwC,OAAAA,G,kFCNb,aAQA,OAsBMC,EAA0C,CAC9ClD,QAAS,GACTI,gBAAgB,EAChBrD,YAAY,EACZiE,QAAS,KACTnE,cAAc,EACdoE,SAAU,EACVT,MAAO,SAGT,aAUE,WAAY7H,EAAcwK,GAA1B,I,IAAA,OAFA,KAAAC,kBAAqC,MAGnC1C,KAAKyC,OAASA,EAEd,IAWM,EAXO,CACX,CACEE,SAAU,4BAAqB1K,EAAI,MACnC2K,YAAa,SAEf,CACED,SAAU,0BAAmB1K,EAAI,aACjC2K,YAAa,WAIYvB,KAAI,SAAAwB,GAC/B,IAAMC,EAAU/E,SAASgF,cAAcF,EAAEF,UACzC,IAAKG,EACH,MAAM,IAAI1I,MACR,yCAAkCnC,EAAI,cAAM4K,EAAED,YAAW,gFAAyEC,EAAEF,SAAQ,MAIhJ,OAAOG,KARF1J,EAAK,KAAEqE,EAAM,KAWpBuC,KAAKgD,SAAW,CACd5J,MAAOA,EACPqE,OAAQA,EACRwF,MAAM,IAAAC,QAAO,KAAM,CAAEjF,WAAY,CAAC,mBAClCkF,aAAa,IAAAD,QAAO,MAAO,CACzBjF,WAAY,CAAC,uBAEfsC,UAAU,IAAA2C,QAAO,MAAO,CAAEjF,WAAY,CAAC,oBACvCqC,SAAS,IAAA4C,QAAO,MAAO,CAAEjF,WAAY,CAAC,mBACtCmF,aAAa,IAAAF,QAAO,SAAU,CAC5BjF,WAAY,CAAC,yBAOjB+B,KAAKgD,SAAS5J,MAAMiK,oBAClB,QACArD,KAAKyC,OAAOjD,uBAAuB8D,iBAGrCtD,KAAKgD,SAAS5J,MAAMiK,oBAClB,UACArD,KAAKyC,OAAOjD,uBAAuB+D,mBAMrCvD,KAAKyC,OAAOjD,uBAAyB,CACnC8D,gBAAiB,SAAC/H,GAChB,EAAKiI,iBAAiBjI,IAGxBgI,kBAAmB,SAAChI,GAClB,EAAKkI,mBAAmBlI,KAK5ByE,KAAKgD,SAAS5J,MAAMsK,iBAClB,QACA1D,KAAKyC,OAAOjD,uBAAuB8D,iBAGrCtD,KAAKgD,SAAS5J,MAAMsK,iBAClB,UACA1D,KAAKyC,OAAOjD,uBAAuB+D,mBAKnB,QAAlB,EAAAvD,KAAKgD,SAASC,YAAI,SAAES,iBAAiB,aAAa,WAChD,EAAK/D,oBAAqB,KAG5BK,KAAKgD,SAASG,YAAYQ,UACxB,0DAEF3D,KAAKgD,SAASI,YAAYO,UAAY,sZAUlC3D,KAAKyC,OAAOtD,OAAOhD,eACrB,IAAAyH,KAAI5D,KAAKgD,SAASzC,SAAU,WAAYP,KAAKgD,SAAS5J,OAG/B,QAAzB,EAAA4G,KAAKgD,SAASI,mBAAW,SAAEM,iBAAiB,SAAS,WACnD,EAAKV,SAAS5J,MAAM6G,MAAQ,GAC5B,EAAK+C,SAAS5J,MAAMyK,QACpB,EAAK9D,OAAOyC,GACN,MAAS,CACb,EAAKC,OAAOtD,OAAOpC,eACnB,EAAK0F,OAAOtD,OAAOrC,iBAFdgH,EAAC,KAAEC,EAAC,KAIXD,GAAIA,IACJC,GAAIA,OA8NV,OA1NU,YAAAC,SAAR,W,OACE,IAAAC,OAAMjE,KAAKgD,SAASvF,SACpB,IAAAwG,OAAMjE,KAAKgD,SAASC,MACK,QAAzB,EAAAjD,KAAKgD,SAASI,mBAAW,SAAEc,SAC3BlE,KAAKgD,SAASvF,OAAO0G,UAAUD,OAAO,yBAGxC,YAAAnE,OAAA,SAAOD,GAAP,I,EAAA,OACQ9G,EAASgH,KAAKgD,SAAS5J,MAA2B6G,MAIxD,GAHAD,KAAKgE,WACLhE,KAAKoE,gBAAkBtE,EAEnBA,EAAM3D,aAAc,CACtB,IAWMoE,EAXkB,WACtB,OAAQT,EAAMA,OACZ,IAAK,QACL,IAAK,QACH,OAAO,EACT,IAAK,cACL,IAAK,UACH,MAAwB,GAAjBA,EAAMS,SAAiB,KAInB8D,GAEb9D,EAAW,GACbP,KAAKgD,SAASzC,SAAS+D,MAAMC,MAAQ,UAAc,IAAXhE,EAAc,KACtDP,KAAKgD,SAASzC,SAAS+D,MAAME,QAAU,MAEvCxE,KAAKgD,SAASzC,SAAS+D,MAAMC,MAAQ,OACrCvE,KAAKgD,SAASzC,SAAS+D,MAAME,QAAU,KAiB3C,GAboB,UAAhB1E,EAAMA,OACRE,KAAKgD,SAAS5J,MAAM+K,UAAUP,IAAI,eAGhC5D,KAAKI,WAAW1K,OAAS,GAAKoK,EAAMJ,iBACtCM,KAAKgD,SAASvF,OAAO0G,UAAUP,IAAI,yBACnC,IAAAA,KAAI5D,KAAKgD,SAAS1C,QAAS,YAAaN,KAAKgD,SAASvF,SAGpDqC,EAAMQ,UACR,IAAAmE,SAAQzE,KAAKgD,SAAS1C,QAASR,EAAMQ,UAGtB,QAAb,EAAAR,EAAMR,eAAO,eAAE5J,QAAS,GAAKoK,EAAMJ,eAAgB,EACrD,IAAAkE,KAAI5D,KAAKgD,SAASC,KAAM,YAAajD,KAAKgD,SAASvF,QAEnD,I,eAASiH,GACP,IAAM1C,EAASlC,EAAMR,QAAQoF,GACvBC,EAA0C,CAC9CC,SAAUF,IAAM,EAAKjF,kBACrBpD,WAAYyD,EAAMzD,YAGdwI,GAAW,IAAAC,kBAAiB9C,EAAQ2C,IAC1C,IAAAf,KAAIiB,EAAyB,YAAa,EAAK7B,SAASC,MAExD4B,EAASnB,iBAAiB,aAAa,WACjC,EAAK/D,oBACH+E,IAAM,EAAKjF,mBACb,EAAKsF,wBAAwB,CAAEC,GAAIN,EAAGO,gBAAgB,OAK5DJ,EAASnB,iBAAiB,cAAc,WAClC,EAAK/D,oBACH+E,IAAM,EAAKjF,mBACb,EAAKsF,wBAAwB,CAAEC,IAAK,EAAGC,gBAAgB,OAK7DJ,EAASnB,iBAAiB,SAAS,SAAAnI,GACjCA,EAAE2J,iBACF,EAAKC,mB,OA5BAT,EAAI,EAAGA,EAAI5E,EAAMR,QAAQ5J,OAAQgP,I,EAAjCA,IAgCT,IAAAd,KAAI5D,KAAKgD,SAASG,YAAa,YAAanD,KAAKgD,SAASvF,UAGvDzE,MAAAA,OAAK,EAALA,EAAOtD,SAAU,GAAK,GAAKsK,KAAKyC,OAAOtD,OAAO7C,kBACjD,IAAAsH,KAAI5D,KAAKgD,SAASI,YAAa,WAAYpD,KAAKgD,SAAS5J,QAIrD,YAAA+L,aAAR,WACE,GAA8B,MAA1BnF,KAAKP,kBAA2B,CAClC,IAAM,EAASO,KAAKyC,OAAOnD,QAAQU,KAAKP,mBACpCO,KAAKyC,OAAOtD,OAAOtC,iBACrB4D,QAAQC,QACNV,KAAKyC,OAAOtD,OAAOtC,iBAAiBmD,KAAKI,WAAY,IACrDgF,SAAQ,WACR1L,OAAOC,SAAS+D,OAAO,EAAOoE,MAAMtI,QAGtCE,OAAOC,SAAS+D,OAAO,EAAOoE,MAAMtI,OAK1C,YAAAuL,wBAAA,SAAwBM,G,MAIhBC,EAAgBtF,KAAKP,kBAErB8F,EAAcC,KAAKC,KACtB,EACDD,KAAKE,IAAI1F,KAAKyC,OAAOnD,QAAQ5J,OAAS,EAAG2P,EAAQL,KAGnDhF,KAAKP,kBAAoB8F,EACzBvF,KAAK0C,mBACF4C,GAAiB,GAAKC,EAAc,MAAQ,QAI/C,IAFA,IAAII,EAAoB,KAEfjB,EAAI,EAAGA,EAAI1E,KAAKyC,OAAOnD,QAAQ5J,OAAQgP,IAAK,CACnD,IAAM5B,EAA4B,QAAlB,EAAA9C,KAAKgD,SAASC,YAAI,eAAE2C,SAASlB,GAC7C,GAAK5B,EAAL,CAIA,IAAM+C,EAAuB,WAEzBnB,GAAKa,GACPzC,EAAQqB,UAAUP,IAAIiC,GACtBF,EAAoB7C,GAEpBA,EAAQqB,UAAUD,OAAO2B,IAsB7B,OAlBIR,EAAQJ,iBACVjF,KAAKL,oBAAqB,EACtBgG,IAEA,IAAAG,6BACEH,EACA3F,KAAKgD,SAASC,OAGf0C,EAAkCI,eAAe,CAChDC,SAAU,SACVC,MAAOjG,KAAK0C,kBACZwD,OAAQ,aAMTX,GAGT,YAAA9B,mBAAA,SAAmB0C,GAMjB,OAAQA,EAAMC,SACZ,KALW,GAMT,GAA8B,MAA1BpG,KAAKP,kBACPO,KAAK+E,wBAAwB,CAAEC,GAAI,EAAGC,gBAAgB,QACjD,CACL,IAAMoB,EAASb,KAAKE,IAClB1F,KAAKP,kBAAoB,EACzBO,KAAKyC,OAAOnD,QAAQ5J,OAAS,GAE/BsK,KAAK+E,wBAAwB,CAAEC,GAAIqB,EAAQpB,gBAAgB,IAE7D,MAGF,KAnBS,GAoBuB,MAA1BjF,KAAKP,oBACD4G,EAASb,KAAKC,IAAI,EAAGzF,KAAKP,kBAAoB,GACpDO,KAAK+E,wBAAwB,CAAEC,GAAIqB,EAAQpB,gBAAgB,KAE7D,MAGF,KAzBa,GA0BXjF,KAAKmF,eACL,MAEF,KA5BU,GA6BR,GAAInF,KAAKoE,gBAAgB1E,eACvBM,KAAKD,OAAOyC,IACNsB,EAAI9D,KAAKyC,OAAOtD,OAAOrC,kBACzBgH,SACC,GAAI9D,KAAKgD,SAAS5J,MAAM6G,MAAMvK,OAAS,EAAG,CAG/C,IAAMoO,EAFN9D,KAAKgD,SAAS5J,MAAM6G,MAAQ,GAC5BD,KAAKD,OAAOyC,IACNsB,EAAI9D,KAAKyC,OAAOtD,OAAOpC,iBACzB+G,IAGN,MAEF,QACE,SAIN,YAAAN,iBAAA,SAAiB2C,GACfnG,KAAKyC,OAAOJ,cAAe8D,EAAME,OAA4BpG,QAG/D,YAAAG,SAAA,WACE,OAAQJ,KAAKgD,SAAS5J,MAA2B6G,OAErD,EApVA,GAAa,EAAAe,UAAAA,G,sWC1Cb,aACA,SACA,SACA,SACA,SAEMsF,EAAmC,GAkEhC,EAAAC,SAhEQ,SACftO,EACAuB,EACAgN,GAEA,OAAO,IAAI/F,SAAQ,SAACgG,EAAKC,GACvB,IAAMC,GAAa,IAAAC,2BAA0BJ,GAC7C,GAAIG,aAAsB,UACxBD,EAAIC,OADN,CAKIL,EAASrO,KAAU0O,EAAWnK,gBAChCkK,EACE,IAAI,UACF,6CAAuCzO,EAAI,yIAKjD,IAAMwK,EAAS,IAAI,EAAAF,OAAOtK,EAAMuB,EAAKmN,GACrCL,EAASrO,GAAQwK,GAEjB,IAAAoE,kBAAiBrN,EAAK,CACpB+G,SAAU,SAAAV,GACR4C,EAAO7C,oBAAoBC,IAG7B9D,KAAM,SAAA+K,IACJ,IAAAC,qBACE,WACEtE,EAAOjC,cAAc,IAAIxK,WAAW8Q,IAAWE,KAAKP,GAAKQ,MAAMP,MAEjE,WACEjE,EAAO3C,MAAQ,YAKrBnF,MAAO,WACL8H,EAAOL,mBACPsE,YAuBW,EAAA3F,YAjBC,SAAC9I,GACnB,IAAKqO,EAASrO,GACZ,MAAM,IAAImC,MAAM,gBAASnC,EAAI,8BAG/BqO,EAASrO,GAAM8I,eAYe,EAAAmG,cATV,SAACjP,G,MACrB,MAAiC,WAAZ,QAAd,EAAAqO,EAASrO,UAAK,eAAE6H,QAQsB,EAAAqH,MALjC,WAA+B,OAC3Cb,SAAU,EAAF,GAAOA,GACfc,cAAed,EAAS5Q,U,uFC/D1B,4BACE8D,EACA6N,GAEA,IAAM/F,EAAI,IAAIgG,eAEdhG,EAAEoC,iBAAiB,QAAQ,SAAAnI,GACnB,MAAuBA,EAAE8K,OAAvBkB,EAAM,SAAET,EAAQ,WAGT,IAAXS,EAKAA,EAAS,KAAOA,EAAS,IAC3BF,EAAU1M,QAIZ0M,EAAUtL,KAAK+K,GATbO,EAAU9G,SAAShF,EAAEiM,OAASjM,EAAEkM,UAYpCnG,EAAEoC,iBAAiB,SAAS,WAC1B2D,EAAU1M,WAGZ2G,EAAEoC,iBAAiB,YAAY,SAAAnI,GAC7B8L,EAAU9G,SAAShF,EAAEiM,OAASjM,EAAEkM,UAGlCnG,EAAEoG,aAAe,cACjBpG,EAAEqG,KAAK,MAAOnO,GACd8H,EAAEsG,S,uXCtCJ,aAMA,SACA,SACA,SACA,QACA,SAEA,SAASC,EAAWC,GAClB,YADkB,IAAAA,IAAAA,EAAA,OACX,IAAAC,UAASD,GAAiBd,MAAK,eAKxC,SAASgB,EAAc/P,EAAcuB,EAAa2F,GAChD,YADgD,IAAAA,IAAAA,EAAA,IACzC,IAAIsB,SAAQ,SAACgG,EAAKC,GACvB,IAAMuB,GAAkB,IAAAC,qBAAoBjQ,EAAMuB,GAC9CyO,EACFvB,EAAIuB,IAIN,IAAA1B,UAAetO,EAAMuB,EAAK2F,GAAQ6H,KAAKP,GAAKQ,MAAMP,MAItD,SAASyB,EAAOlQ,GACd,KACE,IAAA8I,aAAY9I,GACZ,MAAOsD,GACP,MAAM,IAAI,UAAWA,EAAE+E,UA4ClB,EAAAuH,WAAAA,EAAY,EAAAG,cAAAA,EAAe,EAAAG,OAAAA,EAAgB,EAAA5B,SAxCpD,SACEtO,EACAuB,EACA2F,QAAA,IAAAA,IAAAA,EAAA,IAEA,IAAMiJ,EAAcP,IACdQ,EAAkBL,EAAc/P,EAAMuB,EAAK2F,GAMjD,OALAgJ,EAAOlQ,GAKAwI,QAAQ6H,IAAI,CAACF,EAAaC,IAAkBrB,QA4BT,EAAAuB,OAzB5C,SAAgBtQ,EAAce,GAC5B,IAAKf,IAASe,EACZ,MAAM,IAAI,UACR,6FAIJ,KAAK,IAAAkO,eAAcjP,GACjB,MAAM,IAAI,UACR,gHAIJ,OAAO,IAAAqK,eAAcrK,EAAMe,IAYiC,EAAAmO,MAT9D,WACE,OAAO,EAAP,QACK,eACA,cAAa,CAChBqB,eAAgB,QAChBC,iBAAkB,EAAAxP,uB,gFCvEtB,qBACEuF,EACA2D,GAEA,SAASuG,EAAOC,EAAaC,EAAe3I,GAC1C,OAAO0I,EAAIE,OAAO,EAAGD,GAAS3I,EAAQ0I,EAAIE,OAAOD,GAKnD,IAFA,IAAIE,EAAyB,EAET,MAAA3G,EAAA,eAAkB,CAAjC,IAAM4G,EAAK,KACRC,EAAqB,iCACrBC,EAAe,UAErBzK,EAAOkK,EACLlK,EACAuK,EAAMG,UAAYJ,EAClBE,GAEFF,GAA0BE,EAAmBtT,OAE7C8I,EAAOkK,EAAOlK,EAAMuK,EAAMI,IAAML,EAAwBG,GACxDH,GAA0BG,EAAavT,OAGzC,OAAO8I,I,uFC7BT,aAQA,4BACEwD,EACAqD,GAEA,IAAM+D,EAAWrL,SAASC,cAAc,YA4BxC,OA3BAoL,EAASzF,UAAY,mCACE0B,EAAQT,SAAW,YAAc,GAAE,0BAC/C5C,EAAOF,MAAMtI,IAAG,wDAElB,IAAA6P,WACHrH,EAAOF,MAAMwH,MACbtH,EAAOC,wBAA0B,IAClC,uBACCoD,EAAQhJ,WAAa,mBAAY2F,EAAOuH,MAAK,eAAgB,GAAE,6BAGjEvH,EAAOP,SAAS/L,OAAS,EACrB,0CACA,GAAE,iBAENsM,EAAOP,SACNJ,KACC,SAAA9F,GAAK,4DACA,IAAA8N,WAAU9N,EAAEiD,KAAMjD,EAAE4G,kBAAoB,IAAG,sCAE9CkD,EAAQhJ,WAAa,gBAASd,EAAEgO,MAAK,WAAY,GAAE,uBAGtDpL,KAAK,IAAG,qBACL6D,EAAOP,SAAS/L,OAAS,EAAI,SAAW,GAAE,mBAG3C0T,EAASI,QAAQC,oB,sFCxC1B,aACA,SAkCA,yBAA8BxR,EAAce,GAC1C,IAAI0Q,EAAe,KACfxR,EAAO,KAEX,IACEwR,GAAe,IAAA3Q,aAAYd,EAAMe,GAGjCd,EAAOqF,KAAKsD,MAAM6I,GAClB,MAAOnO,GAGP,MAAM,IAAI,UACR,sGACEmO,GAIN,IAAKxR,EACH,MAAM,IAAI,UAAW,4BAGvB,GAAIA,EAAKyC,MACP,MAAM,IAAI,UAAW,8QAKnBzC,EAAKyC,QAGT,OAAOzC,I,kiBClET,kBACE,WAAYoI,GAAZ,MACE,YAAMA,IAAQ,K,OACd,EAAKrI,KAAO,a,EAEhB,OALyB,OAKzB,EALA,CAAyBmC,OAOzB,UAAeuP,G,0GCPf,yBAA8BC,GAC5B,IAAMR,EAAWrL,SAASC,cAAc,YAGxC,OAFA4L,EAAOA,EAAKC,OACZT,EAASzF,UAAYiG,EACdR,EAASI,QAAQlL,YAG1B,sBAA8BwL,EAAgBC,GAC5C,IAAMC,EAAO,IAAIC,IAAIH,GACfI,EAAO,IAAID,IAAIF,GACfI,EAAO,IAAIF,IAAI9U,MAAMiV,KAAKJ,GAAMrI,QAAO,SAAA0I,GAAK,OAACH,EAAKI,IAAID,OAC5D,OAAOlV,MAAMiV,KAAKD,IAGP,EAAAxN,OAAS,SACpB4N,EACA7N,EACAC,GACW,OAAU,GAAT4N,EAAa7N,EAAWC,I,2FClBtC,aAEa,EAAAuL,oBAAsB,SACjCjQ,EACAuB,GAEA,MAAoB,iBAATvB,EACF,IAAI,UAAW,6CAGL,iBAARuB,EACF,IAAI,UAAW,yBAGjB,O,8GCdT,aACA,SAGMgR,EACF,mDAFY,QAEuC,eAGnDC,EAA+B,KAC/BC,EAAiD,KAEjDC,EAAwB,GACxBC,EAA6B,GA0EJ,EAAA7C,SAxEZ,SACf8C,GAGA,QAHA,IAAAA,IAAAA,EAAA,MAGIH,EACF,OAAOA,EAGT,IAAMlR,EAAMqR,GAAeL,EAC3BC,EAAgBjR,EAEhB,IAAMsR,GAAI,aAAKtR,GACZwN,MAAK,WAEJ,OADA+D,IACOvR,KAERyN,OAAM,WAEL,MADA+D,IACM,IAAI,UAAW,sCAA+BxR,OAIxD,OADAkR,EAAkBI,EACXA,GAkDA,EAAA/D,mBApCkB,SACzBkE,EACAC,GAEA,OAAKR,GAOHA,EAAgB1D,MAAK,WAAM,OAAAiE,OAAMhE,OAAM,WAAM,OAAAiE,OACtCR,IAPPC,EAAMnV,KAAKyV,GACXL,EAAWpV,KAAK0V,GACT,OASX,IAAMH,EAAQ,WACZJ,EAAMQ,SAAQ,SAAAF,GACZA,OAEFN,EAAQ,IAGJK,EAAa,WACjBJ,EAAWO,SAAQ,SAAAF,GACjBA,OAEFL,EAAa,IASwB,EAAAzD,MANzB,WAA+B,OAC3CsD,cAAa,EACbC,gBAAe,EACfU,YAAaT,EAAMjV,WClFjB2V,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBlW,IAAjBmW,EACH,OAAOA,EAAaxP,QAGrB,IAAIb,EAASkQ,EAAyBE,GAAY,CAGjDvP,QAAS,IAOV,OAHAyP,EAAoBF,GAAUG,KAAKvQ,EAAOa,QAASb,EAAQA,EAAOa,QAASsP,GAGpEnQ,EAAOa,QCpBfsP,EAAoBzI,EAAI,CAAC7G,EAAS2P,KACjC,IAAI,IAAIhO,KAAOgO,EACXL,EAAoBM,EAAED,EAAYhO,KAAS2N,EAAoBM,EAAE5P,EAAS2B,IAC5EP,OAAOyO,eAAe7P,EAAS2B,EAAK,CAAEmO,YAAY,EAAMrQ,IAAKkQ,EAAWhO,MCJ3E2N,EAAoBS,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOhM,MAAQ,IAAIiM,SAAS,cAAb,GACd,MAAO1Q,GACR,GAAsB,iBAAX7B,OAAqB,OAAOA,QALjB,GCAxB4R,EAAoBM,EAAI,CAAC1R,EAAKgS,IAAU9O,OAAO+O,UAAUC,eAAeV,KAAKxR,EAAKgS,GCClFZ,EAAoBhK,EAAKtF,IACH,oBAAXqQ,QAA0BA,OAAOC,aAC1ClP,OAAOyO,eAAe7P,EAASqQ,OAAOC,YAAa,CAAErM,MAAO,WAE7D7C,OAAOyO,eAAe7P,EAAS,aAAc,CAAEiE,OAAO,K,MCLvD,IAAIsM,EACAjB,EAAoBS,EAAES,gBAAeD,EAAYjB,EAAoBS,EAAEpS,SAAW,IACtF,IAAIoE,EAAWuN,EAAoBS,EAAEhO,SACrC,IAAKwO,GAAaxO,IACbA,EAAS0O,gBACZF,EAAYxO,EAAS0O,cAAcC,MAC/BH,GAAW,CACf,IAAII,EAAU5O,EAAS6O,qBAAqB,UACzCD,EAAQjX,SAAQ6W,EAAYI,EAAQA,EAAQjX,OAAS,GAAGgX,KAK7D,IAAKH,EAAW,MAAM,IAAInS,MAAM,yDAChCmS,EAAYA,EAAUM,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpFvB,EAAoBR,EAAIyB,G,GCZxB,IAAIO,EAAsBxB,EAAoB,K","sources":["webpack://stork/./node_modules/stork-search/stork.js","webpack://stork/./js/config.ts","webpack://stork/./js/dom.ts","webpack://stork/./js/entity.ts","webpack://stork/./js/entityDom.ts","webpack://stork/./js/entityManager.ts","webpack://stork/./js/loaders/indexLoader.ts","webpack://stork/./js/main.ts","webpack://stork/./js/pencil.ts","webpack://stork/./js/resultToListItem.ts","webpack://stork/./js/searchData.ts","webpack://stork/./js/storkError.ts","webpack://stork/./js/util.ts","webpack://stork/./js/validators/indexParamValidator.ts","webpack://stork/./js/wasmManager.ts","webpack://stork/webpack/bootstrap","webpack://stork/webpack/runtime/define property getters","webpack://stork/webpack/runtime/global","webpack://stork/webpack/runtime/hasOwnProperty shorthand","webpack://stork/webpack/runtime/make namespace object","webpack://stork/webpack/runtime/publicPath","webpack://stork/webpack/startup"],"sourcesContent":["\n function getAbsoluteUrl(relativeUrl) {\n const publicPath = __webpack_public_path__;\n\n let url = '';\n\n if (!publicPath || publicPath.indexOf('://') < 0) {\n url += window.location.protocol + '//' + window.location.host;\n }\n\n if (publicPath) {\n url += publicPath;\n } else {\n url += '/';\n }\n\n return url + relativeUrl;\n }\n\nlet wasm;\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet cachedTextEncoder = new TextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1);\n getUint8Memory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n/**\n* @param {string} name\n* @param {Uint8Array} data\n* @returns {string}\n*/\nexport function wasm_register_index(name, data) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc);\n var len1 = WASM_VECTOR_LEN;\n wasm.wasm_register_index(retptr, ptr0, len0, ptr1, len1);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n return getStringFromWasm0(r0, r1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_free(r0, r1);\n }\n}\n\n/**\n* @param {string} name\n* @param {string} query\n* @returns {string}\n*/\nexport function wasm_search(name, query) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ptr1 = passStringToWasm0(query, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n wasm.wasm_search(retptr, ptr0, len0, ptr1, len1);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n return getStringFromWasm0(r0, r1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_free(r0, r1);\n }\n}\n\n/**\n* @returns {string}\n*/\nexport function wasm_stork_version() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.wasm_stork_version(retptr);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n return getStringFromWasm0(r0, r1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_free(r0, r1);\n }\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nasync function load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nasync function init(input) {\n if (typeof input === 'undefined') {\n input = new URL('stork_bg.wasm', ({ url: getAbsoluteUrl('node_modules/stork-search/stork.js') }).url);\n }\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg_new_693216e109162396 = function() {\n var ret = new Error();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_stack_0ddaca5d1abfb52f = function(arg0, arg1) {\n var ret = getObject(arg1).stack;\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbg_error_09919627ac0992f5 = function(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(arg0, arg1);\n }\n };\n imports.wbg.__wbindgen_object_drop_ref = function(arg0) {\n takeObject(arg0);\n };\n\n if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {\n input = fetch(input);\n }\n\n\n\n const { instance, module } = await load(await input, imports);\n\n wasm = instance.exports;\n init.__wbindgen_wasm_module = module;\n\n return wasm;\n}\n\nexport default init;\n\n","import StorkError from \"./storkError\";\nimport { difference, plural } from \"./util\";\n\nexport interface Configuration {\n showProgress: boolean;\n printIndexInfo: boolean;\n showScores: boolean;\n showCloseButton: boolean;\n minimumQueryLength: number;\n forceOverwrite: boolean;\n resultNoun: { singular: string; plural: string };\n onQueryUpdate?: (query: string, results: unknown) => unknown;\n onResultSelected?: (query: string, result: unknown) => unknown;\n onResultsHidden?: () => unknown;\n onInputCleared?: () => unknown;\n transformResultUrl: (url: string) => string;\n}\n\nexport const defaultConfig: Readonly = {\n showProgress: true,\n printIndexInfo: false,\n showScores: false,\n showCloseButton: true,\n minimumQueryLength: 3,\n forceOverwrite: false,\n resultNoun: { singular: \"file\", plural: \"files\" },\n onQueryUpdate: undefined,\n onResultSelected: undefined,\n onResultsHidden: undefined,\n onInputCleared: undefined,\n transformResultUrl: url => url,\n};\n\nexport function calculateOverriddenConfig(\n overrides: Partial\n): Configuration | StorkError {\n const configKeyDiff = difference(\n Object.keys(overrides),\n Object.keys(defaultConfig)\n );\n\n if (configKeyDiff.length > 0) {\n const keys = plural(configKeyDiff.length, \"key\", \"keys\");\n const invalidKeys = JSON.stringify(configKeyDiff);\n return new StorkError(`Invalid ${keys} in config object: ${invalidKeys}`);\n }\n\n const output: Configuration = Object.assign({}, defaultConfig);\n\n for (const key of Object.keys(defaultConfig) as Array) {\n const overrideVal = overrides[key];\n if (overrideVal !== undefined) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n output[key] = overrideVal;\n }\n }\n\n return output;\n}\n","export function create(\n name: string,\n attributes: Record>\n): HTMLElement {\n const elem = document.createElement(name);\n if (attributes.classNames) {\n elem.setAttribute(\"class\", attributes.classNames.join(\" \"));\n }\n return elem;\n}\n\nexport function add(\n elem: HTMLElement,\n location: InsertPosition,\n reference: HTMLElement\n): void {\n reference.insertAdjacentElement(location, elem);\n}\n\nexport function clear(elem: HTMLElement | null): void {\n while (elem && elem.firstChild) {\n elem.removeChild(elem.firstChild);\n }\n}\n\nexport function setText(elem: HTMLElement | null, text: string): void {\n const textNode = document.createTextNode(text);\n if (elem && elem.firstChild) {\n elem.replaceChild(textNode, elem.firstChild);\n } else if (elem) {\n elem.appendChild(textNode);\n }\n}\n\nexport function existsBeyondContainerBounds(\n elem: HTMLElement,\n container: HTMLElement\n): boolean {\n const elemBoundingBox = elem.getBoundingClientRect();\n const containerBoundingBox = container.getBoundingClientRect();\n\n return (\n elemBoundingBox.bottom > containerBoundingBox.bottom ||\n elemBoundingBox.top < containerBoundingBox.top\n );\n}\n","import { Configuration } from \"./config\";\nimport { Result, SearchData, resolveSearch } from \"./searchData\";\nimport { EntityDom, RenderState } from \"./entityDom\";\nimport { wasm_register_index } from \"stork-search\";\nimport StorkError from \"./storkError\";\n\nexport type EntityState = \"initialized\" | \"loading\" | \"ready\" | \"error\";\n\nexport class Entity {\n readonly name: string;\n readonly url: string;\n readonly config: Configuration;\n\n private _state: EntityState = \"initialized\";\n\n downloadProgress = 0;\n\n index: Uint8Array;\n results: Array = [];\n totalResultCount = 0;\n\n domManager: EntityDom | null;\n eventListenerFunctions: Record void> = {};\n highlightedResult = 0;\n resultsVisible = false;\n hoverSelectEnabled = true;\n\n constructor(name: string, url: string, config: Configuration) {\n this.name = name;\n this.url = url;\n this.config = config;\n }\n\n public get state(): EntityState {\n return this._state;\n }\n\n public set state(value: EntityState) {\n this._state = value;\n this.render();\n }\n\n private getCurrentMessage(): string | null {\n if (!this.domManager) return null;\n const query = this.domManager.getQuery();\n if (this.state === \"error\") {\n return \"Error! Check the browser console.\";\n } else if (this.state != \"ready\") {\n return \"Loading...\";\n } else if (query?.length < this.config.minimumQueryLength) {\n return \"Filtering...\";\n } else if (this.results) {\n if (this.totalResultCount === 0) {\n return `No ${this.config.resultNoun.plural} found.`;\n } else if (this.totalResultCount === 1) {\n return `1 ${this.config.resultNoun.singular} found.`;\n } else {\n return `${this.totalResultCount} ${this.config.resultNoun.plural} found.`;\n }\n }\n\n return null;\n }\n\n private generateRenderConfig(): RenderState {\n return {\n results: this.results,\n resultsVisible: true,\n showScores: this.config.showScores,\n message: this.getCurrentMessage(),\n showProgress: this.config.showProgress,\n progress: this.downloadProgress,\n state: this.state\n };\n }\n\n private render() {\n if (!this.domManager) return;\n this.domManager.render(this.generateRenderConfig());\n }\n\n registerIndex(data: Uint8Array): Promise {\n return new Promise((resolve, reject) => {\n const indexInfo = JSON.parse(wasm_register_index(this.name, data));\n if (indexInfo.error) {\n reject(new StorkError(indexInfo.error));\n } else {\n if (this.config.printIndexInfo) {\n console.log(indexInfo);\n }\n\n this.state = \"ready\";\n resolve(indexInfo);\n }\n });\n }\n\n attachToDom(): void {\n this.domManager = new EntityDom(this.name, this);\n this.render();\n }\n\n injestSearchData(data: SearchData): void {\n this.results = data.results;\n this.totalResultCount = data.total_hit_count;\n this.highlightedResult = 0;\n\n // Mutate the result URL, like we do when there's a url prefix or suffix\n const urlPrefix = data.url_prefix || \"\";\n this.results.map(r => {\n let urlSuffix = \"\";\n\n const firstInternalAnnotations = r.excerpts\n .map(e => e.internal_annotations)\n .filter(ia => !!ia)[0];\n\n if (firstInternalAnnotations && firstInternalAnnotations[0]) {\n const annotationMap = firstInternalAnnotations[0];\n if (typeof annotationMap[\"a\"] === \"string\") {\n urlSuffix += annotationMap[\"a\"];\n }\n }\n\n // oof\n if (\n r.excerpts &&\n r.excerpts[0] &&\n r.excerpts[0].internal_annotations &&\n r.excerpts[0].internal_annotations[0] &&\n r.excerpts[0].internal_annotations[0][\"a\"] &&\n typeof r.excerpts[0].internal_annotations[0][\"a\"] === \"string\"\n ) {\n urlSuffix = r.excerpts[0].internal_annotations[0][\"a\"];\n }\n r.entry.url = this.config.transformResultUrl(`${urlPrefix}${r.entry.url}${urlSuffix}`);\n });\n\n this.render();\n }\n\n private getSanitizedResults() {\n const results = this.results;\n results.map(result => {\n delete result.title_highlight_ranges;\n result.excerpts.map(excerpt => {\n delete excerpt.highlight_ranges;\n delete excerpt.internal_annotations;\n });\n });\n return results;\n }\n\n setDownloadProgress = (percentage: number): void => {\n this.state = \"loading\";\n this.downloadProgress = percentage;\n if (this.config.showProgress) {\n this.render();\n }\n };\n\n setDownloadError(): void {\n this.state = \"error\";\n }\n\n performSearch(query: string): void {\n if (this.state !== \"ready\") {\n this.render();\n return;\n }\n\n if (query.length < this.config.minimumQueryLength) {\n this.results = [];\n this.render();\n return;\n }\n\n try {\n const data = resolveSearch(this.name, query);\n if (!data) return;\n\n this.injestSearchData(data);\n\n if (this.config.onQueryUpdate) {\n this.config.onQueryUpdate(query, this.getSanitizedResults());\n }\n } catch (error) {\n console.error(error);\n }\n }\n}\n","import { Result } from \"./searchData\";\n\nimport {\n create,\n add,\n clear,\n setText,\n existsBeyondContainerBounds\n} from \"./dom\";\nimport { Entity, EntityState } from \"./entity\";\nimport { ListItemDisplayOptions, resultToListItem } from \"./resultToListItem\";\n\ninterface ElementMap {\n input: HTMLInputElement;\n output: HTMLDivElement;\n progress: HTMLElement;\n list: HTMLElement;\n message: HTMLElement;\n attribution: HTMLElement;\n closeButton: HTMLElement;\n}\n\nexport interface RenderState {\n results: Array;\n resultsVisible: boolean;\n showScores: boolean;\n message: string | null;\n showProgress: boolean;\n progress: number;\n state: EntityState;\n}\n\nconst hiddenInterfaceRenderState: RenderState = {\n results: [],\n resultsVisible: false,\n showScores: false,\n message: null,\n showProgress: false,\n progress: 1,\n state: \"ready\"\n};\n\nexport class EntityDom {\n readonly elements: ElementMap;\n readonly entity: Entity;\n\n highlightedResult?: number;\n hoverSelectEnabled: boolean;\n lastRenderState: RenderState;\n\n scrollAnchorPoint: \"start\" | \"end\" = \"end\";\n\n constructor(name: string, entity: Entity) {\n this.entity = entity;\n\n const data = [\n {\n selector: `input[data-stork=\"${name}\"]`,\n elementName: \"input\"\n },\n {\n selector: `div[data-stork=\"${name}-output\"]`,\n elementName: \"output\"\n }\n ];\n\n const [input, output] = data.map(d => {\n const element = document.querySelector(d.selector);\n if (!element) {\n throw new Error(\n `Could not register search box \"${name}\": ${d.elementName} element not found. Make sure an element matches the query selector \\`${d.selector}\\``\n );\n }\n\n return element;\n }) as [HTMLInputElement, HTMLDivElement];\n\n this.elements = {\n input: input,\n output: output,\n list: create(\"ul\", { classNames: [\"stork-results\"] }),\n attribution: create(\"div\", {\n classNames: [\"stork-attribution\"]\n }),\n progress: create(\"div\", { classNames: [\"stork-progress\"] }),\n message: create(\"div\", { classNames: [\"stork-message\"] }),\n closeButton: create(\"button\", {\n classNames: [\"stork-close-button\"]\n })\n };\n\n // First, remove saved event listener functions from the element, if they exist.\n // This makes the EntityDom constructor safe to call multiple times, even if\n // the elements on the page haven't changed.\n this.elements.input.removeEventListener(\n \"input\",\n this.entity.eventListenerFunctions.inputInputEvent\n );\n\n this.elements.input.removeEventListener(\n \"keydown\",\n this.entity.eventListenerFunctions.inputKeydownEvent\n );\n\n // Then, save new event listener functions to the entity so that we can\n // delete those listeners from the corresponding elements when the\n // EntityDom object is recreated.\n this.entity.eventListenerFunctions = {\n inputInputEvent: (e: InputEvent) => {\n this.handleInputEvent(e as InputEvent);\n },\n\n inputKeydownEvent: (e: KeyboardEvent) => {\n this.handleKeyDownEvent(e as KeyboardEvent);\n }\n };\n\n // Then, add those newly saved functions as event listeners on the elements.\n this.elements.input.addEventListener(\n \"input\",\n this.entity.eventListenerFunctions.inputInputEvent\n );\n\n this.elements.input.addEventListener(\n \"keydown\",\n this.entity.eventListenerFunctions.inputKeydownEvent\n );\n\n // We didn't have to do the remove/add dance with this one because\n // this listener behavior is already idempotent.\n this.elements.list?.addEventListener(\"mousemove\", () => {\n this.hoverSelectEnabled = true;\n });\n\n this.elements.attribution.innerHTML =\n 'Powered by Stork';\n\n this.elements.closeButton.innerHTML = `\n\n\n\n\n\n\n\n`;\n\n if (this.entity.config.showProgress) {\n add(this.elements.progress, \"afterend\", this.elements.input);\n }\n\n this.elements.closeButton?.addEventListener(\"click\", () => {\n this.elements.input.value = \"\";\n this.elements.input.focus();\n this.render(hiddenInterfaceRenderState);\n const [m, n] = [\n this.entity.config.onInputCleared,\n this.entity.config.onResultsHidden\n ];\n m ? m() : null;\n n ? n() : null;\n });\n }\n\n private clearDom() {\n clear(this.elements.output);\n clear(this.elements.list);\n this.elements.closeButton?.remove();\n this.elements.output.classList.remove(\"stork-output-visible\");\n }\n\n render(state: RenderState): void {\n const query = (this.elements.input as HTMLInputElement).value;\n this.clearDom();\n this.lastRenderState = state;\n\n if (state.showProgress) {\n const getFakeProgress = (): number => {\n switch (state.state) {\n case \"ready\":\n case \"error\":\n return 1;\n case \"initialized\":\n case \"loading\":\n return state.progress * 0.9 + 0.05;\n }\n };\n\n const progress = getFakeProgress();\n\n if (progress < 1) {\n this.elements.progress.style.width = `${progress * 100}%`;\n this.elements.progress.style.opacity = \"1\";\n } else {\n this.elements.progress.style.width = `100%`;\n this.elements.progress.style.opacity = \"0\";\n }\n }\n\n if (state.state === \"error\") {\n this.elements.input.classList.add(\"stork-error\");\n }\n\n if (this.getQuery().length > 0 && state.resultsVisible) {\n this.elements.output.classList.add(\"stork-output-visible\");\n add(this.elements.message, \"beforeend\", this.elements.output);\n }\n\n if (state.message) {\n setText(this.elements.message, state.message);\n }\n\n if (state.results?.length > 0 && state.resultsVisible) {\n add(this.elements.list, \"beforeend\", this.elements.output);\n\n for (let i = 0; i < state.results.length; i++) {\n const result = state.results[i];\n const generateOptions: ListItemDisplayOptions = {\n selected: i === this.highlightedResult,\n showScores: state.showScores\n };\n\n const listItem = resultToListItem(result, generateOptions);\n add(listItem as HTMLElement, \"beforeend\", this.elements.list);\n\n listItem.addEventListener(\"mousemove\", () => {\n if (this.hoverSelectEnabled) {\n if (i !== this.highlightedResult) {\n this.changeHighlightedResult({ to: i, shouldScrollTo: false });\n }\n }\n });\n\n listItem.addEventListener(\"mouseleave\", () => {\n if (this.hoverSelectEnabled) {\n if (i === this.highlightedResult) {\n this.changeHighlightedResult({ to: -1, shouldScrollTo: false });\n }\n }\n });\n\n listItem.addEventListener(\"click\", e => {\n e.preventDefault();\n this.selectResult();\n });\n }\n\n add(this.elements.attribution, \"beforeend\", this.elements.output);\n }\n\n if ((query?.length || 0) > 0 && this.entity.config.showCloseButton) {\n add(this.elements.closeButton, \"afterend\", this.elements.input);\n }\n }\n\n private selectResult() {\n if (this.highlightedResult != null) {\n const result = this.entity.results[this.highlightedResult];\n if (this.entity.config.onResultSelected) {\n Promise.resolve(\n this.entity.config.onResultSelected(this.getQuery(), result)\n ).finally(() => {\n window.location.assign(result.entry.url);\n });\n } else {\n window.location.assign(result.entry.url);\n }\n }\n }\n\n changeHighlightedResult(options: {\n to: number;\n shouldScrollTo: boolean;\n }): number {\n const previousValue = this.highlightedResult;\n\n const resolvedIdx = Math.max(\n -1, // `to` will be -1 if we want to clear the highlight\n Math.min(this.entity.results.length - 1, options.to)\n );\n\n this.highlightedResult = resolvedIdx;\n this.scrollAnchorPoint =\n (previousValue || 0) < resolvedIdx ? \"end\" : \"start\";\n\n let targetForScrollTo = null;\n\n for (let i = 0; i < this.entity.results.length; i++) {\n const element = this.elements.list?.children[i];\n if (!element) {\n continue;\n }\n\n const highlightedClassName = \"selected\";\n\n if (i == resolvedIdx) {\n element.classList.add(highlightedClassName);\n targetForScrollTo = element;\n } else {\n element.classList.remove(highlightedClassName);\n }\n }\n\n if (options.shouldScrollTo) {\n this.hoverSelectEnabled = false;\n if (targetForScrollTo) {\n if (\n existsBeyondContainerBounds(\n targetForScrollTo as HTMLElement,\n this.elements.list\n )\n ) {\n (targetForScrollTo as HTMLElement).scrollIntoView({\n behavior: \"smooth\",\n block: this.scrollAnchorPoint,\n inline: \"nearest\"\n });\n }\n }\n }\n\n return resolvedIdx;\n }\n\n handleKeyDownEvent(event: KeyboardEvent): void {\n const UP = 38;\n const DOWN = 40;\n const RETURN = 13;\n const ESC = 27;\n\n switch (event.keyCode) {\n case DOWN: {\n if (this.highlightedResult == null) {\n this.changeHighlightedResult({ to: 0, shouldScrollTo: true });\n } else {\n const target = Math.min(\n this.highlightedResult + 1,\n this.entity.results.length - 1\n );\n this.changeHighlightedResult({ to: target, shouldScrollTo: true });\n }\n break;\n }\n\n case UP: {\n if (this.highlightedResult != null) {\n const target = Math.max(0, this.highlightedResult - 1);\n this.changeHighlightedResult({ to: target, shouldScrollTo: true });\n }\n break;\n }\n\n case RETURN:\n this.selectResult();\n break;\n\n case ESC:\n if (this.lastRenderState.resultsVisible) {\n this.render(hiddenInterfaceRenderState);\n const m = this.entity.config.onResultsHidden;\n m ? m() : null;\n } else if (this.elements.input.value.length > 0) {\n this.elements.input.value = \"\";\n this.render(hiddenInterfaceRenderState); // To clear [x] button\n const m = this.entity.config.onInputCleared;\n m ? m() : null;\n }\n\n break;\n\n default:\n return;\n }\n }\n\n handleInputEvent(event: InputEvent): void {\n this.entity.performSearch((event.target as HTMLInputElement).value);\n }\n\n getQuery(): string {\n return (this.elements.input as HTMLInputElement).value;\n }\n}\n","import { Entity } from \"./entity\";\nimport { Configuration, calculateOverriddenConfig } from \"./config\";\nimport { loadIndexFromUrl } from \"./loaders/indexLoader\";\nimport { runAfterWasmLoaded } from \"./wasmManager\";\nimport StorkError from \"./storkError\";\n\nconst entities: Record = {};\n\nconst register = (\n name: string,\n url: string,\n partialConfig: Partial\n): Promise => {\n return new Promise((res, rej) => {\n const fullConfig = calculateOverriddenConfig(partialConfig);\n if (fullConfig instanceof StorkError) {\n rej(fullConfig);\n return;\n }\n\n if (entities[name] && !fullConfig.forceOverwrite) {\n rej(\n new StorkError(\n `You're registering an index named \\`${name}\\`, but that already exists. If this is expected, set forceOverwrite to true in your Javascript config to allow overwriting indexes.`\n )\n );\n }\n\n const entity = new Entity(name, url, fullConfig);\n entities[name] = entity;\n\n loadIndexFromUrl(url, {\n progress: percentage => {\n entity.setDownloadProgress(percentage);\n },\n\n load: response => {\n runAfterWasmLoaded(\n () => {\n entity.registerIndex(new Uint8Array(response)).then(res).catch(rej);\n },\n () => {\n entity.state = \"error\";\n }\n );\n },\n\n error: () => {\n entity.setDownloadError();\n rej();\n }\n });\n });\n};\n\nconst attachToDom = (name: string): void => {\n if (!entities[name]) {\n throw new Error(`Index ${name} has not been registered!`);\n }\n\n entities[name].attachToDom();\n};\n\nconst entityIsReady = (name: string): boolean => {\n return entities[name]?.state === \"ready\";\n};\n\nconst debug = (): Record => ({\n entities: { ...entities },\n entitiesCount: entities.length\n});\n\nexport { register, attachToDom, entityIsReady, debug };\n","interface IndexLoaderCallbacks {\n load: (response: ArrayBufferLike) => void;\n progress: (percentage: number) => void;\n error: () => void;\n}\n\nexport function loadIndexFromUrl(\n url: string,\n callbacks: IndexLoaderCallbacks\n): void {\n const r = new XMLHttpRequest();\n\n r.addEventListener(\"load\", e => {\n const { status, response } = e.target as XMLHttpRequest;\n\n // This shouldn't happen on the `load` event, but handle it safely if it does\n if (status === 0) {\n callbacks.progress(e.loaded / e.total);\n return;\n }\n\n if (status < 200 || status > 299) {\n callbacks.error();\n return;\n }\n\n callbacks.load(response);\n });\n\n r.addEventListener(\"error\", () => {\n callbacks.error();\n });\n\n r.addEventListener(\"progress\", e => {\n callbacks.progress(e.loaded / e.total);\n });\n\n r.responseType = \"arraybuffer\";\n r.open(\"GET\", url);\n r.send();\n}\n","import { Configuration } from \"./config\";\nimport {\n register as registerEntity,\n attachToDom,\n entityIsReady,\n debug as entityDebug\n} from \"./entityManager\";\nimport { loadWasm, debug as wasmDebug } from \"./wasmManager\";\nimport { resolveSearch, SearchData } from \"./searchData\";\nimport StorkError from \"./storkError\";\nimport { validateIndexParams } from \"./validators/indexParamValidator\";\nimport { wasm_stork_version } from \"stork-search\";\n\nfunction initialize(wasmOverrideUrl: string | null = null): Promise {\n return loadWasm(wasmOverrideUrl).then(() => {\n return;\n });\n}\n\nfunction downloadIndex(name: string, url: string, config = {}): Promise {\n return new Promise((res, rej) => {\n const validationError = validateIndexParams(name, url);\n if (validationError) {\n rej(validationError);\n return;\n }\n\n registerEntity(name, url, config).then(res).catch(rej);\n });\n}\n\nfunction attach(name: string): void {\n try {\n attachToDom(name);\n } catch (e) {\n throw new StorkError(e.message);\n }\n}\n\nfunction register(\n name: string,\n url: string,\n config: Partial = {}\n): Promise {\n const initPromise = initialize();\n const downloadPromise = downloadIndex(name, url, config);\n attach(name);\n\n // This silly `then` call turns a [(void), (void)] into a (void), which is\n // only necessary to make Typescript happy.\n // You begin to wonder if you write Typescript code, or if Typescript code writes you.\n return Promise.all([initPromise, downloadPromise]).then();\n}\n\nfunction search(name: string, query: string): SearchData {\n if (!name || !query) {\n throw new StorkError(\n \"Make sure to call stork.search() with two arguments: the index name and the search query.\"\n );\n }\n\n if (!entityIsReady(name)) {\n throw new StorkError(\n \"Couldn't find index. Make sure the stork.downloadIndex() promise has resolved before calling stork.search().\"\n );\n }\n\n return resolveSearch(name, query);\n}\n\nfunction debug(): Record {\n return {\n ...wasmDebug(),\n ...entityDebug(),\n jsStorkVersion: process.env.VERSION,\n wasmStorkVersion: wasm_stork_version\n };\n}\n\nexport { initialize, downloadIndex, attach, search, register, debug };\n","// It's like Handlebars, but smaller.\n\nimport { HighlightRange } from \"./searchData\";\n\nexport function highlight(\n text: string,\n highlight_ranges: Array\n): string {\n function insert(str: string, index: number, value: string) {\n return str.substr(0, index) + value + str.substr(index);\n }\n\n let charactersAlreadyAdded = 0;\n\n for (const range of highlight_ranges) {\n const beginningInsertion = ``;\n const endInsertion = ``;\n\n text = insert(\n text,\n range.beginning + charactersAlreadyAdded,\n beginningInsertion\n );\n charactersAlreadyAdded += beginningInsertion.length;\n\n text = insert(text, range.end + charactersAlreadyAdded, endInsertion);\n charactersAlreadyAdded += endInsertion.length;\n }\n\n return text;\n}\n","import { highlight } from \"./pencil\";\nimport { Result } from \"./searchData\";\n\nexport interface ListItemDisplayOptions {\n selected: boolean;\n showScores: boolean;\n}\n\nexport function resultToListItem(\n result: Result,\n options: ListItemDisplayOptions\n): ChildNode {\n const template = document.createElement(\"template\");\n template.innerHTML = `\n
  • \n \n
    \n

    ${highlight(\n result.entry.title,\n result.title_highlight_ranges || []\n )}

    \n ${options.showScores ? `${result.score}` : \"\"}\n
    \n ${\n result.excerpts.length > 0\n ? '
    '\n : \"\"\n }\n ${result.excerpts\n .map(\n e => `

    \n ...${highlight(e.text, e.highlight_ranges || [])}...\n

    \n ${options.showScores ? `${e.score}` : \"\"}\n
    `\n )\n .join(\"\")}\n ${result.excerpts.length > 0 ? \"
    \" : \"\"}\n
    \n
  • `;\n return template.content.firstElementChild as ChildNode;\n}\n","import { wasm_search } from \"stork-search\";\nimport StorkError from \"./storkError\";\n\nexport interface HighlightRange {\n beginning: number;\n end: number;\n}\n\nexport interface Entry {\n fields: Record;\n title: string;\n url: string;\n}\n\nexport interface Excerpt {\n fields: Record;\n internal_annotations?: Array>;\n highlight_ranges?: Array;\n score: number;\n text: string;\n}\n\nexport interface Result {\n entry: Entry;\n excerpts: Array;\n score: number;\n title_highlight_ranges?: Array;\n}\n\nexport interface SearchData {\n results: Array;\n total_hit_count: number;\n url_prefix: string;\n}\n\nexport function resolveSearch(name: string, query: string): SearchData {\n let searchOutput = null;\n let data = null;\n\n try {\n searchOutput = wasm_search(name, query);\n // If wasm_search returns an error, it will return a JSON blob. Look for\n // data.error to see if this is the case.\n data = JSON.parse(searchOutput);\n } catch (e) {\n // Data has come back improperly, even beyond an error in Rust-land.\n // analytics.log(e)\n throw new StorkError(\n \"Could not parse data from wasm_search. If you see this, please file a bug: https://jil.im/storkbug \" +\n searchOutput\n );\n }\n\n if (!data) {\n throw new StorkError(\"Data was an empty object\");\n }\n\n if (data.error) {\n throw new StorkError(`Could not perform search: the WASM binary failed to return search results.\n You might not be serving your search index properly.\n If you think this is an error, please file a bug: https://jil.im/storkbug\n \n The WASM binary came back with:\n ${data.error}`);\n }\n\n return data;\n}\n","class StorkError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"StorkError\";\n }\n}\n\nexport default StorkError;\n","export function htmlToElement(html: string): ChildNode | null {\n const template = document.createElement(\"template\");\n html = html.trim(); // Never return a text node of whitespace as the result\n template.innerHTML = html;\n return template.content.firstChild;\n}\n\nexport function difference(arr1: Array, arr2: Array): Array {\n const set1 = new Set(arr1);\n const set2 = new Set(arr2);\n const diff = new Set(Array.from(set1).filter(x => !set2.has(x)));\n return Array.from(diff);\n}\n\nexport const plural = (\n count: number,\n singular: string,\n plural: string\n): string => (count == 1 ? singular : plural);\n","import StorkError from \"../storkError\";\n\nexport const validateIndexParams = (\n name: string,\n url: string\n): StorkError | null => {\n if (typeof name !== \"string\") {\n return new StorkError(\"Index registration name must be a string.\");\n }\n\n if (typeof url !== \"string\") {\n return new StorkError(\"URL must be a string.\");\n }\n\n return null;\n};\n","import init from \"stork-search\";\nimport StorkError from \"./storkError\";\n\nconst version = process.env.VERSION;\nconst DEFAULT_WASM_URL = version\n ? `https://files.stork-search.net/releases/v${version}/stork.wasm`\n : `https://files.stork-search.net/stork.wasm`;\n\nlet wasmSourceUrl: string | null = null; // only for debug output\nlet wasmLoadPromise: Promise | null = null;\n\nlet queue: { (): void }[] = [];\nlet errorQueue: { (): void }[] = [];\n\nconst loadWasm = (\n overrideUrl: string | null = null\n): Promise => {\n // If there's a WASM load in flight or complete, don't try to call init again\n if (wasmLoadPromise) {\n return wasmLoadPromise;\n }\n\n const url = overrideUrl || DEFAULT_WASM_URL;\n wasmSourceUrl = url;\n\n const p = init(url)\n .then(() => {\n flush();\n return url;\n })\n .catch(() => {\n errorFlush();\n throw new StorkError(`Error while loading WASM at ${url}`);\n });\n\n wasmLoadPromise = p;\n return p;\n};\n\n/**\n * Caller should use this to queue up a function to be run only when the\n * WASM is loaded. If the WASM is already loaded when this method is called,\n * the function will run immediately.\n *\n * @param fn Function to be run once WASM is loaded\n *\n * @returns a promise if loadWasm has been called, or undefined if loadWasm\n * has not been called. If loadWasm has been called, the promise will resolve\n * when the WASM has been loaded and when the function has been run.\n */\nconst runAfterWasmLoaded = (\n fn: () => void,\n err: () => void\n): Promise | null => {\n if (!wasmLoadPromise) {\n queue.push(fn);\n errorQueue.push(err);\n return null;\n } else {\n // We have a wasmLoadPromise, but we don't know if it's resolved.\n // Let's wait for it to resolve, then run the function.\n wasmLoadPromise.then(() => fn()).catch(() => err());\n return wasmLoadPromise;\n }\n};\n\nconst flush = () => {\n queue.forEach(fn => {\n fn();\n });\n queue = [];\n};\n\nconst errorFlush = () => {\n errorQueue.forEach(fn => {\n fn();\n });\n errorQueue = [];\n};\n\nconst debug = (): Record => ({\n wasmSourceUrl,\n wasmLoadPromise,\n queueLength: queue.length\n});\n\nexport { runAfterWasmLoaded, loadWasm, debug };\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(480);\n"],"names":["wasm","heap","Array","fill","undefined","getObject","idx","push","heap_next","length","WASM_VECTOR_LEN","cachegetUint8Memory0","getUint8Memory0","buffer","memory","Uint8Array","cachedTextEncoder","TextEncoder","encodeString","encodeInto","arg","view","buf","encode","set","read","written","passStringToWasm0","malloc","realloc","ptr","subarray","len","mem","offset","code","charCodeAt","slice","cachegetInt32Memory0","getInt32Memory0","Int32Array","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","getStringFromWasm0","decode","wasm_register_index","name","data","retptr","__wbindgen_add_to_stack_pointer","ptr0","__wbindgen_malloc","__wbindgen_realloc","len0","ptr1","passArray8ToWasm0","len1","r0","r1","__wbindgen_free","wasm_search","query","wasm_stork_version","async","init","input","URL","relativeUrl","publicPath","url","indexOf","window","location","protocol","host","getAbsoluteUrl","imports","wbg","__wbg_new_693216e109162396","obj","addHeapObject","Error","__wbg_stack_0ddaca5d1abfb52f","arg0","arg1","stack","__wbg_error_09919627ac0992f5","console","error","__wbindgen_object_drop_ref","ret","dropObject","takeObject","Request","fetch","instance","module","Response","WebAssembly","instantiateStreaming","e","headers","get","warn","bytes","arrayBuffer","instantiate","Instance","load","exports","__wbindgen_wasm_module","defaultConfig","showProgress","printIndexInfo","showScores","showCloseButton","minimumQueryLength","forceOverwrite","resultNoun","singular","plural","onQueryUpdate","onResultSelected","onResultsHidden","onInputCleared","transformResultUrl","overrides","configKeyDiff","difference","Object","keys","invalidKeys","JSON","stringify","output","assign","key","overrideVal","attributes","elem","document","createElement","classNames","setAttribute","join","reference","insertAdjacentElement","firstChild","removeChild","text","textNode","createTextNode","replaceChild","appendChild","container","elemBoundingBox","getBoundingClientRect","containerBoundingBox","bottom","top","config","_state","downloadProgress","results","totalResultCount","eventListenerFunctions","highlightedResult","resultsVisible","hoverSelectEnabled","setDownloadProgress","percentage","state","render","this","value","getCurrentMessage","domManager","getQuery","generateRenderConfig","message","progress","registerIndex","Promise","resolve","reject","indexInfo","parse","log","attachToDom","EntityDom","injestSearchData","total_hit_count","urlPrefix","url_prefix","map","r","urlSuffix","firstInternalAnnotations","excerpts","internal_annotations","filter","ia","annotationMap","entry","getSanitizedResults","result","title_highlight_ranges","excerpt","highlight_ranges","setDownloadError","performSearch","resolveSearch","Entity","hiddenInterfaceRenderState","entity","scrollAnchorPoint","selector","elementName","d","element","querySelector","elements","list","create","attribution","closeButton","removeEventListener","inputInputEvent","inputKeydownEvent","handleInputEvent","handleKeyDownEvent","addEventListener","innerHTML","add","focus","m","n","clearDom","clear","remove","classList","lastRenderState","getFakeProgress","style","width","opacity","setText","i","generateOptions","selected","listItem","resultToListItem","changeHighlightedResult","to","shouldScrollTo","preventDefault","selectResult","finally","options","previousValue","resolvedIdx","Math","max","min","targetForScrollTo","children","highlightedClassName","existsBeyondContainerBounds","scrollIntoView","behavior","block","inline","event","keyCode","target","entities","register","partialConfig","res","rej","fullConfig","calculateOverriddenConfig","loadIndexFromUrl","response","runAfterWasmLoaded","then","catch","entityIsReady","debug","entitiesCount","callbacks","XMLHttpRequest","status","loaded","total","responseType","open","send","initialize","wasmOverrideUrl","loadWasm","downloadIndex","validationError","validateIndexParams","attach","initPromise","downloadPromise","all","search","jsStorkVersion","wasmStorkVersion","insert","str","index","substr","charactersAlreadyAdded","range","beginningInsertion","endInsertion","beginning","end","template","highlight","title","score","content","firstElementChild","searchOutput","StorkError","html","trim","arr1","arr2","set1","Set","set2","diff","from","x","has","count","DEFAULT_WASM_URL","wasmSourceUrl","wasmLoadPromise","queue","errorQueue","overrideUrl","p","flush","errorFlush","fn","err","forEach","queueLength","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call","definition","o","defineProperty","enumerable","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","scriptUrl","importScripts","currentScript","src","scripts","getElementsByTagName","replace","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/stork.wasm b/static/js/stork.wasm new file mode 100644 index 0000000000000000000000000000000000000000..4394eb23325bd220d2c034a6e0e3ec0a3377c51f GIT binary patch literal 351489 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

    g?ap9^x7vT= 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
        =NKKtmG!b??5jwU7e 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 literal 0 HcmV?d00001 diff --git a/static/tipuesearch/tipuesearch.css b/static/tipuesearch/tipuesearch.css deleted file mode 100644 index 7867b83..0000000 --- a/static/tipuesearch/tipuesearch.css +++ /dev/null @@ -1,280 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Open+Sans|Source+Code+Pro'); -/* -Tipue Search 7.1 -Copyright (c) 2019 Tipue -Tipue Search is released under the MIT License -http://www.tipue.com/search -*/ - - -/* search box */ - - -#tipue_search_input -{ - float: left; - color: #333; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - background-color: #f3f3f3; - border: none; - border-radius: 5px; - -moz-appearance: none; - -webkit-appearance: none; - box-sizing: border-box; - box-shadow: none; - outline: 0; - margin: 0; -} -#tipue_search_input:-webkit-autofill, -#tipue_search_input:-webkit-autofill:hover, -#tipue_search_input:-webkit-autofill:focus -{ - -webkit-box-shadow: 0 0 0px 1000px #f3f3f3 inset; -} -.tipue_search_button -{ - position: relative; - float: left; - margin-left: -3px; - background-color: #f3f3f3; - border: none; - box-sizing: border-box; - cursor: pointer; - outline: 0; -} -.tipue_search_icon -{ - float: left; - font: 24px/1 'Open Sans', sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - color: #333; - transform: rotate(-45deg); - -moz-appearance: none; - -webkit-appearance: none; - box-sizing: border-box; - box-shadow: none; - outline: 0; - margin: -1px 0 0 1px; -} -.tipue_search_group:after -{ - content: ""; - display: table; - clear: both; -} - - -/* search results */ - - -#tipue_search_content -{ - max-width: 100%; - margin: 0; -} -.tipue_search_content_title -{ - color: #111; -} -.tipue_search_content_title a -{ - color: #111; - text-decoration: none; -} -.tipue_search_content_title a:hover -{ - border-bottom: 1px solid #333; -} -.tipue_search_result -{ - padding-top: 27px; -} -#tipue_search_results_count, .tipue_search_content_debug -{ - font: 13px/1.5 'Source Code Pro', monospace; - text-transform: uppercase; - color: #999; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -#tipue_search_results_count -{ - padding-top: 9px; -} -.tipue_search_content_url, .tipue_search_note, .tipue_search_related, #tipue_search_error, #tipue_search_replace -{ - color: #666; - padding-top: 7px; - word-wrap: break-word; - hyphens: auto; -} -.tipue_search_content_url a, .tipue_search_note a, .tipue_search_related a, #tipue_search_replace a, #tipue_search_replace a:hover -{ - color: #339e41; - text-decoration: none; -} -.tipue_search_content_url a:hover, .tipue_search_note a:hover, .tipue_search_related a:hover -{ - color: #666; -} -#tipue_search_replace, .tipue_search_related -{ - margin-top: 7px; -} -#tipue_search_error -{ - color: #333; - margin-top: 17px; -} -.tipue_search_content_text -{ - color: #333; - word-wrap: break-word; - hyphens: auto; - margin-top: 9px; -} -.tipue_search_content_bold -{ - font-weight: 400; - color: #333; -} -.tipue_search_content_debug -{ - margin: 7px 0 2px 0; -} - - -/* images */ - - -.tipue_search_image -{ - padding: 17px 0 6px 0; -} -.tipue_search_img -{ - width: 100%; - max-width: 330px; - height: auto; - transition: 0.5s; - border-radius: 2px; -} -.tipue_search_img:hover -{ - opacity: 0.9; -} -#tipue_search_zoom_text -{ - font: 12px/1.7 'Source Code Pro', monospace; - color: #ccc; - text-transform: uppercase; - letter-spacing: 1px; - padding-top: 9px; -} -#tipue_search_zoom_text a -{ - color: #ccc; - text-decoration: none; - border-bottom: 2px solid #f7f7f7; -} -#tipue_search_zoom_text a:hover -{ - border: 0; -} -.tipue_search_image_zoom -{ - cursor: pointer; -} -#tipue_search_image_modal -{ - display: none; - position: fixed; - z-index: 1000; - left: 0; - top: 0; - width: 100%; - height: 100%; - overflow: auto; - background-color: rgba(0, 0, 0, 0.9); -} -.tipue_search_image_close -{ - position: absolute; - top: 0; - right: 0; - font: 22px/1 'Source Code Pro', monospace; - color: #ccc; - padding: 25px 30px; - cursor: pointer; -} -.tipue_search_image_block -{ - margin: 0 auto; - max-width: 900px; - padding: 73px 30px 30px 30px; - box-sizing: border-box; - color: #fff; -} -#tipue_search_zoom_img -{ - max-width: 100%; - height: auto; -} - -#tipue_search_zoom_text, .tipue_search_zoom_options -{ - padding-top: 9px; -} - - -/* footer */ - - -#tipue_search_foot -{ - margin: 51px 0 21px 0; -} -#tipue_search_foot_boxes -{ - font: 14px 'Source Code Pro', sans-serif; - text-transform: uppercase; - color: #333; - padding: 0; - margin: 0; - cursor: pointer; -} -#tipue_search_foot_boxes li -{ - display: inline; - list-style: none; - margin: 0; - padding: 0; -} -#tipue_search_foot_boxes li a -{ - background-color: #f7f7f7; - color: #666; - padding: 10px 17px 11px 17px; - border-radius: 3px; - margin-right: 7px; - text-decoration: none; - text-align: center; - transition: 0.3s; -} -#tipue_search_foot_boxes li.current -{ - background: #252525; - color: #ccc; - padding: 10px 17px 11px 17px; - border-radius: 3px; - margin-right: 7px; - text-align: center; -} -#tipue_search_foot_boxes li a:hover -{ - background: #252525; - color: #ccc; -} - diff --git a/static/tipuesearch/tipuesearch.min.js b/static/tipuesearch/tipuesearch.min.js deleted file mode 100644 index b266c68..0000000 --- a/static/tipuesearch/tipuesearch.min.js +++ /dev/null @@ -1,611 +0,0 @@ - -/* -Tipue Search 7.1 -Copyright (c) 2019 Tipue -Tipue Search is released under the MIT License -http://www.tipue.com/search -*/ - - -(function($) { - - $.fn.tipuesearch = function(options) { - - var set = $.extend( { - - 'contextBuffer' : 60, - 'contextLength' : 60, - 'contextStart' : 90, - 'debug' : false, - 'descriptiveWords' : 25, - 'footerPages' : 3, - 'highlightTerms' : true, - 'imageZoom' : true, - 'minimumLength' : 3, - 'newWindow' : false, - 'show' : 10, - 'showContext' : true, - 'showRelated' : true, - 'showTime' : true, - 'showTitleCount' : true, - 'showURL' : true, - 'wholeWords' : true - }, options); - - return this.each(function() { - - var tipuesearch_t_c = 0; - - var tipue_search_w = ''; - if (set.newWindow) - { - tipue_search_w = ' target="_blank"'; - } - - function getURLP(name) - { - var locSearch = location.search; - var splitted = (new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(locSearch)||[,""]); - var searchString = splitted[1].replace(/\+/g, '%20'); - try - { - searchString = decodeURIComponent(searchString); - } - catch(e) - { - searchString = unescape(searchString); - } - return searchString || null; - } - - if (getURLP('q')) - { - $('#tipue_search_input').val(getURLP('q')); - getTipueSearch(0, true); - } - - $(this).keyup(function(event) - { - if(event.keyCode == '13') - { - getTipueSearch(0, true); - } - }); - - - function getTipueSearch(start, replace) - { - window.scrollTo(0, 0); - - var out = ''; - var show_replace = false; - var show_stop = false; - var standard = true; - var c = 0; - var found = []; - - var d_o = $('#tipue_search_input').val(); - d_o = d_o.replace(/\+/g, ' ').replace(/\s\s+/g, ' '); - - d_o = $.trim(d_o); - var d = d_o.toLowerCase(); - - if ((d.match("^\"") && d.match("\"$")) || (d.match("^'") && d.match("'$"))) - { - standard = false; - } - - var d_w = d.split(' '); - - if (standard) - { - d = ''; - for (var i = 0; i < d_w.length; i++) - { - var a_w = true; - for (var f = 0; f < tipuesearch_stop_words.length; f++) - { - if (d_w[i] == tipuesearch_stop_words[f]) - { - a_w = false; - show_stop = true; - } - } - if (a_w) - { - d = d + ' ' + d_w[i]; - } - } - d = $.trim(d); - d_w = d.split(' '); - } - else - { - d = d.substring(1, d.length - 1); - } - - if (d.length >= set.minimumLength) - { - if (standard) - { - if (replace) - { - var d_r = d; - for (var i = 0; i < d_w.length; i++) - { - for (var f = 0; f < tipuesearch_replace.words.length; f++) - { - if (d_w[i] == tipuesearch_replace.words[f].word) - { - d = d.replace(d_w[i], tipuesearch_replace.words[f].replace_with); - show_replace = true; - } - } - } - d_w = d.split(' '); - } - - var d_t = d; - for (var i = 0; i < d_w.length; i++) - { - for (var f = 0; f < tipuesearch_stem.words.length; f++) - { - if (d_w[i] == tipuesearch_stem.words[f].word) - { - d_t = d_t + ' ' + tipuesearch_stem.words[f].stem; - } - } - } - d_w = d_t.split(' '); - - for (var i = 0; i < tipuesearch.pages.length; i++) - { - var score = 0; - var s_t = tipuesearch.pages[i].text; - for (var f = 0; f < d_w.length; f++) - { - if (set.wholeWords) - { - var pat = new RegExp('\\b' + d_w[f] + '\\b', 'gi'); - } - else - { - var pat = new RegExp(d_w[f], 'gi'); - } - if (tipuesearch.pages[i].title.search(pat) != -1) - { - var m_c = tipuesearch.pages[i].title.match(pat).length; - score += (20 * m_c); - } - if (tipuesearch.pages[i].text.search(pat) != -1) - { - var m_c = tipuesearch.pages[i].text.match(pat).length; - score += (20 * m_c); - } - if (tipuesearch.pages[i].tags) - { - if (tipuesearch.pages[i].tags.search(pat) != -1) - { - var m_c = tipuesearch.pages[i].tags.match(pat).length; - score += (10 * m_c); - } - } - if (tipuesearch.pages[i].url.search(pat) != -1) - { - score += 20; - } - - if (score != 0) - { - for (var e = 0; e < tipuesearch_weight.weight.length; e++) - { - if (tipuesearch.pages[i].url == tipuesearch_weight.weight[e].url) - { - score += tipuesearch_weight.weight[e].score; - } - } - } - - if (d_w[f].match('^-')) - { - pat = new RegExp(d_w[f].substring(1), 'i'); - if (tipuesearch.pages[i].title.search(pat) != -1 || tipuesearch.pages[i].text.search(pat) != -1 || tipuesearch.pages[i].tags.search(pat) != -1) - { - score = 0; - } - } - } - - if (score != 0) - { - found.push( - { - "score": score, - "title": tipuesearch.pages[i].title, - "desc": s_t, - "img": tipuesearch.pages[i].img, - "url": tipuesearch.pages[i].url, - "note": tipuesearch.pages[i].note - }); - c++; - } - } - } - else - { - for (var i = 0; i < tipuesearch.pages.length; i++) - { - var score = 0; - var s_t = tipuesearch.pages[i].text; - var pat = new RegExp(d, 'gi'); - if (tipuesearch.pages[i].title.search(pat) != -1) - { - var m_c = tipuesearch.pages[i].title.match(pat).length; - score += (20 * m_c); - } - if (tipuesearch.pages[i].text.search(pat) != -1) - { - var m_c = tipuesearch.pages[i].text.match(pat).length; - score += (20 * m_c); - } - if (tipuesearch.pages[i].tags) - { - if (tipuesearch.pages[i].tags.search(pat) != -1) - { - var m_c = tipuesearch.pages[i].tags.match(pat).length; - score += (10 * m_c); - } - } - if (tipuesearch.pages[i].url.search(pat) != -1) - { - score += 20; - } - - if (score != 0) - { - for (var e = 0; e < tipuesearch_weight.weight.length; e++) - { - if (tipuesearch.pages[i].url == tipuesearch_weight.weight[e].url) - { - score += tipuesearch_weight.weight[e].score; - } - } - } - - if (score != 0) - { - found.push( - { - "score": score, - "title": tipuesearch.pages[i].title, - "desc": s_t, - "img": tipuesearch.pages[i].img, - "url": tipuesearch.pages[i].url, - "note": tipuesearch.pages[i].note - }); - c++; - } - } - } - - if (c != 0) - { - if (set.showTitleCount && tipuesearch_t_c == 0) - { - var title = document.title; - document.title = '(' + c + ') ' + title; - tipuesearch_t_c++; - } - - if (c == 1) - { - out += '
        ' + tipuesearch_string_4; - } - else - { - var c_c = c.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); - out += '
        ' + c_c + ' ' + tipuesearch_string_5; - } - if (set.showTime) - { - var endTimer = new Date().getTime(); - var time = (endTimer - startTimer) / 1000; - out += ' (' + time.toFixed(2) + ' ' + tipuesearch_string_14 + ')'; - set.showTime = false; - } - out += '
        '; - - if (set.showRelated && standard) - { - var ront = ''; - f = 0; - for (var i = 0; i < tipuesearch_related.Related.length; i++) - { - if (d == tipuesearch_related.Related[i].search) - { - if (!f) - { - out += ''; - out += ront; - } - } - - if (show_replace) - { - out += '
        ' + tipuesearch_string_2 + ' ' + d + '. ' + tipuesearch_string_3 + ' ' + d_r + '
        '; - } - - found.sort(function(a, b) { return b.score - a.score } ); - - var l_o = 0; - - if (set.imageZoom) - { - out += '
        '; - } - - for (var i = 0; i < found.length; i++) - { - if (l_o >= start && l_o < set.show + start) - { - out += '
        '; - - out += ''; - - if (set.debug) - { - out += '
        Score: ' + found[i].score + '
        '; - } - - if (set.showURL) - { - var s_u = found[i].url.toLowerCase(); - if (s_u.indexOf('http://') == 0) - { - s_u = s_u.slice(7); - } - out += ''; - } - - if (found[i].img) - { - if (set.imageZoom) - { - out += '
        ' + found[i].title + '
        '; - } - else - { - out += '
        ' + found[i].title + '
        '; - } - } - - if (found[i].desc) - { - var t = found[i].desc; - - if (set.showContext) - { - d_w = d.split(' '); - var s_1 = found[i].desc.toLowerCase().indexOf(d_w[0]); - if (s_1 > set.contextStart) - { - var t_1 = t.substr(s_1 - set.contextBuffer); - var s_2 = t_1.indexOf(' '); - t_1 = t.substr(s_1 - set.contextBuffer + s_2); - t_1 = $.trim(t_1); - - if (t_1.length > set.contextLength) - { - t = '... ' + t_1; - } - } - } - - if (standard) - { - d_w = d.split(' '); - for (var f = 0; f < d_w.length; f++) - { - if (set.highlightTerms) - { - var patr = new RegExp('(' + d_w[f] + ')', 'gi'); - t = t.replace(patr, "$1"); - } - } - } - else if (set.highlightTerms) - { - var patr = new RegExp('(' + d + ')', 'gi'); - t = t.replace(patr, "$1"); - } - - var t_d = ''; - var t_w = t.split(' '); - if (t_w.length < set.descriptiveWords) - { - t_d = t; - } - else - { - for (var f = 0; f < set.descriptiveWords; f++) - { - t_d += t_w[f] + ' '; - } - } - t_d = $.trim(t_d); - if (t_d.charAt(t_d.length - 1) != '.') - { - t_d += ' ...'; - } - - t_d = t_d.replace(/h0011/g, 'span class=\"tipue_search_content_bold\"'); - t_d = t_d.replace(/h0012/g, '/span'); - - out += '
        ' + t_d + '
        '; - } - - if (found[i].note) - { - out += '
        ' + found[i].note + '
        '; - } - - out += '
        '; - } - l_o++; - } - - if (c > set.show) - { - var pages = Math.ceil(c / set.show); - var page = (start / set.show); - if (set.footerPages < 3) - { - set.footerPages = 3; - } - - out += '
          '; - - if (start > 0) - { - out += '
        • ' + tipuesearch_string_6 + '
        • '; - } - - if (page <= 2) - { - var p_b = pages; - if (pages > set.footerPages) - { - p_b = set.footerPages; - } - for (var f = 0; f < p_b; f++) - { - if (f == page) - { - out += ''; - } - else - { - out += '
        • ' + (f + 1) + '
        • '; - } - } - } - else - { - var p_b = page + set.footerPages - 1; - if (p_b > pages) - { - p_b = pages; - } - for (var f = page - 1; f < p_b; f++) - { - if (f == page) - { - out += ''; - } - else - { - out += '
        • ' + (f + 1) + '
        • '; - } - } - } - - if (page + 1 != pages) - { - out += '
        • ' + tipuesearch_string_7 + '
        • '; - } - - out += '
        '; - } - - } - else - { - out += '
        ' + tipuesearch_string_8 + '
        '; - } - } - else - { - if (show_stop) - { - out += '
        ' + tipuesearch_string_8 + ' ' + tipuesearch_string_9 + '
        '; - } - else - { - if (set.minimumLength == 1) - { - out += '
        ' + tipuesearch_string_11 + '
        '; - } - else - { - out += '
        ' + tipuesearch_string_12 + ' ' + set.minimumLength + ' ' + tipuesearch_string_13 + '
        '; - } - } - } - - $('#tipue_search_content').hide().html(out).slideDown(200); - - $('#tipue_search_replaced').click(function() - { - getTipueSearch(0, false); - }); - - $('.tipue_search_related_btn').click(function() - { - $('#tipue_search_input').val($(this).attr('id')); - getTipueSearch(0, true); - }); - - $('.tipue_search_image_zoom').click(function() - { - $('#tipue_search_image_modal').fadeIn(300); - $('#tipue_search_zoom_img').attr('src', this.src); - - var z_u = $(this).attr('data-url'); - $('#tipue_search_zoom_url').attr('href', z_u); - - var z_o = this.alt + ''; - - $('#tipue_search_zoom_text').html(z_o); - }); - - $('.tipue_search_image_close').click(function() - { - $('#tipue_search_image_modal').fadeOut(300); - }); - - $('.tipue_search_foot_box').click(function() - { - var id_v = $(this).attr('id'); - var id_a = id_v.split('_'); - - getTipueSearch(parseInt(id_a[0]), id_a[1]); - }); - } - - }); - }; - -})(jQuery); diff --git a/static/tipuesearch/tipuesearch_content.js b/static/tipuesearch/tipuesearch_content.js deleted file mode 100644 index 1c383d4..0000000 --- a/static/tipuesearch/tipuesearch_content.js +++ /dev/null @@ -1,17 +0,0 @@ - -var tipuesearch = {"pages": [ - {"title": "Tipue", "text": "Tipue is a small web development studio based in North London.", "url": "http://www.tipue.com"}, - {"title": "Tipue Search", "text": "Tipue Search. A site search jQuery plugin. It's free, open source and fast. Tipue Search only needs a browser that supports jQuery. It doesn't need MySQL or similar, Tipue Search uses a JavaScript object for content.", "tags": "JavaScript", "url": "http://www.tipue.com/search"}, - {"title": "Tipue Slide", "text": "Tipue Slide is a sliding panel site search jQuery plugin. It's free, open source and fast.", "url": "http://www.tipue.com/slide"}, - {"title": "About Tipue", "text": "Tipue is a small web development studio based in North London, founded in 2001. We design innovative and original JavaScript and jQuery plugins, which we connect to servers and MySQL databases with fast, heavy-duty Perl.", "url": "http://www.tipue.com/is"}, - {"title": "Tipr", "text": "Tipr. A small and simple jQuery tooltip plugin. It's free and open source. Small, simple, flat, cool. Tipr is a jQuery tooltip plugin. It works on almost any element, and reacts to the size of the viewport. Tipr is free and open source.", "tags": "JavaScript", "url": "http://www.tipue.com/tipr"}, - {"title": "Tipue Support", "text": "Tipue support. We offer a range of flexible support plans for our products, services and jQuery plugins, including free.", "url": "http://www.tipue.com/support"}, - {"title": "Playing with CSS Sticky Positioning", "text": "While the fixed and sticky position elements seems rather similar, the sticky element maintains its position only within its containing block. Sticky is relative, which allows all sorts of potential creativity.", "img": "http://www.tipue.com/img/sony.jpg", "tags": "Tipue Blog", "note": "More articles", "url": "http://www.tipue.com/blog/css-sticky"}, - {"title": "The Complete Guide to Centering a Div", "text": "Every developer inevitably finds that centering a div isn't as obvious as you'd expect. Centering what's inside a div horizontally is easy but then things tend to get a bit sticky. When you get to centering a div vertically, you can end up in a world of CSS hurt.", "tags": "Tipue Blog", "note": "More articles", "url": "http://www.tipue.com/blog/center-a-div"}, - {"title": "Cool CSS Radio Buttons and Checkboxes", "text": "Hip and easy radio button and checkbox form elements styled with CSS.", "tags": "Tipue Blog", "note": "More articles", "url": "http://www.tipue.com/blog/radio-checkbox"}, - {"title": "Hacking CSS Writing Mode", "text": "The writing-mode CSS property sets horizontal and vertical text direction. While meant for multilingual purposes, it can be exploited for design.", "img": "http://www.tipue.com/img/tran.jpg", "tags": "Tipue Blog", "note": "More articles", "url": "http://www.tipue.com/blog/css-writing-mode"}, - {"title": "Using Vw and Vh", "text": "Viewport width (vw) and viewport height (vh) are viewport-percentage values introduced in CSS3. Given how powerful they are, and with almost complete browser support, they should be everywhere.", "tags": "Tipue Blog", "note": "More articles", "url": "http://www.tipue.com/blog/css3-vw-vh"}, - {"title": "Using CSS Feature Queries", "text": "CSS feature queries are now supported everywhere. They allow you to use cutting edge CSS with subtle and precise feature detection.", "tags": "Tipue Blog", "note": "More articles", "url": "http://www.tipue.com/blog/feature-queries"}, - {"title": "A Very Simple CSS Background Zoom", "text": "A really easy method of creating a CSS background image zoom. Not only is this simple, it comes with wide browser support.", "tags": "Tipue Blog", "note": "More articles", "url": "http://www.tipue.com/blog/css-background-zoom"}, - {"title": "Using Z-index", "text": "The CSS z-index property often trips up both new and experienced developers. The aim of this article is to boil down a somewhat-complex specification to three major points, which should ease most z-index pain.", "tags": "Tipue Blog", "note": "More articles", "url": "http://www.tipue.com/blog/z-index"} -]}; diff --git a/static/tipuesearch/tipuesearch_set.js b/static/tipuesearch/tipuesearch_set.js deleted file mode 100644 index 5758b5b..0000000 --- a/static/tipuesearch/tipuesearch_set.js +++ /dev/null @@ -1,84 +0,0 @@ - -/* -Tipue Search 7.1 -Copyright (c) 2019 Tipue -Tipue Search is released under the MIT License -http://www.tipue.com/search -*/ - - -/* -Stop words -Stop words list from http://www.ranks.nl/stopwords -*/ - -var tipuesearch_stop_words = ["a", "above", "after", "again", "against", "all", "am", "an", "and", "any", "are", "aren't", "as", "at", "be", "because", "been", "before", "being", "below", "between", "both", "but", "by", "can't", "cannot", "could", "couldn't", "did", "didn't", "do", "does", "doesn't", "doing", "don't", "down", "during", "each", "few", "for", "from", "further", "had", "hadn't", "has", "hasn't", "have", "haven't", "having", "he", "he'd", "he'll", "he's", "her", "here", "here's", "hers", "herself", "him", "himself", "his", "how", "how's", "i", "i'd", "i'll", "i'm", "i've", "if", "in", "into", "is", "isn't", "it", "it's", "its", "itself", "let's", "me", "more", "most", "mustn't", "my", "myself", "no", "nor", "not", "of", "off", "on", "once", "only", "or", "other", "ought", "our", "ours", "ourselves", "out", "over", "own", "same", "shan't", "she", "she'd", "she'll", "she's", "should", "shouldn't", "so", "some", "such", "than", "that", "that's", "the", "their", "theirs", "them", "themselves", "then", "there", "there's", "these", "they", "they'd", "they'll", "they're", "they've", "this", "those", "through", "to", "too", "under", "until", "up", "very", "was", "wasn't", "we", "we'd", "we'll", "we're", "we've", "were", "weren't", "what", "what's", "when", "when's", "where", "where's", "which", "while", "who", "who's", "whom", "why", "why's", "with", "won't", "would", "wouldn't", "you", "you'd", "you'll", "you're", "you've", "your", "yours", "yourself", "yourselves"]; - - -// Word replace - -var tipuesearch_replace = {'words': [ - {'word': 'tip', 'replace_with': 'tipue'}, - {'word': 'javscript', 'replace_with': 'javascript'}, - {'word': 'jqeury', 'replace_with': 'jquery'} -]}; - - -// Weighting - -var tipuesearch_weight = {'weight': [ - {'url': 'http://www.tipue.com', 'score': 60}, - {'url': 'http://www.tipue.com/search', 'score': 60}, - {'url': 'http://www.tipue.com/tipr', 'score': 30}, - {'url': 'http://www.tipue.com/support', 'score': 20} -]}; - - -// Illogical stemming - -var tipuesearch_stem = {'words': [ - {'word': 'e-mail', 'stem': 'email'}, - {'word': 'javascript', 'stem': 'jquery'}, - {'word': 'javascript', 'stem': 'js'} -]}; - - -// Related - -var tipuesearch_related = {'Related': [ - {'search': 'tipue', 'related': 'Search', 'include': 1}, - {'search': 'tipue', 'related': 'jQuery'}, - {'search': 'tipue', 'related': 'Blog'}, - {'search': 'tipue', 'related': 'Support'}, - {'search': 'tipue search', 'related': 'Demo', 'include': 1}, - {'search': 'tipue search', 'related': 'Support'} -]}; - - -// Internal strings - -var tipuesearch_string_1 = 'No title'; -var tipuesearch_string_2 = 'Showing results for'; -var tipuesearch_string_3 = 'Search instead for'; -var tipuesearch_string_4 = '1 result'; -var tipuesearch_string_5 = 'results'; -var tipuesearch_string_6 = '<'; -var tipuesearch_string_7 = '>'; -var tipuesearch_string_8 = 'Nothing found.'; -var tipuesearch_string_9 = 'Common words are largely ignored.'; -var tipuesearch_string_10 = 'Related'; -var tipuesearch_string_11 = 'Search should be one character or more.'; -var tipuesearch_string_12 = 'Search should be'; -var tipuesearch_string_13 = 'characters or more.'; -var tipuesearch_string_14 = 'seconds'; -var tipuesearch_string_15 = 'Open Image'; -var tipuesearch_string_16 = 'Goto Page'; - - -// Internals - - -// Timer for showTime - -var startTimer = new Date().getTime(); - diff --git a/templates/base.html b/templates/base.html index 7f46daa..0c3ff20 100644 --- a/templates/base.html +++ b/templates/base.html @@ -62,10 +62,6 @@ - {% if 'tipue_search' in PLUGINS %} - - - {% endif %} {% if DOCUTIL_CSS %} {% endif %} @@ -112,6 +108,9 @@ {%- endif %} + {% if 'search' in PLUGINS %} + + {% endif %} @@ -144,68 +143,11 @@ -->
      - {% if 'tipue_search' in PLUGINS %} -
      -
      - - -
      -
      + {% if 'search' in PLUGINS %} + Search: +
      {% endif %} - - @@ -275,6 +217,15 @@ {% include 'includes/liquid_tags_nb_footer.html' %} {% endif %} - {% block scripts %}{% endblock %} + {% block scripts %} + {% if 'search' in PLUGINS %} + + + {% endif %} + {% endblock %} diff --git a/templates/search.html b/templates/search.html index 06ca102..fb11f8c 100644 --- a/templates/search.html +++ b/templates/search.html @@ -4,26 +4,6 @@ {{ _('Search') }} - {{ super() }} {% endblock %} -{% block scripts %} - {% if 'assets' in PLUGINS %} - {% include 'includes/minify_tipuesearch.html' with context %} - {% else %} - - - - {% endif %} - -{% endblock %} - {% block content %} -
      +
      {% endblock %}