diff --git a/pelicanconf.py b/pelicanconf.py index 840041f5..af9cc299 100644 --- a/pelicanconf.py +++ b/pelicanconf.py @@ -14,7 +14,6 @@ if '1' == os.environ.get('TWIR_NEWSLETTER_THEME'): else: THEME = 'themes/rusted' -THEME_STATIC_DIR = THEME + '/static' PLUGIN_PATHS = ["plugins"] PLUGINS = ['assets', 'neighbors'] @@ -48,9 +47,7 @@ scattered about. """ } -SEARCH_HTML_SELECTOR = "article" - -PLUGINS = ['webassets', 'search'] +PLUGINS = ['webassets'] MARKDOWN = { 'extension_configs': { diff --git a/publishing/Dockerfile b/publishing/Dockerfile index afb143be..9ca82464 100644 --- a/publishing/Dockerfile +++ b/publishing/Dockerfile @@ -12,9 +12,6 @@ ENV LC_ALL='en_US.UTF-8' RUN ln -s /usr/bin/python3.8 /usr/bin/python COPY requirements.txt . RUN pip3 install -r requirements.txt -RUN curl https://files.stork-search.net/releases/v1.5.0/stork-ubuntu-20-04 -o stork \ - && chmod +x stork \ - && mv ./stork /usr/bin/stork # sass/juice RUN apt-get install -y curl @@ -29,7 +26,7 @@ COPY plugins plugins COPY themes themes COPY pelicanconf.py pelicanconf.py -COPY publishing/*.sh ./ +COPY publishing/*.sh . RUN chmod 777 *.sh CMD ["pelican", "--delete-output-directory", "content"] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index b2752a42..0474233f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,4 +6,3 @@ Markdown==3.3.7 markupsafe==2.0.1 pelican==4.7.1 pelican-webassets==2.0.0 -pelican-search==1.0.1 \ No newline at end of file diff --git a/themes/rusted/static/css/_homepage.scss b/themes/rusted/static/css/_homepage.scss index 4394a0a7..a8e023cd 100644 --- a/themes/rusted/static/css/_homepage.scss +++ b/themes/rusted/static/css/_homepage.scss @@ -10,5 +10,4 @@ .subtext { margin-left: 50px; margin-right: 50px; - text-align: center; } diff --git a/themes/rusted/static/css/_layout.scss b/themes/rusted/static/css/_layout.scss index 0eee615c..198f6b8a 100644 --- a/themes/rusted/static/css/_layout.scss +++ b/themes/rusted/static/css/_layout.scss @@ -58,28 +58,6 @@ body > footer { font-size: 20px; } -/** - * Search - */ - .search { - li.nav-header h2 { - border-bottom: 1px solid $grey-colour-light; - } - - li { - line-height: 1.8; - } -} - -.stork-close-button { - right: 15px; - top: 149px; - bottom: unset; -} - -.stork-progress { - position: relative; -} /** * Page content diff --git a/themes/rusted/static/css/stork-dark.css b/themes/rusted/static/css/stork-dark.css deleted file mode 100644 index 96f2b21c..00000000 --- a/themes/rusted/static/css/stork-dark.css +++ /dev/null @@ -1,38 +0,0 @@ -@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/themes/rusted/static/css/stork.css b/themes/rusted/static/css/stork.css deleted file mode 100644 index 381c7866..00000000 --- a/themes/rusted/static/css/stork.css +++ /dev/null @@ -1,212 +0,0 @@ -: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/themes/rusted/static/js/stork.js b/themes/rusted/static/js/stork.js deleted file mode 100644 index b464ecd5..00000000 --- a/themes/rusted/static/js/stork.js +++ /dev/null @@ -1,2 +0,0 @@ -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/themes/rusted/static/js/stork.js.map b/themes/rusted/static/js/stork.js.map deleted file mode 100644 index 8febdbce..00000000 --- a/themes/rusted/static/js/stork.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stork.js","mappings":"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","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/themes/rusted/static/js/stork.wasm b/themes/rusted/static/js/stork.wasm deleted file mode 100644 index 4394eb23..00000000 Binary files a/themes/rusted/static/js/stork.wasm and /dev/null differ diff --git a/themes/rusted/templates/base.html b/themes/rusted/templates/base.html index 57090a8a..f7bc27d7 100644 --- a/themes/rusted/templates/base.html +++ b/themes/rusted/templates/base.html @@ -32,8 +32,6 @@ - - {% assets filters="libsass,cssmin", output="css/web-min.css", "css/main.scss" %} diff --git a/themes/rusted/templates/index.html b/themes/rusted/templates/index.html index 3a26a111..1a30b20d 100644 --- a/themes/rusted/templates/index.html +++ b/themes/rusted/templates/index.html @@ -27,22 +27,5 @@ -
    - -
    {% endblock content %}