feat(ui): Significant UI work in design, functionality

This commit is contained in:
Linus Lee
2021-07-04 03:16:37 -04:00
parent 984c46d861
commit 3f39b5dea9
8 changed files with 270 additions and 87 deletions

View File

@@ -7,10 +7,11 @@ f := std.format
` constants `
Newline := char(10)
MaxResultPadChars := 140 ` tweet size `
MaxPreviewChars := 500
LoadedModules := []
Modules := [
'www'
'entr'
'lifelog'
'ligature'
@@ -28,15 +29,17 @@ escapeHTML := s => (
` TODO: make correct `
escapeRegExp := s => s
applyHighlights := (s, query) => (
s := escapeHTML(s)
` TODO: explain why this is needed `
fastSlice := (s, start, end) => bind(str(s), 'substring')(start, end)
applyHighlights := query => (
queryTokens := keys(tokenize(State.query))
replacementRegExpStr := '(^|\\W)(' + cat(escapeRegExp(queryTokens), '|') + ')'
replacementRegExp := jsnew(RegExp, [str(replacementRegExpStr), str('ig')])
` calling out to JavaScript's native String.prototype.replace so we
can run a replace with a native RegExp. `
bind(str(s), 'replaceAll')(
s => bind(str(escapeHTML(s)), 'replaceAll')(
replacementRegExp
'$1<span class="search-highlight">$2</span>'
)
@@ -49,7 +52,9 @@ State := {
docs: {}
index: ()
results: []
searchElapsedMs: 0
selectedIdx: 0
showPreview: false
}
fetchModuleDocs := moduleKey => (
@@ -90,7 +95,7 @@ SearchBox := () => h('div', ['search-box'], [
)
])
SearchResult := (doc, i) => h(
SearchResult := (doc, i, highlighter) => hae(
'li'
[
'search-result'
@@ -99,40 +104,46 @@ SearchResult := (doc, i) => h(
_ -> ''
}
]
[
(
container := bind(document, 'createElement')('div')
container.className := 'search-result-content'
container.onclick := evt => render(State.selectedIdx := i)
container.innerHTML := (
content := (MaxResultPadChars * 2 > doc.content :: {
true -> doc.content
` TODO: make it surround the first highlight `
_ -> slice(doc.content, 0, MaxResultPadChars * 2)
})
applyHighlights(content, State.query)
)
container
{}
{
click: evt => (
State.selectedIdx := i
State.showPreview? := true
render()
)
}
[
` for efficiency, we do not generate a new element every time and
instead try to reuse elements on the page if there are any. `
existingEl := querySelector('[data-doc-id="' + doc.id + '"]') :: {
() -> (
container := bind(document, 'createElement')('div')
bind(container, 'setAttribute')('data-doc-id', doc.id)
container.className := 'search-result-content'
container.innerHTML := highlighter(fastSlice(doc.content, 0, MaxPreviewChars))
container
)
_ -> existingEl
}
]
)
SearchResults := () => h('div', ['search-results'], [
h('ol', ['search-results-list'], (
map(State.results, (result, i) => SearchResult(result, i))
highlighter := applyHighlights(State.query)
map(State.results, (result, i) => SearchResult(result, i, highlighter))
))
])
Sidebar := () => h('div', ['sidebar'], [
SearchBox()
State.index :: {
() -> 'loading index...'
_ -> ()
}
h('div', ['sidebar-result-stats'], [
f('{{ 0 }} results in {{ 1 }}ms', [len(State.results), 100])
h('div', ['sidebar-stats'], [
State.index :: {
() -> 'loading index...'
_ -> h('div', ['sidebar-result-stats'], [
f('{{ 0 }} results in {{ 1 }}ms', [len(State.results), State.searchElapsedMs])
])
}
])
SearchResults()
])
@@ -142,20 +153,23 @@ DocPreview := () => h('div', ['doc-preview'], [
() -> h('div', ['doc-preview-empty'], [
'Select a result to view it here.'
])
_ -> (
container := bind(document, 'createElement')('div')
container.className := 'doc-preview-content'
container.innerHTML := applyHighlights(selectedDoc.content, State.query)
container
)
_ -> h('div', ['doc-preview-content'], (
highlighter := applyHighlights(State.query)
map(split(selectedDoc.content, Newline), para => (
p := bind(document, 'createElement')('p')
p.innerHTML := highlighter(para)
p
))
))
}
])
` state updaters `
updateResults := () => (
` TODO: search algorithm `
start := time()
State.results := findDocs(State.index, State.docs, State.query)
State.searchElapsedMs := floor((time() - start) * 1000)
State.selectedIdx := 0
render()
)
@@ -171,7 +185,9 @@ render := () => update(h(
['app']
[
Sidebar()
DocPreview()
State.showPreview? :: {
true -> DocPreview()
}
]
))
@@ -202,6 +218,8 @@ bind(document.body, 'addEventListener')('keydown', evt => evt.key :: {
}
'ArrowUp' -> selectUp(evt)
'ArrowDown' -> selectDown(evt)
'Enter' -> render(State.showPreview? := true)
'Escape' -> render(State.showPreview? := false)
'/' -> searchBox := querySelector('.search-box-input') :: {
() -> ()
_ -> (

View File

@@ -26,6 +26,7 @@ findDocs := searcher.findDocs
` modules `
Modules := {
www: load('../modules/www')
entr: load('../modules/entr')
lifelog: load('../modules/lifelog')
ligature: load('../modules/ligature')

View File

@@ -12,6 +12,7 @@ body {
--sans: 'IBM Plex Sans', sans-serif;
--mono: 'IBM Plex Mono', monospace;
--sidebar-width: 450px;
/* color variables taken from Merlot */
--primary-bg: #f9fafb;
@@ -123,57 +124,133 @@ textarea {
}
.sidebar {
width: 300px;
flex-grow: 0;
flex-shrink: 0;
width: 0;
flex-grow: 1;
display: flex;
flex-direction: column;
padding: 12px;
box-sizing: border-box;
}
.search-box,
.search-results,
.doc-preview-content {
background: var(--primary-bg);
box-shadow: 0 2px 8px rgb(0 0 0 / 20%);
margin: 12px;
border-radius: 8px;
}
.search-box-input {
padding: 8px 12px;
border: 0;
background: transparent;
height: 100%;
width: 100%;
box-sizing: border-box;
}
.search-results {
height: 0;
flex-grow: 1;
overflow-y: auto;
}
.search-results ol.search-results-list {
padding-left: 0;
margin: 0;
}
li.search-result {
list-style: none;
background: var(--primary-bg);
margin-bottom: 8px;
border-radius: 6px;
box-shadow: 0 2px 6px rgb(0 0 0 / 20%);
padding: 4px 6px;
cursor: pointer;
}
.search-result:hover {
background: var(--hover-bg);
background: var(--primary-bg);
cursor: pointer;
font-weight: normal;
padding: 5px 12px;
border-bottom: 1px solid var(--active-bg);
}
.search-result.selected {
background: var(--active-bg);
}
.search-result:hover {
background: var(--hover-bg);
}
.search-result .search-result-content {
overflow: hidden;
line-height: 1.4em;
font-size: 14px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.doc-preview {
width: 0;
flex-grow: 1;
width: calc(100% - var(--sidebar-width));
max-width: 800px;
overflow-y: auto;
}
/* Merlot Markdown output styles */
.doc-preview-content {
white-space: pre-wrap;
background: var(--primary-bg);
margin: 12px 12px 32px 12px;
padding: 1em;
}
.doc-preview-content h1:first-child,
.doc-preview-content h2:first-child,
.doc-preview-content p:first-child {
margin-top: 0;
}
.doc-preview-content p,
.doc-preview-content li {
line-height: 1.5em;
}
.doc-preview-content strike {
color: var(--secondary-text);
}
.doc-preview-content img {
max-width: 100%;
}
.doc-preview-content a {
color: var(--primary-text);
text-decoration: underline;
}
.doc-preview-content pre,
.doc-preview-content code {
background: var(--hover-bg);
font-size: 1em;
font-family: 'IBM Plex Mono', 'Menlo', 'Monaco', monospace;
}
.doc-preview-content pre {
border-radius: 4px;
box-sizing: border-box;
padding: 12px 8px;
overflow-x: auto;
}
.doc-preview-content code {
padding: 1px 5px;
border-radius: 4px;
}
.doc-preview-content pre code {
padding: 0;
}
.doc-preview-content blockquote {
margin: 0;
border-left: 4px solid var(--active-bg);
padding-left: 1em;
display: block;
}

View File

@@ -31,9 +31,9 @@ map = (() => {let __ink_acc_trgt = __as_ink_string(std); return __is_ink_string(
reduce = (() => {let __ink_acc_trgt = __as_ink_string(std); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[reduce] || null : (__ink_acc_trgt.reduce !== undefined ? __ink_acc_trgt.reduce : null)})();
sortBy = (() => {let __ink_acc_trgt = __as_ink_string(quicksort); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[sortBy] || null : (__ink_acc_trgt.sortBy !== undefined ? __ink_acc_trgt.sortBy : null)})();
docTermFrequency = (doc, token) => (() => {let __ink_acc_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[tokens] || null : (__ink_acc_trgt.tokens !== undefined ? __ink_acc_trgt.tokens : null)})()); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return token })()] || null : (__ink_acc_trgt[(() => { return token })()] !== undefined ? __ink_acc_trgt[(() => { return token })()] : null)})();
docInverseFrequency = (doc, token) => ln(((() => {let __ink_acc_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[tokens] || null : (__ink_acc_trgt.tokens !== undefined ? __ink_acc_trgt.tokens : null)})()); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return token })()] || null : (__ink_acc_trgt[(() => { return token })()] !== undefined ? __ink_acc_trgt[(() => { return token })()] : null)})() / len((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[tokens] || null : (__ink_acc_trgt.tokens !== undefined ? __ink_acc_trgt.tokens : null)})())));
docTFIDF = (doc, token) => (docTermFrequency(doc, token) * docInverseFrequency(doc, token));
rankDocs = (matchingDocs, queryTokens) => sortBy(matchingDocs, doc => (() => { let tokenScores; tokenScores = map(queryTokens, token => docTFIDF(doc, token)); return __ink_negate(reduce(tokenScores, (a, b) => __as_ink_string(a + b), 0)) })())
docInverseFrequency = (doc, token, lenDocs) => ln((lenDocs / len((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[tokens] || null : (__ink_acc_trgt.tokens !== undefined ? __ink_acc_trgt.tokens : null)})())));
docTFIDF = (doc, token, lenDocs) => (docTermFrequency(doc, token) * docInverseFrequency(doc, token, lenDocs));
rankDocs = (matchingDocs, queryTokens, lenDocs) => sortBy(matchingDocs, doc => (() => { let tokenScores; tokenScores = map(queryTokens, token => docTFIDF(doc, token, lenDocs)); return __ink_negate(reduce(tokenScores, (a, b) => __as_ink_string(a + b), 0)) })())
std = load(__Ink_String(`../vendor/std`));
map = (() => {let __ink_acc_trgt = __as_ink_string(std); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[map] || null : (__ink_acc_trgt.map !== undefined ? __ink_acc_trgt.map : null)})();
@@ -44,6 +44,7 @@ tokenizer = load(__Ink_String(`tokenizer`));
ranker = load(__Ink_String(`ranker`));
tokenize = (() => {let __ink_acc_trgt = __as_ink_string(tokenizer); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[tokenize] || null : (__ink_acc_trgt.tokenize !== undefined ? __ink_acc_trgt.tokenize : null)})();
rankDocs = (() => {let __ink_acc_trgt = __as_ink_string(ranker); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[rankDocs] || null : (__ink_acc_trgt.rankDocs !== undefined ? __ink_acc_trgt.rankDocs : null)})();
includes__ink_qm__ = (arr, it) => (() => { let __ink_trampolined_sub; let sub; return sub = i => (() => { __ink_trampolined_sub = i => __ink_match((() => {let __ink_acc_trgt = __as_ink_string(arr); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return i })()] || null : (__ink_acc_trgt[(() => { return i })()] !== undefined ? __ink_acc_trgt[(() => { return i })()] : null)})(), [[() => (it), () => (true)], [() => (null), () => (false)], [() => (__Ink_Empty), () => (__ink_trampoline(__ink_trampolined_sub, __as_ink_string(i + 1)))]]); return __ink_resolve_trampoline(__ink_trampolined_sub, i) })() })()(0);
findDocs = (index, docs, query) => (() => { let queryTokens; queryTokens = keys(tokenize(query)); return __ink_match(queryTokens, [[() => ([]), () => ([])], [() => (__Ink_Empty), () => ((() => { let docMatches; let matchingDocIDs; let matchingDocs; docMatches = map(map(queryTokens, token => (() => {let __ink_acc_trgt = __as_ink_string(index); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return token })()] || null : (__ink_acc_trgt[(() => { return token })()] !== undefined ? __ink_acc_trgt[(() => { return token })()] : null)})()), docIDs => __ink_match(docIDs, [[() => (null), () => ([])], [() => (__Ink_Empty), () => (docIDs)]])); matchingDocIDs = reduce(slice(docMatches, 0, len(docMatches)), (acc, docIDs) => filter(acc, docID => includes__ink_qm__(docIDs, docID)), (() => {let __ink_acc_trgt = __as_ink_string(docMatches); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[0] || null : (__ink_acc_trgt[0] !== undefined ? __ink_acc_trgt[0] : null)})()); matchingDocs = map(matchingDocIDs, id => (() => {let __ink_acc_trgt = __as_ink_string(docs); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return id })()] || null : (__ink_acc_trgt[(() => { return id })()] !== undefined ? __ink_acc_trgt[(() => { return id })()] : null)})()); return rankDocs(matchingDocs, queryTokens) })())]]) })()
listToSet = list => reduce(list, (acc, it) => (() => {let __ink_assgn_trgt = __as_ink_string(acc); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign((() => { return it })(), true) : (__ink_assgn_trgt[(() => { return it })()]) = true; return __ink_assgn_trgt})(), {});
intersectionSet = (a, b) => reduce(keys(a), (intersection, it) => __ink_match((() => {let __ink_acc_trgt = __as_ink_string(b); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return it })()] || null : (__ink_acc_trgt[(() => { return it })()] !== undefined ? __ink_acc_trgt[(() => { return it })()] : null)})(), [[() => (true), () => ((() => {let __ink_assgn_trgt = __as_ink_string(intersection); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign((() => { return it })(), true) : (__ink_assgn_trgt[(() => { return it })()]) = true; return __ink_assgn_trgt})())], [() => (__Ink_Empty), () => (intersection)]]), {});
findDocs = (index, docs, query) => (() => { let queryTokens; queryTokens = keys(tokenize(query)); return __ink_match(queryTokens, [[() => ([]), () => ([])], [() => (__Ink_Empty), () => ((() => { let docMatches; let docMatchesAsMaps; let matchingDocIDs; let matchingDocs; docMatches = map(map(queryTokens, token => (() => {let __ink_acc_trgt = __as_ink_string(index); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return token })()] || null : (__ink_acc_trgt[(() => { return token })()] !== undefined ? __ink_acc_trgt[(() => { return token })()] : null)})()), docIDs => __ink_match(docIDs, [[() => (null), () => ([])], [() => (__Ink_Empty), () => (docIDs)]])); docMatchesAsMaps = map(docMatches, listToSet); matchingDocIDs = keys(reduce(slice(docMatchesAsMaps, 1, len(docMatchesAsMaps)), intersectionSet, (() => {let __ink_acc_trgt = __as_ink_string(docMatchesAsMaps); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[0] || null : (__ink_acc_trgt[0] !== undefined ? __ink_acc_trgt[0] : null)})())); matchingDocs = map(matchingDocIDs, id => (() => {let __ink_acc_trgt = __as_ink_string(docs); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return id })()] || null : (__ink_acc_trgt[(() => { return id })()] !== undefined ? __ink_acc_trgt[(() => { return id })()] : null)})()); return rankDocs(matchingDocs, queryTokens, len(docs)) })())]]) })()

