aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJieiku2023-05-22 23:24:44 -0700
committerJieiku2023-05-22 23:24:44 -0700
commit3af6d9131f6dfc138856d718ec96626344095ec8 (patch)
tree1a8d75cf494d5333da2cb02506e04c9e0f576f6d
parent3ca36cc469e838cee7d3fdcdc6ff39b35313a293 (diff)
downloadabridge-3af6d9131f6dfc138856d718ec96626344095ec8.tar.gz
abridge-3af6d9131f6dfc138856d718ec96626344095ec8.tar.bz2
abridge-3af6d9131f6dfc138856d718ec96626344095ec8.zip
Optimizations and Fixes
-rw-r--r--COPY-FILES-TO-ROOT-SITE-SASS/abridge.scss128
-rw-r--r--COPY-TO-ROOT-SASS/abridge.scss175
-rw-r--r--config.toml32
-rw-r--r--content/posts/_index.fr.md1
-rw-r--r--content/posts/_index.md1
-rw-r--r--netlify.toml2
-rw-r--r--package.json18
-rw-r--r--sass/_colors.scss50
-rw-r--r--sass/_syntax.scss39
-rw-r--r--sass/abridge.scss461
-rw-r--r--sass/colors-syntax/_abridge.scss61
-rw-r--r--sass/colors/_blue.scss50
-rw-r--r--sass/colors/_blueshade.scss50
-rw-r--r--sass/colors/_orange.scss50
-rw-r--r--screenshot.pngbin119673 -> 109213 bytes
-rw-r--r--static/abridge.min.js1
-rw-r--r--static/js/abridge.min.js1
-rw-r--r--static/js/codecopy.js (renamed from static/codecopy.js)0
-rw-r--r--static/js/elasticlunr.min.js (renamed from static/elasticlunr.min.js)0
-rw-r--r--static/js/email.js (renamed from static/email.js)0
-rw-r--r--static/js/katex-auto-render.min.js (renamed from static/katex-auto-render.min.js)0
-rw-r--r--static/js/katex.min.js (renamed from static/katex.min.js)0
-rw-r--r--static/js/katexbundle.min.js (renamed from static/katexbundle.min.js)0
-rw-r--r--static/js/katexoptions.js (renamed from static/katexoptions.js)0
-rw-r--r--static/js/lunr.da.js (renamed from static/lunr.da.js)0
-rw-r--r--static/js/lunr.da.min.js1
-rw-r--r--static/js/lunr.de.js (renamed from static/lunr.de.js)0
-rw-r--r--static/js/lunr.de.min.js1
-rw-r--r--static/js/lunr.du.js (renamed from static/lunr.du.js)0
-rw-r--r--static/js/lunr.du.min.js1
-rw-r--r--static/js/lunr.es.js (renamed from static/lunr.es.js)0
-rw-r--r--static/js/lunr.es.min.js1
-rw-r--r--static/js/lunr.fi.js (renamed from static/lunr.fi.js)0
-rw-r--r--static/js/lunr.fi.min.js1
-rw-r--r--static/js/lunr.fr.js (renamed from static/lunr.fr.js)0
-rw-r--r--static/js/lunr.fr.min.js1
-rw-r--r--static/js/lunr.hu.js (renamed from static/lunr.hu.js)0
-rw-r--r--static/js/lunr.hu.min.js1
-rw-r--r--static/js/lunr.it.js (renamed from static/lunr.it.js)0
-rw-r--r--static/js/lunr.it.min.js1
-rw-r--r--static/js/lunr.jp.js (renamed from static/lunr.jp.js)0
-rw-r--r--static/js/lunr.jp.min.js1
-rw-r--r--static/js/lunr.no.js (renamed from static/lunr.no.js)0
-rw-r--r--static/js/lunr.no.min.js1
-rw-r--r--static/js/lunr.pt.js (renamed from static/lunr.pt.js)0
-rw-r--r--static/js/lunr.pt.min.js1
-rw-r--r--static/js/lunr.ro.js (renamed from static/lunr.ro.js)0
-rw-r--r--static/js/lunr.ro.min.js1
-rw-r--r--static/js/lunr.ru.js (renamed from static/lunr.ru.js)0
-rw-r--r--static/js/lunr.ru.min.js1
-rw-r--r--static/js/lunr.stemmer.support.js (renamed from static/lunr.stemmer.support.js)0
-rw-r--r--static/js/lunr.stemmer.support.min.js1
-rw-r--r--static/js/lunr.sv.js (renamed from static/lunr.sv.js)0
-rw-r--r--static/js/lunr.sv.min.js1
-rw-r--r--static/js/lunr.tr.js (renamed from static/lunr.tr.js)0
-rw-r--r--static/js/lunr.tr.min.js1
-rw-r--r--static/js/lunr.zh.js (renamed from static/lunr.zh.js)0
-rw-r--r--static/js/lunr.zh.min.js1
-rw-r--r--static/js/mathtex-script-type.min.js (renamed from static/mathtex-script-type.min.js)0
-rw-r--r--static/js/prestyle.js (renamed from static/prestyle.js)0
-rw-r--r--static/js/search.js (renamed from static/search.js)313
-rw-r--r--static/js/search_elasticlunr.min.js1
-rw-r--r--static/js/search_stork.min.js (renamed from static/search_stork.min.js)0
-rw-r--r--static/js/search_tinysearch.min.js (renamed from static/search_tinysearch.min.js)0
-rw-r--r--static/js/searchjava.js354
-rw-r--r--static/js/searchjavaugly.js354
-rw-r--r--static/js/stork.js (renamed from static/stork.js)0
-rw-r--r--static/js/stork_config.js (renamed from static/stork_config.js)0
-rw-r--r--static/js/theme.js (renamed from static/theme.js)0
-rw-r--r--static/js/theme.min.js (renamed from static/theme.min.js)0
-rw-r--r--static/js/theme_button.js (renamed from static/theme_button.js)0
-rw-r--r--static/js/tinysearch.js (renamed from static/tinysearch.js)0
-rw-r--r--static/search_elasticlunr.min.js1
-rw-r--r--templates/base.html10
-rw-r--r--templates/index.html28
-rw-r--r--templates/macros/head.html71
-rw-r--r--templates/posts.html27
-rw-r--r--theme.toml2
78 files changed, 1669 insertions, 629 deletions
diff --git a/COPY-FILES-TO-ROOT-SITE-SASS/abridge.scss b/COPY-FILES-TO-ROOT-SITE-SASS/abridge.scss
deleted file mode 100644
index a552adc..0000000
--- a/COPY-FILES-TO-ROOT-SITE-SASS/abridge.scss
+++ /dev/null
@@ -1,128 +0,0 @@
-@use '../themes/abridge/sass/abridge' with (
- /// LINES HERE END WITH COMMA AFTER THE VALUE!
- $abridgeMode:"switcher",//valid values: switcher, auto, dark, light
-
- /// Enable a centered viewport for <header>, <main>, <footer> inside <body>
- /// Fluid layout until a defined size, then becomes centered viewport
- $enable-maxwidth: true,
- $mw:75%,// max-width
- $mb:1200px,// value at which to switch from fluid layout to max-width
-
- $dark: #ccc #ddd #111 #222 #333 #888 #f90 #fb0 #f90 #593 #e33,//orange
- //$dark: #ccc #ddd #111 #222 #333 #888 #09f #0bf #0af #593 #e33,//blue
- //$dark: #ccc #ddd #111 #123 #345 #789 #09f #0bf #0af #593 #e33,//blueshade
-
- $light: #333 #222 #fff #eee #ddd #555 #c40 #e60 #f90 #373 #d33,//orange
- //$light: #333 #222 #fff #eee #ddd #555 #06e #09f #07f #373 #d33,//blue
- //$light: #333 #222 #fff #def #137 #013 #06e #09f #07f #373 #d33,//blueshade
-
- $syntax-dark: #191919 #e65 #f91 #eb6 #ac3 #8db #6ae #d6e,
- $syntax-light: #f7f7f7 #a21 #930 #a50 #350 #286 #059 #a3c,
-
- $syntax: true,//syntax highlighting for Code Blocks.
-
- $enable-icons: true,// false disables ALL icons
- $ic: true,// true for colorized icons, otherwise #888 is used.
- $icon-rss: true,
- $icon-mail: true,// email mail envelope
- $icon-mastodon: true,
- $icon-element: true,
- $icon-matrix: false,
- $icon-buymeacoffee: true,
- $icon-twitter: true,
- $icon-facebook: true,
- $icon-linkedin: true,
- $icon-codeberg: true,
- $icon-gitlab: true,
- $icon-github: true,
- $icon-github-sponsor: true,
- $icon-bitbucket: true,
- $icon-python: true,
- $icon-docker: true,
- $icon-stack: true,
- $icon-instagram: true,
- $icon-pinterest: true,
- $icon-discord: true,
- $icon-twitch: true,
- $icon-youtube: true,
- $icon-researchgate: true,
-
- $icon-x: true,// x symbol
- $icon-search: true,//search
- $icon-adjust: true,//theme switcher
- $icon-angll: true,//first page
- $icon-angl: true,//previous page
- $icon-angr: true,//next page
- $icon-angrr: true,//last page
- $icon-angu: true,//back to top
-
- $icon-ffolder: false,
- $icon-folder: false,// categories folder
- $icon-ftag: false,
- $icon-tag: false,// tag
- $icon-check: false,// check mark
- $icon-chevron: false,// chevron down
- $icon-clock: false,// time analog clock
- $icon-date: false,// calendar
- $icon-globe: false,
- $icon-home: false,
- $icon-minus: false,// minus symbol
- $icon-moon: false,// dark moon
- $icon-sun: false,// light sun
-
- /// These lines find the spot at which to insert your appended fonts.
- //$findFont-Main: "Segoe UI", // ← append custom MAIN font(s) AFTER this
- //$findFont-Code: "Segoe UI Mono",// ← append custom CODE font(s) AFTER this
-
- /// These lines specify the fonts to add.
- //$fontExt-Main: ("Example Font 1", "Example Font 2"),// MAIN font(s) to add
- //$fontExt-Code: ("Example Code 1", "Example Code 2"),// CODE font(s) to add
-
- /// If prepending/appending fonts above, then no need to change them below
- //$font: "Roboto" "system-ui" "-apple-system" "BlinkMacSystemFont" "Segoe UI" "Oxygen" "Ubuntu" "Cantarell" "Fira Sans" "Droid Sans" "Helvetica Neue" "Noto Sans" "Helvetica" "Arial" "sans-serif",
- //$font-mono: "ui-monospace" "Menlo" "Monaco" "Consolas" "SF Mono" "Cascadia Mono" "Segoe UI Mono" "DejaVu Sans Mono" "Liberation Mono" "Roboto Mono" "Oxygen Mono" "Ubuntu Monospace" "Ubuntu Mono" "Source Code Pro" "Fira Mono" "Droid Sans Mono" "Courier New" "Courier" "monospace",
-
- /// Enable <header>, <main>, <footer> inside <body> as a container
- //$enable-semantic-container: true,
-
- /// Enable responsive typography, Fixed root element size if disabled
- //$enable-responsive-typography: true,
-
- /// Enable responsive spacings for <header>, <main>, <footer>, <section>
- //$enable-responsive-spacings: false,
-
- /// Enable a centered viewport for <header>, <main>, <footer> inside <body>
- /// This option will only work if $enable-maxwidth: false
- //$enable-viewport: false,
-
- /// xs: Extra small (portrait phones)
- /// sm: Small(landscape phones)
- /// md: Medium(tablets)
- /// lg: Large(desktops)
- /// xl: Extra large (large desktops)
-
- /// Breakpoints
- //$breakpoints: (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px),
-
- /// Viewports
- //$viewports: (sm: 510px, md: 700px, lg: 920px, xl: 1130px),
-
- //$document: true,//Content-box & Responsive typography
- //$typography: true,//a, headings, p, ul, blockquote
- //$sectioning: true,//responsive Container, header, main, footer
- //$nav: true,//Horizontal Navigation at top of page
- //$embedded: true,//Embedded content, iframe, video, images, etc.
- //$table: true,//table specific elements
- //$code: true,//codeblocks, code, pre, kbd
- //$hr: true,//Horizontal Rule
- //$scroller: true,//Horizontal scroller (<figure>)
- //$button: true,//Form elements (button)
- //$form: true,//Form elements (non-button)
- //$top: true,//back to top button using CSS
- //$search: true,//search feature
- //$toc: true,//Table of Contents, page index / recent posts block
- //$zola: true,//Zola Specific
- //$misc: false,
- //$grid: false,//Infinity Grid, column based layouts.
- //$syntax: true,//syntax highlighting for code blocks
-);
diff --git a/COPY-TO-ROOT-SASS/abridge.scss b/COPY-TO-ROOT-SASS/abridge.scss
new file mode 100644
index 0000000..ae1bb24
--- /dev/null
+++ b/COPY-TO-ROOT-SASS/abridge.scss
@@ -0,0 +1,175 @@
+@use '../themes/abridge/sass/abridge' with (
+ /// LINES HERE END WITH COMMA AFTER THE VALUE!
+ /// The things your less likely to need to override have been commented out.
+
+ /// Enable a centered viewport for <header>, <main>, <footer> inside <body>
+ /// Fluid layout until a defined size, then becomes centered viewport
+ //$enable-maxwidth: true,
+ $mw: 75%,// max-width
+ //$mb: 1200px,// value at which to switch from fluid layout to max-width
+
+ $abridgeMode: "switcher",//valid values: switcher, auto, dark, light
+ $syntax-mode: "auto",// Force syntax mode: auto, dark, light
+
+ $color: "orange",// color template to use/override: orange, blue, blueshade
+ $color-syntax: "abridge",// syntax color template to use/override: abridge,
+ $syntax: true,//syntax highlighting for Code Blocks.
+
+ $enable-icons: true,// false disables ALL icons
+ $ic: true,// true for colorized icons, otherwise #888 is used.
+
+ $icon-rss: true,
+ $icon-mail: false,// e-mail
+ $icon-mastodon: false,
+ $icon-element: false,
+ $icon-matrix: false,
+ $icon-buymeacoffee: false,
+ $icon-twitter: false,
+ $icon-facebook: false,
+ $icon-linkedin: false,
+ $icon-codeberg: false,
+ $icon-gitlab: false,
+ $icon-github: false,
+ $icon-github-sponsor: false,
+ $icon-bitbucket: false,
+ $icon-python: false,
+ $icon-docker: false,
+ $icon-stack: false,
+ $icon-instagram: false,
+ $icon-pinterest: false,
+ $icon-discord: false,
+ $icon-twitch: false,
+ $icon-youtube: false,
+ $icon-researchgate: false,
+
+ //$icon-x: true,// x symbol, used to close search results page.
+ //$icon-search: true,//search, spyglass search button in search box.
+ //$icon-adjust: true,//theme switcher dark/light toggle button.
+ //$icon-angll: true,//pagination, goto first page
+ //$icon-angl: true,//pagination, goto previous page
+ //$icon-angr: true,//pagination, goto next page
+ //$icon-angrr: true,//pagination, goto last page
+ //$icon-angu: true,//back to top button, appears after scrolling down.
+
+ //$icon-ffolder: false,
+ //$icon-folder: false,// categories folder
+ //$icon-ftag: false,
+ //$icon-tag: false,// tag
+ //$icon-check: false,// check mark
+ //$icon-chevron: false,// chevron down
+ //$icon-clock: false,// time analog clock
+ //$icon-date: false,// calendar
+ //$icon-globe: false,
+ //$icon-home: false,
+ //$icon-minus: false,// minus symbol
+ //$icon-moon: false,// dark moon
+ //$icon-sun: false,// light sun
+
+ /// The colors below can be overrided individually as needed.
+
+ /// Dark Colors
+ //$f1d: #ccc,// Font Color Primary
+ //$f2d: #ddd,// Font Color Headers
+ //$c1d: #111,// Background Color Primary
+ //$c2d: #222,// Background Color Secondary
+ //$c3d: #333,// Table Rows, Block quote edge, Borders
+ //$c4d: #777,// Disabled Buttons, Borders, mark background
+ //$a1d: #f90,// link color
+ //$a2d: #fb0,// link hover/focus color
+ //$a3d: #f90,// link h1-h2 hover/focus color
+ //$cgd: #593,// ins green, success
+ //$crd: #e33,// del red, errors
+
+ /// Light Colors
+ //$f1: #333,// Font Color Primary
+ //$f2: #222,// Font Color Headers
+ //$c1: #fff,// Background Color Primary
+ //$c2: #eee,// Background Color Secondary
+ //$c3: #ddd,// Table Rows, Block quote edge, Borders
+ //$c4: #555,// Disabled Buttons, Borders, mark background
+ //$a1: #c40,// link color
+ //$a2: #e60,// link hover/focus color
+ //$a3: #f90,// link h1-h2 hover/focus color
+ //$cg: #373,// ins green, success
+ //$cr: #d33,// del red, errors
+
+ /// Dark Syntax Colors
+ //$h0d: #191919,// background color
+ //$h1d: #ddd,// unstyled text
+ //$h2d: #888,// comments
+ //$h3d: #e65,// red, support function
+ //$h4d: #e83,// orange, punctuation, constant, variable, json-key
+ //$h5d: #eb6,// tan, entity/function name
+ //$h6d: #ac3,// green, string
+ //$h7d: #8db,// teal, escape character
+ //$h8d: #6ae,// blue, declaration, tag, property
+ //$h9d: #d6e,// purple, operators
+
+ /// Light Syntax Colors
+ //$h0: #f7f7f7,// background color
+ //$h1: #222,// unstyled text
+ //$h2: #666,// comments
+ //$h3: #a21,// red, support function
+ //$h4: #930,// orange, punctuation, constant, variable, json-key
+ //$h5: #a50,// tan, entity/function name
+ //$h6: #350,// green, string
+ //$h7: #286,// teal, escape character
+ //$h8: #059,// blue, declaration, tag, property
+ //$h9: #a3c,// purple, operators
+
+ /// These lines find the spot at which to insert your appended fonts.
+ //$findFont-Main: "Segoe UI", // ← append custom MAIN font(s) AFTER this
+ //$findFont-Code: "Segoe UI Mono",// ← append custom CODE font(s) AFTER this
+
+ /// These lines specify the fonts to add.
+ //$fontExt-Main: (ExampleFont1, "Example Font 2"),// MAIN font(s) to add
+ //$fontExt-Code: (ExampleCode1, "Example Code 2"),// CODE font(s) to add
+
+ /// If prepending/appending fonts above, then no need to change them below
+ //$font: Roboto system-ui -apple-system BlinkMacSystemFont "Segoe UI" Oxygen Ubuntu Cantarell "Fira Sans" "Droid Sans" "Helvetica Neue" "Noto Sans" Helvetica Arial sans-serif,
+ //$font-mono: ui-monospace Menlo Monaco Consolas "SF Mono" "Cascadia Mono" "Segoe UI Mono" "DejaVu Sans Mono" "Liberation Mono" "Roboto Mono" "Oxygen Mono" "Ubuntu Monospace" "Ubuntu Mono" "Source Code Pro" "Fira Mono" "Droid Sans Mono" "Courier New" Courier monospace,
+
+ /// Enable <header>, <main>, <footer> inside <body> as a container
+ //$enable-semantic-container: true,
+
+ /// Enable responsive typography, Fixed root element size if disabled
+ //$enable-responsive-typography: true,
+
+ /// Enable responsive spacings for <header>, <main>, <footer>, <section>
+ //$enable-responsive-spacings: false,
+
+ /// Enable a centered viewport for <header>, <main>, <footer> inside <body>
+ /// This option will only work if $enable-maxwidth: false
+ //$enable-viewport: false,
+
+ /// xs: Extra small (portrait phones)
+ /// sm: Small(landscape phones)
+ /// md: Medium(tablets)
+ /// lg: Large(desktops)
+ /// xl: Extra large (large desktops)
+
+ /// Breakpoints
+ //$breakpoints: (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px),
+
+ /// Viewports
+ //$viewports: (sm: 510px, md: 700px, lg: 920px, xl: 1130px),
+
+ //$document: true,//Content-box & Responsive typography
+ //$typography: true,//a, headings, p, ul, blockquote
+ //$sectioning: true,//responsive Container, header, main, footer
+ //$nav: true,//Horizontal Navigation at top of page
+ //$embedded: true,//Embedded content, iframe, video, images, etc.
+ //$table: true,//table specific elements
+ //$code: true,//codeblocks, code, pre, kbd
+ //$hr: true,//Horizontal Rule
+ //$scroller: true,//Horizontal scroller (<figure>)
+ //$button: true,//Form elements (button)
+ //$form: true,//Form elements (non-button)
+ //$top: true,//back to top button using CSS
+ //$search: true,//search feature
+ //$toc: true,//Table of Contents, page index / recent posts block
+ //$zola: true,//Zola Specific
+ //$misc: false,
+ //$grid: false,//Infinity Grid, column based layouts.
+ //$syntax: true,//syntax highlighting for code blocks
+);
diff --git a/config.toml b/config.toml
index 29b1ba9..45f7f60 100644
--- a/config.toml
+++ b/config.toml
@@ -1,8 +1,8 @@
# do NOT include a trailing slash on the base URL
base_url = "https://abridge.netlify.app"
-#base_url = "/home/jieiku/.dev/abridge/public" # Usable site directly from disk
-# Also set index_format = "elasticlunr_javascript", and in [extra] uglyurls = true, integrity = false
+#base_url = "/home/jieiku/.dev/abridge/public" # Usable site directly from disk, Including Search!
+# Also set index_format = "elasticlunr_javascript", and in [extra] uglyurls = true, integrity = false, js_bundle = false
default_language = "en"
compile_sass = true
@@ -24,11 +24,13 @@ taxonomies = [
#theme = "abridge"
+# Any Extra language you do not use, delete or comment out the extra language sections:
[languages.fr]
title = "Abridge"
description = "Abridge est un thème Zola rapide et léger utilisant le html sémantique, le CSS abridge.css class-light et aucun JS obligatoire."
generate_feed = true
build_search_index = true
+search.include_description = true # include description of page/section in index
taxonomies = [
{name = "categories", feed = true},
{name = "tags", feed = true},
@@ -42,7 +44,7 @@ Recent_Posts = "Articles Récents"
Index = "Indice"
Powered_by = "Propulsé"
and = "et"
-About = "À propos"
+About = "Sur"
Posts = "Articles"
Categories = "Catégories"
Tags = "Mots-clés"
@@ -58,9 +60,9 @@ Sitemap = "Plan du site"
#tags = "Etiquetas"
[search] # Options specific to elasticlunr search.
-index_format = "elasticlunr_json"
+index_format = "elasticlunr_json" # elasticlunr_json, elasticlunr_javascript
include_title = true # include title of page/section in index
-include_description = false # include description of page/section in index
+include_description = true # include description of page/section in index
include_content = true # include rendered content of page/section in index
# truncate_content_length = 100 # Truncate at nth character. May be useful if index is getting too large.
@@ -193,11 +195,11 @@ js_copycode = true # The copy button on code blocks that allows you to copy them
search_library = 'elasticlunr'
#js_search_index = "search_index.en.json" # Separate Always, generated each build
-#js_theme = "theme.min.js" # Separate Always, comment out if using -auto/-light/-dark stylesheet. (required for switcher)
-#js_themeButton = "theme_button.js"# Bundleable - light/dark switcher button
-#js_prestyle = "prestyle.js"# Bundleable - used to preload: FontAwesome, Katex, external Google Fonts
-#js_codecopy = "codecopy.js"# Bundleable - copy code block to clipboard button
-#js_email = "email.js"# Bundleable - obfuscates email address in footer
+#js_theme = "js/theme.min.js" # Separate Always, comment out if using -auto/-light/-dark stylesheet. (required for switcher)
+#js_themeButton = "js/theme_button.js"# Bundleable - light/dark switcher button
+#js_prestyle = "js/prestyle.js"# Bundleable - used to preload: FontAwesome, Katex, external Google Fonts
+#js_codecopy = "js/codecopy.js"# Bundleable - copy code block to clipboard button
+#js_email = "js/email.js"# Bundleable - obfuscates email address in footer
stylesheets = [ "abridge.css" ]
@@ -294,14 +296,14 @@ favicon16 = "favicon-16x16.png" # favicon-16x16.png
### Otherwise you will load the katex related javascript on every page!
###############################################################################
-#katex_options = "katexoptions.js"
-#katex_bundle = "katexbundle.min.js"
+#katex_options = "js/katexoptions.js"
+#katex_bundle = "js/katexbundle.min.js"
### Load Katex Local Resources
#katex_css = "katex.min.css" # Fonts - load the css/fonts locally
-#katex_js = "katex.min.js" # use local js, so that we dont have to whitelist cdn.jsdelivr.net for script src in CSP
-#mathtex_js = "mathtex-script-type.min.js" # use local js, so that we dont have to whitelist cdn.jsdelivr.net for script src in CSP
-#katex_autorender_js = "katex-auto-render.min.js"
+#katex_js = "js/katex.min.js" # use local js, so that we dont have to whitelist cdn.jsdelivr.net for script src in CSP
+#mathtex_js = "js/mathtex-script-type.min.js" # use local js, so that we dont have to whitelist cdn.jsdelivr.net for script src in CSP
+#katex_autorender_js = "js/katex-auto-render.min.js"
### Load Katex External Resources
#katex_css = "https://cdn.jsdelivr.net/npm/katex@0.15.6/dist/katex.min.css" # Fonts - use remote fonts
diff --git a/content/posts/_index.fr.md b/content/posts/_index.fr.md
index e381261..c700dc5 100644
--- a/content/posts/_index.fr.md
+++ b/content/posts/_index.fr.md
@@ -1,4 +1,3 @@
+++
-title = "posts"
template = "posts.html"
+++
diff --git a/content/posts/_index.md b/content/posts/_index.md
index e381261..c700dc5 100644
--- a/content/posts/_index.md
+++ b/content/posts/_index.md
@@ -1,4 +1,3 @@
+++
-title = "posts"
template = "posts.html"
+++
diff --git a/netlify.toml b/netlify.toml
index 2fdf7b5..9c492bb 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -3,7 +3,7 @@ publish = "public"
command = "zola build && npm run abridge-demo && zola build"
[build.environment]
-ZOLA_VERSION = "0.17.1"
+ZOLA_VERSION = "0.17.2"
[context.deploy-preview]
command = "zola build --base-url $DEPLOY_PRIME_URL && npm run abridge-demo && zola build --base-url $DEPLOY_PRIME_URL"
diff --git a/package.json b/package.json
index 694a050..e376c3d 100644
--- a/package.json
+++ b/package.json
@@ -6,16 +6,16 @@
"license": "MIT",
"homepage": "https://github.com/Jieiku/abridge",
"scripts": {
- "theme": "uglifyjs static/theme.js -c -m -o static/theme.min.js",
- "katex-bundle": "uglifyjs static/katex.min.js static/mathtex-script-type.min.js static/katex-auto-render.min.js static/katexoptions.js -c -m -o static/katexbundle.min.js",
- "search-elasticlunr": "uglifyjs static/elasticlunr.min.js static/search.js -c -m -o static/search_elasticlunr.min.js",
- "search-stork": "uglifyjs static/stork.js static/stork_config.js -c -m -o static/search_stork.min.js",
- "search-tinysearch": "uglifyjs static/tinysearch.js -c -m -o static/search_tinysearch.min.js",
+ "theme": "uglifyjs static/js/theme.js -c -m -o static/js/theme.min.js",
+ "katex-bundle": "uglifyjs static/js/katex.min.js static/js/mathtex-script-type.min.js static/js/katex-auto-render.min.js static/js/katexoptions.js -c -m -o static/js/katexbundle.min.js",
+ "search-elasticlunr": "uglifyjs static/js/elasticlunr.min.js static/js/search.js -c -m -o static/js/search_elasticlunr.min.js",
+ "search-stork": "uglifyjs static/js/stork.js static/js/stork_config.js -c -m -o static/js/search_stork.min.js",
+ "search-tinysearch": "uglifyjs static/js/tinysearch.js -c -m -o static/js/search_tinysearch.min.js",
"all": "npm run theme && npm run katex-bundle && npm run search-elasticlunr && npm run search-stork && npm run search-tinysearch",
- "abridge-bundle-nosearch": "npm run all && uglifyjs static/prestyle.js static/theme_button.js static/email.js static/codecopy.js -c -m -o static/abridge.min.js",
- "abridge-bundle-elasticlunr": "npm run all && uglifyjs static/prestyle.js static/theme_button.js static/search_elasticlunr.min.js static/email.js static/codecopy.js -c -m -o static/abridge.min.js",
- "abridge-bundle-tinysearch": "npm run all && uglifyjs static/prestyle.js static/theme_button.js static/search_tinysearch.min.js static/email.js static/codecopy.js -c -m -o static/abridge.min.js",
- "abridge-bundle-stork": "npm run all && uglifyjs static/prestyle.js static/theme_button.js static/search_stork.min.js static/email.js static/codecopy.js -c -m -o static/abridge.min.js",
+ "abridge-bundle-nosearch": "npm run all && uglifyjs static/js/prestyle.js static/js/theme_button.js static/js/email.js static/js/codecopy.js -c -m -o static/js/abridge.min.js",
+ "abridge-bundle-elasticlunr": "npm run all && uglifyjs static/js/prestyle.js static/js/theme_button.js static/js/search_elasticlunr.min.js static/js/email.js static/js/codecopy.js -c -m -o static/js/abridge.min.js",
+ "abridge-bundle-tinysearch": "npm run all && uglifyjs static/js/prestyle.js static/js/theme_button.js static/js/search_tinysearch.min.js static/js/email.js static/js/codecopy.js -c -m -o static/js/abridge.min.js",
+ "abridge-bundle-stork": "npm run all && uglifyjs static/js/prestyle.js static/js/theme_button.js static/js/search_stork.min.js static/js/email.js static/js/codecopy.js -c -m -o static/js/abridge.min.js",
"nosearch": "npm run abridge-bundle-nosearch && sed -i \"s|^build_search_index.*|build_search_index = false|\" 'config.toml' && sed -i \"s|^search_library.*|search_library = false|\" 'config.toml' && sed -i \"s|^draft.*|draft = true|\" 'content/static/tinysearch_json.md' && sed -i \"s|^draft.*|draft = true|\" 'content/static/stork_toml.md' && zola build",
"elasticlunr": "npm run abridge-bundle-elasticlunr && sed -i \"s|^build_search_index.*|build_search_index = true|\" 'config.toml' && sed -i \"s|^search_library.*|search_library = 'elasticlunr'|\" 'config.toml' && sed -i \"s|^draft.*|draft = true|\" 'content/static/tinysearch_json.md' && sed -i \"s|^draft.*|draft = true|\" 'content/static/stork_toml.md' && zola build",
"tinysearch": "npm run abridge-bundle-tinysearch && sed -i \"s|^build_search_index.*|build_search_index = true|\" 'config.toml' && sed -i \"s|^search_library.*|search_library = 'tinysearch'|\" 'config.toml' && sed -i \"s|^draft.*|draft = false|\" 'content/static/tinysearch_json.md' && sed -i \"s|^draft.*|draft = true|\" 'content/static/stork_toml.md' && zola build && mkdir -p tmp && tinysearch --optimize --path tmp public/data_tinysearch/index.html && rsync -avz tmp/*.wasm static/ && rm -rf tmp",
diff --git a/sass/_colors.scss b/sass/_colors.scss
deleted file mode 100644
index 46a21db..0000000
--- a/sass/_colors.scss
+++ /dev/null
@@ -1,50 +0,0 @@
-@mixin dark(
- $f1: #ccc,
- $f2: #ddd,
- $c1: #111,
- $c2: #222,
- $c3: #333,
- $c4: #888,
- $a1: #f90,
- $a2: #fb0,
- $a3: #f90,
- $cg: #593,
- $cr: #e33
-) {
- #{--f1}: $f1;// Font Color Primary (ccc)
- #{--f2}: $f2;// Font Color Headers (ddd)
- #{--c1}: $c1;// Background Color Primary (111)
- #{--c2}: $c2;// Background Color Secondary (222)
- #{--c3}: $c3;// Table Rows, Block quote edge, Borders (333)
- #{--c4}: $c4;// Disabled Buttons, Borders, mark background (888)
- #{--a1}: $a1;// link color (f90)
- #{--a2}: $a2;// link hover/focus color (fb0)
- #{--a3}: $a3;// link h1-h2 hover/focus color (f90)
- #{--cg}: $cg;// ins green, success (593)
- #{--cr}: $cr;// del red, errors (e33)
-}
-@mixin light(
- $f1: #333,
- $f2: #222,
- $c1: #fff,
- $c2: #eee,
- $c3: #ddd,
- $c4: #555,
- $a1: #c40,
- $a2: #e60,
- $a3: #f90,
- $cg: #373,
- $cr: #d33
-) {
- #{--f1}: $f1;// Font Color Primary (444)
- #{--f2}: $f2;// Font Color Headers (333)
- #{--c1}: $c1;// Background Color Primary (fff)
- #{--c2}: $c2;// Background Color Secondary (eee)
- #{--c3}: $c3;// Table Rows, Block quote edge, Borders (ddd)
- #{--c4}: $c4;// Disabled Buttons, Borders, mark background (677)
- #{--a1}: $a1;// link color (c40)
- #{--a2}: $a2;// link hover/focus color (e60)
- #{--a3}: $a3;// link h1-h2 hover/focus color (f90)
- #{--cg}: $cg;// ins green, success (373)
- #{--cr}: $cr;// del red, errors (d33)
-}
diff --git a/sass/_syntax.scss b/sass/_syntax.scss
deleted file mode 100644
index 0f822d7..0000000
--- a/sass/_syntax.scss
+++ /dev/null
@@ -1,39 +0,0 @@
-// Syntax Highlighting
-@mixin dark(
- $bg: #191919,
- $h1: #e65,
- $h2: #f91,
- $h3: #eb6,
- $h4: #ac3,
- $h5: #8db,
- $h6: #6ae,
- $h7: #d6e
-) {
- #{--bg}: $bg;// background color
- #{--h1}: $h1;// red, support function
- #{--h2}: $h2;// orange, punctuation, constant, variable, json-key
- #{--h3}: $h3;// tan, entity/function name
- #{--h4}: $h4;// green, string
- #{--h5}: $h5;// teal, escape character
- #{--h6}: $h6;// blue, declaration, tag, property
- #{--h7}: $h7;// purple, operators
-}
-@mixin light(
- $bg: #f7f7f7,
- $h1: #a21,
- $h2: #930,
- $h3: #a50,
- $h4: #350,
- $h5: #286,
- $h6: #059,
- $h7: #a3c
-) {
- #{--bg}: $bg;// background color
- #{--h1}: $h1;// red, support function
- #{--h2}: $h2;// orange, punctuation, constant, variable, json-key
- #{--h3}: $h3;// tan, entity/function name
- #{--h4}: $h4;// green, string
- #{--h5}: $h5;// teal, escape character
- #{--h6}: $h6;// blue, declaration, tag, property
- #{--h7}: $h7;// purple, operators
-}
diff --git a/sass/abridge.scss b/sass/abridge.scss
index 3c7236e..1e20079 100644
--- a/sass/abridge.scss
+++ b/sass/abridge.scss
@@ -2,38 +2,34 @@
@use "sass:list";
@use "functions";
-@use "colors";
-@use "syntax";
/******************************************************************************
* Variables
*****************************************************************************/
-$abridgeMode: "switcher" !default;//valid values: switcher, auto, dark, light
-
/// Enable a centered viewport for <header>, <main>, <footer> inside <body>
/// Fluid layout until a defined size, then becomes centered viewport
$enable-maxwidth: true !default;
-$mw:60% !default;// max-width
-$mb:1200px !default;// value at which to switch from fluid layout to max-width
+$mw: 60% !default;// max-width
+$mb: 1200px !default;// value at which to switch from fluid layout to max-width
-$dark: #ccc #ddd #111 #222 #333 #888 #f90 #fb0 #f90 #593 #e33 !default;//orange
-//$dark: #ccc #ddd #111 #222 #333 #888 #09f #0bf #0af #593 #e33 !default;//blue
-//$dark: #ccc #ddd #111 #123 #345 #789 #09f #0bf #0af #593 #e33 !default;//blueshade
-
-$light: #333 #222 #fff #eee #ddd #555 #c40 #e60 #f90 #373 #d33 !default;//orange
-//$light: #333 #222 #fff #eee #ddd #555 #06e #09f #07f #373 #d33 !default;//blue
-//$light: #333 #222 #fff #def #137 #013 #06e #09f #07f #373 #d33 !default;//blueshade
+$abridgeMode: "switcher" !default;//valid values: switcher, auto, dark, light
+$syntax-mode: "auto" !default;// Force syntax mode: auto, dark, light
-$syntax-dark: #191919 #e65 #f91 #eb6 #ac3 #8db #6ae #d6e !default;
-$syntax-light: #f7f7f7 #a21 #930 #a50 #350 #286 #059 #a3c !default;
+$path: "colors/" !default;
+$color: "orange" !default;// color template to use/override: orange, blue, blueshade
+@include meta.load-css(#{$path}#{$color});
+$spath: "colors-syntax/" !default;
+$color-syntax: "abridge" !default;// syntax color template to use/override: abridge,
+@include meta.load-css(#{$spath}#{$color-syntax});
$syntax: true !default;//syntax highlighting for Code Blocks.
$enable-icons: true !default; // false disables ALL icons
$ic: true !default; // true for colorized icons, otherwise #888 is used.
+
$icon-rss: true !default;
-$icon-mail: true !default;// email mail envelope
+$icon-mail: true !default;// e-mail
$icon-mastodon: true !default;
$icon-element: true !default;
$icon-matrix: false !default;
@@ -56,14 +52,14 @@ $icon-twitch: true !default;
$icon-youtube: true !default;
$icon-researchgate: true !default;
-$icon-x: true !default;// x symbol
-$icon-search: true !default;//search
-$icon-adjust: true !default;//theme switcher
-$icon-angll: true !default;//first page
-$icon-angl: true !default;//previous page
-$icon-angr: true !default;//next page
-$icon-angrr: true !default;//last page
-$icon-angu: true !default;//back to top
+$icon-x: true !default;// x symbol, used to close search results page.
+$icon-search: true !default;//search, spyglass search button in search box.
+$icon-adjust: true !default;//theme switcher dark/light toggle button.
+$icon-angll: true !default;//pagination, goto first page
+$icon-angl: true !default;//pagination, goto previous page
+$icon-angr: true !default;//pagination, goto next page
+$icon-angrr: true !default;//pagination, goto last page
+$icon-angu: true !default;//back to top button, appears after scrolling down.
$icon-ffolder: false !default;
$icon-folder: false !default;// categories folder
@@ -79,6 +75,60 @@ $icon-minus: false !default;// minus symbol
$icon-moon: false !default;// dark moon
$icon-sun: false !default;// light sun
+/// Dark Colors
+$f1d: #ccc !default;// Font Color Primary
+$f2d: #ddd !default;// Font Color Headers
+$c1d: #111 !default;// Background Color Primary
+$c2d: #222 !default;// Background Color Secondary
+$c3d: #333 !default;// Table Rows, Block quote edge, Borders
+$c4d: #777 !default;// Disabled Buttons, Borders, mark background
+$a1d: #f90 !default;// link color
+$a2d: #fb0 !default;// link hover/focus color
+$a3d: #f90 !default;// link h1-h2 hover/focus color
+$cgd: #593 !default;// ins green, success
+$crd: #e33 !default;// del red, errors
+$dark: $f1d $f2d $c1d $c2d $c3d $c4d $a1d $a2d $a3d $cgd $crd;
+
+/// Light Colors
+$f1: #333 !default;// Font Color Primary
+$f2: #222 !default;// Font Color Headers
+$c1: #fff !default;// Background Color Primary
+$c2: #eee !default;// Background Color Secondary
+$c3: #ddd !default;// Table Rows, Block quote edge, Borders
+$c4: #555 !default;// Disabled Buttons, Borders, mark background
+$a1: #c40 !default;// link color
+$a2: #e60 !default;// link hover/focus color
+$a3: #f90 !default;// link h1-h2 hover/focus color
+$cg: #373 !default;// ins green, success
+$cr: #d33 !default;// del red, errors
+$light: $f1 $f2 $c1 $c2 $c3 $c4 $a1 $a2 $a3 $cg $cr;
+
+/// Dark Syntax Colors
+$h0d: #191919 !default;// background color
+$h1d: #ddd !default;// unstyled text
+$h2d: #888 !default;// comments
+$h3d: #e65 !default;// red, support function
+$h4d: #e83 !default;// orange, punctuation, constant, variable, json-key
+$h5d: #eb6 !default;// tan, entity/function name
+$h6d: #ac3 !default;// green, string
+$h7d: #8db !default;// teal, escape character
+$h8d: #6ae !default;// blue, declaration, tag, property
+$h9d: #d6e !default;// purple, operators
+$syntax-dark: $h0d $h1d $h2d $h3d $h4d $h5d $h6d $h7d $h8d $h9d;
+
+/// Light Syntax Colors
+$h0: #f7f7f7 !default;// background color
+$h1: #222 !default;// unstyled text
+$h2: #666 !default;// comments
+$h3: #a21 !default;// red, support function
+$h4: #930 !default;// orange, punctuation, constant, variable, json-key
+$h5: #a50 !default;// tan, entity/function name
+$h6: #350 !default;// green, string
+$h7: #286 !default;// teal, escape character
+$h8: #059 !default;// blue, declaration, tag, property
+$h9: #a3c !default;// purple, operators
+$syntax-light: $h0 $h1 $h2 $h3 $h4 $h5 $h6 $h7 $h8 $h9;
+
/// These lines find the spot at which to insert your appended fonts.
//$findFont-Main : "Segoe UI"; // ← append custom MAIN font(s) AFTER this
//$findFont-Code : "Segoe UI Mono";// ← append custom CODE font(s) AFTER this
@@ -86,13 +136,13 @@ $findFont-Main : null !default;
$findFont-Code : null !default;
/// These lines specify the fonts to add.
-//$fontExt-Main : ("Example Font 1", "Example Font 2") // MAIN font(s) to add
-//$fontExt-Code : ("Example Code 1", "Example Code 2") // CODE font(s) to add
+//$fontExt-Main : (ExampleFont1, "Example Font 2");// MAIN font(s) to add
+//$fontExt-Code : (ExampleCode1, "Example Code 2");// CODE font(s) to add
$fontExt-Main : null !default;
$fontExt-Code : null !default;
-$font: "Roboto" "system-ui" "-apple-system" "BlinkMacSystemFont" "Segoe UI" "Oxygen" "Ubuntu" "Cantarell" "Fira Sans" "Droid Sans" "Helvetica Neue" "Noto Sans" "Helvetica" "Arial" "sans-serif" !default;
-$font-mono: "ui-monospace" "Menlo" "Monaco" "Consolas" "SF Mono" "Cascadia Mono" "Segoe UI Mono" "DejaVu Sans Mono" "Liberation Mono" "Roboto Mono" "Oxygen Mono" "Ubuntu Monospace" "Ubuntu Mono" "Source Code Pro" "Fira Mono" "Droid Sans Mono" "Courier New" "Courier" "monospace" !default;
+$font: Roboto system-ui -apple-system BlinkMacSystemFont "Segoe UI" Oxygen Ubuntu Cantarell "Fira Sans" "Droid Sans" "Helvetica Neue" "Noto Sans" Helvetica Arial sans-serif !default;
+$font-mono: ui-monospace Menlo Monaco Consolas "SF Mono" "Cascadia Mono" "Segoe UI Mono" "DejaVu Sans Mono" "Liberation Mono" "Roboto Mono" "Oxygen Mono" "Ubuntu Monospace" "Ubuntu Mono" "Source Code Pro" "Fira Mono" "Droid Sans Mono" "Courier New" Courier monospace !default;
/// Enable <header>, <main>, <footer> inside <body> as a container
$enable-semantic-container: true !default;
@@ -237,51 +287,74 @@ $syntax: true !default;//syntax highlighting for code blocks
#{--ff}: $font;
#{--fm}: $font-mono;//code
}
-:root {
- @include font;
- @include root;
-}
@if $abridgeMode == "auto" {
:root {
- @include colors.dark($dark...);
+ @include font;
+ @include root;
+ @include dark($dark...);
@if $syntax {
- @include syntax.dark($syntax-dark...);
+ @if $syntax-mode == "light" {
+ @include synlight($syntax-light...);
+ } @else {
+ @include syndark($syntax-dark...);
+ }
}
}
@media (prefers-color-scheme: light) {
:root {
- @include colors.light($light...);
+ @include light($light...);
@if $syntax {
- @include syntax.light($syntax-light...);
+ @if $syntax-mode == "auto" {
+ @include synlight($syntax-light...);
+ }
}
}
}
} @else if $abridgeMode == "dark" {
:root {
- @include colors.dark($dark...);
+ @include font;
+ @include root;
+ @include dark($dark...);
@if $syntax {
- @include syntax.dark($syntax-dark...);
+ @include syndark($syntax-dark...);
}
}
} @else if $abridgeMode == "light" {
:root {
- @include colors.light($light...);
+ @include font;
+ @include root;
+ @include light($light...);
@if $syntax {
- @include syntax.light($syntax-light...);
+ @include synlight($syntax-light...);
}
}
} @else {//switcher (default)
+ :root {
+ @include font;
+ @include root;
+ @if $syntax {
+ @if $syntax-mode == "light" {
+ @include synlight($syntax-light...);
+ } @else if $syntax-mode == "dark" {
+ @include syndark($syntax-dark...);
+ }
+ }
+ }
:root:not(.light) {
- @include colors.dark($dark...);
+ @include dark($dark...);
@if $syntax {
- @include syntax.dark($syntax-dark...);
+ @if $syntax-mode == "auto" {
+ @include syndark($syntax-dark...);
+ }
}
}
:root.light {
- @include colors.light($light...);
+ @include light($light...);
@if $syntax {
- @include syntax.light($syntax-light...);
+ @if $syntax-mode == "auto" {
+ @include synlight($syntax-light...);
+ }
}
}
}
@@ -290,70 +363,6 @@ $syntax: true !default;//syntax highlighting for code blocks
/******************************************************************************
* Optional SCSS Blocks
*****************************************************************************/
-@if $enable-icons {
- @if $icon-adjust {.adjust { -webkit-mask: functions.icon(adjust, "none", 1, "%23000", $ic) ; background: var(--f2) }}//theme switcher
- @if $icon-angl {.angl { -webkit-mask: functions.icon(angl, "%23000", 3, "none", $ic) ; background: var(--f2) }}//angle left
- @if $icon-angll {.angll { -webkit-mask: functions.icon(angll, "%23000", 3, "none", $ic) ; background: var(--f2) }}//angle left left
- @if $icon-angr {.angr { -webkit-mask: functions.icon(angr, "%23000", 3, "none", $ic) ; background: var(--f2) }}//angle right
- @if $icon-angrr {.angrr { -webkit-mask: functions.icon(angrr, "%23000", 3, "none", $ic) ; background: var(--f2) }}//angle right right
- @if $icon-angu {.angu { -webkit-mask: functions.icon(angu, "%23000", 3, "none", $ic) ; background: var(--f2) }}//angle up
- @if $icon-search {.search { -webkit-mask: functions.icon(search, "%23000", 3, "none", $ic) ; background: var(--f2) }}//search
- @if $icon-bitbucket {.bitbucket { background-image: functions.icon(bitbucket, "%2328f", 2, "none", $ic) }}
- @if $icon-buymeacoffee {.buymeacoffee { background-image: functions.icon(buymeacoffee, "%23777", 1, "%23fd0", $ic) }}
- @if $icon-check {.check { background-image: functions.icon(check, "%23888", 2, "none", $ic) }}
- @if $icon-chevron {.chevron { background-image: functions.icon(chevron, "%23888", 2, "none", $ic) }}
- @if $icon-clock {.clock { background-image: functions.icon(clock, "%23888", 2, "none", $ic) }}
- @if $icon-codeberg {.codeberg { background-image: functions.icon(codeberg, "%23555", 2, "%23aaa", $ic) }}
- @if $icon-date {.date { background-image: functions.icon(date, "%23888", 2, "none", $ic) }}
- @if $icon-discord {.discord { background-image: functions.icon(discord, "none", 1, "%2356f", $ic) }}
- @if $icon-docker {.docker { background-image: functions.icon(docker, "%2329e", 2, "none", $ic) }}
- @if $icon-element {.element { background-image: functions.icon(element, "none", 1, "%231c8", $ic) }}
- @if $icon-facebook {.facebook { background-image: functions.icon(facebook, "%23359", 2, "none", $ic) }}
- @if $icon-folder {.folder { background-image: functions.icon(folder, "%23888", 2, "none", $ic) }}
- @if $icon-github {.github { background-image: functions.icon(github, "%23888", 2, "none", $ic) }}
- @if $icon-github-sponsor {.github-sponsor { background-image: functions.icon(github-sponsor, "%23c49", 2, "none", $ic) }}
- @if $icon-gitlab {.gitlab { background-image: functions.icon(gitlab, "%23e62", 2, "none", $ic) }}
- @if $icon-globe {.globe { background-image: functions.icon(globe, "%23888", 2, "none", $ic) }}
- @if $icon-home {.home { background-image: functions.icon(home, "%23888", 2, "none", $ic) }}
- @if $icon-instagram {.instagram { background-image: functions.icon(instagram, "%23e07", 2, "none", $ic) }}
- @if $icon-linkedin {.linkedin { background-image: functions.icon(linkedin, "%2326a", 2, "none", $ic) }}
- @if $icon-mail {.mail { background-image: functions.icon(mail, "%23888", 2, "none", $ic) }}
- @if $icon-mastodon {.mastodon { background-image: functions.icon(mastodon, "none", 1, "%2328c", $ic) }}
- @if $icon-matrix {.matrix { background-image: functions.icon(matrix, "%23888", 2, "none", $ic) }}
- @if $icon-minus {.minus { background-image: functions.icon(minus, "%23888", 2, "none", $ic) }}
- @if $icon-moon {.moon { background-image: functions.icon(moon, "%23888", 2, "none", $ic) }}
- @if $icon-pinterest {.pinterest { background-image: functions.icon(pinterest, "%23b01", 2, "none", $ic) }}
- @if $icon-python {.python { background-image: functions.icon(python, "%23fc1", 2, "%2326a", $ic) }}
- @if $icon-researchgate {.researchgate { background-image: functions.icon(researchgate, "none", 2, "%230db", $ic) }}
- @if $icon-rss {.rss { background-image: functions.icon(rss, "%23e94", 2, "none", $ic) }}
- @if $icon-stack {.stack { background-image: functions.icon(stack, "%23e72", 2, "none", $ic) }}
- @if $icon-sun {.sun { background-image: functions.icon(sun, "%23888", 2, "none", $ic) }}
- @if $icon-tag {.tag { background-image: functions.icon(tag, "%23888", 2, "none", $ic) }}
- @if $icon-twitch {.twitch { background-image: functions.icon(twitch, "%23a7f", 2, "none", $ic) }}
- @if $icon-twitter {.twitter { background-image: functions.icon(twitter, "%232ad", 2, "none", $ic) }}
- @if $icon-x {.x { background-image: functions.icon(x, "%23f00", 3, "none", $ic) }}
- @if $icon-youtube {.youtube { background-image: functions.icon(youtube, "%23f00", 2, "none", $ic) }}
- .svg {
- width: 1.8rem;
- height: 1.8rem;
- display: inline-block;
- //overflow: hidden;
- text-align: center;
- vertical-align: middle;
- }
- .svgs {
- width: var(--fs);
- height: var(--fs);
- display: inline-block;
- //overflow: hidden;
- text-align: center;
- vertical-align: middle;
- }
- .fa-a:hover {
- color: var(--a3);
- opacity: 1;
- }
-}
@if $document {
// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`
*,
@@ -645,6 +654,16 @@ $syntax: true !default;//syntax highlighting for code blocks
margin-left: auto;
padding-right: var(--s1);//add some spacing between nav divs
}
+ // mobile first layout.
+ header nav {
+ flex-direction: column;// column layout for mobile view
+ h1 {
+ margin: var(--s2) 0 var(--s1);//adds more padding above for mobile view
+ }
+ div {
+ margin: auto; // keeps top menu/search centered in mobile view
+ }
+ }
nav > div {
ul, h2 {
line-height: 1.9;
@@ -669,7 +688,7 @@ $syntax: true !default;//syntax highlighting for code blocks
}
li {
display: inline-block;
- margin: 0 .3rem;
+ margin: 0 .2rem;
}
}
main nav {
@@ -719,6 +738,7 @@ $syntax: true !default;//syntax highlighting for code blocks
.dropdown {
display: inline-block;
position: relative;
+ z-index: 99;
vertical-align: -3px;
font-weight: var(--fh);
font-size: 1.3rem;
@@ -726,27 +746,28 @@ $syntax: true !default;//syntax highlighting for code blocks
.dropdown-content {
display: none;
position: absolute;
- z-index: 9;
+ z-index: 99;
font-weight: var(--fh);
font-size: 1.3rem;
}
.dropdown:hover .dropdown-content {
display: block;
+ z-index: 99;
a {
text-decoration: none;
}
}
- // breakpoint makes header responsive for mobile layouts
+ // breakpoint makes header responsive for desktop layouts
+ // mobile first is min-width for desktop instead of max-width for mobile
@if map-get($breakpoints, "md") {
- @media (max-width: map-get($breakpoints, "md")) {
+ @media (min-width: map-get($breakpoints, "md")) {
+ header > nav > div {
+ margin: var(--s1) 0;// desktop layout
+ }
header nav {
- display: flex;
- flex-direction: column;
+ flex-direction: row;// row layout for desktop view
h1 {
- margin: var(--s2) 0 var(--s1);
- }
- div {
- margin: auto; // keeps top menu/search centered in mobile view
+ margin: var(--s1) 0;// desktop layout
}
}
}
@@ -998,10 +1019,10 @@ $syntax: true !default;//syntax highlighting for code blocks
z-index: 9;
background: var(--c1);
border: 2px solid var(--c3);
- position: absolute;
- right: 0;
+ position: static;
+ left: 0;
+ width: 100%;
margin-top: var(--s1);
- width: 500px;
max-height: 500px;
overflow: auto;
}
@@ -1038,22 +1059,25 @@ $syntax: true !default;//syntax highlighting for code blocks
white-space: nowrap;
}
.searchd > input {
- max-width: 15.3rem;
+ max-width: 100%;
+ flex-grow: 1;
padding-right:2.4rem;//inlayed search icon
}
.searchd > button {
margin-left: -2.4rem;//inlayed search icon
}
+ // mobile first is min-width for desktop instead of max-width for mobile
@if map-get($breakpoints, "md") {
- @media (max-width: map-get($breakpoints, "md")) {
+ @media (min-width: map-get($breakpoints, "md")) {
.searchd > input {
- max-width: 100%;
- flex-grow: 1;
+ max-width: 15.3rem;
+ flex-grow: 0;
}
#suggestions {
- position: static;
- left: 0;
- width: 100%;
+ position: absolute;
+ right: 0;
+ left: unset;
+ width: 500px;
}
}
}
@@ -1085,6 +1109,9 @@ $syntax: true !default;//syntax highlighting for code blocks
color: var(--f1);
}
}
+ .toc {
+ display: none;
+ }
.toc-sticky {
border-radius: var(--br);
border-top: 5px solid var(--a1);
@@ -1097,9 +1124,10 @@ $syntax: true !default;//syntax highlighting for code blocks
overflow: auto;
}
@if map-get($breakpoints, "md") {
- @media (max-width: map-get($breakpoints, "md")) {
+ // mobile first is min-width for desktop instead of max-width for mobile
+ @media (min-width: map-get($breakpoints, "md")) {
.toc {
- display: none;
+ display: unset;
}
}
}
@@ -1116,7 +1144,7 @@ $syntax: true !default;//syntax highlighting for code blocks
.rpad {padding-right: .2rem}
.si {font-size: 1.5em}
pre code[data-lang]::before {
- color: var(--f1);
+ color: var(--h1);
text-transform: uppercase;
content: ' [' attr(data-lang) '] ' "\a\a";
}
@@ -1138,12 +1166,6 @@ $syntax: true !default;//syntax highlighting for code blocks
top: 9px;
font-size: .8rem;
}
- // Mark Override, this is used for Zola's linenos and hl_lines
- :root:not(.light) code table {
- mark {
- filter: brightness(120%);
- }
- }
// Table Override, this is used for Zola's linenos and hl_lines
code {
table {
@@ -1152,7 +1174,6 @@ $syntax: true !default;//syntax highlighting for code blocks
// Highlighted text
mark {
display: block;
- background-color: var(--c2);
color: unset;
padding: 0;
}
@@ -1201,205 +1222,269 @@ $syntax: true !default;//syntax highlighting for code blocks
margin:var(--s1);
}
}
+@if $enable-icons {
+ @if $icon-adjust {.adjust { -webkit-mask: functions.icon(adjust, "none", 1, "%23000", $ic) ; background: var(--f2) }}//theme switcher
+ @if $icon-angl {.angl { -webkit-mask: functions.icon(angl, "%23000", 3, "none", $ic) ; background: var(--f2) }}//angle left
+ @if $icon-angll {.angll { -webkit-mask: functions.icon(angll, "%23000", 3, "none", $ic) ; background: var(--f2) }}//angle left left
+ @if $icon-angr {.angr { -webkit-mask: functions.icon(angr, "%23000", 3, "none", $ic) ; background: var(--f2) }}//angle right
+ @if $icon-angrr {.angrr { -webkit-mask: functions.icon(angrr, "%23000", 3, "none", $ic) ; background: var(--f2) }}//angle right right
+ @if $icon-angu {.angu { -webkit-mask: functions.icon(angu, "%23000", 3, "none", $ic) ; background: var(--f2) }}//angle up
+ @if $icon-search {.search { -webkit-mask: functions.icon(search, "%23000", 3, "none", $ic) ; background: var(--f2) }}//search
+ @if $icon-bitbucket {.bitbucket { background-image: functions.icon(bitbucket, "%2328f", 2, "none", $ic) }}
+ @if $icon-buymeacoffee {.buymeacoffee { background-image: functions.icon(buymeacoffee, "%23777", 1, "%23fd0", $ic) }}
+ @if $icon-check {.check { background-image: functions.icon(check, "%23888", 2, "none", $ic) }}
+ @if $icon-chevron {.chevron { background-image: functions.icon(chevron, "%23888", 2, "none", $ic) }}
+ @if $icon-clock {.clock { background-image: functions.icon(clock, "%23888", 2, "none", $ic) }}
+ @if $icon-codeberg {.codeberg { background-image: functions.icon(codeberg, "%23555", 2, "%23aaa", $ic) }}
+ @if $icon-date {.date { background-image: functions.icon(date, "%23888", 2, "none", $ic) }}
+ @if $icon-discord {.discord { background-image: functions.icon(discord, "none", 1, "%2356f", $ic) }}
+ @if $icon-docker {.docker { background-image: functions.icon(docker, "%2329e", 2, "none", $ic) }}
+ @if $icon-element {.element { background-image: functions.icon(element, "none", 1, "%231c8", $ic) }}
+ @if $icon-facebook {.facebook { background-image: functions.icon(facebook, "%23359", 2, "none", $ic) }}
+ @if $icon-folder {.folder { background-image: functions.icon(folder, "%23888", 2, "none", $ic) }}
+ @if $icon-github {.github { background-image: functions.icon(github, "%23888", 2, "none", $ic) }}
+ @if $icon-github-sponsor {.github-sponsor { background-image: functions.icon(github-sponsor, "%23c49", 2, "none", $ic) }}
+ @if $icon-gitlab {.gitlab { background-image: functions.icon(gitlab, "%23e62", 2, "none", $ic) }}
+ @if $icon-globe {.globe { background-image: functions.icon(globe, "%23888", 2, "none", $ic) }}
+ @if $icon-home {.home { background-image: functions.icon(home, "%23888", 2, "none", $ic) }}
+ @if $icon-instagram {.instagram { background-image: functions.icon(instagram, "%23e07", 2, "none", $ic) }}
+ @if $icon-linkedin {.linkedin { background-image: functions.icon(linkedin, "%2326a", 2, "none", $ic) }}
+ @if $icon-mail {.mail { background-image: functions.icon(mail, "%23888", 2, "none", $ic) }}
+ @if $icon-mastodon {.mastodon { background-image: functions.icon(mastodon, "none", 1, "%2328c", $ic) }}
+ @if $icon-matrix {.matrix { background-image: functions.icon(matrix, "%23888", 2, "none", $ic) }}
+ @if $icon-minus {.minus { background-image: functions.icon(minus, "%23888", 2, "none", $ic) }}
+ @if $icon-moon {.moon { background-image: functions.icon(moon, "%23888", 2, "none", $ic) }}
+ @if $icon-pinterest {.pinterest { background-image: functions.icon(pinterest, "%23b01", 2, "none", $ic) }}
+ @if $icon-python {.python { background-image: functions.icon(python, "%23fc1", 2, "%2326a", $ic) }}
+ @if $icon-researchgate {.researchgate { background-image: functions.icon(researchgate, "none", 2, "%230db", $ic) }}
+ @if $icon-rss {.rss { background-image: functions.icon(rss, "%23e94", 2, "none", $ic) }}
+ @if $icon-stack {.stack { background-image: functions.icon(stack, "%23e72", 2, "none", $ic) }}
+ @if $icon-sun {.sun { background-image: functions.icon(sun, "%23888", 2, "none", $ic) }}
+ @if $icon-tag {.tag { background-image: functions.icon(tag, "%23888", 2, "none", $ic) }}
+ @if $icon-twitch {.twitch { background-image: functions.icon(twitch, "%23a7f", 2, "none", $ic) }}
+ @if $icon-twitter {.twitter { background-image: functions.icon(twitter, "%232ad", 2, "none", $ic) }}
+ @if $icon-x {.x { background-image: functions.icon(x, "%23f00", 3, "none", $ic) }}
+ @if $icon-youtube {.youtube { background-image: functions.icon(youtube, "%23f00", 2, "none", $ic) }}
+ .svg {
+ width: 1.8rem;
+ height: 1.8rem;
+ display: inline-block;
+ //overflow: hidden;
+ text-align: center;
+ vertical-align: middle;
+ }
+ .svgs {
+ width: var(--fs);
+ height: var(--fs);
+ display: inline-block;
+ //overflow: hidden;
+ text-align: center;
+ vertical-align: middle;
+ }
+ .fa-a:hover {
+ color: var(--a3);
+ opacity: 1;
+ }
+}
@if $syntax {
// Unstyled Text Color, and background color
.z-code {
- color: var(--f1);//#ccc
- background-color: var(--bg);
+ color: var(--h1);//#ccc
+ background-color: var(--h0);
}
// This is a comment
.z-comment {//, .z-punctuation.z-definition.z-comment
- color: var(--c4);//#888
+ color: var(--h2);//#888
font-style: italic;
}
// a (int a;)
.z-variable {
- color: var(--f1);
+ color: var(--h1);
}
// "This is a string"
.z-string {//, .z-constant.z-other.z-symbol
- color: var(--h4);
+ color: var(--h6);
}
// 10 (a = 10;)
.z-constant.z-numeric {
- color: var(--h2);
+ color: var(--h4);
}
// /n
.z-constant.z-character.z-escape {//, .z-string.z-regexp
- color: var(--h5);
+ color: var(--h7);
}
// false, true, etc...
.z-constant.z-language {
- color: var(--h2);
+ color: var(--h4);
}
// BUF (const BUF: usize = 10 * 1024;)
.z-constant.z-other {//, .z-constant.z-character
- color: var(--h2);
+ color: var(--h4);
}
// Figure out how to reproduce in code block otherwise don't include
//.z-variable.z-member {
- // color: var(--h1);
+ // color: var(--h3);
//}
// use, crate, let, etc.
.z-keyword {//, .z-keyword.z-operator.z-word
- color: var(--h6);
+ color: var(--h8);
}
// = * - + /
.z-keyword.z-operator {
- color: var(--h7);
+ color: var(--h9);
}
// separators: commas, colons, etc. terminator: endline semicolon, etc.
.z-punctuation.z-separator, .z-punctuation.z-terminator {
- color: var(--f1);
+ color: var(--h1);
}
// () [] {}
.z-punctuation.z-section {
- color: var(--f1);
+ color: var(--h1);
}
// . ::
.z-punctuation.z-accessor {
- color: var(--h2);
+ color: var(--h4);
}
// # (#[cfg(test)])
.z-punctuation.z-definition.z-annotation {
- color: var(--f1);
+ color: var(--h1);
}
// Figure out how to reproduce in code block otherwise don't include
//.z-variable.z-other.z-dollar.z-only.z-js, .z-variable.z-other.z-object.z-dollar.z-only.z-js, .z-variable.z-type.z-dollar.z-only.z-js, .z-support.z-class.z-dollar.z-only.z-js {
- // color: var(--h4);
+ // color: var(--h6);
//}
// const, pub, mut, Self, fn
.z-storage {
- color: var(--h6);
+ color: var(--h8);
}
// const, struct
.z-storage.z-type {
- color: var(--h6);
+ color: var(--h8);
}
// new, function names
.z-entity.z-name.z-function {
- color: var(--h3);
+ color: var(--h5);
}
// key in toml entries
.z-entity.z-name {//, .z-entity.z-name.z-label
- color: var(--h3);
+ color: var(--h5);
}
// Figure out how to reproduce in code block otherwise don't include
//.z-entity.z-other.z-inherited-class {
- // color: var(--h6);
+ // color: var(--h8);
// text-decoration: underline;
//}
// v1 (fn lookup(v1))
.z-variable.z-parameter {
- color: var(--h2);
+ color: var(--h4);
}
// self (self.html.push(c))
.z-variable.z-language {
- color: var(--h3);
+ color: var(--h5);
font-style: italic;
}
// html tag name, eg: html, head, meta, title, body, etc.
.z-entity.z-name.z-tag {//, .z-meta.z-tag.z-sgml
- color: var(--h6);
+ color: var(--h8);
}
// html tag brackets <>
.z-punctuation.z-definition.z-tag.z-end, .z-punctuation.z-definition.z-tag.z-begin, .z-punctuation.z-definition.z-tag {
- color: var(--h6);
+ color: var(--h8);
}
// html attribute name, eg: lang, charset
.z-entity.z-other.z-attribute-name {
- color: var(--h3);
+ color: var(--h5);
}
// function name as variable value, and annotation: derive (#[derive(Debug)])
.z-variable.z-function, .z-variable.z-annotation {
- color: var(--h3);
+ color: var(--h5);
}
// support function, eg: extend (self.html.extend(b"<span");)
// macros, eg: println! print! format!
.z-support.z-function, .z-support.z-macro {
- color: var(--h1);
+ color: var(--h3);
}
// Figure out how to reproduce in code block otherwise don't include
//.z-support.z-constant {
- // color: var(--h2);
+ // color: var(--h4);
// font-style: italic;
//}
// type: Vec, Some, str, int
// class: Config ($CONF = Config::getInstance()->getAll();)
.z-support.z-type, .z-support.z-class {
- color: var(--h6);
+ color: var(--h8);
font-style: italic;
}
// Figure out how to reproduce in code block otherwise don't include
//.z-source.z-ruby .z-variable.z-other.z-readwrite {
- // color: var(--h3);
+ // color: var(--h5);
//}
// superfluous, already have .z-entity.z-name.z-tag
//.z-source.z-css .z-entity.z-name.z-tag, .z-source.z-sass .z-entity.z-name.z-tag, .z-source.z-scss .z-entity.z-name.z-tag, .z-source.z-less .z-entity.z-name.z-tag, .z-source.z-stylus .z-entity.z-name.z-tag {
- // color: var(--h6);
+ // color: var(--h8);
//}
// property name, eg css: font-size, text-align, etc.
.z-support.z-type.z-property-name {
- color: var(--h6);
+ color: var(--h8);
}
//json
.z-meta.z-mapping.z-key.z-json {
.z-punctuation.z-definition.z-string.z-begin.z-json, .z-punctuation.z-definition.z-string.z-end.z-json, .z-string.z-quoted.z-double.z-json {
- color: var(--h2);
+ color: var(--h4);
}
}
// Figure out how to reproduce in code block otherwise don't include
//.z-constant.z-numeric.z-line-number.z-match {
- // color: var(--h6);
+ // color: var(--h8);
//}
// Figure out how to reproduce in code block otherwise don't include
//.z-entity.z-name.z-filename.z-find-in-files {
- // color: var(--h4);
+ // color: var(--h6);
//}
// Figure out how to reproduce in code block otherwise don't include
//.z-message.z-error {
- // color: var(--h1);
+ // color: var(--h3);
//}
// Figure out how to reproduce in code block otherwise don't include
//.z-string.z-other.z-link, .z-markup.z-underline.z-link {
- // color: var(--h5);
+ // color: var(--h7);
// text-decoration: underline;
// font-style: italic;
//}
// Figure out how to reproduce in code block otherwise don't include
//.z-punctuation.z-definition.z-image {
- // color: var(--h3);
+ // color: var(--h5);
//}
// Figure out how to reproduce in code block otherwise don't include
//.z-meta.z-separator {
- // color: var(--f1);
- // background-color: var(--f1);
+ // color: var(--h1);
+ // background-color: var(--h1);
// font-weight: bold;
//}
// Figure out how to reproduce in code block otherwise don't include
//.z-markup.z-list.z-numbered.z-bullet, .z-markup.z-list .z-punctuation.z-definition.z-list_item {
- // color: var(--h5);
+ // color: var(--h7);
//}
// Figure out how to reproduce in code block otherwise don't include
//.z-text.z-html.z-markdown .z-markup.z-raw.z-inline {
- // color: var(--h2);
+ // color: var(--h4);
//}
// Figure out how to reproduce in code block otherwise don't include
//.z-text.z-html.z-markdown .z-meta.z-dummy.z-line-break {
- // color: var(--f1);
+ // color: var(--h1);
//}
// Figure out how to reproduce in code block otherwise don't include
//.z-markup.z-raw.z-block.z-fenced.z-markdown {
- // color: var(--f1);
- // background-color: var(--f1);
+ // color: var(--h1);
+ // background-color: var(--h1);
//}
// Figure out how to reproduce in code block otherwise don't include
//.z-punctuation.z-definition.z-fenced.z-markdown, .z-variable.z-language.z-fenced.z-markdown {
- // color: var(--f1);
- // background-color: var(--f1);
+ // color: var(--h1);
+ // background-color: var(--h1);
//}
// Figure out how to reproduce in code block otherwise don't include
//.z-variable.z-language.z-fenced.z-markdown {
- // color: var(--f1);
+ // color: var(--h1);
//}
}
diff --git a/sass/colors-syntax/_abridge.scss b/sass/colors-syntax/_abridge.scss
new file mode 100644
index 0000000..11a36f1
--- /dev/null
+++ b/sass/colors-syntax/_abridge.scss
@@ -0,0 +1,61 @@
+// Syntax Highlighting
+@mixin syndark(
+ $h0: #191919,
+ $h1: #ddd,
+ $h2: #888,
+ $h3: #e65,
+ $h4: #e83,
+ $h5: #eb6,
+ $h6: #ac3,
+ $h7: #8db,
+ $h8: #6ae,
+ $h9: #d6e
+) {
+ #{--h0}: $h0;// background color
+ #{--h1}: $h1;// unstyled text
+ #{--h2}: $h2;// comments
+ #{--h3}: $h3;// red, support function
+ #{--h4}: $h4;// orange, punctuation, constant, variable, json-key
+ #{--h5}: $h5;// tan, entity/function name
+ #{--h6}: $h6;// green, string
+ #{--h7}: $h7;// teal, escape character
+ #{--h8}: $h8;// blue, declaration, tag, property
+ #{--h9}: $h9;// purple, operators
+ code table {
+ color: var(--h1);
+ mark {
+ background-color: var(--h0);
+ filter: brightness(140%);
+ }
+ }
+}
+@mixin synlight(
+ $h0: #f7f7f7,
+ $h1: #222,
+ $h2: #666,
+ $h3: #a21,
+ $h4: #930,
+ $h5: #a50,
+ $h6: #350,
+ $h7: #286,
+ $h8: #059,
+ $h9: #a3c
+) {
+ #{--h0}: $h0;// background color
+ #{--h1}: $h1;// unstyled text
+ #{--h2}: $h2;// comments
+ #{--h3}: $h3;// red, support function
+ #{--h4}: $h4;// orange, punctuation, constant, variable, json-key
+ #{--h5}: $h5;// tan, entity/function name
+ #{--h6}: $h6;// green, string
+ #{--h7}: $h7;// teal, escape character
+ #{--h8}: $h8;// blue, declaration, tag, property
+ #{--h9}: $h9;// purple, operators
+ code table {
+ color: var(--h1);
+ mark {
+ background-color: var(--h0);
+ filter: brightness(94%);
+ }
+ }
+}
diff --git a/sass/colors/_blue.scss b/sass/colors/_blue.scss
new file mode 100644
index 0000000..3a79074
--- /dev/null
+++ b/sass/colors/_blue.scss
@@ -0,0 +1,50 @@
+@mixin dark(
+ $f1: #ccc,
+ $f2: #ddd,
+ $c1: #111,
+ $c2: #222,
+ $c3: #333,
+ $c4: #888,
+ $a1: #09f,
+ $a2: #0bf,
+ $a3: #0af,
+ $cg: #593,
+ $cr: #e33
+) {
+ #{--f1}: $f1;// Font Color Primary
+ #{--f2}: $f2;// Font Color Headers
+ #{--c1}: $c1;// Background Color Primary
+ #{--c2}: $c2;// Background Color Secondary
+ #{--c3}: $c3;// Table Rows, Block quote edge, Borders
+ #{--c4}: $c4;// Disabled Buttons, Borders, mark background
+ #{--a1}: $a1;// link color
+ #{--a2}: $a2;// link hover/focus color
+ #{--a3}: $a3;// link h1-h2 hover/focus color
+ #{--cg}: $cg;// ins green, success
+ #{--cr}: $cr;// del red, errors
+}
+@mixin light(
+ $f1: #333,
+ $f2: #222,
+ $c1: #fff,
+ $c2: #eee,
+ $c3: #ddd,
+ $c4: #555,
+ $a1: #06e,
+ $a2: #09f,
+ $a3: #07f,
+ $cg: #373,
+ $cr: #d33
+) {
+ #{--f1}: $f1;// Font Color Primary
+ #{--f2}: $f2;// Font Color Headers
+ #{--c1}: $c1;// Background Color Primary
+ #{--c2}: $c2;// Background Color Secondary
+ #{--c3}: $c3;// Table Rows, Block quote edge, Borders
+ #{--c4}: $c4;// Disabled Buttons, Borders, mark background
+ #{--a1}: $a1;// link color
+ #{--a2}: $a2;// link hover/focus color
+ #{--a3}: $a3;// link h1-h2 hover/focus color
+ #{--cg}: $cg;// ins green, success
+ #{--cr}: $cr;// del red, errors
+}
diff --git a/sass/colors/_blueshade.scss b/sass/colors/_blueshade.scss
new file mode 100644
index 0000000..2bb7355
--- /dev/null
+++ b/sass/colors/_blueshade.scss
@@ -0,0 +1,50 @@
+@mixin dark(
+ $f1: #ccc,
+ $f2: #ddd,
+ $c1: #111,
+ $c2: #123,
+ $c3: #345,
+ $c4: #789,
+ $a1: #09f,
+ $a2: #0bf,
+ $a3: #0af,
+ $cg: #593,
+ $cr: #e33
+) {
+ #{--f1}: $f1;// Font Color Primary
+ #{--f2}: $f2;// Font Color Headers
+ #{--c1}: $c1;// Background Color Primary
+ #{--c2}: $c2;// Background Color Secondary
+ #{--c3}: $c3;// Table Rows, Block quote edge, Borders
+ #{--c4}: $c4;// Disabled Buttons, Borders, mark background
+ #{--a1}: $a1;// link color
+ #{--a2}: $a2;// link hover/focus color
+ #{--a3}: $a3;// link h1-h2 hover/focus color
+ #{--cg}: $cg;// ins green, success
+ #{--cr}: $cr;// del red, errors
+}
+@mixin light(
+ $f1: #333,
+ $f2: #222,
+ $c1: #fff,
+ $c2: #def,
+ $c3: #137,
+ $c4: #013,
+ $a1: #06e,
+ $a2: #09f,
+ $a3: #07f,
+ $cg: #373,
+ $cr: #d33
+) {
+ #{--f1}: $f1;// Font Color Primary
+ #{--f2}: $f2;// Font Color Headers
+ #{--c1}: $c1;// Background Color Primary
+ #{--c2}: $c2;// Background Color Secondary
+ #{--c3}: $c3;// Table Rows, Block quote edge, Borders
+ #{--c4}: $c4;// Disabled Buttons, Borders, mark background
+ #{--a1}: $a1;// link color
+ #{--a2}: $a2;// link hover/focus color
+ #{--a3}: $a3;// link h1-h2 hover/focus color
+ #{--cg}: $cg;// ins green, success
+ #{--cr}: $cr;// del red, errors
+}
diff --git a/sass/colors/_orange.scss b/sass/colors/_orange.scss
new file mode 100644
index 0000000..635da31
--- /dev/null
+++ b/sass/colors/_orange.scss
@@ -0,0 +1,50 @@
+@mixin dark(
+ $f1: #ccc,
+ $f2: #ddd,
+ $c1: #111,
+ $c2: #222,
+ $c3: #333,
+ $c4: #888,
+ $a1: #f90,
+ $a2: #fb0,
+ $a3: #f90,
+ $cg: #593,
+ $cr: #e33
+) {
+ #{--f1}: $f1;// Font Color Primary
+ #{--f2}: $f2;// Font Color Headers
+ #{--c1}: $c1;// Background Color Primary
+ #{--c2}: $c2;// Background Color Secondary
+ #{--c3}: $c3;// Table Rows, Block quote edge, Borders
+ #{--c4}: $c4;// Disabled Buttons, Borders, mark background
+ #{--a1}: $a1;// link color
+ #{--a2}: $a2;// link hover/focus color
+ #{--a3}: $a3;// link h1-h2 hover/focus color
+ #{--cg}: $cg;// ins green, success
+ #{--cr}: $cr;// del red, errors
+}
+@mixin light(
+ $f1: #333,
+ $f2: #222,
+ $c1: #fff,
+ $c2: #eee,
+ $c3: #ddd,
+ $c4: #555,
+ $a1: #c40,
+ $a2: #e60,
+ $a3: #f90,
+ $cg: #373,
+ $cr: #d33
+) {
+ #{--f1}: $f1;// Font Color Primary
+ #{--f2}: $f2;// Font Color Headers
+ #{--c1}: $c1;// Background Color Primary
+ #{--c2}: $c2;// Background Color Secondary
+ #{--c3}: $c3;// Table Rows, Block quote edge, Borders
+ #{--c4}: $c4;// Disabled Buttons, Borders, mark background
+ #{--a1}: $a1;// link color
+ #{--a2}: $a2;// link hover/focus color
+ #{--a3}: $a3;// link h1-h2 hover/focus color
+ #{--cg}: $cg;// ins green, success
+ #{--cr}: $cr;// del red, errors
+}
diff --git a/screenshot.png b/screenshot.png
index 399165a..7b001a0 100644
--- a/screenshot.png
+++ b/screenshot.png
Binary files differ
diff --git a/static/abridge.min.js b/static/abridge.min.js
deleted file mode 100644
index bd23e27..0000000
--- a/static/abridge.min.js
+++ /dev/null
@@ -1 +0,0 @@
-const items=document.querySelectorAll(".preStyle");function closeSearchNow(){document.querySelector("main").innerHTML=window.main}function goSearchNow(){var e=document.querySelector("main"),t=(window.main||(window.main=e.innerHTML),document.getElementById("suggestions")),n=t.cloneNode(!0),o=(n.id="results",document.createElement("div")),i='<form name="closeSearch"><h2><button type="submit" title="Close Search"><i class="svgs x"></i></button> Results For: '.concat(document.getElementById("searchinput").value,"</h2></form>");return o.innerHTML=i,n.insertBefore(o,n.firstChild),e.innerHTML=n.outerHTML,t.innerHTML="",document.getElementById("searchinput").value="",document.body.contains(document.closeSearch)&&(document.closeSearch.onsubmit=function(){closeSearchNow()}),!1}function closeAllLists(e){for(var t=document.getElementById("suggestions");t.firstChild;)t.removeChild(t.firstChild)}function inputFocus(t){191===t.keyCode&&"INPUT"!==document.activeElement.tagName&&"TEXTAREA"!==document.activeElement.tagName&&(t.preventDefault(),searchinput.focus(),suggestions.classList.remove("d-none")),27===t.keyCode&&(searchinput.blur(),suggestions.classList.add("d-none"),closeAllLists());var n=suggestions.querySelectorAll("a");if(!suggestions.classList.contains("d-none")&&0!==n.length){var o=[...n],i=o.indexOf(document.activeElement);let e=0;38===t.keyCode?(t.preventDefault(),n[e=0<i?i-1:0].focus()):40===t.keyCode&&(t.preventDefault(),n[e=i+1<o.length?i+1:i].focus())}}function substringByByte(e,t){for(var n="",o=!1,i=0,r=0,s=0,u=0;u<e.length;u++){var l=e.codePointAt(u).toString(16);if(o=4<l.length&&++u+1<e.length?"200d"==e.codePointAt(u+1).toString(16):o){if(i+=getByteByHex(l),u==e.length-1){if(!((r+=i)<=t))break;n+=e.substr(s,u-s+1)}}else if(0!=i){if(!((r=(r+=i)+getByteByHex(l))<=t))break;n+=e.substr(s,u-s+1),s=u+1,i=0}else{if(!((r+=getByteByHex(l))<=t))break;l.length<=4?n+=e[u]:n+=e[u-1]+e[u],s=u+1}}return n}function getByteByBinary(e){return[0,1,2,3,4][Math.ceil(e.length/8)]}function getByteByHex(e){return getByteByBinary(parseInt(e,16).toString(2))}items.forEach(e=>{e.rel="stylesheet"}),document.getElementById("mode")&&document.getElementById("mode").addEventListener("click",()=>{document.documentElement.classList.toggle("light"),localStorage.setItem("theme",document.documentElement.classList.contains("light")?"light":"dark")}),function(){function g(e){var t=new g.Index;return t.pipeline.add(g.trimmer,g.stopWordFilter,g.stemmer),e&&e.call(t,t),t}var a,c,e,t,d,h,f,p,m,y,v,S,x,w,b,E,I,C,D,F,N,L,k,_,n;g.version="0.9.5",((lunr=g).utils={}).warn=(n=this,function(e){n.console&&console.warn&&console.warn(e)}),g.utils.toString=function(e){return null==e?"":e.toString()},(g.EventEmitter=function(){this.events={}}).prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop();if("function"!=typeof t)throw new TypeError("last argument must be a function");e.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},g.EventEmitter.prototype.removeListener=function(e,t){this.hasHandler(e)&&-1!==(t=this.events[e].indexOf(t))&&(this.events[e].splice(t,1),0==this.events[e].length)&&delete this.events[e]},g.EventEmitter.prototype.emit=function(e){var t;this.hasHandler(e)&&(t=Array.prototype.slice.call(arguments,1),this.events[e].forEach(function(e){e.apply(void 0,t)},this))},g.EventEmitter.prototype.hasHandler=function(e){return e in this.events},(g.tokenizer=function(e){var t,n;return arguments.length&&null!=e?Array.isArray(e)?(t=(t=e.filter(function(e){return null!=e})).map(function(e){return g.utils.toString(e).toLowerCase()}),n=[],t.forEach(function(e){e=e.split(g.tokenizer.seperator),n=n.concat(e)},this),n):e.toString().trim().toLowerCase().split(g.tokenizer.seperator):[]}).defaultSeperator=/[\s\-]+/,g.tokenizer.seperator=g.tokenizer.defaultSeperator,g.tokenizer.setSeperator=function(e){null!=e&&"object"==typeof e&&(g.tokenizer.seperator=e)},g.tokenizer.resetSeperator=function(){g.tokenizer.seperator=g.tokenizer.defaultSeperator},g.tokenizer.getSeperator=function(){return g.tokenizer.seperator},(g.Pipeline=function(){this._queue=[]}).registeredFunctions={},g.Pipeline.registerFunction=function(e,t){t in g.Pipeline.registeredFunctions&&g.utils.warn("Overwriting existing registered function: "+t),e.label=t,g.Pipeline.registeredFunctions[t]=e},g.Pipeline.getRegisteredFunction=function(e){return e in g.Pipeline.registeredFunctions!=1?null:g.Pipeline.registeredFunctions[e]},g.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||g.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},g.Pipeline.load=function(e){var n=new g.Pipeline;return e.forEach(function(e){var t=g.Pipeline.getRegisteredFunction(e);if(!t)throw new Error("Cannot load un-registered function: "+e);n.add(t)}),n},g.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){g.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},g.Pipeline.prototype.after=function(e,t){if(g.Pipeline.warnIfFunctionNotRegistered(t),-1===(e=this._queue.indexOf(e)))throw new Error("Cannot find existingFn");this._queue.splice(e+1,0,t)},g.Pipeline.prototype.before=function(e,t){if(g.Pipeline.warnIfFunctionNotRegistered(t),-1===(e=this._queue.indexOf(e)))throw new Error("Cannot find existingFn");this._queue.splice(e,0,t)},g.Pipeline.prototype.remove=function(e){-1!==(e=this._queue.indexOf(e))&&this._queue.splice(e,1)},g.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,o=this._queue.length,i=0;i<n;i++){for(var r=e[i],s=0;s<o&&null!=(r=this._queue[s](r,i,e));s++);null!=r&&t.push(r)}return t},g.Pipeline.prototype.reset=function(){this._queue=[]},g.Pipeline.prototype.get=function(){return this._queue},g.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return g.Pipeline.warnIfFunctionNotRegistered(e),e.label})},(g.Index=function(){this._fields=[],this._ref="id",this.pipeline=new g.Pipeline,this.documentStore=new g.DocumentStore,this.index={},this.eventEmitter=new g.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))}).prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},g.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},g.Index.load=function(e){e.version!==g.version&&g.utils.warn("version mismatch: current "+g.version+" importing "+e.version);var t,n=new this;for(t in n._fields=e.fields,n._ref=e.ref,n.documentStore=g.DocumentStore.load(e.documentStore),n.pipeline=g.Pipeline.load(e.pipeline),n.index={},e.index)n.index[t]=g.InvertedIndex.load(e.index[t]);return n},g.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new g.InvertedIndex,this},g.Index.prototype.setRef=function(e){return this._ref=e,this},g.Index.prototype.saveDocument=function(e){return this.documentStore=new g.DocumentStore(e),this},g.Index.prototype.addDoc=function(r,e){var s;r&&(e=void 0===e||e,s=r[this._ref],this.documentStore.addDoc(s,r),this._fields.forEach(function(e){var t,n=this.pipeline.run(g.tokenizer(r[e])),o=(this.documentStore.addFieldLength(s,e,n.length),{});for(t in n.forEach(function(e){e in o?o[e]+=1:o[e]=1},this),o){var i=o[t],i=Math.sqrt(i);this.index[e].addToken(t,{ref:s,tf:i})}},this),e)&&this.eventEmitter.emit("add",r,this)},g.Index.prototype.removeDocByRef=function(e){e&&!1!==this.documentStore.isDocStored()&&this.documentStore.hasDoc(e)&&(e=this.documentStore.getDoc(e),this.removeDoc(e,!1))},g.Index.prototype.removeDoc=function(e,t){var n;e&&(t=void 0===t||t,n=e[this._ref],this.documentStore.hasDoc(n))&&(this.documentStore.removeDoc(n),this._fields.forEach(function(t){this.pipeline.run(g.tokenizer(e[t])).forEach(function(e){this.index[t].removeToken(e,n)},this)},this),t)&&this.eventEmitter.emit("remove",e,this)},g.Index.prototype.updateDoc=function(e,t){t=void 0===t||t,this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},g.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;return Object.prototype.hasOwnProperty.call(this._idfCache,n)?this._idfCache[n]:(t=this.index[t].getDocFreq(e),e=1+Math.log(this.documentStore.length/(t+1)),this._idfCache[n]=e)},g.Index.prototype.getFields=function(){return this._fields.slice()},g.Index.prototype.search=function(e,t){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var n=null;null!=t&&(n=JSON.stringify(t));for(var o=new g.Configuration(n,this.getFields()).get(),i={},r=Object.keys(e),s=0;s<r.length;s++){var u=r[s];i[u]=this.pipeline.run(g.tokenizer(e[u]))}var l,a={};for(l in o){var c=i[l]||i.any;if(c){var d=this.fieldSearch(c,l,o),h=o[l].boost;for(p in d)d[p]=d[p]*h;for(p in d)p in a?a[p]+=d[p]:a[p]=d[p]}}var f,p,m=[];for(p in a)f={ref:p,score:a[p]},this.documentStore.hasDoc(p)&&(f.doc=this.documentStore.getDoc(p)),m.push(f);return m.sort(function(e,t){return t.score-e.score}),m},g.Index.prototype.fieldSearch=function(e,a,t){var c=t[a].bool,n=t[a].expand,t=t[a].boost,d=null,h={};return 0!==t?(e.forEach(function(u){var e=[u],l=(1==n&&(e=this.index[a].expandToken(u)),{});e.forEach(function(e){var t=this.index[a].getDocs(e),n=this.idf(e,a);if(d&&"AND"==c){var o,i={};for(o in d)o in t&&(i[o]=t[o]);t=i}for(o in e==u&&this.fieldSearchStats(h,e,t),t){var r=this.index[a].getTermFrequency(e,o),s=this.documentStore.getFieldLength(o,a),r=r*n*(0!=s?1/Math.sqrt(s):1)*(e!=u?.15*(1-(e.length-u.length)/e.length):1);o in l?l[o]+=r:l[o]=r}},this),d=this.mergeScores(d,l,c)},this),d=this.coordNorm(d,h,e.length)):void 0},g.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if("AND"==n){var o={};for(i in t)i in e&&(o[i]=e[i]+t[i]);return o}for(var i in t)i in e?e[i]+=t[i]:e[i]=t[i];return e},g.Index.prototype.fieldSearchStats=function(e,t,n){for(var o in n)o in e?e[o].push(t):e[o]=[t]},g.Index.prototype.coordNorm=function(e,t,n){for(var o in e){var i;o in t&&(i=t[o].length,e[o]=e[o]*i/n)}return e},g.Index.prototype.toJSON=function(){var t={};return this._fields.forEach(function(e){t[e]=this.index[e].toJSON()},this),{version:g.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:t,pipeline:this.pipeline.toJSON()}},g.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},(g.DocumentStore=function(e){this._save=null==e||e,this.docs={},this.docInfo={},this.length=0}).load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},g.DocumentStore.prototype.isDocStored=function(){return this._save},g.DocumentStore.prototype.addDoc=function(e,t){this.hasDoc(e)||this.length++,this.docs[e]=!0===this._save?function(e){if(null===e||"object"!=typeof e)return e;var t,n=e.constructor();for(t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}(t):null},g.DocumentStore.prototype.getDoc=function(e){return!1===this.hasDoc(e)?null:this.docs[e]},g.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},g.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},g.DocumentStore.prototype.addFieldLength=function(e,t,n){null!=e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},g.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!=e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},g.DocumentStore.prototype.getFieldLength=function(e,t){return null!=e&&e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},g.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},a={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},c={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},e="[aeiouy]",t="[^aeiou][^aeiouy]*",d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),h=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),p=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),m=/^(.+?)(ss|i)es$/,y=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,S=/^(.+?)(ed|ing)$/,x=/.$/,w=/(at|bl|iz)$/,b=new RegExp("([^aeiouylsz])\\1$"),E=new RegExp("^"+t+e+"[^aeiouwxy]$"),I=/^(.+?[^aeiou])y$/,C=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,D=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,N=/^(.+?)(s|t)(ion)$/,L=/^(.+?)e$/,k=/ll$/,_=new RegExp("^"+t+e+"[^aeiouwxy]$"),g.Pipeline.registerFunction(g.stemmer=function(e){var t,n,o,i,r,s,u,l;return e.length<3||("y"==(n=e.substr(0,1))&&(e=n.toUpperCase()+e.substr(1)),u=y,(r=m).test(e)?e=e.replace(r,"$1$2"):u.test(e)&&(e=e.replace(u,"$1$2")),u=S,(r=v).test(e)?(l=r.exec(e),(r=d).test(l[1])&&(e=e.replace(r=x,""))):u.test(e)&&(s=(l=u.exec(e))[1],(u=p).test(s))&&(e=s,o=b,i=E,(u=w).test(e)?e+="e":o.test(e)?e=e.replace(r=x,""):i.test(e)&&(e+="e")),(r=I).test(e)&&(e=(s=(l=r.exec(e))[1])+"i"),(r=C).test(e)&&(s=(l=r.exec(e))[1],t=l[2],(r=d).test(s))&&(e=s+a[t]),(r=D).test(e)&&(s=(l=r.exec(e))[1],t=l[2],(r=d).test(s))&&(e=s+c[t]),u=N,(r=F).test(e)?(s=(l=r.exec(e))[1],(r=h).test(s)&&(e=s)):u.test(e)&&(s=(l=u.exec(e))[1]+l[2],(u=h).test(s))&&(e=s),(r=L).test(e)&&(s=(l=r.exec(e))[1],u=f,o=_,(r=h).test(s)||u.test(s)&&!o.test(s))&&(e=s),u=h,(r=k).test(e)&&u.test(e)&&(e=e.replace(r=x,"")),"y"==n&&(e=n.toLowerCase()+e.substr(1))),e},"stemmer"),g.stopWordFilter=function(e){return e&&!0!==g.stopWordFilter.stopWords[e]?e:void 0},g.clearStopWords=function(){g.stopWordFilter.stopWords={}},g.addStopWords=function(e){null!=e&&!1!==Array.isArray(e)&&e.forEach(function(e){g.stopWordFilter.stopWords[e]=!0},this)},g.resetStopWords=function(){g.stopWordFilter.stopWords=g.defaultStopWords},g.stopWordFilter.stopWords=g.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,do:!0,does:!0,either:!0,else:!0,ever:!0,every:!0,for:!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,if:!0,in:!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,this:!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,while:!0,who:!0,whom:!0,why:!0,will:!0,with:!0,would:!0,yet:!0,you:!0,your:!0},g.Pipeline.registerFunction(g.stopWordFilter,"stopWordFilter"),g.Pipeline.registerFunction(g.trimmer=function(e){if(null==e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},"trimmer"),(g.InvertedIndex=function(){this.root={docs:{},df:0}}).load=function(e){var t=new this;return t.root=e.root,t},g.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,o=0;o<=e.length-1;){var i=e[o];i in n||(n[i]={docs:{},df:0}),o+=1,n=n[i]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1)},g.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},g.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},g.InvertedIndex.prototype.getDocs=function(e){return null==(e=this.getNode(e))?{}:e.docs},g.InvertedIndex.prototype.getTermFrequency=function(e,t){return null!=(e=this.getNode(e))&&t in e.docs?e.docs[t].tf:0},g.InvertedIndex.prototype.getDocFreq=function(e){return null==(e=this.getNode(e))?0:e.df},g.InvertedIndex.prototype.removeToken=function(e,t){e&&null!=(e=this.getNode(e))&&t in e.docs&&(delete e.docs[t],--e.df)},g.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];if(t=t||[],null!=n||null!=(n=this.getNode(e)))for(var o in 0<n.df&&t.push(e),n)"docs"!==o&&"df"!==o&&this.expandToken(e+o,t,n[o]);return t},g.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},(g.Configuration=function(e,t){var n,e=e||"";if(null==t)throw new Error("fields should not be null");this.config={};try{n=JSON.parse(e),this.buildUserConfig(n,t)}catch(e){g.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(t)}}).prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},g.Configuration.prototype.buildUserConfig=function(e,t){var n,o,i="OR",r=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(r=e.expand||r),"fields"in e)for(var s in e.fields)-1<t.indexOf(s)?(o=r,null!=(n=e.fields[s]).expand&&(o=n.expand),this.config[s]={boost:n.boost||0===n.boost?n.boost:1,bool:n.bool||i,expand:o}):g.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,r,t)},g.Configuration.prototype.addAllFields2UserConfig=function(t,n,e){e.forEach(function(e){this.config[e]={boost:1,bool:t,expand:n}},this)},g.Configuration.prototype.get=function(){return this.config},g.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){for(var e,t=0;t<arguments.length;t++)~this.indexOf(e=arguments[t])||this.elements.splice(this.locationFor(e),0,e);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,o=n-t,i=t+Math.floor(o/2),r=this.elements[i];1<o;){if(r===e)return i;o=(n=e<r?i:n)-(t=r<e?i:t),i=t+Math.floor(o/2),r=this.elements[i]}return r===e?i:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,o=n-t,i=t+Math.floor(o/2),r=this.elements[i];1<o;)o=(n=e<r?i:n)-(t=r<e?i:t),i=t+Math.floor(o/2),r=this.elements[i];return e<r?i:r<e?i+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,o=0,i=this.length,r=e.length,s=this.elements,u=e.elements;!(i-1<n||r-1<o);)s[n]!==u[o]?s[n]<u[o]?n++:s[n]>u[o]&&o++:(t.add(s[n]),n++,o++);return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){for(var t,e=this.length>=e.length?(t=this,e):(t=e,this),n=t.clone(),o=0,i=e.toArray();o<i.length;o++)n.add(i[o]);return n},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},"function"==typeof define&&define.amd?define(function(){return g}):"object"==typeof exports?module.exports=g:this.elasticlunr=g}(),window.onload=function(){var s,e,u,l,c;document.body.contains(document.goSearch)&&(document.goSearch.onsubmit=function(){return goSearchNow()},s=document.getElementById("suggestions"),e=document.getElementById("searchinput"),document.addEventListener("keydown",inputFocus),document.addEventListener("click",function(e){s.contains(e.target)||s.classList.add("d-none")}),l=document.documentElement.getAttribute("lang").substring(0,2),"/"==(c=document.querySelector("meta[name='base']").getAttribute("content")).slice(-1)&&(c=c.slice(0,-1)),e.addEventListener("input",async function(){var n,e=this.value.trim(),o=(await(u=void 0===u?fetch(c+"/search_index."+l+".json").then(async function(e){return elasticlunr.Index.load(await e.json())}):u)).search(e,{bool:"OR",fields:{title:{boost:2},body:{boost:1}}}),i=s.childNodes,r=o.length,x=e.split(/\s+/);for(s.classList.remove("d-none"),o.forEach(function(e){""!==e.doc.body&&((n=document.createElement("div")).innerHTML="<a href><span></span><span></span></a>",a=n.querySelector("a"),t=n.querySelector("span:first-child"),d=n.querySelector("span:nth-child(2)"),a.href=e.ref,t.textContent=e.doc.title,d.innerHTML=function(e){var t=x.map(function(e){return elasticlunr.stemmer(e.toLowerCase())}),n=!1,o=0,i=[],r=e.toLowerCase().split(". ");for(f in r){var s,u=r[f].split(/[\s\n]/),l=8;for(s in u){if(0<(g=u[s]).length){for(var a in t)elasticlunr.stemmer(g).startsWith(t[a])&&(l=40,n=!0);i.push([g,l,o]),l=2}o=o+g.length+1}o+=1}if(0===i.length)return void 0!==e.length&&300<e.length?e.substring(0,300)+"...":e;for(var c=[],d=Math.min(i.length,30),h=0,f=0;f<d;f++)h+=i[f][1];for(c.push(h),f=0;f<i.length-d;f++)h=(h-=i[f][1])+i[f+d][1],c.push(h);var p=0;if(n)for(var m=0,f=c.length-1;0<=f;f--)m<c[f]&&(m=c[f],p=f);for(var g,y,v=[],S=i[p][2],f=p;f<p+d;f++)S<(g=i[f])[2]&&(v.push(e.substring(S,g[2])),S=g[2]),40===g[1]&&v.push("<b>"),S=g[2]+g[0].length,40!==g[1]&&12<=g[0].length&&!/^[\x00-\xff]+$/.test(g[0])?(y=substringByByte(e.substring(g[2],S),12),v.push(y)):v.push(e.substring(g[2],S)),40===g[1]&&v.push("</b>");return v.push("…"),v.join("")}(e.doc.body),s.appendChild(n))});i.length>r;)s.removeChild(i[0])},!0),s.addEventListener("click",function(){for(;s.lastChild;)s.removeChild(s.lastChild);return!1},!0),document.goSearch.onsubmit=function(){return goSearchNow()})},function(){for(var e=document.getElementsByClassName("m-protected"),t=0;t<e.length;t++){var n=e[t].getAttribute("href"),n=atob(n.substring(1));e[t].href="mailto:"+n}}(),function(){function t(e){const t=document.createElement("button");t.className="cc ",t.type="button",t.innerHTML="Copy",t.addEventListener("click",()=>async function(e,t){var n=t.querySelectorAll("table")["length"];let o="";0<n?t.querySelectorAll(":last-child > tr > td:last-child").forEach(e=>{o+=e.innerText}):o=t.querySelector(":last-child > code").innerText;try{"granted"==(result=await navigator.permissions.query({name:"clipboard-write"})).state||"prompt"==result.state?await navigator.clipboard.writeText(o):i(o,t)}catch(e){i(o,t)}finally{e.innerHTML="Copied",setTimeout(function(){e.innerHTML="Copy"},2e3)}}(t,e));var n=document.createElement("div");n.className="ccw",n.appendChild(t),e.parentNode.insertBefore(n,e),n.appendChild(e)}function i(e,t){var n=document.createElement("textArea"),e=(n.contentEditable="true",n.readOnly="false",n.className="copyable-text-area",n.value=e,t.insertBefore(n,t.firstChild),document.createRange()),o=(e.selectNodeContents(n),window.getSelection());o.removeAllRanges(),o.addRange(e),n.setSelectionRange(0,999999),document.execCommand("copy"),t.removeChild(n)}document.querySelectorAll("pre").forEach(e=>t(e))}(); \ No newline at end of file
diff --git a/static/js/abridge.min.js b/static/js/abridge.min.js
new file mode 100644
index 0000000..c438a71
--- /dev/null
+++ b/static/js/abridge.min.js
@@ -0,0 +1 @@
+const items=document.querySelectorAll(".preStyle");items.forEach(e=>{e.rel="stylesheet"}),document.getElementById("mode")&&document.getElementById("mode").addEventListener("click",()=>{document.documentElement.classList.toggle("light"),localStorage.setItem("theme",document.documentElement.classList.contains("light")?"light":"dark")}),function(){function g(e){var t=new g.Index;return t.pipeline.add(g.trimmer,g.stopWordFilter,g.stemmer),e&&e.call(t,t),t}var a,c,e,t,d,h,f,p,m,v,y,S,x,w,b,E,I,C,D,F,k,L,N,_,n;g.version="0.9.5",((lunr=g).utils={}).warn=(n=this,function(e){n.console&&console.warn&&console.warn(e)}),g.utils.toString=function(e){return null==e?"":e.toString()},(g.EventEmitter=function(){this.events={}}).prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop();if("function"!=typeof t)throw new TypeError("last argument must be a function");e.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},g.EventEmitter.prototype.removeListener=function(e,t){this.hasHandler(e)&&-1!==(t=this.events[e].indexOf(t))&&(this.events[e].splice(t,1),0==this.events[e].length)&&delete this.events[e]},g.EventEmitter.prototype.emit=function(e){var t;this.hasHandler(e)&&(t=Array.prototype.slice.call(arguments,1),this.events[e].forEach(function(e){e.apply(void 0,t)},this))},g.EventEmitter.prototype.hasHandler=function(e){return e in this.events},(g.tokenizer=function(e){var t,n;return arguments.length&&null!=e?Array.isArray(e)?(t=(t=e.filter(function(e){return null!=e})).map(function(e){return g.utils.toString(e).toLowerCase()}),n=[],t.forEach(function(e){e=e.split(g.tokenizer.seperator),n=n.concat(e)},this),n):e.toString().trim().toLowerCase().split(g.tokenizer.seperator):[]}).defaultSeperator=/[\s\-]+/,g.tokenizer.seperator=g.tokenizer.defaultSeperator,g.tokenizer.setSeperator=function(e){null!=e&&"object"==typeof e&&(g.tokenizer.seperator=e)},g.tokenizer.resetSeperator=function(){g.tokenizer.seperator=g.tokenizer.defaultSeperator},g.tokenizer.getSeperator=function(){return g.tokenizer.seperator},(g.Pipeline=function(){this._queue=[]}).registeredFunctions={},g.Pipeline.registerFunction=function(e,t){t in g.Pipeline.registeredFunctions&&g.utils.warn("Overwriting existing registered function: "+t),e.label=t,g.Pipeline.registeredFunctions[t]=e},g.Pipeline.getRegisteredFunction=function(e){return e in g.Pipeline.registeredFunctions!=1?null:g.Pipeline.registeredFunctions[e]},g.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||g.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},g.Pipeline.load=function(e){var n=new g.Pipeline;return e.forEach(function(e){var t=g.Pipeline.getRegisteredFunction(e);if(!t)throw new Error("Cannot load un-registered function: "+e);n.add(t)}),n},g.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){g.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},g.Pipeline.prototype.after=function(e,t){if(g.Pipeline.warnIfFunctionNotRegistered(t),-1===(e=this._queue.indexOf(e)))throw new Error("Cannot find existingFn");this._queue.splice(e+1,0,t)},g.Pipeline.prototype.before=function(e,t){if(g.Pipeline.warnIfFunctionNotRegistered(t),-1===(e=this._queue.indexOf(e)))throw new Error("Cannot find existingFn");this._queue.splice(e,0,t)},g.Pipeline.prototype.remove=function(e){-1!==(e=this._queue.indexOf(e))&&this._queue.splice(e,1)},g.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,o=this._queue.length,i=0;i<n;i++){for(var r=e[i],s=0;s<o&&null!=(r=this._queue[s](r,i,e));s++);null!=r&&t.push(r)}return t},g.Pipeline.prototype.reset=function(){this._queue=[]},g.Pipeline.prototype.get=function(){return this._queue},g.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return g.Pipeline.warnIfFunctionNotRegistered(e),e.label})},(g.Index=function(){this._fields=[],this._ref="id",this.pipeline=new g.Pipeline,this.documentStore=new g.DocumentStore,this.index={},this.eventEmitter=new g.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))}).prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},g.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},g.Index.load=function(e){e.version!==g.version&&g.utils.warn("version mismatch: current "+g.version+" importing "+e.version);var t,n=new this;for(t in n._fields=e.fields,n._ref=e.ref,n.documentStore=g.DocumentStore.load(e.documentStore),n.pipeline=g.Pipeline.load(e.pipeline),n.index={},e.index)n.index[t]=g.InvertedIndex.load(e.index[t]);return n},g.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new g.InvertedIndex,this},g.Index.prototype.setRef=function(e){return this._ref=e,this},g.Index.prototype.saveDocument=function(e){return this.documentStore=new g.DocumentStore(e),this},g.Index.prototype.addDoc=function(r,e){var s;r&&(e=void 0===e||e,s=r[this._ref],this.documentStore.addDoc(s,r),this._fields.forEach(function(e){var t,n=this.pipeline.run(g.tokenizer(r[e])),o=(this.documentStore.addFieldLength(s,e,n.length),{});for(t in n.forEach(function(e){e in o?o[e]+=1:o[e]=1},this),o){var i=o[t],i=Math.sqrt(i);this.index[e].addToken(t,{ref:s,tf:i})}},this),e)&&this.eventEmitter.emit("add",r,this)},g.Index.prototype.removeDocByRef=function(e){e&&!1!==this.documentStore.isDocStored()&&this.documentStore.hasDoc(e)&&(e=this.documentStore.getDoc(e),this.removeDoc(e,!1))},g.Index.prototype.removeDoc=function(e,t){var n;e&&(t=void 0===t||t,n=e[this._ref],this.documentStore.hasDoc(n))&&(this.documentStore.removeDoc(n),this._fields.forEach(function(t){this.pipeline.run(g.tokenizer(e[t])).forEach(function(e){this.index[t].removeToken(e,n)},this)},this),t)&&this.eventEmitter.emit("remove",e,this)},g.Index.prototype.updateDoc=function(e,t){t=void 0===t||t,this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},g.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;return Object.prototype.hasOwnProperty.call(this._idfCache,n)?this._idfCache[n]:(t=this.index[t].getDocFreq(e),e=1+Math.log(this.documentStore.length/(t+1)),this._idfCache[n]=e)},g.Index.prototype.getFields=function(){return this._fields.slice()},g.Index.prototype.search=function(e,t){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var n=null;null!=t&&(n=JSON.stringify(t));for(var o=new g.Configuration(n,this.getFields()).get(),i={},r=Object.keys(e),s=0;s<r.length;s++){var u=r[s];i[u]=this.pipeline.run(g.tokenizer(e[u]))}var l,a={};for(l in o){var c=i[l]||i.any;if(c){var d=this.fieldSearch(c,l,o),h=o[l].boost;for(p in d)d[p]=d[p]*h;for(p in d)p in a?a[p]+=d[p]:a[p]=d[p]}}var f,p,m=[];for(p in a)f={ref:p,score:a[p]},this.documentStore.hasDoc(p)&&(f.doc=this.documentStore.getDoc(p)),m.push(f);return m.sort(function(e,t){return t.score-e.score}),m},g.Index.prototype.fieldSearch=function(e,a,t){var c=t[a].bool,n=t[a].expand,t=t[a].boost,d=null,h={};return 0!==t?(e.forEach(function(u){var e=[u],l=(1==n&&(e=this.index[a].expandToken(u)),{});e.forEach(function(e){var t=this.index[a].getDocs(e),n=this.idf(e,a);if(d&&"AND"==c){var o,i={};for(o in d)o in t&&(i[o]=t[o]);t=i}for(o in e==u&&this.fieldSearchStats(h,e,t),t){var r=this.index[a].getTermFrequency(e,o),s=this.documentStore.getFieldLength(o,a),r=r*n*(0!=s?1/Math.sqrt(s):1)*(e!=u?.15*(1-(e.length-u.length)/e.length):1);o in l?l[o]+=r:l[o]=r}},this),d=this.mergeScores(d,l,c)},this),d=this.coordNorm(d,h,e.length)):void 0},g.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if("AND"==n){var o={};for(i in t)i in e&&(o[i]=e[i]+t[i]);return o}for(var i in t)i in e?e[i]+=t[i]:e[i]=t[i];return e},g.Index.prototype.fieldSearchStats=function(e,t,n){for(var o in n)o in e?e[o].push(t):e[o]=[t]},g.Index.prototype.coordNorm=function(e,t,n){for(var o in e){var i;o in t&&(i=t[o].length,e[o]=e[o]*i/n)}return e},g.Index.prototype.toJSON=function(){var t={};return this._fields.forEach(function(e){t[e]=this.index[e].toJSON()},this),{version:g.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:t,pipeline:this.pipeline.toJSON()}},g.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},(g.DocumentStore=function(e){this._save=null==e||e,this.docs={},this.docInfo={},this.length=0}).load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},g.DocumentStore.prototype.isDocStored=function(){return this._save},g.DocumentStore.prototype.addDoc=function(e,t){this.hasDoc(e)||this.length++,this.docs[e]=!0===this._save?function(e){if(null===e||"object"!=typeof e)return e;var t,n=e.constructor();for(t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}(t):null},g.DocumentStore.prototype.getDoc=function(e){return!1===this.hasDoc(e)?null:this.docs[e]},g.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},g.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},g.DocumentStore.prototype.addFieldLength=function(e,t,n){null!=e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},g.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!=e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},g.DocumentStore.prototype.getFieldLength=function(e,t){return null!=e&&e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},g.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},a={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},c={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},e="[aeiouy]",t="[^aeiou][^aeiouy]*",d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),h=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),p=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),m=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,y=/^(.+?)eed$/,S=/^(.+?)(ed|ing)$/,x=/.$/,w=/(at|bl|iz)$/,b=new RegExp("([^aeiouylsz])\\1$"),E=new RegExp("^"+t+e+"[^aeiouwxy]$"),I=/^(.+?[^aeiou])y$/,C=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,D=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,k=/^(.+?)(s|t)(ion)$/,L=/^(.+?)e$/,N=/ll$/,_=new RegExp("^"+t+e+"[^aeiouwxy]$"),g.Pipeline.registerFunction(g.stemmer=function(e){var t,n,o,i,r,s,u,l;return e.length<3||("y"==(n=e.substr(0,1))&&(e=n.toUpperCase()+e.substr(1)),u=v,(r=m).test(e)?e=e.replace(r,"$1$2"):u.test(e)&&(e=e.replace(u,"$1$2")),u=S,(r=y).test(e)?(l=r.exec(e),(r=d).test(l[1])&&(e=e.replace(r=x,""))):u.test(e)&&(s=(l=u.exec(e))[1],(u=p).test(s))&&(e=s,o=b,i=E,(u=w).test(e)?e+="e":o.test(e)?e=e.replace(r=x,""):i.test(e)&&(e+="e")),(r=I).test(e)&&(e=(s=(l=r.exec(e))[1])+"i"),(r=C).test(e)&&(s=(l=r.exec(e))[1],t=l[2],(r=d).test(s))&&(e=s+a[t]),(r=D).test(e)&&(s=(l=r.exec(e))[1],t=l[2],(r=d).test(s))&&(e=s+c[t]),u=k,(r=F).test(e)?(s=(l=r.exec(e))[1],(r=h).test(s)&&(e=s)):u.test(e)&&(s=(l=u.exec(e))[1]+l[2],(u=h).test(s))&&(e=s),(r=L).test(e)&&(s=(l=r.exec(e))[1],u=f,o=_,(r=h).test(s)||u.test(s)&&!o.test(s))&&(e=s),u=h,(r=N).test(e)&&u.test(e)&&(e=e.replace(r=x,"")),"y"==n&&(e=n.toLowerCase()+e.substr(1))),e},"stemmer"),g.stopWordFilter=function(e){return e&&!0!==g.stopWordFilter.stopWords[e]?e:void 0},g.clearStopWords=function(){g.stopWordFilter.stopWords={}},g.addStopWords=function(e){null!=e&&!1!==Array.isArray(e)&&e.forEach(function(e){g.stopWordFilter.stopWords[e]=!0},this)},g.resetStopWords=function(){g.stopWordFilter.stopWords=g.defaultStopWords},g.stopWordFilter.stopWords=g.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,do:!0,does:!0,either:!0,else:!0,ever:!0,every:!0,for:!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,if:!0,in:!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,this:!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,while:!0,who:!0,whom:!0,why:!0,will:!0,with:!0,would:!0,yet:!0,you:!0,your:!0},g.Pipeline.registerFunction(g.stopWordFilter,"stopWordFilter"),g.Pipeline.registerFunction(g.trimmer=function(e){if(null==e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},"trimmer"),(g.InvertedIndex=function(){this.root={docs:{},df:0}}).load=function(e){var t=new this;return t.root=e.root,t},g.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,o=0;o<=e.length-1;){var i=e[o];i in n||(n[i]={docs:{},df:0}),o+=1,n=n[i]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1)},g.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},g.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},g.InvertedIndex.prototype.getDocs=function(e){return null==(e=this.getNode(e))?{}:e.docs},g.InvertedIndex.prototype.getTermFrequency=function(e,t){return null!=(e=this.getNode(e))&&t in e.docs?e.docs[t].tf:0},g.InvertedIndex.prototype.getDocFreq=function(e){return null==(e=this.getNode(e))?0:e.df},g.InvertedIndex.prototype.removeToken=function(e,t){e&&null!=(e=this.getNode(e))&&t in e.docs&&(delete e.docs[t],--e.df)},g.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];if(t=t||[],null!=n||null!=(n=this.getNode(e)))for(var o in 0<n.df&&t.push(e),n)"docs"!==o&&"df"!==o&&this.expandToken(e+o,t,n[o]);return t},g.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},(g.Configuration=function(e,t){var n,e=e||"";if(null==t)throw new Error("fields should not be null");this.config={};try{n=JSON.parse(e),this.buildUserConfig(n,t)}catch(e){g.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(t)}}).prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},g.Configuration.prototype.buildUserConfig=function(e,t){var n,o,i="OR",r=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(r=e.expand||r),"fields"in e)for(var s in e.fields)-1<t.indexOf(s)?(o=r,null!=(n=e.fields[s]).expand&&(o=n.expand),this.config[s]={boost:n.boost||0===n.boost?n.boost:1,bool:n.bool||i,expand:o}):g.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,r,t)},g.Configuration.prototype.addAllFields2UserConfig=function(t,n,e){e.forEach(function(e){this.config[e]={boost:1,bool:t,expand:n}},this)},g.Configuration.prototype.get=function(){return this.config},g.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){for(var e,t=0;t<arguments.length;t++)~this.indexOf(e=arguments[t])||this.elements.splice(this.locationFor(e),0,e);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,o=n-t,i=t+Math.floor(o/2),r=this.elements[i];1<o;){if(r===e)return i;o=(n=e<r?i:n)-(t=r<e?i:t),i=t+Math.floor(o/2),r=this.elements[i]}return r===e?i:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,o=n-t,i=t+Math.floor(o/2),r=this.elements[i];1<o;)o=(n=e<r?i:n)-(t=r<e?i:t),i=t+Math.floor(o/2),r=this.elements[i];return e<r?i:r<e?i+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,o=0,i=this.length,r=e.length,s=this.elements,u=e.elements;!(i-1<n||r-1<o);)s[n]!==u[o]?s[n]<u[o]?n++:s[n]>u[o]&&o++:(t.add(s[n]),n++,o++);return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){for(var t,e=this.length>=e.length?(t=this,e):(t=e,this),n=t.clone(),o=0,i=e.toArray();o<i.length;o++)n.add(i[o]);return n},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},"function"==typeof define&&define.amd?define(function(){return g}):"object"==typeof exports?module.exports=g:this.elasticlunr=g}(),window.onload=function(){function w(e){return e=parseInt(e,16).toString(2),[0,1,2,3,4][Math.ceil(e.length/8)]}var s,r,u,l,c;document.body.contains(document.goSearch)&&(document.goSearch.onsubmit=function(){return goSearchNow()},s=document.getElementById("suggestions"),r=document.getElementById("searchinput"),document.addEventListener("keydown",function(t){if(191===t.keyCode&&"INPUT"!==document.activeElement.tagName&&"TEXTAREA"!==document.activeElement.tagName&&(t.preventDefault(),r.focus(),s.classList.remove("d-none")),27===t.keyCode){r.blur(),s.classList.add("d-none");for(var e=document.getElementById("suggestions");e.firstChild;)e.removeChild(e.firstChild)}var n=s.querySelectorAll("a");if(!s.classList.contains("d-none")&&0!==n.length){var o=[...n],i=o.indexOf(document.activeElement);let e=0;38===t.keyCode?(t.preventDefault(),n[e=0<i?i-1:0].focus()):40===t.keyCode&&(t.preventDefault(),n[e=i+1<o.length?i+1:i].focus())}}),document.addEventListener("click",function(e){s.contains(e.target)||s.classList.add("d-none")}),l=document.documentElement.getAttribute("lang").substring(0,2),"/"==(c=document.querySelector("meta[name='base']").getAttribute("content")).slice(-1)&&(c=c.slice(0,-1)),r.addEventListener("input",async function(){var n,e=this.value.trim(),o=(await(u=void 0===u?fetch(c+"/search_index."+l+".json").then(async function(e){return elasticlunr.Index.load(await e.json())}):u)).search(e,{bool:"OR",fields:{title:{boost:2},body:{boost:1}}}),i=s.childNodes,r=o.length,x=e.split(/\s+/);for(s.classList.remove("d-none"),o.forEach(function(e){""!==e.doc.body&&((n=document.createElement("div")).innerHTML="<a href><span></span><span></span></a>",a=n.querySelector("a"),t=n.querySelector("span:first-child"),d=n.querySelector("span:nth-child(2)"),a.href=e.ref,t.textContent=e.doc.title,d.innerHTML=function(e){var t=x.map(function(e){return elasticlunr.stemmer(e.toLowerCase())}),n=!1,o=0,i=[],r=e.toLowerCase().split(". ");for(f in r){var s,u=r[f].split(/[\s\n]/),l=8;for(s in u){if(0<(g=u[s]).length){for(var a in t)elasticlunr.stemmer(g).startsWith(t[a])&&(l=40,n=!0);i.push([g,l,o]),l=2}o=o+g.length+1}o+=1}if(0===i.length)return void 0!==e.length&&300<e.length?e.substring(0,300)+"...":e;for(var c=[],d=Math.min(i.length,30),h=0,f=0;f<d;f++)h+=i[f][1];for(c.push(h),f=0;f<i.length-d;f++)h=(h-=i[f][1])+i[f+d][1],c.push(h);var p=0;if(n)for(var m=0,f=c.length-1;0<=f;f--)m<c[f]&&(m=c[f],p=f);for(var g,v,y=[],S=i[p][2],f=p;f<p+d;f++)S<(g=i[f])[2]&&(y.push(e.substring(S,g[2])),S=g[2]),40===g[1]&&y.push("<b>"),S=g[2]+g[0].length,40!==g[1]&&12<=g[0].length&&!/^[\x00-\xff]+$/.test(g[0])?(v=function(e){for(var t="",n=!1,o=0,i=0,r=0,s=0;s<e.length;s++){var u=e.codePointAt(s).toString(16);if(n=4<u.length&&++s+1<e.length?"200d"==e.codePointAt(s+1).toString(16):n){if(o+=w(u),s==e.length-1){if(!((i+=o)<=12))break;t+=e.substr(r,s-r+1)}}else if(0!=o){if(!((i=(i+=o)+w(u))<=12))break;t+=e.substr(r,s-r+1),r=s+1,o=0}else{if(!((i+=w(u))<=12))break;u.length<=4?t+=e[s]:t+=e[s-1]+e[s],r=s+1}}return t}(e.substring(g[2],S)),y.push(v)):y.push(e.substring(g[2],S)),40===g[1]&&y.push("</b>");return y.push("…"),y.join("")}(e.doc.body),s.appendChild(n))});i.length>r;)s.removeChild(i[0])},!0),s.addEventListener("click",function(){for(;s.lastChild;)s.removeChild(s.lastChild);return!1},!0),document.goSearch.onsubmit=function(){var e=document.querySelector("main"),t=(window.main||(window.main=e.innerHTML),document.getElementById("suggestions")),n=t.cloneNode(!0),o=(n.id="results",document.createElement("div")),i='<form name="closeSearch"><h2><button type="submit" title="Close Search"><i class="svgs x"></i></button> Results For: '.concat(document.getElementById("searchinput").value,"</h2></form>");return o.innerHTML=i,n.insertBefore(o,n.firstChild),e.innerHTML=n.outerHTML,t.innerHTML="",document.getElementById("searchinput").value="",document.body.contains(document.closeSearch)&&(document.closeSearch.onsubmit=function(){document.querySelector("main").innerHTML=window.main}),!1})},function(){for(var e=document.getElementsByClassName("m-protected"),t=0;t<e.length;t++){var n=e[t].getAttribute("href"),n=atob(n.substring(1));e[t].href="mailto:"+n}}(),function(){function t(e){const t=document.createElement("button");t.className="cc ",t.type="button",t.innerHTML="Copy",t.addEventListener("click",()=>async function(e,t){var n=t.querySelectorAll("table")["length"];let o="";0<n?t.querySelectorAll(":last-child > tr > td:last-child").forEach(e=>{o+=e.innerText}):o=t.querySelector(":last-child > code").innerText;try{"granted"==(result=await navigator.permissions.query({name:"clipboard-write"})).state||"prompt"==result.state?await navigator.clipboard.writeText(o):i(o,t)}catch(e){i(o,t)}finally{e.innerHTML="Copied",setTimeout(function(){e.innerHTML="Copy"},2e3)}}(t,e));var n=document.createElement("div");n.className="ccw",n.appendChild(t),e.parentNode.insertBefore(n,e),n.appendChild(e)}function i(e,t){var n=document.createElement("textArea"),e=(n.contentEditable="true",n.readOnly="false",n.className="copyable-text-area",n.value=e,t.insertBefore(n,t.firstChild),document.createRange()),o=(e.selectNodeContents(n),window.getSelection());o.removeAllRanges(),o.addRange(e),n.setSelectionRange(0,999999),document.execCommand("copy"),t.removeChild(n)}document.querySelectorAll("pre").forEach(e=>t(e))}(); \ No newline at end of file
diff --git a/static/codecopy.js b/static/js/codecopy.js
index c1f3a75..c1f3a75 100644
--- a/static/codecopy.js
+++ b/static/js/codecopy.js
diff --git a/static/elasticlunr.min.js b/static/js/elasticlunr.min.js
index 79dad65..79dad65 100644
--- a/static/elasticlunr.min.js
+++ b/static/js/elasticlunr.min.js
diff --git a/static/email.js b/static/js/email.js
index 01e338a..01e338a 100644
--- a/static/email.js
+++ b/static/js/email.js
diff --git a/static/katex-auto-render.min.js b/static/js/katex-auto-render.min.js
index c169ec6..c169ec6 100644
--- a/static/katex-auto-render.min.js
+++ b/static/js/katex-auto-render.min.js
diff --git a/static/katex.min.js b/static/js/katex.min.js
index a9b96ca..a9b96ca 100644
--- a/static/katex.min.js
+++ b/static/js/katex.min.js
diff --git a/static/katexbundle.min.js b/static/js/katexbundle.min.js
index 073d714..073d714 100644
--- a/static/katexbundle.min.js
+++ b/static/js/katexbundle.min.js
diff --git a/static/katexoptions.js b/static/js/katexoptions.js
index b4fa30c..b4fa30c 100644
--- a/static/katexoptions.js
+++ b/static/js/katexoptions.js
diff --git a/static/lunr.da.js b/static/js/lunr.da.js
index 6ea9ef3..6ea9ef3 100644
--- a/static/lunr.da.js
+++ b/static/js/lunr.da.js
diff --git a/static/js/lunr.da.min.js b/static/js/lunr.da.min.js
new file mode 100644
index 0000000..2c3f742
--- /dev/null
+++ b/static/js/lunr.da.min.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var e,t,i;r.da=function(){this.pipeline.reset(),this.pipeline.add(r.da.trimmer,r.da.stopWordFilter,r.da.stemmer)},r.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.da.trimmer=r.trimmerSupport.generateTrimmer(r.da.wordCharacters),r.Pipeline.registerFunction(r.da.trimmer,"trimmer-da"),r.da.stemmer=(e=r.stemmerSupport.Among,t=r.stemmerSupport.SnowballProgram,i=new function(){var n,s,o,d=[new e("hed",-1,1),new e("ethed",0,1),new e("ered",-1,1),new e("e",-1,1),new e("erede",3,1),new e("ende",3,1),new e("erende",5,1),new e("ene",3,1),new e("erne",3,1),new e("ere",3,1),new e("en",-1,1),new e("heden",10,1),new e("eren",10,1),new e("er",-1,1),new e("heder",13,1),new e("erer",13,1),new e("s",-1,2),new e("heds",16,1),new e("es",16,1),new e("endes",18,1),new e("erendes",19,1),new e("enes",18,1),new e("ernes",18,1),new e("eres",18,1),new e("ens",16,1),new e("hedens",24,1),new e("erens",24,1),new e("ers",16,1),new e("ets",16,1),new e("erets",28,1),new e("et",-1,1),new e("eret",30,1)],i=[new e("gd",-1,-1),new e("dt",-1,-1),new e("gt",-1,-1),new e("kt",-1,-1)],a=[new e("ig",-1,1),new e("lig",0,1),new e("elig",1,1),new e("els",-1,1),new e("løst",-1,2)],u=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],l=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],c=new t;function m(){var e,r=c.limit-c.cursor;c.cursor>=s&&(e=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,c.find_among_b(i,4)?(c.bra=c.cursor,c.limit_backward=e,c.cursor=c.limit-r,c.cursor>c.limit_backward&&(c.cursor--,c.bra=c.cursor,c.slice_del())):c.limit_backward=e)}this.setCurrent=function(e){c.setCurrent(e)},this.getCurrent=function(){return c.getCurrent()},this.stem=function(){var e,r=c.cursor;if(!function(){var e,r=c.cursor+3;if(s=c.limit,0<=r&&r<=c.limit){for(n=r;;){if(e=c.cursor,c.in_grouping(u,97,248)){c.cursor=e;break}if((c.cursor=e)>=c.limit)return;c.cursor++}for(;!c.out_grouping(u,97,248);){if(c.cursor>=c.limit)return;c.cursor++}(s=c.cursor)<n&&(s=n)}}(),c.limit_backward=r,c.cursor=c.limit,c.cursor>=s&&(r=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,e=c.find_among_b(d,32),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del();break;case 2:c.in_grouping_b(l,97,229)&&c.slice_del()}c.cursor=c.limit,m(),c.cursor=c.limit;var i,t,r=c.limit-c.cursor;if(c.ket=c.cursor,c.eq_s_b(2,"st")&&(c.bra=c.cursor,c.eq_s_b(2,"ig"))&&c.slice_del(),c.cursor=c.limit-r,c.cursor>=s&&(r=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,i=c.find_among_b(a,5),c.limit_backward=r,i))switch(c.bra=c.cursor,i){case 1:c.slice_del(),t=c.limit-c.cursor,m(),c.cursor=c.limit-t;break;case 2:c.slice_from("løs")}return c.cursor=c.limit,c.cursor>=s&&(e=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,c.out_grouping_b(u,97,248)?(c.bra=c.cursor,o=c.slice_to(o),c.limit_backward=e,c.eq_v_b(o)&&c.slice_del()):c.limit_backward=e),!0}},function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}),r.Pipeline.registerFunction(r.da.stemmer,"stemmer-da"),r.da.stopWordFilter=function(e){if(-1===r.da.stopWordFilter.stopWords.indexOf(e))return e},r.da.stopWordFilter.stopWords=new r.SortedSet,r.da.stopWordFilter.stopWords.length=95,r.da.stopWordFilter.stopWords.elements=" ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" "),r.Pipeline.registerFunction(r.da.stopWordFilter,"stopWordFilter-da")}}); \ No newline at end of file
diff --git a/static/lunr.de.js b/static/js/lunr.de.js
index 3ed2b93..3ed2b93 100644
--- a/static/lunr.de.js
+++ b/static/js/lunr.de.js
diff --git a/static/js/lunr.de.min.js b/static/js/lunr.de.min.js
new file mode 100644
index 0000000..a10d26b
--- /dev/null
+++ b/static/js/lunr.de.min.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var e,n,i;r.de=function(){this.pipeline.reset(),this.pipeline.add(r.de.trimmer,r.de.stopWordFilter,r.de.stemmer)},r.de.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.de.trimmer=r.trimmerSupport.generateTrimmer(r.de.wordCharacters),r.Pipeline.registerFunction(r.de.trimmer,"trimmer-de"),r.de.stemmer=(e=r.stemmerSupport.Among,n=r.stemmerSupport.SnowballProgram,i=new function(){var t,o,c,u=[new e("",-1,6),new e("U",0,2),new e("Y",0,1),new e("ä",0,3),new e("ö",0,4),new e("ü",0,5)],d=[new e("e",-1,2),new e("em",-1,1),new e("en",-1,2),new e("ern",-1,1),new e("er",-1,1),new e("s",-1,3),new e("es",5,2)],l=[new e("en",-1,1),new e("er",-1,1),new e("st",-1,2),new e("est",2,1)],a=[new e("ig",-1,1),new e("lich",-1,1)],m=[new e("end",-1,1),new e("ig",-1,2),new e("ung",-1,1),new e("lich",-1,3),new e("isch",-1,2),new e("ik",-1,2),new e("heit",-1,3),new e("keit",-1,4)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8],h=[117,30,5],b=[117,30,4],f=new n;function _(e,r,n){return f.eq_s(1,e)&&(f.ket=f.cursor,f.in_grouping(w,97,252))&&(f.slice_from(r),f.cursor=n,1)}function p(){for(;!f.in_grouping(w,97,252);){if(f.cursor>=f.limit)return 1;f.cursor++}for(;!f.out_grouping(w,97,252);){if(f.cursor>=f.limit)return 1;f.cursor++}}function g(){return c<=f.cursor}function k(){return o<=f.cursor}this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var e=f.cursor;!function(){for(var e,r,n,i,s=f.cursor;;)if(e=f.cursor,f.bra=e,f.eq_s(1,"ß"))f.ket=f.cursor,f.slice_from("ss");else{if(e>=f.limit)break;f.cursor=e+1}for(f.cursor=s;;)for(r=f.cursor;;){if(n=f.cursor,f.in_grouping(w,97,252)){if(i=f.cursor,f.bra=i,_("u","U",n))break;if(f.cursor=i,_("y","Y",n))break}if(n>=f.limit)return f.cursor=r;f.cursor=n+1}}(),f.cursor=e,c=f.limit,o=c,0<=(s=f.cursor+3)&&s<=f.limit&&(t=s,p()||((c=f.cursor)<t&&(c=t),p())||(o=f.cursor)),f.limit_backward=e,f.cursor=f.limit;var r,n,i,s=f.limit-f.cursor;if(f.ket=f.cursor,(r=f.find_among_b(d,7))&&(f.bra=f.cursor,g()))switch(r){case 1:f.slice_del();break;case 2:f.slice_del(),f.ket=f.cursor,f.eq_s_b(1,"s")&&(f.bra=f.cursor,f.eq_s_b(3,"nis"))&&f.slice_del();break;case 3:f.in_grouping_b(h,98,116)&&f.slice_del()}if(f.cursor=f.limit-s,f.ket=f.cursor,(r=f.find_among_b(l,4))&&(f.bra=f.cursor,g()))switch(r){case 1:f.slice_del();break;case 2:f.in_grouping_b(b,98,116)&&(i=f.cursor-3,f.limit_backward<=i)&&i<=f.limit&&(f.cursor=i,f.slice_del())}if(f.cursor=f.limit-s,f.ket=f.cursor,(r=f.find_among_b(m,8))&&(f.bra=f.cursor,k()))switch(r){case 1:f.slice_del(),f.ket=f.cursor,f.eq_s_b(2,"ig")&&(f.bra=f.cursor,n=f.limit-f.cursor,f.eq_s_b(1,"e")||(f.cursor=f.limit-n,k()&&f.slice_del()));break;case 2:n=f.limit-f.cursor,f.eq_s_b(1,"e")||(f.cursor=f.limit-n,f.slice_del());break;case 3:f.slice_del(),f.ket=f.cursor,n=f.limit-f.cursor,(f.eq_s_b(2,"er")||(f.cursor=f.limit-n,f.eq_s_b(2,"en")))&&(f.bra=f.cursor,g())&&f.slice_del();break;case 4:f.slice_del(),f.ket=f.cursor,(r=f.find_among_b(a,2))&&(f.bra=f.cursor,k())&&1==r&&f.slice_del()}return f.cursor=f.limit_backward,function(){for(var e;;){if(e=f.cursor,f.bra=e,!(e=f.find_among(u,6)))return;switch(f.ket=f.cursor,e){case 1:f.slice_from("y");break;case 2:case 5:f.slice_from("u");break;case 3:f.slice_from("a");break;case 4:f.slice_from("o");break;case 6:if(f.cursor>=f.limit)return;f.cursor++}}}(),!0}},function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}),r.Pipeline.registerFunction(r.de.stemmer,"stemmer-de"),r.de.stopWordFilter=function(e){if(-1===r.de.stopWordFilter.stopWords.indexOf(e))return e},r.de.stopWordFilter.stopWords=new r.SortedSet,r.de.stopWordFilter.stopWords.length=232,r.de.stopWordFilter.stopWords.elements=" aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über".split(" "),r.Pipeline.registerFunction(r.de.stopWordFilter,"stopWordFilter-de")}}); \ No newline at end of file
diff --git a/static/lunr.du.js b/static/js/lunr.du.js
index 7d13826..7d13826 100644
--- a/static/lunr.du.js
+++ b/static/js/lunr.du.js
diff --git a/static/js/lunr.du.min.js b/static/js/lunr.du.min.js
new file mode 100644
index 0000000..a93f314
--- /dev/null
+++ b/static/js/lunr.du.min.js
@@ -0,0 +1 @@
+!function(r,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(r.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,i,o;e.du=function(){this.pipeline.reset(),this.pipeline.add(e.du.trimmer,e.du.stopWordFilter,e.du.stemmer)},e.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.du.trimmer=e.trimmerSupport.generateTrimmer(e.du.wordCharacters),e.Pipeline.registerFunction(e.du.trimmer,"trimmer-du"),e.du.stemmer=(r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,o=new function(){var c,a,l,m=[new r("",-1,6),new r("á",0,1),new r("ä",0,1),new r("é",0,2),new r("ë",0,2),new r("í",0,3),new r("ï",0,3),new r("ó",0,4),new r("ö",0,4),new r("ú",0,5),new r("ü",0,5)],d=[new r("",-1,3),new r("I",0,2),new r("Y",0,1)],e=[new r("dd",-1,-1),new r("kk",-1,-1),new r("tt",-1,-1)],f=[new r("ene",-1,2),new r("se",-1,3),new r("en",-1,2),new r("heden",2,1),new r("s",-1,3)],_=[new r("end",-1,1),new r("ig",-1,2),new r("ing",-1,1),new r("lijk",-1,3),new r("baar",-1,4),new r("bar",-1,5)],w=[new r("aa",-1,-1),new r("ee",-1,-1),new r("oo",-1,-1),new r("uu",-1,-1)],b=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],p=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],g=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],k=new i;function h(r){if((k.cursor=r)>=k.limit)return 1;k.cursor++}function v(){for(;!k.in_grouping(b,97,232);){if(k.cursor>=k.limit)return 1;k.cursor++}for(;!k.out_grouping(b,97,232);){if(k.cursor>=k.limit)return 1;k.cursor++}}function q(){return a<=k.cursor}function z(){return c<=k.cursor}function W(){var r=k.limit-k.cursor;k.find_among_b(e,3)&&(k.cursor=k.limit-r,k.ket=k.cursor,k.cursor>k.limit_backward)&&(k.cursor--,k.bra=k.cursor,k.slice_del())}function j(){var r;l=!1,k.ket=k.cursor,k.eq_s_b(1,"e")&&(k.bra=k.cursor,q())&&(r=k.limit-k.cursor,k.out_grouping_b(b,97,232))&&(k.cursor=k.limit-r,k.slice_del(),l=!0,W())}function F(){var r;q()&&(r=k.limit-k.cursor,k.out_grouping_b(b,97,232))&&(k.cursor=k.limit-r,k.eq_s_b(3,"gem")||(k.cursor=k.limit-r,k.slice_del(),W()))}this.setCurrent=function(r){k.setCurrent(r)},this.getCurrent=function(){return k.getCurrent()},this.stem=function(){for(var r,e,i,o=k.cursor,t=k.cursor;;){if(k.bra=k.cursor,r=k.find_among(m,11))switch(k.ket=k.cursor,r){case 1:k.slice_from("a");continue;case 2:k.slice_from("e");continue;case 3:k.slice_from("i");continue;case 4:k.slice_from("o");continue;case 5:k.slice_from("u");continue;case 6:if(!(k.cursor>=k.limit)){k.cursor++;continue}}break}for(k.cursor=t,k.bra=t,k.eq_s(1,"y")?(k.ket=k.cursor,k.slice_from("Y")):k.cursor=t;;)if(e=k.cursor,k.in_grouping(b,97,232)){if(i=k.cursor,k.bra=i,k.eq_s(1,"i"))k.ket=k.cursor,k.in_grouping(b,97,232)&&(k.slice_from("I"),k.cursor=e);else if(k.cursor=i,k.eq_s(1,"y"))k.ket=k.cursor,k.slice_from("Y"),k.cursor=e;else if(h(e))break}else if(h(e))break;k.cursor=o,a=k.limit,c=a,v()||((a=k.cursor)<3&&(a=3),v())||(c=k.cursor),k.limit_backward=o,k.cursor=k.limit;var s,n,u,t=k.limit-k.cursor;if(k.ket=k.cursor,o=k.find_among_b(f,5))switch(k.bra=k.cursor,o){case 1:q()&&k.slice_from("heid");break;case 2:F();break;case 3:q()&&k.out_grouping_b(g,97,232)&&k.slice_del()}if(k.cursor=k.limit-t,j(),k.cursor=k.limit-t,k.ket=k.cursor,k.eq_s_b(4,"heid")&&(k.bra=k.cursor,z())&&(u=k.limit-k.cursor,k.eq_s_b(1,"c")||(k.cursor=k.limit-u,k.slice_del(),k.ket=k.cursor,k.eq_s_b(2,"en")&&(k.bra=k.cursor,F()))),k.cursor=k.limit-t,k.ket=k.cursor,o=k.find_among_b(_,6))switch(k.bra=k.cursor,o){case 1:if(z()){if(k.slice_del(),s=k.limit-k.cursor,k.ket=k.cursor,k.eq_s_b(2,"ig")&&(k.bra=k.cursor,z())&&(n=k.limit-k.cursor,!k.eq_s_b(1,"e"))){k.cursor=k.limit-n,k.slice_del();break}k.cursor=k.limit-s,W()}break;case 2:z()&&(n=k.limit-k.cursor,k.eq_s_b(1,"e")||(k.cursor=k.limit-n,k.slice_del()));break;case 3:z()&&(k.slice_del(),j());break;case 4:z()&&k.slice_del();break;case 5:z()&&l&&k.slice_del()}return k.cursor=k.limit-t,k.out_grouping_b(p,73,232)&&(u=k.limit-k.cursor,k.find_among_b(w,4))&&k.out_grouping_b(b,97,232)&&(k.cursor=k.limit-u,k.ket=k.cursor,k.cursor>k.limit_backward)&&(k.cursor--,k.bra=k.cursor,k.slice_del()),k.cursor=k.limit_backward,function(){for(var r;;)if(k.bra=k.cursor,r=k.find_among(d,3))switch(k.ket=k.cursor,r){case 1:k.slice_from("y");break;case 2:k.slice_from("i");break;case 3:if(k.cursor>=k.limit)return;k.cursor++}}(),!0}},function(r){return o.setCurrent(r),o.stem(),o.getCurrent()}),e.Pipeline.registerFunction(e.du.stemmer,"stemmer-du"),e.du.stopWordFilter=function(r){if(-1===e.du.stopWordFilter.stopWords.indexOf(r))return r},e.du.stopWordFilter.stopWords=new e.SortedSet,e.du.stopWordFilter.stopWords.length=103,e.du.stopWordFilter.stopWords.elements=" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" "),e.Pipeline.registerFunction(e.du.stopWordFilter,"stopWordFilter-du")}}); \ No newline at end of file
diff --git a/static/lunr.es.js b/static/js/lunr.es.js
index f8c382d..f8c382d 100644
--- a/static/lunr.es.js
+++ b/static/js/lunr.es.js
diff --git a/static/js/lunr.es.min.js b/static/js/lunr.es.min.js
new file mode 100644
index 0000000..f8463d4
--- /dev/null
+++ b/static/js/lunr.es.min.js
@@ -0,0 +1 @@
+!function(e,s){"function"==typeof define&&define.amd?define(s):"object"==typeof exports?module.exports=s():s()(e.lunr)}(this,function(){return function(s){if(void 0===s)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===s.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var e,W,r;s.es=function(){this.pipeline.reset(),this.pipeline.add(s.es.trimmer,s.es.stopWordFilter,s.es.stemmer)},s.es.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",s.es.trimmer=s.trimmerSupport.generateTrimmer(s.es.wordCharacters),s.Pipeline.registerFunction(s.es.trimmer,"trimmer-es"),s.es.stemmer=(e=s.stemmerSupport.Among,W=s.stemmerSupport.SnowballProgram,r=new function(){var u,w,c,m=[new e("",-1,6),new e("á",0,1),new e("é",0,2),new e("í",0,3),new e("ó",0,4),new e("ú",0,5)],l=[new e("la",-1,-1),new e("sela",0,-1),new e("le",-1,-1),new e("me",-1,-1),new e("se",-1,-1),new e("lo",-1,-1),new e("selo",5,-1),new e("las",-1,-1),new e("selas",7,-1),new e("les",-1,-1),new e("los",-1,-1),new e("selos",10,-1),new e("nos",-1,-1)],d=[new e("ando",-1,6),new e("iendo",-1,6),new e("yendo",-1,7),new e("ándo",-1,2),new e("iéndo",-1,1),new e("ar",-1,6),new e("er",-1,6),new e("ir",-1,6),new e("ár",-1,3),new e("ér",-1,4),new e("ír",-1,5)],s=[new e("ic",-1,-1),new e("ad",-1,-1),new e("os",-1,-1),new e("iv",-1,1)],r=[new e("able",-1,1),new e("ible",-1,1),new e("ante",-1,1)],n=[new e("ic",-1,1),new e("abil",-1,1),new e("iv",-1,1)],i=[new e("ica",-1,1),new e("ancia",-1,2),new e("encia",-1,5),new e("adora",-1,2),new e("osa",-1,1),new e("ista",-1,1),new e("iva",-1,9),new e("anza",-1,1),new e("logía",-1,3),new e("idad",-1,8),new e("able",-1,1),new e("ible",-1,1),new e("ante",-1,2),new e("mente",-1,7),new e("amente",13,6),new e("ación",-1,2),new e("ución",-1,4),new e("ico",-1,1),new e("ismo",-1,1),new e("oso",-1,1),new e("amiento",-1,1),new e("imiento",-1,1),new e("ivo",-1,9),new e("ador",-1,2),new e("icas",-1,1),new e("ancias",-1,2),new e("encias",-1,5),new e("adoras",-1,2),new e("osas",-1,1),new e("istas",-1,1),new e("ivas",-1,9),new e("anzas",-1,1),new e("logías",-1,3),new e("idades",-1,8),new e("ables",-1,1),new e("ibles",-1,1),new e("aciones",-1,2),new e("uciones",-1,4),new e("adores",-1,2),new e("antes",-1,2),new e("icos",-1,1),new e("ismos",-1,1),new e("osos",-1,1),new e("amientos",-1,1),new e("imientos",-1,1),new e("ivos",-1,9)],b=[new e("ya",-1,1),new e("ye",-1,1),new e("yan",-1,1),new e("yen",-1,1),new e("yeron",-1,1),new e("yendo",-1,1),new e("yo",-1,1),new e("yas",-1,1),new e("yes",-1,1),new e("yais",-1,1),new e("yamos",-1,1),new e("yó",-1,1)],f=[new e("aba",-1,2),new e("ada",-1,2),new e("ida",-1,2),new e("ara",-1,2),new e("iera",-1,2),new e("ía",-1,2),new e("aría",5,2),new e("ería",5,2),new e("iría",5,2),new e("ad",-1,2),new e("ed",-1,2),new e("id",-1,2),new e("ase",-1,2),new e("iese",-1,2),new e("aste",-1,2),new e("iste",-1,2),new e("an",-1,2),new e("aban",16,2),new e("aran",16,2),new e("ieran",16,2),new e("ían",16,2),new e("arían",20,2),new e("erían",20,2),new e("irían",20,2),new e("en",-1,1),new e("asen",24,2),new e("iesen",24,2),new e("aron",-1,2),new e("ieron",-1,2),new e("arán",-1,2),new e("erán",-1,2),new e("irán",-1,2),new e("ado",-1,2),new e("ido",-1,2),new e("ando",-1,2),new e("iendo",-1,2),new e("ar",-1,2),new e("er",-1,2),new e("ir",-1,2),new e("as",-1,2),new e("abas",39,2),new e("adas",39,2),new e("idas",39,2),new e("aras",39,2),new e("ieras",39,2),new e("ías",39,2),new e("arías",45,2),new e("erías",45,2),new e("irías",45,2),new e("es",-1,1),new e("ases",49,2),new e("ieses",49,2),new e("abais",-1,2),new e("arais",-1,2),new e("ierais",-1,2),new e("íais",-1,2),new e("aríais",55,2),new e("eríais",55,2),new e("iríais",55,2),new e("aseis",-1,2),new e("ieseis",-1,2),new e("asteis",-1,2),new e("isteis",-1,2),new e("áis",-1,2),new e("éis",-1,1),new e("aréis",64,2),new e("eréis",64,2),new e("iréis",64,2),new e("ados",-1,2),new e("idos",-1,2),new e("amos",-1,2),new e("ábamos",70,2),new e("áramos",70,2),new e("iéramos",70,2),new e("íamos",70,2),new e("aríamos",74,2),new e("eríamos",74,2),new e("iríamos",74,2),new e("emos",-1,1),new e("aremos",78,2),new e("eremos",78,2),new e("iremos",78,2),new e("ásemos",78,2),new e("iésemos",78,2),new e("imos",-1,2),new e("arás",-1,2),new e("erás",-1,2),new e("irás",-1,2),new e("ís",-1,2),new e("ará",-1,2),new e("erá",-1,2),new e("irá",-1,2),new e("aré",-1,2),new e("eré",-1,2),new e("iré",-1,2),new e("ió",-1,2)],_=[new e("a",-1,1),new e("e",-1,2),new e("o",-1,1),new e("os",-1,1),new e("á",-1,1),new e("é",-1,2),new e("í",-1,1),new e("ó",-1,1)],a=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,4,10],h=new W;function o(){if(!h.out_grouping(a,97,252))return 1;for(;!h.in_grouping(a,97,252);){if(h.cursor>=h.limit)return 1;h.cursor++}}function p(){var e=h.cursor;if(function(){if(!h.in_grouping(a,97,252))return 1;var e=h.cursor;if(o()){if(h.cursor=e,!h.in_grouping(a,97,252))return 1;for(;!h.out_grouping(a,97,252);){if(h.cursor>=h.limit)return 1;h.cursor++}}}()){if(h.cursor=e,!h.out_grouping(a,97,252))return;if(e=h.cursor,o()){if(h.cursor=e,!h.in_grouping(a,97,252)||h.cursor>=h.limit)return;h.cursor++}}c=h.cursor}function v(){for(;!h.in_grouping(a,97,252);){if(h.cursor>=h.limit)return;h.cursor++}for(;!h.out_grouping(a,97,252);){if(h.cursor>=h.limit)return;h.cursor++}return 1}function g(){return c<=h.cursor}function t(){return u<=h.cursor}function k(e,s){if(!t())return 1;h.slice_del(),h.ket=h.cursor;e=h.find_among_b(e,s);e&&(h.bra=h.cursor,1==e)&&t()&&h.slice_del()}function y(e){if(!t())return 1;h.slice_del(),h.ket=h.cursor,h.eq_s_b(2,e)&&(h.bra=h.cursor,t())&&h.slice_del()}function q(){var e;if(h.ket=h.cursor,e=h.find_among_b(i,46)){switch(h.bra=h.cursor,e){case 1:if(!t())return;h.slice_del();break;case 2:if(y("ic"))return;break;case 3:if(!t())return;h.slice_from("log");break;case 4:if(!t())return;h.slice_from("u");break;case 5:if(!t())return;h.slice_from("ente");break;case 6:if(!(w<=h.cursor))return;h.slice_del(),h.ket=h.cursor,(e=h.find_among_b(s,4))&&(h.bra=h.cursor,t())&&(h.slice_del(),1==e)&&(h.ket=h.cursor,h.eq_s_b(2,"at"))&&(h.bra=h.cursor,t())&&h.slice_del();break;case 7:if(k(r,3))return;break;case 8:if(k(n,3))return;break;case 9:if(y("at"))return}return 1}}this.setCurrent=function(e){h.setCurrent(e)},this.getCurrent=function(){return h.getCurrent()},this.stem=function(){var e,s,r,n,i,a,o,t=h.cursor;if(r=h.cursor,c=h.limit,u=w=c,p(),h.cursor=r,v()&&(w=h.cursor,v())&&(u=h.cursor),h.limit_backward=t,h.cursor=h.limit,h.ket=h.cursor,h.find_among_b(l,13)&&(h.bra=h.cursor,e=h.find_among_b(d,11))&&g())switch(e){case 1:h.bra=h.cursor,h.slice_from("iendo");break;case 2:h.bra=h.cursor,h.slice_from("ando");break;case 3:h.bra=h.cursor,h.slice_from("ar");break;case 4:h.bra=h.cursor,h.slice_from("er");break;case 5:h.bra=h.cursor,h.slice_from("ir");break;case 6:h.slice_del();break;case 7:h.eq_s_b(1,"u")&&h.slice_del()}if((h.cursor=h.limit,!q())&&(h.cursor=h.limit,!function(){var e,s;if(h.cursor>=c&&(s=h.limit_backward,h.limit_backward=c,h.ket=h.cursor,e=h.find_among_b(b,12),h.limit_backward=s,e)){if(h.bra=h.cursor,1==e){if(!h.eq_s_b(1,"u"))return;h.slice_del()}return 1}}()&&(h.cursor=h.limit,h.cursor>=c)&&(r=h.limit_backward,h.limit_backward=c,h.ket=h.cursor,s=h.find_among_b(f,96),h.limit_backward=r,s)))switch(h.bra=h.cursor,s){case 1:n=h.limit-h.cursor,h.eq_s_b(1,"u")&&(i=h.limit-h.cursor,h.eq_s_b(1,"g"))?h.cursor=h.limit-i:h.cursor=h.limit-n,h.bra=h.cursor;case 2:h.slice_del()}if(h.cursor=h.limit,h.ket=h.cursor,t=h.find_among_b(_,8))switch(h.bra=h.cursor,t){case 1:g()&&h.slice_del();break;case 2:g()&&(h.slice_del(),h.ket=h.cursor,h.eq_s_b(1,"u"))&&(h.bra=h.cursor,a=h.limit-h.cursor,h.eq_s_b(1,"g"))&&(h.cursor=h.limit-a,g())&&h.slice_del()}for(h.cursor=h.limit_backward;;){if(h.bra=h.cursor,o=h.find_among(m,6))switch(h.ket=h.cursor,o){case 1:h.slice_from("a");continue;case 2:h.slice_from("e");continue;case 3:h.slice_from("i");continue;case 4:h.slice_from("o");continue;case 5:h.slice_from("u");continue;case 6:if(!(h.cursor>=h.limit)){h.cursor++;continue}}break}return!0}},function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}),s.Pipeline.registerFunction(s.es.stemmer,"stemmer-es"),s.es.stopWordFilter=function(e){if(-1===s.es.stopWordFilter.stopWords.indexOf(e))return e},s.es.stopWordFilter.stopWords=new s.SortedSet,s.es.stopWordFilter.stopWords.length=309,s.es.stopWordFilter.stopWords.elements=" a al algo algunas algunos ante antes como con contra cual cuando de del desde donde durante e el ella ellas ellos en entre era erais eran eras eres es esa esas ese eso esos esta estaba estabais estaban estabas estad estada estadas estado estados estamos estando estar estaremos estará estarán estarás estaré estaréis estaría estaríais estaríamos estarían estarías estas este estemos esto estos estoy estuve estuviera estuvierais estuvieran estuvieras estuvieron estuviese estuvieseis estuviesen estuvieses estuvimos estuviste estuvisteis estuviéramos estuviésemos estuvo está estábamos estáis están estás esté estéis estén estés fue fuera fuerais fueran fueras fueron fuese fueseis fuesen fueses fui fuimos fuiste fuisteis fuéramos fuésemos ha habida habidas habido habidos habiendo habremos habrá habrán habrás habré habréis habría habríais habríamos habrían habrías habéis había habíais habíamos habían habías han has hasta hay haya hayamos hayan hayas hayáis he hemos hube hubiera hubierais hubieran hubieras hubieron hubiese hubieseis hubiesen hubieses hubimos hubiste hubisteis hubiéramos hubiésemos hubo la las le les lo los me mi mis mucho muchos muy más mí mía mías mío míos nada ni no nos nosotras nosotros nuestra nuestras nuestro nuestros o os otra otras otro otros para pero poco por porque que quien quienes qué se sea seamos sean seas seremos será serán serás seré seréis sería seríais seríamos serían serías seáis sido siendo sin sobre sois somos son soy su sus suya suyas suyo suyos sí también tanto te tendremos tendrá tendrán tendrás tendré tendréis tendría tendríais tendríamos tendrían tendrías tened tenemos tenga tengamos tengan tengas tengo tengáis tenida tenidas tenido tenidos teniendo tenéis tenía teníais teníamos tenían tenías ti tiene tienen tienes todo todos tu tus tuve tuviera tuvierais tuvieran tuvieras tuvieron tuviese tuvieseis tuviesen tuvieses tuvimos tuviste tuvisteis tuviéramos tuviésemos tuvo tuya tuyas tuyo tuyos tú un una uno unos vosotras vosotros vuestra vuestras vuestro vuestros y ya yo él éramos".split(" "),s.Pipeline.registerFunction(s.es.stopWordFilter,"stopWordFilter-es")}}); \ No newline at end of file
diff --git a/static/lunr.fi.js b/static/js/lunr.fi.js
index c49d7de..c49d7de 100644
--- a/static/lunr.fi.js
+++ b/static/js/lunr.fi.js
diff --git a/static/js/lunr.fi.min.js b/static/js/lunr.fi.min.js
new file mode 100644
index 0000000..4d8f82e
--- /dev/null
+++ b/static/js/lunr.fi.min.js
@@ -0,0 +1 @@
+!function(i,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(i.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var v,W,r;e.fi=function(){this.pipeline.reset(),this.pipeline.add(e.fi.trimmer,e.fi.stopWordFilter,e.fi.stemmer)},e.fi.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.fi.trimmer=e.trimmerSupport.generateTrimmer(e.fi.wordCharacters),e.Pipeline.registerFunction(e.fi.trimmer,"trimmer-fi"),e.fi.stemmer=(v=e.stemmerSupport.Among,W=e.stemmerSupport.SnowballProgram,r=new function(){var n,t,s,o,r=[new v("pa",-1,1),new v("sti",-1,2),new v("kaan",-1,1),new v("han",-1,1),new v("kin",-1,1),new v("hän",-1,1),new v("kään",-1,1),new v("ko",-1,1),new v("pä",-1,1),new v("kö",-1,1)],l=[new v("lla",-1,-1),new v("na",-1,-1),new v("ssa",-1,-1),new v("ta",-1,-1),new v("lta",3,-1),new v("sta",3,-1)],a=[new v("llä",-1,-1),new v("nä",-1,-1),new v("ssä",-1,-1),new v("tä",-1,-1),new v("ltä",3,-1),new v("stä",3,-1)],u=[new v("lle",-1,-1),new v("ine",-1,-1)],c=[new v("nsa",-1,3),new v("mme",-1,3),new v("nne",-1,3),new v("ni",-1,2),new v("si",-1,1),new v("an",-1,4),new v("en",-1,6),new v("än",-1,5),new v("nsä",-1,3)],i=[new v("aa",-1,-1),new v("ee",-1,-1),new v("ii",-1,-1),new v("oo",-1,-1),new v("uu",-1,-1),new v("ää",-1,-1),new v("öö",-1,-1)],m=[new v("a",-1,8),new v("lla",0,-1),new v("na",0,-1),new v("ssa",0,-1),new v("ta",0,-1),new v("lta",4,-1),new v("sta",4,-1),new v("tta",4,9),new v("lle",-1,-1),new v("ine",-1,-1),new v("ksi",-1,-1),new v("n",-1,7),new v("han",11,1),new v("den",11,-1,q),new v("seen",11,-1,j),new v("hen",11,2),new v("tten",11,-1,q),new v("hin",11,3),new v("siin",11,-1,q),new v("hon",11,4),new v("hän",11,5),new v("hön",11,6),new v("ä",-1,8),new v("llä",22,-1),new v("nä",22,-1),new v("ssä",22,-1),new v("tä",22,-1),new v("ltä",26,-1),new v("stä",26,-1),new v("ttä",26,9)],w=[new v("eja",-1,-1),new v("mma",-1,1),new v("imma",1,-1),new v("mpa",-1,1),new v("impa",3,-1),new v("mmi",-1,1),new v("immi",5,-1),new v("mpi",-1,1),new v("impi",7,-1),new v("ejä",-1,-1),new v("mmä",-1,1),new v("immä",10,-1),new v("mpä",-1,1),new v("impä",12,-1)],_=[new v("i",-1,-1),new v("j",-1,-1)],k=[new v("mma",-1,1),new v("imma",0,-1)],b=[17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],e=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],f=[17,97,24,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],p=new W;function h(){for(var i;i=p.cursor,!p.in_grouping(d,97,246);){if((p.cursor=i)>=p.limit)return 1;p.cursor++}for(p.cursor=i;!p.out_grouping(d,97,246);){if(p.cursor>=p.limit)return 1;p.cursor++}}function g(){var i,e;if(p.cursor>=o)if(e=p.limit_backward,p.limit_backward=o,p.ket=p.cursor,i=p.find_among_b(r,10)){switch(p.bra=p.cursor,p.limit_backward=e,i){case 1:if(p.in_grouping_b(f,97,246))break;return;case 2:if(s<=p.cursor)break;return}p.slice_del()}else p.limit_backward=e}function j(){return p.find_among_b(i,7)}function q(){return p.eq_s_b(1,"i")&&p.in_grouping_b(e,97,246)}this.setCurrent=function(i){p.setCurrent(i)},this.getCurrent=function(){return p.getCurrent()},this.stem=function(){var i,e,r=p.cursor;if(o=p.limit,s=o,h()||(o=p.cursor,h())||(s=p.cursor),n=!1,p.limit_backward=r,p.cursor=p.limit,g(),p.cursor=p.limit,p.cursor>=o)if(r=p.limit_backward,p.limit_backward=o,p.ket=p.cursor,e=p.find_among_b(c,9))switch(p.bra=p.cursor,p.limit_backward=r,e){case 1:i=p.limit-p.cursor,p.eq_s_b(1,"k")||(p.cursor=p.limit-i,p.slice_del());break;case 2:p.slice_del(),p.ket=p.cursor,p.eq_s_b(3,"kse")&&(p.bra=p.cursor,p.slice_from("ksi"));break;case 3:p.slice_del();break;case 4:p.find_among_b(l,6)&&p.slice_del();break;case 5:p.find_among_b(a,6)&&p.slice_del();break;case 6:p.find_among_b(u,2)&&p.slice_del()}else p.limit_backward=r;return p.cursor=p.limit,function(){var i,e,r;if(p.cursor>=o)if(e=p.limit_backward,p.limit_backward=o,p.ket=p.cursor,i=p.find_among_b(m,30)){switch(p.bra=p.cursor,p.limit_backward=e,i){case 1:if(p.eq_s_b(1,"a"))break;return;case 2:case 9:if(p.eq_s_b(1,"e"))break;return;case 3:if(p.eq_s_b(1,"i"))break;return;case 4:if(p.eq_s_b(1,"o"))break;return;case 5:if(p.eq_s_b(1,"ä"))break;return;case 6:if(p.eq_s_b(1,"ö"))break;return;case 7:r=p.limit-p.cursor,j()||(p.cursor=p.limit-r,p.eq_s_b(2,"ie"))?(p.cursor=p.limit-r,p.cursor<=p.limit_backward?p.cursor=p.limit-r:(p.cursor--,p.bra=p.cursor)):p.cursor=p.limit-r;break;case 8:if(p.in_grouping_b(d,97,246)&&p.out_grouping_b(d,97,246))break;return}p.slice_del(),n=!0}else p.limit_backward=e}(),p.cursor=p.limit,function(){var i,e;if(p.cursor>=s)if(i=p.limit_backward,p.limit_backward=s,p.ket=p.cursor,e=p.find_among_b(w,14)){if(p.bra=p.cursor,p.limit_backward=i,1==e){if(e=p.limit-p.cursor,p.eq_s_b(2,"po"))return;p.cursor=p.limit-e}p.slice_del()}else p.limit_backward=i}(),p.cursor=p.limit,n?p.cursor>=o&&(e=p.limit_backward,p.limit_backward=o,p.ket=p.cursor,p.find_among_b(_,2)?(p.bra=p.cursor,p.limit_backward=e,p.slice_del()):p.limit_backward=e):(p.cursor=p.limit,function(){var i,e,r,n;if(p.cursor>=o)if(e=p.limit_backward,p.limit_backward=o,p.ket=p.cursor,p.eq_s_b(1,"t")&&(p.bra=p.cursor,n=p.limit-p.cursor,p.in_grouping_b(d,97,246))&&(p.cursor=p.limit-n,p.slice_del(),p.limit_backward=e,n=p.limit-p.cursor,p.cursor>=s)&&(p.cursor=s,r=p.limit_backward,p.limit_backward=p.cursor,p.cursor=p.limit-n,p.ket=p.cursor,i=p.find_among_b(k,2))){if(p.bra=p.cursor,p.limit_backward=r,1==i){if(n=p.limit-p.cursor,p.eq_s_b(2,"po"))return;p.cursor=p.limit-n}p.slice_del()}else p.limit_backward=e}()),p.cursor=p.limit,function(){var i,e,r,n;if(p.cursor>=o){for(i=p.limit_backward,p.limit_backward=o,e=p.limit-p.cursor,j()&&(p.cursor=p.limit-e,p.ket=p.cursor,p.cursor>p.limit_backward)&&(p.cursor--,p.bra=p.cursor,p.slice_del()),p.cursor=p.limit-e,p.ket=p.cursor,p.in_grouping_b(b,97,228)&&(p.bra=p.cursor,p.out_grouping_b(d,97,246))&&p.slice_del(),p.cursor=p.limit-e,p.ket=p.cursor,p.eq_s_b(1,"j")&&(p.bra=p.cursor,r=p.limit-p.cursor,p.eq_s_b(1,"o")||(p.cursor=p.limit-r,p.eq_s_b(1,"u")))&&p.slice_del(),p.cursor=p.limit-e,p.ket=p.cursor,p.eq_s_b(1,"o")&&(p.bra=p.cursor,p.eq_s_b(1,"j"))&&p.slice_del(),p.cursor=p.limit-e,p.limit_backward=i;;){if(n=p.limit-p.cursor,p.out_grouping_b(d,97,246)){p.cursor=p.limit-n;break}if(p.cursor=p.limit-n,p.cursor<=p.limit_backward)return;p.cursor--}p.ket=p.cursor,p.cursor>p.limit_backward&&(p.cursor--,p.bra=p.cursor,t=p.slice_to(),p.eq_v_b(t))&&p.slice_del()}}(),!0}},function(i){return r.setCurrent(i),r.stem(),r.getCurrent()}),e.Pipeline.registerFunction(e.fi.stemmer,"stemmer-fi"),e.fi.stopWordFilter=function(i){if(-1===e.fi.stopWordFilter.stopWords.indexOf(i))return i},e.fi.stopWordFilter.stopWords=new e.SortedSet,e.fi.stopWordFilter.stopWords.length=236,e.fi.stopWordFilter.stopWords.elements=" ei eivät emme en et ette että he heidän heidät heihin heille heillä heiltä heissä heistä heitä hän häneen hänelle hänellä häneltä hänen hänessä hänestä hänet häntä itse ja johon joiden joihin joiksi joilla joille joilta joina joissa joista joita joka joksi jolla jolle jolta jona jonka jos jossa josta jota jotka kanssa keiden keihin keiksi keille keillä keiltä keinä keissä keistä keitä keneen keneksi kenelle kenellä keneltä kenen kenenä kenessä kenestä kenet ketkä ketkä ketä koska kuin kuka kun me meidän meidät meihin meille meillä meiltä meissä meistä meitä mihin miksi mikä mille millä miltä minkä minkä minua minulla minulle minulta minun minussa minusta minut minuun minä minä missä mistä mitkä mitä mukaan mutta ne niiden niihin niiksi niille niillä niiltä niin niin niinä niissä niistä niitä noiden noihin noiksi noilla noille noilta noin noina noissa noista noita nuo nyt näiden näihin näiksi näille näillä näiltä näinä näissä näistä näitä nämä ole olemme olen olet olette oli olimme olin olisi olisimme olisin olisit olisitte olisivat olit olitte olivat olla olleet ollut on ovat poikki se sekä sen siihen siinä siitä siksi sille sillä sillä siltä sinua sinulla sinulle sinulta sinun sinussa sinusta sinut sinuun sinä sinä sitä tai te teidän teidät teihin teille teillä teiltä teissä teistä teitä tuo tuohon tuoksi tuolla tuolle tuolta tuon tuona tuossa tuosta tuota tähän täksi tälle tällä tältä tämä tämän tänä tässä tästä tätä vaan vai vaikka yli".split(" "),e.Pipeline.registerFunction(e.fi.stopWordFilter,"stopWordFilter-fi")}}); \ No newline at end of file
diff --git a/static/lunr.fr.js b/static/js/lunr.fr.js
index 07978b2..07978b2 100644
--- a/static/lunr.fr.js
+++ b/static/js/lunr.fr.js
diff --git a/static/js/lunr.fr.min.js b/static/js/lunr.fr.min.js
new file mode 100644
index 0000000..2f29909
--- /dev/null
+++ b/static/js/lunr.fr.min.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var e,s,i;r.fr=function(){this.pipeline.reset(),this.pipeline.add(r.fr.trimmer,r.fr.stopWordFilter,r.fr.stemmer)},r.fr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.fr.trimmer=r.trimmerSupport.generateTrimmer(r.fr.wordCharacters),r.Pipeline.registerFunction(r.fr.trimmer,"trimmer-fr"),r.fr.stemmer=(e=r.stemmerSupport.Among,s=r.stemmerSupport.SnowballProgram,i=new function(){var i,n,t,o=[new e("col",-1,-1),new e("par",-1,-1),new e("tap",-1,-1)],u=[new e("",-1,4),new e("I",0,1),new e("U",0,2),new e("Y",0,3)],c=[new e("iqU",-1,3),new e("abl",-1,3),new e("Ièr",-1,4),new e("ièr",-1,4),new e("eus",-1,2),new e("iv",-1,1)],a=[new e("ic",-1,2),new e("abil",-1,1),new e("iv",-1,3)],l=[new e("iqUe",-1,1),new e("atrice",-1,2),new e("ance",-1,1),new e("ence",-1,5),new e("logie",-1,3),new e("able",-1,1),new e("isme",-1,1),new e("euse",-1,11),new e("iste",-1,1),new e("ive",-1,8),new e("if",-1,8),new e("usion",-1,4),new e("ation",-1,2),new e("ution",-1,4),new e("ateur",-1,2),new e("iqUes",-1,1),new e("atrices",-1,2),new e("ances",-1,1),new e("ences",-1,5),new e("logies",-1,3),new e("ables",-1,1),new e("ismes",-1,1),new e("euses",-1,11),new e("istes",-1,1),new e("ives",-1,8),new e("ifs",-1,8),new e("usions",-1,4),new e("ations",-1,2),new e("utions",-1,4),new e("ateurs",-1,2),new e("ments",-1,15),new e("ements",30,6),new e("issements",31,12),new e("ités",-1,7),new e("ment",-1,15),new e("ement",34,6),new e("issement",35,12),new e("amment",34,13),new e("emment",34,14),new e("aux",-1,10),new e("eaux",39,9),new e("eux",-1,1),new e("ité",-1,7)],w=[new e("ira",-1,1),new e("ie",-1,1),new e("isse",-1,1),new e("issante",-1,1),new e("i",-1,1),new e("irai",4,1),new e("ir",-1,1),new e("iras",-1,1),new e("ies",-1,1),new e("îmes",-1,1),new e("isses",-1,1),new e("issantes",-1,1),new e("îtes",-1,1),new e("is",-1,1),new e("irais",13,1),new e("issais",13,1),new e("irions",-1,1),new e("issions",-1,1),new e("irons",-1,1),new e("issons",-1,1),new e("issants",-1,1),new e("it",-1,1),new e("irait",21,1),new e("issait",21,1),new e("issant",-1,1),new e("iraIent",-1,1),new e("issaIent",-1,1),new e("irent",-1,1),new e("issent",-1,1),new e("iront",-1,1),new e("ît",-1,1),new e("iriez",-1,1),new e("issiez",-1,1),new e("irez",-1,1),new e("issez",-1,1)],f=[new e("a",-1,3),new e("era",0,2),new e("asse",-1,3),new e("ante",-1,3),new e("ée",-1,2),new e("ai",-1,3),new e("erai",5,2),new e("er",-1,2),new e("as",-1,3),new e("eras",8,2),new e("âmes",-1,3),new e("asses",-1,3),new e("antes",-1,3),new e("âtes",-1,3),new e("ées",-1,2),new e("ais",-1,3),new e("erais",15,2),new e("ions",-1,1),new e("erions",17,2),new e("assions",17,3),new e("erons",-1,2),new e("ants",-1,3),new e("és",-1,2),new e("ait",-1,3),new e("erait",23,2),new e("ant",-1,3),new e("aIent",-1,3),new e("eraIent",26,2),new e("èrent",-1,2),new e("assent",-1,3),new e("eront",-1,2),new e("ât",-1,3),new e("ez",-1,2),new e("iez",32,2),new e("eriez",33,2),new e("assiez",33,3),new e("erez",32,2),new e("é",-1,2)],m=[new e("e",-1,3),new e("Ière",0,2),new e("ière",0,2),new e("ion",-1,1),new e("Ier",-1,2),new e("ier",-1,2),new e("ë",-1,4)],_=[new e("ell",-1,-1),new e("eill",-1,-1),new e("enn",-1,-1),new e("onn",-1,-1),new e("ett",-1,-1)],b=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5],d=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128],k=new s;function p(e,r,s){return k.eq_s(1,e)&&(k.ket=k.cursor,k.in_grouping(b,97,251))&&(k.slice_from(r),k.cursor=s,1)}function g(e,r,s){return k.eq_s(1,e)&&(k.ket=k.cursor,k.slice_from(r),k.cursor=s,1)}function q(){for(;!k.in_grouping(b,97,251);){if(k.cursor>=k.limit)return 1;k.cursor++}for(;!k.out_grouping(b,97,251);){if(k.cursor>=k.limit)return 1;k.cursor++}}function v(){return t<=k.cursor}function z(){return n<=k.cursor}function h(){return i<=k.cursor}function W(){if(function(){var e,r;if(k.ket=k.cursor,e=k.find_among_b(l,43)){switch(k.bra=k.cursor,e){case 1:if(!h())return;k.slice_del();break;case 2:if(!h())return;k.slice_del(),k.ket=k.cursor,k.eq_s_b(2,"ic")&&(k.bra=k.cursor,h()?k.slice_del():k.slice_from("iqU"));break;case 3:if(!h())return;k.slice_from("log");break;case 4:if(!h())return;k.slice_from("u");break;case 5:if(!h())return;k.slice_from("ent");break;case 6:if(!v())return;if(k.slice_del(),k.ket=k.cursor,e=k.find_among_b(c,6))switch(k.bra=k.cursor,e){case 1:h()&&(k.slice_del(),k.ket=k.cursor,k.eq_s_b(2,"at"))&&(k.bra=k.cursor,h())&&k.slice_del();break;case 2:h()?k.slice_del():z()&&k.slice_from("eux");break;case 3:h()&&k.slice_del();break;case 4:v()&&k.slice_from("i")}break;case 7:if(!h())return;if(k.slice_del(),k.ket=k.cursor,e=k.find_among_b(a,3))switch(k.bra=k.cursor,e){case 1:h()?k.slice_del():k.slice_from("abl");break;case 2:h()?k.slice_del():k.slice_from("iqU");break;case 3:h()&&k.slice_del()}break;case 8:if(!h())return;k.slice_del(),k.ket=k.cursor,k.eq_s_b(2,"at")&&(k.bra=k.cursor,h())&&(k.slice_del(),k.ket=k.cursor,k.eq_s_b(2,"ic"))&&(k.bra=k.cursor,h()?k.slice_del():k.slice_from("iqU"));break;case 9:k.slice_from("eau");break;case 10:if(!z())return;k.slice_from("al");break;case 11:if(h())k.slice_del();else{if(!z())return;k.slice_from("eux")}break;case 12:if(!z()||!k.out_grouping_b(b,97,251))return;k.slice_del();break;case 13:return v()&&k.slice_from("ant"),0;case 14:return v()&&k.slice_from("ent"),0;case 15:return r=k.limit-k.cursor,k.in_grouping_b(b,97,251)&&v()&&(k.cursor=k.limit-r,k.slice_del()),0}return 1}}()||(k.cursor=k.limit,function(){var e,r;if(!(k.cursor<t)){if(r=k.limit_backward,k.limit_backward=t,k.ket=k.cursor,e=k.find_among_b(w,35)){if(k.bra=k.cursor,1==e){if(!k.out_grouping_b(b,97,251))return k.limit_backward=r,0;k.slice_del()}return k.limit_backward=r,1}k.limit_backward=r}}())||(k.cursor=k.limit,function(){var e,r,s;if(!(k.cursor<t)){if(r=k.limit_backward,k.limit_backward=t,k.ket=k.cursor,e=k.find_among_b(f,38)){switch(k.bra=k.cursor,e){case 1:if(!h())return k.limit_backward=r,0;k.slice_del();break;case 2:k.slice_del();break;case 3:k.slice_del(),s=k.limit-k.cursor,k.ket=k.cursor,k.eq_s_b(1,"e")?(k.bra=k.cursor,k.slice_del()):k.cursor=k.limit-s}return k.limit_backward=r,1}k.limit_backward=r}}()))k.cursor=k.limit,k.ket=k.cursor,k.eq_s_b(1,"Y")?(k.bra=k.cursor,k.slice_from("i")):(k.cursor=k.limit,k.eq_s_b(1,"ç")&&(k.bra=k.cursor,k.slice_from("c")));else{k.cursor=k.limit;var e,r,s=k.limit-k.cursor;if(k.ket=k.cursor,k.eq_s_b(1,"s")&&(k.bra=k.cursor,e=k.limit-k.cursor,k.out_grouping_b(d,97,232))?(k.cursor=k.limit-e,k.slice_del()):k.cursor=k.limit-s,k.cursor>=t){if(e=k.limit_backward,k.limit_backward=t,k.ket=k.cursor,s=k.find_among_b(m,7))switch(k.bra=k.cursor,s){case 1:if(h()){if(r=k.limit-k.cursor,!k.eq_s_b(1,"s")&&(k.cursor=k.limit-r,!k.eq_s_b(1,"t")))break;k.slice_del()}break;case 2:k.slice_from("i");break;case 3:k.slice_del();break;case 4:k.eq_s_b(2,"gu")&&k.slice_del()}k.limit_backward=e}}}this.setCurrent=function(e){k.setCurrent(e)},this.getCurrent=function(){return k.getCurrent()},this.stem=function(){var e=k.cursor,r=(!function(){for(var e,r;;){if(e=k.cursor,k.in_grouping(b,97,251)){if(k.bra=k.cursor,r=k.cursor,p("u","U",e))continue;if(k.cursor=r,p("i","I",e))continue;if(k.cursor=r,g("y","Y",e))continue}if(k.cursor=e,k.bra=e,!p("y","Y",e)&&(k.cursor=e,!k.eq_s(1,"q")||(k.bra=k.cursor,!g("u","U",e)))){if((k.cursor=e)>=k.limit)return;k.cursor++}}}(),k.cursor=e,k.cursor);if(t=k.limit,i=n=t,k.in_grouping(b,97,251)&&k.in_grouping(b,97,251)&&k.cursor<k.limit)k.cursor++;else if(k.cursor=r,!k.find_among(o,3)){k.cursor=r;do{if(k.cursor>=k.limit){k.cursor=t;break}}while(k.cursor++,!k.in_grouping(b,97,251))}t=k.cursor,k.cursor=r,q()||(n=k.cursor,q())||(i=k.cursor),k.limit_backward=e,k.cursor=k.limit,W(),k.cursor=k.limit,r=k.limit-k.cursor,k.find_among_b(_,5)&&(k.cursor=k.limit-r,k.ket=k.cursor,k.cursor>k.limit_backward)&&(k.cursor--,k.bra=k.cursor,k.slice_del()),k.cursor=k.limit;for(var s=1;k.out_grouping_b(b,97,251);)s--;return s<=0&&(k.ket=k.cursor,e=k.limit-k.cursor,k.eq_s_b(1,"é")||(k.cursor=k.limit-e,k.eq_s_b(1,"è")))&&(k.bra=k.cursor,k.slice_from("e")),k.cursor=k.limit_backward,function(){for(var e;e=k.cursor,k.bra=e,e=k.find_among(u,4);)switch(k.ket=k.cursor,e){case 1:k.slice_from("i");break;case 2:k.slice_from("u");break;case 3:k.slice_from("y");break;case 4:if(k.cursor>=k.limit)return;k.cursor++}}(),!0}},function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}),r.Pipeline.registerFunction(r.fr.stemmer,"stemmer-fr"),r.fr.stopWordFilter=function(e){if(-1===r.fr.stopWordFilter.stopWords.indexOf(e))return e},r.fr.stopWordFilter.stopWords=new r.SortedSet,r.fr.stopWordFilter.stopWords.length=164,r.fr.stopWordFilter.stopWords.elements=" ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes".split(" "),r.Pipeline.registerFunction(r.fr.stopWordFilter,"stopWordFilter-fr")}}); \ No newline at end of file
diff --git a/static/lunr.hu.js b/static/js/lunr.hu.js
index de7dc97..de7dc97 100644
--- a/static/lunr.hu.js
+++ b/static/js/lunr.hu.js
diff --git a/static/js/lunr.hu.min.js b/static/js/lunr.hu.min.js
new file mode 100644
index 0000000..2c556e5
--- /dev/null
+++ b/static/js/lunr.hu.min.js
@@ -0,0 +1 @@
+!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(n){if(void 0===n)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===n.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var e,_,r;n.hu=function(){this.pipeline.reset(),this.pipeline.add(n.hu.trimmer,n.hu.stopWordFilter,n.hu.stemmer)},n.hu.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",n.hu.trimmer=n.trimmerSupport.generateTrimmer(n.hu.wordCharacters),n.Pipeline.registerFunction(n.hu.trimmer,"trimmer-hu"),n.hu.stemmer=(e=n.stemmerSupport.Among,_=n.stemmerSupport.SnowballProgram,r=new function(){var r,i=[new e("cs",-1,-1),new e("dzs",-1,-1),new e("gy",-1,-1),new e("ly",-1,-1),new e("ny",-1,-1),new e("sz",-1,-1),new e("ty",-1,-1),new e("zs",-1,-1)],n=[new e("á",-1,1),new e("é",-1,2)],s=[new e("bb",-1,-1),new e("cc",-1,-1),new e("dd",-1,-1),new e("ff",-1,-1),new e("gg",-1,-1),new e("jj",-1,-1),new e("kk",-1,-1),new e("ll",-1,-1),new e("mm",-1,-1),new e("nn",-1,-1),new e("pp",-1,-1),new e("rr",-1,-1),new e("ccs",-1,-1),new e("ss",-1,-1),new e("zzs",-1,-1),new e("tt",-1,-1),new e("vv",-1,-1),new e("ggy",-1,-1),new e("lly",-1,-1),new e("nny",-1,-1),new e("tty",-1,-1),new e("ssz",-1,-1),new e("zz",-1,-1)],a=[new e("al",-1,1),new e("el",-1,2)],t=[new e("ba",-1,-1),new e("ra",-1,-1),new e("be",-1,-1),new e("re",-1,-1),new e("ig",-1,-1),new e("nak",-1,-1),new e("nek",-1,-1),new e("val",-1,-1),new e("vel",-1,-1),new e("ul",-1,-1),new e("nál",-1,-1),new e("nél",-1,-1),new e("ból",-1,-1),new e("ról",-1,-1),new e("tól",-1,-1),new e("bõl",-1,-1),new e("rõl",-1,-1),new e("tõl",-1,-1),new e("ül",-1,-1),new e("n",-1,-1),new e("an",19,-1),new e("ban",20,-1),new e("en",19,-1),new e("ben",22,-1),new e("képpen",22,-1),new e("on",19,-1),new e("ön",19,-1),new e("képp",-1,-1),new e("kor",-1,-1),new e("t",-1,-1),new e("at",29,-1),new e("et",29,-1),new e("ként",29,-1),new e("anként",32,-1),new e("enként",32,-1),new e("onként",32,-1),new e("ot",29,-1),new e("ért",29,-1),new e("öt",29,-1),new e("hez",-1,-1),new e("hoz",-1,-1),new e("höz",-1,-1),new e("vá",-1,-1),new e("vé",-1,-1)],o=[new e("án",-1,2),new e("én",-1,1),new e("ánként",-1,3)],w=[new e("stul",-1,2),new e("astul",0,1),new e("ástul",0,3),new e("stül",-1,2),new e("estül",3,1),new e("éstül",3,4)],c=[new e("á",-1,1),new e("é",-1,2)],l=[new e("k",-1,7),new e("ak",0,4),new e("ek",0,6),new e("ok",0,5),new e("ák",0,1),new e("ék",0,2),new e("ök",0,3)],m=[new e("éi",-1,7),new e("áéi",0,6),new e("ééi",0,5),new e("é",-1,9),new e("ké",3,4),new e("aké",4,1),new e("eké",4,1),new e("oké",4,1),new e("áké",4,3),new e("éké",4,2),new e("öké",4,1),new e("éé",3,8)],u=[new e("a",-1,18),new e("ja",0,17),new e("d",-1,16),new e("ad",2,13),new e("ed",2,13),new e("od",2,13),new e("ád",2,14),new e("éd",2,15),new e("öd",2,13),new e("e",-1,18),new e("je",9,17),new e("nk",-1,4),new e("unk",11,1),new e("ánk",11,2),new e("énk",11,3),new e("ünk",11,1),new e("uk",-1,8),new e("juk",16,7),new e("ájuk",17,5),new e("ük",-1,8),new e("jük",19,7),new e("éjük",20,6),new e("m",-1,12),new e("am",22,9),new e("em",22,9),new e("om",22,9),new e("ám",22,10),new e("ém",22,11),new e("o",-1,18),new e("á",-1,19),new e("é",-1,20)],k=[new e("id",-1,10),new e("aid",0,9),new e("jaid",1,6),new e("eid",0,9),new e("jeid",3,6),new e("áid",0,7),new e("éid",0,8),new e("i",-1,15),new e("ai",7,14),new e("jai",8,11),new e("ei",7,14),new e("jei",10,11),new e("ái",7,12),new e("éi",7,13),new e("itek",-1,24),new e("eitek",14,21),new e("jeitek",15,20),new e("éitek",14,23),new e("ik",-1,29),new e("aik",18,26),new e("jaik",19,25),new e("eik",18,26),new e("jeik",21,25),new e("áik",18,27),new e("éik",18,28),new e("ink",-1,20),new e("aink",25,17),new e("jaink",26,16),new e("eink",25,17),new e("jeink",28,16),new e("áink",25,18),new e("éink",25,19),new e("aitok",-1,21),new e("jaitok",32,20),new e("áitok",-1,22),new e("im",-1,5),new e("aim",35,4),new e("jaim",36,1),new e("eim",35,4),new e("jeim",38,1),new e("áim",35,2),new e("éim",35,3)],d=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,52,14],b=new _;function f(){return r<=b.cursor}function g(){var e=b.limit-b.cursor;return b.find_among_b(s,23)&&(b.cursor=b.limit-e,1)}function h(){var e;b.cursor>b.limit_backward&&(b.cursor--,b.ket=b.cursor,e=b.cursor-1,b.limit_backward<=e)&&e<=b.limit&&(b.cursor=e,b.bra=e,b.slice_del())}function p(){var e;if((b.ket=b.cursor,b.find_among_b(t,44))&&(b.bra=b.cursor,f()&&(b.slice_del(),b.ket=b.cursor,e=b.find_among_b(n,2))&&(b.bra=b.cursor,f())))switch(e){case 1:b.slice_from("a");break;case 2:b.slice_from("e")}}this.setCurrent=function(e){b.setCurrent(e)},this.getCurrent=function(){return b.getCurrent()},this.stem=function(){var e=b.cursor;if(!function(){var e,n=b.cursor;if(r=b.limit,b.in_grouping(d,97,252))for(;;){if(e=b.cursor,b.out_grouping(d,97,252))return b.cursor=e,b.find_among(i,8)||(b.cursor=e)<b.limit&&b.cursor++,r=b.cursor;if((b.cursor=e)>=b.limit)return r=e;b.cursor++}if(b.cursor=n,b.out_grouping(d,97,252)){for(;!b.in_grouping(d,97,252);){if(b.cursor>=b.limit)return;b.cursor++}r=b.cursor}}(),b.limit_backward=e,b.cursor=b.limit,b.ket=b.cursor,(e=b.find_among_b(a,2))&&(b.bra=b.cursor,f())&&(1!=e&&2!=e||g())&&(b.slice_del(),h()),b.cursor=b.limit,p(),b.cursor=b.limit,b.ket=b.cursor,(e=b.find_among_b(o,3))&&(b.bra=b.cursor,f()))switch(e){case 1:b.slice_from("e");break;case 2:case 3:b.slice_from("a")}if(b.cursor=b.limit,b.ket=b.cursor,(e=b.find_among_b(w,6))&&(b.bra=b.cursor,f()))switch(e){case 1:case 2:b.slice_del();break;case 3:b.slice_from("a");break;case 4:b.slice_from("e")}if(b.cursor=b.limit,b.ket=b.cursor,(e=b.find_among_b(c,2))&&(b.bra=b.cursor,f())&&(1!=e&&2!=e||g())&&(b.slice_del(),h()),b.cursor=b.limit,b.ket=b.cursor,(e=b.find_among_b(m,12))&&(b.bra=b.cursor,f()))switch(e){case 1:case 4:case 7:case 9:b.slice_del();break;case 2:case 5:case 8:b.slice_from("e");break;case 3:case 6:b.slice_from("a")}if(b.cursor=b.limit,b.ket=b.cursor,(e=b.find_among_b(u,31))&&(b.bra=b.cursor,f()))switch(e){case 1:case 4:case 7:case 8:case 9:case 12:case 13:case 16:case 17:case 18:b.slice_del();break;case 2:case 5:case 10:case 14:case 19:b.slice_from("a");break;case 3:case 6:case 11:case 15:case 20:b.slice_from("e")}if(b.cursor=b.limit,b.ket=b.cursor,(e=b.find_among_b(k,42))&&(b.bra=b.cursor,f()))switch(e){case 1:case 4:case 5:case 6:case 9:case 10:case 11:case 14:case 15:case 16:case 17:case 20:case 21:case 24:case 25:case 26:case 29:b.slice_del();break;case 2:case 7:case 12:case 18:case 22:case 27:b.slice_from("a");break;case 3:case 8:case 13:case 19:case 23:case 28:b.slice_from("e")}if(b.cursor=b.limit,b.ket=b.cursor,(e=b.find_among_b(l,7))&&(b.bra=b.cursor,f()))switch(e){case 1:b.slice_from("a");break;case 2:b.slice_from("e");break;case 3:case 4:case 5:case 6:case 7:b.slice_del()}return!0}},function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}),n.Pipeline.registerFunction(n.hu.stemmer,"stemmer-hu"),n.hu.stopWordFilter=function(e){if(-1===n.hu.stopWordFilter.stopWords.indexOf(e))return e},n.hu.stopWordFilter.stopWords=new n.SortedSet,n.hu.stopWordFilter.stopWords.length=200,n.hu.stopWordFilter.stopWords.elements=" a abban ahhoz ahogy ahol aki akik akkor alatt amely amelyek amelyekben amelyeket amelyet amelynek ami amikor amit amolyan amíg annak arra arról az azok azon azonban azt aztán azután azzal azért be belül benne bár cikk cikkek cikkeket csak de e ebben eddig egy egyes egyetlen egyik egyre egyéb egész ehhez ekkor el ellen elsõ elég elõ elõször elõtt emilyen ennek erre ez ezek ezen ezt ezzel ezért fel felé hanem hiszen hogy hogyan igen ill ill. illetve ilyen ilyenkor ismét ison itt jobban jó jól kell kellett keressünk keresztül ki kívül között közül legalább legyen lehet lehetett lenne lenni lesz lett maga magát majd majd meg mellett mely melyek mert mi mikor milyen minden mindenki mindent mindig mint mintha mit mivel miért most már más másik még míg nagy nagyobb nagyon ne nekem neki nem nincs néha néhány nélkül olyan ott pedig persze rá s saját sem semmi sok sokat sokkal szemben szerint szinte számára talán tehát teljes tovább továbbá több ugyanis utolsó után utána vagy vagyis vagyok valaki valami valamint való van vannak vele vissza viszont volna volt voltak voltam voltunk által általában át én éppen és így õ õk õket össze úgy új újabb újra".split(" "),n.Pipeline.registerFunction(n.hu.stopWordFilter,"stopWordFilter-hu")}}); \ No newline at end of file
diff --git a/static/lunr.it.js b/static/js/lunr.it.js
index 91fc8bd..91fc8bd 100644
--- a/static/lunr.it.js
+++ b/static/js/lunr.it.js
diff --git a/static/js/lunr.it.min.js b/static/js/lunr.it.min.js
new file mode 100644
index 0000000..f232c3f
--- /dev/null
+++ b/static/js/lunr.it.min.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var e,F,i;r.it=function(){this.pipeline.reset(),this.pipeline.add(r.it.trimmer,r.it.stopWordFilter,r.it.stemmer)},r.it.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.it.trimmer=r.trimmerSupport.generateTrimmer(r.it.wordCharacters),r.Pipeline.registerFunction(r.it.trimmer,"trimmer-it"),r.it.stemmer=(e=r.stemmerSupport.Among,F=r.stemmerSupport.SnowballProgram,i=new function(){var n,o,s,t=[new e("",-1,7),new e("qu",0,6),new e("á",0,1),new e("é",0,2),new e("í",0,3),new e("ó",0,4),new e("ú",0,5)],a=[new e("",-1,3),new e("I",0,1),new e("U",0,2)],u=[new e("la",-1,-1),new e("cela",0,-1),new e("gliela",0,-1),new e("mela",0,-1),new e("tela",0,-1),new e("vela",0,-1),new e("le",-1,-1),new e("cele",6,-1),new e("gliele",6,-1),new e("mele",6,-1),new e("tele",6,-1),new e("vele",6,-1),new e("ne",-1,-1),new e("cene",12,-1),new e("gliene",12,-1),new e("mene",12,-1),new e("sene",12,-1),new e("tene",12,-1),new e("vene",12,-1),new e("ci",-1,-1),new e("li",-1,-1),new e("celi",20,-1),new e("glieli",20,-1),new e("meli",20,-1),new e("teli",20,-1),new e("veli",20,-1),new e("gli",20,-1),new e("mi",-1,-1),new e("si",-1,-1),new e("ti",-1,-1),new e("vi",-1,-1),new e("lo",-1,-1),new e("celo",31,-1),new e("glielo",31,-1),new e("melo",31,-1),new e("telo",31,-1),new e("velo",31,-1)],c=[new e("ando",-1,1),new e("endo",-1,1),new e("ar",-1,2),new e("er",-1,2),new e("ir",-1,2)],r=[new e("ic",-1,-1),new e("abil",-1,-1),new e("os",-1,-1),new e("iv",-1,1)],i=[new e("ic",-1,1),new e("abil",-1,1),new e("iv",-1,1)],w=[new e("ica",-1,1),new e("logia",-1,3),new e("osa",-1,1),new e("ista",-1,1),new e("iva",-1,9),new e("anza",-1,1),new e("enza",-1,5),new e("ice",-1,1),new e("atrice",7,1),new e("iche",-1,1),new e("logie",-1,3),new e("abile",-1,1),new e("ibile",-1,1),new e("usione",-1,4),new e("azione",-1,2),new e("uzione",-1,4),new e("atore",-1,2),new e("ose",-1,1),new e("ante",-1,1),new e("mente",-1,1),new e("amente",19,7),new e("iste",-1,1),new e("ive",-1,9),new e("anze",-1,1),new e("enze",-1,5),new e("ici",-1,1),new e("atrici",25,1),new e("ichi",-1,1),new e("abili",-1,1),new e("ibili",-1,1),new e("ismi",-1,1),new e("usioni",-1,4),new e("azioni",-1,2),new e("uzioni",-1,4),new e("atori",-1,2),new e("osi",-1,1),new e("anti",-1,1),new e("amenti",-1,6),new e("imenti",-1,6),new e("isti",-1,1),new e("ivi",-1,9),new e("ico",-1,1),new e("ismo",-1,1),new e("oso",-1,1),new e("amento",-1,6),new e("imento",-1,6),new e("ivo",-1,9),new e("ità",-1,8),new e("istà",-1,1),new e("istè",-1,1),new e("istì",-1,1)],l=[new e("isca",-1,1),new e("enda",-1,1),new e("ata",-1,1),new e("ita",-1,1),new e("uta",-1,1),new e("ava",-1,1),new e("eva",-1,1),new e("iva",-1,1),new e("erebbe",-1,1),new e("irebbe",-1,1),new e("isce",-1,1),new e("ende",-1,1),new e("are",-1,1),new e("ere",-1,1),new e("ire",-1,1),new e("asse",-1,1),new e("ate",-1,1),new e("avate",16,1),new e("evate",16,1),new e("ivate",16,1),new e("ete",-1,1),new e("erete",20,1),new e("irete",20,1),new e("ite",-1,1),new e("ereste",-1,1),new e("ireste",-1,1),new e("ute",-1,1),new e("erai",-1,1),new e("irai",-1,1),new e("isci",-1,1),new e("endi",-1,1),new e("erei",-1,1),new e("irei",-1,1),new e("assi",-1,1),new e("ati",-1,1),new e("iti",-1,1),new e("eresti",-1,1),new e("iresti",-1,1),new e("uti",-1,1),new e("avi",-1,1),new e("evi",-1,1),new e("ivi",-1,1),new e("isco",-1,1),new e("ando",-1,1),new e("endo",-1,1),new e("Yamo",-1,1),new e("iamo",-1,1),new e("avamo",-1,1),new e("evamo",-1,1),new e("ivamo",-1,1),new e("eremo",-1,1),new e("iremo",-1,1),new e("assimo",-1,1),new e("ammo",-1,1),new e("emmo",-1,1),new e("eremmo",54,1),new e("iremmo",54,1),new e("immo",-1,1),new e("ano",-1,1),new e("iscano",58,1),new e("avano",58,1),new e("evano",58,1),new e("ivano",58,1),new e("eranno",-1,1),new e("iranno",-1,1),new e("ono",-1,1),new e("iscono",65,1),new e("arono",65,1),new e("erono",65,1),new e("irono",65,1),new e("erebbero",-1,1),new e("irebbero",-1,1),new e("assero",-1,1),new e("essero",-1,1),new e("issero",-1,1),new e("ato",-1,1),new e("ito",-1,1),new e("uto",-1,1),new e("avo",-1,1),new e("evo",-1,1),new e("ivo",-1,1),new e("ar",-1,1),new e("ir",-1,1),new e("erà",-1,1),new e("irà",-1,1),new e("erò",-1,1),new e("irò",-1,1)],m=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2,1],f=[17,65,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2],v=[17],b=new F;function d(e,r,i){return b.eq_s(1,e)&&(b.ket=b.cursor,b.in_grouping(m,97,249))&&(b.slice_from(r),b.cursor=i,1)}function _(e){if(b.cursor=e,!b.in_grouping(m,97,249))return!1;for(;!b.out_grouping(m,97,249);){if(b.cursor>=b.limit)return!1;b.cursor++}return!0}function g(){var e,r=b.cursor;if(!function(){if(b.in_grouping(m,97,249)){var e=b.cursor;if(b.out_grouping(m,97,249)){for(;!b.in_grouping(m,97,249);){if(b.cursor>=b.limit)return _(e);b.cursor++}return 1}return _(e)}}()){if(b.cursor=r,!b.out_grouping(m,97,249))return;if(e=b.cursor,b.out_grouping(m,97,249)){for(;!b.in_grouping(m,97,249);){if(b.cursor>=b.limit)return b.cursor=e,void(b.in_grouping(m,97,249)&&b.cursor<b.limit&&b.cursor++);b.cursor++}return void(s=b.cursor)}if(b.cursor=e,!b.in_grouping(m,97,249)||b.cursor>=b.limit)return;b.cursor++}s=b.cursor}function p(){for(;!b.in_grouping(m,97,249);){if(b.cursor>=b.limit)return;b.cursor++}for(;!b.out_grouping(m,97,249);){if(b.cursor>=b.limit)return;b.cursor++}return 1}function k(){return s<=b.cursor}function h(){return n<=b.cursor}function q(){var e;if(b.ket=b.cursor,e=b.find_among_b(w,51)){switch(b.bra=b.cursor,e){case 1:if(!h())return;b.slice_del();break;case 2:if(!h())return;b.slice_del(),b.ket=b.cursor,b.eq_s_b(2,"ic")&&(b.bra=b.cursor,h())&&b.slice_del();break;case 3:if(!h())return;b.slice_from("log");break;case 4:if(!h())return;b.slice_from("u");break;case 5:if(!h())return;b.slice_from("ente");break;case 6:if(!k())return;b.slice_del();break;case 7:if(!(o<=b.cursor))return;b.slice_del(),b.ket=b.cursor,(e=b.find_among_b(r,4))&&(b.bra=b.cursor,h())&&(b.slice_del(),1==e)&&(b.ket=b.cursor,b.eq_s_b(2,"at"))&&(b.bra=b.cursor,h())&&b.slice_del();break;case 8:if(!h())return;b.slice_del(),b.ket=b.cursor,(e=b.find_among_b(i,3))&&(b.bra=b.cursor,1==e)&&h()&&b.slice_del();break;case 9:if(!h())return;b.slice_del(),b.ket=b.cursor,b.eq_s_b(2,"at")&&(b.bra=b.cursor,h())&&(b.slice_del(),b.ket=b.cursor,b.eq_s_b(2,"ic"))&&(b.bra=b.cursor,h())&&b.slice_del()}return 1}}function W(){var e;e=b.limit-b.cursor,b.ket=b.cursor,b.in_grouping_b(f,97,242)&&(b.bra=b.cursor,k())&&(b.slice_del(),b.ket=b.cursor,b.eq_s_b(1,"i"))&&(b.bra=b.cursor,k())?b.slice_del():b.cursor=b.limit-e,b.ket=b.cursor,b.eq_s_b(1,"h")&&(b.bra=b.cursor,b.in_grouping_b(v,99,103))&&k()&&b.slice_del()}this.setCurrent=function(e){b.setCurrent(e)},this.getCurrent=function(){return b.getCurrent()},this.stem=function(){var e,r,i=b.cursor;if(!function(){for(var e,r,i,n,o=b.cursor;;){if(b.bra=b.cursor,e=b.find_among(t,7))switch(b.ket=b.cursor,e){case 1:b.slice_from("à");continue;case 2:b.slice_from("è");continue;case 3:b.slice_from("ì");continue;case 4:b.slice_from("ò");continue;case 5:b.slice_from("ù");continue;case 6:b.slice_from("qU");continue;case 7:if(!(b.cursor>=b.limit)){b.cursor++;continue}}break}for(b.cursor=o;;)for(r=b.cursor;;){if(i=b.cursor,b.in_grouping(m,97,249)){if(b.bra=b.cursor,n=b.cursor,d("u","U",i))break;if(b.cursor=n,d("i","I",i))break}if(b.cursor=i,b.cursor>=b.limit)return b.cursor=r;b.cursor++}}(),b.cursor=i,r=b.cursor,s=b.limit,n=o=s,g(),b.cursor=r,p()&&(o=b.cursor,p())&&(n=b.cursor),b.limit_backward=i,b.cursor=b.limit,b.ket=b.cursor,b.find_among_b(u,37)&&(b.bra=b.cursor,e=b.find_among_b(c,5))&&k())switch(e){case 1:b.slice_del();break;case 2:b.slice_from("e")}return b.cursor=b.limit,q()||(b.cursor=b.limit,b.cursor>=s&&(r=b.limit_backward,b.limit_backward=s,b.ket=b.cursor,(i=b.find_among_b(l,87))&&(b.bra=b.cursor,1==i)&&b.slice_del(),b.limit_backward=r)),b.cursor=b.limit,W(),b.cursor=b.limit_backward,function(){for(var e;b.bra=b.cursor,e=b.find_among(a,3);)switch(b.ket=b.cursor,e){case 1:b.slice_from("i");break;case 2:b.slice_from("u");break;case 3:if(b.cursor>=b.limit)return;b.cursor++}}(),!0}},function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}),r.Pipeline.registerFunction(r.it.stemmer,"stemmer-it"),r.it.stopWordFilter=function(e){if(-1===r.it.stopWordFilter.stopWords.indexOf(e))return e},r.it.stopWordFilter.stopWords=new r.SortedSet,r.it.stopWordFilter.stopWords.length=280,r.it.stopWordFilter.stopWords.elements=" a abbia abbiamo abbiano abbiate ad agl agli ai al all alla alle allo anche avemmo avendo avesse avessero avessi avessimo aveste avesti avete aveva avevamo avevano avevate avevi avevo avrai avranno avrebbe avrebbero avrei avremmo avremo avreste avresti avrete avrà avrò avuta avute avuti avuto c che chi ci coi col come con contro cui da dagl dagli dai dal dall dalla dalle dallo degl degli dei del dell della delle dello di dov dove e ebbe ebbero ebbi ed era erano eravamo eravate eri ero essendo faccia facciamo facciano facciate faccio facemmo facendo facesse facessero facessi facessimo faceste facesti faceva facevamo facevano facevate facevi facevo fai fanno farai faranno farebbe farebbero farei faremmo faremo fareste faresti farete farà farò fece fecero feci fosse fossero fossi fossimo foste fosti fu fui fummo furono gli ha hai hanno ho i il in io l la le lei li lo loro lui ma mi mia mie miei mio ne negl negli nei nel nell nella nelle nello noi non nostra nostre nostri nostro o per perché più quale quanta quante quanti quanto quella quelle quelli quello questa queste questi questo sarai saranno sarebbe sarebbero sarei saremmo saremo sareste saresti sarete sarà sarò se sei si sia siamo siano siate siete sono sta stai stando stanno starai staranno starebbe starebbero starei staremmo staremo stareste staresti starete starà starò stava stavamo stavano stavate stavi stavo stemmo stesse stessero stessi stessimo steste stesti stette stettero stetti stia stiamo stiano stiate sto su sua sue sugl sugli sui sul sull sulla sulle sullo suo suoi ti tra tu tua tue tuo tuoi tutti tutto un una uno vi voi vostra vostre vostri vostro è".split(" "),r.Pipeline.registerFunction(r.it.stopWordFilter,"stopWordFilter-it")}}); \ No newline at end of file
diff --git a/static/lunr.jp.js b/static/js/lunr.jp.js
index 4dcdc43..4dcdc43 100644
--- a/static/lunr.jp.js
+++ b/static/js/lunr.jp.js
diff --git a/static/js/lunr.jp.min.js b/static/js/lunr.jp.min.js
new file mode 100644
index 0000000..b70d9ee
--- /dev/null
+++ b/static/js/lunr.jp.min.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");r.jp=function(){this.pipeline.reset(),this.pipeline.add(r.jp.stopWordFilter,r.jp.stemmer),r.tokenizer=r.jp.tokenizer};var n=new TinySegmenter;r.jp.tokenizer=function(e){if(!arguments.length||null==e)return[];if(Array.isArray(e))return e.map(function(e){return e.toLowerCase()});for(var r=e.toString().replace(/^\s+/,""),t=r.length-1;0<=t;t--)if(/\S/.test(r.charAt(t))){r=r.substring(0,t+1);break}return n.segment(r).filter(function(e){return!!e}).map(function(e){return e})},r.jp.stemmer=function(e){return e},r.Pipeline.registerFunction(r.jp.stemmer,"stemmer-jp"),r.jp.stopWordFilter=function(e){if(-1===r.jp.stopWordFilter.stopWords.indexOf(e))return e},r.jp.stopWordFilter.stopWords=new r.SortedSet,r.jp.stopWordFilter.stopWords.length=45,r.jp.stopWordFilter.stopWords.elements=" これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" "),r.Pipeline.registerFunction(r.jp.stopWordFilter,"stopWordFilter-jp")}}); \ No newline at end of file
diff --git a/static/lunr.no.js b/static/js/lunr.no.js
index acaa024..acaa024 100644
--- a/static/lunr.no.js
+++ b/static/js/lunr.no.js
diff --git a/static/js/lunr.no.min.js b/static/js/lunr.no.min.js
new file mode 100644
index 0000000..ac91e96
--- /dev/null
+++ b/static/js/lunr.no.min.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var e,n,i;r.no=function(){this.pipeline.reset(),this.pipeline.add(r.no.trimmer,r.no.stopWordFilter,r.no.stemmer)},r.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.no.trimmer=r.trimmerSupport.generateTrimmer(r.no.wordCharacters),r.Pipeline.registerFunction(r.no.trimmer,"trimmer-no"),r.no.stemmer=(e=r.stemmerSupport.Among,n=r.stemmerSupport.SnowballProgram,i=new function(){var t,o,s=[new e("a",-1,1),new e("e",-1,1),new e("ede",1,1),new e("ande",1,1),new e("ende",1,1),new e("ane",1,1),new e("ene",1,1),new e("hetene",6,1),new e("erte",1,3),new e("en",-1,1),new e("heten",9,1),new e("ar",-1,1),new e("er",-1,1),new e("heter",12,1),new e("s",-1,2),new e("as",14,1),new e("es",14,1),new e("edes",16,1),new e("endes",16,1),new e("enes",16,1),new e("hetenes",19,1),new e("ens",14,1),new e("hetens",21,1),new e("ers",14,1),new e("ets",14,1),new e("et",-1,1),new e("het",25,1),new e("ert",-1,3),new e("ast",-1,1)],m=[new e("dt",-1,-1),new e("vt",-1,-1)],a=[new e("leg",-1,1),new e("eleg",0,1),new e("ig",-1,1),new e("eig",2,1),new e("lig",2,1),new e("elig",4,1),new e("els",-1,1),new e("lov",-1,1),new e("elov",7,1),new e("slov",7,1),new e("hetslov",9,1)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],d=[119,125,149,1],u=new n;this.setCurrent=function(e){u.setCurrent(e)},this.getCurrent=function(){return u.getCurrent()},this.stem=function(){var e,r,n,i=u.cursor;if(!function(){var e,r=u.cursor+3;if(o=u.limit,0<=r||r<=u.limit){for(t=r;;){if(e=u.cursor,u.in_grouping(l,97,248)){u.cursor=e;break}if(e>=u.limit)return;u.cursor=e+1}for(;!u.out_grouping(l,97,248);){if(u.cursor>=u.limit)return;u.cursor++}(o=u.cursor)<t&&(o=t)}}(),u.limit_backward=i,u.cursor=u.limit,u.cursor>=o&&(i=u.limit_backward,u.limit_backward=o,u.ket=u.cursor,r=u.find_among_b(s,29),u.limit_backward=i,r))switch(u.bra=u.cursor,r){case 1:u.slice_del();break;case 2:e=u.limit-u.cursor,(u.in_grouping_b(d,98,122)||(u.cursor=u.limit-e,u.eq_s_b(1,"k")&&u.out_grouping_b(l,97,248)))&&u.slice_del();break;case 3:u.slice_from("er")}return u.cursor=u.limit,i=u.limit-u.cursor,u.cursor>=o&&(r=u.limit_backward,u.limit_backward=o,u.ket=u.cursor,u.find_among_b(m,2)?(u.bra=u.cursor,u.limit_backward=r,u.cursor=u.limit-i,u.cursor>u.limit_backward&&(u.cursor--,u.bra=u.cursor,u.slice_del())):u.limit_backward=r),u.cursor=u.limit,u.cursor>=o&&(i=u.limit_backward,u.limit_backward=o,u.ket=u.cursor,(n=u.find_among_b(a,11))?(u.bra=u.cursor,u.limit_backward=i,1==n&&u.slice_del()):u.limit_backward=i),!0}},function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}),r.Pipeline.registerFunction(r.no.stemmer,"stemmer-no"),r.no.stopWordFilter=function(e){if(-1===r.no.stopWordFilter.stopWords.indexOf(e))return e},r.no.stopWordFilter.stopWords=new r.SortedSet,r.no.stopWordFilter.stopWords.length=177,r.no.stopWordFilter.stopWords.elements=" alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" "),r.Pipeline.registerFunction(r.no.stopWordFilter,"stopWordFilter-no")}}); \ No newline at end of file
diff --git a/static/lunr.pt.js b/static/js/lunr.pt.js
index b340325..b340325 100644
--- a/static/lunr.pt.js
+++ b/static/js/lunr.pt.js
diff --git a/static/js/lunr.pt.min.js b/static/js/lunr.pt.min.js
new file mode 100644
index 0000000..c82fed6
--- /dev/null
+++ b/static/js/lunr.pt.min.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var e,W,s;r.pt=function(){this.pipeline.reset(),this.pipeline.add(r.pt.trimmer,r.pt.stopWordFilter,r.pt.stemmer)},r.pt.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.pt.trimmer=r.trimmerSupport.generateTrimmer(r.pt.wordCharacters),r.Pipeline.registerFunction(r.pt.trimmer,"trimmer-pt"),r.pt.stemmer=(e=r.stemmerSupport.Among,W=r.stemmerSupport.SnowballProgram,s=new function(){var o,i,t,a=[new e("",-1,3),new e("ã",0,1),new e("õ",0,2)],u=[new e("",-1,3),new e("a~",0,1),new e("o~",0,2)],r=[new e("ic",-1,-1),new e("ad",-1,-1),new e("os",-1,-1),new e("iv",-1,1)],s=[new e("ante",-1,1),new e("avel",-1,1),new e("ível",-1,1)],n=[new e("ic",-1,1),new e("abil",-1,1),new e("iv",-1,1)],w=[new e("ica",-1,1),new e("ância",-1,1),new e("ência",-1,4),new e("ira",-1,9),new e("adora",-1,1),new e("osa",-1,1),new e("ista",-1,1),new e("iva",-1,8),new e("eza",-1,1),new e("logía",-1,2),new e("idade",-1,7),new e("ante",-1,1),new e("mente",-1,6),new e("amente",12,5),new e("ável",-1,1),new e("ível",-1,1),new e("ución",-1,3),new e("ico",-1,1),new e("ismo",-1,1),new e("oso",-1,1),new e("amento",-1,1),new e("imento",-1,1),new e("ivo",-1,8),new e("aça~o",-1,1),new e("ador",-1,1),new e("icas",-1,1),new e("ências",-1,4),new e("iras",-1,9),new e("adoras",-1,1),new e("osas",-1,1),new e("istas",-1,1),new e("ivas",-1,8),new e("ezas",-1,1),new e("logías",-1,2),new e("idades",-1,7),new e("uciones",-1,3),new e("adores",-1,1),new e("antes",-1,1),new e("aço~es",-1,1),new e("icos",-1,1),new e("ismos",-1,1),new e("osos",-1,1),new e("amentos",-1,1),new e("imentos",-1,1),new e("ivos",-1,8)],m=[new e("ada",-1,1),new e("ida",-1,1),new e("ia",-1,1),new e("aria",2,1),new e("eria",2,1),new e("iria",2,1),new e("ara",-1,1),new e("era",-1,1),new e("ira",-1,1),new e("ava",-1,1),new e("asse",-1,1),new e("esse",-1,1),new e("isse",-1,1),new e("aste",-1,1),new e("este",-1,1),new e("iste",-1,1),new e("ei",-1,1),new e("arei",16,1),new e("erei",16,1),new e("irei",16,1),new e("am",-1,1),new e("iam",20,1),new e("ariam",21,1),new e("eriam",21,1),new e("iriam",21,1),new e("aram",20,1),new e("eram",20,1),new e("iram",20,1),new e("avam",20,1),new e("em",-1,1),new e("arem",29,1),new e("erem",29,1),new e("irem",29,1),new e("assem",29,1),new e("essem",29,1),new e("issem",29,1),new e("ado",-1,1),new e("ido",-1,1),new e("ando",-1,1),new e("endo",-1,1),new e("indo",-1,1),new e("ara~o",-1,1),new e("era~o",-1,1),new e("ira~o",-1,1),new e("ar",-1,1),new e("er",-1,1),new e("ir",-1,1),new e("as",-1,1),new e("adas",47,1),new e("idas",47,1),new e("ias",47,1),new e("arias",50,1),new e("erias",50,1),new e("irias",50,1),new e("aras",47,1),new e("eras",47,1),new e("iras",47,1),new e("avas",47,1),new e("es",-1,1),new e("ardes",58,1),new e("erdes",58,1),new e("irdes",58,1),new e("ares",58,1),new e("eres",58,1),new e("ires",58,1),new e("asses",58,1),new e("esses",58,1),new e("isses",58,1),new e("astes",58,1),new e("estes",58,1),new e("istes",58,1),new e("is",-1,1),new e("ais",71,1),new e("eis",71,1),new e("areis",73,1),new e("ereis",73,1),new e("ireis",73,1),new e("áreis",73,1),new e("éreis",73,1),new e("íreis",73,1),new e("ásseis",73,1),new e("ésseis",73,1),new e("ísseis",73,1),new e("áveis",73,1),new e("íeis",73,1),new e("aríeis",84,1),new e("eríeis",84,1),new e("iríeis",84,1),new e("ados",-1,1),new e("idos",-1,1),new e("amos",-1,1),new e("áramos",90,1),new e("éramos",90,1),new e("íramos",90,1),new e("ávamos",90,1),new e("íamos",90,1),new e("aríamos",95,1),new e("eríamos",95,1),new e("iríamos",95,1),new e("emos",-1,1),new e("aremos",99,1),new e("eremos",99,1),new e("iremos",99,1),new e("ássemos",99,1),new e("êssemos",99,1),new e("íssemos",99,1),new e("imos",-1,1),new e("armos",-1,1),new e("ermos",-1,1),new e("irmos",-1,1),new e("ámos",-1,1),new e("arás",-1,1),new e("erás",-1,1),new e("irás",-1,1),new e("eu",-1,1),new e("iu",-1,1),new e("ou",-1,1),new e("ará",-1,1),new e("erá",-1,1),new e("irá",-1,1)],c=[new e("a",-1,1),new e("i",-1,1),new e("o",-1,1),new e("os",-1,1),new e("á",-1,1),new e("í",-1,1),new e("ó",-1,1)],l=[new e("e",-1,1),new e("ç",-1,2),new e("é",-1,1),new e("ê",-1,1)],f=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2],d=new W;function p(){if(!d.out_grouping(f,97,250))return 1;for(;!d.in_grouping(f,97,250);){if(d.cursor>=d.limit)return 1;d.cursor++}}function v(){var e,r=d.cursor;if(d.in_grouping(f,97,250))if(e=d.cursor,p()){if(d.cursor=e,function(){if(d.in_grouping(f,97,250))for(;!d.out_grouping(f,97,250);){if(d.cursor>=d.limit)return;d.cursor++}return t=d.cursor,1}())return}else t=d.cursor;if(d.cursor=r,d.out_grouping(f,97,250)){if(e=d.cursor,p()){if(d.cursor=e,!d.in_grouping(f,97,250)||d.cursor>=d.limit)return;d.cursor++}t=d.cursor}}function _(){for(;!d.in_grouping(f,97,250);){if(d.cursor>=d.limit)return;d.cursor++}for(;!d.out_grouping(f,97,250);){if(d.cursor>=d.limit)return;d.cursor++}return 1}function h(){return t<=d.cursor}function b(){return o<=d.cursor}function g(){var e;if(d.ket=d.cursor,e=d.find_among_b(w,45)){switch(d.bra=d.cursor,e){case 1:if(!b())return;d.slice_del();break;case 2:if(!b())return;d.slice_from("log");break;case 3:if(!b())return;d.slice_from("u");break;case 4:if(!b())return;d.slice_from("ente");break;case 5:if(!(i<=d.cursor))return;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(r,4))&&(d.bra=d.cursor,b())&&(d.slice_del(),1==e)&&(d.ket=d.cursor,d.eq_s_b(2,"at"))&&(d.bra=d.cursor,b())&&d.slice_del();break;case 6:if(!b())return;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(s,3))&&(d.bra=d.cursor,1==e)&&b()&&d.slice_del();break;case 7:if(!b())return;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(n,3))&&(d.bra=d.cursor,1==e)&&b()&&d.slice_del();break;case 8:if(!b())return;d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,b())&&d.slice_del();break;case 9:if(!h()||!d.eq_s_b(1,"e"))return;d.slice_from("ir")}return 1}}function k(e,r){if(d.eq_s_b(1,e)){d.bra=d.cursor;e=d.limit-d.cursor;if(d.eq_s_b(1,r))return d.cursor=d.limit-e,void(h()&&d.slice_del())}return 1}function q(){var e;g()||(d.cursor=d.limit,function(){var e,r;if(d.cursor>=t){if(r=d.limit_backward,d.limit_backward=t,d.ket=d.cursor,e=d.find_among_b(m,120))return d.bra=d.cursor,1==e&&d.slice_del(),d.limit_backward=r,1;d.limit_backward=r}}())?(d.cursor=d.limit,d.ket=d.cursor,d.eq_s_b(1,"i")&&(d.bra=d.cursor,d.eq_s_b(1,"c"))&&(d.cursor=d.limit,h())&&d.slice_del()):(d.cursor=d.limit,d.ket=d.cursor,(e=d.find_among_b(c,7))&&(d.bra=d.cursor,1==e)&&h()&&d.slice_del())}this.setCurrent=function(e){d.setCurrent(e)},this.getCurrent=function(){return d.getCurrent()},this.stem=function(){for(var e,r,s,n=d.cursor;;){if(d.bra=d.cursor,e=d.find_among(a,3))switch(d.ket=d.cursor,e){case 1:d.slice_from("a~");continue;case 2:d.slice_from("o~");continue;case 3:if(!(d.cursor>=d.limit)){d.cursor++;continue}}break}if(d.cursor=n,r=d.cursor,t=d.limit,o=i=t,v(),d.cursor=r,_()&&(i=d.cursor,_())&&(o=d.cursor),d.limit_backward=n,d.cursor=d.limit,q(),d.cursor=d.limit,d.ket=d.cursor,r=d.find_among_b(l,4))switch(d.bra=d.cursor,r){case 1:h()&&(d.slice_del(),d.ket=d.cursor,d.limit,d.cursor,k("u","g"))&&k("i","c");break;case 2:d.slice_from("c")}for(d.cursor=d.limit_backward;;){if(d.bra=d.cursor,s=d.find_among(u,3))switch(d.ket=d.cursor,s){case 1:d.slice_from("ã");continue;case 2:d.slice_from("õ");continue;case 3:if(!(d.cursor>=d.limit)){d.cursor++;continue}}break}return!0}},function(e){return s.setCurrent(e),s.stem(),s.getCurrent()}),r.Pipeline.registerFunction(r.pt.stemmer,"stemmer-pt"),r.pt.stopWordFilter=function(e){if(-1===r.pt.stopWordFilter.stopWords.indexOf(e))return e},r.pt.stopWordFilter.stopWords=new r.SortedSet,r.pt.stopWordFilter.stopWords.length=204,r.pt.stopWordFilter.stopWords.elements=" a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos".split(" "),r.Pipeline.registerFunction(r.pt.stopWordFilter,"stopWordFilter-pt")}}); \ No newline at end of file
diff --git a/static/lunr.ro.js b/static/js/lunr.ro.js
index 845497f..845497f 100644
--- a/static/lunr.ro.js
+++ b/static/js/lunr.ro.js
diff --git a/static/js/lunr.ro.min.js b/static/js/lunr.ro.min.js
new file mode 100644
index 0000000..0f38816
--- /dev/null
+++ b/static/js/lunr.ro.min.js
@@ -0,0 +1 @@
+!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(i){if(void 0===i)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===i.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var e,a,r;i.ro=function(){this.pipeline.reset(),this.pipeline.add(i.ro.trimmer,i.ro.stopWordFilter,i.ro.stemmer)},i.ro.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",i.ro.trimmer=i.trimmerSupport.generateTrimmer(i.ro.wordCharacters),i.Pipeline.registerFunction(i.ro.trimmer,"trimmer-ro"),i.ro.stemmer=(e=i.stemmerSupport.Among,a=i.stemmerSupport.SnowballProgram,r=new function(){var s,c,u,w,m=[new e("",-1,3),new e("I",0,1),new e("U",0,2)],l=[new e("ea",-1,3),new e("aţia",-1,7),new e("aua",-1,2),new e("iua",-1,4),new e("aţie",-1,7),new e("ele",-1,3),new e("ile",-1,5),new e("iile",6,4),new e("iei",-1,4),new e("atei",-1,6),new e("ii",-1,4),new e("ului",-1,1),new e("ul",-1,1),new e("elor",-1,3),new e("ilor",-1,4),new e("iilor",14,4)],r=[new e("icala",-1,4),new e("iciva",-1,4),new e("ativa",-1,5),new e("itiva",-1,6),new e("icale",-1,4),new e("aţiune",-1,5),new e("iţiune",-1,6),new e("atoare",-1,5),new e("itoare",-1,6),new e("ătoare",-1,5),new e("icitate",-1,4),new e("abilitate",-1,1),new e("ibilitate",-1,2),new e("ivitate",-1,3),new e("icive",-1,4),new e("ative",-1,5),new e("itive",-1,6),new e("icali",-1,4),new e("atori",-1,5),new e("icatori",18,4),new e("itori",-1,6),new e("ători",-1,5),new e("icitati",-1,4),new e("abilitati",-1,1),new e("ivitati",-1,3),new e("icivi",-1,4),new e("ativi",-1,5),new e("itivi",-1,6),new e("icităi",-1,4),new e("abilităi",-1,1),new e("ivităi",-1,3),new e("icităţi",-1,4),new e("abilităţi",-1,1),new e("ivităţi",-1,3),new e("ical",-1,4),new e("ator",-1,5),new e("icator",35,4),new e("itor",-1,6),new e("ător",-1,5),new e("iciv",-1,4),new e("ativ",-1,5),new e("itiv",-1,6),new e("icală",-1,4),new e("icivă",-1,4),new e("ativă",-1,5),new e("itivă",-1,6)],n=[new e("ica",-1,1),new e("abila",-1,1),new e("ibila",-1,1),new e("oasa",-1,1),new e("ata",-1,1),new e("ita",-1,1),new e("anta",-1,1),new e("ista",-1,3),new e("uta",-1,1),new e("iva",-1,1),new e("ic",-1,1),new e("ice",-1,1),new e("abile",-1,1),new e("ibile",-1,1),new e("isme",-1,3),new e("iune",-1,2),new e("oase",-1,1),new e("ate",-1,1),new e("itate",17,1),new e("ite",-1,1),new e("ante",-1,1),new e("iste",-1,3),new e("ute",-1,1),new e("ive",-1,1),new e("ici",-1,1),new e("abili",-1,1),new e("ibili",-1,1),new e("iuni",-1,2),new e("atori",-1,1),new e("osi",-1,1),new e("ati",-1,1),new e("itati",30,1),new e("iti",-1,1),new e("anti",-1,1),new e("isti",-1,3),new e("uti",-1,1),new e("işti",-1,3),new e("ivi",-1,1),new e("ităi",-1,1),new e("oşi",-1,1),new e("ităţi",-1,1),new e("abil",-1,1),new e("ibil",-1,1),new e("ism",-1,3),new e("ator",-1,1),new e("os",-1,1),new e("at",-1,1),new e("it",-1,1),new e("ant",-1,1),new e("ist",-1,3),new e("ut",-1,1),new e("iv",-1,1),new e("ică",-1,1),new e("abilă",-1,1),new e("ibilă",-1,1),new e("oasă",-1,1),new e("ată",-1,1),new e("ită",-1,1),new e("antă",-1,1),new e("istă",-1,3),new e("ută",-1,1),new e("ivă",-1,1)],f=[new e("ea",-1,1),new e("ia",-1,1),new e("esc",-1,1),new e("ăsc",-1,1),new e("ind",-1,1),new e("ând",-1,1),new e("are",-1,1),new e("ere",-1,1),new e("ire",-1,1),new e("âre",-1,1),new e("se",-1,2),new e("ase",10,1),new e("sese",10,2),new e("ise",10,1),new e("use",10,1),new e("âse",10,1),new e("eşte",-1,1),new e("ăşte",-1,1),new e("eze",-1,1),new e("ai",-1,1),new e("eai",19,1),new e("iai",19,1),new e("sei",-1,2),new e("eşti",-1,1),new e("ăşti",-1,1),new e("ui",-1,1),new e("ezi",-1,1),new e("âi",-1,1),new e("aşi",-1,1),new e("seşi",-1,2),new e("aseşi",29,1),new e("seseşi",29,2),new e("iseşi",29,1),new e("useşi",29,1),new e("âseşi",29,1),new e("işi",-1,1),new e("uşi",-1,1),new e("âşi",-1,1),new e("aţi",-1,2),new e("eaţi",38,1),new e("iaţi",38,1),new e("eţi",-1,2),new e("iţi",-1,2),new e("âţi",-1,2),new e("arăţi",-1,1),new e("serăţi",-1,2),new e("aserăţi",45,1),new e("seserăţi",45,2),new e("iserăţi",45,1),new e("userăţi",45,1),new e("âserăţi",45,1),new e("irăţi",-1,1),new e("urăţi",-1,1),new e("ârăţi",-1,1),new e("am",-1,1),new e("eam",54,1),new e("iam",54,1),new e("em",-1,2),new e("asem",57,1),new e("sesem",57,2),new e("isem",57,1),new e("usem",57,1),new e("âsem",57,1),new e("im",-1,2),new e("âm",-1,2),new e("ăm",-1,2),new e("arăm",65,1),new e("serăm",65,2),new e("aserăm",67,1),new e("seserăm",67,2),new e("iserăm",67,1),new e("userăm",67,1),new e("âserăm",67,1),new e("irăm",65,1),new e("urăm",65,1),new e("ârăm",65,1),new e("au",-1,1),new e("eau",76,1),new e("iau",76,1),new e("indu",-1,1),new e("ându",-1,1),new e("ez",-1,1),new e("ească",-1,1),new e("ară",-1,1),new e("seră",-1,2),new e("aseră",84,1),new e("seseră",84,2),new e("iseră",84,1),new e("useră",84,1),new e("âseră",84,1),new e("iră",-1,1),new e("ură",-1,1),new e("âră",-1,1),new e("ează",-1,1)],i=[new e("a",-1,1),new e("e",-1,1),new e("ie",1,1),new e("i",-1,1),new e("ă",-1,1)],d=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,2,32,0,0,4],p=new a;function b(e,i){p.eq_s(1,e)&&(p.ket=p.cursor,p.in_grouping(d,97,259))&&p.slice_from(i)}function t(){if(!p.out_grouping(d,97,259))return 1;for(;!p.in_grouping(d,97,259);){if(p.cursor>=p.limit)return 1;p.cursor++}}function v(){var e,i=p.cursor;if(p.in_grouping(d,97,259)){if(e=p.cursor,!t())return void(w=p.cursor);if(p.cursor=e,!function(){if(p.in_grouping(d,97,259))for(;!p.out_grouping(d,97,259);){if(p.cursor>=p.limit)return 1;p.cursor++}}())return void(w=p.cursor)}p.cursor=i,p.out_grouping(d,97,259)&&(e=p.cursor,t()&&(p.cursor=e,p.in_grouping(d,97,259))&&p.cursor<p.limit&&p.cursor++,w=p.cursor)}function _(){for(;!p.in_grouping(d,97,259);){if(p.cursor>=p.limit)return;p.cursor++}for(;!p.out_grouping(d,97,259);){if(p.cursor>=p.limit)return;p.cursor++}return 1}function g(){return u<=p.cursor}function k(){var e,i;for(s=!1;;)if(i=p.limit-p.cursor,!function(){var e,i=p.limit-p.cursor;if(p.ket=p.cursor,(e=p.find_among_b(r,46))&&(p.bra=p.cursor,g())){switch(e){case 1:p.slice_from("abil");break;case 2:p.slice_from("ibil");break;case 3:p.slice_from("iv");break;case 4:p.slice_from("ic");break;case 5:p.slice_from("at");break;case 6:p.slice_from("it")}return s=!0,p.cursor=p.limit-i,1}}()){p.cursor=p.limit-i;break}if(p.ket=p.cursor,(e=p.find_among_b(n,62))&&(p.bra=p.cursor,c<=p.cursor)){switch(e){case 1:p.slice_del();break;case 2:p.eq_s_b(1,"ţ")&&(p.bra=p.cursor,p.slice_from("t"));break;case 3:p.slice_from("ist")}s=!0}}function h(){var e;p.ket=p.cursor,(e=p.find_among_b(i,5))&&(p.bra=p.cursor,w<=p.cursor)&&1==e&&p.slice_del()}this.setCurrent=function(e){p.setCurrent(e)},this.getCurrent=function(){return p.getCurrent()},this.stem=function(){for(var e,i,r,n,t,a,o=p.cursor;e=p.cursor,p.in_grouping(d,97,259)&&(i=p.cursor,p.bra=i,b("u","U"),p.cursor=i,b("i","I")),p.cursor=e,!(p.cursor>=p.limit);)p.cursor++;if(p.cursor=o,n=p.cursor,w=p.limit,c=u=w,v(),p.cursor=n,_()&&(u=p.cursor,_())&&(c=p.cursor),p.limit_backward=o,p.cursor=p.limit,p.ket=p.cursor,(n=p.find_among_b(l,16))&&(p.bra=p.cursor,g()))switch(n){case 1:p.slice_del();break;case 2:p.slice_from("a");break;case 3:p.slice_from("e");break;case 4:p.slice_from("i");break;case 5:r=p.limit-p.cursor,p.eq_s_b(2,"ab")||(p.cursor=p.limit-r,p.slice_from("i"));break;case 6:p.slice_from("at");break;case 7:p.slice_from("aţi")}if(p.cursor=p.limit,k(),p.cursor=p.limit,!s){if(p.cursor=p.limit,p.cursor>=w){if(o=p.limit_backward,p.limit_backward=w,p.ket=p.cursor,n=p.find_among_b(f,94))switch(p.bra=p.cursor,n){case 1:if(t=p.limit-p.cursor,!p.out_grouping_b(d,97,259)&&(p.cursor=p.limit-t,!p.eq_s_b(1,"u")))break;case 2:p.slice_del()}p.limit_backward=o}p.cursor=p.limit}for(h(),p.cursor=p.limit_backward;;){if(p.bra=p.cursor,a=p.find_among(m,3))switch(p.ket=p.cursor,a){case 1:p.slice_from("i");continue;case 2:p.slice_from("u");continue;case 3:if(!(p.cursor>=p.limit)){p.cursor++;continue}}break}return!0}},function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}),i.Pipeline.registerFunction(i.ro.stemmer,"stemmer-ro"),i.ro.stopWordFilter=function(e){if(-1===i.ro.stopWordFilter.stopWords.indexOf(e))return e},i.ro.stopWordFilter.stopWords=new i.SortedSet,i.ro.stopWordFilter.stopWords.length=282,i.ro.stopWordFilter.stopWords.elements=" acea aceasta această aceea acei aceia acel acela acele acelea acest acesta aceste acestea aceşti aceştia acolo acord acum ai aia aibă aici al ale alea altceva altcineva am ar are asemenea asta astea astăzi asupra au avea avem aveţi azi aş aşadar aţi bine bucur bună ca care caut ce cel ceva chiar cinci cine cineva contra cu cum cumva curând curînd când cât câte câtva câţi cînd cît cîte cîtva cîţi că căci cărei căror cărui către da dacă dar datorită dată dau de deci deja deoarece departe deşi din dinaintea dintr- dintre doi doilea două drept după dă ea ei el ele eram este eu eşti face fata fi fie fiecare fii fim fiu fiţi frumos fără graţie halbă iar ieri la le li lor lui lângă lîngă mai mea mei mele mereu meu mi mie mine mult multă mulţi mulţumesc mâine mîine mă ne nevoie nici nicăieri nimeni nimeri nimic nişte noastre noastră noi noroc nostru nouă noştri nu opt ori oricare orice oricine oricum oricând oricât oricînd oricît oriunde patra patru patrulea pe pentru peste pic poate pot prea prima primul prin puţin puţina puţină până pînă rog sa sale sau se spate spre sub sunt suntem sunteţi sută sînt sîntem sînteţi să săi său ta tale te timp tine toate toată tot totuşi toţi trei treia treilea tu tăi tău un una unde undeva unei uneia unele uneori unii unor unora unu unui unuia unul vi voastre voastră voi vostru vouă voştri vreme vreo vreun vă zece zero zi zice îi îl îmi împotriva în înainte înaintea încotro încât încît între întrucât întrucît îţi ăla ălea ăsta ăstea ăştia şapte şase şi ştiu ţi ţie".split(" "),i.Pipeline.registerFunction(i.ro.stopWordFilter,"stopWordFilter-ro")}}); \ No newline at end of file
diff --git a/static/lunr.ru.js b/static/js/lunr.ru.js
index 7d57236..7d57236 100644
--- a/static/lunr.ru.js
+++ b/static/js/lunr.ru.js
diff --git a/static/js/lunr.ru.min.js b/static/js/lunr.ru.min.js
new file mode 100644
index 0000000..717c438
--- /dev/null
+++ b/static/js/lunr.ru.min.js
@@ -0,0 +1 @@
+!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(n){if(void 0===n)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===n.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var g,h,r;n.ru=function(){this.pipeline.reset(),this.pipeline.add(n.ru.trimmer,n.ru.stopWordFilter,n.ru.stemmer)},n.ru.wordCharacters="Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯",n.ru.trimmer=n.trimmerSupport.generateTrimmer(n.ru.wordCharacters),n.Pipeline.registerFunction(n.ru.trimmer,"trimmer-ru"),n.ru.stemmer=(g=n.stemmerSupport.Among,h=n.stemmerSupport.SnowballProgram,r=new function(){var n,r,w=[new g("в",-1,1),new g("ив",0,2),new g("ыв",0,2),new g("вши",-1,1),new g("ивши",3,2),new g("ывши",3,2),new g("вшись",-1,1),new g("ившись",6,2),new g("ывшись",6,2)],e=[new g("ее",-1,1),new g("ие",-1,1),new g("ое",-1,1),new g("ые",-1,1),new g("ими",-1,1),new g("ыми",-1,1),new g("ей",-1,1),new g("ий",-1,1),new g("ой",-1,1),new g("ый",-1,1),new g("ем",-1,1),new g("им",-1,1),new g("ом",-1,1),new g("ым",-1,1),new g("его",-1,1),new g("ого",-1,1),new g("ему",-1,1),new g("ому",-1,1),new g("их",-1,1),new g("ых",-1,1),new g("ею",-1,1),new g("ою",-1,1),new g("ую",-1,1),new g("юю",-1,1),new g("ая",-1,1),new g("яя",-1,1)],t=[new g("ем",-1,1),new g("нн",-1,1),new g("вш",-1,1),new g("ивш",2,2),new g("ывш",2,2),new g("щ",-1,1),new g("ющ",5,1),new g("ующ",6,2)],i=[new g("сь",-1,1),new g("ся",-1,1)],o=[new g("ла",-1,1),new g("ила",0,2),new g("ыла",0,2),new g("на",-1,1),new g("ена",3,2),new g("ете",-1,1),new g("ите",-1,2),new g("йте",-1,1),new g("ейте",7,2),new g("уйте",7,2),new g("ли",-1,1),new g("или",10,2),new g("ыли",10,2),new g("й",-1,1),new g("ей",13,2),new g("уй",13,2),new g("л",-1,1),new g("ил",16,2),new g("ыл",16,2),new g("ем",-1,1),new g("им",-1,2),new g("ым",-1,2),new g("н",-1,1),new g("ен",22,2),new g("ло",-1,1),new g("ило",24,2),new g("ыло",24,2),new g("но",-1,1),new g("ено",27,2),new g("нно",27,1),new g("ет",-1,1),new g("ует",30,2),new g("ит",-1,2),new g("ыт",-1,2),new g("ют",-1,1),new g("уют",34,2),new g("ят",-1,2),new g("ны",-1,1),new g("ены",37,2),new g("ть",-1,1),new g("ить",39,2),new g("ыть",39,2),new g("ешь",-1,1),new g("ишь",-1,2),new g("ю",-1,2),new g("ую",44,2)],u=[new g("а",-1,1),new g("ев",-1,1),new g("ов",-1,1),new g("е",-1,1),new g("ие",3,1),new g("ье",3,1),new g("и",-1,1),new g("еи",6,1),new g("ии",6,1),new g("ами",6,1),new g("ями",6,1),new g("иями",10,1),new g("й",-1,1),new g("ей",12,1),new g("ией",13,1),new g("ий",12,1),new g("ой",12,1),new g("ам",-1,1),new g("ем",-1,1),new g("ием",18,1),new g("ом",-1,1),new g("ям",-1,1),new g("иям",21,1),new g("о",-1,1),new g("у",-1,1),new g("ах",-1,1),new g("ях",-1,1),new g("иях",26,1),new g("ы",-1,1),new g("ь",-1,1),new g("ю",-1,1),new g("ию",30,1),new g("ью",30,1),new g("я",-1,1),new g("ия",33,1),new g("ья",33,1)],s=[new g("ост",-1,1),new g("ость",-1,1)],c=[new g("ейше",-1,1),new g("н",-1,2),new g("ейш",-1,1),new g("ь",-1,3)],m=[33,65,8,232],l=new h;function f(){for(;!l.in_grouping(m,1072,1103);){if(l.cursor>=l.limit)return;l.cursor++}return 1}function p(){for(;!l.out_grouping(m,1072,1103);){if(l.cursor>=l.limit)return;l.cursor++}return 1}function d(e,n){var r;if(l.ket=l.cursor,e=l.find_among_b(e,n)){switch(l.bra=l.cursor,e){case 1:if(r=l.limit-l.cursor,!l.eq_s_b(1,"а")&&(l.cursor=l.limit-r,!l.eq_s_b(1,"я")))return!1;case 2:l.slice_del()}return!0}return!1}function a(e,n){return l.ket=l.cursor,!!(e=l.find_among_b(e,n))&&(l.bra=l.cursor,1==e&&l.slice_del(),!0)}function _(){return a(e,26)&&(d(t,8),1)}function b(){var e;l.ket=l.cursor,(e=l.find_among_b(s,2))&&(l.bra=l.cursor,n<=l.cursor)&&1==e&&l.slice_del()}this.setCurrent=function(e){l.setCurrent(e)},this.getCurrent=function(){return l.getCurrent()},this.stem=function(){if(r=l.limit,n=r,f()&&(r=l.cursor,p())&&f()&&p()&&(n=l.cursor),l.cursor=l.limit,l.cursor<r)return!1;var e;if(l.limit_backward=r,d(w,9)||(l.cursor=l.limit,a(i,2)||(l.cursor=l.limit),_())||(l.cursor=l.limit,d(o,46))||(l.cursor=l.limit,a(u,36)),l.cursor=l.limit,l.ket=l.cursor,l.eq_s_b(1,"и")?(l.bra=l.cursor,l.slice_del()):l.cursor=l.limit,b(),l.cursor=l.limit,l.ket=l.cursor,e=l.find_among_b(c,4))switch(l.bra=l.cursor,e){case 1:if(l.slice_del(),l.ket=l.cursor,!l.eq_s_b(1,"н"))break;l.bra=l.cursor;case 2:if(!l.eq_s_b(1,"н"))break;case 3:l.slice_del()}return!0}},function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}),n.Pipeline.registerFunction(n.ru.stemmer,"stemmer-ru"),n.ru.stopWordFilter=function(e){if(-1===n.ru.stopWordFilter.stopWords.indexOf(e))return e},n.ru.stopWordFilter.stopWords=new n.SortedSet,n.ru.stopWordFilter.stopWords.length=422,n.ru.stopWordFilter.stopWords.elements=" алло без близко более больше будем будет будете будешь будто буду будут будь бы бывает бывь был была были было быть в важная важное важные важный вам вами вас ваш ваша ваше ваши вверх вдали вдруг ведь везде весь вниз внизу во вокруг вон восемнадцатый восемнадцать восемь восьмой вот впрочем времени время все всегда всего всем всеми всему всех всею всю всюду вся всё второй вы г где говорил говорит год года году да давно даже далеко дальше даром два двадцатый двадцать две двенадцатый двенадцать двух девятнадцатый девятнадцать девятый девять действительно дел день десятый десять для до довольно долго должно другая другие других друго другое другой е его ее ей ему если есть еще ещё ею её ж же жизнь за занят занята занято заняты затем зато зачем здесь значит и из или им именно иметь ими имя иногда их к каждая каждое каждые каждый кажется как какая какой кем когда кого ком кому конечно которая которого которой которые который которых кроме кругом кто куда лет ли лишь лучше люди м мало между меля менее меньше меня миллионов мимо мира мне много многочисленная многочисленное многочисленные многочисленный мной мною мог могут мож может можно можхо мои мой мор мочь моя моё мы на наверху над надо назад наиболее наконец нам нами нас начала наш наша наше наши не него недавно недалеко нее ней нельзя нем немного нему непрерывно нередко несколько нет нею неё ни нибудь ниже низко никогда никуда ними них ничего но ну нужно нх о об оба обычно один одиннадцатый одиннадцать однажды однако одного одной около он она они оно опять особенно от отовсюду отсюда очень первый перед по под пожалуйста позже пока пор пора после посреди потом потому почему почти прекрасно при про просто против процентов пятнадцатый пятнадцать пятый пять раз разве рано раньше рядом с сам сама сами самим самими самих само самого самой самом самому саму свое своего своей свои своих свою сеаой себе себя сегодня седьмой сейчас семнадцатый семнадцать семь сих сказал сказала сказать сколько слишком сначала снова со собой собою совсем спасибо стал суть т та так такая также такие такое такой там твой твоя твоё те тебе тебя тем теми теперь тех то тобой тобою тогда того тоже только том тому тот тою третий три тринадцатый тринадцать ту туда тут ты тысяч у уж уже уметь хорошо хотеть хоть хотя хочешь часто чаще чего человек чем чему через четвертый четыре четырнадцатый четырнадцать что чтоб чтобы чуть шестнадцатый шестнадцать шестой шесть эта эти этим этими этих это этого этой этом этому этот эту я \ufeffа".split(" "),n.Pipeline.registerFunction(n.ru.stopWordFilter,"stopWordFilter-ru")}}); \ No newline at end of file
diff --git a/static/lunr.stemmer.support.js b/static/js/lunr.stemmer.support.js
index abfd300..abfd300 100644
--- a/static/lunr.stemmer.support.js
+++ b/static/js/lunr.stemmer.support.js
diff --git a/static/js/lunr.stemmer.support.min.js b/static/js/lunr.stemmer.support.min.js
new file mode 100644
index 0000000..3ffdbd6
--- /dev/null
+++ b/static/js/lunr.stemmer.support.min.js
@@ -0,0 +1 @@
+!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var b;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(r){b=r,this.cursor=0,this.limit=r.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var r=b;return b=null,r},in_grouping:function(r,t,i){if(this.cursor<this.limit){var s=b.charCodeAt(this.cursor);if(s<=i&&t<=s&&r[(s-=t)>>3]&1<<(7&s))return this.cursor++,!0}return!1},in_grouping_b:function(r,t,i){if(this.cursor>this.limit_backward){var s=b.charCodeAt(this.cursor-1);if(s<=i&&t<=s&&r[(s-=t)>>3]&1<<(7&s))return this.cursor--,!0}return!1},out_grouping:function(r,t,i){if(this.cursor<this.limit){var s=b.charCodeAt(this.cursor);if(i<s||s<t)return this.cursor++,!0;if(!(r[(s-=t)>>3]&1<<(7&s)))return this.cursor++,!0}return!1},out_grouping_b:function(r,t,i){if(this.cursor>this.limit_backward){var s=b.charCodeAt(this.cursor-1);if(i<s||s<t)return this.cursor--,!0;if(!(r[(s-=t)>>3]&1<<(7&s)))return this.cursor--,!0}return!1},eq_s:function(r,t){if(this.limit-this.cursor<r)return!1;for(var i=0;i<r;i++)if(b.charCodeAt(this.cursor+i)!=t.charCodeAt(i))return!1;return this.cursor+=r,!0},eq_s_b:function(r,t){if(this.cursor-this.limit_backward<r)return!1;for(var i=0;i<r;i++)if(b.charCodeAt(this.cursor-r+i)!=t.charCodeAt(i))return!1;return this.cursor-=r,!0},find_among:function(r,t){for(var i=0,s=t,e=this.cursor,n=this.limit,u=0,o=0,h=!1;;){for(var c=i+(s-i>>1),f=0,a=u<o?u:o,l=r[c],_=a;_<l.s_size;_++){if(e+a==n){f=-1;break}if(f=b.charCodeAt(e+a)-l.s[_])break;a++}if(f<0?(s=c,o=a):(i=c,u=a),s-i<=1){if(0<i||s==i||h)break;h=!0}}for(;;){if(u>=(l=r[i]).s_size){if(this.cursor=e+l.s_size,!l.method)return l.result;var m=l.method();if(this.cursor=e+l.s_size,m)return l.result}if((i=l.substring_i)<0)return 0}},find_among_b:function(r,t){for(var i=0,s=t,e=this.cursor,n=this.limit_backward,u=0,o=0,h=!1;;){for(var c,f=i+(s-i>>1),a=0,l=u<o?u:o,_=(c=r[f]).s_size-1-l;0<=_;_--){if(e-l==n){a=-1;break}if(a=b.charCodeAt(e-1-l)-c.s[_])break;l++}if(a<0?(s=f,o=l):(i=f,u=l),s-i<=1){if(0<i||s==i||h)break;h=!0}}for(;;){if(u>=(c=r[i]).s_size){if(this.cursor=e-c.s_size,!c.method)return c.result;var m=c.method();if(this.cursor=e-c.s_size,m)return c.result}if((i=c.substring_i)<0)return 0}},replace_s:function(r,t,i){var s=i.length-(t-r);return b=b.substring(0,r)+i+b.substring(t),this.limit+=s,this.cursor>=t?this.cursor+=s:this.cursor>r&&(this.cursor=r),s},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>b.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){t=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=t),r<=this.ket&&(this.ket+=t)},slice_to:function(){return this.slice_check(),b.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return r.replace(t,"").replace(i,"")}}}}}); \ No newline at end of file
diff --git a/static/lunr.sv.js b/static/js/lunr.sv.js
index d48ea4a..d48ea4a 100644
--- a/static/lunr.sv.js
+++ b/static/js/lunr.sv.js
diff --git a/static/js/lunr.sv.min.js b/static/js/lunr.sv.min.js
new file mode 100644
index 0000000..835f98b
--- /dev/null
+++ b/static/js/lunr.sv.min.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var e,d,n;r.sv=function(){this.pipeline.reset(),this.pipeline.add(r.sv.trimmer,r.sv.stopWordFilter,r.sv.stemmer)},r.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.sv.trimmer=r.trimmerSupport.generateTrimmer(r.sv.wordCharacters),r.Pipeline.registerFunction(r.sv.trimmer,"trimmer-sv"),r.sv.stemmer=(e=r.stemmerSupport.Among,d=r.stemmerSupport.SnowballProgram,n=new function(){var n,t,i=[new e("a",-1,1),new e("arna",0,1),new e("erna",0,1),new e("heterna",2,1),new e("orna",0,1),new e("ad",-1,1),new e("e",-1,1),new e("ade",6,1),new e("ande",6,1),new e("arne",6,1),new e("are",6,1),new e("aste",6,1),new e("en",-1,1),new e("anden",12,1),new e("aren",12,1),new e("heten",12,1),new e("ern",-1,1),new e("ar",-1,1),new e("er",-1,1),new e("heter",18,1),new e("or",-1,1),new e("s",-1,2),new e("as",21,1),new e("arnas",22,1),new e("ernas",22,1),new e("ornas",22,1),new e("es",21,1),new e("ades",26,1),new e("andes",26,1),new e("ens",21,1),new e("arens",29,1),new e("hetens",29,1),new e("erns",21,1),new e("at",-1,1),new e("andet",-1,1),new e("het",-1,1),new e("ast",-1,1)],s=[new e("dd",-1,-1),new e("gd",-1,-1),new e("nn",-1,-1),new e("dt",-1,-1),new e("gt",-1,-1),new e("kt",-1,-1),new e("tt",-1,-1)],a=[new e("ig",-1,1),new e("lig",0,1),new e("els",-1,1),new e("fullt",-1,3),new e("löst",-1,2)],o=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],u=[119,127,149],l=new d;this.setCurrent=function(e){l.setCurrent(e)},this.getCurrent=function(){return l.getCurrent()},this.stem=function(){var e=l.cursor;!function(){var e,r=l.cursor+3;if(t=l.limit,0<=r||r<=l.limit){for(n=r;;){if(e=l.cursor,l.in_grouping(o,97,246)){l.cursor=e;break}if(l.cursor=e,l.cursor>=l.limit)return;l.cursor++}for(;!l.out_grouping(o,97,246);){if(l.cursor>=l.limit)return;l.cursor++}(t=l.cursor)<n&&(t=n)}}(),l.limit_backward=e,l.cursor=l.limit;var r,e=l.limit_backward;if(l.cursor>=t&&(l.limit_backward=t,l.cursor=l.limit,l.ket=l.cursor,r=l.find_among_b(i,37),l.limit_backward=e,r))switch(l.bra=l.cursor,r){case 1:l.slice_del();break;case 2:l.in_grouping_b(u,98,121)&&l.slice_del()}if(l.cursor=l.limit,e=l.limit_backward,l.cursor>=t&&(l.limit_backward=t,l.cursor=l.limit,l.find_among_b(s,7)&&(l.cursor=l.limit,l.ket=l.cursor,l.cursor>l.limit_backward)&&(l.bra=--l.cursor,l.slice_del()),l.limit_backward=e),l.cursor=l.limit,l.cursor>=t){if(r=l.limit_backward,l.limit_backward=t,l.cursor=l.limit,l.ket=l.cursor,e=l.find_among_b(a,5))switch(l.bra=l.cursor,e){case 1:l.slice_del();break;case 2:l.slice_from("lös");break;case 3:l.slice_from("full")}l.limit_backward=r}return!0}},function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}),r.Pipeline.registerFunction(r.sv.stemmer,"stemmer-sv"),r.sv.stopWordFilter=function(e){if(-1===r.sv.stopWordFilter.stopWords.indexOf(e))return e},r.sv.stopWordFilter.stopWords=new r.SortedSet,r.sv.stopWordFilter.stopWords.length=115,r.sv.stopWordFilter.stopWords.elements=" alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" "),r.Pipeline.registerFunction(r.sv.stopWordFilter,"stopWordFilter-sv")}}); \ No newline at end of file
diff --git a/static/lunr.tr.js b/static/js/lunr.tr.js
index 1e5d8da..1e5d8da 100644
--- a/static/lunr.tr.js
+++ b/static/js/lunr.tr.js
diff --git a/static/js/lunr.tr.min.js b/static/js/lunr.tr.min.js
new file mode 100644
index 0000000..54adb6d
--- /dev/null
+++ b/static/js/lunr.tr.min.js
@@ -0,0 +1 @@
+!function(r,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(r.lunr)}(this,function(){return function(i){if(void 0===i)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===i.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var mr,dr,e;i.tr=function(){this.pipeline.reset(),this.pipeline.add(i.tr.trimmer,i.tr.stopWordFilter,i.tr.stemmer)},i.tr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",i.tr.trimmer=i.trimmerSupport.generateTrimmer(i.tr.wordCharacters),i.Pipeline.registerFunction(i.tr.trimmer,"trimmer-tr"),i.tr.stemmer=(mr=i.stemmerSupport.Among,dr=i.stemmerSupport.SnowballProgram,e=new function(){var i,r=[new mr("m",-1,-1),new mr("n",-1,-1),new mr("miz",-1,-1),new mr("niz",-1,-1),new mr("muz",-1,-1),new mr("nuz",-1,-1),new mr("müz",-1,-1),new mr("nüz",-1,-1),new mr("mız",-1,-1),new mr("nız",-1,-1)],e=[new mr("leri",-1,-1),new mr("ları",-1,-1)],n=[new mr("ni",-1,-1),new mr("nu",-1,-1),new mr("nü",-1,-1),new mr("nı",-1,-1)],t=[new mr("in",-1,-1),new mr("un",-1,-1),new mr("ün",-1,-1),new mr("ın",-1,-1)],u=[new mr("a",-1,-1),new mr("e",-1,-1)],T=[new mr("na",-1,-1),new mr("ne",-1,-1)],Z=[new mr("da",-1,-1),new mr("ta",-1,-1),new mr("de",-1,-1),new mr("te",-1,-1)],B=[new mr("nda",-1,-1),new mr("nde",-1,-1)],D=[new mr("dan",-1,-1),new mr("tan",-1,-1),new mr("den",-1,-1),new mr("ten",-1,-1)],G=[new mr("ndan",-1,-1),new mr("nden",-1,-1)],H=[new mr("la",-1,-1),new mr("le",-1,-1)],I=[new mr("ca",-1,-1),new mr("ce",-1,-1)],J=[new mr("im",-1,-1),new mr("um",-1,-1),new mr("üm",-1,-1),new mr("ım",-1,-1)],K=[new mr("sin",-1,-1),new mr("sun",-1,-1),new mr("sün",-1,-1),new mr("sın",-1,-1)],M=[new mr("iz",-1,-1),new mr("uz",-1,-1),new mr("üz",-1,-1),new mr("ız",-1,-1)],N=[new mr("siniz",-1,-1),new mr("sunuz",-1,-1),new mr("sünüz",-1,-1),new mr("sınız",-1,-1)],Q=[new mr("lar",-1,-1),new mr("ler",-1,-1)],R=[new mr("niz",-1,-1),new mr("nuz",-1,-1),new mr("nüz",-1,-1),new mr("nız",-1,-1)],U=[new mr("dir",-1,-1),new mr("tir",-1,-1),new mr("dur",-1,-1),new mr("tur",-1,-1),new mr("dür",-1,-1),new mr("tür",-1,-1),new mr("dır",-1,-1),new mr("tır",-1,-1)],V=[new mr("casına",-1,-1),new mr("cesine",-1,-1)],X=[new mr("di",-1,-1),new mr("ti",-1,-1),new mr("dik",-1,-1),new mr("tik",-1,-1),new mr("duk",-1,-1),new mr("tuk",-1,-1),new mr("dük",-1,-1),new mr("tük",-1,-1),new mr("dık",-1,-1),new mr("tık",-1,-1),new mr("dim",-1,-1),new mr("tim",-1,-1),new mr("dum",-1,-1),new mr("tum",-1,-1),new mr("düm",-1,-1),new mr("tüm",-1,-1),new mr("dım",-1,-1),new mr("tım",-1,-1),new mr("din",-1,-1),new mr("tin",-1,-1),new mr("dun",-1,-1),new mr("tun",-1,-1),new mr("dün",-1,-1),new mr("tün",-1,-1),new mr("dın",-1,-1),new mr("tın",-1,-1),new mr("du",-1,-1),new mr("tu",-1,-1),new mr("dü",-1,-1),new mr("tü",-1,-1),new mr("dı",-1,-1),new mr("tı",-1,-1)],Y=[new mr("sa",-1,-1),new mr("se",-1,-1),new mr("sak",-1,-1),new mr("sek",-1,-1),new mr("sam",-1,-1),new mr("sem",-1,-1),new mr("san",-1,-1),new mr("sen",-1,-1)],$=[new mr("miş",-1,-1),new mr("muş",-1,-1),new mr("müş",-1,-1),new mr("mış",-1,-1)],rr=[new mr("b",-1,1),new mr("c",-1,2),new mr("d",-1,3),new mr("ğ",-1,4)],o=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,8,0,0,0,0,0,0,1],s=[1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,1],c=[65],l=[65],a=[["a",[1,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],97,305],["e",[17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130],101,252],["ı",[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],97,305],["i",[17],101,105],["o",c,111,117],["ö",l,246,252],["u",c,111,117]],m=new dr;function d(r,i,e){for(;;){var n=m.limit-m.cursor;if(m.in_grouping_b(r,i,e)){m.cursor=m.limit-n;break}if(m.cursor=m.limit-n,m.cursor<=m.limit_backward)return;m.cursor--}return 1}function f(){var r=m.limit-m.cursor;d(o,97,305);for(var i=0;i<a.length;i++){var e=m.limit-m.cursor,n=a[i];if(m.eq_s_b(1,n[0])&&d(n[1],n[2],n[3]))return m.cursor=m.limit-r,!0;m.cursor=m.limit-e}return m.cursor=m.limit-e,!(!m.eq_s_b(1,"ü")||!d(l,246,252)||(m.cursor=m.limit-r,0))}function b(r,i){var e,n=m.limit-m.cursor;if(r()&&(m.cursor=m.limit-n,m.cursor>m.limit_backward)&&(m.cursor--,e=m.limit-m.cursor,i()))m.cursor=m.limit-e;else{if(m.cursor=m.limit-n,r())return m.cursor=m.limit-n,!1;if(m.cursor=m.limit-n,m.cursor<=m.limit_backward)return!1;if(m.cursor--,!i())return!1;m.cursor=m.limit-n}return!0}function w(r){return b(r,function(){return m.in_grouping_b(o,97,305)})}function _(){return w(function(){return m.eq_s_b(1,"n")})}function k(){return w(function(){return m.eq_s_b(1,"y")})}function p(){return m.find_among_b(r,10)&&b(function(){return m.in_grouping_b(s,105,305)},function(){return m.out_grouping_b(o,97,305)})}function g(){return f()&&m.in_grouping_b(s,105,305)&&w(function(){return m.eq_s_b(1,"s")})}function y(){return m.find_among_b(e,2)}function z(){return f()&&m.find_among_b(t,4)&&_()}function h(){return f()&&m.find_among_b(Z,4)}function v(){return f()&&m.find_among_b(B,2)}function q(){return f()&&m.find_among_b(J,4)&&k()}function W(){return f()&&m.find_among_b(K,4)}function F(){return f()&&m.find_among_b(M,4)&&k()}function C(){return m.find_among_b(N,4)}function S(){return f()&&m.find_among_b(Q,2)}function P(){return f()&&m.find_among_b(U,8)}function L(){return f()&&m.find_among_b(X,32)&&k()}function x(){return m.find_among_b(Y,8)&&k()}function A(){return f()&&m.find_among_b($,4)&&k()}function ir(){var r=m.limit-m.cursor;return!(A()||(m.cursor=m.limit-r,L())||(m.cursor=m.limit-r,x())||(m.cursor=m.limit-r,m.eq_s_b(3,"ken")&&k()))}function er(){if(m.find_among_b(V,2)){var r=m.limit-m.cursor;if(C()||(m.cursor=m.limit-r,S())||(m.cursor=m.limit-r,q())||(m.cursor=m.limit-r,W())||(m.cursor=m.limit-r,F())||(m.cursor=m.limit-r),A())return}return 1}function nr(){var r;return!(f()&&m.find_among_b(R,4)&&(r=m.limit-m.cursor,L()||(m.cursor=m.limit-r,x())))}function tr(){var r=m.limit-m.cursor;if(m.ket=m.cursor,i=!0,ir()&&(m.cursor=m.limit-r,er())&&(m.cursor=m.limit-r,function(){var r;if(!S())return 1;m.bra=m.cursor,m.slice_del(),r=m.limit-m.cursor,m.ket=m.cursor,P()||(m.cursor=m.limit-r,L())||(m.cursor=m.limit-r,x())||(m.cursor=m.limit-r,A())||(m.cursor=m.limit-r),i=!1}())&&(m.cursor=m.limit-r,nr())&&(m.cursor=m.limit-r,function(){var r=m.limit-m.cursor;if(!(C()||(m.cursor=m.limit-r,F())||(m.cursor=m.limit-r,W())||(m.cursor=m.limit-r,q())))return 1;m.bra=m.cursor,m.slice_del(),r=m.limit-m.cursor,m.ket=m.cursor,A()||(m.cursor=m.limit-r)}())){if(m.cursor=m.limit-r,!P())return;m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,r=m.limit-m.cursor,C()||(m.cursor=m.limit-r,S())||(m.cursor=m.limit-r,q())||(m.cursor=m.limit-r,W())||(m.cursor=m.limit-r,F())||(m.cursor=m.limit-r),A()||(m.cursor=m.limit-r)}m.bra=m.cursor,m.slice_del()}function E(){var r,i;if(m.ket=m.cursor,m.eq_s_b(2,"ki")){if(r=m.limit-m.cursor,h())return m.bra=m.cursor,m.slice_del(),i=m.limit-m.cursor,m.ket=m.cursor,(S()||(m.cursor=m.limit-i,p()&&(m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,S())))&&(m.bra=m.cursor,m.slice_del(),E()),1;if(m.cursor=m.limit-r,z()){if(m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,i=m.limit-m.cursor,y())m.bra=m.cursor,m.slice_del();else{if(m.cursor=m.limit-i,m.ket=m.cursor,!p()&&(m.cursor=m.limit-i,!g())&&(m.cursor=m.limit-i,!E()))return 1;m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,S()&&(m.bra=m.cursor,m.slice_del(),E())}return 1}if(m.cursor=m.limit-r,v()){if(i=m.limit-m.cursor,y())m.bra=m.cursor,m.slice_del();else if(m.cursor=m.limit-i,g())m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,S()&&(m.bra=m.cursor,m.slice_del(),E());else if(m.cursor=m.limit-i,!E())return;return 1}}}function ur(r){if(m.ket=m.cursor,v()||(m.cursor=m.limit-r,f()&&m.find_among_b(T,2))){r=m.limit-m.cursor;if(y())m.bra=m.cursor,m.slice_del();else if(m.cursor=m.limit-r,g())m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,S()&&(m.bra=m.cursor,m.slice_del(),E());else if(m.cursor=m.limit-r,!E())return;return 1}}function or(r){if(m.ket=m.cursor,f()&&m.find_among_b(G,2)||(m.cursor=m.limit-r,f()&&m.find_among_b(n,4)))return r=m.limit-m.cursor,g()||(m.cursor=m.limit-r,y())?(m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,S()&&(m.bra=m.cursor,m.slice_del(),E()),1):void 0}function sr(){var r=m.limit-m.cursor;return m.ket=m.cursor,(z()||(m.cursor=m.limit-r,f()&&m.find_among_b(H,2)&&k()))&&(m.bra=m.cursor,m.slice_del(),r=m.limit-m.cursor,m.ket=m.cursor,S()&&(m.bra=m.cursor,m.slice_del(),E())||(m.cursor=m.limit-r,m.ket=m.cursor,(p()||(m.cursor=m.limit-r,g())||(m.cursor=m.limit-r,E()))&&(m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,S())&&(m.bra=m.cursor,m.slice_del(),E())),1)}function cr(){var r,i=m.limit-m.cursor;if(m.ket=m.cursor,h()||(m.cursor=m.limit-i,f()&&m.in_grouping_b(s,105,305)&&k())||(m.cursor=m.limit-i,f()&&m.find_among_b(u,2)&&k())){if(m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,i=m.limit-m.cursor,p())m.bra=m.cursor,m.slice_del(),r=m.limit-m.cursor,m.ket=m.cursor,S()||(m.cursor=m.limit-r);else if(m.cursor=m.limit-i,!S())return 1;return m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,E(),1}}function lr(){var r,i=m.limit-m.cursor;if(m.ket=m.cursor,S())m.bra=m.cursor,m.slice_del(),E();else if(m.cursor=m.limit-i,m.ket=m.cursor,f()&&m.find_among_b(I,2)&&_())if(m.bra=m.cursor,m.slice_del(),r=m.limit-m.cursor,m.ket=m.cursor,y())m.bra=m.cursor,m.slice_del();else{if(m.cursor=m.limit-r,m.ket=m.cursor,!p()&&(m.cursor=m.limit-r,!g())){if(m.cursor=m.limit-r,m.ket=m.cursor,!S())return;if(m.bra=m.cursor,m.slice_del(),!E())return}m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,S()&&(m.bra=m.cursor,m.slice_del(),E())}else m.cursor=m.limit-i,ur(i)||(m.cursor=m.limit-i,or(i))||(m.cursor=m.limit-i,m.ket=m.cursor,f()&&m.find_among_b(D,4)?(m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,r=m.limit-m.cursor,p()?(m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,S()&&(m.bra=m.cursor,m.slice_del(),E())):(m.cursor=m.limit-r,S()?(m.bra=m.cursor,m.slice_del()):m.cursor=m.limit-r,E())):(m.cursor=m.limit-i,sr()||(m.cursor=m.limit-i,y()?(m.bra=m.cursor,m.slice_del()):(m.cursor=m.limit-i,E()||(m.cursor=m.limit-i,cr())||(m.cursor=m.limit-i,m.ket=m.cursor,(p()||(m.cursor=m.limit-i,g()))&&(m.bra=m.cursor,m.slice_del(),m.ket=m.cursor,S())&&(m.bra=m.cursor,m.slice_del(),E()))))))}function j(r,i,e){if(m.cursor=m.limit-r,!function(){for(;;){var r=m.limit-m.cursor;if(m.in_grouping_b(o,97,305)){m.cursor=m.limit-r;break}if(m.cursor=m.limit-r,m.cursor<=m.limit_backward)return;m.cursor--}return 1}())return 1;var n=m.limit-m.cursor;if(!m.eq_s_b(1,i)&&(m.cursor=m.limit-n,!m.eq_s_b(1,e)))return 1;m.cursor=m.limit-r;i=m.cursor;m.insert(m.cursor,m.cursor,e),m.cursor=i}function O(r,i,e){for(;!m.eq_s(i,e);){if(m.cursor>=m.limit)return 1;m.cursor++}if(i!=m.limit)return 1;m.cursor=r}function ar(){var r,i=m.cursor;if(O(r=m.cursor,2,"ad")&&O(m.cursor=r,5,"soyad")){if(m.limit_backward=i,m.cursor=m.limit,r=m.limit-m.cursor,(m.eq_s_b(1,"d")||(m.cursor=m.limit-r,m.eq_s_b(1,"g")))&&j(r,"a","ı")&&j(r,"e","i")&&j(r,"o","u")&&j(r,"ö","ü"),m.cursor=m.limit,m.ket=m.cursor,i=m.find_among_b(rr,4))switch(m.bra=m.cursor,i){case 1:m.slice_from("p");break;case 2:m.slice_from("ç");break;case 3:m.slice_from("t");break;case 4:m.slice_from("k")}return 1}}this.setCurrent=function(r){m.setCurrent(r)},this.getCurrent=function(){return m.getCurrent()},this.stem=function(){return!!(function(){for(var r,i=m.cursor,e=2;;){for(r=m.cursor;!m.in_grouping(o,97,305);){if(m.cursor>=m.limit)return m.cursor=r,!(0<e)&&(m.cursor=i,1);m.cursor++}e--}}()&&(m.limit_backward=m.cursor,m.cursor=m.limit,tr(),m.cursor=m.limit,i)&&(lr(),m.cursor=m.limit_backward,ar()))}},function(r){return e.setCurrent(r),e.stem(),e.getCurrent()}),i.Pipeline.registerFunction(i.tr.stemmer,"stemmer-tr"),i.tr.stopWordFilter=function(r){if(-1===i.tr.stopWordFilter.stopWords.indexOf(r))return r},i.tr.stopWordFilter.stopWords=new i.SortedSet,i.tr.stopWordFilter.stopWords.length=210,i.tr.stopWordFilter.stopWords.elements=" acaba altmış altı ama ancak arada aslında ayrıca bana bazı belki ben benden beni benim beri beş bile bin bir biri birkaç birkez birçok birşey birşeyi biz bizden bize bizi bizim bu buna bunda bundan bunlar bunları bunların bunu bunun burada böyle böylece da daha dahi de defa değil diye diğer doksan dokuz dolayı dolayısıyla dört edecek eden ederek edilecek ediliyor edilmesi ediyor elli en etmesi etti ettiği ettiğini eğer gibi göre halen hangi hatta hem henüz hep hepsi her herhangi herkesin hiç hiçbir iki ile ilgili ise itibaren itibariyle için işte kadar karşın katrilyon kendi kendilerine kendini kendisi kendisine kendisini kez ki kim kimden kime kimi kimse kırk milyar milyon mu mü mı nasıl ne neden nedenle nerde nerede nereye niye niçin o olan olarak oldu olduklarını olduğu olduğunu olmadı olmadığı olmak olması olmayan olmaz olsa olsun olup olur olursa oluyor on ona ondan onlar onlardan onları onların onu onun otuz oysa pek rağmen sadece sanki sekiz seksen sen senden seni senin siz sizden sizi sizin tarafından trilyon tüm var vardı ve veya ya yani yapacak yapmak yaptı yaptıkları yaptığı yaptığını yapılan yapılması yapıyor yedi yerine yetmiş yine yirmi yoksa yüz zaten çok çünkü öyle üzere üç şey şeyden şeyi şeyler şu şuna şunda şundan şunları şunu şöyle".split(" "),i.Pipeline.registerFunction(i.tr.stopWordFilter,"stopWordFilter-tr")}}); \ No newline at end of file
diff --git a/static/lunr.zh.js b/static/js/lunr.zh.js
index 8a1b53a..8a1b53a 100644
--- a/static/lunr.zh.js
+++ b/static/js/lunr.zh.js
diff --git a/static/js/lunr.zh.min.js b/static/js/lunr.zh.min.js
new file mode 100644
index 0000000..6c2e84d
--- /dev/null
+++ b/static/js/lunr.zh.min.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("nodejieba")):r()(e.lunr)}(this,function(n){return function(u,t){if(void 0===u)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===u.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var s="2"==u.version[0];u.zh=function(){this.pipeline.reset(),this.pipeline.add(u.zh.trimmer,u.zh.stopWordFilter,u.zh.stemmer),s?this.tokenizer=u.zh.tokenizer:(u.tokenizer&&(u.tokenizer=u.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=u.zh.tokenizer))},u.zh.tokenizer=function(e){if(!arguments.length||null==e)return[];if(Array.isArray(e))return e.map(function(e){return s?new u.Token(e.toLowerCase()):e.toLowerCase()});t&&n.load(t);var i=e.toString().trim().toLowerCase(),r=[],o=(n.cut(i,!0).forEach(function(e){r=r.concat(e.split(" "))}),r=r.filter(function(e){return!!e}),0);return r.map(function(e,r){var t,n;return s?(t=i.indexOf(e,o),(n={}).position=[t,e.length],n.index=r,o=t,new u.Token(e,n)):e})},u.zh.wordCharacters="\\w一-龥",u.zh.trimmer=u.trimmerSupport.generateTrimmer(u.zh.wordCharacters),u.Pipeline.registerFunction(u.zh.trimmer,"trimmer-zh"),u.zh.stemmer=function(e){return e},u.Pipeline.registerFunction(u.zh.stemmer,"stemmer-zh"),u.generateStopWordFilter=function(e){var r=e.reduce(function(e,r){return e[r]=r,e},{});return function(e){if(e&&r[e.toString()]!==e.toString())return e}},u.zh.stopWordFilter=u.generateStopWordFilter("的 一 不 在 人 有 是 为 以 于 上 他 而 后 之 来 及 了 因 下 可 到 由 这 与 也 此 但 并 个 其 已 无 小 我 们 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 从 到 得 打 凡 儿 尔 该 各 给 跟 和 何 还 即 几 既 看 据 距 靠 啦 了 另 么 每 们 嘛 拿 哪 那 您 凭 且 却 让 仍 啥 如 若 使 谁 虽 随 同 所 她 哇 嗡 往 哪 些 向 沿 哟 用 于 咱 则 怎 曾 至 致 着 诸 自".split(" ")),u.Pipeline.registerFunction(u.zh.stopWordFilter,"stopWordFilter-zh")}}); \ No newline at end of file
diff --git a/static/mathtex-script-type.min.js b/static/js/mathtex-script-type.min.js
index af02830..af02830 100644
--- a/static/mathtex-script-type.min.js
+++ b/static/js/mathtex-script-type.min.js
diff --git a/static/prestyle.js b/static/js/prestyle.js
index 2516247..2516247 100644
--- a/static/prestyle.js
+++ b/static/js/prestyle.js
diff --git a/static/search.js b/static/js/search.js
index da46986..cb19e6a 100644
--- a/static/search.js
+++ b/static/js/search.js
@@ -1,159 +1,6 @@
-// in page results when press enter or click search icon from search box
-function closeSearchNow() {
- const main = document.querySelector("main");
- main.innerHTML = window.main
-}
-
-function goSearchNow() {
- const main = document.querySelector("main");
- if (!window.main) {
- window.main = main.innerHTML
- };
- var results = document.getElementById("suggestions");// suggestions div generated by search box
-
- var ResultsClone = results.cloneNode(true);// make a clone of the results, so that we can alter it
- ResultsClone.id = "results";// alter the id of our clone, so that we can apply different css style
-
- var headerDiv = document.createElement("div");// create a div element
-
- var headerContent = '<form name="closeSearch"><h2><button type="submit" title="Close Search"><i class="svgs x"></i></button> Results For: '.concat(document.getElementById("searchinput").value, "</h2></form>");// header to use at top of results page
-
- headerDiv.innerHTML = headerContent;// document element div (headerDiv), set the inner contents to our header html (headerContent)
-
- ResultsClone.insertBefore(headerDiv, ResultsClone.firstChild);//insert our header div at the top of the page
-
- main.innerHTML = ResultsClone.outerHTML;//display ResultsClone.outerHTML as the page
- results.innerHTML = "";// clear the suggestions div popup
- document.getElementById("searchinput").value = "";// clear the search input box
- document.body.contains(document.closeSearch) && (document.closeSearch.onsubmit = function() { closeSearchNow() })
- return false
-}
-
-/* Close search suggestion popup list */
-function closeAllLists(elmnt) {
- var suggestions = document.getElementById("suggestions");
- while (suggestions.firstChild) {
- suggestions.removeChild(suggestions.firstChild);
- }
-}
-
-function inputFocus(e) {
-
- if (e.keyCode === 191//forward slash
- && document.activeElement.tagName !== "INPUT"
- && document.activeElement.tagName !== "TEXTAREA") {
- e.preventDefault();
- searchinput.focus();
- suggestions.classList.remove('d-none');
- }
-
- if (e.keyCode === 27 ) {//escape
- searchinput.blur();
- suggestions.classList.add('d-none');
- closeAllLists();
- }
-
- const focusableSuggestions= suggestions.querySelectorAll('a');
- if (suggestions.classList.contains('d-none')
- || focusableSuggestions.length === 0) {
- return;
- }
- const focusable= [...focusableSuggestions];
- const index = focusable.indexOf(document.activeElement);
-
- let nextIndex = 0;
-
- if (e.keyCode === 38) {//up arrow
- e.preventDefault();
- nextIndex= index > 0 ? index-1 : 0;
- focusableSuggestions[nextIndex].focus();
- }
- else if (e.keyCode === 40) {//down arrow
- e.preventDefault();
- nextIndex= index+1 < focusable.length ? index+1 : index;
- focusableSuggestions[nextIndex].focus();
- }
-
-}
-
-// Get substring by bytes
-// If using JavaScript inline substring method, it will return error codes
-// Source: https://www.52pojie.cn/thread-1059814-1-1.html
-function substringByByte(str, maxLength) {
- var result = "";
- var flag = false;
- var len = 0;
- var length = 0;
- var length2 = 0;
- for (var i = 0; i < str.length; i++) {
- var code = str.codePointAt(i).toString(16);
- if (code.length > 4) {
- i++;
- if ((i + 1) < str.length) {
- flag = str.codePointAt(i + 1).toString(16) == "200d";
- }
- }
- if (flag) {
- len += getByteByHex(code);
- if (i == str.length - 1) {
- length += len;
- if (length <= maxLength) {
- result += str.substr(length2, i - length2 + 1);
- } else {
- break
- }
- }
- } else {
- if (len != 0) {
- length += len;
- length += getByteByHex(code);
- if (length <= maxLength) {
- result += str.substr(length2, i - length2 + 1);
- length2 = i + 1;
- } else {
- break
- }
- len = 0;
- continue;
- }
- length += getByteByHex(code);
- if (length <= maxLength) {
- if (code.length <= 4) {
- result += str[i]
- } else {
- result += str[i - 1] + str[i]
- }
- length2 = i + 1;
- } else {
- break
- }
- }
- }
- return result;
-}
-
-// Get the string bytes from binary
-function getByteByBinary(binaryCode) {
- // Binary system, starts with `0b` in ES6
- // Octal number system, starts with `0` in ES5 and starts with `0o` in ES6
- // Hexadecimal, starts with `0x` in both ES5 and ES6
- var byteLengthDatas = [0, 1, 2, 3, 4];
- var len = byteLengthDatas[Math.ceil(binaryCode.length / 8)];
- return len;
-}
-
-// Get the string bytes from hexadecimal
-function getByteByHex(hexCode) {
- return getByteByBinary(parseInt(hexCode, 16).toString(2));
-}
-
window.onload = function() {
if (document.body.contains(document.goSearch)) {
document.goSearch.onsubmit = function() { return goSearchNow() };
- var suggestions = document.getElementById("suggestions");
- var searchinput = document.getElementById("searchinput");
- document.addEventListener("keydown", inputFocus);
- document.addEventListener("click", function(event) {suggestions.contains(event.target) || suggestions.classList.add("d-none")});
/*
Source:
@@ -164,6 +11,50 @@ window.onload = function() {
- https://github.com/aaranxu/adidoks/blob/main/static/js/search.js
*/
(function(){
+ function inputFocus(e) {
+
+ if (e.keyCode === 191//forward slash
+ && document.activeElement.tagName !== "INPUT"
+ && document.activeElement.tagName !== "TEXTAREA") {
+ e.preventDefault();
+ searchinput.focus();
+ suggestions.classList.remove('d-none');
+ }
+
+ if (e.keyCode === 27 ) {//escape
+ searchinput.blur();
+ suggestions.classList.add('d-none');
+ closeAllLists();
+ }
+
+ const focusableSuggestions= suggestions.querySelectorAll('a');
+ if (suggestions.classList.contains('d-none')
+ || focusableSuggestions.length === 0) {
+ return;
+ }
+ const focusable= [...focusableSuggestions];
+ const index = focusable.indexOf(document.activeElement);
+
+ let nextIndex = 0;
+
+ if (e.keyCode === 38) {//up arrow
+ e.preventDefault();
+ nextIndex= index > 0 ? index-1 : 0;
+ focusableSuggestions[nextIndex].focus();
+ }
+ else if (e.keyCode === 40) {//down arrow
+ e.preventDefault();
+ nextIndex= index+1 < focusable.length ? index+1 : index;
+ focusableSuggestions[nextIndex].focus();
+ }
+
+ }
+
+ var suggestions = document.getElementById("suggestions");
+ var searchinput = document.getElementById("searchinput");
+ document.addEventListener("keydown", inputFocus);
+ document.addEventListener("click", function(event) {suggestions.contains(event.target) || suggestions.classList.add("d-none")});
+
var lang = document.documentElement.getAttribute("lang");
var langOnly = lang.substring(0, 2);
var baseUrl = document.querySelector("meta[name='base']").getAttribute("content");
@@ -175,7 +66,49 @@ window.onload = function() {
searchinput.addEventListener('input', show_results, true);
suggestions.addEventListener('click', accept_suggestion, true);
- async function show_results(){
+
+ // in page results when press enter or click search icon from search box
+ function closeSearchNow() {
+ const main = document.querySelector("main");
+ main.innerHTML = window.main
+ }
+
+ function goSearchNow() {
+ const main = document.querySelector("main");
+ if (!window.main) {
+ window.main = main.innerHTML
+ };
+ var results = document.getElementById("suggestions");// suggestions div generated by search box
+
+ var ResultsClone = results.cloneNode(true);// make a clone of the results, so that we can alter it
+ ResultsClone.id = "results";// alter the id of our clone, so that we can apply different css style
+
+ var headerDiv = document.createElement("div");// create a div element
+
+ var headerContent = '<form name="closeSearch"><h2><button type="submit" title="Close Search"><i class="svgs x"></i></button> Results For: '.concat(document.getElementById("searchinput").value, "</h2></form>");// header to use at top of results page
+
+ headerDiv.innerHTML = headerContent;// document element div (headerDiv), set the inner contents to our header html (headerContent)
+
+ ResultsClone.insertBefore(headerDiv, ResultsClone.firstChild);//insert our header div at the top of the page
+
+ main.innerHTML = ResultsClone.outerHTML;//display ResultsClone.outerHTML as the page
+ results.innerHTML = "";// clear the suggestions div popup
+ document.getElementById("searchinput").value = "";// clear the search input box
+ document.body.contains(document.closeSearch) && (document.closeSearch.onsubmit = function() { closeSearchNow() })
+ return false
+ }
+
+ /* Close search suggestion popup list */
+ function closeAllLists(elmnt) {
+ var suggestions = document.getElementById("suggestions");
+ while (suggestions.firstChild) {
+ suggestions.removeChild(suggestions.firstChild);
+ }
+ }
+
+
+
+ async function show_results() {
var initIndex = async function () {
if (index === undefined) {
index = fetch(baseUrl + '/search_index.' + langOnly + '.json')
@@ -236,7 +169,75 @@ window.onload = function() {
return false;
}
+ // Get the string bytes from binary
+ function getByteByBinary(binaryCode) {
+ // Binary system, starts with `0b` in ES6
+ // Octal number system, starts with `0` in ES5 and starts with `0o` in ES6
+ // Hexadecimal, starts with `0x` in both ES5 and ES6
+ var byteLengthDatas = [0, 1, 2, 3, 4];
+ var len = byteLengthDatas[Math.ceil(binaryCode.length / 8)];
+ return len;
+ }
+ // Get the string bytes from hexadecimal
+ function getByteByHex(hexCode) {
+ return getByteByBinary(parseInt(hexCode, 16).toString(2));
+ }
+ // Get substring by bytes
+ // If using JavaScript inline substring method, it will return error codes
+ // Source: https://www.52pojie.cn/thread-1059814-1-1.html
+ function substringByByte(str, maxLength) {
+ var result = "";
+ var flag = false;
+ var len = 0;
+ var length = 0;
+ var length2 = 0;
+ for (var i = 0; i < str.length; i++) {
+ var code = str.codePointAt(i).toString(16);
+ if (code.length > 4) {
+ i++;
+ if ((i + 1) < str.length) {
+ flag = str.codePointAt(i + 1).toString(16) == "200d";
+ }
+ }
+ if (flag) {
+ len += getByteByHex(code);
+ if (i == str.length - 1) {
+ length += len;
+ if (length <= maxLength) {
+ result += str.substr(length2, i - length2 + 1);
+ } else {
+ break
+ }
+ }
+ } else {
+ if (len != 0) {
+ length += len;
+ length += getByteByHex(code);
+ if (length <= maxLength) {
+ result += str.substr(length2, i - length2 + 1);
+ length2 = i + 1;
+ } else {
+ break
+ }
+ len = 0;
+ continue;
+ }
+ length += getByteByHex(code);
+ if (length <= maxLength) {
+ if (code.length <= 4) {
+ result += str[i]
+ } else {
+ result += str[i - 1] + str[i]
+ }
+ length2 = i + 1;
+ } else {
+ break
+ }
+ }
+ }
+ return result;
+ }
/* Taken from mdbook
// The strategy is as follows:
// First, assign a value to each word in the document:
@@ -363,7 +364,3 @@ window.onload = function() {
}());
}
};
-
-
-
-
diff --git a/static/js/search_elasticlunr.min.js b/static/js/search_elasticlunr.min.js
new file mode 100644
index 0000000..56d2c19
--- /dev/null
+++ b/static/js/search_elasticlunr.min.js
@@ -0,0 +1 @@
+!function(){function g(e){var t=new g.Index;return t.pipeline.add(g.trimmer,g.stopWordFilter,g.stemmer),e&&e.call(t,t),t}var l,c,e,t,d,h,f,p,m,v,y,S,x,w,b,I,E,D,F,C,_,k,N,P,n;g.version="0.9.5",((lunr=g).utils={}).warn=(n=this,function(e){n.console&&console.warn&&console.warn(e)}),g.utils.toString=function(e){return null==e?"":e.toString()},(g.EventEmitter=function(){this.events={}}).prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop();if("function"!=typeof t)throw new TypeError("last argument must be a function");e.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},g.EventEmitter.prototype.removeListener=function(e,t){this.hasHandler(e)&&-1!==(t=this.events[e].indexOf(t))&&(this.events[e].splice(t,1),0==this.events[e].length)&&delete this.events[e]},g.EventEmitter.prototype.emit=function(e){var t;this.hasHandler(e)&&(t=Array.prototype.slice.call(arguments,1),this.events[e].forEach(function(e){e.apply(void 0,t)},this))},g.EventEmitter.prototype.hasHandler=function(e){return e in this.events},(g.tokenizer=function(e){var t,n;return arguments.length&&null!=e?Array.isArray(e)?(t=(t=e.filter(function(e){return null!=e})).map(function(e){return g.utils.toString(e).toLowerCase()}),n=[],t.forEach(function(e){e=e.split(g.tokenizer.seperator);n=n.concat(e)},this),n):e.toString().trim().toLowerCase().split(g.tokenizer.seperator):[]}).defaultSeperator=/[\s\-]+/,g.tokenizer.seperator=g.tokenizer.defaultSeperator,g.tokenizer.setSeperator=function(e){null!=e&&"object"==typeof e&&(g.tokenizer.seperator=e)},g.tokenizer.resetSeperator=function(){g.tokenizer.seperator=g.tokenizer.defaultSeperator},g.tokenizer.getSeperator=function(){return g.tokenizer.seperator},(g.Pipeline=function(){this._queue=[]}).registeredFunctions={},g.Pipeline.registerFunction=function(e,t){t in g.Pipeline.registeredFunctions&&g.utils.warn("Overwriting existing registered function: "+t),e.label=t,g.Pipeline.registeredFunctions[t]=e},g.Pipeline.getRegisteredFunction=function(e){return e in g.Pipeline.registeredFunctions!=1?null:g.Pipeline.registeredFunctions[e]},g.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||g.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},g.Pipeline.load=function(e){var n=new g.Pipeline;return e.forEach(function(e){var t=g.Pipeline.getRegisteredFunction(e);if(!t)throw new Error("Cannot load un-registered function: "+e);n.add(t)}),n},g.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){g.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},g.Pipeline.prototype.after=function(e,t){g.Pipeline.warnIfFunctionNotRegistered(t);e=this._queue.indexOf(e);if(-1===e)throw new Error("Cannot find existingFn");this._queue.splice(e+1,0,t)},g.Pipeline.prototype.before=function(e,t){g.Pipeline.warnIfFunctionNotRegistered(t);e=this._queue.indexOf(e);if(-1===e)throw new Error("Cannot find existingFn");this._queue.splice(e,0,t)},g.Pipeline.prototype.remove=function(e){e=this._queue.indexOf(e);-1!==e&&this._queue.splice(e,1)},g.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,o=this._queue.length,i=0;i<n;i++){for(var r=e[i],s=0;s<o&&null!=(r=this._queue[s](r,i,e));s++);null!=r&&t.push(r)}return t},g.Pipeline.prototype.reset=function(){this._queue=[]},g.Pipeline.prototype.get=function(){return this._queue},g.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return g.Pipeline.warnIfFunctionNotRegistered(e),e.label})},(g.Index=function(){this._fields=[],this._ref="id",this.pipeline=new g.Pipeline,this.documentStore=new g.DocumentStore,this.index={},this.eventEmitter=new g.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))}).prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},g.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},g.Index.load=function(e){e.version!==g.version&&g.utils.warn("version mismatch: current "+g.version+" importing "+e.version);var t,n=new this;for(t in n._fields=e.fields,n._ref=e.ref,n.documentStore=g.DocumentStore.load(e.documentStore),n.pipeline=g.Pipeline.load(e.pipeline),n.index={},e.index)n.index[t]=g.InvertedIndex.load(e.index[t]);return n},g.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new g.InvertedIndex,this},g.Index.prototype.setRef=function(e){return this._ref=e,this},g.Index.prototype.saveDocument=function(e){return this.documentStore=new g.DocumentStore(e),this},g.Index.prototype.addDoc=function(r,e){var s;r&&(e=void 0===e||e,s=r[this._ref],this.documentStore.addDoc(s,r),this._fields.forEach(function(e){var t,n=this.pipeline.run(g.tokenizer(r[e])),o=(this.documentStore.addFieldLength(s,e,n.length),{});for(t in n.forEach(function(e){e in o?o[e]+=1:o[e]=1},this),o){var i=o[t],i=Math.sqrt(i);this.index[e].addToken(t,{ref:s,tf:i})}},this),e)&&this.eventEmitter.emit("add",r,this)},g.Index.prototype.removeDocByRef=function(e){e&&!1!==this.documentStore.isDocStored()&&this.documentStore.hasDoc(e)&&(e=this.documentStore.getDoc(e),this.removeDoc(e,!1))},g.Index.prototype.removeDoc=function(e,t){var n;e&&(t=void 0===t||t,n=e[this._ref],this.documentStore.hasDoc(n))&&(this.documentStore.removeDoc(n),this._fields.forEach(function(t){this.pipeline.run(g.tokenizer(e[t])).forEach(function(e){this.index[t].removeToken(e,n)},this)},this),t)&&this.eventEmitter.emit("remove",e,this)},g.Index.prototype.updateDoc=function(e,t){t=void 0===t||t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},g.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;return Object.prototype.hasOwnProperty.call(this._idfCache,n)?this._idfCache[n]:(t=this.index[t].getDocFreq(e),e=1+Math.log(this.documentStore.length/(t+1)),this._idfCache[n]=e)},g.Index.prototype.getFields=function(){return this._fields.slice()},g.Index.prototype.search=function(e,t){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var n=null;null!=t&&(n=JSON.stringify(t));for(var o=new g.Configuration(n,this.getFields()).get(),i={},r=Object.keys(e),s=0;s<r.length;s++){var u=r[s];i[u]=this.pipeline.run(g.tokenizer(e[u]))}var a,l={};for(a in o){var c=i[a]||i.any;if(c){var d=this.fieldSearch(c,a,o),h=o[a].boost;for(p in d)d[p]=d[p]*h;for(p in d)p in l?l[p]+=d[p]:l[p]=d[p]}}var f,p,m=[];for(p in l)f={ref:p,score:l[p]},this.documentStore.hasDoc(p)&&(f.doc=this.documentStore.getDoc(p)),m.push(f);return m.sort(function(e,t){return t.score-e.score}),m},g.Index.prototype.fieldSearch=function(e,d,t){var h=t[d].bool,n=t[d].expand,t=t[d].boost,f=null,p={};return 0!==t?(e.forEach(function(l){var e=[l],c=(1==n&&(e=this.index[d].expandToken(l)),{});e.forEach(function(e){var t=this.index[d].getDocs(e),n=this.idf(e,d);if(f&&"AND"==h){var o,i={};for(o in f)o in t&&(i[o]=t[o]);t=i}for(o in e==l&&this.fieldSearchStats(p,e,t),t){var r=this.index[d].getTermFrequency(e,o),s=this.documentStore.getFieldLength(o,d),u=1,a=1,r=r*n*(u=0!=s?1/Math.sqrt(s):u)*(a=e!=l?.15*(1-(e.length-l.length)/e.length):a);o in c?c[o]+=r:c[o]=r}},this),f=this.mergeScores(f,c,h)},this),f=this.coordNorm(f,p,e.length)):void 0},g.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if("AND"==n){var o={};for(i in t)i in e&&(o[i]=e[i]+t[i]);return o}for(var i in t)i in e?e[i]+=t[i]:e[i]=t[i];return e},g.Index.prototype.fieldSearchStats=function(e,t,n){for(var o in n)o in e?e[o].push(t):e[o]=[t]},g.Index.prototype.coordNorm=function(e,t,n){for(var o in e){var i;o in t&&(i=t[o].length,e[o]=e[o]*i/n)}return e},g.Index.prototype.toJSON=function(){var t={};return this._fields.forEach(function(e){t[e]=this.index[e].toJSON()},this),{version:g.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:t,pipeline:this.pipeline.toJSON()}},g.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},(g.DocumentStore=function(e){this._save=null==e||e,this.docs={},this.docInfo={},this.length=0}).load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},g.DocumentStore.prototype.isDocStored=function(){return this._save},g.DocumentStore.prototype.addDoc=function(e,t){this.hasDoc(e)||this.length++,this.docs[e]=!0===this._save?function(e){if(null===e||"object"!=typeof e)return e;var t,n=e.constructor();for(t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}(t):null},g.DocumentStore.prototype.getDoc=function(e){return!1===this.hasDoc(e)?null:this.docs[e]},g.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},g.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},g.DocumentStore.prototype.addFieldLength=function(e,t,n){null!=e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},g.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!=e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},g.DocumentStore.prototype.getFieldLength=function(e,t){return null!=e&&e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},g.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},l={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},c={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},e="[aeiouy]",t="[^aeiou][^aeiouy]*",d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),h=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),p=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),m=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,y=/^(.+?)eed$/,S=/^(.+?)(ed|ing)$/,x=/.$/,w=/(at|bl|iz)$/,b=new RegExp("([^aeiouylsz])\\1$"),I=new RegExp("^"+t+e+"[^aeiouwxy]$"),E=/^(.+?[^aeiou])y$/,D=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,F=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,C=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,k=/^(.+?)e$/,N=/ll$/,P=new RegExp("^"+t+e+"[^aeiouwxy]$"),g.Pipeline.registerFunction(g.stemmer=function(e){var t,n,o,i,r,s,u,a;return e.length<3||("y"==(n=e.substr(0,1))&&(e=n.toUpperCase()+e.substr(1)),u=v,(r=m).test(e)?e=e.replace(r,"$1$2"):u.test(e)&&(e=e.replace(u,"$1$2")),u=S,(r=y).test(e)?(a=r.exec(e),(r=d).test(a[1])&&(e=e.replace(r=x,""))):u.test(e)&&(s=(a=u.exec(e))[1],(u=p).test(s))&&(e=s,o=b,i=I,(u=w).test(e)?e+="e":o.test(e)?e=e.replace(r=x,""):i.test(e)&&(e+="e")),(r=E).test(e)&&(e=(s=(a=r.exec(e))[1])+"i"),(r=D).test(e)&&(s=(a=r.exec(e))[1],t=a[2],(r=d).test(s))&&(e=s+l[t]),(r=F).test(e)&&(s=(a=r.exec(e))[1],t=a[2],(r=d).test(s))&&(e=s+c[t]),u=_,(r=C).test(e)?(s=(a=r.exec(e))[1],(r=h).test(s)&&(e=s)):u.test(e)&&(s=(a=u.exec(e))[1]+a[2],(u=h).test(s))&&(e=s),(r=k).test(e)&&(s=(a=r.exec(e))[1],u=f,o=P,(r=h).test(s)||u.test(s)&&!o.test(s))&&(e=s),u=h,(r=N).test(e)&&u.test(e)&&(e=e.replace(r=x,"")),"y"==n&&(e=n.toLowerCase()+e.substr(1))),e},"stemmer"),g.stopWordFilter=function(e){return e&&!0!==g.stopWordFilter.stopWords[e]?e:void 0},g.clearStopWords=function(){g.stopWordFilter.stopWords={}},g.addStopWords=function(e){null!=e&&!1!==Array.isArray(e)&&e.forEach(function(e){g.stopWordFilter.stopWords[e]=!0},this)},g.resetStopWords=function(){g.stopWordFilter.stopWords=g.defaultStopWords},g.stopWordFilter.stopWords=g.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,do:!0,does:!0,either:!0,else:!0,ever:!0,every:!0,for:!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,if:!0,in:!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,this:!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,while:!0,who:!0,whom:!0,why:!0,will:!0,with:!0,would:!0,yet:!0,you:!0,your:!0},g.Pipeline.registerFunction(g.stopWordFilter,"stopWordFilter"),g.Pipeline.registerFunction(g.trimmer=function(e){if(null==e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},"trimmer"),(g.InvertedIndex=function(){this.root={docs:{},df:0}}).load=function(e){var t=new this;return t.root=e.root,t},g.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,o=0;o<=e.length-1;){var i=e[o];i in n||(n[i]={docs:{},df:0}),o+=1,n=n[i]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1)},g.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},g.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},g.InvertedIndex.prototype.getDocs=function(e){e=this.getNode(e);return null==e?{}:e.docs},g.InvertedIndex.prototype.getTermFrequency=function(e,t){e=this.getNode(e);return null!=e&&t in e.docs?e.docs[t].tf:0},g.InvertedIndex.prototype.getDocFreq=function(e){e=this.getNode(e);return null==e?0:e.df},g.InvertedIndex.prototype.removeToken=function(e,t){e&&null!=(e=this.getNode(e))&&t in e.docs&&(delete e.docs[t],--e.df)},g.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];t=t||[];if(null!=n||null!=(n=this.getNode(e)))for(var o in 0<n.df&&t.push(e),n)"docs"!==o&&"df"!==o&&this.expandToken(e+o,t,n[o]);return t},g.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},(g.Configuration=function(e,t){var n,e=e||"";if(null==t)throw new Error("fields should not be null");this.config={};try{n=JSON.parse(e),this.buildUserConfig(n,t)}catch(e){g.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(t)}}).prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},g.Configuration.prototype.buildUserConfig=function(e,t){var n,o,i="OR",r=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(r=e.expand||r),"fields"in e)for(var s in e.fields)-1<t.indexOf(s)?(o=r,null!=(n=e.fields[s]).expand&&(o=n.expand),this.config[s]={boost:n.boost||0===n.boost?n.boost:1,bool:n.bool||i,expand:o}):g.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,r,t)},g.Configuration.prototype.addAllFields2UserConfig=function(t,n,e){e.forEach(function(e){this.config[e]={boost:1,bool:t,expand:n}},this)},g.Configuration.prototype.get=function(){return this.config},g.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){for(var e,t=0;t<arguments.length;t++)~this.indexOf(e=arguments[t])||this.elements.splice(this.locationFor(e),0,e);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,o=n-t,i=t+Math.floor(o/2),r=this.elements[i];1<o;){if(r===e)return i;o=(n=e<r?i:n)-(t=r<e?i:t),i=t+Math.floor(o/2),r=this.elements[i]}return r===e?i:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,o=n-t,i=t+Math.floor(o/2),r=this.elements[i];1<o;)o=(n=e<r?i:n)-(t=r<e?i:t),i=t+Math.floor(o/2),r=this.elements[i];return e<r?i:r<e?i+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,o=0,i=this.length,r=e.length,s=this.elements,u=e.elements;!(i-1<n||r-1<o);)s[n]!==u[o]?s[n]<u[o]?n++:s[n]>u[o]&&o++:(t.add(s[n]),n++,o++);return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){for(var t,e=this.length>=e.length?(t=this,e):(t=e,this),n=t.clone(),o=0,i=e.toArray();o<i.length;o++)n.add(i[o]);return n},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},t=this,e=function(){return g},"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=g:t.elasticlunr=g}(),window.onload=function(){function e(){var e=document.querySelector("main"),t=(window.main||(window.main=e.innerHTML),document.getElementById("suggestions")),n=t.cloneNode(!0),o=(n.id="results",document.createElement("div")),i='<form name="closeSearch"><h2><button type="submit" title="Close Search"><i class="svgs x"></i></button> Results For: '.concat(document.getElementById("searchinput").value,"</h2></form>");return o.innerHTML=i,n.insertBefore(o,n.firstChild),e.innerHTML=n.outerHTML,t.innerHTML="",document.getElementById("searchinput").value="",document.body.contains(document.closeSearch)&&(document.closeSearch.onsubmit=function(){document.querySelector("main").innerHTML=window.main}),!1}function w(e){return e=parseInt(e,16).toString(2),[0,1,2,3,4][Math.ceil(e.length/8)]}var u,r,l,c,h;document.body.contains(document.goSearch)&&(document.goSearch.onsubmit=function(){return goSearchNow()},u=document.getElementById("suggestions"),r=document.getElementById("searchinput"),document.addEventListener("keydown",function(t){if(191===t.keyCode&&"INPUT"!==document.activeElement.tagName&&"TEXTAREA"!==document.activeElement.tagName&&(t.preventDefault(),r.focus(),u.classList.remove("d-none")),27===t.keyCode){r.blur(),u.classList.add("d-none");for(var e=document.getElementById("suggestions");e.firstChild;)e.removeChild(e.firstChild)}var n=u.querySelectorAll("a");if(!u.classList.contains("d-none")&&0!==n.length){var o=[...n],i=o.indexOf(document.activeElement);let e=0;38===t.keyCode?(t.preventDefault(),n[e=0<i?i-1:0].focus()):40===t.keyCode&&(t.preventDefault(),n[e=i+1<o.length?i+1:i].focus())}}),document.addEventListener("click",function(e){u.contains(e.target)||u.classList.add("d-none")}),c=document.documentElement.getAttribute("lang").substring(0,2),"/"==(h=document.querySelector("meta[name='base']").getAttribute("content")).slice(-1)&&(h=h.slice(0,-1)),r.addEventListener("input",async function(){var n,e=this.value.trim(),o=(await(l=void 0===l?fetch(h+"/search_index."+c+".json").then(async function(e){return elasticlunr.Index.load(await e.json())}):l)).search(e,{bool:"OR",fields:{title:{boost:2},body:{boost:1}}}),i=u.childNodes,r=o.length,s=e.split(/\s+/);u.classList.remove("d-none"),o.forEach(function(e){""!==e.doc.body&&((n=document.createElement("div")).innerHTML="<a href><span></span><span></span></a>",a=n.querySelector("a"),t=n.querySelector("span:first-child"),d=n.querySelector("span:nth-child(2)"),a.href=e.ref,t.textContent=e.doc.title,d.innerHTML=function(e,t){var n=t.map(function(e){return elasticlunr.stemmer(e.toLowerCase())}),o=!1,i=0,r=[],s=e.toLowerCase().split(". ");for(p in s){var u,a=s[p].split(/[\s\n]/),l=8;for(u in a){if(0<(S=a[u]).length){for(var c in n)elasticlunr.stemmer(S).startsWith(n[c])&&(l=40,o=!0);r.push([S,l,i]),l=2}i=i+S.length+1}i+=1}if(0===r.length)return void 0!==e.length&&300<e.length?e.substring(0,300)+"...":e;for(var d=[],h=Math.min(r.length,30),f=0,p=0;p<h;p++)f+=r[p][1];d.push(f);for(p=0;p<r.length-h;p++)f=(f-=r[p][1])+r[p+h][1],d.push(f);var m=0;if(o)for(var g=0,p=d.length-1;0<=p;p--)g<d[p]&&(g=d[p],m=p);for(var v=[],y=r[m][2],p=m;p<m+h;p++){var S,x;y<(S=r[p])[2]&&(v.push(e.substring(y,S[2])),y=S[2]),40===S[1]&&v.push("<b>"),y=S[2]+S[0].length;40!==S[1]&&12<=S[0].length&&!/^[\x00-\xff]+$/.test(S[0])?(x=function(e,t){for(var n="",o=!1,i=0,r=0,s=0,u=0;u<e.length;u++){var a=e.codePointAt(u).toString(16);if(o=4<a.length&&++u+1<e.length?"200d"==e.codePointAt(u+1).toString(16):o){if(i+=w(a),u==e.length-1){if(!((r+=i)<=t))break;n+=e.substr(s,u-s+1)}}else if(0!=i){if(!((r=(r+=i)+w(a))<=t))break;n+=e.substr(s,u-s+1),s=u+1,i=0}else{if(!((r+=w(a))<=t))break;a.length<=4?n+=e[u]:n+=e[u-1]+e[u],s=u+1}}return n}(e.substring(S[2],y),12),v.push(x)):v.push(e.substring(S[2],y)),40===S[1]&&v.push("</b>")}return v.push("…"),v.join("")}(e.doc.body,s),u.appendChild(n))});for(;i.length>r;)u.removeChild(i[0])},!0),u.addEventListener("click",function(){for(;u.lastChild;)u.removeChild(u.lastChild);return!1},!0),document.goSearch.onsubmit=e)}; \ No newline at end of file
diff --git a/static/search_stork.min.js b/static/js/search_stork.min.js
index a8f9a2c..a8f9a2c 100644
--- a/static/search_stork.min.js
+++ b/static/js/search_stork.min.js
diff --git a/static/search_tinysearch.min.js b/static/js/search_tinysearch.min.js
index 7630be3..7630be3 100644
--- a/static/search_tinysearch.min.js
+++ b/static/js/search_tinysearch.min.js
diff --git a/static/js/searchjava.js b/static/js/searchjava.js
new file mode 100644
index 0000000..608037c
--- /dev/null
+++ b/static/js/searchjava.js
@@ -0,0 +1,354 @@
+window.onload = function() {
+ if (document.body.contains(document.goSearch)) {
+ document.goSearch.onsubmit = function() { return goSearchNow() };
+
+ /*
+ Source:
+ - https://github.com/nextapps-de/flexsearch#index-documents-field-search
+ - https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html
+ - http://elasticlunr.com/
+ - https://github.com/getzola/zola/blob/master/docs/static/search.js
+ - https://github.com/aaranxu/adidoks/blob/main/static/js/search.js
+ */
+ (function(){
+ function inputFocus(e) {
+
+ if (e.keyCode === 191//forward slash
+ && document.activeElement.tagName !== "INPUT"
+ && document.activeElement.tagName !== "TEXTAREA") {
+ e.preventDefault();
+ searchinput.focus();
+ suggestions.classList.remove('d-none');
+ }
+
+ if (e.keyCode === 27 ) {//escape
+ searchinput.blur();
+ suggestions.classList.add('d-none');
+ closeAllLists();
+ }
+
+ const focusableSuggestions= suggestions.querySelectorAll('a');
+ if (suggestions.classList.contains('d-none')
+ || focusableSuggestions.length === 0) {
+ return;
+ }
+ const focusable= [...focusableSuggestions];
+ const index = focusable.indexOf(document.activeElement);
+
+ let nextIndex = 0;
+
+ if (e.keyCode === 38) {//up arrow
+ e.preventDefault();
+ nextIndex= index > 0 ? index-1 : 0;
+ focusableSuggestions[nextIndex].focus();
+ }
+ else if (e.keyCode === 40) {//down arrow
+ e.preventDefault();
+ nextIndex= index+1 < focusable.length ? index+1 : index;
+ focusableSuggestions[nextIndex].focus();
+ }
+
+ }
+
+ var suggestions = document.getElementById("suggestions");
+ var searchinput = document.getElementById("searchinput");
+ document.addEventListener("keydown", inputFocus);
+ document.addEventListener("click", function(event) {suggestions.contains(event.target) || suggestions.classList.add("d-none")});
+
+ var lang = document.documentElement.getAttribute("lang");
+ var langOnly = lang.substring(0, 2);
+ var baseUrl = document.querySelector("meta[name='base']").getAttribute("content");
+ if (baseUrl.slice(-1) == "/") {
+ baseUrl = baseUrl.slice(0, -1);
+ }
+
+ var index;
+ searchinput.addEventListener('input', show_results, true);
+ suggestions.addEventListener('click', accept_suggestion, true);
+
+
+ // in page results when press enter or click search icon from search box
+ function closeSearchNow() {
+ const main = document.querySelector("main");
+ main.innerHTML = window.main
+ }
+
+ function goSearchNow() {
+ const main = document.querySelector("main");
+ if (!window.main) {
+ window.main = main.innerHTML
+ };
+ var results = document.getElementById("suggestions");// suggestions div generated by search box
+
+ var ResultsClone = results.cloneNode(true);// make a clone of the results, so that we can alter it
+ ResultsClone.id = "results";// alter the id of our clone, so that we can apply different css style
+
+ var headerDiv = document.createElement("div");// create a div element
+
+ var headerContent = '<form name="closeSearch"><h2><button type="submit" title="Close Search"><i class="svgs x"></i></button> Results For: '.concat(document.getElementById("searchinput").value, "</h2></form>");// header to use at top of results page
+
+ headerDiv.innerHTML = headerContent;// document element div (headerDiv), set the inner contents to our header html (headerContent)
+
+ ResultsClone.insertBefore(headerDiv, ResultsClone.firstChild);//insert our header div at the top of the page
+
+ main.innerHTML = ResultsClone.outerHTML;//display ResultsClone.outerHTML as the page
+ results.innerHTML = "";// clear the suggestions div popup
+ document.getElementById("searchinput").value = "";// clear the search input box
+ document.body.contains(document.closeSearch) && (document.closeSearch.onsubmit = function() { closeSearchNow() })
+ return false
+ }
+
+ /* Close search suggestion popup list */
+ function closeAllLists(elmnt) {
+ var suggestions = document.getElementById("suggestions");
+ while (suggestions.firstChild) {
+ suggestions.removeChild(suggestions.firstChild);
+ }
+ }
+
+
+ var index = elasticlunr.Index.load(window.searchIndex);
+
+ async function show_results() {
+ var value = this.value.trim();
+ var options = {
+ bool: "OR",
+ fields: {
+ title: {boost: 2},
+ body: {boost: 1},
+ }
+ };
+ var results = index.search(value, options);
+
+ var entry, childs = suggestions.childNodes;
+ var i = 0, len = results.length;
+ var items = value.split(/\s+/);
+ suggestions.classList.remove('d-none');
+
+ results.forEach(function(page) {
+ if (page.doc.body !== '') {
+ entry = document.createElement('div');
+
+ entry.innerHTML = '<a href><span></span><span></span></a>';
+
+ a = entry.querySelector('a'),
+ t = entry.querySelector('span:first-child'),
+ d = entry.querySelector('span:nth-child(2)');
+ a.href = page.ref;
+ t.textContent = page.doc.title;
+ d.innerHTML = makeTeaser(page.doc.body, items);
+
+ suggestions.appendChild(entry);
+ }
+ });
+
+ while(childs.length > len){
+ suggestions.removeChild(childs[i])
+ }
+
+ }
+
+ function accept_suggestion(){
+
+ while(suggestions.lastChild){
+
+ suggestions.removeChild(suggestions.lastChild);
+ }
+
+ return false;
+ }
+ // Get the string bytes from binary
+ function getByteByBinary(binaryCode) {
+ // Binary system, starts with `0b` in ES6
+ // Octal number system, starts with `0` in ES5 and starts with `0o` in ES6
+ // Hexadecimal, starts with `0x` in both ES5 and ES6
+ var byteLengthDatas = [0, 1, 2, 3, 4];
+ var len = byteLengthDatas[Math.ceil(binaryCode.length / 8)];
+ return len;
+ }
+
+ // Get the string bytes from hexadecimal
+ function getByteByHex(hexCode) {
+ return getByteByBinary(parseInt(hexCode, 16).toString(2));
+ }
+ // Get substring by bytes
+ // If using JavaScript inline substring method, it will return error codes
+ // Source: https://www.52pojie.cn/thread-1059814-1-1.html
+ function substringByByte(str, maxLength) {
+ var result = "";
+ var flag = false;
+ var len = 0;
+ var length = 0;
+ var length2 = 0;
+ for (var i = 0; i < str.length; i++) {
+ var code = str.codePointAt(i).toString(16);
+ if (code.length > 4) {
+ i++;
+ if ((i + 1) < str.length) {
+ flag = str.codePointAt(i + 1).toString(16) == "200d";
+ }
+ }
+ if (flag) {
+ len += getByteByHex(code);
+ if (i == str.length - 1) {
+ length += len;
+ if (length <= maxLength) {
+ result += str.substr(length2, i - length2 + 1);
+ } else {
+ break
+ }
+ }
+ } else {
+ if (len != 0) {
+ length += len;
+ length += getByteByHex(code);
+ if (length <= maxLength) {
+ result += str.substr(length2, i - length2 + 1);
+ length2 = i + 1;
+ } else {
+ break
+ }
+ len = 0;
+ continue;
+ }
+ length += getByteByHex(code);
+ if (length <= maxLength) {
+ if (code.length <= 4) {
+ result += str[i]
+ } else {
+ result += str[i - 1] + str[i]
+ }
+ length2 = i + 1;
+ } else {
+ break
+ }
+ }
+ }
+ return result;
+ }
+ /* Taken from mdbook
+ // The strategy is as follows:
+ // First, assign a value to each word in the document:
+ // Words that correspond to search terms (stemmer aware): 40
+ // Normal words: 2
+ // First word in a sentence: 8
+ // Then use a sliding window with a constant number of words and count the
+ // sum of the values of the words within the window. Then use the window that got the
+ // maximum sum. If there are multiple maximas, then get the last one.
+ // Enclose the terms in <b>.
+ */
+ function makeTeaser(body, terms) {
+ var TERM_WEIGHT = 40;
+ var NORMAL_WORD_WEIGHT = 2;
+ var FIRST_WORD_WEIGHT = 8;
+ var TEASER_MAX_WORDS = 30;
+
+ var stemmedTerms = terms.map(function (w) {
+ return elasticlunr.stemmer(w.toLowerCase());
+ });
+ var termFound = false;
+ var index = 0;
+ var weighted = []; // contains elements of ["word", weight, index_in_document]
+
+ // split in sentences, then words
+ var sentences = body.toLowerCase().split(". ");
+ for (var i in sentences) {
+ var words = sentences[i].split(/[\s\n]/);
+ var value = FIRST_WORD_WEIGHT;
+ for (var j in words) {
+
+ var word = words[j];
+
+ if (word.length > 0) {
+ for (var k in stemmedTerms) {
+ if (elasticlunr.stemmer(word).startsWith(stemmedTerms[k])) {
+ value = TERM_WEIGHT;
+ termFound = true;
+ }
+ }
+ weighted.push([word, value, index]);
+ value = NORMAL_WORD_WEIGHT;
+ }
+
+ index += word.length;
+ index += 1; // ' ' or '.' if last word in sentence
+ }
+
+ index += 1; // because we split at a two-char boundary '. '
+ }
+
+ if (weighted.length === 0) {
+ if (body.length !== undefined && body.length > TEASER_MAX_WORDS * 10) {
+ return body.substring(0, TEASER_MAX_WORDS * 10) + '...';
+ } else {
+ return body;
+ }
+ }
+
+ var windowWeights = [];
+ var windowSize = Math.min(weighted.length, TEASER_MAX_WORDS);
+ // We add a window with all the weights first
+ var curSum = 0;
+ for (var i = 0; i < windowSize; i++) {
+ curSum += weighted[i][1];
+ }
+ windowWeights.push(curSum);
+
+ for (var i = 0; i < weighted.length - windowSize; i++) {
+ curSum -= weighted[i][1];
+ curSum += weighted[i + windowSize][1];
+ windowWeights.push(curSum);
+ }
+
+ // If we didn't find the term, just pick the first window
+ var maxSumIndex = 0;
+ if (termFound) {
+ var maxFound = 0;
+ // backwards
+ for (var i = windowWeights.length - 1; i >= 0; i--) {
+ if (windowWeights[i] > maxFound) {
+ maxFound = windowWeights[i];
+ maxSumIndex = i;
+ }
+ }
+ }
+
+ var teaser = [];
+ var startIndex = weighted[maxSumIndex][2];
+ for (var i = maxSumIndex; i < maxSumIndex + windowSize; i++) {
+ var word = weighted[i];
+ if (startIndex < word[2]) {
+ // missing text from index to start of `word`
+ teaser.push(body.substring(startIndex, word[2]));
+ startIndex = word[2];
+ }
+
+ // add <em/> around search terms
+ if (word[1] === TERM_WEIGHT) {
+ teaser.push("<b>");
+ }
+
+ startIndex = word[2] + word[0].length;
+ // Check the string is ascii characters or not
+ var re = /^[\x00-\xff]+$/
+ if (word[1] !== TERM_WEIGHT && word[0].length >= 12 && !re.test(word[0])) {
+ // If the string's length is too long, it maybe a Chinese/Japance/Korean article
+ // if using substring method directly, it may occur error codes on emoji chars
+ var strBefor = body.substring(word[2], startIndex);
+ var strAfter = substringByByte(strBefor, 12);
+ teaser.push(strAfter);
+ } else {
+ teaser.push(body.substring(word[2], startIndex));
+ }
+
+ if (word[1] === TERM_WEIGHT) {
+ teaser.push("</b>");
+ }
+ }
+ teaser.push("…");
+ return teaser.join("");
+ }
+ document.goSearch.onsubmit = function() { return goSearchNow() };
+ }());
+ }
+};
diff --git a/static/js/searchjavaugly.js b/static/js/searchjavaugly.js
new file mode 100644
index 0000000..114aca3
--- /dev/null
+++ b/static/js/searchjavaugly.js
@@ -0,0 +1,354 @@
+window.onload = function() {
+ if (document.body.contains(document.goSearch)) {
+ document.goSearch.onsubmit = function() { return goSearchNow() };
+
+ /*
+ Source:
+ - https://github.com/nextapps-de/flexsearch#index-documents-field-search
+ - https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html
+ - http://elasticlunr.com/
+ - https://github.com/getzola/zola/blob/master/docs/static/search.js
+ - https://github.com/aaranxu/adidoks/blob/main/static/js/search.js
+ */
+ (function(){
+ function inputFocus(e) {
+
+ if (e.keyCode === 191//forward slash
+ && document.activeElement.tagName !== "INPUT"
+ && document.activeElement.tagName !== "TEXTAREA") {
+ e.preventDefault();
+ searchinput.focus();
+ suggestions.classList.remove('d-none');
+ }
+
+ if (e.keyCode === 27 ) {//escape
+ searchinput.blur();
+ suggestions.classList.add('d-none');
+ closeAllLists();
+ }
+
+ const focusableSuggestions= suggestions.querySelectorAll('a');
+ if (suggestions.classList.contains('d-none')
+ || focusableSuggestions.length === 0) {
+ return;
+ }
+ const focusable= [...focusableSuggestions];
+ const index = focusable.indexOf(document.activeElement);
+
+ let nextIndex = 0;
+
+ if (e.keyCode === 38) {//up arrow
+ e.preventDefault();
+ nextIndex= index > 0 ? index-1 : 0;
+ focusableSuggestions[nextIndex].focus();
+ }
+ else if (e.keyCode === 40) {//down arrow
+ e.preventDefault();
+ nextIndex= index+1 < focusable.length ? index+1 : index;
+ focusableSuggestions[nextIndex].focus();
+ }
+
+ }
+
+ var suggestions = document.getElementById("suggestions");
+ var searchinput = document.getElementById("searchinput");
+ document.addEventListener("keydown", inputFocus);
+ document.addEventListener("click", function(event) {suggestions.contains(event.target) || suggestions.classList.add("d-none")});
+
+ var lang = document.documentElement.getAttribute("lang");
+ var langOnly = lang.substring(0, 2);
+ var baseUrl = document.querySelector("meta[name='base']").getAttribute("content");
+ if (baseUrl.slice(-1) == "/") {
+ baseUrl = baseUrl.slice(0, -1);
+ }
+
+ var index;
+ searchinput.addEventListener('input', show_results, true);
+ suggestions.addEventListener('click', accept_suggestion, true);
+
+
+ // in page results when press enter or click search icon from search box
+ function closeSearchNow() {
+ const main = document.querySelector("main");
+ main.innerHTML = window.main
+ }
+
+ function goSearchNow() {
+ const main = document.querySelector("main");
+ if (!window.main) {
+ window.main = main.innerHTML
+ };
+ var results = document.getElementById("suggestions");// suggestions div generated by search box
+
+ var ResultsClone = results.cloneNode(true);// make a clone of the results, so that we can alter it
+ ResultsClone.id = "results";// alter the id of our clone, so that we can apply different css style
+
+ var headerDiv = document.createElement("div");// create a div element
+
+ var headerContent = '<form name="closeSearch"><h2><button type="submit" title="Close Search"><i class="svgs x"></i></button> Results For: '.concat(document.getElementById("searchinput").value, "</h2></form>");// header to use at top of results page
+
+ headerDiv.innerHTML = headerContent;// document element div (headerDiv), set the inner contents to our header html (headerContent)
+
+ ResultsClone.insertBefore(headerDiv, ResultsClone.firstChild);//insert our header div at the top of the page
+
+ main.innerHTML = ResultsClone.outerHTML;//display ResultsClone.outerHTML as the page
+ results.innerHTML = "";// clear the suggestions div popup
+ document.getElementById("searchinput").value = "";// clear the search input box
+ document.body.contains(document.closeSearch) && (document.closeSearch.onsubmit = function() { closeSearchNow() })
+ return false
+ }
+
+ /* Close search suggestion popup list */
+ function closeAllLists(elmnt) {
+ var suggestions = document.getElementById("suggestions");
+ while (suggestions.firstChild) {
+ suggestions.removeChild(suggestions.firstChild);
+ }
+ }
+
+
+ var index = elasticlunr.Index.load(window.searchIndex);
+
+ async function show_results() {
+ var value = this.value.trim();
+ var options = {
+ bool: "OR",
+ fields: {
+ title: {boost: 2},
+ body: {boost: 1},
+ }
+ };
+ var results = index.search(value, options);
+
+ var entry, childs = suggestions.childNodes;
+ var i = 0, len = results.length;
+ var items = value.split(/\s+/);
+ suggestions.classList.remove('d-none');
+
+ results.forEach(function(page) {
+ if (page.doc.body !== '') {
+ entry = document.createElement('div');
+
+ entry.innerHTML = '<a href><span></span><span></span></a>';
+
+ a = entry.querySelector('a'),
+ t = entry.querySelector('span:first-child'),
+ d = entry.querySelector('span:nth-child(2)');
+ a.href = page.ref + 'index.html';
+ t.textContent = page.doc.title;
+ d.innerHTML = makeTeaser(page.doc.body, items);
+
+ suggestions.appendChild(entry);
+ }
+ });
+
+ while(childs.length > len){
+ suggestions.removeChild(childs[i])
+ }
+
+ }
+
+ function accept_suggestion(){
+
+ while(suggestions.lastChild){
+
+ suggestions.removeChild(suggestions.lastChild);
+ }
+
+ return false;
+ }
+ // Get the string bytes from binary
+ function getByteByBinary(binaryCode) {
+ // Binary system, starts with `0b` in ES6
+ // Octal number system, starts with `0` in ES5 and starts with `0o` in ES6
+ // Hexadecimal, starts with `0x` in both ES5 and ES6
+ var byteLengthDatas = [0, 1, 2, 3, 4];
+ var len = byteLengthDatas[Math.ceil(binaryCode.length / 8)];
+ return len;
+ }
+
+ // Get the string bytes from hexadecimal
+ function getByteByHex(hexCode) {
+ return getByteByBinary(parseInt(hexCode, 16).toString(2));
+ }
+ // Get substring by bytes
+ // If using JavaScript inline substring method, it will return error codes
+ // Source: https://www.52pojie.cn/thread-1059814-1-1.html
+ function substringByByte(str, maxLength) {
+ var result = "";
+ var flag = false;
+ var len = 0;
+ var length = 0;
+ var length2 = 0;
+ for (var i = 0; i < str.length; i++) {
+ var code = str.codePointAt(i).toString(16);
+ if (code.length > 4) {
+ i++;
+ if ((i + 1) < str.length) {
+ flag = str.codePointAt(i + 1).toString(16) == "200d";
+ }
+ }
+ if (flag) {
+ len += getByteByHex(code);
+ if (i == str.length - 1) {
+ length += len;
+ if (length <= maxLength) {
+ result += str.substr(length2, i - length2 + 1);
+ } else {
+ break
+ }
+ }
+ } else {
+ if (len != 0) {
+ length += len;
+ length += getByteByHex(code);
+ if (length <= maxLength) {
+ result += str.substr(length2, i - length2 + 1);
+ length2 = i + 1;
+ } else {
+ break
+ }
+ len = 0;
+ continue;
+ }
+ length += getByteByHex(code);
+ if (length <= maxLength) {
+ if (code.length <= 4) {
+ result += str[i]
+ } else {
+ result += str[i - 1] + str[i]
+ }
+ length2 = i + 1;
+ } else {
+ break
+ }
+ }
+ }
+ return result;
+ }
+ /* Taken from mdbook
+ // The strategy is as follows:
+ // First, assign a value to each word in the document:
+ // Words that correspond to search terms (stemmer aware): 40
+ // Normal words: 2
+ // First word in a sentence: 8
+ // Then use a sliding window with a constant number of words and count the
+ // sum of the values of the words within the window. Then use the window that got the
+ // maximum sum. If there are multiple maximas, then get the last one.
+ // Enclose the terms in <b>.
+ */
+ function makeTeaser(body, terms) {
+ var TERM_WEIGHT = 40;
+ var NORMAL_WORD_WEIGHT = 2;
+ var FIRST_WORD_WEIGHT = 8;
+ var TEASER_MAX_WORDS = 30;
+
+ var stemmedTerms = terms.map(function (w) {
+ return elasticlunr.stemmer(w.toLowerCase());
+ });
+ var termFound = false;
+ var index = 0;
+ var weighted = []; // contains elements of ["word", weight, index_in_document]
+
+ // split in sentences, then words
+ var sentences = body.toLowerCase().split(". ");
+ for (var i in sentences) {
+ var words = sentences[i].split(/[\s\n]/);
+ var value = FIRST_WORD_WEIGHT;
+ for (var j in words) {
+
+ var word = words[j];
+
+ if (word.length > 0) {
+ for (var k in stemmedTerms) {
+ if (elasticlunr.stemmer(word).startsWith(stemmedTerms[k])) {
+ value = TERM_WEIGHT;
+ termFound = true;
+ }
+ }
+ weighted.push([word, value, index]);
+ value = NORMAL_WORD_WEIGHT;
+ }
+
+ index += word.length;
+ index += 1; // ' ' or '.' if last word in sentence
+ }
+
+ index += 1; // because we split at a two-char boundary '. '
+ }
+
+ if (weighted.length === 0) {
+ if (body.length !== undefined && body.length > TEASER_MAX_WORDS * 10) {
+ return body.substring(0, TEASER_MAX_WORDS * 10) + '...';
+ } else {
+ return body;
+ }
+ }
+
+ var windowWeights = [];
+ var windowSize = Math.min(weighted.length, TEASER_MAX_WORDS);
+ // We add a window with all the weights first
+ var curSum = 0;
+ for (var i = 0; i < windowSize; i++) {
+ curSum += weighted[i][1];
+ }
+ windowWeights.push(curSum);
+
+ for (var i = 0; i < weighted.length - windowSize; i++) {
+ curSum -= weighted[i][1];
+ curSum += weighted[i + windowSize][1];
+ windowWeights.push(curSum);
+ }
+
+ // If we didn't find the term, just pick the first window
+ var maxSumIndex = 0;
+ if (termFound) {
+ var maxFound = 0;
+ // backwards
+ for (var i = windowWeights.length - 1; i >= 0; i--) {
+ if (windowWeights[i] > maxFound) {
+ maxFound = windowWeights[i];
+ maxSumIndex = i;
+ }
+ }
+ }
+
+ var teaser = [];
+ var startIndex = weighted[maxSumIndex][2];
+ for (var i = maxSumIndex; i < maxSumIndex + windowSize; i++) {
+ var word = weighted[i];
+ if (startIndex < word[2]) {
+ // missing text from index to start of `word`
+ teaser.push(body.substring(startIndex, word[2]));
+ startIndex = word[2];
+ }
+
+ // add <em/> around search terms
+ if (word[1] === TERM_WEIGHT) {
+ teaser.push("<b>");
+ }
+
+ startIndex = word[2] + word[0].length;
+ // Check the string is ascii characters or not
+ var re = /^[\x00-\xff]+$/
+ if (word[1] !== TERM_WEIGHT && word[0].length >= 12 && !re.test(word[0])) {
+ // If the string's length is too long, it maybe a Chinese/Japance/Korean article
+ // if using substring method directly, it may occur error codes on emoji chars
+ var strBefor = body.substring(word[2], startIndex);
+ var strAfter = substringByByte(strBefor, 12);
+ teaser.push(strAfter);
+ } else {
+ teaser.push(body.substring(word[2], startIndex));
+ }
+
+ if (word[1] === TERM_WEIGHT) {
+ teaser.push("</b>");
+ }
+ }
+ teaser.push("…");
+ return teaser.join("");
+ }
+ document.goSearch.onsubmit = function() { return goSearchNow() };
+ }());
+ }
+};
diff --git a/static/stork.js b/static/js/stork.js
index b464ecd..b464ecd 100644
--- a/static/stork.js
+++ b/static/js/stork.js
diff --git a/static/stork_config.js b/static/js/stork_config.js
index 3c589c2..3c589c2 100644
--- a/static/stork_config.js
+++ b/static/js/stork_config.js
diff --git a/static/theme.js b/static/js/theme.js
index 5f6f0f6..5f6f0f6 100644
--- a/static/theme.js
+++ b/static/js/theme.js
diff --git a/static/theme.min.js b/static/js/theme.min.js
index 612895e..612895e 100644
--- a/static/theme.min.js
+++ b/static/js/theme.min.js
diff --git a/static/theme_button.js b/static/js/theme_button.js
index 34d1d78..34d1d78 100644
--- a/static/theme_button.js
+++ b/static/js/theme_button.js
diff --git a/static/tinysearch.js b/static/js/tinysearch.js
index b6f8b07..b6f8b07 100644
--- a/static/tinysearch.js
+++ b/static/js/tinysearch.js
diff --git a/static/search_elasticlunr.min.js b/static/search_elasticlunr.min.js
deleted file mode 100644
index 9493448..0000000
--- a/static/search_elasticlunr.min.js
+++ /dev/null
@@ -1 +0,0 @@
-function closeSearchNow(){document.querySelector("main").innerHTML=window.main}function goSearchNow(){var e=document.querySelector("main"),t=(window.main||(window.main=e.innerHTML),document.getElementById("suggestions")),n=t.cloneNode(!0),o=(n.id="results",document.createElement("div")),i='<form name="closeSearch"><h2><button type="submit" title="Close Search"><i class="svgs x"></i></button> Results For: '.concat(document.getElementById("searchinput").value,"</h2></form>");return o.innerHTML=i,n.insertBefore(o,n.firstChild),e.innerHTML=n.outerHTML,t.innerHTML="",document.getElementById("searchinput").value="",document.body.contains(document.closeSearch)&&(document.closeSearch.onsubmit=function(){closeSearchNow()}),!1}function closeAllLists(e){for(var t=document.getElementById("suggestions");t.firstChild;)t.removeChild(t.firstChild)}function inputFocus(t){191===t.keyCode&&"INPUT"!==document.activeElement.tagName&&"TEXTAREA"!==document.activeElement.tagName&&(t.preventDefault(),searchinput.focus(),suggestions.classList.remove("d-none")),27===t.keyCode&&(searchinput.blur(),suggestions.classList.add("d-none"),closeAllLists());var n=suggestions.querySelectorAll("a");if(!suggestions.classList.contains("d-none")&&0!==n.length){var o=[...n],i=o.indexOf(document.activeElement);let e=0;38===t.keyCode?(t.preventDefault(),n[e=0<i?i-1:0].focus()):40===t.keyCode&&(t.preventDefault(),n[e=i+1<o.length?i+1:i].focus())}}function substringByByte(e,t){for(var n="",o=!1,i=0,r=0,s=0,u=0;u<e.length;u++){var a=e.codePointAt(u).toString(16);if(o=4<a.length&&++u+1<e.length?"200d"==e.codePointAt(u+1).toString(16):o){if(i+=getByteByHex(a),u==e.length-1){if(!((r+=i)<=t))break;n+=e.substr(s,u-s+1)}}else if(0!=i){if(!((r=(r+=i)+getByteByHex(a))<=t))break;n+=e.substr(s,u-s+1),s=u+1,i=0}else{if(!((r+=getByteByHex(a))<=t))break;a.length<=4?n+=e[u]:n+=e[u-1]+e[u],s=u+1}}return n}function getByteByBinary(e){return[0,1,2,3,4][Math.ceil(e.length/8)]}function getByteByHex(e){return getByteByBinary(parseInt(e,16).toString(2))}!function(){function m(e){var t=new m.Index;return t.pipeline.add(m.trimmer,m.stopWordFilter,m.stemmer),e&&e.call(t,t),t}var l,c,e,t,d,h,f,p,g,y,v,S,x,w,b,I,E,D,F,C,_,k,N,L,n;m.version="0.9.5",((lunr=m).utils={}).warn=(n=this,function(e){n.console&&console.warn&&console.warn(e)}),m.utils.toString=function(e){return null==e?"":e.toString()},(m.EventEmitter=function(){this.events={}}).prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop();if("function"!=typeof t)throw new TypeError("last argument must be a function");e.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},m.EventEmitter.prototype.removeListener=function(e,t){this.hasHandler(e)&&-1!==(t=this.events[e].indexOf(t))&&(this.events[e].splice(t,1),0==this.events[e].length)&&delete this.events[e]},m.EventEmitter.prototype.emit=function(e){var t;this.hasHandler(e)&&(t=Array.prototype.slice.call(arguments,1),this.events[e].forEach(function(e){e.apply(void 0,t)},this))},m.EventEmitter.prototype.hasHandler=function(e){return e in this.events},(m.tokenizer=function(e){var t,n;return arguments.length&&null!=e?Array.isArray(e)?(t=(t=e.filter(function(e){return null!=e})).map(function(e){return m.utils.toString(e).toLowerCase()}),n=[],t.forEach(function(e){e=e.split(m.tokenizer.seperator);n=n.concat(e)},this),n):e.toString().trim().toLowerCase().split(m.tokenizer.seperator):[]}).defaultSeperator=/[\s\-]+/,m.tokenizer.seperator=m.tokenizer.defaultSeperator,m.tokenizer.setSeperator=function(e){null!=e&&"object"==typeof e&&(m.tokenizer.seperator=e)},m.tokenizer.resetSeperator=function(){m.tokenizer.seperator=m.tokenizer.defaultSeperator},m.tokenizer.getSeperator=function(){return m.tokenizer.seperator},(m.Pipeline=function(){this._queue=[]}).registeredFunctions={},m.Pipeline.registerFunction=function(e,t){t in m.Pipeline.registeredFunctions&&m.utils.warn("Overwriting existing registered function: "+t),e.label=t,m.Pipeline.registeredFunctions[t]=e},m.Pipeline.getRegisteredFunction=function(e){return e in m.Pipeline.registeredFunctions!=1?null:m.Pipeline.registeredFunctions[e]},m.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||m.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},m.Pipeline.load=function(e){var n=new m.Pipeline;return e.forEach(function(e){var t=m.Pipeline.getRegisteredFunction(e);if(!t)throw new Error("Cannot load un-registered function: "+e);n.add(t)}),n},m.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){m.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},m.Pipeline.prototype.after=function(e,t){m.Pipeline.warnIfFunctionNotRegistered(t);e=this._queue.indexOf(e);if(-1===e)throw new Error("Cannot find existingFn");this._queue.splice(e+1,0,t)},m.Pipeline.prototype.before=function(e,t){m.Pipeline.warnIfFunctionNotRegistered(t);e=this._queue.indexOf(e);if(-1===e)throw new Error("Cannot find existingFn");this._queue.splice(e,0,t)},m.Pipeline.prototype.remove=function(e){e=this._queue.indexOf(e);-1!==e&&this._queue.splice(e,1)},m.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,o=this._queue.length,i=0;i<n;i++){for(var r=e[i],s=0;s<o&&null!=(r=this._queue[s](r,i,e));s++);null!=r&&t.push(r)}return t},m.Pipeline.prototype.reset=function(){this._queue=[]},m.Pipeline.prototype.get=function(){return this._queue},m.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return m.Pipeline.warnIfFunctionNotRegistered(e),e.label})},(m.Index=function(){this._fields=[],this._ref="id",this.pipeline=new m.Pipeline,this.documentStore=new m.DocumentStore,this.index={},this.eventEmitter=new m.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))}).prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},m.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},m.Index.load=function(e){e.version!==m.version&&m.utils.warn("version mismatch: current "+m.version+" importing "+e.version);var t,n=new this;for(t in n._fields=e.fields,n._ref=e.ref,n.documentStore=m.DocumentStore.load(e.documentStore),n.pipeline=m.Pipeline.load(e.pipeline),n.index={},e.index)n.index[t]=m.InvertedIndex.load(e.index[t]);return n},m.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new m.InvertedIndex,this},m.Index.prototype.setRef=function(e){return this._ref=e,this},m.Index.prototype.saveDocument=function(e){return this.documentStore=new m.DocumentStore(e),this},m.Index.prototype.addDoc=function(r,e){var s;r&&(e=void 0===e||e,s=r[this._ref],this.documentStore.addDoc(s,r),this._fields.forEach(function(e){var t,n=this.pipeline.run(m.tokenizer(r[e])),o=(this.documentStore.addFieldLength(s,e,n.length),{});for(t in n.forEach(function(e){e in o?o[e]+=1:o[e]=1},this),o){var i=o[t],i=Math.sqrt(i);this.index[e].addToken(t,{ref:s,tf:i})}},this),e)&&this.eventEmitter.emit("add",r,this)},m.Index.prototype.removeDocByRef=function(e){e&&!1!==this.documentStore.isDocStored()&&this.documentStore.hasDoc(e)&&(e=this.documentStore.getDoc(e),this.removeDoc(e,!1))},m.Index.prototype.removeDoc=function(e,t){var n;e&&(t=void 0===t||t,n=e[this._ref],this.documentStore.hasDoc(n))&&(this.documentStore.removeDoc(n),this._fields.forEach(function(t){this.pipeline.run(m.tokenizer(e[t])).forEach(function(e){this.index[t].removeToken(e,n)},this)},this),t)&&this.eventEmitter.emit("remove",e,this)},m.Index.prototype.updateDoc=function(e,t){t=void 0===t||t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},m.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;return Object.prototype.hasOwnProperty.call(this._idfCache,n)?this._idfCache[n]:(t=this.index[t].getDocFreq(e),e=1+Math.log(this.documentStore.length/(t+1)),this._idfCache[n]=e)},m.Index.prototype.getFields=function(){return this._fields.slice()},m.Index.prototype.search=function(e,t){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var n=null;null!=t&&(n=JSON.stringify(t));for(var o=new m.Configuration(n,this.getFields()).get(),i={},r=Object.keys(e),s=0;s<r.length;s++){var u=r[s];i[u]=this.pipeline.run(m.tokenizer(e[u]))}var a,l={};for(a in o){var c=i[a]||i.any;if(c){var d=this.fieldSearch(c,a,o),h=o[a].boost;for(p in d)d[p]=d[p]*h;for(p in d)p in l?l[p]+=d[p]:l[p]=d[p]}}var f,p,g=[];for(p in l)f={ref:p,score:l[p]},this.documentStore.hasDoc(p)&&(f.doc=this.documentStore.getDoc(p)),g.push(f);return g.sort(function(e,t){return t.score-e.score}),g},m.Index.prototype.fieldSearch=function(e,d,t){var h=t[d].bool,n=t[d].expand,t=t[d].boost,f=null,p={};return 0!==t?(e.forEach(function(l){var e=[l],c=(1==n&&(e=this.index[d].expandToken(l)),{});e.forEach(function(e){var t=this.index[d].getDocs(e),n=this.idf(e,d);if(f&&"AND"==h){var o,i={};for(o in f)o in t&&(i[o]=t[o]);t=i}for(o in e==l&&this.fieldSearchStats(p,e,t),t){var r=this.index[d].getTermFrequency(e,o),s=this.documentStore.getFieldLength(o,d),u=1,a=1,r=r*n*(u=0!=s?1/Math.sqrt(s):u)*(a=e!=l?.15*(1-(e.length-l.length)/e.length):a);o in c?c[o]+=r:c[o]=r}},this),f=this.mergeScores(f,c,h)},this),f=this.coordNorm(f,p,e.length)):void 0},m.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if("AND"==n){var o={};for(i in t)i in e&&(o[i]=e[i]+t[i]);return o}for(var i in t)i in e?e[i]+=t[i]:e[i]=t[i];return e},m.Index.prototype.fieldSearchStats=function(e,t,n){for(var o in n)o in e?e[o].push(t):e[o]=[t]},m.Index.prototype.coordNorm=function(e,t,n){for(var o in e){var i;o in t&&(i=t[o].length,e[o]=e[o]*i/n)}return e},m.Index.prototype.toJSON=function(){var t={};return this._fields.forEach(function(e){t[e]=this.index[e].toJSON()},this),{version:m.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:t,pipeline:this.pipeline.toJSON()}},m.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},(m.DocumentStore=function(e){this._save=null==e||e,this.docs={},this.docInfo={},this.length=0}).load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},m.DocumentStore.prototype.isDocStored=function(){return this._save},m.DocumentStore.prototype.addDoc=function(e,t){this.hasDoc(e)||this.length++,this.docs[e]=!0===this._save?function(e){if(null===e||"object"!=typeof e)return e;var t,n=e.constructor();for(t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}(t):null},m.DocumentStore.prototype.getDoc=function(e){return!1===this.hasDoc(e)?null:this.docs[e]},m.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},m.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},m.DocumentStore.prototype.addFieldLength=function(e,t,n){null!=e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},m.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!=e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},m.DocumentStore.prototype.getFieldLength=function(e,t){return null!=e&&e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},m.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},l={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},c={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},e="[aeiouy]",t="[^aeiou][^aeiouy]*",d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),h=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),p=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),g=/^(.+?)(ss|i)es$/,y=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,S=/^(.+?)(ed|ing)$/,x=/.$/,w=/(at|bl|iz)$/,b=new RegExp("([^aeiouylsz])\\1$"),I=new RegExp("^"+t+e+"[^aeiouwxy]$"),E=/^(.+?[^aeiou])y$/,D=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,F=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,C=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,k=/^(.+?)e$/,N=/ll$/,L=new RegExp("^"+t+e+"[^aeiouwxy]$"),m.Pipeline.registerFunction(m.stemmer=function(e){var t,n,o,i,r,s,u,a;return e.length<3||("y"==(n=e.substr(0,1))&&(e=n.toUpperCase()+e.substr(1)),u=y,(r=g).test(e)?e=e.replace(r,"$1$2"):u.test(e)&&(e=e.replace(u,"$1$2")),u=S,(r=v).test(e)?(a=r.exec(e),(r=d).test(a[1])&&(e=e.replace(r=x,""))):u.test(e)&&(s=(a=u.exec(e))[1],(u=p).test(s))&&(e=s,o=b,i=I,(u=w).test(e)?e+="e":o.test(e)?e=e.replace(r=x,""):i.test(e)&&(e+="e")),(r=E).test(e)&&(e=(s=(a=r.exec(e))[1])+"i"),(r=D).test(e)&&(s=(a=r.exec(e))[1],t=a[2],(r=d).test(s))&&(e=s+l[t]),(r=F).test(e)&&(s=(a=r.exec(e))[1],t=a[2],(r=d).test(s))&&(e=s+c[t]),u=_,(r=C).test(e)?(s=(a=r.exec(e))[1],(r=h).test(s)&&(e=s)):u.test(e)&&(s=(a=u.exec(e))[1]+a[2],(u=h).test(s))&&(e=s),(r=k).test(e)&&(s=(a=r.exec(e))[1],u=f,o=L,(r=h).test(s)||u.test(s)&&!o.test(s))&&(e=s),u=h,(r=N).test(e)&&u.test(e)&&(e=e.replace(r=x,"")),"y"==n&&(e=n.toLowerCase()+e.substr(1))),e},"stemmer"),m.stopWordFilter=function(e){return e&&!0!==m.stopWordFilter.stopWords[e]?e:void 0},m.clearStopWords=function(){m.stopWordFilter.stopWords={}},m.addStopWords=function(e){null!=e&&!1!==Array.isArray(e)&&e.forEach(function(e){m.stopWordFilter.stopWords[e]=!0},this)},m.resetStopWords=function(){m.stopWordFilter.stopWords=m.defaultStopWords},m.stopWordFilter.stopWords=m.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,do:!0,does:!0,either:!0,else:!0,ever:!0,every:!0,for:!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,if:!0,in:!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,this:!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,while:!0,who:!0,whom:!0,why:!0,will:!0,with:!0,would:!0,yet:!0,you:!0,your:!0},m.Pipeline.registerFunction(m.stopWordFilter,"stopWordFilter"),m.Pipeline.registerFunction(m.trimmer=function(e){if(null==e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},"trimmer"),(m.InvertedIndex=function(){this.root={docs:{},df:0}}).load=function(e){var t=new this;return t.root=e.root,t},m.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,o=0;o<=e.length-1;){var i=e[o];i in n||(n[i]={docs:{},df:0}),o+=1,n=n[i]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1)},m.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},m.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},m.InvertedIndex.prototype.getDocs=function(e){e=this.getNode(e);return null==e?{}:e.docs},m.InvertedIndex.prototype.getTermFrequency=function(e,t){e=this.getNode(e);return null!=e&&t in e.docs?e.docs[t].tf:0},m.InvertedIndex.prototype.getDocFreq=function(e){e=this.getNode(e);return null==e?0:e.df},m.InvertedIndex.prototype.removeToken=function(e,t){e&&null!=(e=this.getNode(e))&&t in e.docs&&(delete e.docs[t],--e.df)},m.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];t=t||[];if(null!=n||null!=(n=this.getNode(e)))for(var o in 0<n.df&&t.push(e),n)"docs"!==o&&"df"!==o&&this.expandToken(e+o,t,n[o]);return t},m.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},(m.Configuration=function(e,t){var n,e=e||"";if(null==t)throw new Error("fields should not be null");this.config={};try{n=JSON.parse(e),this.buildUserConfig(n,t)}catch(e){m.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(t)}}).prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},m.Configuration.prototype.buildUserConfig=function(e,t){var n,o,i="OR",r=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(r=e.expand||r),"fields"in e)for(var s in e.fields)-1<t.indexOf(s)?(o=r,null!=(n=e.fields[s]).expand&&(o=n.expand),this.config[s]={boost:n.boost||0===n.boost?n.boost:1,bool:n.bool||i,expand:o}):m.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,r,t)},m.Configuration.prototype.addAllFields2UserConfig=function(t,n,e){e.forEach(function(e){this.config[e]={boost:1,bool:t,expand:n}},this)},m.Configuration.prototype.get=function(){return this.config},m.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){for(var e,t=0;t<arguments.length;t++)~this.indexOf(e=arguments[t])||this.elements.splice(this.locationFor(e),0,e);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,o=n-t,i=t+Math.floor(o/2),r=this.elements[i];1<o;){if(r===e)return i;o=(n=e<r?i:n)-(t=r<e?i:t),i=t+Math.floor(o/2),r=this.elements[i]}return r===e?i:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,o=n-t,i=t+Math.floor(o/2),r=this.elements[i];1<o;)o=(n=e<r?i:n)-(t=r<e?i:t),i=t+Math.floor(o/2),r=this.elements[i];return e<r?i:r<e?i+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,o=0,i=this.length,r=e.length,s=this.elements,u=e.elements;!(i-1<n||r-1<o);)s[n]!==u[o]?s[n]<u[o]?n++:s[n]>u[o]&&o++:(t.add(s[n]),n++,o++);return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){for(var t,e=this.length>=e.length?(t=this,e):(t=e,this),n=t.clone(),o=0,i=e.toArray();o<i.length;o++)n.add(i[o]);return n},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},t=this,e=function(){return m},"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=m:t.elasticlunr=m}(),window.onload=function(){var u,e,l,c,h;document.body.contains(document.goSearch)&&(document.goSearch.onsubmit=function(){return goSearchNow()},u=document.getElementById("suggestions"),e=document.getElementById("searchinput"),document.addEventListener("keydown",inputFocus),document.addEventListener("click",function(e){u.contains(e.target)||u.classList.add("d-none")}),c=document.documentElement.getAttribute("lang").substring(0,2),"/"==(h=document.querySelector("meta[name='base']").getAttribute("content")).slice(-1)&&(h=h.slice(0,-1)),e.addEventListener("input",async function(){var n,e=this.value.trim(),o=(await(l=void 0===l?fetch(h+"/search_index."+c+".json").then(async function(e){return elasticlunr.Index.load(await e.json())}):l)).search(e,{bool:"OR",fields:{title:{boost:2},body:{boost:1}}}),i=u.childNodes,r=o.length,s=e.split(/\s+/);u.classList.remove("d-none"),o.forEach(function(e){""!==e.doc.body&&((n=document.createElement("div")).innerHTML="<a href><span></span><span></span></a>",a=n.querySelector("a"),t=n.querySelector("span:first-child"),d=n.querySelector("span:nth-child(2)"),a.href=e.ref,t.textContent=e.doc.title,d.innerHTML=function(e,t){var n=t.map(function(e){return elasticlunr.stemmer(e.toLowerCase())}),o=!1,i=0,r=[],s=e.toLowerCase().split(". ");for(p in s){var u,a=s[p].split(/[\s\n]/),l=8;for(u in a){if(0<(S=a[u]).length){for(var c in n)elasticlunr.stemmer(S).startsWith(n[c])&&(l=40,o=!0);r.push([S,l,i]),l=2}i=i+S.length+1}i+=1}if(0===r.length)return void 0!==e.length&&300<e.length?e.substring(0,300)+"...":e;for(var d=[],h=Math.min(r.length,30),f=0,p=0;p<h;p++)f+=r[p][1];d.push(f);for(p=0;p<r.length-h;p++)f=(f-=r[p][1])+r[p+h][1],d.push(f);var g=0;if(o)for(var m=0,p=d.length-1;0<=p;p--)m<d[p]&&(m=d[p],g=p);for(var y=[],v=r[g][2],p=g;p<g+h;p++){var S,x;v<(S=r[p])[2]&&(y.push(e.substring(v,S[2])),v=S[2]),40===S[1]&&y.push("<b>"),v=S[2]+S[0].length;40!==S[1]&&12<=S[0].length&&!/^[\x00-\xff]+$/.test(S[0])?(x=substringByByte(e.substring(S[2],v),12),y.push(x)):y.push(e.substring(S[2],v)),40===S[1]&&y.push("</b>")}return y.push("…"),y.join("")}(e.doc.body,s),u.appendChild(n))});for(;i.length>r;)u.removeChild(i[0])},!0),u.addEventListener("click",function(){for(;u.lastChild;)u.removeChild(u.lastChild);return!1},!0),document.goSearch.onsubmit=function(){return goSearchNow()})}; \ No newline at end of file
diff --git a/templates/base.html b/templates/base.html
index cb8d73f..31db9bf 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -66,6 +66,11 @@
</a></h2> </li>
{%- endfor -%}
{%- endif -%}
+ {%- if js_switcher -%}
+ {%- set icon_adjust=config.extra.icon_adjust | default(value="svgs adjust") -%}
+ <li class="js">{%- if icon_adjust -%}<i type="reset" id="mode" class="{{ icon_adjust }}"></i>{%- else -%}<i type="reset" id="mode" class="mode">&#9728;</i>{%- endif -%}</li>
+ {%- endif -%}
+ {%- endif -%}
{%- set language_count = 1 -%}
{%- for language_name, language in config.languages -%}
{%- set_global language_count = language_count + 1 -%}
@@ -87,11 +92,6 @@
{%- endif %}
</div></li>
{%- endif -%}
- {%- if js_switcher -%}
- {%- set icon_adjust=config.extra.icon_adjust | default(value="svgs adjust") -%}
- <li class="js">{%- if icon_adjust -%}<i type="reset" id="mode" class="{{ icon_adjust }}"></i>{%- else -%}<i type="reset" id="mode" class="mode">&#9728;</i>{%- endif -%}</li>
- {%- endif -%}
- {%- endif -%}
</ul>
</div>
{%- if config.build_search_index %}
diff --git a/templates/index.html b/templates/index.html
index 84314b1..ce224c0 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,3 +1,8 @@
+{#
+This Page Shows the Posts with a short summary on the index: example.com/
+This Template can also be used as the rendering template for Sections, eg: example.com/blog/ example.com/software/
+#}
+
{%- extends "base.html" %}
{%- block seo %}
@@ -54,12 +59,25 @@
{%- endfor %}
{{- macros::pagination(paginator=paginator, config=config) }}
</div>
- {%- if lang == config.default_language %}
- {%- set section_item = get_section(path="_index.md") %}
- {%- else %}
- {%- set section_item = get_section(path="_index." ~ lang ~ ".md") %}
- {%- endif %}
{%- if config.extra.recent | default(value=true) %}
+ {#- The following line is checking if the template is being used for the root or a section #}
+ {%- if current_path is matching("^(/[[:alpha:]][[:alpha:]])?(/page/[[:digit:]]+)?/$") %}
+ {%- set sec = "" %}
+ {%- else %}
+ {%- if lang == config.default_language %}
+ {%- set sec = current_path | trim_start_matches(pat="/") | split(pat="/page/") | slice(end=1) | join(sep="") | trim_end_matches(pat="/") %}
+ {%- set sec = sec ~ "/" %}
+ {%- else %}
+ {%- set sec = current_path | trim_start_matches(pat="/" ~ lang ~ "/") | split(pat="/page/") | slice(end=1) | join(sep="") | trim_end_matches(pat="/") %}
+ {%- set sec = sec ~ "/" %}
+ {%- endif %}
+ {%- endif %}
+
+ {%- if lang == config.default_language %}
+ {%- set section_item = get_section(path=sec ~ "_index.md") %}
+ {%- else %}
+ {%- set section_item = get_section(path=sec ~ "_index." ~ lang ~ ".md") %}
+ {%- endif %}
<div class="toc">
<div class="toc-sticky">
<h1><span class="s70">{%- if lang != config.default_language %}{{ trans(key="Recent_Posts" | safe, lang=lang) }}{% else %}Recent Posts{% endif %}</span></h1>
diff --git a/templates/macros/head.html b/templates/macros/head.html
index 8aa2128..5a7221c 100644
--- a/templates/macros/head.html
+++ b/templates/macros/head.html
@@ -1,7 +1,7 @@
{#- Theme Switcher Button to toggle between dark/light #}
{%- macro theme(config) %}
{%- if config.extra.js_switcher | default(value=true) %}
- {%- set js_theme=config.extra.js_theme | default(value="theme.min.js") -%}
+ {%- set js_theme=config.extra.js_theme | default(value="js/theme.min.js") -%}
{%- if js_theme %}
<script src="{{ get_url(path=js_theme, trailing_slash=false) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path=js_theme, sha_type=384, base64=true) | safe }}"{%- endif %}></script>
{%- endif %}
@@ -80,54 +80,81 @@
{%- if config.extra.js_bundle %}
- <script defer src="{{ get_url(path='abridge.min.js', trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='abridge.min.js', sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+ <script defer src="{{ get_url(path='js/abridge.min.js', trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='js/abridge.min.js', sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+
+ {%- if config.build_search_index %}
+ {%- if search_library == "elasticlunr" %}
+ {%- if lang != "en" %}
+ <script defer src="{{get_url(path='js/lunr.stemmer.support.min.js', trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='js/lunr.stemmer.support.min.js', sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+ <script defer src="{{get_url(path='js/lunr.' ~ lang ~ '.min.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='js/lunr.' ~ lang ~ '.min.js', sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+ {%- endif %}
+ {%- endif %}
+ {%- endif %}
{%- else %}
{%- if preStyle == true %}
- {%- set js_prestyle=config.extra.js_prestyle | default(value="prestyle.js") -%}
+ {%- set js_prestyle=config.extra.js_prestyle | default(value="js/prestyle.js") -%}
{%- if js_prestyle %}
<script defer src="{{ get_url(path=js_prestyle, trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path=js_prestyle, sha_type=384, base64=true) | safe }}"{%- endif %}></script>
{%- endif %}
{%- endif %}
{%- if config.extra.js_switcher | default(value=true) %}
- {%- set js_theme=config.extra.js_theme | default(value="theme.min.js") -%}
+ {%- set js_theme=config.extra.js_theme | default(value="js/theme.min.js") -%}
{%- if js_theme %}
- {%- set js_themeButton=config.extra.js_themeButton | default(value="theme_button.js") -%}
+ {%- set js_themeButton=config.extra.js_themeButton | default(value="js/theme_button.js") -%}
{%- if js_themeButton %}
<script defer src="{{ get_url(path=js_themeButton, trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path=js_themeButton, sha_type=384, base64=true) | safe }}"{%- endif %}></script>
{%- endif %}
{%- endif %}
{%- endif %}
- {%- set js_email=config.extra.js_email | default(value="email.js") -%}
+ {%- set js_email=config.extra.js_email | default(value="js/email.js") -%}
{%- if js_email %}
{%- if config.extra.mail_encode | default(value=true) %}
<script defer src="{{ get_url(path=js_email, trzailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path=js_email, sha_type=384, base64=true) | safe }}"{%- endif %}></script>
{%- endif %}
{%- endif %}
- {%- set js_codecopy=config.extra.js_codecopy | default(value="codecopy.js") -%}
+ {%- set js_codecopy=config.extra.js_codecopy | default(value="js/codecopy.js") -%}
{%- if js_codecopy %}
<script defer src="{{ get_url(path=js_codecopy, trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path=js_codecopy, sha_type=384, base64=true) | safe }}"{%- endif %}></script>
{%- endif %}
- {%- if config.build_search_index %}
{%- if search_library == "tinysearch" %}
- <script defer type="module" src="{{ get_url(path='tinysearch.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='tinysearch.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+ <script defer type="module" src="{{ get_url(path='js/search_tinysearch.min.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='js/search_tinysearch.min.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
{%- elif search_library == "stork" %}
- <script defer type="module" src="{{ get_url(path='search_stork.min.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='search_stork.min.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
- {%- else %}
- <script defer src="{{ get_url(path='elasticlunr.min.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='elasticlunr.min.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
- <script defer src="{{ get_url(path='search.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='search.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+ <script defer type="module" src="{{ get_url(path='js/search_stork.min.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='js/search_stork.min.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+ {%- elif config.build_search_index %}
- {%- if lang != "en" %}
- <script defer src="{{ get_url(path='lunr.stemmer.support.js', trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='lunr.stemmer.support.js', sha_type=384, base64=true) | safe }}"{%- endif %}></script>
- <script defer src="{{ get_url(path='lunr.' ~ lang ~ '.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='lunr.' ~ lang ~ '.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+ {%- set search_index_format="elasticlunr_json" -%}
+ {%- if config.search.index_format %}
+ {%- if config.search.index_format == "elasticlunr_javascript" %}
+ {%- set search_index_format="elasticlunr_javascript" -%}
+ {%- endif %}
{%- endif %}
+ {%- set uglyurls=config.extra.uglyurls | default(value=false) -%}
+ {%- if search_index_format == "elasticlunr_javascript" %}
+ <script defer src="{{ get_url(path='js/elasticlunr.min.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='js/elasticlunr.min.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+ <script defer src="{{ get_url(path='search_index.' ~ lang ~ '.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='search_index.' ~ lang ~ '.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+
+ {%- if uglyurls %}
+ <script defer src="{{ get_url(path='js/searchjavaugly.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='js/searchjavaugly.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+ {%- else %}
+ <script defer src="{{ get_url(path='js/searchjava.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='js/searchjava.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+ {%- endif %}
+
+ {%- else %}
+ <script defer src="{{ get_url(path='js/search_elasticlunr.min.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='js/search_elasticlunr.min.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
{%- endif %}
+
+ {%- if lang != "en" %}
+ <script defer src="{{ get_url(path='js/lunr.stemmer.support.min.js', trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='js/lunr.stemmer.support.min.js', sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+ <script defer src="{{ get_url(path='js/lunr.' ~ lang ~ '.min.js' , trailing_slash=false, cachebust=true) | safe }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path='js/lunr.' ~ lang ~ '.min.js' , sha_type=384, base64=true) | safe }}"{%- endif %}></script>
+ {%- endif %}
+
{%- endif %}
{%- endif %}
@@ -138,19 +165,19 @@
{#- https://github.com/KaTeX/KaTeX/tree/main/contrib/mathtex-script-type/ #}
{%- if config.extra.math or page.extra.math %}
-{%- set katex_bundle=config.extra.katex_bundle | default(value="katexbundle.min.js") -%}
+{%- set katex_bundle=config.extra.katex_bundle | default(value="js/katexbundle.min.js") -%}
{%- if katex_bundle %}
<script defer src="{{ get_url(path=katex_bundle, trailing_slash=false, cachebust=true) }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path=katex_bundle, sha_type=384, base64=true) | safe }}"{%- endif %}></script>
{%- else %}
- {%- set katex_js=config.extra.katex_js | default(value="katex.min.js") -%}
+ {%- set katex_js=config.extra.katex_js | default(value="js/katex.min.js") -%}
{%- if katex_js %}{%- if katex_js is matching("^http[s]?://") %}
<script defer src="{{ katex_js | safe }}"{%- if config.extra.integrity | default(value=true) and config.extra.katex_js_integrity %} integrity="{{ config.extra.katex_js_integrity | safe }}"{%- endif %} crossorigin="anonymous"></script>
{%- else %}
<script defer src="{{ get_url(path=katex_js, trailing_slash=false, cachebust=true) }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path=katex_js, sha_type=384, base64=true) | safe }}"{%- endif %}></script>
{%- endif %}{%- endif %}
- {%- set mathtex_js=config.extra.mathtex_js | default(value="mathtex-script-type.min.js") -%}
+ {%- set mathtex_js=config.extra.mathtex_js | default(value="js/mathtex-script-type.min.js") -%}
{%- if mathtex_js %}{%- if mathtex_js is matching("^http[s]?://") %}
<script defer src="{{ mathtex_js | safe }}"{%- if config.extra.integrity | default(value=true) and config.extra.mathtex_js_integrity %} integrity="{{ config.extra.mathtex_js_integrity | safe }}"{%- endif %} crossorigin="anonymous"></script>
{%- else %}
@@ -158,7 +185,7 @@
{%- endif %}{%- endif %}
{%- if config.extra.math_auto_render or page.extra.math_auto_render %}
- {%- set katex_autorender_js=config.extra.katex_autorender_js | default(value="katex-auto-render.min.js") -%}
+ {%- set katex_autorender_js=config.extra.katex_autorender_js | default(value="js/katex-auto-render.min.js") -%}
{%- if katex_autorender_js %}
{%- if katex_autorender_js is matching("^http[s]?://") %}
<script defer src="{{ katex_autorender_js | safe }}"{%- if config.extra.integrity | default(value=true) and config.extra.katex_autorender_js_integrity %} integrity="{{ config.extra.katex_autorender_js_integrity | safe }}"{%- endif %} crossorigin="anonymous"></script>
@@ -166,7 +193,7 @@
<script defer src="{{ get_url(path=katex_autorender_js, trailing_slash=false, cachebust=true) }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path=katex_autorender_js, sha_type=384, base64=true) | safe }}"{%- endif %}></script>
{%- endif %}
{%- endif %}
- {%- set katex_options=config.extra.katex_options | default(value="katexoptions.js") -%}
+ {%- set katex_options=config.extra.katex_options | default(value="js/katexoptions.js") -%}
{%- if katex_options %}
<script defer src="{{ get_url(path=katex_options, trailing_slash=false, cachebust=true) }}"{%- if config.extra.integrity | default(value=true) %} integrity="sha384-{{ get_hash(path=katex_options, sha_type=384, base64=true) | safe }}"{%- endif %}></script>
{%- endif %}
@@ -226,7 +253,7 @@
{#- page_images: using for the blog single template page -#}
{#- page_section: the blog single template page have to pass the parameter -#}
{#- is_404: using for the 404.html template -#}
-{%- macro seo( config, title="", title_addition="", description="", type="website", is_home=false, is_404=false, is_page=false, page_images="", page_section="", created_time="2021-07-04T07:07:00-07:00", updated_time="2021-07-04T07:07:00-07:00" ) %}
+{%- macro seo( config, title="", title_addition="", description="", type="website", is_home=false, is_404=false, is_page=false, page_images="", page_section="", created_time="2023-05-15T07:07:00-07:00", updated_time="2023-05-15T07:07:00-07:00" ) %}
{%- if is_404 -%}
<meta name="robots" content="noindex, follow" />
{%- else -%}
diff --git a/templates/posts.html b/templates/posts.html
index 92c07dc..13dc274 100644
--- a/templates/posts.html
+++ b/templates/posts.html
@@ -1,4 +1,7 @@
-{# This Page Shows the Posts Grouped by Year: example.com/posts/ #}
+{#
+This Page Shows the Posts Grouped by Year: example.com/posts/
+This Template can also be used as the rendering template for Sections, eg: example.com/blog/ example.com/software/
+#}
{% extends "base.html" %}
@@ -18,14 +21,30 @@
{%- endblock seo %}
{%- block content %}
+ {#- The following line is checking if the template is being used for the posts page or a section #}
+ {%- if current_path is matching("^(/[[:alpha:]][[:alpha:]])?/posts/$") %}
+ {%- set sec = "" %}
+ {%- else %}
+ {%- set langpath = "/" %}
+ {%- if lang != config.default_language %}
+ {%- set langpath = "/" ~ lang ~ "/" %}
+ {%- endif %}
+
+ {%- set sec = current_path | trim_start_matches(pat=langpath) | split(pat="/page/") | slice(end=1) | join(sep="") | trim_end_matches(pat="/") %}
+ {%- set sec = sec ~ "/" %}
+ {%- endif %}
+
{%- if lang == config.default_language %}
- {%- set section_item = get_section(path="_index.md") %}
+ {%- set section_item = get_section(path=sec ~ "_index.md") %}
{%- else %}
- {%- set section_item = get_section(path="_index." ~ lang ~ ".md") %}
+ {%- set section_item = get_section(path=sec ~ "_index." ~ lang ~ ".md") %}
{%- endif %}
<div>
+ {%- if section_item.title %}
+ <h2>{{ section_item.title }}</h2>
+ {%- endif %}
{%- for year, posts in section_item.pages | group_by(attribute="year") %}
- <h2>{{ year }}</h2>
+ {%- if section_item.title %}<h3>{{ year }}</h3>{%- else %}<h2>{{ year }}</h2>{%- endif %}
{%- for post in posts %}
<p><a href="{{ post.permalink | safe }}{%- if config.extra.uglyurls %}index.html{%- endif %}">{{ post.title }}</a> - <time datetime="{{ post.date }}">{{ post.date | date(format="%F") }}</time></p>
{%- endfor %}
diff --git a/theme.toml b/theme.toml
index 0d95b63..64f689b 100644
--- a/theme.toml
+++ b/theme.toml
@@ -2,7 +2,7 @@ name = "abridge"
description = "A fast and lightweight Zola theme using semantic html, a class-light abridge.css, and No JS."
license = "MIT"
homepage = "https://github.com/jieiku/abridge"
-min_version = "0.17.1"
+min_version = "0.17.3"
demo = "https://abridge.netlify.app/"
[extra]