View File

@@ -513,9 +513,9 @@ map = (() => {let __ink_acc_trgt = __as_ink_string(std); return __is_ink_string(
reduce = (() => {let __ink_acc_trgt = __as_ink_string(std); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[reduce] || null : (__ink_acc_trgt.reduce !== undefined ? __ink_acc_trgt.reduce : null)})();
sortBy = (() => {let __ink_acc_trgt = __as_ink_string(quicksort); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[sortBy] || null : (__ink_acc_trgt.sortBy !== undefined ? __ink_acc_trgt.sortBy : null)})();
docTermFrequency = (doc, token) => (() => {let __ink_acc_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[tokens] || null : (__ink_acc_trgt.tokens !== undefined ? __ink_acc_trgt.tokens : null)})()); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return token })()] || null : (__ink_acc_trgt[(() => { return token })()] !== undefined ? __ink_acc_trgt[(() => { return token })()] : null)})();
docInverseFrequency = (doc, token) => ln(((() => {let __ink_acc_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[tokens] || null : (__ink_acc_trgt.tokens !== undefined ? __ink_acc_trgt.tokens : null)})()); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return token })()] || null : (__ink_acc_trgt[(() => { return token })()] !== undefined ? __ink_acc_trgt[(() => { return token })()] : null)})() / len((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[tokens] || null : (__ink_acc_trgt.tokens !== undefined ? __ink_acc_trgt.tokens : null)})())));
docTFIDF = (doc, token) => (docTermFrequency(doc, token) * docInverseFrequency(doc, token));
rankDocs = (matchingDocs, queryTokens) => sortBy(matchingDocs, doc => (() => { let tokenScores; tokenScores = map(queryTokens, token => docTFIDF(doc, token)); return __ink_negate(reduce(tokenScores, (a, b) => __as_ink_string(a + b), 0)) })())
docInverseFrequency = (doc, token, lenDocs) => ln((lenDocs / len((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[tokens] || null : (__ink_acc_trgt.tokens !== undefined ? __ink_acc_trgt.tokens : null)})())));
docTFIDF = (doc, token, lenDocs) => (docTermFrequency(doc, token) * docInverseFrequency(doc, token, lenDocs));
rankDocs = (matchingDocs, queryTokens, lenDocs) => sortBy(matchingDocs, doc => (() => { let tokenScores; tokenScores = map(queryTokens, token => docTFIDF(doc, token, lenDocs)); return __ink_negate(reduce(tokenScores, (a, b) => __as_ink_string(a + b), 0)) })())
std = load(__Ink_String(`../vendor/std`));
map = (() => {let __ink_acc_trgt = __as_ink_string(std); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[map] || null : (__ink_acc_trgt.map !== undefined ? __ink_acc_trgt.map : null)})();
@@ -526,8 +526,9 @@ tokenizer = load(__Ink_String(`tokenizer`));
ranker = load(__Ink_String(`ranker`));
tokenize = (() => {let __ink_acc_trgt = __as_ink_string(tokenizer); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[tokenize] || null : (__ink_acc_trgt.tokenize !== undefined ? __ink_acc_trgt.tokenize : null)})();
rankDocs = (() => {let __ink_acc_trgt = __as_ink_string(ranker); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[rankDocs] || null : (__ink_acc_trgt.rankDocs !== undefined ? __ink_acc_trgt.rankDocs : null)})();
includes__ink_qm__ = (arr, it) => (() => { let __ink_trampolined_sub; let sub; return sub = i => (() => { __ink_trampolined_sub = i => __ink_match((() => {let __ink_acc_trgt = __as_ink_string(arr); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return i })()] || null : (__ink_acc_trgt[(() => { return i })()] !== undefined ? __ink_acc_trgt[(() => { return i })()] : null)})(), [[() => (it), () => (true)], [() => (null), () => (false)], [() => (__Ink_Empty), () => (__ink_trampoline(__ink_trampolined_sub, __as_ink_string(i + 1)))]]); return __ink_resolve_trampoline(__ink_trampolined_sub, i) })() })()(0);
findDocs = (index, docs, query) => (() => { let queryTokens; queryTokens = keys(tokenize(query)); return __ink_match(queryTokens, [[() => ([]), () => ([])], [() => (__Ink_Empty), () => ((() => { let docMatches; let matchingDocIDs; let matchingDocs; docMatches = map(map(queryTokens, token => (() => {let __ink_acc_trgt = __as_ink_string(index); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return token })()] || null : (__ink_acc_trgt[(() => { return token })()] !== undefined ? __ink_acc_trgt[(() => { return token })()] : null)})()), docIDs => __ink_match(docIDs, [[() => (null), () => ([])], [() => (__Ink_Empty), () => (docIDs)]])); matchingDocIDs = reduce(slice(docMatches, 0, len(docMatches)), (acc, docIDs) => filter(acc, docID => includes__ink_qm__(docIDs, docID)), (() => {let __ink_acc_trgt = __as_ink_string(docMatches); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[0] || null : (__ink_acc_trgt[0] !== undefined ? __ink_acc_trgt[0] : null)})()); matchingDocs = map(matchingDocIDs, id => (() => {let __ink_acc_trgt = __as_ink_string(docs); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return id })()] || null : (__ink_acc_trgt[(() => { return id })()] !== undefined ? __ink_acc_trgt[(() => { return id })()] : null)})()); return rankDocs(matchingDocs, queryTokens) })())]]) })()
listToSet = list => reduce(list, (acc, it) => (() => {let __ink_assgn_trgt = __as_ink_string(acc); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign((() => { return it })(), true) : (__ink_assgn_trgt[(() => { return it })()]) = true; return __ink_assgn_trgt})(), {});
intersectionSet = (a, b) => reduce(keys(a), (intersection, it) => __ink_match((() => {let __ink_acc_trgt = __as_ink_string(b); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return it })()] || null : (__ink_acc_trgt[(() => { return it })()] !== undefined ? __ink_acc_trgt[(() => { return it })()] : null)})(), [[() => (true), () => ((() => {let __ink_assgn_trgt = __as_ink_string(intersection); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign((() => { return it })(), true) : (__ink_assgn_trgt[(() => { return it })()]) = true; return __ink_assgn_trgt})())], [() => (__Ink_Empty), () => (intersection)]]), {});
findDocs = (index, docs, query) => (() => { let queryTokens; queryTokens = keys(tokenize(query)); return __ink_match(queryTokens, [[() => ([]), () => ([])], [() => (__Ink_Empty), () => ((() => { let docMatches; let docMatchesAsMaps; let matchingDocIDs; let matchingDocs; docMatches = map(map(queryTokens, token => (() => {let __ink_acc_trgt = __as_ink_string(index); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return token })()] || null : (__ink_acc_trgt[(() => { return token })()] !== undefined ? __ink_acc_trgt[(() => { return token })()] : null)})()), docIDs => __ink_match(docIDs, [[() => (null), () => ([])], [() => (__Ink_Empty), () => (docIDs)]])); docMatchesAsMaps = map(docMatches, listToSet); matchingDocIDs = keys(reduce(slice(docMatchesAsMaps, 1, len(docMatchesAsMaps)), intersectionSet, (() => {let __ink_acc_trgt = __as_ink_string(docMatchesAsMaps); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[0] || null : (__ink_acc_trgt[0] !== undefined ? __ink_acc_trgt[0] : null)})())); matchingDocs = map(matchingDocIDs, id => (() => {let __ink_acc_trgt = __as_ink_string(docs); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return id })()] || null : (__ink_acc_trgt[(() => { return id })()] !== undefined ? __ink_acc_trgt[(() => { return id })()] : null)})()); return rankDocs(matchingDocs, queryTokens, len(docs)) })())]]) })()
str = s => bind(s, __Ink_String(`valueOf`))(s);
arr = bind(Object, __Ink_String(`values`));
@@ -540,29 +541,30 @@ std = load(__Ink_String(`std`));
log = (() => {let __ink_acc_trgt = __as_ink_string(std); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[log] || null : (__ink_acc_trgt.log !== undefined ? __ink_acc_trgt.log : null)})();
f = (() => {let __ink_acc_trgt = __as_ink_string(std); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[format] || null : (__ink_acc_trgt.format !== undefined ? __ink_acc_trgt.format : null)})();
Newline = char(10);
MaxResultPadChars = 140;
MaxPreviewChars = 500;
LoadedModules = [];
Modules = [__Ink_String(`entr`), __Ink_String(`lifelog`), __Ink_String(`ligature`)];
Modules = [__Ink_String(`www`), __Ink_String(`entr`), __Ink_String(`lifelog`), __Ink_String(`ligature`)];
querySelector = bind(document, __Ink_String(`querySelector`));
EscapeContainer = bind(document, __Ink_String(`createElement`))(__Ink_String(`div`));
escapeHTML = s => (() => { (() => {let __ink_assgn_trgt = __as_ink_string(EscapeContainer); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(textContent, s) : (__ink_assgn_trgt.textContent) = s; return __ink_assgn_trgt})(); return (() => {let __ink_acc_trgt = __as_ink_string(EscapeContainer); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[innerHTML] || null : (__ink_acc_trgt.innerHTML !== undefined ? __ink_acc_trgt.innerHTML : null)})() })();
escapeRegExp = s => s;
applyHighlights = (s, query) => (() => { let queryTokens; let replacementRegExp; let replacementRegExpStr; s = escapeHTML(s); queryTokens = keys(tokenize((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})())); replacementRegExpStr = __as_ink_string(__as_ink_string(__Ink_String(`(^|\\W)(`) + cat(escapeRegExp(queryTokens), __Ink_String(`|`))) + __Ink_String(`)`)); replacementRegExp = jsnew(RegExp, [str(replacementRegExpStr), str(__Ink_String(`ig`))]); return bind(str(s), __Ink_String(`replaceAll`))(replacementRegExp, __Ink_String(`$1<span class="search-highlight">$2</span>`)) })();
State = {query: __Ink_String(``), docs: {}, index: null, results: [], selectedIdx: 0};
fastSlice = (s, start, end) => bind(str(s), __Ink_String(`substring`))(start, end);
applyHighlights = query => (() => { let queryTokens; let replacementRegExp; let replacementRegExpStr; queryTokens = keys(tokenize((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})())); replacementRegExpStr = __as_ink_string(__as_ink_string(__Ink_String(`(^|\\W)(`) + cat(escapeRegExp(queryTokens), __Ink_String(`|`))) + __Ink_String(`)`)); replacementRegExp = jsnew(RegExp, [str(replacementRegExpStr), str(__Ink_String(`ig`))]); return s => bind(str(escapeHTML(s)), __Ink_String(`replaceAll`))(replacementRegExp, __Ink_String(`$1<span class="search-highlight">$2</span>`)) })();
State = {query: __Ink_String(``), docs: {}, index: null, results: [], searchElapsedMs: 0, selectedIdx: 0, showPreview: false};
fetchModuleDocs = moduleKey => (() => { let json; let req; req = fetch(f(__Ink_String(`/indexes/{{ 0 }}.json`), [moduleKey])); json = bind(req, __Ink_String(`then`))(resp => bind(resp, __Ink_String(`json`))()); return bind(json, __Ink_String(`then`))(docs => (() => { (() => {let __ink_assgn_trgt = __as_ink_string(LoadedModules); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(len(LoadedModules), moduleKey) : (__ink_assgn_trgt[len(LoadedModules)]) = moduleKey; return __ink_assgn_trgt})(); each(docs, doc => (() => {let __ink_assgn_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})()); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign((() => { return (() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[id] || null : (__ink_acc_trgt.id !== undefined ? __ink_acc_trgt.id : null)})() })(), doc) : (__ink_assgn_trgt[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[id] || null : (__ink_acc_trgt.id !== undefined ? __ink_acc_trgt.id : null)})() })()]) = doc; return __ink_assgn_trgt})()); return __ink_match(len(LoadedModules), [[() => (len(Modules)), () => ((() => { (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(index, indexDocs((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})())) : (__ink_assgn_trgt.index) = indexDocs((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})()); return __ink_assgn_trgt})(); return render() })())]]) })()) })();
SearchBox = () => h(__Ink_String(`div`), [__Ink_String(`search-box`)], [hae(__Ink_String(`input`), [__Ink_String(`search-box-input`)], {value: (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})(), placeholder: __Ink_String(`Search...`), autofocus: true}, {input: evt => (() => { (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(query, (() => {let __ink_acc_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(evt); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[target] || null : (__ink_acc_trgt.target !== undefined ? __ink_acc_trgt.target : null)})()); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[value] || null : (__ink_acc_trgt.value !== undefined ? __ink_acc_trgt.value : null)})()) : (__ink_assgn_trgt.query) = (() => {let __ink_acc_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(evt); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[target] || null : (__ink_acc_trgt.target !== undefined ? __ink_acc_trgt.target : null)})()); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[value] || null : (__ink_acc_trgt.value !== undefined ? __ink_acc_trgt.value : null)})(); return __ink_assgn_trgt})(); render(); return updateResults() })()}, [])]);
SearchResult = (doc, i) => h(__Ink_String(`li`), [__Ink_String(`search-result`), __ink_match((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})(), [[() => (i), () => (__Ink_String(`selected`))], [() => (__Ink_Empty), () => (__Ink_String(``))]])], [(() => { let container; container = bind(document, __Ink_String(`createElement`))(__Ink_String(`div`)); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(className, __Ink_String(`search-result-content`)) : (__ink_assgn_trgt.className) = __Ink_String(`search-result-content`); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(onclick, evt => render((() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, i) : (__ink_assgn_trgt.selectedIdx) = i; return __ink_assgn_trgt})())) : (__ink_assgn_trgt.onclick) = evt => render((() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, i) : (__ink_assgn_trgt.selectedIdx) = i; return __ink_assgn_trgt})()); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(innerHTML, (() => { let content; content = (() => { return __ink_match(((MaxResultPadChars * 2) > (() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})()), [[() => (true), () => ((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})())], [() => (__Ink_Empty), () => (slice((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), 0, (MaxResultPadChars * 2)))]]) })(); return applyHighlights(content, (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()) })()) : (__ink_assgn_trgt.innerHTML) = (() => { let content; content = (() => { return __ink_match(((MaxResultPadChars * 2) > (() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})()), [[() => (true), () => ((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})())], [() => (__Ink_Empty), () => (slice((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), 0, (MaxResultPadChars * 2)))]]) })(); return applyHighlights(content, (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()) })(); return __ink_assgn_trgt})(); return container })()]);
SearchResults = () => h(__Ink_String(`div`), [__Ink_String(`search-results`)], [h(__Ink_String(`ol`), [__Ink_String(`search-results-list`)], (() => { return map((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})(), (result, i) => SearchResult(result, i)) })())]);
Sidebar = () => h(__Ink_String(`div`), [__Ink_String(`sidebar`)], [SearchBox(), __ink_match((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[index] || null : (__ink_acc_trgt.index !== undefined ? __ink_acc_trgt.index : null)})(), [[() => (null), () => (__Ink_String(`loading index...`))], [() => (__Ink_Empty), () => (null)]]), h(__Ink_String(`div`), [__Ink_String(`sidebar-result-stats`)], [f(__Ink_String(`{{ 0 }} results in {{ 1 }}ms`), [len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()), 100])]), SearchResults()]);
DocPreview = () => (() => { let selectedDoc; return h(__Ink_String(`div`), [__Ink_String(`doc-preview`)], [__ink_match(selectedDoc = (() => {let __ink_acc_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() })()] || null : (__ink_acc_trgt[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() })()] !== undefined ? __ink_acc_trgt[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() })()] : null)})(), [[() => (null), () => (h(__Ink_String(`div`), [__Ink_String(`doc-preview-empty`)], [__Ink_String(`Select a result to view it here.`)]))], [() => (__Ink_Empty), () => ((() => { let container; container = bind(document, __Ink_String(`createElement`))(__Ink_String(`div`)); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(className, __Ink_String(`doc-preview-content`)) : (__ink_assgn_trgt.className) = __Ink_String(`doc-preview-content`); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(innerHTML, applyHighlights((() => {let __ink_acc_trgt = __as_ink_string(selectedDoc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})())) : (__ink_assgn_trgt.innerHTML) = applyHighlights((() => {let __ink_acc_trgt = __as_ink_string(selectedDoc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()); return __ink_assgn_trgt})(); return container })())]])]) })();
updateResults = () => (() => { (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(results, findDocs((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[index] || null : (__ink_acc_trgt.index !== undefined ? __ink_acc_trgt.index : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})())) : (__ink_assgn_trgt.results) = findDocs((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[index] || null : (__ink_acc_trgt.index !== undefined ? __ink_acc_trgt.index : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, 0) : (__ink_assgn_trgt.selectedIdx) = 0; return __ink_assgn_trgt})(); return render() })();
SearchResult = (doc, i, highlighter) => (() => { let existingEl; return hae(__Ink_String(`li`), [__Ink_String(`search-result`), __ink_match((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})(), [[() => (i), () => (__Ink_String(`selected`))], [() => (__Ink_Empty), () => (__Ink_String(``))]])], {}, {click: evt => (() => { (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, i) : (__ink_assgn_trgt.selectedIdx) = i; return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(showPreview__ink_qm__, true) : (__ink_assgn_trgt.showPreview__ink_qm__) = true; return __ink_assgn_trgt})(); return render() })()}, [__ink_match(existingEl = querySelector(__as_ink_string(__as_ink_string(__Ink_String(`[data-doc-id="`) + (() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[id] || null : (__ink_acc_trgt.id !== undefined ? __ink_acc_trgt.id : null)})()) + __Ink_String(`"]`))), [[() => (null), () => ((() => { let container; container = bind(document, __Ink_String(`createElement`))(__Ink_String(`div`)); bind(container, __Ink_String(`setAttribute`))(__Ink_String(`data-doc-id`), (() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[id] || null : (__ink_acc_trgt.id !== undefined ? __ink_acc_trgt.id : null)})()); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(className, __Ink_String(`search-result-content`)) : (__ink_assgn_trgt.className) = __Ink_String(`search-result-content`); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(innerHTML, highlighter(fastSlice((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), 0, MaxPreviewChars))) : (__ink_assgn_trgt.innerHTML) = highlighter(fastSlice((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), 0, MaxPreviewChars)); return __ink_assgn_trgt})(); return container })())], [() => (__Ink_Empty), () => (existingEl)]])]) })();
SearchResults = () => h(__Ink_String(`div`), [__Ink_String(`search-results`)], [h(__Ink_String(`ol`), [__Ink_String(`search-results-list`)], (() => { let highlighter; highlighter = applyHighlights((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()); return map((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})(), (result, i) => SearchResult(result, i, highlighter)) })())]);
Sidebar = () => h(__Ink_String(`div`), [__Ink_String(`sidebar`)], [SearchBox(), h(__Ink_String(`div`), [__Ink_String(`sidebar-stats`)], [__ink_match((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[index] || null : (__ink_acc_trgt.index !== undefined ? __ink_acc_trgt.index : null)})(), [[() => (null), () => (__Ink_String(`loading index...`))], [() => (__Ink_Empty), () => (h(__Ink_String(`div`), [__Ink_String(`sidebar-result-stats`)], [f(__Ink_String(`{{ 0 }} results in {{ 1 }}ms`), [len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[searchElapsedMs] || null : (__ink_acc_trgt.searchElapsedMs !== undefined ? __ink_acc_trgt.searchElapsedMs : null)})()])]))]])]), SearchResults()]);
DocPreview = () => (() => { let selectedDoc; return h(__Ink_String(`div`), [__Ink_String(`doc-preview`)], [__ink_match(selectedDoc = (() => {let __ink_acc_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() })()] || null : (__ink_acc_trgt[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() })()] !== undefined ? __ink_acc_trgt[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() })()] : null)})(), [[() => (null), () => (h(__Ink_String(`div`), [__Ink_String(`doc-preview-empty`)], [__Ink_String(`Select a result to view it here.`)]))], [() => (__Ink_Empty), () => (h(__Ink_String(`div`), [__Ink_String(`doc-preview-content`)], (() => { let highlighter; highlighter = applyHighlights((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()); return map(split((() => {let __ink_acc_trgt = __as_ink_string(selectedDoc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), Newline), para => (() => { let p; p = bind(document, __Ink_String(`createElement`))(__Ink_String(`p`)); (() => {let __ink_assgn_trgt = __as_ink_string(p); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(innerHTML, highlighter(para)) : (__ink_assgn_trgt.innerHTML) = highlighter(para); return __ink_assgn_trgt})(); return p })()) })()))]])]) })();
updateResults = () => (() => { let start; start = time(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(results, findDocs((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[index] || null : (__ink_acc_trgt.index !== undefined ? __ink_acc_trgt.index : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})())) : (__ink_assgn_trgt.results) = findDocs((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[index] || null : (__ink_acc_trgt.index !== undefined ? __ink_acc_trgt.index : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(searchElapsedMs, floor(((() => { return (time() - start) })() * 1000))) : (__ink_assgn_trgt.searchElapsedMs) = floor(((() => { return (time() - start) })() * 1000)); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, 0) : (__ink_assgn_trgt.selectedIdx) = 0; return __ink_assgn_trgt})(); return render() })();
root = bind(document, __Ink_String(`querySelector`))(__Ink_String(`#root`));
r = Renderer(root);
update = (() => {let __ink_acc_trgt = __as_ink_string(r); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[update] || null : (__ink_acc_trgt.update !== undefined ? __ink_acc_trgt.update : null)})();
render = () => update(h(__Ink_String(`div`), [__Ink_String(`app`)], [Sidebar(), DocPreview()]));
render = () => update(h(__Ink_String(`div`), [__Ink_String(`app`)], [Sidebar(), __ink_match((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[showPreview__ink_qm__] || null : (__ink_acc_trgt.showPreview__ink_qm__ !== undefined ? __ink_acc_trgt.showPreview__ink_qm__ : null)})(), [[() => (true), () => (DocPreview())]])]));
selectDown = evt => (() => { let el; bind(evt, __Ink_String(`preventDefault`))(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, ((() => { return __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() + 1) })() % len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()))) : (__ink_assgn_trgt.selectedIdx) = ((() => { return __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() + 1) })() % len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})())); return __ink_assgn_trgt})(); render(); return __ink_match(el = querySelector(__Ink_String(`.search-result.selected`)), [[() => (null), () => (null)], [() => (__Ink_Empty), () => (bind(el, __Ink_String(`scrollIntoView`))({block: __Ink_String(`nearest`)}))]]) })();
selectUp = evt => (() => { let el; bind(evt, __Ink_String(`preventDefault`))(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, ((() => { return (__as_ink_string(len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()) + (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})()) - 1) })() % len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()))) : (__ink_assgn_trgt.selectedIdx) = ((() => { return (__as_ink_string(len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()) + (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})()) - 1) })() % len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})())); return __ink_assgn_trgt})(); render(); return __ink_match(el = querySelector(__Ink_String(`.search-result.selected`)), [[() => (null), () => (null)], [() => (__Ink_Empty), () => (bind(el, __Ink_String(`scrollIntoView`))({block: __Ink_String(`nearest`)}))]]) })();
bind((() => {let __ink_acc_trgt = __as_ink_string(document); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[body] || null : (__ink_acc_trgt.body !== undefined ? __ink_acc_trgt.body : null)})(), __Ink_String(`addEventListener`))(__Ink_String(`keydown`), evt => (() => { let searchBox; return __ink_match((() => {let __ink_acc_trgt = __as_ink_string(evt); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[key] || null : (__ink_acc_trgt.key !== undefined ? __ink_acc_trgt.key : null)})(), [[() => (__Ink_String(`Tab`)), () => (__ink_match((() => {let __ink_acc_trgt = __as_ink_string(evt); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[shiftKey] || null : (__ink_acc_trgt.shiftKey !== undefined ? __ink_acc_trgt.shiftKey : null)})(), [[() => (true), () => (selectUp(evt))], [() => (__Ink_Empty), () => (selectDown(evt))]]))], [() => (__Ink_String(`ArrowUp`)), () => (selectUp(evt))], [() => (__Ink_String(`ArrowDown`)), () => (selectDown(evt))], [() => (__Ink_String(`/`)), () => (__ink_match(searchBox = querySelector(__Ink_String(`.search-box-input`)), [[() => (null), () => (null)], [() => (__Ink_Empty), () => ((() => { bind(evt, __Ink_String(`preventDefault`))(); return bind(searchBox, __Ink_String(`focus`))() })())]]))]]) })());
bind((() => {let __ink_acc_trgt = __as_ink_string(document); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[body] || null : (__ink_acc_trgt.body !== undefined ? __ink_acc_trgt.body : null)})(), __Ink_String(`addEventListener`))(__Ink_String(`keydown`), evt => (() => { let searchBox; return __ink_match((() => {let __ink_acc_trgt = __as_ink_string(evt); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[key] || null : (__ink_acc_trgt.key !== undefined ? __ink_acc_trgt.key : null)})(), [[() => (__Ink_String(`Tab`)), () => (__ink_match((() => {let __ink_acc_trgt = __as_ink_string(evt); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[shiftKey] || null : (__ink_acc_trgt.shiftKey !== undefined ? __ink_acc_trgt.shiftKey : null)})(), [[() => (true), () => (selectUp(evt))], [() => (__Ink_Empty), () => (selectDown(evt))]]))], [() => (__Ink_String(`ArrowUp`)), () => (selectUp(evt))], [() => (__Ink_String(`ArrowDown`)), () => (selectDown(evt))], [() => (__Ink_String(`Enter`)), () => (render((() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(showPreview__ink_qm__, true) : (__ink_assgn_trgt.showPreview__ink_qm__) = true; return __ink_assgn_trgt})()))], [() => (__Ink_String(`Escape`)), () => (render((() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(showPreview__ink_qm__, false) : (__ink_assgn_trgt.showPreview__ink_qm__) = false; return __ink_assgn_trgt})()))], [() => (__Ink_String(`/`)), () => (__ink_match(searchBox = querySelector(__Ink_String(`.search-box-input`)), [[() => (null), () => (null)], [() => (__Ink_Empty), () => ((() => { bind(evt, __Ink_String(`preventDefault`))(); return bind(searchBox, __Ink_String(`focus`))() })())]]))]]) })());
each(Modules, fetchModuleDocs);
render()

View File

@@ -9,29 +9,30 @@ std = load(__Ink_String(`std`));
log = (() => {let __ink_acc_trgt = __as_ink_string(std); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[log] || null : (__ink_acc_trgt.log !== undefined ? __ink_acc_trgt.log : null)})();
f = (() => {let __ink_acc_trgt = __as_ink_string(std); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[format] || null : (__ink_acc_trgt.format !== undefined ? __ink_acc_trgt.format : null)})();
Newline = char(10);
MaxResultPadChars = 140;
MaxPreviewChars = 500;
LoadedModules = [];
Modules = [__Ink_String(`entr`), __Ink_String(`lifelog`), __Ink_String(`ligature`)];
Modules = [__Ink_String(`www`), __Ink_String(`entr`), __Ink_String(`lifelog`), __Ink_String(`ligature`)];
querySelector = bind(document, __Ink_String(`querySelector`));
EscapeContainer = bind(document, __Ink_String(`createElement`))(__Ink_String(`div`));
escapeHTML = s => (() => { (() => {let __ink_assgn_trgt = __as_ink_string(EscapeContainer); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(textContent, s) : (__ink_assgn_trgt.textContent) = s; return __ink_assgn_trgt})(); return (() => {let __ink_acc_trgt = __as_ink_string(EscapeContainer); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[innerHTML] || null : (__ink_acc_trgt.innerHTML !== undefined ? __ink_acc_trgt.innerHTML : null)})() })();
escapeRegExp = s => s;
applyHighlights = (s, query) => (() => { let queryTokens; let replacementRegExp; let replacementRegExpStr; s = escapeHTML(s); queryTokens = keys(tokenize((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})())); replacementRegExpStr = __as_ink_string(__as_ink_string(__Ink_String(`(^|\\W)(`) + cat(escapeRegExp(queryTokens), __Ink_String(`|`))) + __Ink_String(`)`)); replacementRegExp = jsnew(RegExp, [str(replacementRegExpStr), str(__Ink_String(`ig`))]); return bind(str(s), __Ink_String(`replaceAll`))(replacementRegExp, __Ink_String(`$1<span class="search-highlight">$2</span>`)) })();
State = {query: __Ink_String(``), docs: {}, index: null, results: [], selectedIdx: 0};
fastSlice = (s, start, end) => bind(str(s), __Ink_String(`substring`))(start, end);
applyHighlights = query => (() => { let queryTokens; let replacementRegExp; let replacementRegExpStr; queryTokens = keys(tokenize((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})())); replacementRegExpStr = __as_ink_string(__as_ink_string(__Ink_String(`(^|\\W)(`) + cat(escapeRegExp(queryTokens), __Ink_String(`|`))) + __Ink_String(`)`)); replacementRegExp = jsnew(RegExp, [str(replacementRegExpStr), str(__Ink_String(`ig`))]); return s => bind(str(escapeHTML(s)), __Ink_String(`replaceAll`))(replacementRegExp, __Ink_String(`$1<span class="search-highlight">$2</span>`)) })();
State = {query: __Ink_String(``), docs: {}, index: null, results: [], searchElapsedMs: 0, selectedIdx: 0, showPreview: false};
fetchModuleDocs = moduleKey => (() => { let json; let req; req = fetch(f(__Ink_String(`/indexes/{{ 0 }}.json`), [moduleKey])); json = bind(req, __Ink_String(`then`))(resp => bind(resp, __Ink_String(`json`))()); return bind(json, __Ink_String(`then`))(docs => (() => { (() => {let __ink_assgn_trgt = __as_ink_string(LoadedModules); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(len(LoadedModules), moduleKey) : (__ink_assgn_trgt[len(LoadedModules)]) = moduleKey; return __ink_assgn_trgt})(); each(docs, doc => (() => {let __ink_assgn_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})()); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign((() => { return (() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[id] || null : (__ink_acc_trgt.id !== undefined ? __ink_acc_trgt.id : null)})() })(), doc) : (__ink_assgn_trgt[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[id] || null : (__ink_acc_trgt.id !== undefined ? __ink_acc_trgt.id : null)})() })()]) = doc; return __ink_assgn_trgt})()); return __ink_match(len(LoadedModules), [[() => (len(Modules)), () => ((() => { (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(index, indexDocs((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})())) : (__ink_assgn_trgt.index) = indexDocs((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})()); return __ink_assgn_trgt})(); return render() })())]]) })()) })();
SearchBox = () => h(__Ink_String(`div`), [__Ink_String(`search-box`)], [hae(__Ink_String(`input`), [__Ink_String(`search-box-input`)], {value: (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})(), placeholder: __Ink_String(`Search...`), autofocus: true}, {input: evt => (() => { (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(query, (() => {let __ink_acc_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(evt); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[target] || null : (__ink_acc_trgt.target !== undefined ? __ink_acc_trgt.target : null)})()); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[value] || null : (__ink_acc_trgt.value !== undefined ? __ink_acc_trgt.value : null)})()) : (__ink_assgn_trgt.query) = (() => {let __ink_acc_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(evt); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[target] || null : (__ink_acc_trgt.target !== undefined ? __ink_acc_trgt.target : null)})()); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[value] || null : (__ink_acc_trgt.value !== undefined ? __ink_acc_trgt.value : null)})(); return __ink_assgn_trgt})(); render(); return updateResults() })()}, [])]);
SearchResult = (doc, i) => h(__Ink_String(`li`), [__Ink_String(`search-result`), __ink_match((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})(), [[() => (i), () => (__Ink_String(`selected`))], [() => (__Ink_Empty), () => (__Ink_String(``))]])], [(() => { let container; container = bind(document, __Ink_String(`createElement`))(__Ink_String(`div`)); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(className, __Ink_String(`search-result-content`)) : (__ink_assgn_trgt.className) = __Ink_String(`search-result-content`); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(onclick, evt => render((() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, i) : (__ink_assgn_trgt.selectedIdx) = i; return __ink_assgn_trgt})())) : (__ink_assgn_trgt.onclick) = evt => render((() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, i) : (__ink_assgn_trgt.selectedIdx) = i; return __ink_assgn_trgt})()); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(innerHTML, (() => { let content; content = (() => { return __ink_match(((MaxResultPadChars * 2) > (() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})()), [[() => (true), () => ((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})())], [() => (__Ink_Empty), () => (slice((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), 0, (MaxResultPadChars * 2)))]]) })(); return applyHighlights(content, (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()) })()) : (__ink_assgn_trgt.innerHTML) = (() => { let content; content = (() => { return __ink_match(((MaxResultPadChars * 2) > (() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})()), [[() => (true), () => ((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})())], [() => (__Ink_Empty), () => (slice((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), 0, (MaxResultPadChars * 2)))]]) })(); return applyHighlights(content, (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()) })(); return __ink_assgn_trgt})(); return container })()]);
SearchResults = () => h(__Ink_String(`div`), [__Ink_String(`search-results`)], [h(__Ink_String(`ol`), [__Ink_String(`search-results-list`)], (() => { return map((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})(), (result, i) => SearchResult(result, i)) })())]);
Sidebar = () => h(__Ink_String(`div`), [__Ink_String(`sidebar`)], [SearchBox(), __ink_match((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[index] || null : (__ink_acc_trgt.index !== undefined ? __ink_acc_trgt.index : null)})(), [[() => (null), () => (__Ink_String(`loading index...`))], [() => (__Ink_Empty), () => (null)]]), h(__Ink_String(`div`), [__Ink_String(`sidebar-result-stats`)], [f(__Ink_String(`{{ 0 }} results in {{ 1 }}ms`), [len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()), 100])]), SearchResults()]);
DocPreview = () => (() => { let selectedDoc; return h(__Ink_String(`div`), [__Ink_String(`doc-preview`)], [__ink_match(selectedDoc = (() => {let __ink_acc_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() })()] || null : (__ink_acc_trgt[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() })()] !== undefined ? __ink_acc_trgt[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() })()] : null)})(), [[() => (null), () => (h(__Ink_String(`div`), [__Ink_String(`doc-preview-empty`)], [__Ink_String(`Select a result to view it here.`)]))], [() => (__Ink_Empty), () => ((() => { let container; container = bind(document, __Ink_String(`createElement`))(__Ink_String(`div`)); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(className, __Ink_String(`doc-preview-content`)) : (__ink_assgn_trgt.className) = __Ink_String(`doc-preview-content`); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(innerHTML, applyHighlights((() => {let __ink_acc_trgt = __as_ink_string(selectedDoc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})())) : (__ink_assgn_trgt.innerHTML) = applyHighlights((() => {let __ink_acc_trgt = __as_ink_string(selectedDoc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()); return __ink_assgn_trgt})(); return container })())]])]) })();
updateResults = () => (() => { (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(results, findDocs((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[index] || null : (__ink_acc_trgt.index !== undefined ? __ink_acc_trgt.index : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})())) : (__ink_assgn_trgt.results) = findDocs((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[index] || null : (__ink_acc_trgt.index !== undefined ? __ink_acc_trgt.index : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, 0) : (__ink_assgn_trgt.selectedIdx) = 0; return __ink_assgn_trgt})(); return render() })();
SearchResult = (doc, i, highlighter) => (() => { let existingEl; return hae(__Ink_String(`li`), [__Ink_String(`search-result`), __ink_match((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})(), [[() => (i), () => (__Ink_String(`selected`))], [() => (__Ink_Empty), () => (__Ink_String(``))]])], {}, {click: evt => (() => { (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, i) : (__ink_assgn_trgt.selectedIdx) = i; return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(showPreview__ink_qm__, true) : (__ink_assgn_trgt.showPreview__ink_qm__) = true; return __ink_assgn_trgt})(); return render() })()}, [__ink_match(existingEl = querySelector(__as_ink_string(__as_ink_string(__Ink_String(`[data-doc-id="`) + (() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[id] || null : (__ink_acc_trgt.id !== undefined ? __ink_acc_trgt.id : null)})()) + __Ink_String(`"]`))), [[() => (null), () => ((() => { let container; container = bind(document, __Ink_String(`createElement`))(__Ink_String(`div`)); bind(container, __Ink_String(`setAttribute`))(__Ink_String(`data-doc-id`), (() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[id] || null : (__ink_acc_trgt.id !== undefined ? __ink_acc_trgt.id : null)})()); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(className, __Ink_String(`search-result-content`)) : (__ink_assgn_trgt.className) = __Ink_String(`search-result-content`); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(container); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(innerHTML, highlighter(fastSlice((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), 0, MaxPreviewChars))) : (__ink_assgn_trgt.innerHTML) = highlighter(fastSlice((() => {let __ink_acc_trgt = __as_ink_string(doc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), 0, MaxPreviewChars)); return __ink_assgn_trgt})(); return container })())], [() => (__Ink_Empty), () => (existingEl)]])]) })();
SearchResults = () => h(__Ink_String(`div`), [__Ink_String(`search-results`)], [h(__Ink_String(`ol`), [__Ink_String(`search-results-list`)], (() => { let highlighter; highlighter = applyHighlights((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()); return map((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})(), (result, i) => SearchResult(result, i, highlighter)) })())]);
Sidebar = () => h(__Ink_String(`div`), [__Ink_String(`sidebar`)], [SearchBox(), h(__Ink_String(`div`), [__Ink_String(`sidebar-stats`)], [__ink_match((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[index] || null : (__ink_acc_trgt.index !== undefined ? __ink_acc_trgt.index : null)})(), [[() => (null), () => (__Ink_String(`loading index...`))], [() => (__Ink_Empty), () => (h(__Ink_String(`div`), [__Ink_String(`sidebar-result-stats`)], [f(__Ink_String(`{{ 0 }} results in {{ 1 }}ms`), [len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[searchElapsedMs] || null : (__ink_acc_trgt.searchElapsedMs !== undefined ? __ink_acc_trgt.searchElapsedMs : null)})()])]))]])]), SearchResults()]);
DocPreview = () => (() => { let selectedDoc; return h(__Ink_String(`div`), [__Ink_String(`doc-preview`)], [__ink_match(selectedDoc = (() => {let __ink_acc_trgt = __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() })()] || null : (__ink_acc_trgt[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() })()] !== undefined ? __ink_acc_trgt[(() => { return (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() })()] : null)})(), [[() => (null), () => (h(__Ink_String(`div`), [__Ink_String(`doc-preview-empty`)], [__Ink_String(`Select a result to view it here.`)]))], [() => (__Ink_Empty), () => (h(__Ink_String(`div`), [__Ink_String(`doc-preview-content`)], (() => { let highlighter; highlighter = applyHighlights((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()); return map(split((() => {let __ink_acc_trgt = __as_ink_string(selectedDoc); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[content] || null : (__ink_acc_trgt.content !== undefined ? __ink_acc_trgt.content : null)})(), Newline), para => (() => { let p; p = bind(document, __Ink_String(`createElement`))(__Ink_String(`p`)); (() => {let __ink_assgn_trgt = __as_ink_string(p); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(innerHTML, highlighter(para)) : (__ink_assgn_trgt.innerHTML) = highlighter(para); return __ink_assgn_trgt})(); return p })()) })()))]])]) })();
updateResults = () => (() => { let start; start = time(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(results, findDocs((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[index] || null : (__ink_acc_trgt.index !== undefined ? __ink_acc_trgt.index : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})())) : (__ink_assgn_trgt.results) = findDocs((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[index] || null : (__ink_acc_trgt.index !== undefined ? __ink_acc_trgt.index : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[docs] || null : (__ink_acc_trgt.docs !== undefined ? __ink_acc_trgt.docs : null)})(), (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[query] || null : (__ink_acc_trgt.query !== undefined ? __ink_acc_trgt.query : null)})()); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(searchElapsedMs, floor(((() => { return (time() - start) })() * 1000))) : (__ink_assgn_trgt.searchElapsedMs) = floor(((() => { return (time() - start) })() * 1000)); return __ink_assgn_trgt})(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, 0) : (__ink_assgn_trgt.selectedIdx) = 0; return __ink_assgn_trgt})(); return render() })();
root = bind(document, __Ink_String(`querySelector`))(__Ink_String(`#root`));
r = Renderer(root);
update = (() => {let __ink_acc_trgt = __as_ink_string(r); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[update] || null : (__ink_acc_trgt.update !== undefined ? __ink_acc_trgt.update : null)})();
render = () => update(h(__Ink_String(`div`), [__Ink_String(`app`)], [Sidebar(), DocPreview()]));
render = () => update(h(__Ink_String(`div`), [__Ink_String(`app`)], [Sidebar(), __ink_match((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[showPreview__ink_qm__] || null : (__ink_acc_trgt.showPreview__ink_qm__ !== undefined ? __ink_acc_trgt.showPreview__ink_qm__ : null)})(), [[() => (true), () => (DocPreview())]])]));
selectDown = evt => (() => { let el; bind(evt, __Ink_String(`preventDefault`))(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, ((() => { return __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() + 1) })() % len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()))) : (__ink_assgn_trgt.selectedIdx) = ((() => { return __as_ink_string((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})() + 1) })() % len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})())); return __ink_assgn_trgt})(); render(); return __ink_match(el = querySelector(__Ink_String(`.search-result.selected`)), [[() => (null), () => (null)], [() => (__Ink_Empty), () => (bind(el, __Ink_String(`scrollIntoView`))({block: __Ink_String(`nearest`)}))]]) })();
selectUp = evt => (() => { let el; bind(evt, __Ink_String(`preventDefault`))(); (() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(selectedIdx, ((() => { return (__as_ink_string(len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()) + (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})()) - 1) })() % len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()))) : (__ink_assgn_trgt.selectedIdx) = ((() => { return (__as_ink_string(len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})()) + (() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[selectedIdx] || null : (__ink_acc_trgt.selectedIdx !== undefined ? __ink_acc_trgt.selectedIdx : null)})()) - 1) })() % len((() => {let __ink_acc_trgt = __as_ink_string(State); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[results] || null : (__ink_acc_trgt.results !== undefined ? __ink_acc_trgt.results : null)})())); return __ink_assgn_trgt})(); render(); return __ink_match(el = querySelector(__Ink_String(`.search-result.selected`)), [[() => (null), () => (null)], [() => (__Ink_Empty), () => (bind(el, __Ink_String(`scrollIntoView`))({block: __Ink_String(`nearest`)}))]]) })();
bind((() => {let __ink_acc_trgt = __as_ink_string(document); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[body] || null : (__ink_acc_trgt.body !== undefined ? __ink_acc_trgt.body : null)})(), __Ink_String(`addEventListener`))(__Ink_String(`keydown`), evt => (() => { let searchBox; return __ink_match((() => {let __ink_acc_trgt = __as_ink_string(evt); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[key] || null : (__ink_acc_trgt.key !== undefined ? __ink_acc_trgt.key : null)})(), [[() => (__Ink_String(`Tab`)), () => (__ink_match((() => {let __ink_acc_trgt = __as_ink_string(evt); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[shiftKey] || null : (__ink_acc_trgt.shiftKey !== undefined ? __ink_acc_trgt.shiftKey : null)})(), [[() => (true), () => (selectUp(evt))], [() => (__Ink_Empty), () => (selectDown(evt))]]))], [() => (__Ink_String(`ArrowUp`)), () => (selectUp(evt))], [() => (__Ink_String(`ArrowDown`)), () => (selectDown(evt))], [() => (__Ink_String(`/`)), () => (__ink_match(searchBox = querySelector(__Ink_String(`.search-box-input`)), [[() => (null), () => (null)], [() => (__Ink_Empty), () => ((() => { bind(evt, __Ink_String(`preventDefault`))(); return bind(searchBox, __Ink_String(`focus`))() })())]]))]]) })());
bind((() => {let __ink_acc_trgt = __as_ink_string(document); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[body] || null : (__ink_acc_trgt.body !== undefined ? __ink_acc_trgt.body : null)})(), __Ink_String(`addEventListener`))(__Ink_String(`keydown`), evt => (() => { let searchBox; return __ink_match((() => {let __ink_acc_trgt = __as_ink_string(evt); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[key] || null : (__ink_acc_trgt.key !== undefined ? __ink_acc_trgt.key : null)})(), [[() => (__Ink_String(`Tab`)), () => (__ink_match((() => {let __ink_acc_trgt = __as_ink_string(evt); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[shiftKey] || null : (__ink_acc_trgt.shiftKey !== undefined ? __ink_acc_trgt.shiftKey : null)})(), [[() => (true), () => (selectUp(evt))], [() => (__Ink_Empty), () => (selectDown(evt))]]))], [() => (__Ink_String(`ArrowUp`)), () => (selectUp(evt))], [() => (__Ink_String(`ArrowDown`)), () => (selectDown(evt))], [() => (__Ink_String(`Enter`)), () => (render((() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(showPreview__ink_qm__, true) : (__ink_assgn_trgt.showPreview__ink_qm__) = true; return __ink_assgn_trgt})()))], [() => (__Ink_String(`Escape`)), () => (render((() => {let __ink_assgn_trgt = __as_ink_string(State); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(showPreview__ink_qm__, false) : (__ink_assgn_trgt.showPreview__ink_qm__) = false; return __ink_assgn_trgt})()))], [() => (__Ink_String(`/`)), () => (__ink_match(searchBox = querySelector(__Ink_String(`.search-box-input`)), [[() => (null), () => (null)], [() => (__Ink_Empty), () => ((() => { bind(evt, __Ink_String(`preventDefault`))(); return bind(searchBox, __Ink_String(`focus`))() })())]]))]]) })());
each(Modules, fetchModuleDocs);
render()

83
vendor/ansi.ink generated vendored Normal file
View File

@@ -0,0 +1,83 @@
` ANSI terminal escape codes `
Esc := ''
Backspace := ''
MoveCursor := (x, y) => Esc + '[' + string(y) + ';' + string(x) + 'f'
MoveColumn := x => Esc + '[' + string(x) + 'G'
Home := Esc + '[H'
Reset := Esc + MoveColumn(0)
Clear := Esc + '[2J' + Home
ClearLine := Esc + '[2K' + Reset
ClearLastLine := Esc + '[0F' + ClearLine
` color sequences `
Weight := {
Regular: 0
Bold: 1
Dim: 2
}
Color := {
Black: 30
Red: 31
Green: 32
Yellow: 33
Blue: 34
Magenta: 35
Cyan: 36
White: 37
Gray: 90
Reset: 0
}
Background := {
Black: 40
Red: 41
Green: 42
Yellow: 43
Blue: 44
Magenta: 45
Cyan: 46
White: 47
Gray: 100
Reset: 0
}
style := (t, c) => s => Esc + '[' + string(t) + ';' + string(c) + 'm' + s + Esc + '[0;0m'
` shorthand functions `
Black := style(Weight.Regular, Color.Black)
Red := style(Weight.Regular, Color.Red)
Green := style(Weight.Regular, Color.Green)
Yellow := style(Weight.Regular, Color.Yellow)
Blue := style(Weight.Regular, Color.Blue)
Magenta := style(Weight.Regular, Color.Magenta)
Cyan := style(Weight.Regular, Color.Cyan)
White := style(Weight.Regular, Color.White)
Gray := style(Weight.Regular, Color.Gray)
Bold := style(Weight.Bold, Color.Reset)
BoldBlack := style(Weight.Bold, Color.Black)
BoldRed := style(Weight.Bold, Color.Red)
BoldGreen := style(Weight.Bold, Color.Green)
BoldYellow := style(Weight.Bold, Color.Yellow)
BoldBlue := style(Weight.Bold, Color.Blue)
BoldMagenta := style(Weight.Bold, Color.Magenta)
BoldCyan := style(Weight.Bold, Color.Cyan)
BoldWhite := style(Weight.Bold, Color.White)
BoldGray := style(Weight.Bold, Color.Gray)
Dim := style(Weight.Dim, Color.Reset)
DimBlack := style(Weight.Dim, Color.Black)
DimRed := style(Weight.Dim, Color.Red)
DimGreen := style(Weight.Dim, Color.Green)
DimYellow := style(Weight.Dim, Color.Yellow)
DimBlue := style(Weight.Dim, Color.Blue)
DimMagenta := style(Weight.Dim, Color.Magenta)
DimCyan := style(Weight.Dim, Color.Cyan)
DimWhite := style(Weight.Dim, Color.White)
DimGray := style(Weight.Dim, Color.Gray)

2
vendor/json.ink generated vendored
View File

@@ -34,7 +34,7 @@ ser := c => type(c) :: {
'boolean' -> string(c)
` do not serialize functions `
'function' -> 'null'
'composite' -> '{' + cat(map(keys(c), k => '"' + k + '":' + ser(c.(k))), ',') + '}'
'composite' -> '{' + cat(map(keys(c), k => '"' + escape(k) + '":' + ser(c.(k))), ',') + '}'
}
` is this character a numeral digit or .? `