diff --git a/.gitignore b/.gitignore
index 534b0b840..aac1325cf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,6 +15,7 @@ bin/
.DS_Store
.idea/
.vscode/
+.nova/
*.iml
# ENV
diff --git a/README.md b/README.md
index 5a193807b..1b52133fa 100644
--- a/README.md
+++ b/README.md
@@ -7,13 +7,10 @@ original V [docs.md](https://github.com/vlang/v/blob/master/doc/docs.md)
## External dependencies
-You'll need V, of course. Best to
+This project only requires V. Best to
[install it from source](https://github.com/vlang/v?tab=readme-ov-file#installing-v-from-source)
if you don't already have it.
-Make sure you have [sass](https://sass-lang.com/install/) installed
-locally to build the css files.
-
## Contributing
To setup the generator and contribute changes to it, do this once:
@@ -31,14 +28,20 @@ To build the documentation, after the setup, run the following commands:
```shell
v run .
```
-This will download the latest version
+This will download the latest version
of [docs.md](https://github.com/vlang/v/edit/master/doc/docs.md),
then it will regenerate the documentation from it, and save it in the `output`
directory.
## Testing the output
+
+Use V to serve your local copy of the documentation.
+
```shell
v -e 'import net.http.file; file.serve(folder: "output/")'
```
-Now load http://localhost:4001/ in your browser.
+
+The line of code executed will start a basic web server with the documentation created in the "outputs" folder.
+
+Access the documentation on your browser using this url http://localhost:4001/.
diff --git a/main.v b/main.v
index 2642ad8d5..84251796f 100644
--- a/main.v
+++ b/main.v
@@ -20,7 +20,8 @@ fn main() {
commit_res := os.execute_or_exit('git ls-remote -h https://github.com/vlang/v.git refs/heads/master')
latest_v_commit_hash := commit_res.output.all_before('\t')
- update_sass()
+ //Removed need for sass, using css variables
+ //update_sass()
mut ctx := Context{
full_text: response.body
@@ -39,11 +40,18 @@ mut:
}
fn (mut ctx Context) write_mapping() ! {
- content := '
-const titles_to_fnames = ${json.encode_pretty(ctx.titles_to_fnames)};
-const fnames = ${json.encode_pretty(ctx.pages)};
-'
- write_output_file('assets/scripts/titles_to_fnames.js', content)!
+ js_file_index := '
+ // Lookups of sections to files
+ vdocs.titles_to_fnames = ${json.encode_pretty(ctx.titles_to_fnames)};
+ vdocs.fnames = ${json.encode_pretty(ctx.pages)};'
+
+ js_src := os.read_file('templates/assets/scripts/v-docs.js') or {
+ eprintln('Failed to read file: $err')
+ return
+ }
+
+ write_output_file('assets/scripts/v-docs.js', js_src + js_file_index)!
+
eprintln('> Total titles: ${ctx.titles_to_fnames.len}')
eprintln('> HTML pages: ${ctx.pages.len}')
}
diff --git a/sass.v b/sass.v
deleted file mode 100644
index 0d979938e..000000000
--- a/sass.v
+++ /dev/null
@@ -1,22 +0,0 @@
-module main
-
-import os
-
-fn update_sass() {
- // Note: sass is https://sass-lang.com/dart-sass/, while sassc is https://github.com/sass/sassc .
- // On the FreeBSD vps, where the documentation is generated, *only `sassc` is available* natively,
- // and the `sass` tool, does not have an easily installable prebuilt native version for FreeBSD,
- // only a slower transpiled to JS version, installed through `npm install -g sass`.
- //
- // In comparison, they both produce nearly equal output with --style=expanded , except for:
- // a) `transition: fill 0.25s;` vs `transition: fill .25s;`
- // b) some newlines at the end of each CSS rule
- // c) style.css.map is different.
- sass_cmd := 'sassc --sourcemap=auto --style=expanded templates/assets/styles/style.scss templates/assets/styles/style.css'
- // sass_cmd := 'sass --style=expanded templates/assets/styles/style.scss templates/assets/styles/style.css'
- res := os.system(sass_cmd)
- if res != 0 {
- eprintln('sass compilation failed, cmd: `${sass_cmd}`')
- exit(1)
- }
-}
diff --git a/templates/assets/scripts/cm-lang-v.js b/templates/assets/scripts/cm-lang-v.js
new file mode 100644
index 000000000..ee6e402df
--- /dev/null
+++ b/templates/assets/scripts/cm-lang-v.js
@@ -0,0 +1,617 @@
+
+/*
+ V-Lang Language Mode for CodeMirror
+*/
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+
+const baseAttributes = [
+ "params", "noinit", "required", "skip", "assert_continues",
+ "unsafe", "manualfree", "heap", "nonnull", "primary", "inline",
+ "direct_array_access", "live", "flag", "noinline", "noreturn", "typedef", "console",
+ "sql", "table", "deprecated", "deprecated_after", "export", "callconv"
+];
+const baseModules = [
+ "arrays",
+ "benchmark", "bitfield",
+ "cli", "clipboard", "compress", "context", "crypto",
+ "darwin", "datatypes", "dl", "dlmalloc",
+ "encoding", "eventbus",
+ "flag", "fontstash",
+ "gg", "gx",
+ "hash",
+ "io",
+ "js", "json",
+ "log",
+ "math", "mssql", "mysql",
+ "net",
+ "orm", "os",
+ "pg", "picoev", "picohttpparser",
+ "rand", "readline", "regex", "runtime",
+ "semver", "sokol", "sqlite", "stbi", "strconv", "strings", "sync", "szip",
+ "term", "time", "toml",
+ "v", "vweb",
+ "x",
+];
+const word = "[\\w_]+";
+//[key: value]
+const keyValue = `(${word}: ${word})`;
+
+// [if expr ?]
+const ifAttributesRegexp = new RegExp(`^if ${word} \\??]`);
+// [key: value; key: value]
+const keyValueAttributesRegexp = new RegExp(`^((${keyValue})(; )?){2,}]$`);
+const simpleAttributesRegexp = new RegExp(`^(${baseAttributes.join("|")})]$`);
+const singleKeyValueAttributesRegexp = new RegExp(`^${keyValue}]$`);
+const severalSingleKeyValueAttributesRegexp = new RegExp(`^(${baseAttributes.join("|")}(; ?)?){2,}]$`);
+
+class Context {
+ constructor(
+ indentation,
+ column,
+ type,
+ align,
+ prev,
+ knownImports = new Set()
+ ) {
+ this.indentation = indentation
+ this.column = column
+ this.type = type
+ this.align = align
+ this.prev = prev
+ this.knownImports = knownImports
+ }
+
+ /**
+ * Whenever current position inside a string.
+ */
+ insideString = false
+
+ /**
+ * Current quotation mark.
+ * Valid only when insideString is true.
+ */
+ stringQuote = null
+
+ /**
+ * Whenever next token expected to be an import name.
+ * Used for highlighting import names in import statements.
+ */
+ expectedImportName = false
+}
+
+const keywords = new Set([
+ "as",
+ "asm",
+ "assert",
+ "atomic",
+ "break",
+ "const",
+ "continue",
+ "defer",
+ "else",
+ "enum",
+ "fn",
+ "for",
+ "go",
+ "goto",
+ "if",
+ "implements",
+ "import",
+ "in",
+ "interface",
+ "is",
+ "isreftype",
+ "lock",
+ "match",
+ "module",
+ "mut",
+ "none",
+ "or",
+ "pub",
+ "return",
+ "rlock",
+ "select",
+ "shared",
+ "sizeof",
+ "static",
+ "struct",
+ "spawn",
+ "type",
+ "typeof",
+ "union",
+ "unsafe",
+ "volatile",
+ "__global",
+ "__offsetof"
+])
+
+const pseudoKeywords = new Set(["sql", "chan", "thread"])
+
+const hashDirectives = new Set(["#flag", "#include", "#pkgconfig"])
+
+const atoms = new Set([
+ "true",
+ "false",
+ "nil",
+ "print",
+ "println",
+ "exit",
+ "panic",
+ "error",
+ "dump"
+])
+
+const builtinTypes = new Set([
+ "bool",
+ "string",
+ "i8",
+ "i16",
+ "int",
+ "i32",
+ "i64",
+ "i128",
+ "u8",
+ "u16",
+ "u32",
+ "u64",
+ "u128",
+ "rune",
+ "f32",
+ "f64",
+ "isize",
+ "usize",
+ "voidptr",
+ "any"
+])
+
+
+CodeMirror.defineMode("v", config => {
+ const indentUnit = config.indentUnit ?? 0
+
+ const isOperatorChar = /[+\-*&^%:=<>!?|\/]/
+
+ let curPunc = null
+
+ function eatIdentifier(stream) {
+ stream.eatWhile(/[\w$_\xa1-\uffff]/)
+ return stream.current()
+ }
+
+ function tokenBase(stream, state) {
+ const ch = stream.next()
+ if (ch === null) {
+ return null
+ }
+
+ if (state.context.insideString && ch === "}") {
+ stream.eat("}")
+ state.tokenize = tokenString(state.context.stringQuote)
+ return "end-interpolation"
+ }
+
+ if (ch === '"' || ch === "'" || ch === "`") {
+ state.tokenize = tokenString(ch)
+ return state.tokenize(stream, state)
+ }
+
+ // r'foo' or c'foo'
+ // r"foo" or c"foo"
+ if (
+ (ch === "r" || ch === "c") &&
+ (stream.peek() == '"' || stream.peek() == "'")
+ ) {
+ const next = stream.next()
+ if (next === null) {
+ return "string"
+ }
+ state.tokenize = tokenRawString(next)
+ return "string"
+ }
+
+ if (ch === ".") {
+ if (!stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/)) {
+ return "operator"
+ }
+ }
+
+ // probably attribute
+ // [attr]
+ // [attr: value]
+ // [attr1; attr2]
+ if (ch === "[") {
+ // [unsafe]
+ if (stream.match(simpleAttributesRegexp)) {
+ return "attribute"
+ }
+
+ // [sql: foo]
+ if (stream.match(singleKeyValueAttributesRegexp)) {
+ return "attribute"
+ }
+
+ // [sql; foo]
+ if (stream.match(severalSingleKeyValueAttributesRegexp)) {
+ return "attribute"
+ }
+
+ // [attr: value; attr: value]
+ // [attr: value; attr]
+ if (stream.match(keyValueAttributesRegexp)) {
+ return "attribute"
+ }
+
+ // match `[if some ?]`
+ if (stream.match(ifAttributesRegexp)) {
+ return "attribute"
+ }
+ }
+
+ if (/[\d.]/.test(ch)) {
+ if (ch === "0") {
+ stream.match(/^[xX][0-9a-fA-F_]+/) ||
+ stream.match(/^o[0-7_]+/) ||
+ stream.match(/^b[0-1_]+/)
+ } else {
+ stream.match(/^[0-9_]*\.?[0-9_]*([eE][\-+]?[0-9_]+)?/)
+ }
+ return "number"
+ }
+ if (/[\[\]{}(),;:.]/.test(ch)) {
+ curPunc = ch
+ return null
+ }
+ if (ch === "/") {
+ if (stream.eat("*")) {
+ state.tokenize = tokenComment
+ return tokenComment(stream, state)
+ }
+ if (stream.eat("/")) {
+ stream.skipToEnd()
+ return "comment"
+ }
+ }
+ if (isOperatorChar.test(ch)) {
+ stream.eatWhile(isOperatorChar)
+ return "operator"
+ }
+
+ if (ch === "@") {
+ eatIdentifier(stream)
+ return "at-identifier"
+ }
+
+ if (ch === "$") {
+ const ident = eatIdentifier(stream).slice(1)
+ if (keywords.has(ident)) {
+ return "keyword"
+ }
+
+ return "compile-time-identifier"
+ }
+
+ stream.backUp(2)
+ const wasDot = stream.next() === "."
+ stream.next()
+
+ const cur = eatIdentifier(stream)
+ if (cur === "import") {
+ state.context.expectedImportName = true
+ }
+
+ if (keywords.has(cur)) return "keyword"
+ if (pseudoKeywords.has(cur)) return "keyword"
+ if (atoms.has(cur)) return "atom"
+ if (hashDirectives.has(cur)) return "hash-directive"
+
+ if (!wasDot) {
+ // don't highlight `foo.int()`
+ // ^^^ as builtin
+ if (builtinTypes.has(cur)) return "builtin"
+ }
+
+ if (cur.length > 0 && cur[0].toUpperCase() === cur[0]) {
+ return "type"
+ }
+
+ const next = stream.peek()
+ if (next === "(" || next === "<") {
+ return "function"
+ }
+
+ if (next === "[") {
+ stream.next()
+ const after = stream.next()
+ stream.backUp(2)
+ if (after != null && after.match(/[A-Z]/i)) {
+ return "function"
+ }
+ }
+
+ // highlight only last part
+ // example:
+ // import foo.boo
+ // ^^^ - only this part will be highlighted
+ if (state.context.expectedImportName && stream.peek() !== ".") {
+ state.context.expectedImportName = false
+ if (state.context.knownImports === undefined) {
+ state.context.knownImports = new Set()
+ }
+ state.context.knownImports.add(cur)
+ return "import-name"
+ }
+
+ if (wasDot) {
+ return "property"
+ }
+
+ // highlight only identifier with dot after it
+ // example:
+ // import foo
+ // import bar
+ //
+ // foo.bar
+ // ^^^ - only this part will be highlighted
+ if (state.context.knownImports.has(cur) && stream.peek() == ".") {
+ return "import-name"
+ }
+
+ return "variable"
+ }
+
+ function tokenLongInterpolation(stream, state) {
+ if (stream.match("}")) {
+ state.tokenize = tokenString(state.context.stringQuote)
+ return "end-interpolation"
+ }
+ state.tokenize = tokenBase
+ return state.tokenize(stream, state)
+ }
+
+ function tokenShortInterpolation(stream, state) {
+ const ch = stream.next()
+ if (ch === " ") {
+ state.tokenize = tokenString(state.context.stringQuote)
+ return state.tokenize(stream, state)
+ }
+ if (ch === ".") {
+ return "operator"
+ }
+
+ const ident = eatIdentifier(stream)
+ if (ident[0].toLowerCase() === ident[0].toUpperCase()) {
+ state.tokenize = tokenString(state.context.stringQuote)
+ return state.tokenize(stream, state)
+ }
+
+ const next = stream.next()
+ stream.backUp(1)
+ if (next === ".") {
+ state.tokenize = tokenShortInterpolation
+ } else {
+ state.tokenize = tokenString(state.context.stringQuote)
+ }
+
+ return "variable"
+ }
+
+ function tokenNextInterpolation(stream, state) {
+ let next = stream.next()
+ if (next === "$" && stream.eat("{")) {
+ state.tokenize = tokenLongInterpolation
+ return "start-interpolation"
+ }
+ if (next === "$") {
+ state.tokenize = tokenShortInterpolation
+ return "start-interpolation"
+ }
+
+ return "string"
+ }
+
+ function tokenNextEscape(stream, state) {
+ let next = stream.next()
+ if (next === "\\") {
+ stream.next()
+ state.tokenize = tokenString(state.context.stringQuote)
+ // we already know that next char is valid escape
+ return "valid-escape"
+ }
+
+ return "string"
+ }
+
+ function isValidEscapeChar(ch) {
+ return (
+ ch === "n" ||
+ ch === "t" ||
+ ch === "r" ||
+ ch === "\\" ||
+ ch === '"' ||
+ ch === "'" ||
+ ch === "0"
+ )
+ }
+
+ function tokenString(quote) {
+ return function(stream, state) {
+ state.context.insideString = true
+ state.context.stringQuote = quote
+
+ let next = ""
+ let escaped = false
+ let end = false
+
+ while ((next = stream.next()) != null) {
+ if (next === quote && !escaped) {
+ end = true
+ break
+ }
+ if (next === "$" && !escaped && stream.eat("{")) {
+ state.tokenize = tokenNextInterpolation
+ stream.backUp(2)
+ return "string"
+ }
+ if (next === "$" && !escaped) {
+ state.tokenize = tokenNextInterpolation
+ stream.backUp(1)
+ return "string"
+ }
+ if (escaped && isValidEscapeChar(next)) {
+ stream.backUp(2)
+ state.tokenize = tokenNextEscape
+ return "string"
+ }
+ escaped = !escaped && next === "\\"
+ }
+
+ if (end || escaped) {
+ state.tokenize = tokenBase
+ }
+
+ state.context.insideString = false
+ state.context.stringQuote = null
+ return "string"
+ }
+ }
+
+ function tokenRawString(quote) {
+ return function(stream, state) {
+ state.context.insideString = true
+ state.context.stringQuote = quote
+
+ let next = ""
+ let escaped = false
+ let end = false
+
+ while ((next = stream.next()) != null) {
+ if (next === quote && !escaped) {
+ end = true
+ break
+ }
+ escaped = !escaped && next === "\\"
+ }
+
+ if (end || escaped) {
+ state.tokenize = tokenBase
+ }
+
+ state.context.insideString = false
+ state.context.stringQuote = null
+ return "string"
+ }
+ }
+
+ function tokenComment(stream, state) {
+ let maybeEnd = false
+ let ch
+ while ((ch = stream.next())) {
+ if (ch === "/" && maybeEnd) {
+ state.tokenize = tokenBase
+ break
+ }
+ maybeEnd = ch === "*"
+ }
+ return "comment"
+ }
+
+ function pushContext(state, column, type) {
+ return (state.context = new Context(
+ state.indention,
+ column,
+ type,
+ null,
+ state.context,
+ state.context.knownImports
+ ))
+ }
+
+ function popContext(state) {
+ if (!state.context.prev) return
+ const t = state.context.type
+ if (t === ")" || t === "]" || t === "}")
+ state.indention = state.context.indentation
+ state.context = state.context.prev
+ return state.context
+ }
+
+ return {
+ startState: function() {
+ return {
+ tokenize: null,
+ context: new Context(0, 0, "top", false),
+ indention: 0,
+ startOfLine: true
+ }
+ },
+
+ token: function(stream, state) {
+ const ctx = state.context
+ if (stream.sol()) {
+ if (ctx.align == null) {
+ ctx.align = false
+ }
+ state.indention = stream.indentation()
+ state.startOfLine = true
+ }
+ if (stream.eatSpace()) {
+ return null
+ }
+ curPunc = null
+ const style = state.tokenize || tokenBase(stream, state)
+ if (style === "comment") {
+ return style
+ }
+ if (ctx.align == null) {
+ ctx.align = true
+ }
+
+ if (curPunc === "{") pushContext(state, stream.column(), "}")
+ else if (curPunc === "[") pushContext(state, stream.column(), "]")
+ else if (curPunc === "(") pushContext(state, stream.column(), ")")
+ else if (curPunc === "}" && ctx.type === "}") popContext(state)
+ else if (curPunc === ctx.type) popContext(state)
+ state.startOfLine = false
+ return style
+ },
+
+ indent: function(state, textAfter) {
+ if (state.tokenize !== tokenBase && state.tokenize != null) {
+ return 0
+ }
+
+ if (state.context.type == "top") {
+ return 0
+ }
+
+ const ctx = state.context
+ const firstChar = textAfter.charAt(0)
+
+ const closing = firstChar === ctx.type
+ if (ctx.align) {
+ return ctx.column + (closing ? 0 : 1)
+ }
+
+ return ctx.indentation + (closing ? 0 : indentUnit)
+ },
+
+ // @ts-ignore
+ electricChars: "{}):",
+ // @ts-ignore
+ closeBrackets: "()[]{}''\"\"``",
+ fold: "brace",
+ blockCommentStart: "/*",
+ blockCommentEnd: "*/",
+ lineComment: "//"
+ }
+})
+
+CodeMirror.defineMIME("text/x-v", "v");
+
+});
diff --git a/templates/assets/scripts/search.js b/templates/assets/scripts/search.js
deleted file mode 100644
index ef0d1ecb9..000000000
--- a/templates/assets/scripts/search.js
+++ /dev/null
@@ -1,145 +0,0 @@
-const original_docs_md_url = 'https://github.com/vlang/v/blob/master/doc/docs.md';
-const search_source_url = 'https://docs.vlang.io/assets/docs.md';
-let file_content = null;
-
-// Function to fetch and cache the file content
-async function fetchFileContent() {
- try {
- const response = await fetch(search_source_url);
- if (!response.ok) {
- throw new Error('Network response was not ok ' + response.statusText);
- }
- file_content = await response.text();
- } catch (error) {
- console.error('Failed to fetch file content:', error);
- }
-}
-
-// Function to parse the markdown content and create a map of sections
-function parseMarkdown(content) {
- const lines = content.split('\n');
- const sections = {};
- let currentSection = '';
-
- lines.forEach(line => {
- const sectionMatch = line.match(/^##+\s+(.+)/); // Match headers (##, ###, etc.)
- if (sectionMatch) {
- currentSection = sectionMatch[1];
- sections[currentSection] = [];
- } else if (currentSection) {
- sections[currentSection].push(line);
- }
- });
-
- return sections;
-}
-
-// Function to search through the cached file content and map results to sections
-function searchFileContent(query) {
- if (!file_content) {
- return 'File content not loaded. Please try again later.';
- }
-
- const sections = parseMarkdown(file_content);
- const results = [];
- const regex = new RegExp(query, 'gi');
-
- for (const section in sections) {
- const sectionContent = sections[section].join('\n');
- const match = sectionContent.match(regex);
- if (match) {
- results.push({ section, snippet: getSnippet(sectionContent, match[0]) });
- }
- }
-
- // Filter out the "Table of Contents" section
- return results.filter(result => result.section.toLowerCase() !== 'table of contents');
-}
-
-// Function to get a snippet of text around the first match
-function getSnippet(content, match) {
- const index = content.indexOf(match);
- const snippetLength = 100;
- const start = Math.max(index - snippetLength / 2, 0);
- const end = Math.min(index + snippetLength / 2, content.length);
- return content.substring(start, end).replace(/\n/g, ' ') + '...';
-}
-
-// Function to create links to the relevant sections in the docs
-function createResultLinks(results) {
- if (typeof results === 'string') {
- return results;
- }
-
- return results.map(result => {
- const sectionLink = sectionToLink(result.section);
- return `
-
- `;
- }).join('');
-}
-
-// Helper function to convert section titles to links
-function sectionToLink(section) {
- const fixed_url = titles_to_fnames[ section ];
- if (fixed_url) { return fixed_url; }
- const existing_html_page = fnames[ section ];
- if (existing_html_page) { return existing_html_page; }
- // try with a simpler normalized version of the section title:
- const slug = section.toLowerCase().replace(/\s+/g, '-').replace(/[^\w-]+/g, '')
- const sfixed_url = titles_to_fnames[ slug ];
- if (sfixed_url) { return sfixed_url; }
- const sexisting_html_page = fnames[ slug ];
- if (sexisting_html_page) { return sexisting_html_page; }
- // probably a 3rd level or lower title, that currently has no reverse mapping; redirect to the main docs.md:
- return `${original_docs_md_url}#${slug}`;
-}
-
-function display_search_results(how) {
- document.getElementById('searchResults').style.display = how;
-}
-
-async function handleSearch() {
- const query = document.getElementById('searchInput').value;
- const resultsElement = document.getElementById('searchResults');
- if (!file_content) {
- await fetchFileContent();
- }
- const results = searchFileContent(query);
- resultsElement.innerHTML = createResultLinks(results);
- display_search_results("block");
-}
-
-// Initialize the search functionality when the DOM is fully loaded
-document.addEventListener('DOMContentLoaded', () => {
- const searchInput = document.getElementById('searchInput');
- const searchKeys = document.getElementById('searchKeys');
- searchKeys.innerHTML = (navigator.platform.includes('Mac') ? '⌘' : 'Ctrl') + ' K';
- document.addEventListener('keydown', (event) => {
- if ((event.ctrlKey || event.metaKey) && event.key === 'k') {
- event.preventDefault();
- searchInput.focus();
- }
- });
- searchInput.onfocus = () => searchKeys.style.display = 'none';
- searchInput.onblur = () => searchKeys.style.display = 'block';
- searchInput.onkeydown = (event) => {
- if (event.key === 'Enter') {
- handleSearch();
- } else if (event.key === 'Escape') {
- if (document.getElementById('searchResults').style.display === 'none') {
- searchInput.blur();
- return
- }
- display_search_results("none");
- }
- };
- document.getElementById('searchButton').onclick(handleSearch);
-});
-
-window.onbeforeunload = function () {
- display_search_results("none");
-}
diff --git a/templates/assets/scripts/theme.js b/templates/assets/scripts/theme.js
deleted file mode 100644
index 544fb7336..000000000
--- a/templates/assets/scripts/theme.js
+++ /dev/null
@@ -1,43 +0,0 @@
-const playgrounds = [];
-
-document.addEventListener('DOMContentLoaded', () => {
- const theme = localStorage.getItem("theme");
- if (theme) {
- setTheme(theme);
- } else {
- const theme = document.querySelector("html").getAttribute("data-theme");
-
- localStorage.setItem("theme", theme);
- setTheme(theme);
- }
-
- const changeThemeButton = document.querySelector(".js-change-theme__action");
- changeThemeButton.addEventListener("click", () => {
- const currentTheme = document.documentElement.getAttribute("data-theme");
- const newTheme = currentTheme === "dark" ? "light" : "dark";
-
- setTheme(newTheme);
- });
-});
-
-function setTheme(newTheme) {
- const changeThemeButton = document.querySelector(".js-change-theme__action");
- document.documentElement.setAttribute("data-theme", newTheme);
- localStorage.setItem("theme", newTheme);
-
- const svgSun = changeThemeButton.querySelector(".sun");
- const svgMoon = changeThemeButton.querySelector(".moon");
- if (newTheme === "dark") {
- svgSun.style.display = "block";
- svgMoon.style.display = "none";
- } else {
- svgSun.style.display = "none";
- svgMoon.style.display = "block";
- }
-
- if (playgrounds !== undefined) {
- playgrounds.forEach(playground => {
- playground.setTheme(newTheme);
- });
- }
-}
diff --git a/templates/assets/scripts/v-docs.js b/templates/assets/scripts/v-docs.js
new file mode 100644
index 000000000..700b0a9e3
--- /dev/null
+++ b/templates/assets/scripts/v-docs.js
@@ -0,0 +1,593 @@
+// Function to fetch and cache the file content
+async function fetchFileContent(file_url) {
+ try {
+ const response = await fetch(file_url);
+ if (!response.ok) {
+ throw new Error('Network response was not ok ' + response.statusText);
+ }
+ return await response.text();
+ } catch (error) {
+ console.error('Failed to fetch file content:', error);
+ return '';
+ }
+
+}
+
+
+var vdocs = {
+ config: {
+ url_docs_md_original: 'https://github.com/vlang/v/blob/master/doc/docs.md',
+ url_docs_md_full_source: 'https://docs.vlang.io/assets/docs.md',
+ url_playground: 'https://play.vlang.io'
+ },
+ hydrate: function(){
+ this.ui.hydrateTheme();
+ this.ui.hydrateSidebar();
+ this.ui.hydrateSearch();
+ vdocs.examples.init();
+ },
+};
+
+vdocs.ui = {
+ btnChangeTheme: null,
+ currentTheme: 'dark',
+
+ tocPanel: null,
+ sidebar: null,
+ hydrateSidebar: function(){
+ this.sidebar = document.getElementById("sidebar-main");
+ this.tocPanel = document.getElementById("topics");
+
+ document.querySelector(".sidebar-open-btn").addEventListener("click", (event) => {
+ this.sidebar.style.setProperty('display', 'block')
+ })
+
+ document.querySelector(".sidebar-close-btn").addEventListener("click", (event) => {
+ this.sidebar.style.setProperty('display', 'none')
+ })
+
+ //scroll to show selected topic
+ const target = document.querySelector('.nav-entry.is-selected');
+ target.scrollIntoView({ behavior: 'smooth', block: 'center' });
+
+ },
+ hydrateTheme: function(){
+ this.btnChangeTheme = document.querySelector("header .change-theme");
+ this.currentTheme = document.querySelector("html").getAttribute("data-theme");
+
+ const theme = localStorage.getItem("theme");
+ if (theme) {
+ this.setTheme(theme);
+ } else {
+ this.setTheme(this.currentTheme);
+ }
+
+
+ this.btnChangeTheme.addEventListener("click", () => {
+ const new_theme = this.currentTheme =='dark' ? 'light': 'dark';
+ localStorage.setItem("theme", new_theme);
+ this.setTheme(new_theme);
+ });
+ },
+ setTheme: function(newTheme) {
+ this.currentTheme = newTheme;
+ document.querySelector("html").setAttribute("data-theme", newTheme);
+ const svgSun = this.btnChangeTheme.querySelector(".sun");
+ const svgMoon = this.btnChangeTheme.querySelector(".moon");
+ if (newTheme === "dark") {
+ svgSun.style.display = "block";
+ svgMoon.style.display = "none";
+ } else {
+ svgSun.style.display = "none";
+ svgMoon.style.display = "block";
+ }
+
+ vdocs.examples.onThemeChanged(newTheme);
+
+ },
+ searchInput: null,
+ searchResults: null,
+ searchVisible: false,
+ hydrateSearch: function(){
+ // Initialize the search functionality when the DOM is fully loaded
+ this.searchInput = document.getElementById('search-input');
+
+ const searchKeys = document.getElementById('search-kb-shortcut');
+ searchKeys.innerHTML = (navigator.platform.includes('Mac') ? '⌘' : 'Ctrl') + ' K';
+
+ var handleDocKey = (e)=>{
+ const key = event.key; // const {key} = event; in ES6+
+ if (key === "Escape") {
+ this.hideSearchResults();
+ }
+ };
+
+ const closeBtn = document.getElementById('search-results-close');
+ closeBtn.addEventListener('click', (event) => {
+ event.preventDefault();
+ this.hideSearchResults();
+ });
+
+ document.addEventListener('keydown', (event) => {
+
+ if ((event.ctrlKey || event.metaKey) && event.key === 'k') {
+ event.preventDefault();
+ this.searchInput.value = '';
+ this.searchInput.focus();
+ }else if (event.key === "Escape" && this.searchVisible) {
+ event.preventDefault();
+ this.hideSearchResults();
+ }
+ });
+
+ this.searchResults = document.getElementById('search-results');
+ this.searchResultsContainer = document.getElementById('search-result-container');
+
+ this.searchInput.onfocus = () => searchKeys.style.display = 'none';
+ this.searchInput.onblur = () => searchKeys.style.display = 'block';
+ this.searchInput.onkeydown = (event) => {
+
+ if (event.key === 'Enter') {
+ this.handleSearch();
+ } else if (event.key === 'Escape') {
+ if (this.searchResults.style.display === 'none') {
+ this.searchInput.blur();
+ return
+ }
+ this.hideSearchResults();
+ }
+ };
+
+ document.getElementById('search-button').addEventListener('click', (evt)=>{
+ this.handleSearch();
+ });
+
+ window.onbeforeunload = () => {
+ this.hideSearchResults("none");
+ };
+ },
+ helperGetLinkToSection: function(section){
+
+ const fixed_url = vdocs.titles_to_fnames[ section ];
+ if (fixed_url) { return fixed_url; }
+
+ const existing_html_page = vdocs.fnames[ section ];
+ if (existing_html_page) { return existing_html_page; }
+
+ // try with a simpler normalized version of the section title:
+ const slug = section.toLowerCase().replace(/\s+/g, '-').replace(/[^\w-]+/g, '');
+
+ const sfixed_url = vdocs.titles_to_fnames[ slug ];
+ if (sfixed_url) { return sfixed_url; }
+
+ const sexisting_html_page = vdocs.fnames[ slug ];
+ if (sexisting_html_page) { return sexisting_html_page; }
+
+ // probably a 3rd level or lower title, that currently has no reverse mapping; redirect to the main docs.md:
+ return vdocs.config.url_docs_md_original + '#' + slug;
+ },
+ hideSearchResults: function(){
+ this.searchVisible = false;
+
+ this.sidebar.classList.remove("search-results-open");
+ },
+ handleSearch: function(){
+ vdocs.search.topic( this.searchInput.value, (items) => this.showSearchResults(items) );
+
+ },
+ showSearchResults: function(items){
+
+ if (typeof items === 'string') {
+ return items;
+ }
+
+ let rows = items.map(item => {
+ const sectionLink = this.helperGetLinkToSection(item.section);
+
+ return `
+
+
${item.section}
+
${item.snippet}
+
`;
+ }).join('');
+
+ this.searchVisible = true;
+ this.searchResultsContainer.innerHTML = rows;
+ this.sidebar.classList.add("search-results-open");
+ },
+
+};
+
+vdocs.search = {
+ source_cache: null,
+
+ topic: function(query, onDone){
+
+ if(!this.source_cache){
+ console.log('loading docs cache from "%s"...', vdocs.config.url_docs_md_full_source);
+ fetch(vdocs.config.url_docs_md_full_source).then((resp)=>{
+ return resp.text();
+ }).then((data)=>{
+ this.source_cache = data;
+ this.findTopic(query, onDone);
+ }).catch(function (err) {
+ // There was an error
+ console.warn('Failed to fetch search source.', err);
+ });
+
+ return;
+ }
+
+ this.findTopic(query, onDone);
+ },
+ findTopic: function(query, onDone){
+ if (!this.source_cache) {
+ return 'File content not loaded. Please try again later.';
+ }
+
+ const sections = this.parseMarkdown(this.source_cache);
+ const results = [];
+ const regex = new RegExp(query, 'gi');
+
+ for (const section in sections) {
+ const sectionContent = sections[section].join('\n');
+ const match = sectionContent.match(regex);
+ if (match) {
+ results.push({ section, snippet: this.getSnippet(sectionContent, match[0]) });
+ }
+ }
+
+ // Filter out the "Table of Contents" section
+ if(onDone){
+ let items = results.filter(result => result.section.toLowerCase() !== 'table of contents');
+ onDone(items);
+ }
+
+ },
+ // Function to parse the markdown content and create a map of sections
+ parseMarkdown: function(content) {
+ const lines = content.split('\n');
+ const sections = {};
+ let currentSection = '';
+
+ lines.forEach(line => {
+ const sectionMatch = line.match(/^##+\s+(.+)/); // Match headers (##, ###, etc.)
+ if (sectionMatch) {
+ currentSection = sectionMatch[1];
+ sections[currentSection] = [];
+ } else if (currentSection) {
+ sections[currentSection].push(line);
+ }
+ });
+
+ return sections;
+ },
+
+ // Function to get a snippet of text around the first match
+ getSnippet: function(content, match) {
+ const index = content.indexOf(match);
+ const snippetLength = 100;
+ const start = Math.max(index - snippetLength / 2, 0);
+ const end = Math.min(index + snippetLength / 2, content.length);
+ return content.substring(start, end).replace(/\n/g, ' ') + '...';
+ }
+
+
+
+};
+
+/*
+ Uses Codemirror 6 with new `V` mode implemented in "cm-lang-v.js".
+ https://codemirror.net/docs/
+*/
+vdocs.examples = {
+ items: [],
+ init: function(){
+ CodeMirror.defineMode("v", vdocs_init_mode);
+
+ let items = document.querySelectorAll('.language-v');
+
+ for(let el of items){
+ this.createEditor(el);
+ }
+ },
+ onThemeChanged: function(theme){
+ for(let item of this.items){
+ item[1].setOption("theme", theme);
+ }
+ },
+ createEditor: function(el){
+ //Old codemirror docs https://marijnhaverbeke.nl/blog/codemirror-mode-system.html
+
+ const code = el.textContent;
+ el.classList.add('v-code-example');
+ el.innerHTML = ``;
+
+ let editor = CodeMirror(el, {
+ value: code,
+ theme: vdocs.ui.currentTheme,
+ mode: 'v',
+ lineNumbers: false,
+ readOnly: false
+ });
+
+
+ this.items.push([el, editor]);
+
+ el.querySelector('.v-code-btn-run').addEventListener('click', (evt)=>{
+
+ let code = editor.getValue();
+ let url = "https://play.vlang.io/?base64=" + btoa(code);
+
+ window.open(url, "_blank");
+
+ return;
+
+ });
+ el.querySelector('.v-code-btn-copy').addEventListener('click', (evt)=>{
+ let code = editor.getValue();
+ navigator.clipboard.writeText(code);
+ });
+ },
+ run: function(el, editor){
+ const data = new FormData();
+
+ //Old server https://play.vosca.dev/ is defunc
+
+ let code = editor.getValue();
+ data.append('code', code);
+
+ //Attempt to use play.vlang.io but cloudflare doesnt play nice here...
+ fetch('https://play.vlang.io/run_test', {
+ method: 'POST',
+ mode: 'no-cors',
+ headers: {
+ 'Host': 'play.vlang.io',
+ 'Accept': '*/*',
+ 'User-Agent': 'curl/8.4.0'
+ },
+ body: data,
+ }).then((response) => {
+ console.log(response);
+ response.headers.forEach(function(val, key) { console.log(key + ' -> ' + val); });
+
+ return response.json()
+ }).then((data) => {
+ console.log(data);
+ })
+ .catch((error) => {
+ console.log(error);
+ });
+
+ },
+
+}
+
+document.addEventListener('DOMContentLoaded', () => {
+ vdocs.hydrate();
+});
+
+function vdocs_init_mode(config){
+ //Creates a CM5 Language Mode
+ //Deprecated, replaced with CM6 Language Mode in cm-lang-v.js
+
+ //Keywords
+ var A = new Set([
+ "as", "asm", "assert", "atomic", "break", "const", "continue", "defer", "else", "enum", "fn", "for", "go", "goto", "if", "import", "in", "interface", "is", "isreftype", "lock", "match", "module", "mut", "none", "or", "pub", "return", "rlock", "select", "shared", "sizeof", "static", "struct", "spawn", "type", "typeof", "union", "unsafe", "volatile", "__global", "__offsetof",
+ ]);
+ //Atoms
+ var B = new Set(["true", "false", "nil", "print", "println", "exit", "panic", "error", "dump"]);
+
+ //builtin
+ var W = new Set(["bool", "string", "i8", "i16", "int", "i64", "i128", "u8", "u16", "u32", "u64", "u128", "rune", "f32", "f64", "isize", "usize", "voidptr", "any"]);
+
+ var N = new Set(["sql", "chan", "thread"]);
+
+ const VATTRS = [
+ "params", "noinit", "required", "skip",
+ "assert_continues", "unsafe", "manualfree", "heap",
+ "nonnull", "primary", "inline", "direct_array_access", "live", "flag",
+ "noinline", "noreturn", "typedef", "console", "sql", "table",
+ "deprecated", "deprecated_after", "export", "callconv",
+ ];
+
+ let U = "[\\w_]+";
+ let Y = `(${U}: ${U})`;
+
+ //RegEx to match attributes
+ let Q = new RegExp(`^(${VATTRS.join("|")})]$`);
+ let G = new RegExp(`^(${VATTRS.join("|")}(; ?)?){2,}]$`);
+ let Z = new RegExp(`^${Y}]$`);
+ let J = new RegExp(`^((${Y})(; )?){2,}]$`);
+ let X = new RegExp(`^if ${U} \\??]`);
+
+var y;
+ let e = (y = config.indentUnit) != null ? y : 0;
+ let t = /[+\-*&^%:=<>!?|\/]/;
+ let n = null;
+
+ function r(i) {
+ return i.eatWhile(/[\w$_\xa1-\uffff]/), i.current();
+ }
+ function a(i, o) {
+ return i.match("}") ? ((o.tokenize = g(o.context.stringQuote)), "end-interpolation") : ((o.tokenize = tokenBase), o.tokenize(i, o));
+ }
+ function d(i, o) {
+ let s = i.next();
+ if (s === " ") return (o.tokenize = g(o.context.stringQuote)), o.tokenize(i, o);
+ if (s === ".") return "operator";
+ let h = r(i);
+ if (h[0].toLowerCase() === h[0].toUpperCase()) return (o.tokenize = g(o.context.stringQuote)), o.tokenize(i, o);
+ let c = i.next();
+ return i.backUp(1), c === "." ? (o.tokenize = d) : (o.tokenize = g(o.context.stringQuote)), "variable";
+ }
+ function p(i, o) {
+ let s = i.next();
+ return s === "$" && i.eat("{") ? ((o.tokenize = a), "start-interpolation") : s === "$" ? ((o.tokenize = d), "start-interpolation") : "string";
+ }
+ function g(i) {
+ return function (o, s) {
+ (s.context.insideString = !0), (s.context.stringQuote = i);
+ let h = "",
+ c = !1,
+ x = !1;
+ for (; (h = o.next()) != null; ) {
+ if (h === i && !c) {
+ x = !0;
+ break;
+ }
+ if (h === "$" && !c && o.eat("{")) return (s.tokenize = p), o.backUp(2), "string";
+ if (h === "$" && !c) return (s.tokenize = p), o.backUp(1), "string";
+ c = !c && h === "\\";
+ }
+ return (x || c) && (s.tokenize = tokenBase), (s.context.insideString = !1), (s.context.stringQuote = null), "string";
+ };
+ }
+ function f(i, o) {
+ let s = !1,
+ h;
+ for (; (h = i.next()); ) {
+ if (h === "/" && s) {
+ o.tokenize = tokenBase;
+ break;
+ }
+ s = h === "*";
+ }
+ return "comment";
+ }
+ function b(state, column, type) {
+ return (state.context = new vState(state.indention, column, type, null, state.context));
+ }
+ function m(state) {
+ if (!state.context.prev) return;
+ let o = state.context.type;
+ return (o === ")" || o === "]" || o === "}") && (state.indention = state.context.indentation), (state.context = state.context.prev), state.context;
+ }
+
+ function tokenBase(stream, state) {
+ let s = stream.next();
+ if (s === null) return null;
+
+ if (state.context.insideString && s === "}") return stream.eat("}"), (state.tokenize = g(state.context.stringQuote)), "end-interpolation";
+
+ //Is literal string...
+ if (s === '"' || s === "'" || s === "`") return (state.tokenize = g(s)), state.tokenize(stream, state);
+
+ //Is operator
+ if (s === "." && !stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/)) return "operator";
+
+ //Is attribute?
+ if (s === "[" && (stream.match(Q) || stream.match(Z) || stream.match(G) || stream.match(J) || stream.match(X))) return "attribute";
+
+ if (/[\d.]/.test(s)) return s === "0" ? stream.match(/^[xX][0-9a-fA-F_]+/) || stream.match(/^o[0-7_]+/) || stream.match(/^b[0-1_]+/) : stream.match(/^[0-9_]*\.?[0-9_]*([eE][\-+]?[0-9_]+)?/), "number";
+
+ if (/[\[\]{}(),;:.]/.test(s)) return (n = s), null;
+
+ if (s === "/") {
+ if (stream.eat("*")) return (state.tokenize = f), f(stream, state);
+ if (stream.eat("/")) return stream.skipToEnd(), "comment";
+ }
+
+ if (t.test(s)) return stream.eatWhile(t), "operator";
+ if (s === "@") return r(stream), "at-identifier";
+ if (s === "$") {
+ let M = r(stream).slice(1);
+ return A.has(M) ? "keyword" : "compile-time-identifier";
+ }
+ stream.backUp(2);
+ let h = stream.next() === ".";
+ stream.next();
+
+ let c = r(stream);
+ if ((c === "import" && (state.context.expectedImportName = !0), A.has(c) || N.has(c))) return "keyword";
+ if (B.has(c)) return "atom";
+ if (W.has(c)) return "builtin";
+ if (c.length > 0 && c[0].toUpperCase() === c[0]) return "type";
+ let x = stream.peek();
+ if (x === "(" || x === "<") return "function";
+ if (x === "[") {
+ stream.next();
+ let M = stream.next();
+ if ((stream.backUp(2), M != null && M.match(/[A-Z]/i))) return "function";
+ }
+ return h
+ ? "property"
+ : state.context.expectedImportName && stream.peek() != "."
+ ? ((state.context.expectedImportName = !1), state.context.knownImports === void 0 && (state.context.knownImports = new Set()), state.context.knownImports.add(c), "import-name")
+ : state.context.knownImports.has(c) && stream.peek() == "."
+ ? "import-name"
+ : "variable";
+ }
+
+ class vState {
+ constructor(e, t, n, r, l) {
+ this.indentation = e;
+ this.column = t;
+ this.type = n;
+ this.align = r;
+ this.prev = l;
+ this.insideString = !1;
+ this.stringQuote = null;
+ this.expectedImportName = !1;
+ this.knownImports = new Set();
+ }
+ };
+
+ let vMode = {
+ indent: function (stream, state) {
+ if ((stream.tokenize !== l && stream.tokenize != null) || stream.context.type == "top") return 0;
+ let s = stream.context,
+ c = state.charAt(0) === s.type;
+ return s.align ? s.column + (c ? 0 : 1) : s.indentation + (c ? 0 : e);
+ },
+ token: function (stream, state) {
+ let s = state.context;
+ if ((stream.sol() && (s.align == null && (s.align = !1), (state.indention = stream.indentation()), (state.startOfLine = !0)), stream.eatSpace())) return null;
+ n = null;
+ let h = (state.tokenize || tokenBase)(stream, state);
+ return (
+ h === "comment" ||
+ (s.align == null && (s.align = !0),
+ n === "{" ? b(state, stream.column(), "}") : n === "[" ? b(state, stream.column(), "]") : n === "(" ? b(state, stream.column(), ")") : ((n === "}" && s.type === "}") || n === s.type) && m(state),
+ (state.startOfLine = !1)),
+ h
+ );
+ },
+ electricChars: "{}):",
+ closeBrackets: "()[]{}''\"\"``",
+ fold: "brace",
+ blockCommentStart: "/*",
+ blockCommentEnd: "*/",
+ lineComment: "//",
+ startState: function () {
+ return { tokenize: null, context: new vState(0, 0, "top", !1), indention: 0, startOfLine: !0 };
+ },
+ };
+
+ return vMode;
+
+
+
+}
+
diff --git a/templates/assets/scripts/vlang-playground.js b/templates/assets/scripts/vlang-playground.js
deleted file mode 100644
index 5db43a481..000000000
--- a/templates/assets/scripts/vlang-playground.js
+++ /dev/null
@@ -1,114 +0,0 @@
-(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):(global=global||self,global.CodeMirror=factory())})(this,function(){"use strict";var userAgent=navigator.userAgent;var platform=navigator.platform;var gecko=/gecko\/\d/i.test(userAgent);var ie_upto10=/MSIE \d/.test(userAgent);var ie_11up=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent);var edge=/Edge\/(\d+)/.exec(userAgent);var ie=ie_upto10||ie_11up||edge;var ie_version=ie&&(ie_upto10?document.documentMode||6:+(edge||ie_11up)[1]);var webkit=!edge&&/WebKit\//.test(userAgent);var qtwebkit=webkit&&/Qt\/\d+\.\d+/.test(userAgent);var chrome=!edge&&/Chrome\/(\d+)/.exec(userAgent);var chrome_version=chrome&&+chrome[1];var presto=/Opera\//.test(userAgent);var safari=/Apple Computer/.test(navigator.vendor);var mac_geMountainLion=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent);var phantom=/PhantomJS/.test(userAgent);var ios=safari&&(/Mobile\/\w+/.test(userAgent)||navigator.maxTouchPoints>2);var android=/Android/.test(userAgent);var mobile=ios||android||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);var mac=ios||/Mac/.test(platform);var chromeOS=/\bCrOS\b/.test(userAgent);var windows=/win/i.test(platform);var presto_version=presto&&userAgent.match(/Version\/(\d*\.\d*)/);if(presto_version){presto_version=Number(presto_version[1])}if(presto_version&&presto_version>=15){presto=false;webkit=true}var flipCtrlCmd=mac&&(qtwebkit||presto&&(presto_version==null||presto_version<12.11));var captureRightClick=gecko||ie&&ie_version>=9;function classTest(cls){return new RegExp("(^|\\s)"+cls+"(?:$|\\s)\\s*")}var rmClass=function(node,cls){var current=node.className;var match=classTest(cls).exec(current);if(match){var after=current.slice(match.index+match[0].length);node.className=current.slice(0,match.index)+(after?match[1]+after:"")}};function removeChildren(e){for(var count=e.childNodes.length;count>0;--count){e.removeChild(e.firstChild)}return e}function removeChildrenAndAdd(parent,e){return removeChildren(parent).appendChild(e)}function elt(tag,content,className,style){var e=document.createElement(tag);if(className){e.className=className}if(style){e.style.cssText=style}if(typeof content=="string"){e.appendChild(document.createTextNode(content))}else if(content){for(var i=0;i=end){return n+(end-i)}n+=nextTab-i;n+=tabSize-n%tabSize;i=nextTab+1}}var Delayed=function(){this.id=null;this.f=null;this.time=0;this.handler=bind(this.onTimeout,this)};Delayed.prototype.onTimeout=function(self){self.id=0;if(self.time<=+new Date){self.f()}else{setTimeout(self.handler,self.time-+new Date)}};Delayed.prototype.set=function(ms,f){this.f=f;var time=+new Date+ms;if(!this.id||time=goal){return pos+Math.min(skipped,goal-col)}col+=nextTab-pos;col+=tabSize-col%tabSize;pos=nextTab+1;if(col>=goal){return pos}}}var spaceStrs=[""];function spaceStr(n){while(spaceStrs.length<=n){spaceStrs.push(lst(spaceStrs)+" ")}return spaceStrs[n]}function lst(arr){return arr[arr.length-1]}function map(array,f){var out=[];for(var i=0;i""&&(ch.toUpperCase()!=ch.toLowerCase()||nonASCIISingleCaseWordChar.test(ch))}function isWordChar(ch,helper){if(!helper){return isWordCharBasic(ch)}if(helper.source.indexOf("\\w")>-1&&isWordCharBasic(ch)){return true}return helper.test(ch)}function isEmpty(obj){for(var n in obj){if(obj.hasOwnProperty(n)&&obj[n]){return false}}return true}var extendingChars=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function isExtendingChar(ch){return ch.charCodeAt(0)>=768&&extendingChars.test(ch)}function skipExtendingChars(str,pos,dir){while((dir<0?pos>0:posto?-1:1;for(;;){if(from==to){return from}var midF=(from+to)/2,mid=dir<0?Math.ceil(midF):Math.floor(midF);if(mid==from){return pred(mid)?from:to}if(pred(mid)){to=mid}else{from=mid+dir}}}function iterateBidiSections(order,from,to,f){if(!order){return f(from,to,"ltr",0)}var found=false;for(var i=0;ifrom||from==to&&part.to==from){f(Math.max(part.from,from),Math.min(part.to,to),part.level==1?"rtl":"ltr",i);found=true}}if(!found){f(from,to,"ltr")}}var bidiOther=null;function getBidiPartAt(order,ch,sticky){var found;bidiOther=null;for(var i=0;ich){return i}if(cur.to==ch){if(cur.from!=cur.to&&sticky=="before"){found=i}else{bidiOther=i}}if(cur.from==ch){if(cur.from!=cur.to&&sticky!="before"){found=i}else{bidiOther=i}}}return found!=null?found:bidiOther}var bidiOrdering=function(){var lowTypes="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";var arabicTypes="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function charType(code){if(code<=247){return lowTypes.charAt(code)}else if(1424<=code&&code<=1524){return"R"}else if(1536<=code&&code<=1785){return arabicTypes.charAt(code-1536)}else if(1774<=code&&code<=2220){return"r"}else if(8192<=code&&code<=8203){return"w"}else if(code==8204){return"b"}else{return"L"}}var bidiRE=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;var isNeutral=/[stwN]/,isStrong=/[LRr]/,countsAsLeft=/[Lb1n]/,countsAsNum=/[1n]/;function BidiSpan(level,from,to){this.level=level;this.from=from;this.to=to}return function(str,direction){var outerType=direction=="ltr"?"L":"R";if(str.length==0||direction=="ltr"&&!bidiRE.test(str)){return false}var len=str.length,types=[];for(var i=0;i-1){map[type]=arr.slice(0,index).concat(arr.slice(index+1))}}}}function signal(emitter,type){var handlers=getHandlers(emitter,type);if(!handlers.length){return}var args=Array.prototype.slice.call(arguments,2);for(var i=0;i0}function eventMixin(ctor){ctor.prototype.on=function(type,f){on(this,type,f)};ctor.prototype.off=function(type,f){off(this,type,f)}}function e_preventDefault(e){if(e.preventDefault){e.preventDefault()}else{e.returnValue=false}}function e_stopPropagation(e){if(e.stopPropagation){e.stopPropagation()}else{e.cancelBubble=true}}function e_defaultPrevented(e){return e.defaultPrevented!=null?e.defaultPrevented:e.returnValue==false}function e_stop(e){e_preventDefault(e);e_stopPropagation(e)}function e_target(e){return e.target||e.srcElement}function e_button(e){var b=e.which;if(b==null){if(e.button&1){b=1}else if(e.button&2){b=3}else if(e.button&4){b=2}}if(mac&&e.ctrlKey&&b==1){b=3}return b}var dragAndDrop=function(){if(ie&&ie_version<9){return false}var div=elt("div");return"draggable"in div||"dragDrop"in div}();var zwspSupported;function zeroWidthElement(measure){if(zwspSupported==null){var test=elt("span","");removeChildrenAndAdd(measure,elt("span",[test,document.createTextNode("x")]));if(measure.firstChild.offsetHeight!=0){zwspSupported=test.offsetWidth<=1&&test.offsetHeight>2&&!(ie&&ie_version<8)}}var node=zwspSupported?elt("span",""):elt("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");node.setAttribute("cm-text","");return node}var badBidiRects;function hasBadBidiRects(measure){if(badBidiRects!=null){return badBidiRects}var txt=removeChildrenAndAdd(measure,document.createTextNode("AخA"));var r0=range(txt,0,1).getBoundingClientRect();var r1=range(txt,1,2).getBoundingClientRect();removeChildren(measure);if(!r0||r0.left==r0.right){return false}return badBidiRects=r1.right-r0.right<3}var splitLinesAuto="\n\nb".split(/\n/).length!=3?function(string){var pos=0,result=[],l=string.length;while(pos<=l){var nl=string.indexOf("\n",pos);if(nl==-1){nl=string.length}var line=string.slice(pos,string.charAt(nl-1)=="\r"?nl-1:nl);var rt=line.indexOf("\r");if(rt!=-1){result.push(line.slice(0,rt));pos+=rt+1}else{result.push(line);pos=nl+1}}return result}:function(string){return string.split(/\r\n?|\n/)};var hasSelection=window.getSelection?function(te){try{return te.selectionStart!=te.selectionEnd}catch(e){return false}}:function(te){var range;try{range=te.ownerDocument.selection.createRange()}catch(e){}if(!range||range.parentElement()!=te){return false}return range.compareEndPoints("StartToEnd",range)!=0};var hasCopyEvent=function(){var e=elt("div");if("oncopy"in e){return true}e.setAttribute("oncopy","return;");return typeof e.oncopy=="function"}();var badZoomedRects=null;function hasBadZoomedRects(measure){if(badZoomedRects!=null){return badZoomedRects}var node=removeChildrenAndAdd(measure,elt("span","x"));var normal=node.getBoundingClientRect();var fromRange=range(node,0,1).getBoundingClientRect();return badZoomedRects=Math.abs(normal.left-fromRange.left)>1}var modes={},mimeModes={};function defineMode(name,mode){if(arguments.length>2){mode.dependencies=Array.prototype.slice.call(arguments,2)}modes[name]=mode}function defineMIME(mime,spec){mimeModes[mime]=spec}function resolveMode(spec){if(typeof spec=="string"&&mimeModes.hasOwnProperty(spec)){spec=mimeModes[spec]}else if(spec&&typeof spec.name=="string"&&mimeModes.hasOwnProperty(spec.name)){var found=mimeModes[spec.name];if(typeof found=="string"){found={name:found}}spec=createObj(found,spec);spec.name=found.name}else if(typeof spec=="string"&&/^[\w\-]+\/[\w\-]+\+xml$/.test(spec)){return resolveMode("application/xml")}else if(typeof spec=="string"&&/^[\w\-]+\/[\w\-]+\+json$/.test(spec)){return resolveMode("application/json")}if(typeof spec=="string"){return{name:spec}}else{return spec||{name:"null"}}}function getMode(options,spec){spec=resolveMode(spec);var mfactory=modes[spec.name];if(!mfactory){return getMode(options,"text/plain")}var modeObj=mfactory(options,spec);if(modeExtensions.hasOwnProperty(spec.name)){var exts=modeExtensions[spec.name];for(var prop in exts){if(!exts.hasOwnProperty(prop)){continue}if(modeObj.hasOwnProperty(prop)){modeObj["_"+prop]=modeObj[prop]}modeObj[prop]=exts[prop]}}modeObj.name=spec.name;if(spec.helperType){modeObj.helperType=spec.helperType}if(spec.modeProps){for(var prop$1 in spec.modeProps){modeObj[prop$1]=spec.modeProps[prop$1]}}return modeObj}var modeExtensions={};function extendMode(mode,properties){var exts=modeExtensions.hasOwnProperty(mode)?modeExtensions[mode]:modeExtensions[mode]={};copyObj(properties,exts)}function copyState(mode,state){if(state===true){return state}if(mode.copyState){return mode.copyState(state)}var nstate={};for(var n in state){var val=state[n];if(val instanceof Array){val=val.concat([])}nstate[n]=val}return nstate}function innerMode(mode,state){var info;while(mode.innerMode){info=mode.innerMode(state);if(!info||info.mode==mode){break}state=info.state;mode=info.mode}return info||{mode:mode,state:state}}function startState(mode,a1,a2){return mode.startState?mode.startState(a1,a2):true}var StringStream=function(string,tabSize,lineOracle){this.pos=this.start=0;this.string=string;this.tabSize=tabSize||8;this.lastColumnPos=this.lastColumnValue=0;this.lineStart=0;this.lineOracle=lineOracle};StringStream.prototype.eol=function(){return this.pos>=this.string.length};StringStream.prototype.sol=function(){return this.pos==this.lineStart};StringStream.prototype.peek=function(){return this.string.charAt(this.pos)||undefined};StringStream.prototype.next=function(){if(this.posstart};StringStream.prototype.eatSpace=function(){var start=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos))){++this.pos}return this.pos>start};StringStream.prototype.skipToEnd=function(){this.pos=this.string.length};StringStream.prototype.skipTo=function(ch){var found=this.string.indexOf(ch,this.pos);if(found>-1){this.pos=found;return true}};StringStream.prototype.backUp=function(n){this.pos-=n};StringStream.prototype.column=function(){if(this.lastColumnPos0){return null}if(match&&consume!==false){this.pos+=match[0].length}return match}};StringStream.prototype.current=function(){return this.string.slice(this.start,this.pos)};StringStream.prototype.hideFirstChars=function(n,inner){this.lineStart+=n;try{return inner()}finally{this.lineStart-=n}};StringStream.prototype.lookAhead=function(n){var oracle=this.lineOracle;return oracle&&oracle.lookAhead(n)};StringStream.prototype.baseToken=function(){var oracle=this.lineOracle;return oracle&&oracle.baseToken(this.pos)};function getLine(doc,n){n-=doc.first;if(n<0||n>=doc.size){throw new Error("There is no line "+(n+doc.first)+" in the document.")}var chunk=doc;while(!chunk.lines){for(var i=0;;++i){var child=chunk.children[i],sz=child.chunkSize();if(n=doc.first&&llast){return Pos(last,getLine(doc,last).text.length)}return clipToLen(pos,getLine(doc,pos.line).text.length)}function clipToLen(pos,linelen){var ch=pos.ch;if(ch==null||ch>linelen){return Pos(pos.line,linelen)}else if(ch<0){return Pos(pos.line,0)}else{return pos}}function clipPosArray(doc,array){var out=[];for(var i=0;ithis.maxLookAhead){this.maxLookAhead=n}return line};Context.prototype.baseToken=function(n){if(!this.baseTokens){return null}while(this.baseTokens[this.baseTokenPos]<=n){this.baseTokenPos+=2}var type=this.baseTokens[this.baseTokenPos+1];return{type:type&&type.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-n}};Context.prototype.nextLine=function(){this.line++;if(this.maxLookAhead>0){this.maxLookAhead--}};Context.fromSaved=function(doc,saved,line){if(saved instanceof SavedContext){return new Context(doc,copyState(doc.mode,saved.state),line,saved.lookAhead)}else{return new Context(doc,copyState(doc.mode,saved),line)}};Context.prototype.save=function(copy){var state=copy!==false?copyState(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new SavedContext(state,this.maxLookAhead):state};function highlightLine(cm,line,context,forceToEnd){var st=[cm.state.modeGen],lineClasses={};runMode(cm,line.text,cm.doc.mode,context,function(end,style){return st.push(end,style)},lineClasses,forceToEnd);var state=context.state;var loop=function(o){context.baseTokens=st;var overlay=cm.state.overlays[o],i=1,at=0;context.state=true;runMode(cm,line.text,overlay.mode,context,function(end,style){var start=i;while(atend){st.splice(i,1,end,st[i+1],i_end)}i+=2;at=Math.min(end,i_end)}if(!style){return}if(overlay.opaque){st.splice(start,i-start,end,"overlay "+style);i=start+2}else{for(;startcm.options.maxHighlightLength&©State(cm.doc.mode,context.state);var result=highlightLine(cm,line,context);if(resetState){context.state=resetState}line.stateAfter=context.save(!resetState);line.styles=result.styles;if(result.classes){line.styleClasses=result.classes}else if(line.styleClasses){line.styleClasses=null}if(updateFrontier===cm.doc.highlightFrontier){cm.doc.modeFrontier=Math.max(cm.doc.modeFrontier,++cm.doc.highlightFrontier)}}return line.styles}function getContextBefore(cm,n,precise){var doc=cm.doc,display=cm.display;if(!doc.mode.startState){return new Context(doc,true,n)}var start=findStartLine(cm,n,precise);var saved=start>doc.first&&getLine(doc,start-1).stateAfter;var context=saved?Context.fromSaved(doc,saved,start):new Context(doc,startState(doc.mode),start);doc.iter(start,n,function(line){processLine(cm,line.text,context);var pos=context.line;line.stateAfter=pos==n-1||pos%5==0||pos>=display.viewFrom&&posstream.start){return style}}throw new Error("Mode "+mode.name+" failed to advance stream.")}var Token=function(stream,type,state){this.start=stream.start;this.end=stream.pos;this.string=stream.current();this.type=type||null;this.state=state};function takeToken(cm,pos,precise,asArray){var doc=cm.doc,mode=doc.mode,style;pos=clipPos(doc,pos);var line=getLine(doc,pos.line),context=getContextBefore(cm,pos.line,precise);var stream=new StringStream(line.text,cm.options.tabSize,context),tokens;if(asArray){tokens=[]}while((asArray||stream.poscm.options.maxHighlightLength){flattenSpans=false;if(forceToEnd){processLine(cm,text,context,stream.pos)}stream.pos=text.length;style=null}else{style=extractLineClasses(readToken(mode,stream,context.state,inner),lineClasses)}if(inner){var mName=inner[0].name;if(mName){style="m-"+(style?mName+" "+style:mName)}}if(!flattenSpans||curStyle!=style){while(curStartlim;--search){if(search<=doc.first){return doc.first}var line=getLine(doc,search-1),after=line.stateAfter;if(after&&(!precise||search+(after instanceof SavedContext?after.lookAhead:0)<=doc.modeFrontier)){return search}var indented=countColumn(line.text,null,cm.options.tabSize);if(minline==null||minindent>indented){minline=search-1;minindent=indented}}return minline}function retreatFrontier(doc,n){doc.modeFrontier=Math.min(doc.modeFrontier,n);if(doc.highlightFrontierstart;line--){var saved=getLine(doc,line).stateAfter;if(saved&&(!(saved instanceof SavedContext)||line+saved.lookAhead=startCh:span.to>startCh);(nw||(nw=[])).push(new MarkedSpan(marker,span.from,endsAfter?null:span.to))}}}return nw}function markedSpansAfter(old,endCh,isInsert){var nw;if(old){for(var i=0;i=endCh:span.to>endCh);if(endsAfter||span.from==endCh&&marker.type=="bookmark"&&(!isInsert||span.marker.insertLeft)){var startsBefore=span.from==null||(marker.inclusiveLeft?span.from<=endCh:span.from0&&first){for(var i$2=0;i$20){continue}var newParts=[j,1],dfrom=cmp(p.from,m.from),dto=cmp(p.to,m.to);if(dfrom<0||!mk.inclusiveLeft&&!dfrom){newParts.push({from:p.from,to:m.from})}if(dto>0||!mk.inclusiveRight&&!dto){newParts.push({from:m.to,to:p.to})}parts.splice.apply(parts,newParts);j+=newParts.length-3}}return parts}function detachMarkedSpans(line){var spans=line.markedSpans;if(!spans){return}for(var i=0;ich)&&(!found||compareCollapsedMarkers(found,sp.marker)<0)){found=sp.marker}}}return found}function conflictingCollapsedRange(doc,lineNo,from,to,marker){var line=getLine(doc,lineNo);var sps=sawCollapsedSpans&&line.markedSpans;if(sps){for(var i=0;i=0&&toCmp<=0||fromCmp<=0&&toCmp>=0){continue}if(fromCmp<=0&&(sp.marker.inclusiveRight&&marker.inclusiveLeft?cmp(found.to,from)>=0:cmp(found.to,from)>0)||fromCmp>=0&&(sp.marker.inclusiveRight&&marker.inclusiveLeft?cmp(found.from,to)<=0:cmp(found.from,to)<0)){return true}}}}function visualLine(line){var merged;while(merged=collapsedSpanAtStart(line)){line=merged.find(-1,true).line}return line}function visualLineEnd(line){var merged;while(merged=collapsedSpanAtEnd(line)){line=merged.find(1,true).line}return line}function visualLineContinued(line){var merged,lines;while(merged=collapsedSpanAtEnd(line)){line=merged.find(1,true).line;(lines||(lines=[])).push(line)}return lines}function visualLineNo(doc,lineN){var line=getLine(doc,lineN),vis=visualLine(line);if(line==vis){return lineN}return lineNo(vis)}function visualLineEndNo(doc,lineN){if(lineN>doc.lastLine()){return lineN}var line=getLine(doc,lineN),merged;if(!lineIsHidden(doc,line)){return lineN}while(merged=collapsedSpanAtEnd(line)){line=merged.find(1,true).line}return lineNo(line)+1}function lineIsHidden(doc,line){var sps=sawCollapsedSpans&&line.markedSpans;if(sps){for(var sp=void 0,i=0;id.maxLineLength){d.maxLineLength=len;d.maxLine=line}})}var Line=function(text,markedSpans,estimateHeight){this.text=text;attachMarkedSpans(this,markedSpans);this.height=estimateHeight?estimateHeight(this):1};Line.prototype.lineNo=function(){return lineNo(this)};eventMixin(Line);function updateLine(line,text,markedSpans,estimateHeight){line.text=text;if(line.stateAfter){line.stateAfter=null}if(line.styles){line.styles=null}if(line.order!=null){line.order=null}detachMarkedSpans(line);attachMarkedSpans(line,markedSpans);var estHeight=estimateHeight?estimateHeight(line):1;if(estHeight!=line.height){updateLineHeight(line,estHeight)}}function cleanUpLine(line){line.parent=null;detachMarkedSpans(line)}var styleToClassCache={},styleToClassCacheWithMode={};function interpretTokenStyle(style,options){if(!style||/^\s*$/.test(style)){return null}var cache=options.addModeClass?styleToClassCacheWithMode:styleToClassCache;return cache[style]||(cache[style]=style.replace(/\S+/g,"cm-$&"))}function buildLineContent(cm,lineView){var content=eltP("span",null,null,webkit?"padding-right: .1px":null);var builder={pre:eltP("pre",[content],"CodeMirror-line"),content:content,col:0,pos:0,cm:cm,trailingSpace:false,splitSpaces:cm.getOption("lineWrapping")};lineView.measure={};for(var i=0;i<=(lineView.rest?lineView.rest.length:0);i++){var line=i?lineView.rest[i-1]:lineView.line,order=void 0;builder.pos=0;builder.addToken=buildToken;if(hasBadBidiRects(cm.display.measure)&&(order=getOrder(line,cm.doc.direction))){builder.addToken=buildTokenBadBidi(builder.addToken,order)}builder.map=[];var allowFrontierUpdate=lineView!=cm.display.externalMeasured&&lineNo(line);insertLineContent(line,builder,getLineStyles(cm,line,allowFrontierUpdate));if(line.styleClasses){if(line.styleClasses.bgClass){builder.bgClass=joinClasses(line.styleClasses.bgClass,builder.bgClass||"")}if(line.styleClasses.textClass){builder.textClass=joinClasses(line.styleClasses.textClass,builder.textClass||"")}}if(builder.map.length==0){builder.map.push(0,0,builder.content.appendChild(zeroWidthElement(cm.display.measure)))}if(i==0){lineView.measure.map=builder.map;lineView.measure.cache={}}else{(lineView.measure.maps||(lineView.measure.maps=[])).push(builder.map);(lineView.measure.caches||(lineView.measure.caches=[])).push({})}}if(webkit){var last=builder.content.lastChild;if(/\bcm-tab\b/.test(last.className)||last.querySelector&&last.querySelector(".cm-tab")){builder.content.className="cm-tab-wrap-hack"}}signal(cm,"renderLine",cm,lineView.line,builder.pre);if(builder.pre.className){builder.textClass=joinClasses(builder.pre.className,builder.textClass||"")}return builder}function defaultSpecialCharPlaceholder(ch){var token=elt("span","•","cm-invalidchar");token.title="\\u"+ch.charCodeAt(0).toString(16);token.setAttribute("aria-label",token.title);return token}function buildToken(builder,text,style,startStyle,endStyle,css,attributes){if(!text){return}var displayText=builder.splitSpaces?splitSpaces(text,builder.trailingSpace):text;var special=builder.cm.state.specialChars,mustWrap=false;var content;if(!special.test(text)){builder.col+=text.length;content=document.createTextNode(displayText);builder.map.push(builder.pos,builder.pos+text.length,content);if(ie&&ie_version<9){mustWrap=true}builder.pos+=text.length}else{content=document.createDocumentFragment();var pos=0;while(true){special.lastIndex=pos;var m=special.exec(text);var skipped=m?m.index-pos:text.length-pos;if(skipped){var txt=document.createTextNode(displayText.slice(pos,pos+skipped));if(ie&&ie_version<9){content.appendChild(elt("span",[txt]))}else{content.appendChild(txt)}builder.map.push(builder.pos,builder.pos+skipped,txt);builder.col+=skipped;builder.pos+=skipped}if(!m){break}pos+=skipped+1;var txt$1=void 0;if(m[0]=="\t"){var tabSize=builder.cm.options.tabSize,tabWidth=tabSize-builder.col%tabSize;txt$1=content.appendChild(elt("span",spaceStr(tabWidth),"cm-tab"));txt$1.setAttribute("role","presentation");txt$1.setAttribute("cm-text","\t");builder.col+=tabWidth}else if(m[0]=="\r"||m[0]=="\n"){txt$1=content.appendChild(elt("span",m[0]=="\r"?"␍":"","cm-invalidchar"));txt$1.setAttribute("cm-text",m[0]);builder.col+=1}else{txt$1=builder.cm.options.specialCharPlaceholder(m[0]);txt$1.setAttribute("cm-text",m[0]);if(ie&&ie_version<9){content.appendChild(elt("span",[txt$1]))}else{content.appendChild(txt$1)}builder.col+=1}builder.map.push(builder.pos,builder.pos+1,txt$1);builder.pos++}}builder.trailingSpace=displayText.charCodeAt(text.length-1)==32;if(style||startStyle||endStyle||mustWrap||css||attributes){var fullStyle=style||"";if(startStyle){fullStyle+=startStyle}if(endStyle){fullStyle+=endStyle}var token=elt("span",[content],fullStyle,css);if(attributes){for(var attr in attributes){if(attributes.hasOwnProperty(attr)&&attr!="style"&&attr!="class"){token.setAttribute(attr,attributes[attr])}}}return builder.content.appendChild(token)}builder.content.appendChild(content)}function splitSpaces(text,trailingBefore){if(text.length>1&&!/ /.test(text)){return text}var spaceBefore=trailingBefore,result="";for(var i=0;istart&&part.from<=start){break}}if(part.to>=end){return inner(builder,text,style,startStyle,endStyle,css,attributes)}inner(builder,text.slice(0,part.to-start),style,startStyle,null,css,attributes);startStyle=null;text=text.slice(part.to-start);start=part.to}}}function buildCollapsedSpan(builder,size,marker,ignoreWidget){var widget=!ignoreWidget&&marker.widgetNode;if(widget){builder.map.push(builder.pos,builder.pos+size,widget)}if(!ignoreWidget&&builder.cm.display.input.needsContentAttribute){if(!widget){widget=builder.content.appendChild(document.createElement("span"))}widget.setAttribute("cm-marker",marker.id)}if(widget){builder.cm.display.input.setUneditable(widget);builder.content.appendChild(widget)}builder.pos+=size;builder.trailingSpace=false}function insertLineContent(line,builder,styles){var spans=line.markedSpans,allText=line.text,at=0;if(!spans){for(var i$1=1;i$1pos||m.collapsed&&sp.to==pos&&sp.from==pos)){if(sp.to!=null&&sp.to!=pos&&nextChange>sp.to){nextChange=sp.to;spanEndStyle=""}if(m.className){spanStyle+=" "+m.className}if(m.css){css=(css?css+";":"")+m.css}if(m.startStyle&&sp.from==pos){spanStartStyle+=" "+m.startStyle}if(m.endStyle&&sp.to==nextChange){(endStyles||(endStyles=[])).push(m.endStyle,sp.to)}if(m.title){(attributes||(attributes={})).title=m.title}if(m.attributes){for(var attr in m.attributes){(attributes||(attributes={}))[attr]=m.attributes[attr]}}if(m.collapsed&&(!collapsed||compareCollapsedMarkers(collapsed.marker,m)<0)){collapsed=sp}}else if(sp.from>pos&&nextChange>sp.from){nextChange=sp.from}}if(endStyles){for(var j$1=0;j$1=len){break}var upto=Math.min(len,nextChange);while(true){if(text){var end=pos+text.length;if(!collapsed){var tokenText=end>upto?text.slice(0,upto-pos):text;builder.addToken(builder,tokenText,style?style+spanStyle:spanStyle,spanStartStyle,pos+tokenText.length==nextChange?spanEndStyle:"",css,attributes)}if(end>=upto){text=text.slice(upto-pos);pos=upto;break}pos=end;spanStartStyle=""}text=allText.slice(at,at=styles[i++]);style=interpretTokenStyle(styles[i++],builder.cm.options)}}}function LineView(doc,line,lineN){this.line=line;this.rest=visualLineContinued(line);this.size=this.rest?lineNo(lst(this.rest))-lineN+1:1;this.node=this.text=null;this.hidden=lineIsHidden(doc,line)}function buildViewArray(cm,from,to){var array=[],nextPos;for(var pos=from;pos2){heights.push((cur.bottom+next.top)/2-rect.top)}}}heights.push(rect.bottom-rect.top)}}function mapFromLineView(lineView,line,lineN){if(lineView.line==line){return{map:lineView.measure.map,cache:lineView.measure.cache}}if(lineView.rest){for(var i=0;ilineN){return{map:lineView.measure.maps[i$1],cache:lineView.measure.caches[i$1],before:true}}}}}function updateExternalMeasurement(cm,line){line=visualLine(line);var lineN=lineNo(line);var view=cm.display.externalMeasured=new LineView(cm.doc,line,lineN);view.lineN=lineN;var built=view.built=buildLineContent(cm,view);view.text=built.pre;removeChildrenAndAdd(cm.display.lineMeasure,built.pre);return view}function measureChar(cm,line,ch,bias){return measureCharPrepared(cm,prepareMeasureForLine(cm,line),ch,bias)}function findViewForLine(cm,lineN){if(lineN>=cm.display.viewFrom&&lineN=ext.lineN&&lineNch){end=mEnd-mStart;start=end-1;if(ch>=mEnd){collapse="right"}}if(start!=null){node=map[i+2];if(mStart==mEnd&&bias==(node.insertLeft?"left":"right")){collapse=bias}if(bias=="left"&&start==0){while(i&&map[i-2]==map[i-3]&&map[i-1].insertLeft){node=map[(i-=3)+2];collapse="left"}}if(bias=="right"&&start==mEnd-mStart){while(i=0;i$1--){if((rect=rects[i$1]).left!=rect.right){break}}}return rect}function measureCharInner(cm,prepared,ch,bias){var place=nodeAndOffsetInLineMap(prepared.map,ch,bias);var node=place.node,start=place.start,end=place.end,collapse=place.collapse;var rect;if(node.nodeType==3){for(var i$1=0;i$1<4;i$1++){while(start&&isExtendingChar(prepared.line.text.charAt(place.coverStart+start))){--start}while(place.coverStart+end0){collapse=bias="right"}var rects;if(cm.options.lineWrapping&&(rects=node.getClientRects()).length>1){rect=rects[bias=="right"?rects.length-1:0]}else{rect=node.getBoundingClientRect()}}if(ie&&ie_version<9&&!start&&(!rect||!rect.left&&!rect.right)){var rSpan=node.parentNode.getClientRects()[0];if(rSpan){rect={left:rSpan.left,right:rSpan.left+charWidth(cm.display),top:rSpan.top,bottom:rSpan.bottom}}else{rect=nullRect}}var rtop=rect.top-prepared.rect.top,rbot=rect.bottom-prepared.rect.top;var mid=(rtop+rbot)/2;var heights=prepared.view.measure.heights;var i=0;for(;i=lineObj.text.length){ch=lineObj.text.length;sticky="before"}else if(ch<=0){ch=0;sticky="after"}if(!order){return get(sticky=="before"?ch-1:ch,sticky=="before")}function getBidi(ch,partPos,invert){var part=order[partPos],right=part.level==1;return get(invert?ch-1:ch,right!=invert)}var partPos=getBidiPartAt(order,ch,sticky);var other=bidiOther;var val=getBidi(ch,partPos,sticky=="before");if(other!=null){val.other=getBidi(ch,other,sticky!="before")}return val}function estimateCoords(cm,pos){var left=0;pos=clipPos(cm.doc,pos);if(!cm.options.lineWrapping){left=charWidth(cm.display)*pos.ch}var lineObj=getLine(cm.doc,pos.line);var top=heightAtLine(lineObj)+paddingTop(cm.display);return{left:left,right:left,top:top,bottom:top+lineObj.height}}function PosWithInfo(line,ch,sticky,outside,xRel){var pos=Pos(line,ch,sticky);pos.xRel=xRel;if(outside){pos.outside=outside}return pos}function coordsChar(cm,x,y){var doc=cm.doc;y+=cm.display.viewOffset;if(y<0){return PosWithInfo(doc.first,0,null,-1,-1)}var lineN=lineAtHeight(doc,y),last=doc.first+doc.size-1;if(lineN>last){return PosWithInfo(doc.first+doc.size-1,getLine(doc,last).text.length,null,1,1)}if(x<0){x=0}var lineObj=getLine(doc,lineN);for(;;){var found=coordsCharInner(cm,lineObj,lineN,x,y);var collapsed=collapsedSpanAround(lineObj,found.ch+(found.xRel>0||found.outside>0?1:0));if(!collapsed){return found}var rangeEnd=collapsed.find(1);if(rangeEnd.line==lineN){return rangeEnd}lineObj=getLine(doc,lineN=rangeEnd.line)}}function wrappedLineExtent(cm,lineObj,preparedMeasure,y){y-=widgetTopHeight(lineObj);var end=lineObj.text.length;var begin=findFirst(function(ch){return measureCharPrepared(cm,preparedMeasure,ch-1).bottom<=y},end,0);end=findFirst(function(ch){return measureCharPrepared(cm,preparedMeasure,ch).top>y},begin,end);return{begin:begin,end:end}}function wrappedLineExtentChar(cm,lineObj,preparedMeasure,target){if(!preparedMeasure){preparedMeasure=prepareMeasureForLine(cm,lineObj)}var targetTop=intoCoordSystem(cm,lineObj,measureCharPrepared(cm,preparedMeasure,target),"line").top;return wrappedLineExtent(cm,lineObj,preparedMeasure,targetTop)}function boxIsAfter(box,x,y,left){return box.bottom<=y?false:box.top>y?true:(left?box.left:box.right)>x}function coordsCharInner(cm,lineObj,lineNo,x,y){y-=heightAtLine(lineObj);var preparedMeasure=prepareMeasureForLine(cm,lineObj);var widgetHeight=widgetTopHeight(lineObj);var begin=0,end=lineObj.text.length,ltr=true;var order=getOrder(lineObj,cm.doc.direction);if(order){var part=(cm.options.lineWrapping?coordsBidiPartWrapped:coordsBidiPart)(cm,lineObj,lineNo,preparedMeasure,order,x,y);ltr=part.level!=1;begin=ltr?part.from:part.to-1;end=ltr?part.to:part.from-1}var chAround=null,boxAround=null;var ch=findFirst(function(ch){var box=measureCharPrepared(cm,preparedMeasure,ch);box.top+=widgetHeight;box.bottom+=widgetHeight;if(!boxIsAfter(box,x,y,false)){return false}if(box.top<=y&&box.left<=x){chAround=ch;boxAround=box}return true},begin,end);var baseX,sticky,outside=false;if(boxAround){var atLeft=x-boxAround.left=coords.bottom?1:0}ch=skipExtendingChars(lineObj.text,ch,1);return PosWithInfo(lineNo,ch,sticky,outside,x-baseX)}function coordsBidiPart(cm,lineObj,lineNo,preparedMeasure,order,x,y){var index=findFirst(function(i){var part=order[i],ltr=part.level!=1;return boxIsAfter(cursorCoords(cm,Pos(lineNo,ltr?part.to:part.from,ltr?"before":"after"),"line",lineObj,preparedMeasure),x,y,true)},0,order.length-1);var part=order[index];if(index>0){var ltr=part.level!=1;var start=cursorCoords(cm,Pos(lineNo,ltr?part.from:part.to,ltr?"after":"before"),"line",lineObj,preparedMeasure);if(boxIsAfter(start,x,y,true)&&start.top>y){part=order[index-1]}}return part}function coordsBidiPartWrapped(cm,lineObj,_lineNo,preparedMeasure,order,x,y){var ref=wrappedLineExtent(cm,lineObj,preparedMeasure,y);var begin=ref.begin;var end=ref.end;if(/\s/.test(lineObj.text.charAt(end-1))){end--}var part=null,closestDist=null;for(var i=0;i=end||p.to<=begin){continue}var ltr=p.level!=1;var endX=measureCharPrepared(cm,preparedMeasure,ltr?Math.min(end,p.to)-1:Math.max(begin,p.from)).right;var dist=endXdist){part=p;closestDist=dist}}if(!part){part=order[order.length-1]}if(part.fromend){part={from:part.from,to:end,level:part.level}}return part}var measureText;function textHeight(display){if(display.cachedTextHeight!=null){return display.cachedTextHeight}if(measureText==null){measureText=elt("pre",null,"CodeMirror-line-like");for(var i=0;i<49;++i){measureText.appendChild(document.createTextNode("x"));measureText.appendChild(elt("br"))}measureText.appendChild(document.createTextNode("x"))}removeChildrenAndAdd(display.measure,measureText);var height=measureText.offsetHeight/50;if(height>3){display.cachedTextHeight=height}removeChildren(display.measure);return height||1}function charWidth(display){if(display.cachedCharWidth!=null){return display.cachedCharWidth}var anchor=elt("span","xxxxxxxxxx");var pre=elt("pre",[anchor],"CodeMirror-line-like");removeChildrenAndAdd(display.measure,pre);var rect=anchor.getBoundingClientRect(),width=(rect.right-rect.left)/10;if(width>2){display.cachedCharWidth=width}return width||10}function getDimensions(cm){var d=cm.display,left={},width={};var gutterLeft=d.gutters.clientLeft;for(var n=d.gutters.firstChild,i=0;n;n=n.nextSibling,++i){var id=cm.display.gutterSpecs[i].className;left[id]=n.offsetLeft+n.clientLeft+gutterLeft;width[id]=n.clientWidth}return{fixedPos:compensateForHScroll(d),gutterTotalWidth:d.gutters.offsetWidth,gutterLeft:left,gutterWidth:width,wrapperWidth:d.wrapper.clientWidth}}function compensateForHScroll(display){return display.scroller.getBoundingClientRect().left-display.sizer.getBoundingClientRect().left}function estimateHeight(cm){var th=textHeight(cm.display),wrapping=cm.options.lineWrapping;var perLine=wrapping&&Math.max(5,cm.display.scroller.clientWidth/charWidth(cm.display)-3);return function(line){if(lineIsHidden(cm.doc,line)){return 0}var widgetsHeight=0;if(line.widgets){for(var i=0;i0&&(line=getLine(cm.doc,coords.line).text).length==coords.ch){var colDiff=countColumn(line,line.length,cm.options.tabSize)-line.length;coords=Pos(coords.line,Math.max(0,Math.round((x-paddingH(cm.display).left)/charWidth(cm.display))-colDiff))}return coords}function findViewIndex(cm,n){if(n>=cm.display.viewTo){return null}n-=cm.display.viewFrom;if(n<0){return null}var view=cm.display.view;for(var i=0;ifrom)){display.updateLineNumbers=from}cm.curOp.viewChanged=true;if(from>=display.viewTo){if(sawCollapsedSpans&&visualLineNo(cm.doc,from)display.viewFrom){resetView(cm)}else{display.viewFrom+=lendiff;display.viewTo+=lendiff}}else if(from<=display.viewFrom&&to>=display.viewTo){resetView(cm)}else if(from<=display.viewFrom){var cut=viewCuttingPoint(cm,to,to+lendiff,1);if(cut){display.view=display.view.slice(cut.index);display.viewFrom=cut.lineN;display.viewTo+=lendiff}else{resetView(cm)}}else if(to>=display.viewTo){var cut$1=viewCuttingPoint(cm,from,from,-1);if(cut$1){display.view=display.view.slice(0,cut$1.index);display.viewTo=cut$1.lineN}else{resetView(cm)}}else{var cutTop=viewCuttingPoint(cm,from,from,-1);var cutBot=viewCuttingPoint(cm,to,to+lendiff,1);if(cutTop&&cutBot){display.view=display.view.slice(0,cutTop.index).concat(buildViewArray(cm,cutTop.lineN,cutBot.lineN)).concat(display.view.slice(cutBot.index));display.viewTo+=lendiff}else{resetView(cm)}}var ext=display.externalMeasured;if(ext){if(to=ext.lineN&&line=display.viewTo){return}var lineView=display.view[findViewIndex(cm,line)];if(lineView.node==null){return}var arr=lineView.changes||(lineView.changes=[]);if(indexOf(arr,type)==-1){arr.push(type)}}function resetView(cm){cm.display.viewFrom=cm.display.viewTo=cm.doc.first;cm.display.view=[];cm.display.viewOffset=0}function viewCuttingPoint(cm,oldN,newN,dir){var index=findViewIndex(cm,oldN),diff,view=cm.display.view;if(!sawCollapsedSpans||newN==cm.doc.first+cm.doc.size){return{index:index,lineN:newN}}var n=cm.display.viewFrom;for(var i=0;i0){if(index==view.length-1){return null}diff=n+view[index].size-oldN;index++}else{diff=n-oldN}oldN+=diff;newN+=diff}while(visualLineNo(cm.doc,newN)!=newN){if(index==(dir<0?0:view.length-1)){return null}newN+=dir*view[index-(dir<0?1:0)].size;index+=dir}return{index:index,lineN:newN}}function adjustView(cm,from,to){var display=cm.display,view=display.view;if(view.length==0||from>=display.viewTo||to<=display.viewFrom){display.view=buildViewArray(cm,from,to);display.viewFrom=from}else{if(display.viewFrom>from){display.view=buildViewArray(cm,from,display.viewFrom).concat(display.view)}else if(display.viewFromto){display.view=display.view.slice(0,findViewIndex(cm,to))}}display.viewTo=to}function countDirtyView(cm){var view=cm.display.view,dirty=0;for(var i=0;i=cm.display.viewTo||range.to().line0?width:cm.defaultCharWidth())+"px"}if(pos.other){var otherCursor=output.appendChild(elt("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));otherCursor.style.display="";otherCursor.style.left=pos.other.left+"px";otherCursor.style.top=pos.other.top+"px";otherCursor.style.height=(pos.other.bottom-pos.other.top)*.85+"px"}}function cmpCoords(a,b){return a.top-b.top||a.left-b.left}function drawSelectionRange(cm,range,output){var display=cm.display,doc=cm.doc;var fragment=document.createDocumentFragment();var padding=paddingH(cm.display),leftSide=padding.left;var rightSide=Math.max(display.sizerWidth,displayWidth(cm)-display.sizer.offsetLeft)-padding.right;var docLTR=doc.direction=="ltr";function add(left,top,width,bottom){if(top<0){top=0}top=Math.round(top);bottom=Math.round(bottom);fragment.appendChild(elt("div",null,"CodeMirror-selected","position: absolute; left: "+left+"px;\n top: "+top+"px; width: "+(width==null?rightSide-left:width)+"px;\n height: "+(bottom-top)+"px"))}function drawForLine(line,fromArg,toArg){var lineObj=getLine(doc,line);var lineLen=lineObj.text.length;var start,end;function coords(ch,bias){return charCoords(cm,Pos(line,ch),"div",lineObj,bias)}function wrapX(pos,dir,side){var extent=wrappedLineExtentChar(cm,lineObj,null,pos);var prop=dir=="ltr"==(side=="after")?"left":"right";var ch=side=="after"?extent.begin:extent.end-(/\s/.test(lineObj.text.charAt(extent.end-1))?2:1);return coords(ch,prop)[prop]}var order=getOrder(lineObj,doc.direction);iterateBidiSections(order,fromArg||0,toArg==null?lineLen:toArg,function(from,to,dir,i){var ltr=dir=="ltr";var fromPos=coords(from,ltr?"left":"right");var toPos=coords(to-1,ltr?"right":"left");var openStart=fromArg==null&&from==0,openEnd=toArg==null&&to==lineLen;var first=i==0,last=!order||i==order.length-1;if(toPos.top-fromPos.top<=3){var openLeft=(docLTR?openStart:openEnd)&&first;var openRight=(docLTR?openEnd:openStart)&&last;var left=openLeft?leftSide:(ltr?fromPos:toPos).left;var right=openRight?rightSide:(ltr?toPos:fromPos).right;add(left,fromPos.top,right-left,fromPos.bottom)}else{var topLeft,topRight,botLeft,botRight;if(ltr){topLeft=docLTR&&openStart&&first?leftSide:fromPos.left;topRight=docLTR?rightSide:wrapX(from,dir,"before");botLeft=docLTR?leftSide:wrapX(to,dir,"after");botRight=docLTR&&openEnd&&last?rightSide:toPos.right}else{topLeft=!docLTR?leftSide:wrapX(from,dir,"before");topRight=!docLTR&&openStart&&first?rightSide:fromPos.right;botLeft=!docLTR&&openEnd&&last?leftSide:toPos.left;botRight=!docLTR?rightSide:wrapX(to,dir,"after")}add(topLeft,fromPos.top,topRight-topLeft,fromPos.bottom);if(fromPos.bottom0){display.blinker=setInterval(function(){if(!cm.hasFocus()){onBlur(cm)}display.cursorDiv.style.visibility=(on=!on)?"":"hidden"},cm.options.cursorBlinkRate)}else if(cm.options.cursorBlinkRate<0){display.cursorDiv.style.visibility="hidden"}}function ensureFocus(cm){if(!cm.hasFocus()){cm.display.input.focus();if(!cm.state.focused){onFocus(cm)}}}function delayBlurEvent(cm){cm.state.delayingBlurEvent=true;setTimeout(function(){if(cm.state.delayingBlurEvent){cm.state.delayingBlurEvent=false;if(cm.state.focused){onBlur(cm)}}},100)}function onFocus(cm,e){if(cm.state.delayingBlurEvent&&!cm.state.draggingText){cm.state.delayingBlurEvent=false}if(cm.options.readOnly=="nocursor"){return}if(!cm.state.focused){signal(cm,"focus",cm,e);cm.state.focused=true;addClass(cm.display.wrapper,"CodeMirror-focused");if(!cm.curOp&&cm.display.selForContextMenu!=cm.doc.sel){cm.display.input.reset();if(webkit){setTimeout(function(){return cm.display.input.reset(true)},20)}}cm.display.input.receivedFocus()}restartBlink(cm)}function onBlur(cm,e){if(cm.state.delayingBlurEvent){return}if(cm.state.focused){signal(cm,"blur",cm,e);cm.state.focused=false;rmClass(cm.display.wrapper,"CodeMirror-focused")}clearInterval(cm.display.blinker);setTimeout(function(){if(!cm.state.focused){cm.display.shift=false}},150)}function updateHeightsInViewport(cm){var display=cm.display;var prevBottom=display.lineDiv.offsetTop;var viewTop=Math.max(0,display.scroller.getBoundingClientRect().top);var oldHeight=display.lineDiv.getBoundingClientRect().top;var mustScroll=0;for(var i=0;i.005||diff<-.005){if(oldHeightcm.display.sizerWidth){var chWidth=Math.ceil(width/charWidth(cm.display));if(chWidth>cm.display.maxLineLength){cm.display.maxLineLength=chWidth;cm.display.maxLine=cur.line;cm.display.maxLineChanged=true}}}if(Math.abs(mustScroll)>2){display.scroller.scrollTop+=mustScroll}}function updateWidgetHeight(line){if(line.widgets){for(var i=0;i=to){from=lineAtHeight(doc,heightAtLine(getLine(doc,ensureTo))-display.wrapper.clientHeight);to=ensureTo}}return{from:from,to:Math.max(to,from+1)}}function maybeScrollWindow(cm,rect){if(signalDOMEvent(cm,"scrollCursorIntoView")){return}var display=cm.display,box=display.sizer.getBoundingClientRect(),doScroll=null;var doc=display.wrapper.ownerDocument;if(rect.top+box.top<0){doScroll=true}else if(rect.bottom+box.top>(doc.defaultView.innerHeight||doc.documentElement.clientHeight)){doScroll=false}if(doScroll!=null&&!phantom){var scrollNode=elt("div","",null,"position: absolute;\n top: "+(rect.top-display.viewOffset-paddingTop(cm.display))+"px;\n height: "+(rect.bottom-rect.top+scrollGap(cm)+display.barHeight)+"px;\n left: "+rect.left+"px; width: "+Math.max(2,rect.right-rect.left)+"px;");cm.display.lineSpace.appendChild(scrollNode);scrollNode.scrollIntoView(doScroll);cm.display.lineSpace.removeChild(scrollNode)}}function scrollPosIntoView(cm,pos,end,margin){if(margin==null){margin=0}var rect;if(!cm.options.lineWrapping&&pos==end){end=pos.sticky=="before"?Pos(pos.line,pos.ch+1,"before"):pos;pos=pos.ch?Pos(pos.line,pos.sticky=="before"?pos.ch-1:pos.ch,"after"):pos}for(var limit=0;limit<5;limit++){var changed=false;var coords=cursorCoords(cm,pos);var endCoords=!end||end==pos?coords:cursorCoords(cm,end);rect={left:Math.min(coords.left,endCoords.left),top:Math.min(coords.top,endCoords.top)-margin,right:Math.max(coords.left,endCoords.left),bottom:Math.max(coords.bottom,endCoords.bottom)+margin};var scrollPos=calculateScrollPos(cm,rect);var startTop=cm.doc.scrollTop,startLeft=cm.doc.scrollLeft;if(scrollPos.scrollTop!=null){updateScrollTop(cm,scrollPos.scrollTop);if(Math.abs(cm.doc.scrollTop-startTop)>1){changed=true}}if(scrollPos.scrollLeft!=null){setScrollLeft(cm,scrollPos.scrollLeft);if(Math.abs(cm.doc.scrollLeft-startLeft)>1){changed=true}}if(!changed){break}}return rect}function scrollIntoView(cm,rect){var scrollPos=calculateScrollPos(cm,rect);if(scrollPos.scrollTop!=null){updateScrollTop(cm,scrollPos.scrollTop)}if(scrollPos.scrollLeft!=null){setScrollLeft(cm,scrollPos.scrollLeft)}}function calculateScrollPos(cm,rect){var display=cm.display,snapMargin=textHeight(cm.display);if(rect.top<0){rect.top=0}var screentop=cm.curOp&&cm.curOp.scrollTop!=null?cm.curOp.scrollTop:display.scroller.scrollTop;var screen=displayHeight(cm),result={};if(rect.bottom-rect.top>screen){rect.bottom=rect.top+screen}var docBottom=cm.doc.height+paddingVert(display);var atTop=rect.topdocBottom-snapMargin;if(rect.topscreentop+screen){var newTop=Math.min(rect.top,(atBottom?docBottom:rect.bottom)-screen);if(newTop!=screentop){result.scrollTop=newTop}}var gutterSpace=cm.options.fixedGutter?0:display.gutters.offsetWidth;var screenleft=cm.curOp&&cm.curOp.scrollLeft!=null?cm.curOp.scrollLeft:display.scroller.scrollLeft-gutterSpace;var screenw=displayWidth(cm)-display.gutters.offsetWidth;var tooWide=rect.right-rect.left>screenw;if(tooWide){rect.right=rect.left+screenw}if(rect.left<10){result.scrollLeft=0}else if(rect.leftscreenw+screenleft-3){result.scrollLeft=rect.right+(tooWide?0:10)-screenw}return result}function addToScrollTop(cm,top){if(top==null){return}resolveScrollToPos(cm);cm.curOp.scrollTop=(cm.curOp.scrollTop==null?cm.doc.scrollTop:cm.curOp.scrollTop)+top}function ensureCursorVisible(cm){resolveScrollToPos(cm);var cur=cm.getCursor();cm.curOp.scrollToPos={from:cur,to:cur,margin:cm.options.cursorScrollMargin}}function scrollToCoords(cm,x,y){if(x!=null||y!=null){resolveScrollToPos(cm)}if(x!=null){cm.curOp.scrollLeft=x}if(y!=null){cm.curOp.scrollTop=y}}function scrollToRange(cm,range){resolveScrollToPos(cm);cm.curOp.scrollToPos=range}function resolveScrollToPos(cm){var range=cm.curOp.scrollToPos;if(range){cm.curOp.scrollToPos=null;var from=estimateCoords(cm,range.from),to=estimateCoords(cm,range.to);scrollToCoordsRange(cm,from,to,range.margin)}}function scrollToCoordsRange(cm,from,to,margin){var sPos=calculateScrollPos(cm,{left:Math.min(from.left,to.left),top:Math.min(from.top,to.top)-margin,right:Math.max(from.right,to.right),bottom:Math.max(from.bottom,to.bottom)+margin});scrollToCoords(cm,sPos.scrollLeft,sPos.scrollTop)}function updateScrollTop(cm,val){if(Math.abs(cm.doc.scrollTop-val)<2){return}if(!gecko){updateDisplaySimple(cm,{top:val})}setScrollTop(cm,val,true);if(gecko){updateDisplaySimple(cm)}startWorker(cm,100)}function setScrollTop(cm,val,forceScroll){val=Math.max(0,Math.min(cm.display.scroller.scrollHeight-cm.display.scroller.clientHeight,val));if(cm.display.scroller.scrollTop==val&&!forceScroll){return}cm.doc.scrollTop=val;cm.display.scrollbars.setScrollTop(val);if(cm.display.scroller.scrollTop!=val){cm.display.scroller.scrollTop=val}}function setScrollLeft(cm,val,isScroller,forceScroll){val=Math.max(0,Math.min(val,cm.display.scroller.scrollWidth-cm.display.scroller.clientWidth));if((isScroller?val==cm.doc.scrollLeft:Math.abs(cm.doc.scrollLeft-val)<2)&&!forceScroll){return}cm.doc.scrollLeft=val;alignHorizontally(cm);if(cm.display.scroller.scrollLeft!=val){cm.display.scroller.scrollLeft=val}cm.display.scrollbars.setScrollLeft(val)}function measureForScrollbars(cm){var d=cm.display,gutterW=d.gutters.offsetWidth;var docH=Math.round(cm.doc.height+paddingVert(cm.display));return{clientHeight:d.scroller.clientHeight,viewHeight:d.wrapper.clientHeight,scrollWidth:d.scroller.scrollWidth,clientWidth:d.scroller.clientWidth,viewWidth:d.wrapper.clientWidth,barLeft:cm.options.fixedGutter?gutterW:0,docHeight:docH,scrollHeight:docH+scrollGap(cm)+d.barHeight,nativeBarWidth:d.nativeBarWidth,gutterWidth:gutterW}}var NativeScrollbars=function(place,scroll,cm){this.cm=cm;var vert=this.vert=elt("div",[elt("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar");var horiz=this.horiz=elt("div",[elt("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");vert.tabIndex=horiz.tabIndex=-1;place(vert);place(horiz);on(vert,"scroll",function(){if(vert.clientHeight){scroll(vert.scrollTop,"vertical")}});on(horiz,"scroll",function(){if(horiz.clientWidth){scroll(horiz.scrollLeft,"horizontal")}});this.checkedZeroWidth=false;if(ie&&ie_version<8){this.horiz.style.minHeight=this.vert.style.minWidth="18px"}};NativeScrollbars.prototype.update=function(measure){var needsH=measure.scrollWidth>measure.clientWidth+1;var needsV=measure.scrollHeight>measure.clientHeight+1;var sWidth=measure.nativeBarWidth;if(needsV){this.vert.style.display="block";this.vert.style.bottom=needsH?sWidth+"px":"0";var totalHeight=measure.viewHeight-(needsH?sWidth:0);this.vert.firstChild.style.height=Math.max(0,measure.scrollHeight-measure.clientHeight+totalHeight)+"px"}else{this.vert.scrollTop=0;this.vert.style.display="";this.vert.firstChild.style.height="0"}if(needsH){this.horiz.style.display="block";this.horiz.style.right=needsV?sWidth+"px":"0";this.horiz.style.left=measure.barLeft+"px";var totalWidth=measure.viewWidth-measure.barLeft-(needsV?sWidth:0);this.horiz.firstChild.style.width=Math.max(0,measure.scrollWidth-measure.clientWidth+totalWidth)+"px"}else{this.horiz.style.display="";this.horiz.firstChild.style.width="0"}if(!this.checkedZeroWidth&&measure.clientHeight>0){if(sWidth==0){this.zeroWidthHack()}this.checkedZeroWidth=true}return{right:needsV?sWidth:0,bottom:needsH?sWidth:0}};NativeScrollbars.prototype.setScrollLeft=function(pos){if(this.horiz.scrollLeft!=pos){this.horiz.scrollLeft=pos}if(this.disableHoriz){this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")}};NativeScrollbars.prototype.setScrollTop=function(pos){if(this.vert.scrollTop!=pos){this.vert.scrollTop=pos}if(this.disableVert){this.enableZeroWidthBar(this.vert,this.disableVert,"vert")}};NativeScrollbars.prototype.zeroWidthHack=function(){var w=mac&&!mac_geMountainLion?"12px":"18px";this.horiz.style.height=this.vert.style.width=w;this.horiz.style.visibility=this.vert.style.visibility="hidden";this.disableHoriz=new Delayed;this.disableVert=new Delayed};NativeScrollbars.prototype.enableZeroWidthBar=function(bar,delay,type){bar.style.visibility="";function maybeDisable(){var box=bar.getBoundingClientRect();var elt=type=="vert"?document.elementFromPoint(box.right-1,(box.top+box.bottom)/2):document.elementFromPoint((box.right+box.left)/2,box.bottom-1);if(elt!=bar){bar.style.visibility="hidden"}else{delay.set(1e3,maybeDisable)}}delay.set(1e3,maybeDisable)};NativeScrollbars.prototype.clear=function(){var parent=this.horiz.parentNode;parent.removeChild(this.horiz);parent.removeChild(this.vert)};var NullScrollbars=function(){};NullScrollbars.prototype.update=function(){return{bottom:0,right:0}};NullScrollbars.prototype.setScrollLeft=function(){};NullScrollbars.prototype.setScrollTop=function(){};NullScrollbars.prototype.clear=function(){};function updateScrollbars(cm,measure){if(!measure){measure=measureForScrollbars(cm)}var startWidth=cm.display.barWidth,startHeight=cm.display.barHeight;updateScrollbarsInner(cm,measure);for(var i=0;i<4&&startWidth!=cm.display.barWidth||startHeight!=cm.display.barHeight;i++){if(startWidth!=cm.display.barWidth&&cm.options.lineWrapping){updateHeightsInViewport(cm)}updateScrollbarsInner(cm,measureForScrollbars(cm));startWidth=cm.display.barWidth;startHeight=cm.display.barHeight}}function updateScrollbarsInner(cm,measure){var d=cm.display;var sizes=d.scrollbars.update(measure);d.sizer.style.paddingRight=(d.barWidth=sizes.right)+"px";d.sizer.style.paddingBottom=(d.barHeight=sizes.bottom)+"px";d.heightForcer.style.borderBottom=sizes.bottom+"px solid transparent";if(sizes.right&&sizes.bottom){d.scrollbarFiller.style.display="block";d.scrollbarFiller.style.height=sizes.bottom+"px";d.scrollbarFiller.style.width=sizes.right+"px"}else{d.scrollbarFiller.style.display=""}if(sizes.bottom&&cm.options.coverGutterNextToScrollbar&&cm.options.fixedGutter){d.gutterFiller.style.display="block";d.gutterFiller.style.height=sizes.bottom+"px";d.gutterFiller.style.width=measure.gutterWidth+"px"}else{d.gutterFiller.style.display=""}}var scrollbarModel={native:NativeScrollbars,null:NullScrollbars};function initScrollbars(cm){if(cm.display.scrollbars){cm.display.scrollbars.clear();if(cm.display.scrollbars.addClass){rmClass(cm.display.wrapper,cm.display.scrollbars.addClass)}}cm.display.scrollbars=new scrollbarModel[cm.options.scrollbarStyle](function(node){cm.display.wrapper.insertBefore(node,cm.display.scrollbarFiller);on(node,"mousedown",function(){if(cm.state.focused){setTimeout(function(){return cm.display.input.focus()},0)}});node.setAttribute("cm-not-content","true")},function(pos,axis){if(axis=="horizontal"){setScrollLeft(cm,pos)}else{updateScrollTop(cm,pos)}},cm);if(cm.display.scrollbars.addClass){addClass(cm.display.wrapper,cm.display.scrollbars.addClass)}}var nextOpId=0;function startOperation(cm){cm.curOp={cm:cm,viewChanged:false,startHeight:cm.doc.height,forceUpdate:false,updateInput:0,typing:false,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:false,updateMaxLine:false,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:false,id:++nextOpId,markArrays:null};pushOperation(cm.curOp)}function endOperation(cm){var op=cm.curOp;if(op){finishOperation(op,function(group){for(var i=0;i=display.viewTo)||display.maxLineChanged&&cm.options.lineWrapping;op.update=op.mustUpdate&&new DisplayUpdate(cm,op.mustUpdate&&{top:op.scrollTop,ensure:op.scrollToPos},op.forceUpdate)}function endOperation_W1(op){op.updatedDisplay=op.mustUpdate&&updateDisplayIfNeeded(op.cm,op.update)}function endOperation_R2(op){var cm=op.cm,display=cm.display;if(op.updatedDisplay){updateHeightsInViewport(cm)}op.barMeasure=measureForScrollbars(cm);if(display.maxLineChanged&&!cm.options.lineWrapping){op.adjustWidthTo=measureChar(cm,display.maxLine,display.maxLine.text.length).left+3;cm.display.sizerWidth=op.adjustWidthTo;op.barMeasure.scrollWidth=Math.max(display.scroller.clientWidth,display.sizer.offsetLeft+op.adjustWidthTo+scrollGap(cm)+cm.display.barWidth);op.maxScrollLeft=Math.max(0,display.sizer.offsetLeft+op.adjustWidthTo-displayWidth(cm))}if(op.updatedDisplay||op.selectionChanged){op.preparedSelection=display.input.prepareSelection()}}function endOperation_W2(op){var cm=op.cm;if(op.adjustWidthTo!=null){cm.display.sizer.style.minWidth=op.adjustWidthTo+"px";if(op.maxScrollLeft=cm.display.viewTo){return}var end=+new Date+cm.options.workTime;var context=getContextBefore(cm,doc.highlightFrontier);var changedLines=[];doc.iter(context.line,Math.min(doc.first+doc.size,cm.display.viewTo+500),function(line){if(context.line>=cm.display.viewFrom){var oldStyles=line.styles;var resetState=line.text.length>cm.options.maxHighlightLength?copyState(doc.mode,context.state):null;var highlighted=highlightLine(cm,line,context,true);if(resetState){context.state=resetState}line.styles=highlighted.styles;var oldCls=line.styleClasses,newCls=highlighted.classes;if(newCls){line.styleClasses=newCls}else if(oldCls){line.styleClasses=null}var ischange=!oldStyles||oldStyles.length!=line.styles.length||oldCls!=newCls&&(!oldCls||!newCls||oldCls.bgClass!=newCls.bgClass||oldCls.textClass!=newCls.textClass);for(var i=0;!ischange&&iend){startWorker(cm,cm.options.workDelay);return true}});doc.highlightFrontier=context.line;doc.modeFrontier=Math.max(doc.modeFrontier,context.line);if(changedLines.length){runInOp(cm,function(){for(var i=0;i=display.viewFrom&&update.visible.to<=display.viewTo&&(display.updateLineNumbers==null||display.updateLineNumbers>=display.viewTo)&&display.renderedView==display.view&&countDirtyView(cm)==0){return false}if(maybeUpdateLineNumberWidth(cm)){resetView(cm);update.dims=getDimensions(cm)}var end=doc.first+doc.size;var from=Math.max(update.visible.from-cm.options.viewportMargin,doc.first);var to=Math.min(end,update.visible.to+cm.options.viewportMargin);if(display.viewFromto&&display.viewTo-to<20){to=Math.min(end,display.viewTo)}if(sawCollapsedSpans){from=visualLineNo(cm.doc,from);to=visualLineEndNo(cm.doc,to)}var different=from!=display.viewFrom||to!=display.viewTo||display.lastWrapHeight!=update.wrapperHeight||display.lastWrapWidth!=update.wrapperWidth;adjustView(cm,from,to);display.viewOffset=heightAtLine(getLine(cm.doc,display.viewFrom));cm.display.mover.style.top=display.viewOffset+"px";var toUpdate=countDirtyView(cm);if(!different&&toUpdate==0&&!update.force&&display.renderedView==display.view&&(display.updateLineNumbers==null||display.updateLineNumbers>=display.viewTo)){return false}var selSnapshot=selectionSnapshot(cm);if(toUpdate>4){display.lineDiv.style.display="none"}patchDisplay(cm,display.updateLineNumbers,update.dims);if(toUpdate>4){display.lineDiv.style.display=""}display.renderedView=display.view;restoreSelection(selSnapshot);removeChildren(display.cursorDiv);removeChildren(display.selectionDiv);display.gutters.style.height=display.sizer.style.minHeight=0;if(different){display.lastWrapHeight=update.wrapperHeight;display.lastWrapWidth=update.wrapperWidth;startWorker(cm,400)}display.updateLineNumbers=null;return true}function postUpdateDisplay(cm,update){var viewport=update.viewport;for(var first=true;;first=false){if(!first||!cm.options.lineWrapping||update.oldDisplayWidth==displayWidth(cm)){if(viewport&&viewport.top!=null){viewport={top:Math.min(cm.doc.height+paddingVert(cm.display)-displayHeight(cm),viewport.top)}}update.visible=visibleLines(cm.display,cm.doc,viewport);if(update.visible.from>=cm.display.viewFrom&&update.visible.to<=cm.display.viewTo){break}}else if(first){update.visible=visibleLines(cm.display,cm.doc,viewport)}if(!updateDisplayIfNeeded(cm,update)){break}updateHeightsInViewport(cm);var barMeasure=measureForScrollbars(cm);updateSelection(cm);updateScrollbars(cm,barMeasure);setDocumentHeight(cm,barMeasure);update.force=false}update.signal(cm,"update",cm);if(cm.display.viewFrom!=cm.display.reportedViewFrom||cm.display.viewTo!=cm.display.reportedViewTo){update.signal(cm,"viewportChange",cm,cm.display.viewFrom,cm.display.viewTo);cm.display.reportedViewFrom=cm.display.viewFrom;cm.display.reportedViewTo=cm.display.viewTo}}function updateDisplaySimple(cm,viewport){var update=new DisplayUpdate(cm,viewport);if(updateDisplayIfNeeded(cm,update)){updateHeightsInViewport(cm);postUpdateDisplay(cm,update);var barMeasure=measureForScrollbars(cm);updateSelection(cm);updateScrollbars(cm,barMeasure);setDocumentHeight(cm,barMeasure);update.finish()}}function patchDisplay(cm,updateNumbersFrom,dims){var display=cm.display,lineNumbers=cm.options.lineNumbers;var container=display.lineDiv,cur=container.firstChild;function rm(node){var next=node.nextSibling;if(webkit&&mac&&cm.display.currentWheelTarget==node){node.style.display="none"}else{node.parentNode.removeChild(node)}return next}var view=display.view,lineN=display.viewFrom;for(var i=0;i-1){updateNumber=false}updateLineForChanges(cm,lineView,lineN,dims)}if(updateNumber){removeChildren(lineView.lineNumber);lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options,lineN)))}cur=lineView.node.nextSibling}lineN+=lineView.size}while(cur){cur=rm(cur)}}function updateGutterSpace(display){var width=display.gutters.offsetWidth;display.sizer.style.marginLeft=width+"px";signalLater(display,"gutterChanged",display)}function setDocumentHeight(cm,measure){cm.display.sizer.style.minHeight=measure.docHeight+"px";cm.display.heightForcer.style.top=measure.docHeight+"px";cm.display.gutters.style.height=measure.docHeight+cm.display.barHeight+scrollGap(cm)+"px"}function alignHorizontally(cm){var display=cm.display,view=display.view;if(!display.alignWidgets&&(!display.gutters.firstChild||!cm.options.fixedGutter)){return}var comp=compensateForHScroll(display)-display.scroller.scrollLeft+cm.doc.scrollLeft;var gutterW=display.gutters.offsetWidth,left=comp+"px";for(var i=0;iscroll.clientWidth;var canScrollY=scroll.scrollHeight>scroll.clientHeight;if(!(dx&&canScrollX||dy&&canScrollY)){return}if(dy&&mac&&webkit){outer:for(var cur=e.target,view=display.view;cur!=scroll;cur=cur.parentNode){for(var i=0;i=0&&cmp(pos,range.to())<=0){return i}}return-1};var Range=function(anchor,head){this.anchor=anchor;this.head=head};Range.prototype.from=function(){return minPos(this.anchor,this.head)};Range.prototype.to=function(){return maxPos(this.anchor,this.head)};Range.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch};function normalizeSelection(cm,ranges,primIndex){var mayTouch=cm&&cm.options.selectionsMayTouch;var prim=ranges[primIndex];ranges.sort(function(a,b){return cmp(a.from(),b.from())});primIndex=indexOf(ranges,prim);for(var i=1;i0:diff>=0){var from=minPos(prev.from(),cur.from()),to=maxPos(prev.to(),cur.to());var inv=prev.empty()?cur.from()==cur.head:prev.from()==prev.head;if(i<=primIndex){--primIndex}ranges.splice(--i,2,new Range(inv?to:from,inv?from:to))}}return new Selection(ranges,primIndex)}function simpleSelection(anchor,head){return new Selection([new Range(anchor,head||anchor)],0)}function changeEnd(change){if(!change.text){return change.to}return Pos(change.from.line+change.text.length-1,lst(change.text).length+(change.text.length==1?change.from.ch:0))}function adjustForChange(pos,change){if(cmp(pos,change.from)<0){return pos}if(cmp(pos,change.to)<=0){return changeEnd(change)}var line=pos.line+change.text.length-(change.to.line-change.from.line)-1,ch=pos.ch;if(pos.line==change.to.line){ch+=changeEnd(change).ch-change.to.ch}return Pos(line,ch)}function computeSelAfterChange(doc,change){var out=[];for(var i=0;i1){doc.remove(from.line+1,nlines-1)}doc.insert(from.line+1,added$2)}signalLater(doc,"change",doc,change)}function linkedDocs(doc,f,sharedHistOnly){function propagate(doc,skip,sharedHist){if(doc.linked){for(var i=0;i1&&!hist.done[hist.done.length-2].ranges){hist.done.pop();return lst(hist.done)}}function addChangeToHistory(doc,change,selAfter,opId){var hist=doc.history;hist.undone.length=0;var time=+new Date,cur;var last;if((hist.lastOp==opId||hist.lastOrigin==change.origin&&change.origin&&(change.origin.charAt(0)=="+"&&hist.lastModTime>time-(doc.cm?doc.cm.options.historyEventDelay:500)||change.origin.charAt(0)=="*"))&&(cur=lastChangeEvent(hist,hist.lastOp==opId))){last=lst(cur.changes);if(cmp(change.from,change.to)==0&&cmp(change.from,last.to)==0){last.to=changeEnd(change)}else{cur.changes.push(historyChangeFromChange(doc,change))}}else{var before=lst(hist.done);if(!before||!before.ranges){pushSelectionToHistory(doc.sel,hist.done)}cur={changes:[historyChangeFromChange(doc,change)],generation:hist.generation};hist.done.push(cur);while(hist.done.length>hist.undoDepth){hist.done.shift();if(!hist.done[0].ranges){hist.done.shift()}}}hist.done.push(selAfter);hist.generation=++hist.maxGeneration;hist.lastModTime=hist.lastSelTime=time;hist.lastOp=hist.lastSelOp=opId;hist.lastOrigin=hist.lastSelOrigin=change.origin;if(!last){signal(doc,"historyAdded")}}function selectionEventCanBeMerged(doc,origin,prev,sel){var ch=origin.charAt(0);return ch=="*"||ch=="+"&&prev.ranges.length==sel.ranges.length&&prev.somethingSelected()==sel.somethingSelected()&&new Date-doc.history.lastSelTime<=(doc.cm?doc.cm.options.historyEventDelay:500)}function addSelectionToHistory(doc,sel,opId,options){var hist=doc.history,origin=options&&options.origin;if(opId==hist.lastSelOp||origin&&hist.lastSelOrigin==origin&&(hist.lastModTime==hist.lastSelTime&&hist.lastOrigin==origin||selectionEventCanBeMerged(doc,origin,lst(hist.done),sel))){hist.done[hist.done.length-1]=sel}else{pushSelectionToHistory(sel,hist.done)}hist.lastSelTime=+new Date;hist.lastSelOrigin=origin;hist.lastSelOp=opId;if(options&&options.clearRedo!==false){clearSelectionEvents(hist.undone)}}function pushSelectionToHistory(sel,dest){var top=lst(dest);if(!(top&&top.ranges&&top.equals(sel))){dest.push(sel)}}function attachLocalSpans(doc,change,from,to){var existing=change["spans_"+doc.id],n=0;doc.iter(Math.max(doc.first,from),Math.min(doc.first+doc.size,to),function(line){if(line.markedSpans){(existing||(existing=change["spans_"+doc.id]={}))[n]=line.markedSpans}++n})}function removeClearedSpans(spans){if(!spans){return null}var out;for(var i=0;i-1){lst(newChanges)[prop]=change[prop];delete change[prop]}}}}}}return copy}function extendRange(range,head,other,extend){if(extend){var anchor=range.anchor;if(other){var posBefore=cmp(head,anchor)<0;if(posBefore!=cmp(other,anchor)<0){anchor=head;head=other}else if(posBefore!=cmp(head,other)<0){head=other}}return new Range(anchor,head)}else{return new Range(other||head,head)}}function extendSelection(doc,head,other,options,extend){if(extend==null){extend=doc.cm&&(doc.cm.display.shift||doc.extend)}setSelection(doc,new Selection([extendRange(doc.sel.primary(),head,other,extend)],0),options)}function extendSelections(doc,heads,options){var out=[];var extend=doc.cm&&(doc.cm.display.shift||doc.extend);for(var i=0;i=pos.ch:sp.to>pos.ch))){if(mayClear){signal(m,"beforeCursorEnter");if(m.explicitlyCleared){if(!line.markedSpans){break}else{--i;continue}}}if(!m.atomic){continue}if(oldPos){var near=m.find(dir<0?1:-1),diff=void 0;if(dir<0?preventCursorRight:preventCursorLeft){near=movePos(doc,near,-dir,near&&near.line==pos.line?line:null)}if(near&&near.line==pos.line&&(diff=cmp(near,oldPos))&&(dir<0?diff<0:diff>0)){return skipAtomicInner(doc,near,pos,dir,mayClear)}}var far=m.find(dir<0?-1:1);if(dir<0?preventCursorLeft:preventCursorRight){far=movePos(doc,far,dir,far.line==pos.line?line:null)}return far?skipAtomicInner(doc,far,pos,dir,mayClear):null}}}return pos}function skipAtomic(doc,pos,oldPos,bias,mayClear){var dir=bias||1;var found=skipAtomicInner(doc,pos,oldPos,dir,mayClear)||!mayClear&&skipAtomicInner(doc,pos,oldPos,dir,true)||skipAtomicInner(doc,pos,oldPos,-dir,mayClear)||!mayClear&&skipAtomicInner(doc,pos,oldPos,-dir,true);if(!found){doc.cantEdit=true;return Pos(doc.first,0)}return found}function movePos(doc,pos,dir,line){if(dir<0&&pos.ch==0){if(pos.line>doc.first){return clipPos(doc,Pos(pos.line-1))}else{return null}}else if(dir>0&&pos.ch==(line||getLine(doc,pos.line)).text.length){if(pos.line=0;--i){makeChangeInner(doc,{from:split[i].from,to:split[i].to,text:i?[""]:change.text,origin:change.origin})}}else{makeChangeInner(doc,change)}}function makeChangeInner(doc,change){if(change.text.length==1&&change.text[0]==""&&cmp(change.from,change.to)==0){return}var selAfter=computeSelAfterChange(doc,change);addChangeToHistory(doc,change,selAfter,doc.cm?doc.cm.curOp.id:NaN);makeChangeSingleDoc(doc,change,selAfter,stretchSpansOverChange(doc,change));var rebased=[];linkedDocs(doc,function(doc,sharedHist){if(!sharedHist&&indexOf(rebased,doc.history)==-1){rebaseHist(doc.history,change);rebased.push(doc.history)}makeChangeSingleDoc(doc,change,null,stretchSpansOverChange(doc,change))})}function makeChangeFromHistory(doc,type,allowSelectionOnly){var suppress=doc.cm&&doc.cm.state.suppressEdits;if(suppress&&!allowSelectionOnly){return}var hist=doc.history,event,selAfter=doc.sel;var source=type=="undo"?hist.done:hist.undone,dest=type=="undo"?hist.undone:hist.done;var i=0;for(;i=0;--i$1){var returned=loop(i$1);if(returned)return returned.v}}function shiftDoc(doc,distance){if(distance==0){return}doc.first+=distance;doc.sel=new Selection(map(doc.sel.ranges,function(range){return new Range(Pos(range.anchor.line+distance,range.anchor.ch),Pos(range.head.line+distance,range.head.ch))}),doc.sel.primIndex);if(doc.cm){regChange(doc.cm,doc.first,doc.first-distance,distance);for(var d=doc.cm.display,l=d.viewFrom;ldoc.lastLine()){return}if(change.from.linelast){change={from:change.from,to:Pos(last,getLine(doc,last).text.length),text:[change.text[0]],origin:change.origin}}change.removed=getBetween(doc,change.from,change.to);if(!selAfter){selAfter=computeSelAfterChange(doc,change)}if(doc.cm){makeChangeSingleDocInEditor(doc.cm,change,spans)}else{updateDoc(doc,change,spans)}setSelectionNoUndo(doc,selAfter,sel_dontScroll);if(doc.cantEdit&&skipAtomic(doc,Pos(doc.firstLine(),0))){doc.cantEdit=false}}function makeChangeSingleDocInEditor(cm,change,spans){var doc=cm.doc,display=cm.display,from=change.from,to=change.to;var recomputeMaxLength=false,checkWidthStart=from.line;if(!cm.options.lineWrapping){checkWidthStart=lineNo(visualLine(getLine(doc,from.line)));doc.iter(checkWidthStart,to.line+1,function(line){if(line==display.maxLine){recomputeMaxLength=true;return true}})}if(doc.sel.contains(change.from,change.to)>-1){signalCursorActivity(cm)}updateDoc(doc,change,spans,estimateHeight(cm));if(!cm.options.lineWrapping){doc.iter(checkWidthStart,from.line+change.text.length,function(line){var len=lineLength(line);if(len>display.maxLineLength){display.maxLine=line;display.maxLineLength=len;display.maxLineChanged=true;recomputeMaxLength=false}});if(recomputeMaxLength){cm.curOp.updateMaxLine=true}}retreatFrontier(doc,from.line);startWorker(cm,400);var lendiff=change.text.length-(to.line-from.line)-1;if(change.full){regChange(cm)}else if(from.line==to.line&&change.text.length==1&&!isWholeLineUpdate(cm.doc,change)){regLineChange(cm,from.line,"text")}else{regChange(cm,from.line,to.line+1,lendiff)}var changesHandler=hasHandler(cm,"changes"),changeHandler=hasHandler(cm,"change");if(changeHandler||changesHandler){var obj={from:from,to:to,text:change.text,removed:change.removed,origin:change.origin};if(changeHandler){signalLater(cm,"change",cm,obj)}if(changesHandler){(cm.curOp.changeObjs||(cm.curOp.changeObjs=[])).push(obj)}}cm.display.selForContextMenu=null}function replaceRange(doc,code,from,to,origin){var assign;if(!to){to=from}if(cmp(to,from)<0){assign=[to,from],from=assign[0],to=assign[1]}if(typeof code=="string"){code=doc.splitLines(code)}makeChange(doc,{from:from,to:to,text:code,origin:origin})}function rebaseHistSelSingle(pos,from,to,diff){if(to1||!(this.children[0]instanceof LeafChunk))){var lines=[];this.collapse(lines);this.children=[new LeafChunk(lines)];this.children[0].parent=this}},collapse:function(lines){for(var i=0;i50){var remaining=child.lines.length%25+25;for(var pos=remaining;pos10);me.parent.maybeSpill()},iterN:function(at,n,op){for(var i=0;icm.display.maxLineLength){cm.display.maxLine=visual;cm.display.maxLineLength=len;cm.display.maxLineChanged=true}}}if(min!=null&&cm&&this.collapsed){regChange(cm,min,max+1)}this.lines.length=0;this.explicitlyCleared=true;if(this.atomic&&this.doc.cantEdit){this.doc.cantEdit=false;if(cm){reCheckSelection(cm.doc)}}if(cm){signalLater(cm,"markerCleared",cm,this,min,max)}if(withOp){endOperation(cm)}if(this.parent){this.parent.clear()}};TextMarker.prototype.find=function(side,lineObj){if(side==null&&this.type=="bookmark"){side=1}var from,to;for(var i=0;i0||diff==0&&marker.clearWhenEmpty!==false){return marker}if(marker.replacedWith){marker.collapsed=true;marker.widgetNode=eltP("span",[marker.replacedWith],"CodeMirror-widget");if(!options.handleMouseEvents){marker.widgetNode.setAttribute("cm-ignore-events","true")}if(options.insertLeft){marker.widgetNode.insertLeft=true}}if(marker.collapsed){if(conflictingCollapsedRange(doc,from.line,from,to,marker)||from.line!=to.line&&conflictingCollapsedRange(doc,to.line,from,to,marker)){throw new Error("Inserting collapsed marker partially overlapping an existing one")}seeCollapsedSpans()}if(marker.addToHistory){addChangeToHistory(doc,{from:from,to:to,origin:"markText"},doc.sel,NaN)}var curLine=from.line,cm=doc.cm,updateMaxLine;doc.iter(curLine,to.line+1,function(line){if(cm&&marker.collapsed&&!cm.options.lineWrapping&&visualLine(line)==cm.display.maxLine){updateMaxLine=true}if(marker.collapsed&&curLine!=from.line){updateLineHeight(line,0)}addMarkedSpan(line,new MarkedSpan(marker,curLine==from.line?from.ch:null,curLine==to.line?to.ch:null),doc.cm&&doc.cm.curOp);++curLine});if(marker.collapsed){doc.iter(from.line,to.line+1,function(line){if(lineIsHidden(doc,line)){updateLineHeight(line,0)}})}if(marker.clearOnEnter){on(marker,"beforeCursorEnter",function(){return marker.clear()})}if(marker.readOnly){seeReadOnlySpans();if(doc.history.done.length||doc.history.undone.length){doc.clearHistory()}}if(marker.collapsed){marker.id=++nextMarkerId;marker.atomic=true}if(cm){if(updateMaxLine){cm.curOp.updateMaxLine=true}if(marker.collapsed){regChange(cm,from.line,to.line+1)}else if(marker.className||marker.startStyle||marker.endStyle||marker.css||marker.attributes||marker.title){for(var i=from.line;i<=to.line;i++){regLineChange(cm,i,"text")}}if(marker.atomic){reCheckSelection(cm.doc)}signalLater(cm,"markerAdded",cm,marker)}return marker}var SharedTextMarker=function(markers,primary){this.markers=markers;this.primary=primary;for(var i=0;i=0;i$1--){makeChange(this,changes[i$1])}if(newSel){setSelectionReplaceHistory(this,newSel)}else if(this.cm){ensureCursorVisible(this.cm)}}),undo:docMethodOp(function(){makeChangeFromHistory(this,"undo")}),redo:docMethodOp(function(){makeChangeFromHistory(this,"redo")}),undoSelection:docMethodOp(function(){makeChangeFromHistory(this,"undo",true)}),redoSelection:docMethodOp(function(){makeChangeFromHistory(this,"redo",true)}),setExtending:function(val){this.extend=val},getExtending:function(){return this.extend},historySize:function(){var hist=this.history,done=0,undone=0;for(var i=0;i=pos.ch)){markers.push(span.marker.parent||span.marker)}}}return markers},findMarks:function(from,to,filter){from=clipPos(this,from);to=clipPos(this,to);var found=[],lineNo=from.line;this.iter(from.line,to.line+1,function(line){var spans=line.markedSpans;if(spans){for(var i=0;i=span.to||span.from==null&&lineNo!=from.line||span.from!=null&&lineNo==to.line&&span.from>=to.ch)&&(!filter||filter(span.marker))){found.push(span.marker.parent||span.marker)}}}++lineNo});return found},getAllMarks:function(){var markers=[];this.iter(function(line){var sps=line.markedSpans;if(sps){for(var i=0;ioff){ch=off;return true}off-=sz;++lineNo});return clipPos(this,Pos(lineNo,ch))},indexFromPos:function(coords){coords=clipPos(this,coords);var index=coords.ch;if(coords.linefrom){from=options.from}if(options.to!=null&&options.to-1){cm.state.draggingText(e);setTimeout(function(){return cm.display.input.focus()},20);return}try{var text$1=e.dataTransfer.getData("Text");if(text$1){var selected;if(cm.state.draggingText&&!cm.state.draggingText.copy){selected=cm.listSelections()}setSelectionNoUndo(cm.doc,simpleSelection(pos,pos));if(selected){for(var i$1=0;i$1=0;i--){replaceRange(cm.doc,"",kill[i].from,kill[i].to,"+delete")}ensureCursorVisible(cm)})}function moveCharLogically(line,ch,dir){var target=skipExtendingChars(line.text,ch+dir,dir);return target<0||target>line.text.length?null:target}function moveLogically(line,start,dir){var ch=moveCharLogically(line,start.ch,dir);return ch==null?null:new Pos(start.line,ch,dir<0?"after":"before")}function endOfLine(visually,cm,lineObj,lineNo,dir){if(visually){if(cm.doc.direction=="rtl"){dir=-dir}var order=getOrder(lineObj,cm.doc.direction);if(order){var part=dir<0?lst(order):order[0];var moveInStorageOrder=dir<0==(part.level==1);var sticky=moveInStorageOrder?"after":"before";var ch;if(part.level>0||cm.doc.direction=="rtl"){var prep=prepareMeasureForLine(cm,lineObj);ch=dir<0?lineObj.text.length-1:0;var targetTop=measureCharPrepared(cm,prep,ch).top;ch=findFirst(function(ch){return measureCharPrepared(cm,prep,ch).top==targetTop},dir<0==(part.level==1)?part.from:part.to-1,ch);if(sticky=="before"){ch=moveCharLogically(lineObj,ch,1)}}else{ch=dir<0?part.to:part.from}return new Pos(lineNo,ch,sticky)}}return new Pos(lineNo,dir<0?lineObj.text.length:0,dir<0?"before":"after")}function moveVisually(cm,line,start,dir){var bidi=getOrder(line,cm.doc.direction);if(!bidi){return moveLogically(line,start,dir)}if(start.ch>=line.text.length){start.ch=line.text.length;start.sticky="before"}else if(start.ch<=0){start.ch=0;start.sticky="after"}var partPos=getBidiPartAt(bidi,start.ch,start.sticky),part=bidi[partPos];if(cm.doc.direction=="ltr"&&part.level%2==0&&(dir>0?part.to>start.ch:part.from=part.from&&ch>=wrappedLineExtent.begin:ch<=part.to&&ch<=wrappedLineExtent.end)){var sticky=moveInStorageOrder?"before":"after";return new Pos(start.line,ch,sticky)}}var searchInVisualLine=function(partPos,dir,wrappedLineExtent){var getRes=function(ch,moveInStorageOrder){return moveInStorageOrder?new Pos(start.line,mv(ch,1),"before"):new Pos(start.line,ch,"after")};for(;partPos>=0&&partPos0==(part.level!=1);var ch=moveInStorageOrder?wrappedLineExtent.begin:mv(wrappedLineExtent.end,-1);if(part.from<=ch&&ch0?wrappedLineExtent.end:mv(wrappedLineExtent.begin,-1);if(nextCh!=null&&!(dir>0&&nextCh==line.text.length)){res=searchInVisualLine(dir>0?0:bidi.length-1,dir,getWrappedLineExtent(nextCh));if(res){return res}}return null}var commands={selectAll:selectAll,singleSelection:function(cm){return cm.setSelection(cm.getCursor("anchor"),cm.getCursor("head"),sel_dontScroll)},killLine:function(cm){return deleteNearSelection(cm,function(range){if(range.empty()){var len=getLine(cm.doc,range.head.line).text.length;if(range.head.ch==len&&range.head.line0){cur=new Pos(cur.line,cur.ch+1);cm.replaceRange(line.charAt(cur.ch-1)+line.charAt(cur.ch-2),Pos(cur.line,cur.ch-2),cur,"+transpose")}else if(cur.line>cm.doc.first){var prev=getLine(cm.doc,cur.line-1).text;if(prev){cur=new Pos(cur.line,1);cm.replaceRange(line.charAt(0)+cm.doc.lineSeparator()+prev.charAt(prev.length-1),Pos(cur.line-1,prev.length-1),cur,"+transpose")}}}newSel.push(new Range(cur,cur))}cm.setSelections(newSel)})},newlineAndIndent:function(cm){return runInOp(cm,function(){var sels=cm.listSelections();for(var i=sels.length-1;i>=0;i--){cm.replaceRange(cm.doc.lineSeparator(),sels[i].anchor,sels[i].head,"+input")}sels=cm.listSelections();for(var i$1=0;i$1time&&cmp(pos,this.pos)==0&&button==this.button};var lastClick,lastDoubleClick;function clickRepeat(pos,button){var now=+new Date;if(lastDoubleClick&&lastDoubleClick.compare(now,pos,button)){lastClick=lastDoubleClick=null;return"triple"}else if(lastClick&&lastClick.compare(now,pos,button)){lastDoubleClick=new PastClick(now,pos,button);lastClick=null;return"double"}else{lastClick=new PastClick(now,pos,button);lastDoubleClick=null;return"single"}}function onMouseDown(e){var cm=this,display=cm.display;if(signalDOMEvent(cm,e)||display.activeTouch&&display.input.supportsTouch()){return}display.input.ensurePolled();display.shift=e.shiftKey;if(eventInWidget(display,e)){if(!webkit){display.scroller.draggable=false;setTimeout(function(){return display.scroller.draggable=true},100)}return}if(clickInGutter(cm,e)){return}var pos=posFromMouse(cm,e),button=e_button(e),repeat=pos?clickRepeat(pos,button):"single";win(cm).focus();if(button==1&&cm.state.selectingText){cm.state.selectingText(e)}if(pos&&handleMappedButton(cm,button,pos,repeat,e)){return}if(button==1){if(pos){leftButtonDown(cm,pos,repeat,e)}else if(e_target(e)==display.scroller){e_preventDefault(e)}}else if(button==2){if(pos){extendSelection(cm.doc,pos)}setTimeout(function(){return display.input.focus()},20)}else if(button==3){if(captureRightClick){cm.display.input.onContextMenu(e)}else{delayBlurEvent(cm)}}}function handleMappedButton(cm,button,pos,repeat,event){var name="Click";if(repeat=="double"){name="Double"+name}else if(repeat=="triple"){name="Triple"+name}name=(button==1?"Left":button==2?"Middle":"Right")+name;return dispatchKey(cm,addModifierNames(name,event),event,function(bound){if(typeof bound=="string"){bound=commands[bound]}if(!bound){return false}var done=false;try{if(cm.isReadOnly()){cm.state.suppressEdits=true}done=bound(cm,pos)!=Pass}finally{cm.state.suppressEdits=false}return done})}function configureMouse(cm,repeat,event){var option=cm.getOption("configureMouse");var value=option?option(cm,repeat,event):{};if(value.unit==null){var rect=chromeOS?event.shiftKey&&event.metaKey:event.altKey;value.unit=rect?"rectangle":repeat=="single"?"char":repeat=="double"?"word":"line"}if(value.extend==null||cm.doc.extend){value.extend=cm.doc.extend||event.shiftKey}if(value.addNew==null){value.addNew=mac?event.metaKey:event.ctrlKey}if(value.moveOnDrag==null){value.moveOnDrag=!(mac?event.altKey:event.ctrlKey)}return value}function leftButtonDown(cm,pos,repeat,event){if(ie){setTimeout(bind(ensureFocus,cm),0)}else{cm.curOp.focus=activeElt(doc(cm))}var behavior=configureMouse(cm,repeat,event);var sel=cm.doc.sel,contained;if(cm.options.dragDrop&&dragAndDrop&&!cm.isReadOnly()&&repeat=="single"&&(contained=sel.contains(pos))>-1&&(cmp((contained=sel.ranges[contained]).from(),pos)<0||pos.xRel>0)&&(cmp(contained.to(),pos)>0||pos.xRel<0)){leftButtonStartDrag(cm,event,pos,behavior)}else{leftButtonSelect(cm,event,pos,behavior)}}function leftButtonStartDrag(cm,event,pos,behavior){var display=cm.display,moved=false;var dragEnd=operation(cm,function(e){if(webkit){display.scroller.draggable=false}cm.state.draggingText=false;if(cm.state.delayingBlurEvent){if(cm.hasFocus()){cm.state.delayingBlurEvent=false}else{delayBlurEvent(cm)}}off(display.wrapper.ownerDocument,"mouseup",dragEnd);off(display.wrapper.ownerDocument,"mousemove",mouseMove);off(display.scroller,"dragstart",dragStart);off(display.scroller,"drop",dragEnd);if(!moved){e_preventDefault(e);if(!behavior.addNew){extendSelection(cm.doc,pos,null,null,behavior.extend)}if(webkit&&!safari||ie&&ie_version==9){setTimeout(function(){display.wrapper.ownerDocument.body.focus({preventScroll:true});display.input.focus()},20)}else{display.input.focus()}}});var mouseMove=function(e2){moved=moved||Math.abs(event.clientX-e2.clientX)+Math.abs(event.clientY-e2.clientY)>=10};var dragStart=function(){return moved=true};if(webkit){display.scroller.draggable=true}cm.state.draggingText=dragEnd;dragEnd.copy=!behavior.moveOnDrag;on(display.wrapper.ownerDocument,"mouseup",dragEnd);on(display.wrapper.ownerDocument,"mousemove",mouseMove);on(display.scroller,"dragstart",dragStart);on(display.scroller,"drop",dragEnd);cm.state.delayingBlurEvent=true;setTimeout(function(){return display.input.focus()},20);if(display.scroller.dragDrop){display.scroller.dragDrop()}}function rangeForUnit(cm,pos,unit){if(unit=="char"){return new Range(pos,pos)}if(unit=="word"){return cm.findWordAt(pos)}if(unit=="line"){return new Range(Pos(pos.line,0),clipPos(cm.doc,Pos(pos.line+1,0)))}var result=unit(cm,pos);return new Range(result.from,result.to)}function leftButtonSelect(cm,event,start,behavior){if(ie){delayBlurEvent(cm)}var display=cm.display,doc$1=cm.doc;e_preventDefault(event);var ourRange,ourIndex,startSel=doc$1.sel,ranges=startSel.ranges;if(behavior.addNew&&!behavior.extend){ourIndex=doc$1.sel.contains(start);if(ourIndex>-1){ourRange=ranges[ourIndex]}else{ourRange=new Range(start,start)}}else{ourRange=doc$1.sel.primary();ourIndex=doc$1.sel.primIndex}if(behavior.unit=="rectangle"){if(!behavior.addNew){ourRange=new Range(start,start)}start=posFromMouse(cm,event,true,true);ourIndex=-1}else{var range=rangeForUnit(cm,start,behavior.unit);if(behavior.extend){ourRange=extendRange(ourRange,range.anchor,range.head,behavior.extend)}else{ourRange=range}}if(!behavior.addNew){ourIndex=0;setSelection(doc$1,new Selection([ourRange],0),sel_mouse);startSel=doc$1.sel}else if(ourIndex==-1){ourIndex=ranges.length;setSelection(doc$1,normalizeSelection(cm,ranges.concat([ourRange]),ourIndex),{scroll:false,origin:"*mouse"})}else if(ranges.length>1&&ranges[ourIndex].empty()&&behavior.unit=="char"&&!behavior.extend){setSelection(doc$1,normalizeSelection(cm,ranges.slice(0,ourIndex).concat(ranges.slice(ourIndex+1)),0),{scroll:false,origin:"*mouse"});startSel=doc$1.sel}else{replaceOneSelection(doc$1,ourIndex,ourRange,sel_mouse)}var lastPos=start;function extendTo(pos){if(cmp(lastPos,pos)==0){return}lastPos=pos;if(behavior.unit=="rectangle"){var ranges=[],tabSize=cm.options.tabSize;var startCol=countColumn(getLine(doc$1,start.line).text,start.ch,tabSize);var posCol=countColumn(getLine(doc$1,pos.line).text,pos.ch,tabSize);var left=Math.min(startCol,posCol),right=Math.max(startCol,posCol);for(var line=Math.min(start.line,pos.line),end=Math.min(cm.lastLine(),Math.max(start.line,pos.line));line<=end;line++){var text=getLine(doc$1,line).text,leftPos=findColumn(text,left,tabSize);if(left==right){ranges.push(new Range(Pos(line,leftPos),Pos(line,leftPos)))}else if(text.length>leftPos){ranges.push(new Range(Pos(line,leftPos),Pos(line,findColumn(text,right,tabSize))))}}if(!ranges.length){ranges.push(new Range(start,start))}setSelection(doc$1,normalizeSelection(cm,startSel.ranges.slice(0,ourIndex).concat(ranges),ourIndex),{origin:"*mouse",scroll:false});cm.scrollIntoView(pos)}else{var oldRange=ourRange;var range=rangeForUnit(cm,pos,behavior.unit);var anchor=oldRange.anchor,head;if(cmp(range.anchor,anchor)>0){head=range.head;anchor=minPos(oldRange.from(),range.anchor)}else{head=range.anchor;anchor=maxPos(oldRange.to(),range.head)}var ranges$1=startSel.ranges.slice(0);ranges$1[ourIndex]=bidiSimplify(cm,new Range(clipPos(doc$1,anchor),head));setSelection(doc$1,normalizeSelection(cm,ranges$1,ourIndex),sel_mouse)}}var editorSize=display.wrapper.getBoundingClientRect();var counter=0;function extend(e){var curCount=++counter;var cur=posFromMouse(cm,e,true,behavior.unit=="rectangle");if(!cur){return}if(cmp(cur,lastPos)!=0){cm.curOp.focus=activeElt(doc(cm));extendTo(cur);var visible=visibleLines(display,doc$1);if(cur.line>=visible.to||cur.lineeditorSize.bottom?20:0;if(outside){setTimeout(operation(cm,function(){if(counter!=curCount){return}display.scroller.scrollTop+=outside;extend(e)}),50)}}}function done(e){cm.state.selectingText=false;counter=Infinity;if(e){e_preventDefault(e);display.input.focus()}off(display.wrapper.ownerDocument,"mousemove",move);off(display.wrapper.ownerDocument,"mouseup",up);doc$1.history.lastSelOrigin=null}var move=operation(cm,function(e){if(e.buttons===0||!e_button(e)){done(e)}else{extend(e)}});var up=operation(cm,done);cm.state.selectingText=up;on(display.wrapper.ownerDocument,"mousemove",move);on(display.wrapper.ownerDocument,"mouseup",up)}function bidiSimplify(cm,range){var anchor=range.anchor;var head=range.head;var anchorLine=getLine(cm.doc,anchor.line);if(cmp(anchor,head)==0&&anchor.sticky==head.sticky){return range}var order=getOrder(anchorLine);if(!order){return range}var index=getBidiPartAt(order,anchor.ch,anchor.sticky),part=order[index];if(part.from!=anchor.ch&&part.to!=anchor.ch){return range}var boundary=index+(part.from==anchor.ch==(part.level!=1)?0:1);if(boundary==0||boundary==order.length){return range}var leftSide;if(head.line!=anchor.line){leftSide=(head.line-anchor.line)*(cm.doc.direction=="ltr"?1:-1)>0}else{var headIndex=getBidiPartAt(order,head.ch,head.sticky);var dir=headIndex-index||(head.ch-anchor.ch)*(part.level==1?-1:1);if(headIndex==boundary-1||headIndex==boundary){leftSide=dir<0}else{leftSide=dir>0}}var usePart=order[boundary+(leftSide?-1:0)];var from=leftSide==(usePart.level==1);var ch=from?usePart.from:usePart.to,sticky=from?"after":"before";return anchor.ch==ch&&anchor.sticky==sticky?range:new Range(new Pos(anchor.line,ch,sticky),head)}function gutterEvent(cm,e,type,prevent){var mX,mY;if(e.touches){mX=e.touches[0].clientX;mY=e.touches[0].clientY}else{try{mX=e.clientX;mY=e.clientY}catch(e$1){return false}}if(mX>=Math.floor(cm.display.gutters.getBoundingClientRect().right)){return false}if(prevent){e_preventDefault(e)}var display=cm.display;var lineBox=display.lineDiv.getBoundingClientRect();if(mY>lineBox.bottom||!hasHandler(cm,type)){return e_defaultPrevented(e)}mY-=lineBox.top-display.viewOffset;for(var i=0;i=mX){var line=lineAtHeight(cm.doc,mY);var gutter=cm.display.gutterSpecs[i];signal(cm,type,cm,line,gutter.className,e);return e_defaultPrevented(e)}}}function clickInGutter(cm,e){return gutterEvent(cm,e,"gutterClick",true)}function onContextMenu(cm,e){if(eventInWidget(cm.display,e)||contextMenuInGutter(cm,e)){return}if(signalDOMEvent(cm,e,"contextmenu")){return}if(!captureRightClick){cm.display.input.onContextMenu(e)}}function contextMenuInGutter(cm,e){if(!hasHandler(cm,"gutterContextMenu")){return false}return gutterEvent(cm,e,"gutterContextMenu",false)}function themeChanged(cm){cm.display.wrapper.className=cm.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+cm.options.theme.replace(/(^|\s)\s*/g," cm-s-");clearCaches(cm)}var Init={toString:function(){return"CodeMirror.Init"}};var defaults={};var optionHandlers={};function defineOptions(CodeMirror){var optionHandlers=CodeMirror.optionHandlers;function option(name,deflt,handle,notOnInit){CodeMirror.defaults[name]=deflt;if(handle){optionHandlers[name]=notOnInit?function(cm,val,old){if(old!=Init){handle(cm,val,old)}}:handle}}CodeMirror.defineOption=option;CodeMirror.Init=Init;option("value","",function(cm,val){return cm.setValue(val)},true);option("mode",null,function(cm,val){cm.doc.modeOption=val;loadMode(cm)},true);option("indentUnit",2,loadMode,true);option("indentWithTabs",false);option("smartIndent",true);option("tabSize",4,function(cm){resetModeState(cm);clearCaches(cm);regChange(cm)},true);option("lineSeparator",null,function(cm,val){cm.doc.lineSep=val;if(!val){return}var newBreaks=[],lineNo=cm.doc.first;cm.doc.iter(function(line){for(var pos=0;;){var found=line.text.indexOf(val,pos);if(found==-1){break}pos=found+val.length;newBreaks.push(Pos(lineNo,found))}lineNo++});for(var i=newBreaks.length-1;i>=0;i--){replaceRange(cm.doc,val,newBreaks[i],Pos(newBreaks[i].line,newBreaks[i].ch+val.length))}});option("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,function(cm,val,old){cm.state.specialChars=new RegExp(val.source+(val.test("\t")?"":"|\t"),"g");if(old!=Init){cm.refresh()}});option("specialCharPlaceholder",defaultSpecialCharPlaceholder,function(cm){return cm.refresh()},true);option("electricChars",true);option("inputStyle",mobile?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},true);option("spellcheck",false,function(cm,val){return cm.getInputField().spellcheck=val},true);option("autocorrect",false,function(cm,val){return cm.getInputField().autocorrect=val},true);option("autocapitalize",false,function(cm,val){return cm.getInputField().autocapitalize=val},true);option("rtlMoveVisually",!windows);option("wholeLineUpdateBefore",true);option("theme","default",function(cm){themeChanged(cm);updateGutters(cm)},true);option("keyMap","default",function(cm,val,old){var next=getKeyMap(val);var prev=old!=Init&&getKeyMap(old);if(prev&&prev.detach){prev.detach(cm,next)}if(next.attach){next.attach(cm,prev||null)}});option("extraKeys",null);option("configureMouse",null);option("lineWrapping",false,wrappingChanged,true);option("gutters",[],function(cm,val){cm.display.gutterSpecs=getGutters(val,cm.options.lineNumbers);updateGutters(cm)},true);option("fixedGutter",true,function(cm,val){cm.display.gutters.style.left=val?compensateForHScroll(cm.display)+"px":"0";cm.refresh()},true);option("coverGutterNextToScrollbar",false,function(cm){return updateScrollbars(cm)},true);option("scrollbarStyle","native",function(cm){initScrollbars(cm);updateScrollbars(cm);cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft)},true);option("lineNumbers",false,function(cm,val){cm.display.gutterSpecs=getGutters(cm.options.gutters,val);updateGutters(cm)},true);option("firstLineNumber",1,updateGutters,true);option("lineNumberFormatter",function(integer){return integer},updateGutters,true);option("showCursorWhenSelecting",false,updateSelection,true);option("resetSelectionOnContextMenu",true);option("lineWiseCopyCut",true);option("pasteLinesPerSelection",true);option("selectionsMayTouch",false);option("readOnly",false,function(cm,val){if(val=="nocursor"){onBlur(cm);cm.display.input.blur()}cm.display.input.readOnlyChanged(val)});option("screenReaderLabel",null,function(cm,val){val=val===""?null:val;cm.display.input.screenReaderLabelChanged(val)});option("disableInput",false,function(cm,val){if(!val){cm.display.input.reset()}},true);option("dragDrop",true,dragDropChanged);option("allowDropFileTypes",null);option("cursorBlinkRate",530);option("cursorScrollMargin",0);option("cursorHeight",1,updateSelection,true);option("singleCursorHeightPerLine",true,updateSelection,true);option("workTime",100);option("workDelay",100);option("flattenSpans",true,resetModeState,true);option("addModeClass",false,resetModeState,true);option("pollInterval",100);option("undoDepth",200,function(cm,val){return cm.doc.history.undoDepth=val});option("historyEventDelay",1250);option("viewportMargin",10,function(cm){return cm.refresh()},true);option("maxHighlightLength",1e4,resetModeState,true);option("moveInputWithCursor",true,function(cm,val){if(!val){cm.display.input.resetPosition()}});option("tabindex",null,function(cm,val){return cm.display.input.getField().tabIndex=val||""});option("autofocus",null);option("direction","ltr",function(cm,val){return cm.doc.setDirection(val)},true);option("phrases",null)}function dragDropChanged(cm,value,old){var wasOn=old&&old!=Init;if(!value!=!wasOn){var funcs=cm.display.dragFunctions;var toggle=value?on:off;toggle(cm.display.scroller,"dragstart",funcs.start);toggle(cm.display.scroller,"dragenter",funcs.enter);toggle(cm.display.scroller,"dragover",funcs.over);toggle(cm.display.scroller,"dragleave",funcs.leave);toggle(cm.display.scroller,"drop",funcs.drop)}}function wrappingChanged(cm){if(cm.options.lineWrapping){addClass(cm.display.wrapper,"CodeMirror-wrap");cm.display.sizer.style.minWidth="";cm.display.sizerWidth=null}else{rmClass(cm.display.wrapper,"CodeMirror-wrap");findMaxLine(cm)}estimateLineHeights(cm);regChange(cm);clearCaches(cm);setTimeout(function(){return updateScrollbars(cm)},100)}function CodeMirror(place,options){var this$1=this;if(!(this instanceof CodeMirror)){return new CodeMirror(place,options)}this.options=options=options?copyObj(options):{};copyObj(defaults,options,false);var doc=options.value;if(typeof doc=="string"){doc=new Doc(doc,options.mode,null,options.lineSeparator,options.direction)}else if(options.mode){doc.modeOption=options.mode}this.doc=doc;var input=new CodeMirror.inputStyles[options.inputStyle](this);var display=this.display=new Display(place,doc,input,options);display.wrapper.CodeMirror=this;themeChanged(this);if(options.lineWrapping){this.display.wrapper.className+=" CodeMirror-wrap"}initScrollbars(this);this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:false,delayingBlurEvent:false,focused:false,suppressEdits:false,pasteIncoming:-1,cutIncoming:-1,selectingText:false,draggingText:false,highlight:new Delayed,keySeq:null,specialChars:null};if(options.autofocus&&!mobile){display.input.focus()}if(ie&&ie_version<11){setTimeout(function(){return this$1.display.input.reset(true)},20)}registerEventHandlers(this);ensureGlobalHandlers();startOperation(this);this.curOp.forceUpdate=true;attachDoc(this,doc);if(options.autofocus&&!mobile||this.hasFocus()){setTimeout(function(){if(this$1.hasFocus()&&!this$1.state.focused){onFocus(this$1)}},20)}else{onBlur(this)}for(var opt in optionHandlers){if(optionHandlers.hasOwnProperty(opt)){optionHandlers[opt](this,options[opt],Init)}}maybeUpdateLineNumberWidth(this);if(options.finishInit){options.finishInit(this)}for(var i=0;i20*20}on(d.scroller,"touchstart",function(e){if(!signalDOMEvent(cm,e)&&!isMouseLikeTouchEvent(e)&&!clickInGutter(cm,e)){d.input.ensurePolled();clearTimeout(touchFinished);var now=+new Date;d.activeTouch={start:now,moved:false,prev:now-prevTouch.end<=300?prevTouch:null};if(e.touches.length==1){d.activeTouch.left=e.touches[0].pageX;d.activeTouch.top=e.touches[0].pageY}}});on(d.scroller,"touchmove",function(){if(d.activeTouch){d.activeTouch.moved=true}});on(d.scroller,"touchend",function(e){var touch=d.activeTouch;if(touch&&!eventInWidget(d,e)&&touch.left!=null&&!touch.moved&&new Date-touch.start<300){var pos=cm.coordsChar(d.activeTouch,"page"),range;if(!touch.prev||farAway(touch,touch.prev)){range=new Range(pos,pos)}else if(!touch.prev.prev||farAway(touch,touch.prev.prev)){range=cm.findWordAt(pos)}else{range=new Range(Pos(pos.line,0),clipPos(cm.doc,Pos(pos.line+1,0)))}cm.setSelection(range.anchor,range.head);cm.focus();e_preventDefault(e)}finishTouch()});on(d.scroller,"touchcancel",finishTouch);on(d.scroller,"scroll",function(){if(d.scroller.clientHeight){updateScrollTop(cm,d.scroller.scrollTop);setScrollLeft(cm,d.scroller.scrollLeft,true);signal(cm,"scroll",cm)}});on(d.scroller,"mousewheel",function(e){return onScrollWheel(cm,e)});on(d.scroller,"DOMMouseScroll",function(e){return onScrollWheel(cm,e)});on(d.wrapper,"scroll",function(){return d.wrapper.scrollTop=d.wrapper.scrollLeft=0});d.dragFunctions={enter:function(e){if(!signalDOMEvent(cm,e)){e_stop(e)}},over:function(e){if(!signalDOMEvent(cm,e)){onDragOver(cm,e);e_stop(e)}},start:function(e){return onDragStart(cm,e)},drop:operation(cm,onDrop),leave:function(e){if(!signalDOMEvent(cm,e)){clearDragCursor(cm)}}};var inp=d.input.getField();on(inp,"keyup",function(e){return onKeyUp.call(cm,e)});on(inp,"keydown",operation(cm,onKeyDown));on(inp,"keypress",operation(cm,onKeyPress));on(inp,"focus",function(e){return onFocus(cm,e)});on(inp,"blur",function(e){return onBlur(cm,e)})}var initHooks=[];CodeMirror.defineInitHook=function(f){return initHooks.push(f)};function indentLine(cm,n,how,aggressive){var doc=cm.doc,state;if(how==null){how="add"}if(how=="smart"){if(!doc.mode.indent){how="prev"}else{state=getContextBefore(cm,n).state}}var tabSize=cm.options.tabSize;var line=getLine(doc,n),curSpace=countColumn(line.text,null,tabSize);if(line.stateAfter){line.stateAfter=null}var curSpaceString=line.text.match(/^\s*/)[0],indentation;if(!aggressive&&!/\S/.test(line.text)){indentation=0;how="not"}else if(how=="smart"){indentation=doc.mode.indent(state,line.text.slice(curSpaceString.length),line.text);if(indentation==Pass||indentation>150){if(!aggressive){return}how="prev"}}if(how=="prev"){if(n>doc.first){indentation=countColumn(getLine(doc,n-1).text,null,tabSize)}else{indentation=0}}else if(how=="add"){indentation=curSpace+cm.options.indentUnit}else if(how=="subtract"){indentation=curSpace-cm.options.indentUnit}else if(typeof how=="number"){indentation=curSpace+how}indentation=Math.max(0,indentation);var indentString="",pos=0;if(cm.options.indentWithTabs){for(var i=Math.floor(indentation/tabSize);i;--i){pos+=tabSize;indentString+="\t"}}if(posrecent;var textLines=splitLinesAuto(inserted),multiPaste=null;if(paste&&sel.ranges.length>1){if(lastCopied&&lastCopied.text.join("\n")==inserted){if(sel.ranges.length%lastCopied.text.length==0){multiPaste=[];for(var i=0;i=0;i$1--){var range=sel.ranges[i$1];var from=range.from(),to=range.to();if(range.empty()){if(deleted&&deleted>0){from=Pos(from.line,from.ch-deleted)}else if(cm.state.overwrite&&!paste){to=Pos(to.line,Math.min(getLine(doc,to.line).text.length,to.ch+lst(textLines).length))}else if(paste&&lastCopied&&lastCopied.lineWise&&lastCopied.text.join("\n")==textLines.join("\n")){from=to=Pos(from.line,0)}}var changeEvent={from:from,to:to,text:multiPaste?multiPaste[i$1%multiPaste.length]:textLines,origin:origin||(paste?"paste":cm.state.cutIncoming>recent?"cut":"+input")};makeChange(cm.doc,changeEvent);signalLater(cm,"inputRead",cm,changeEvent)}if(inserted&&!paste){triggerElectric(cm,inserted)}ensureCursorVisible(cm);if(cm.curOp.updateInput<2){cm.curOp.updateInput=updateInput}cm.curOp.typing=true;cm.state.pasteIncoming=cm.state.cutIncoming=-1}function handlePaste(e,cm){var pasted=e.clipboardData&&e.clipboardData.getData("Text");if(pasted){e.preventDefault();if(!cm.isReadOnly()&&!cm.options.disableInput&&cm.hasFocus()){runInOp(cm,function(){return applyTextInput(cm,pasted,0,null,"paste")})}return true}}function triggerElectric(cm,inserted){if(!cm.options.electricChars||!cm.options.smartIndent){return}var sel=cm.doc.sel;for(var i=sel.ranges.length-1;i>=0;i--){var range=sel.ranges[i];if(range.head.ch>100||i&&sel.ranges[i-1].head.line==range.head.line){continue}var mode=cm.getModeAt(range.head);var indented=false;if(mode.electricChars){for(var j=0;j-1){indented=indentLine(cm,range.head.line,"smart");break}}}else if(mode.electricInput){if(mode.electricInput.test(getLine(cm.doc,range.head.line).text.slice(0,range.head.ch))){indented=indentLine(cm,range.head.line,"smart")}}if(indented){signalLater(cm,"electricInput",cm,range.head.line)}}}function copyableRanges(cm){var text=[],ranges=[];for(var i=0;i0){replaceOneSelection(this.doc,i,new Range(from,newRanges[i].to()),sel_dontScroll)}}else if(range.head.line>end){indentLine(this,range.head.line,how,true);end=range.head.line;if(i==this.doc.sel.primIndex){ensureCursorVisible(this)}}}}),getTokenAt:function(pos,precise){return takeToken(this,pos,precise)},getLineTokens:function(line,precise){return takeToken(this,Pos(line),precise,true)},getTokenTypeAt:function(pos){pos=clipPos(this.doc,pos);var styles=getLineStyles(this,getLine(this.doc,pos.line));var before=0,after=(styles.length-1)/2,ch=pos.ch;var type;if(ch==0){type=styles[2]}else{for(;;){var mid=before+after>>1;if((mid?styles[mid*2-1]:0)>=ch){after=mid}else if(styles[mid*2+1]last){line=last;end=true}lineObj=getLine(this.doc,line)}else{lineObj=line}return intoCoordSystem(this,lineObj,{top:0,left:0},mode||"page",includeWidgets||end).top+(end?this.doc.height-heightAtLine(lineObj):0)},defaultTextHeight:function(){return textHeight(this.display)},defaultCharWidth:function(){return charWidth(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(pos,node,scroll,vert,horiz){var display=this.display;pos=cursorCoords(this,clipPos(this.doc,pos));var top=pos.bottom,left=pos.left;node.style.position="absolute";node.setAttribute("cm-ignore-events","true");this.display.input.setUneditable(node);display.sizer.appendChild(node);if(vert=="over"){top=pos.top}else if(vert=="above"||vert=="near"){var vspace=Math.max(display.wrapper.clientHeight,this.doc.height),hspace=Math.max(display.sizer.clientWidth,display.lineSpace.clientWidth);if((vert=="above"||pos.bottom+node.offsetHeight>vspace)&&pos.top>node.offsetHeight){top=pos.top-node.offsetHeight}else if(pos.bottom+node.offsetHeight<=vspace){top=pos.bottom}if(left+node.offsetWidth>hspace){left=hspace-node.offsetWidth}}node.style.top=top+"px";node.style.left=node.style.right="";if(horiz=="right"){left=display.sizer.clientWidth-node.offsetWidth;node.style.right="0px"}else{if(horiz=="left"){left=0}else if(horiz=="middle"){left=(display.sizer.clientWidth-node.offsetWidth)/2}node.style.left=left+"px"}if(scroll){scrollIntoView(this,{left:left,top:top,right:left+node.offsetWidth,bottom:top+node.offsetHeight})}},triggerOnKeyDown:methodOp(onKeyDown),triggerOnKeyPress:methodOp(onKeyPress),triggerOnKeyUp:onKeyUp,triggerOnMouseDown:methodOp(onMouseDown),execCommand:function(cmd){if(commands.hasOwnProperty(cmd)){return commands[cmd].call(null,this)}},triggerElectric:methodOp(function(text){triggerElectric(this,text)}),findPosH:function(from,amount,unit,visually){var dir=1;if(amount<0){dir=-1;amount=-amount}var cur=clipPos(this.doc,from);for(var i=0;i0&&check(line.charAt(start-1))){--start}while(end.5||this.options.lineWrapping){estimateLineHeights(this)}signal(this,"refresh",this)}),swapDoc:methodOp(function(doc){var old=this.doc;old.cm=null;if(this.state.selectingText){this.state.selectingText()}attachDoc(this,doc);clearCaches(this);this.display.input.reset();scrollToCoords(this,doc.scrollLeft,doc.scrollTop);this.curOp.forceScroll=true;signalLater(this,"swapDoc",this,old);return old}),phrase:function(phraseText){var phrases=this.options.phrases;return phrases&&Object.prototype.hasOwnProperty.call(phrases,phraseText)?phrases[phraseText]:phraseText},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}};eventMixin(CodeMirror);CodeMirror.registerHelper=function(type,name,value){if(!helpers.hasOwnProperty(type)){helpers[type]=CodeMirror[type]={_global:[]}}helpers[type][name]=value};CodeMirror.registerGlobalHelper=function(type,name,predicate,value){CodeMirror.registerHelper(type,name,value);helpers[type]._global.push({pred:predicate,val:value})}}function findPosH(doc,pos,dir,unit,visually){var oldPos=pos;var origDir=dir;var lineObj=getLine(doc,pos.line);var lineDir=visually&&doc.direction=="rtl"?-dir:dir;function findNextLine(){var l=pos.line+lineDir;if(l=doc.first+doc.size){return false}pos=new Pos(l,pos.ch,pos.sticky);return lineObj=getLine(doc,l)}function moveOnce(boundToLine){var next;if(unit=="codepoint"){var ch=lineObj.text.charCodeAt(pos.ch+(dir>0?0:-1));if(isNaN(ch)){next=null}else{var astral=dir>0?ch>=55296&&ch<56320:ch>=56320&&ch<57343;next=new Pos(pos.line,Math.max(0,Math.min(lineObj.text.length,pos.ch+dir*(astral?2:1))),-dir)}}else if(visually){next=moveVisually(doc.cm,lineObj,pos,dir)}else{next=moveLogically(lineObj,pos,dir)}if(next==null){if(!boundToLine&&findNextLine()){pos=endOfLine(visually,doc.cm,lineObj,pos.line,lineDir)}else{return false}}else{pos=next}return true}if(unit=="char"||unit=="codepoint"){moveOnce()}else if(unit=="column"){moveOnce(true)}else if(unit=="word"||unit=="group"){var sawType=null,group=unit=="group";var helper=doc.cm&&doc.cm.getHelper(pos,"wordChars");for(var first=true;;first=false){if(dir<0&&!moveOnce(!first)){break}var cur=lineObj.text.charAt(pos.ch)||"\n";var type=isWordChar(cur,helper)?"w":group&&cur=="\n"?"n":!group||/\s/.test(cur)?null:"p";if(group&&!first&&!type){type="s"}if(sawType&&sawType!=type){if(dir<0){dir=1;moveOnce();pos.sticky="after"}break}if(type){sawType=type}if(dir>0&&!moveOnce(!first)){break}}}var result=skipAtomic(doc,pos,oldPos,origDir,true);if(equalCursorPos(oldPos,result)){result.hitSide=true}return result}function findPosV(cm,pos,dir,unit){var doc=cm.doc,x=pos.left,y;if(unit=="page"){var pageSize=Math.min(cm.display.wrapper.clientHeight,win(cm).innerHeight||doc(cm).documentElement.clientHeight);var moveAmount=Math.max(pageSize-.5*textHeight(cm.display),3);y=(dir>0?pos.bottom:pos.top)+dir*moveAmount}else if(unit=="line"){y=dir>0?pos.bottom+3:pos.top-3}var target;for(;;){target=coordsChar(cm,x,y);if(!target.outside){break}if(dir<0?y<=0:y>=doc.height){target.hitSide=true;break}y+=dir*5}return target}var ContentEditableInput=function(cm){this.cm=cm;this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null;this.polling=new Delayed;this.composing=null;this.gracePeriod=false;this.readDOMTimeout=null};ContentEditableInput.prototype.init=function(display){var this$1=this;var input=this,cm=input.cm;var div=input.div=display.lineDiv;div.contentEditable=true;disableBrowserMagic(div,cm.options.spellcheck,cm.options.autocorrect,cm.options.autocapitalize);function belongsToInput(e){for(var t=e.target;t;t=t.parentNode){if(t==div){return true}if(/\bCodeMirror-(?:line)?widget\b/.test(t.className)){break}}return false}on(div,"paste",function(e){if(!belongsToInput(e)||signalDOMEvent(cm,e)||handlePaste(e,cm)){return}if(ie_version<=11){setTimeout(operation(cm,function(){return this$1.updateFromDOM()}),20)}});on(div,"compositionstart",function(e){this$1.composing={data:e.data,done:false}});on(div,"compositionupdate",function(e){if(!this$1.composing){this$1.composing={data:e.data,done:false}}});on(div,"compositionend",function(e){if(this$1.composing){if(e.data!=this$1.composing.data){this$1.readFromDOMSoon()}this$1.composing.done=true}});on(div,"touchstart",function(){return input.forceCompositionEnd()});on(div,"input",function(){if(!this$1.composing){this$1.readFromDOMSoon()}});function onCopyCut(e){if(!belongsToInput(e)||signalDOMEvent(cm,e)){return}if(cm.somethingSelected()){setLastCopied({lineWise:false,text:cm.getSelections()});if(e.type=="cut"){cm.replaceSelection("",null,"cut")}}else if(!cm.options.lineWiseCopyCut){return}else{var ranges=copyableRanges(cm);setLastCopied({lineWise:true,text:ranges.text});if(e.type=="cut"){cm.operation(function(){cm.setSelections(ranges.ranges,0,sel_dontScroll);cm.replaceSelection("",null,"cut")})}}if(e.clipboardData){e.clipboardData.clearData();var content=lastCopied.text.join("\n");e.clipboardData.setData("Text",content);if(e.clipboardData.getData("Text")==content){e.preventDefault();return}}var kludge=hiddenTextarea(),te=kludge.firstChild;cm.display.lineSpace.insertBefore(kludge,cm.display.lineSpace.firstChild);te.value=lastCopied.text.join("\n");var hadFocus=activeElt(div.ownerDocument);selectInput(te);setTimeout(function(){cm.display.lineSpace.removeChild(kludge);hadFocus.focus();if(hadFocus==div){input.showPrimarySelection()}},50)}on(div,"copy",onCopyCut);on(div,"cut",onCopyCut)};ContentEditableInput.prototype.screenReaderLabelChanged=function(label){if(label){this.div.setAttribute("aria-label",label)}else{this.div.removeAttribute("aria-label")}};ContentEditableInput.prototype.prepareSelection=function(){var result=prepareSelection(this.cm,false);result.focus=activeElt(this.div.ownerDocument)==this.div;return result};ContentEditableInput.prototype.showSelection=function(info,takeFocus){if(!info||!this.cm.display.view.length){return}if(info.focus||takeFocus){this.showPrimarySelection()}this.showMultipleSelections(info)};ContentEditableInput.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()};ContentEditableInput.prototype.showPrimarySelection=function(){var sel=this.getSelection(),cm=this.cm,prim=cm.doc.sel.primary();var from=prim.from(),to=prim.to();if(cm.display.viewTo==cm.display.viewFrom||from.line>=cm.display.viewTo||to.line=cm.display.viewFrom&&posToDOM(cm,from)||{node:view[0].measure.map[2],offset:0};var end=to.linecm.firstLine()){from=Pos(from.line-1,getLine(cm.doc,from.line-1).length)}if(to.ch==getLine(cm.doc,to.line).text.length&&to.linedisplay.viewTo-1){return false}var fromIndex,fromLine,fromNode;if(from.line==display.viewFrom||(fromIndex=findViewIndex(cm,from.line))==0){fromLine=lineNo(display.view[0].line);fromNode=display.view[0].node}else{fromLine=lineNo(display.view[fromIndex].line);fromNode=display.view[fromIndex-1].node.nextSibling}var toIndex=findViewIndex(cm,to.line);var toLine,toNode;if(toIndex==display.view.length-1){toLine=display.viewTo-1;toNode=display.lineDiv.lastChild}else{toLine=lineNo(display.view[toIndex+1].line)-1;toNode=display.view[toIndex+1].node.previousSibling}if(!fromNode){return false}var newText=cm.doc.splitLines(domTextBetween(cm,fromNode,toNode,fromLine,toLine));var oldText=getBetween(cm.doc,Pos(fromLine,0),Pos(toLine,getLine(cm.doc,toLine).text.length));while(newText.length>1&&oldText.length>1){if(lst(newText)==lst(oldText)){newText.pop();oldText.pop();toLine--}else if(newText[0]==oldText[0]){newText.shift();oldText.shift();fromLine++}else{break}}var cutFront=0,cutEnd=0;var newTop=newText[0],oldTop=oldText[0],maxCutFront=Math.min(newTop.length,oldTop.length);while(cutFrontfrom.ch&&newBot.charCodeAt(newBot.length-cutEnd-1)==oldBot.charCodeAt(oldBot.length-cutEnd-1)){cutFront--;cutEnd++}}newText[newText.length-1]=newBot.slice(0,newBot.length-cutEnd).replace(/^\u200b+/,"");newText[0]=newText[0].slice(cutFront).replace(/\u200b+$/,"");var chFrom=Pos(fromLine,cutFront);var chTo=Pos(toLine,oldText.length?lst(oldText).length-cutEnd:0);if(newText.length>1||newText[0]||cmp(chFrom,chTo)){replaceRange(cm.doc,newText,chFrom,chTo,"+input");return true}};ContentEditableInput.prototype.ensurePolled=function(){this.forceCompositionEnd()};ContentEditableInput.prototype.reset=function(){this.forceCompositionEnd()};ContentEditableInput.prototype.forceCompositionEnd=function(){if(!this.composing){return}clearTimeout(this.readDOMTimeout);this.composing=null;this.updateFromDOM();this.div.blur();this.div.focus()};ContentEditableInput.prototype.readFromDOMSoon=function(){var this$1=this;if(this.readDOMTimeout!=null){return}this.readDOMTimeout=setTimeout(function(){this$1.readDOMTimeout=null;if(this$1.composing){if(this$1.composing.done){this$1.composing=null}else{return}}this$1.updateFromDOM()},80)};ContentEditableInput.prototype.updateFromDOM=function(){var this$1=this;if(this.cm.isReadOnly()||!this.pollContent()){runInOp(this.cm,function(){return regChange(this$1.cm)})}};ContentEditableInput.prototype.setUneditable=function(node){node.contentEditable="false"};ContentEditableInput.prototype.onKeyPress=function(e){if(e.charCode==0||this.composing){return}e.preventDefault();if(!this.cm.isReadOnly()){operation(this.cm,applyTextInput)(this.cm,String.fromCharCode(e.charCode==null?e.keyCode:e.charCode),0)}};ContentEditableInput.prototype.readOnlyChanged=function(val){this.div.contentEditable=String(val!="nocursor")};ContentEditableInput.prototype.onContextMenu=function(){};ContentEditableInput.prototype.resetPosition=function(){};ContentEditableInput.prototype.needsContentAttribute=true;function posToDOM(cm,pos){var view=findViewForLine(cm,pos.line);if(!view||view.hidden){return null}var line=getLine(cm.doc,pos.line);var info=mapFromLineView(view,line,pos.line);var order=getOrder(line,cm.doc.direction),side="left";if(order){var partPos=getBidiPartAt(order,pos.ch);side=partPos%2?"right":"left"}var result=nodeAndOffsetInLineMap(info.map,pos.ch,side);result.offset=result.collapse=="right"?result.end:result.start;return result}function isInGutter(node){for(var scan=node;scan;scan=scan.parentNode){if(/CodeMirror-gutter-wrapper/.test(scan.className)){return true}}return false}function badPos(pos,bad){if(bad){pos.bad=true}return pos}function domTextBetween(cm,from,to,fromLine,toLine){var text="",closing=false,lineSep=cm.doc.lineSeparator(),extraLinebreak=false;function recognizeMarker(id){return function(marker){return marker.id==id}}function close(){if(closing){text+=lineSep;if(extraLinebreak){text+=lineSep}closing=extraLinebreak=false}}function addText(str){if(str){close();text+=str}}function walk(node){if(node.nodeType==1){var cmText=node.getAttribute("cm-text");if(cmText){addText(cmText);return}var markerID=node.getAttribute("cm-marker"),range;if(markerID){var found=cm.findMarks(Pos(fromLine,0),Pos(toLine+1,0),recognizeMarker(+markerID));if(found.length&&(range=found[0].find(0))){addText(getBetween(cm.doc,range.from,range.to).join(lineSep))}return}if(node.getAttribute("contenteditable")=="false"){return}var isBlock=/^(pre|div|p|li|table|br)$/i.test(node.nodeName);if(!/^br$/i.test(node.nodeName)&&node.textContent.length==0){return}if(isBlock){close()}for(var i=0;i=9&&this$1.hasSelection){this$1.hasSelection=null}input.poll()});on(te,"paste",function(e){if(signalDOMEvent(cm,e)||handlePaste(e,cm)){return}cm.state.pasteIncoming=+new Date;input.fastPoll()});function prepareCopyCut(e){if(signalDOMEvent(cm,e)){return}if(cm.somethingSelected()){setLastCopied({lineWise:false,text:cm.getSelections()})}else if(!cm.options.lineWiseCopyCut){return}else{var ranges=copyableRanges(cm);setLastCopied({lineWise:true,text:ranges.text});if(e.type=="cut"){cm.setSelections(ranges.ranges,null,sel_dontScroll)}else{input.prevInput="";te.value=ranges.text.join("\n");selectInput(te)}}if(e.type=="cut"){cm.state.cutIncoming=+new Date}}on(te,"cut",prepareCopyCut);on(te,"copy",prepareCopyCut);on(display.scroller,"paste",function(e){if(eventInWidget(display,e)||signalDOMEvent(cm,e)){return}if(!te.dispatchEvent){cm.state.pasteIncoming=+new Date;input.focus();return}var event=new Event("paste");event.clipboardData=e.clipboardData;te.dispatchEvent(event)});on(display.lineSpace,"selectstart",function(e){if(!eventInWidget(display,e)){e_preventDefault(e)}});on(te,"compositionstart",function(){var start=cm.getCursor("from");if(input.composing){input.composing.range.clear()}input.composing={start:start,range:cm.markText(start,cm.getCursor("to"),{className:"CodeMirror-composing"})}});on(te,"compositionend",function(){if(input.composing){input.poll();input.composing.range.clear();input.composing=null}})};TextareaInput.prototype.createField=function(_display){this.wrapper=hiddenTextarea();this.textarea=this.wrapper.firstChild};TextareaInput.prototype.screenReaderLabelChanged=function(label){if(label){this.textarea.setAttribute("aria-label",label)}else{this.textarea.removeAttribute("aria-label")}};TextareaInput.prototype.prepareSelection=function(){var cm=this.cm,display=cm.display,doc=cm.doc;var result=prepareSelection(cm);if(cm.options.moveInputWithCursor){var headPos=cursorCoords(cm,doc.sel.primary().head,"div");var wrapOff=display.wrapper.getBoundingClientRect(),lineOff=display.lineDiv.getBoundingClientRect();result.teTop=Math.max(0,Math.min(display.wrapper.clientHeight-10,headPos.top+lineOff.top-wrapOff.top));result.teLeft=Math.max(0,Math.min(display.wrapper.clientWidth-10,headPos.left+lineOff.left-wrapOff.left))}return result};TextareaInput.prototype.showSelection=function(drawn){var cm=this.cm,display=cm.display;removeChildrenAndAdd(display.cursorDiv,drawn.cursors);removeChildrenAndAdd(display.selectionDiv,drawn.selection);if(drawn.teTop!=null){this.wrapper.style.top=drawn.teTop+"px";this.wrapper.style.left=drawn.teLeft+"px"}};TextareaInput.prototype.reset=function(typing){if(this.contextMenuPending||this.composing){return}var cm=this.cm;if(cm.somethingSelected()){this.prevInput="";var content=cm.getSelection();this.textarea.value=content;if(cm.state.focused){selectInput(this.textarea)}if(ie&&ie_version>=9){this.hasSelection=content}}else if(!typing){this.prevInput=this.textarea.value="";if(ie&&ie_version>=9){this.hasSelection=null}}};TextareaInput.prototype.getField=function(){return this.textarea};TextareaInput.prototype.supportsTouch=function(){return false};TextareaInput.prototype.focus=function(){if(this.cm.options.readOnly!="nocursor"&&(!mobile||activeElt(this.textarea.ownerDocument)!=this.textarea)){try{this.textarea.focus()}catch(e){}}};TextareaInput.prototype.blur=function(){this.textarea.blur()};TextareaInput.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0};TextareaInput.prototype.receivedFocus=function(){this.slowPoll()};TextareaInput.prototype.slowPoll=function(){var this$1=this;if(this.pollingFast){return}this.polling.set(this.cm.options.pollInterval,function(){this$1.poll();if(this$1.cm.state.focused){this$1.slowPoll()}})};TextareaInput.prototype.fastPoll=function(){var missed=false,input=this;input.pollingFast=true;function p(){var changed=input.poll();if(!changed&&!missed){missed=true;input.polling.set(60,p)}else{input.pollingFast=false;input.slowPoll()}}input.polling.set(20,p)};TextareaInput.prototype.poll=function(){var this$1=this;var cm=this.cm,input=this.textarea,prevInput=this.prevInput;if(this.contextMenuPending||!cm.state.focused||hasSelection(input)&&!prevInput&&!this.composing||cm.isReadOnly()||cm.options.disableInput||cm.state.keySeq){return false}var text=input.value;if(text==prevInput&&!cm.somethingSelected()){return false}if(ie&&ie_version>=9&&this.hasSelection===text||mac&&/[\uf700-\uf7ff]/.test(text)){cm.display.input.reset();return false}if(cm.doc.sel==cm.display.selForContextMenu){var first=text.charCodeAt(0);if(first==8203&&!prevInput){prevInput=""}if(first==8666){this.reset();return this.cm.execCommand("undo")}}var same=0,l=Math.min(prevInput.length,text.length);while(same1e3||text.indexOf("\n")>-1){input.value=this$1.prevInput=""}else{this$1.prevInput=text}if(this$1.composing){this$1.composing.range.clear();this$1.composing.range=cm.markText(this$1.composing.start,cm.getCursor("to"),{className:"CodeMirror-composing"})}});return true};TextareaInput.prototype.ensurePolled=function(){if(this.pollingFast&&this.poll()){this.pollingFast=false}};TextareaInput.prototype.onKeyPress=function(){if(ie&&ie_version>=9){this.hasSelection=null}this.fastPoll()};TextareaInput.prototype.onContextMenu=function(e){var input=this,cm=input.cm,display=cm.display,te=input.textarea;if(input.contextMenuPending){input.contextMenuPending()}var pos=posFromMouse(cm,e),scrollPos=display.scroller.scrollTop;if(!pos||presto){return}var reset=cm.options.resetSelectionOnContextMenu;if(reset&&cm.doc.sel.contains(pos)==-1){operation(cm,setSelection)(cm.doc,simpleSelection(pos),sel_dontScroll)}var oldCSS=te.style.cssText,oldWrapperCSS=input.wrapper.style.cssText;var wrapperBox=input.wrapper.offsetParent.getBoundingClientRect();input.wrapper.style.cssText="position: static";te.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-wrapperBox.top-5)+"px; left: "+(e.clientX-wrapperBox.left-5)+"px;\n z-index: 1000; background: "+(ie?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var oldScrollY;if(webkit){oldScrollY=te.ownerDocument.defaultView.scrollY}display.input.focus();if(webkit){te.ownerDocument.defaultView.scrollTo(null,oldScrollY)}display.input.reset();if(!cm.somethingSelected()){te.value=input.prevInput=" "}input.contextMenuPending=rehide;display.selForContextMenu=cm.doc.sel;clearTimeout(display.detectingSelectAll);function prepareSelectAllHack(){if(te.selectionStart!=null){var selected=cm.somethingSelected();var extval=""+(selected?te.value:"");te.value="⇚";te.value=extval;input.prevInput=selected?"":"";te.selectionStart=1;te.selectionEnd=extval.length;display.selForContextMenu=cm.doc.sel}}function rehide(){if(input.contextMenuPending!=rehide){return}input.contextMenuPending=false;input.wrapper.style.cssText=oldWrapperCSS;te.style.cssText=oldCSS;if(ie&&ie_version<9){display.scrollbars.setScrollTop(display.scroller.scrollTop=scrollPos)}if(te.selectionStart!=null){if(!ie||ie&&ie_version<9){prepareSelectAllHack()}var i=0,poll=function(){if(display.selForContextMenu==cm.doc.sel&&te.selectionStart==0&&te.selectionEnd>0&&input.prevInput==""){operation(cm,selectAll)(cm)}else if(i++<10){display.detectingSelectAll=setTimeout(poll,500)}else{display.selForContextMenu=null;display.input.reset()}};display.detectingSelectAll=setTimeout(poll,200)}}if(ie&&ie_version>=9){prepareSelectAllHack()}if(captureRightClick){e_stop(e);var mouseup=function(){off(window,"mouseup",mouseup);setTimeout(rehide,20)};on(window,"mouseup",mouseup)}else{setTimeout(rehide,50)}};TextareaInput.prototype.readOnlyChanged=function(val){if(!val){this.reset()}this.textarea.disabled=val=="nocursor";this.textarea.readOnly=!!val};TextareaInput.prototype.setUneditable=function(){};TextareaInput.prototype.needsContentAttribute=false;function fromTextArea(textarea,options){options=options?copyObj(options):{};options.value=textarea.value;if(!options.tabindex&&textarea.tabIndex){options.tabindex=textarea.tabIndex}if(!options.placeholder&&textarea.placeholder){options.placeholder=textarea.placeholder}if(options.autofocus==null){var hasFocus=activeElt(textarea.ownerDocument);options.autofocus=hasFocus==textarea||textarea.getAttribute("autofocus")!=null&&hasFocus==document.body}function save(){textarea.value=cm.getValue()}var realSubmit;if(textarea.form){on(textarea.form,"submit",save);if(!options.leaveSubmitMethodAlone){var form=textarea.form;realSubmit=form.submit;try{var wrappedSubmit=form.submit=function(){save();form.submit=realSubmit;form.submit();form.submit=wrappedSubmit}}catch(e){}}}options.finishInit=function(cm){cm.save=save;cm.getTextArea=function(){return textarea};cm.toTextArea=function(){cm.toTextArea=isNaN;save();textarea.parentNode.removeChild(cm.getWrapperElement());textarea.style.display="";if(textarea.form){off(textarea.form,"submit",save);if(!options.leaveSubmitMethodAlone&&typeof textarea.form.submit=="function"){textarea.form.submit=realSubmit}}}};textarea.style.display="none";var cm=CodeMirror(function(node){return textarea.parentNode.insertBefore(node,textarea.nextSibling)},options);return cm}function addLegacyProps(CodeMirror){CodeMirror.off=off;CodeMirror.on=on;CodeMirror.wheelEventPixels=wheelEventPixels;CodeMirror.Doc=Doc;CodeMirror.splitLines=splitLinesAuto;CodeMirror.countColumn=countColumn;CodeMirror.findColumn=findColumn;CodeMirror.isWordChar=isWordCharBasic;CodeMirror.Pass=Pass;CodeMirror.signal=signal;CodeMirror.Line=Line;CodeMirror.changeEnd=changeEnd;CodeMirror.scrollbarModel=scrollbarModel;CodeMirror.Pos=Pos;CodeMirror.cmpPos=cmp;CodeMirror.modes=modes;CodeMirror.mimeModes=mimeModes;CodeMirror.resolveMode=resolveMode;CodeMirror.getMode=getMode;CodeMirror.modeExtensions=modeExtensions;CodeMirror.extendMode=extendMode;CodeMirror.copyState=copyState;CodeMirror.startState=startState;CodeMirror.innerMode=innerMode;CodeMirror.commands=commands;CodeMirror.keyMap=keyMap;CodeMirror.keyName=keyName;CodeMirror.isModifierKey=isModifierKey;CodeMirror.lookupKey=lookupKey;CodeMirror.normalizeKeyMap=normalizeKeyMap;CodeMirror.StringStream=StringStream;CodeMirror.SharedTextMarker=SharedTextMarker;CodeMirror.TextMarker=TextMarker;CodeMirror.LineWidget=LineWidget;CodeMirror.e_preventDefault=e_preventDefault;CodeMirror.e_stopPropagation=e_stopPropagation;CodeMirror.e_stop=e_stop;CodeMirror.addClass=addClass;CodeMirror.contains=contains;CodeMirror.rmClass=rmClass;CodeMirror.keyNames=keyNames}defineOptions(CodeMirror);addEditorMethods(CodeMirror);var dontDelegate="iter insert remove copy getEditor constructor".split(" ");for(var prop in Doc.prototype){if(Doc.prototype.hasOwnProperty(prop)&&indexOf(dontDelegate,prop)<0){CodeMirror.prototype[prop]=function(method){return function(){return method.apply(this.doc,arguments)}}(Doc.prototype[prop])}}eventMixin(Doc);CodeMirror.inputStyles={textarea:TextareaInput,contenteditable:ContentEditableInput};CodeMirror.defineMode=function(name){if(!CodeMirror.defaults.mode&&name!="null"){CodeMirror.defaults.mode=name}defineMode.apply(this,arguments)};CodeMirror.defineMIME=defineMIME;CodeMirror.defineMode("null",function(){return{token:function(stream){return stream.skipToEnd()}}});CodeMirror.defineMIME("text/plain","null");CodeMirror.defineExtension=function(name,func){CodeMirror.prototype[name]=func};CodeMirror.defineDocExtension=function(name,func){Doc.prototype[name]=func};CodeMirror.fromTextArea=fromTextArea;addLegacyProps(CodeMirror);CodeMirror.version="6.65.7";return CodeMirror});(function(mod){if(typeof exports=="object"&&typeof module=="object")mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)define(["../../lib/codemirror"],mod);else mod(CodeMirror)})(function(CodeMirror){var defaults={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"};var Pos=CodeMirror.Pos;CodeMirror.defineOption("autoCloseBrackets",false,function(cm,val,old){if(old&&old!=CodeMirror.Init){cm.removeKeyMap(keyMap);cm.state.closeBrackets=null}if(val){ensureBound(getOption(val,"pairs"));cm.state.closeBrackets=val;cm.addKeyMap(keyMap)}});function getOption(conf,name){if(name=="pairs"&&typeof conf=="string")return conf;if(typeof conf=="object"&&conf[name]!=null)return conf[name];return defaults[name]}var keyMap={Backspace:handleBackspace,Enter:handleEnter};function ensureBound(chars){for(var i=0;i=0;i--){var cur=ranges[i].head;cm.replaceRange("",Pos(cur.line,cur.ch-1),Pos(cur.line,cur.ch+1),"+delete")}}function handleEnter(cm){var conf=getConfig(cm);var explode=conf&&getOption(conf,"explode");if(!explode||cm.getOption("disableInput"))return CodeMirror.Pass;var ranges=cm.listSelections();for(var i=0;i0?{line:range.head.line,ch:range.head.ch+dir}:{line:range.head.line-1};newRanges.push({anchor:pos,head:pos})}cm.setSelections(newRanges,primary)}function contractSelection(sel){var inverted=CodeMirror.cmpPos(sel.anchor,sel.head)>0;return{anchor:new Pos(sel.anchor.line,sel.anchor.ch+(inverted?-1:1)),head:new Pos(sel.head.line,sel.head.ch+(inverted?1:-1))}}function handleChar(cm,ch){var conf=getConfig(cm);if(!conf||cm.getOption("disableInput"))return CodeMirror.Pass;var pairs=getOption(conf,"pairs");var pos=pairs.indexOf(ch);if(pos==-1)return CodeMirror.Pass;var closeBefore=getOption(conf,"closeBefore");var triples=getOption(conf,"triples");var identical=pairs.charAt(pos+1)==ch;var ranges=cm.listSelections();var opening=pos%2==0;var type;for(var i=0;i=0&&cm.getRange(cur,Pos(cur.line,cur.ch+3))==ch+ch+ch)curType="skipThree";else curType="skip"}else if(identical&&cur.ch>1&&triples.indexOf(ch)>=0&&cm.getRange(Pos(cur.line,cur.ch-2),cur)==ch+ch){if(cur.ch>2&&/\bstring/.test(cm.getTokenTypeAt(Pos(cur.line,cur.ch-2))))return CodeMirror.Pass;curType="addFour"}else if(identical){var prev=cur.ch==0?" ":cm.getRange(Pos(cur.line,cur.ch-1),cur);if(!CodeMirror.isWordChar(next)&&prev!=ch&&!CodeMirror.isWordChar(prev))curType="both";else return CodeMirror.Pass}else if(opening&&(next.length===0||/\s/.test(next)||closeBefore.indexOf(next)>-1)){curType="both"}else{return CodeMirror.Pass}if(!type)type=curType;else if(type!=curType)return CodeMirror.Pass}var left=pos%2?pairs.charAt(pos-1):ch;var right=pos%2?ch:pairs.charAt(pos+1);cm.operation(function(){if(type=="skip"){moveSel(cm,1)}else if(type=="skipThree"){moveSel(cm,3)}else if(type=="surround"){var sels=cm.getSelections();for(var i=0;i=0;i--){var from=ranges[i].from(),to=ranges[i].to();if(from.line>=minLine)continue;if(to.line>=minLine)to=Pos(minLine,0);minLine=from.line;if(mode==null){if(cm.uncomment(from,to,options))mode="un";else{cm.lineComment(from,to,options);mode="line"}}else if(mode=="un"){cm.uncomment(from,to,options)}else{cm.lineComment(from,to,options)}}});function probablyInsideString(cm,pos,line){return/\bstring\b/.test(cm.getTokenTypeAt(Pos(pos.line,0)))&&!/^[\'\"\`]/.test(line)}function getMode(cm,pos){var mode=cm.getMode();return mode.useInnerComments===false||!mode.innerMode?mode:cm.getModeAt(pos)}CodeMirror.defineExtension("lineComment",function(from,to,options){if(!options)options=noOptions;var self=this,mode=getMode(self,from);var firstLine=self.getLine(from.line);if(firstLine==null||probablyInsideString(self,from,firstLine))return;var commentString=options.lineComment||mode.lineComment;if(!commentString){if(options.blockCommentStart||mode.blockCommentStart){options.fullLines=true;self.blockComment(from,to,options)}return}var end=Math.min(to.ch!=0||to.line==from.line?to.line+1:to.line,self.lastLine()+1);var pad=options.padding==null?" ":options.padding;var blankLines=options.commentBlankLines||from.line==to.line;self.operation(function(){if(options.indent){var baseString=null;for(var i=from.line;iwhitespace.length){baseString=whitespace}}for(var i=from.line;iend)return;self.operation(function(){if(options.fullLines!=false){var lastLineHasText=nonWS.test(self.getLine(end));self.replaceRange(pad+endString,Pos(end));self.replaceRange(startString+pad,Pos(from.line,0));var lead=options.blockCommentLead||mode.blockCommentLead;if(lead!=null)for(var i=from.line+1;i<=end;++i)if(i!=end||lastLineHasText)self.replaceRange(lead+pad,Pos(i,0))}else{var atCursor=cmp(self.getCursor("to"),to)==0,empty=!self.somethingSelected();self.replaceRange(endString,to);if(atCursor)self.setSelection(empty?to:self.getCursor("from"),to);self.replaceRange(startString,from)}})});CodeMirror.defineExtension("uncomment",function(from,to,options){if(!options)options=noOptions;var self=this,mode=getMode(self,from);var end=Math.min(to.ch!=0||to.line==from.line?to.line:to.line-1,self.lastLine()),start=Math.min(from.line,end);var lineString=options.lineComment||mode.lineComment,lines=[];var pad=options.padding==null?" ":options.padding,didSomething;lineComment:{if(!lineString)break lineComment;for(var i=start;i<=end;++i){var line=self.getLine(i);var found=line.indexOf(lineString);if(found>-1&&!/comment/.test(self.getTokenTypeAt(Pos(i,found+1))))found=-1;if(found==-1&&nonWS.test(line))break lineComment;if(found>-1&&nonWS.test(line.slice(0,found)))break lineComment;lines.push(line)}self.operation(function(){for(var i=start;i<=end;++i){var line=lines[i-start];var pos=line.indexOf(lineString),endPos=pos+lineString.length;if(pos<0)continue;if(line.slice(endPos,endPos+pad.length)==pad)endPos+=pad.length;didSomething=true;self.replaceRange("",Pos(i,pos),Pos(i,endPos))}});if(didSomething)return true}var startString=options.blockCommentStart||mode.blockCommentStart;var endString=options.blockCommentEnd||mode.blockCommentEnd;if(!startString||!endString)return false;var lead=options.blockCommentLead||mode.blockCommentLead;var startLine=self.getLine(start),open=startLine.indexOf(startString);if(open==-1)return false;var endLine=end==start?startLine:self.getLine(end);var close=endLine.indexOf(endString,end==start?open+startString.length:0);var insideStart=Pos(start,open+1),insideEnd=Pos(end,close+1);if(close==-1||!/comment/.test(self.getTokenTypeAt(insideStart))||!/comment/.test(self.getTokenTypeAt(insideEnd))||self.getRange(insideStart,insideEnd,"\n").indexOf(endString)>-1)return false;var lastStart=startLine.lastIndexOf(startString,from.ch);var firstEnd=lastStart==-1?-1:startLine.slice(0,from.ch).indexOf(endString,lastStart+startString.length);if(lastStart!=-1&&firstEnd!=-1&&firstEnd+endString.length!=from.ch)return false;firstEnd=endLine.indexOf(endString,to.ch);var almostLastStart=endLine.slice(to.ch).lastIndexOf(startString,firstEnd-to.ch);lastStart=firstEnd==-1||almostLastStart==-1?-1:to.ch+almostLastStart;if(firstEnd!=-1&&lastStart!=-1&&lastStart!=to.ch)return false;self.operation(function(){self.replaceRange("",Pos(end,close-(pad&&endLine.slice(close-pad.length,close)==pad?pad.length:0)),Pos(end,close+endString.length));var openEnd=open+startString.length;if(pad&&startLine.slice(openEnd,openEnd+pad.length)==pad)openEnd+=pad.length;self.replaceRange("",Pos(start,open),Pos(start,openEnd));if(lead)for(var i=start+1;i<=end;++i){var line=self.getLine(i),found=line.indexOf(lead);if(found==-1||nonWS.test(line.slice(0,found)))continue;var foundEnd=found+lead.length;if(pad&&line.slice(foundEnd,foundEnd+pad.length)==pad)foundEnd+=pad.length;self.replaceRange("",Pos(i,found),Pos(i,foundEnd))}});return true})});(function(mod){if(typeof exports=="object"&&typeof module=="object")mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)define(["../../lib/codemirror"],mod);else mod(CodeMirror)})(function(CodeMirror){var nonspace=/\S/g;var repeat=String.prototype.repeat||function(n){return Array(n+1).join(this)};function continueComment(cm){if(cm.getOption("disableInput"))return CodeMirror.Pass;var ranges=cm.listSelections(),mode,inserts=[];for(var i=0;i-1&&/\bcomment\b/.test(cm.getTokenTypeAt({line:pos.line,ch:found+1}))){}else if(pos.ch>=blockStart.length&&(found=line.lastIndexOf(blockStart,pos.ch-blockStart.length))>-1&&found>end){if(nonspaceAfter(0,line)>=found){insert=line.slice(0,found)}else{var tabSize=cm.options.tabSize,numTabs;found=CodeMirror.countColumn(line,found,tabSize);insert=!cm.options.indentWithTabs?repeat.call(" ",found):repeat.call("\t",numTabs=Math.floor(found/tabSize))+repeat.call(" ",found-tabSize*numTabs)}}else if((found=line.indexOf(mode.blockCommentContinue))>-1&&found<=pos.ch&&found<=nonspaceAfter(0,line)){insert=line.slice(0,found)}if(insert!=null)insert+=mode.blockCommentContinue}if(insert==null&&lineCmt&&continueLineCommentEnabled(cm)){if(line==null)line=cm.getLine(pos.line);found=line.indexOf(lineCmt);if(!pos.ch&&!found)insert="";else if(found>-1&&nonspaceAfter(0,line)>=found){insert=nonspaceAfter(pos.ch,line)>-1;if(!insert){var next=cm.getLine(pos.line+1)||"",nextFound=next.indexOf(lineCmt);insert=nextFound>-1&&nonspaceAfter(0,next)>=nextFound||null}if(insert){insert=line.slice(0,found)+lineCmt+line.slice(found+lineCmt.length).match(/^\s*/)[0]}}}if(insert==null)return CodeMirror.Pass;inserts[i]="\n"+insert}cm.operation(function(){for(var i=ranges.length-1;i>=0;i--)cm.replaceRange(inserts[i],ranges[i].from(),ranges[i].to(),"+insert")})}function nonspaceAfter(ch,str){nonspace.lastIndex=ch;var m=nonspace.exec(str);return m?m.index:-1}function continueLineCommentEnabled(cm){var opt=cm.getOption("continueComments");if(opt&&typeof opt=="object")return opt.continueLineComment!==false;return true}CodeMirror.defineOption("continueComments",null,function(cm,val,prev){if(prev&&prev!=CodeMirror.Init)cm.removeKeyMap("continueComment");if(val){var key="Enter";if(typeof val=="string")key=val;else if(typeof val=="object"&&val.key)key=val.key;var map={name:"continueComment"};map[key]=continueComment;cm.addKeyMap(map)}})});(function(mod){if(typeof exports=="object"&&typeof module=="object")mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)define(["../../lib/codemirror"],mod);else mod(CodeMirror)})(function(CodeMirror){var ie_lt8=/MSIE \d/.test(navigator.userAgent)&&(document.documentMode==null||document.documentMode<8);var Pos=CodeMirror.Pos;var matching={"(":")>",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function bracketRegex(config){return config&&config.bracketRegex||/[(){}[\]]/}function findMatchingBracket(cm,where,config){var line=cm.getLineHandle(where.line),pos=where.ch-1;var afterCursor=config&&config.afterCursor;if(afterCursor==null)afterCursor=/(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className);var re=bracketRegex(config);var match=!afterCursor&&pos>=0&&re.test(line.text.charAt(pos))&&matching[line.text.charAt(pos)]||re.test(line.text.charAt(pos+1))&&matching[line.text.charAt(++pos)];if(!match)return null;var dir=match.charAt(1)==">"?1:-1;if(config&&config.strict&&dir>0!=(pos==where.ch))return null;var style=cm.getTokenTypeAt(Pos(where.line,pos+1));var found=scanForBracket(cm,Pos(where.line,pos+(dir>0?1:0)),dir,style,config);if(found==null)return null;return{from:Pos(where.line,pos),to:found&&found.pos,match:found&&found.ch==match.charAt(0),forward:dir>0}}function scanForBracket(cm,where,dir,style,config){var maxScanLen=config&&config.maxScanLineLength||1e4;var maxScanLines=config&&config.maxScanLines||1e3;var stack=[];var re=bracketRegex(config);var lineEnd=dir>0?Math.min(where.line+maxScanLines,cm.lastLine()+1):Math.max(cm.firstLine()-1,where.line-maxScanLines);for(var lineNo=where.line;lineNo!=lineEnd;lineNo+=dir){var line=cm.getLine(lineNo);if(!line)continue;var pos=dir>0?0:line.length-1,end=dir>0?line.length:-1;if(line.length>maxScanLen)continue;if(lineNo==where.line)pos=where.ch-(dir<0?1:0);for(;pos!=end;pos+=dir){var ch=line.charAt(pos);if(re.test(ch)&&(style===undefined||(cm.getTokenTypeAt(Pos(lineNo,pos+1))||"")==(style||""))){var match=matching[ch];if(match&&match.charAt(1)==">"==dir>0)stack.push(ch);else if(!stack.length)return{pos:Pos(lineNo,pos),ch:ch};else stack.pop()}}}return lineNo-dir==(dir>0?cm.lastLine():cm.firstLine())?false:null}function matchBrackets(cm,autoclear,config){var maxHighlightLen=cm.state.matchBrackets.maxHighlightLineLength||1e3,highlightNonMatching=config&&config.highlightNonMatching;var marks=[],ranges=cm.listSelections();for(var i=0;i1)return;if(this.somethingSelected()){if(!options.hint.supportsSelection)return;for(var i=0;ihints.clientHeight+1:false;var startScroll;setTimeout(function(){startScroll=cm.getScrollInfo()});var overlapY=box.bottom-winH;if(overlapY>0){var height=box.bottom-box.top,curTop=pos.top-(pos.bottom-box.top);if(curTop-height>0){hints.style.top=(top=pos.top-height-offsetTop)+"px";below=false}else if(height>winH){hints.style.height=winH-5+"px";hints.style.top=(top=pos.bottom-box.top-offsetTop)+"px";var cursor=cm.getCursor();if(data.from.ch!=cursor.ch){pos=cm.cursorCoords(cursor);hints.style.left=(left=pos.left-offsetLeft)+"px";box=hints.getBoundingClientRect()}}}var overlapX=box.right-winW;if(scrolls)overlapX+=cm.display.nativeBarWidth;if(overlapX>0){if(box.right-box.left>winW){hints.style.width=winW-5+"px";overlapX-=box.right-box.left-winW}hints.style.left=(left=Math.max(pos.left-overlapX-offsetLeft,0))+"px"}if(scrolls)for(var node=hints.firstChild;node;node=node.nextSibling)node.style.paddingRight=cm.display.nativeBarWidth+"px";cm.addKeyMap(this.keyMap=buildKeyMap(completion,{moveFocus:function(n,avoidWrap){widget.changeActive(widget.selectedHint+n,avoidWrap)},setFocus:function(n){widget.changeActive(n)},menuSize:function(){return widget.screenAmount()},length:completions.length,close:function(){completion.close()},pick:function(){widget.pick()},data:data}));if(completion.options.closeOnUnfocus){var closingOnBlur;cm.on("blur",this.onBlur=function(){closingOnBlur=setTimeout(function(){completion.close()},100)});cm.on("focus",this.onFocus=function(){clearTimeout(closingOnBlur)})}cm.on("scroll",this.onScroll=function(){var curScroll=cm.getScrollInfo(),editor=cm.getWrapperElement().getBoundingClientRect();if(!startScroll)startScroll=cm.getScrollInfo();var newTop=top+startScroll.top-curScroll.top;var point=newTop-(parentWindow.pageYOffset||(ownerDocument.documentElement||ownerDocument.body).scrollTop);if(!below)point+=hints.offsetHeight;if(point<=editor.top||point>=editor.bottom)return completion.close();hints.style.top=newTop+"px";hints.style.left=left+startScroll.left-curScroll.left+"px"});CodeMirror.on(hints,"dblclick",function(e){var t=getHintElement(hints,e.target||e.srcElement);if(t&&t.hintId!=null){widget.changeActive(t.hintId);widget.pick()}});CodeMirror.on(hints,"click",function(e){var t=getHintElement(hints,e.target||e.srcElement);if(t&&t.hintId!=null){widget.changeActive(t.hintId);if(completion.options.completeOnSingleClick)widget.pick()}});CodeMirror.on(hints,"mousedown",function(){setTimeout(function(){cm.focus()},20)});var selectedHintRange=this.getSelectedHintRange();if(selectedHintRange.from!==0||selectedHintRange.to!==0){this.scrollToActive()}CodeMirror.signal(data,"select",completions[this.selectedHint],hints.childNodes[this.selectedHint]);return true}Widget.prototype={close:function(){if(this.completion.widget!=this)return;this.completion.widget=null;if(this.hints.parentNode)this.hints.parentNode.removeChild(this.hints);this.completion.cm.removeKeyMap(this.keyMap);var input=this.completion.cm.getInputField();input.removeAttribute("aria-activedescendant");input.removeAttribute("aria-owns");var cm=this.completion.cm;if(this.completion.options.closeOnUnfocus){cm.off("blur",this.onBlur);cm.off("focus",this.onFocus)}cm.off("scroll",this.onScroll)},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var widget=this;this.keyMap={Enter:function(){widget.picked=true}};this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(i,avoidWrap){if(i>=this.data.list.length)i=avoidWrap?this.data.list.length-1:0;else if(i<0)i=avoidWrap?0:this.data.list.length-1;if(this.selectedHint==i)return;var node=this.hints.childNodes[this.selectedHint];if(node){node.className=node.className.replace(" "+ACTIVE_HINT_ELEMENT_CLASS,"");node.removeAttribute("aria-selected")}node=this.hints.childNodes[this.selectedHint=i];node.className+=" "+ACTIVE_HINT_ELEMENT_CLASS;node.setAttribute("aria-selected","true");this.completion.cm.getInputField().setAttribute("aria-activedescendant",node.id);this.scrollToActive();CodeMirror.signal(this.data,"select",this.data.list[this.selectedHint],node)},scrollToActive:function(){var selectedHintRange=this.getSelectedHintRange();var node1=this.hints.childNodes[selectedHintRange.from];var node2=this.hints.childNodes[selectedHintRange.to];var firstNode=this.hints.firstChild;if(node1.offsetTopthis.hints.scrollTop+this.hints.clientHeight)this.hints.scrollTop=node2.offsetTop+node2.offsetHeight-this.hints.clientHeight+firstNode.offsetTop},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1},getSelectedHintRange:function(){var margin=this.completion.options.scrollMargin||0;return{from:Math.max(0,this.selectedHint-margin),to:Math.min(this.data.list.length-1,this.selectedHint+margin)}}};function applicableHelpers(cm,helpers){if(!cm.somethingSelected())return helpers;var result=[];for(var i=0;i0)callback(result);else run(i+1)})}run(0)};resolved.async=true;resolved.supportsSelection=true;return resolved}else if(words=cm.getHelper(cm.getCursor(),"hintWords")){return function(cm){return CodeMirror.hint.fromList(cm,{words:words})}}else if(CodeMirror.hint.anyword){return function(cm,options){return CodeMirror.hint.anyword(cm,options)}}else{return function(){}}}CodeMirror.registerHelper("hint","auto",{resolve:resolveAutoHints});CodeMirror.registerHelper("hint","fromList",function(cm,options){var cur=cm.getCursor(),token=cm.getTokenAt(cur);var term,from=CodeMirror.Pos(cur.line,token.start),to=cur;if(token.start,]/,closeOnPick:true,closeOnUnfocus:true,updateOnCursorActivity:true,completeOnSingleClick:true,container:null,customKeys:null,extraKeys:null,paddingForScrollbar:true,moveOnOverlap:true};CodeMirror.defineOption("hintOptions",null)});"use strict";(()=>{var oe=Object.defineProperty,re=Object.defineProperties;var se=Object.getOwnPropertyDescriptors;var V=Object.getOwnPropertySymbols;var le=Object.prototype.hasOwnProperty,ae=Object.prototype.propertyIsEnumerable;var D=(u,e,t)=>e in u?oe(u,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):u[e]=t,_=(u,e)=>{for(var t in e||(e={}))le.call(e,t)&&D(u,t,e[t]);if(V)for(var t of V(e))ae.call(e,t)&&D(u,t,e[t]);return u},q=(u,e)=>re(u,se(e));var P=CodeMirror.Pos,ue=["arrays","benchmark","bitfield","cli","clipboard","compress","context","crypto","darwin","datatypes","dl","dlmalloc","encoding","eventbus","flag","fontstash","gg","gx","hash","io","js","json","log","math","mssql","mysql","net","orm","os","pg","picoev","picohttpparser","rand","readline","regex","runtime","semver","sokol","sqlite","stbi","strconv","strings","sync","szip","term","time","toml","v","vweb","x"],K=["params","noinit","required","skip","assert_continues","unsafe","manualfree","heap","nonnull","primary","inline","direct_array_access","live","flag","noinline","noreturn","typedef","console","sql","table","deprecated","deprecated_after","export","callconv"],U="[\\w_]+",Q=new RegExp(`^(${K.join("|")})]$`),Y=`(${U}: ${U})`,Z=new RegExp(`^${Y}]$`),G=new RegExp(`^(${K.join("|")}(; ?)?){2,}]$`),J=new RegExp(`^((${Y})(; )?){2,}]$`),X=new RegExp(`^if ${U} \\??]`);function de(u){var p;let e=[],t=u.getCursor(),n=u.getTokenAt(t),r=new Set;for(let g=0;gb.type!=null);f.length>0&&f[0].string==="import"&&r.add(f[f.length-1].string)}let l=u.getLineTokens(t.line);l.length>0&&l[0].string==="import"&&e.push(l[0]);let a=n.string.length,d=u.getTokenAt(P(t.line,t.ch-a));return n.string==="."&&e.push(n),d.string==="."&&e.push(d),/\b(?:string|comment)\b/.test((p=n.type)!=null?p:"")?null:(/^[\w$_]*$/.test(n.string)?n.end>t.ch&&(n.end=t.ch,n.string=n.string.slice(0,t.ch-n.start)):n={start:t.ch,end:t.ch,string:"",state:n.state,type:n.string==="."?"property":null},{list:ce(n,r,e),from:P(t.line,n.start),to:P(t.line,n.end)})}function ce(u,e,t){let n=[],r=u.string;function l(a){let d=a.text;if(!d.startsWith(r))return;n.find(g=>g.text===d)||n.push(a)}if(t&&t.length){let a=t.pop();if(a!==void 0){if(a.type==="keyword"&&a.string==="import")return ue.forEach(d=>{l({text:d,displayText:d,className:"completion-module"})}),n;if(a.string===".")return[]}}return e.forEach(a=>{l({text:a,displayText:a,className:"completion-module"})}),A.forEach(a=>{l({text:a+" ",displayText:a,className:"completion-keyword"})}),N.forEach(a=>{l({text:a+" ",displayText:a,className:"completion-keyword"})}),B.forEach(a=>{l({text:a,displayText:a,className:"completion-atom"})}),W.forEach(a=>{l({text:a,displayText:a,className:"completion-type"})}),n}var pe=u=>de(u);CodeMirror.registerHelper("hint","v",pe);var F=class{constructor(e,t,n,r,l){this.indentation=e;this.column=t;this.type=n;this.align=r;this.prev=l;this.insideString=!1;this.stringQuote=null;this.expectedImportName=!1;this.knownImports=new Set}},A=new Set(["as","asm","assert","atomic","break","const","continue","defer","else","enum","fn","for","go","goto","if","import","in","interface","is","isreftype","lock","match","module","mut","none","or","pub","return","rlock","select","shared","sizeof","static","struct","spawn","type","typeof","union","unsafe","volatile","__global","__offsetof"]),N=new Set(["sql","chan","thread"]),B=new Set(["true","false","nil","print","println","exit","panic","error","dump"]),W=new Set(["bool","string","i8","i16","int","i64","i128","u8","u16","u32","u64","u128","rune","f32","f64","isize","usize","voidptr","any"]);CodeMirror.defineMode("v",u=>{var y;let e=(y=u.indentUnit)!=null?y:0,t=/[+\-*&^%:=<>!?|\/]/,n=null;function r(i){return i.eatWhile(/[\w$_\xa1-\uffff]/),i.current()}function l(i,o){let s=i.next();if(s===null)return null;if(o.context.insideString&&s==="}")return i.eat("}"),o.tokenize=g(o.context.stringQuote),"end-interpolation";if(s==='"'||s==="'"||s==="`")return o.tokenize=g(s),o.tokenize(i,o);if(s==="."&&!i.match(/^[0-9]+([eE][\-+]?[0-9]+)?/))return"operator";if(s==="["&&(i.match(Q)||i.match(Z)||i.match(G)||i.match(J)||i.match(X)))return"attribute";if(/[\d.]/.test(s))return s==="0"?i.match(/^[xX][0-9a-fA-F_]+/)||i.match(/^o[0-7_]+/)||i.match(/^b[0-1_]+/):i.match(/^[0-9_]*\.?[0-9_]*([eE][\-+]?[0-9_]+)?/),"number";if(/[\[\]{}(),;:.]/.test(s))return n=s,null;if(s==="/"){if(i.eat("*"))return o.tokenize=f,f(i,o);if(i.eat("/"))return i.skipToEnd(),"comment"}if(t.test(s))return i.eatWhile(t),"operator";if(s==="@")return r(i),"at-identifier";if(s==="$"){let M=r(i).slice(1);return A.has(M)?"keyword":"compile-time-identifier"}i.backUp(2);let h=i.next()===".";i.next();let c=r(i);if(c==="import"&&(o.context.expectedImportName=!0),A.has(c)||N.has(c))return"keyword";if(B.has(c))return"atom";if(W.has(c))return"builtin";if(c.length>0&&c[0].toUpperCase()===c[0])return"type";let x=i.peek();if(x==="("||x==="<")return"function";if(x==="["){i.next();let M=i.next();if(i.backUp(2),M!=null&&M.match(/[A-Z]/i))return"function"}return h?"property":o.context.expectedImportName&&i.peek()!="."?(o.context.expectedImportName=!1,o.context.knownImports===void 0&&(o.context.knownImports=new Set),o.context.knownImports.add(c),"import-name"):o.context.knownImports.has(c)&&i.peek()=="."?"import-name":"variable"}function a(i,o){return i.match("}")?(o.tokenize=g(o.context.stringQuote),"end-interpolation"):(o.tokenize=l,o.tokenize(i,o))}function d(i,o){let s=i.next();if(s===" ")return o.tokenize=g(o.context.stringQuote),o.tokenize(i,o);if(s===".")return"operator";let h=r(i);if(h[0].toLowerCase()===h[0].toUpperCase())return o.tokenize=g(o.context.stringQuote),o.tokenize(i,o);let c=i.next();return i.backUp(1),c==="."?o.tokenize=d:o.tokenize=g(o.context.stringQuote),"variable"}function p(i,o){let s=i.next();return s==="$"&&i.eat("{")?(o.tokenize=a,"start-interpolation"):s==="$"?(o.tokenize=d,"start-interpolation"):"string"}function g(i){return function(o,s){s.context.insideString=!0,s.context.stringQuote=i;let h="",c=!1,x=!1;for(;(h=o.next())!=null;){if(h===i&&!c){x=!0;break}if(h==="$"&&!c&&o.eat("{"))return s.tokenize=p,o.backUp(2),"string";if(h==="$"&&!c)return s.tokenize=p,o.backUp(1),"string";c=!c&&h==="\\"}return(x||c)&&(s.tokenize=l),s.context.insideString=!1,s.context.stringQuote=null,"string"}}function f(i,o){let s=!1,h;for(;h=i.next();){if(h==="/"&&s){o.tokenize=l;break}s=h==="*"}return"comment"}function b(i,o,s){return i.context=new F(i.indention,o,s,null,i.context)}function m(i){if(!i.context.prev)return;let o=i.context.type;return(o===")"||o==="]"||o==="}")&&(i.indention=i.context.indentation),i.context=i.context.prev,i.context}return{startState:function(){return{tokenize:null,context:new F(0,0,"top",!1),indention:0,startOfLine:!0}},token:function(i,o){let s=o.context;if(i.sol()&&(s.align==null&&(s.align=!1),o.indention=i.indentation(),o.startOfLine=!0),i.eatSpace())return null;n=null;let h=(o.tokenize||l)(i,o);return h==="comment"||(s.align==null&&(s.align=!0),n==="{"?b(o,i.column(),"}"):n==="["?b(o,i.column(),"]"):n==="("?b(o,i.column(),")"):(n==="}"&&s.type==="}"||n===s.type)&&m(o),o.startOfLine=!1),h},indent:function(i,o){if(i.tokenize!==l&&i.tokenize!=null||i.context.type=="top")return 0;let s=i.context,c=o.charAt(0)===s.type;return s.align?s.column+(c?0:1):s.indentation+(c?0:e)},electricChars:"{}):",closeBrackets:"()[]{}''\"\"``",fold:"brace",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//"}});CodeMirror.defineMIME("text/x-v","v");var S=class{saveCode(e){window.localStorage.setItem(S.LOCAL_STORAGE_KEY,e)}getCode(e){let t=window.localStorage.getItem(S.LOCAL_STORAGE_KEY);if(t==null){e(S.WELCOME_CODE);return}e(t)}},T=S;T.LOCAL_STORAGE_KEY="code",T.WELCOME_CODE=`
-// Welcome to the V Playground!
-// Here you can edit, run, and share V code.
-// Let's start with a simple "Hello, Playground!" example:
-println('Hello, Playground!')
-
-// To run the code, click the "Run" button or just press Ctrl + R.
-// To format the code, click the "Format" button or just press Ctrl + L.
-// See all shortcuts in the "Help" in the bottom right corner.
-
-// More examples are available in right dropdown list.
-// You can find Help for shortcuts in the bottom right corner or just press Ctrl + I.
-// See also change theme button in the top right corner.
-// If you want to learn more about V, visit https://vlang.io
-// Join us on Discord: https://discord.gg/vlang
-// Enjoy!
-`.trimStart();var v=class{constructor(e){this.hash=e}saveCode(e){}getCode(e){return this.getSharedCode(e)}getSharedCode(e){let t=new FormData;t.append("hash",this.hash),fetch("/query",{method:"post",body:t}).then(n=>n.text()).then(n=>{e(n)}).catch(n=>{console.log(n)})}};v.QUERY_PARAM_NAME="query",v.CODE_NOT_FOUND="Not found.";var O=class{constructor(e){this.text=e}saveCode(e){}getCode(e){e(this.text)}};var I=class{constructor(e){this.onClose=null;this.onWrite=null;this.filters=[];this.element=e}registerCloseHandler(e){this.onClose=e}registerWriteHandler(e){this.onWrite=e}registerFilter(e){this.filters.push(e)}write(e){let t=e.split(`
-`),n=this.getTerminalOutputElement(),l=t.filter(a=>this.filters.every(d=>d(a))).join(`
-`);n.innerHTML+=l+`
-`,this.onWrite!==null&&this.onWrite(e)}writeTestPassed(){let e=`
-
-
-
- Tests passed
-
-`,t=this.getTerminalOutputElement();t.innerHTML+=e+`
-`,this.onWrite!==null&&this.onWrite("")}writeTestFailed(){let e=`
-
-
-
- Tests failed
-
-`,t=this.getTerminalOutputElement();t.innerHTML+=e+`
-`,this.onWrite!==null&&this.onWrite("")}clear(){this.getTerminalOutputElement().innerHTML=""}mount(){let e=this.element.querySelector(".js-terminal__close-buttom");e==null||this.onClose===null||e.addEventListener("click",this.onClose)}getTerminalOutputElement(){return this.element.querySelector(".js-terminal__output")}};var z=class{constructor(e){this.removedIndent=0;this.state=0;this.wasUnfolded=!1;this.foldedCode=null;this.unfoldedCode=null;this.currentCodeObtainer=()=>"";let t=this.normalizeCode(e);this.range=this.getSnippetRange(t),this.code=this.removeRangeMarkers(t)}registerCurrentCodeObtainer(e){this.currentCodeObtainer=e}noFolding(){return this.range.start==-1}getCode(){return this.noFolding()?this.code:this.state==1?this.getUnfoldedCode():this.getFoldedCode()}getRunnableCode(){return this.state==1?this.currentCodeObtainer():this.getUnfoldedCodeWithoutCaching()}getUnfoldedCode(){return this.unfoldedCode!=null?this.unfoldedCode:this.getUnfoldedCodeWithoutCaching()}getUnfoldedCodeWithoutCaching(){if(this.noFolding())return this.currentCodeObtainer();let e=this.currentCodeObtainer(),t=" ".repeat(this.removedIndent),n=e.split(`
-`).map(p=>t+p).join(`
-`),r=this.code.split(`
-`),l=r.slice(0,this.range.start).join(`
-`),a=r.slice(r.length-this.range.startFromEnd).join(`
-`),d=l+`
-`+n+`
-`+a;return this.unfoldedCode=d,d}getFoldedCode(){if(this.noFolding())return this.currentCodeObtainer();if(this.foldedCode!=null)return this.foldedCode;this.wasUnfolded&&(this.code=this.currentCodeObtainer());let e=this.code.split(`
-`),t=e.slice(this.range.start,e.length-this.range.startFromEnd).join(`
-`),n=this.normalizeIndents(t);return this.foldedCode=n,n}toggle(){this.state==0?(this.state=1,this.wasUnfolded=!0,this.foldedCode=null):(this.state=0,this.unfoldedCode=null)}getSnippetRange(e){let t=e.split(`
-`),n=t.findIndex(l=>l.trim().startsWith("//code::start")),r=t.findIndex(l=>l.trim().startsWith("//code::end"));return n==-1||r==-1?{start:-1,startFromEnd:0}:{start:n,startFromEnd:t.length-r-1}}normalizeCode(e){let t=this.normalizeIndents(e).split(`
-`);if(t.length>1){let n=t[0],r=t[t.length-1];n.trim().length==0&&t.shift(),r.trim().length==0&&t.pop()}return t.join(`
-`)}normalizeIndents(e){let t=e.split(`
-`),n=t.map(a=>this.lineIndent(a)),r=Math.min(...n),l=t.map(a=>a.substring(r));return this.removedIndent=r,l.join(`
-`)}lineIndent(e){for(let t=0;t!r.trim().startsWith("//code::")).join(`
-`)}};var H=class{constructor(e,t,n,r){this.snippet=null;let l={mode:"v",lineNumbers:r,matchBrackets:!0,extraKeys:{"Ctrl-Space":"autocomplete","Ctrl-/":"toggleComment"},indentWithTabs:!0,indentUnit:4,autoCloseBrackets:!0,showHint:!0,lint:{async:!0,lintOnChange:!0,delay:20},toggleLineComment:{indent:!0,padding:" "},theme:"dark",readOnly:n?"nocursor":!1};this.wrapperElement=e;let a=e.querySelector("textarea");this.editor=CodeMirror.fromTextArea(a,l),this.repository=t,this.repository.getCode(p=>{if(p===v.CODE_NOT_FOUND){this.terminal.write("Code for shared link not found.");return}this.snippet=new z(p),this.snippet.registerCurrentCodeObtainer(()=>this.editor.getValue()),this.setCode(this.snippet.getCode())});let d=e.querySelector(".js-terminal");if(d==null)throw new Error("Terminal not found, please check that terminal inside editor element");this.terminal=new I(d),this.terminal.registerCloseHandler(()=>{this.closeTerminal(),this.editor.refresh()}),this.terminal.registerWriteHandler(p=>{this.openTerminal()}),this.terminal.registerFilter(p=>!p.trim().startsWith("Failed command")),this.terminal.mount(),this.closeTerminal()}setEditorFontSize(e){let t=this.wrapperElement.querySelector(".CodeMirror"),n=e;n.endsWith("px")&&(n=n.slice(0,-2)),t.style.fontSize=n+"px",this.refresh()}setCode(e,t=!1){let n=this.editor.getCursor();this.editor.setValue(e),this.repository.saveCode(e),t&&this.editor.setCursor(n)}getCode(){var e;return(e=this.snippet)==null?void 0:e.getCode()}saveCode(){this.repository instanceof v&&(this.repository=new T),this.repository.saveCode(this.getCode())}toggleSnippet(){if(this.snippet!==null){if(this.snippet.toggle(),this.setCode(this.snippet.getCode()),this.snippet.state==1){let t=this.snippet.getCode().split(`
-`).length,n=this.snippet.range.start,r=t-this.snippet.range.startFromEnd;this.editor.markText({line:0,ch:0},{line:n,ch:0},{readOnly:!0,inclusiveLeft:!0,inclusiveRight:!1}),this.editor.markText({line:r,ch:0},{line:t,ch:0},{readOnly:!0,inclusiveLeft:!0,inclusiveRight:!1}),this.editor.operation(()=>{for(let l=0;l{if(r.status!=200)throw new Error("Can't run code");return r}).then(r=>r.json()).then(r=>JSON.parse(r))}static runTest(e){let t=new FormData;t.append("code",e);let n=this.buildUrl("run_test");return fetch(n,{method:"post",body:t}).then(r=>{if(r.status!=200)throw new Error("Can't run test");return r}).then(r=>r.json()).then(r=>JSON.parse(r))}static buildUrl(e){return this.server!==null&&this.server!==void 0?`${this.server.endsWith("/")?this.server.slice(0,-1):this.server}/${e}`:`/${e}`}};var ee=`
-
-`,te=`
-
-`,ne=`
-`;var E=class{name(){return"dark"}};var R=class{name(){return"light"}};var w=class{constructor(e=null){this.currentTheme=null;this.onChange=[];this.changeThemeButton=null;this.predefinedTheme=null;this.predefinedTheme=e,this.changeThemeButton=document.querySelector(".js-playground__action-change-theme")}registerOnChange(e){this.onChange.push(e)}loadTheme(){if(this.predefinedTheme!==null&&this.predefinedTheme!==void 0){this.turnTheme(this.predefinedTheme);return}this.turnTheme(new E)}turnTheme(e){this.currentTheme=e,this.onChange.forEach(t=>t(e))}turnDarkTheme(){this.turnTheme(new E)}turnLightTheme(){this.turnTheme(new R)}toggleTheme(){this.currentTheme&&(this.currentTheme.name()==="light"?this.turnDarkTheme():this.turnLightTheme())}static findTheme(e){let n=this.themes.filter(r=>r.name()===e)[0];if(n===void 0)throw new Error(`Theme ${e} not found`);return n}};w.themes=[new E,new R];var L=u=>{if(u!=null)return u==="true"},$=u=>Object.fromEntries(Object.entries(u).filter(([e,t])=>t!==void 0));var C=class{constructor(e){this.onSuccessfulRun=[];this.onFailedRun=[];var a,d,p,g,f,b;if(e.selector)this.playgroundElement=document.querySelector(e.selector);else if(e.element)this.playgroundElement=e.element;else throw new Error("No selector or element provided");let t=(d=(a=e.code)!=null?a:this.playgroundElement.textContent)!=null?d:"";this.mount(this.playgroundElement),this.runAsTests=e.configuration==="tests",this.repository=new O(t);let n=this.playgroundElement.querySelector(".v-playground");this.editor=new H(n,this.repository,(p=e.highlightOnly)!=null?p:!1,(g=e.showLineNumbers)!=null?g:!0),e.fontSize&&this.editor.setEditorFontSize(e.fontSize);let r=(f=e.theme)!=null?f:"light";if(this.themeManager=new w(w.findTheme(r)),this.themeManager.registerOnChange(m=>{this.setThemeImpl(m)}),this.themeManager.loadTheme(),this.registerRunAction(e.customRunButton,()=>{this.run()}),this.registerAction("show-all",()=>{var y;this.editor.toggleSnippet();let m=this.getActionElement("show-all");((y=this.editor.snippet)==null?void 0:y.state)===0?m.innerHTML=ee:m.innerHTML=te}),this.setupPlaygroundLink(),e.showFoldedCodeButton===!1||(b=this.editor.snippet)!=null&&b.noFolding()){let m=this.getActionElement("show-all");m.style.display="none"}let l=this.playgroundElement.querySelector(".js-playground__footer");if(e.showFooter===!1&&(l.style.display="none",n.classList.add("no-footer")),e.highlightOnly===!0){let m=this.getActionElement("run");m.style.display="none",l.style.display="none"}e.server!==void 0&&(k.server=e.server)}setTheme(e){this.setThemeImpl(w.findTheme(e))}setThemeImpl(e){this.editor.setTheme(e)}setupPlaygroundLink(){this.playgroundElement.querySelector(".js-playground-link").addEventListener("click",()=>{var a;let t="https://play.vosca.dev/?base64=",n=(a=this.editor.snippet)==null?void 0:a.getRunnableCode(),r=btoa(n),l=t+r;window.open(l,"_blank")})}static create(e,t){let n=this.getDefaultConfiguration(),r=this.getConfigurationFromElement(e);return new C(q(_(_(_({},n),$(t!=null?t:{})),$(r)),{element:e}))}static getDefaultConfiguration(){return{configuration:"run",theme:"light",fontSize:"12px",showLineNumbers:!0,highlightOnly:!1,showFoldedCodeButton:!0,showFooter:!0,server:"https://play.vosca.dev/"}}static getConfigurationFromElement(e){var b,m,y,i,o;let t=(b=e==null?void 0:e.getAttribute("data-configuration"))!=null?b:void 0,n=(m=e==null?void 0:e.getAttribute("data-theme"))!=null?m:void 0,r=(y=e.getAttribute("data-font-size"))!=null?y:void 0,l=L(e==null?void 0:e.getAttribute("data-show-line-numbers")),a=L(e.getAttribute("data-highlight-only")),d=L(e==null?void 0:e.getAttribute("data-show-folded-code-button")),p=L(e.getAttribute("data-show-footer")),g=(i=e==null?void 0:e.getAttribute("data-custom-run-button"))!=null?i:void 0,f=(o=e==null?void 0:e.getAttribute("data-server"))!=null?o:void 0;return{configuration:t,theme:n,fontSize:r,showLineNumbers:l,highlightOnly:a,showFoldedCodeButton:d,showFooter:p,customRunButton:g,server:f}}registerOnSuccessfulRun(e){this.onSuccessfulRun.push(e)}registerOnFailedRun(e){this.onFailedRun.push(e)}registerRunAction(e,t){if(e){let n=document.querySelector(e);if(n===void 0)throw new Error(`Can't find custom button with selector ${e}`);n.addEventListener("click",t);let r=this.getActionElement("run");r.style.display="none";return}this.registerAction("run",t)}mount(e){e!==null&&(e.innerHTML=ne)}registerAction(e,t){let n=this.playgroundElement.querySelector(`.js-playground__action-${e}`);if(n===void 0)throw new Error(`Can't find action button with class js-playground__action-${e}`);n.addEventListener("click",t)}getActionElement(e){return this.playgroundElement.querySelector(`.js-playground__action-${e}`)}run(){if(this.runAsTests){this.runTests();return}this.runCode()}runCode(){var t;this.clearTerminal(),this.writeToTerminal("Running code...");let e=(t=this.editor.snippet)==null?void 0:t.getRunnableCode();k.runCode(e).then(n=>{this.clearTerminal(),this.writeToTerminal(n.output),this.onRunFinished(n)}).catch(n=>{console.log(n),this.writeToTerminal("Can't run code. Please try again."),this.onFailedRun.forEach(r=>r())})}runTests(){var t;this.clearTerminal(),this.writeToTerminal("Running tests...");let e=(t=this.editor.snippet)==null?void 0:t.getRunnableCode();k.runTest(e).then(n=>{if(this.clearTerminal(),n.ok)this.editor.terminal.writeTestPassed();else{this.editor.terminal.writeTestFailed();let r=n.output.split(`
-`).slice(2,-6).join(`
-`);this.writeToTerminal(r)}this.onRunFinished(n)}).catch(n=>{console.log(n),this.writeToTerminal("Can't run tests. Please try again."),this.onFailedRun.forEach(r=>r())})}onRunFinished(e){e.ok?this.onSuccessfulRun.forEach(t=>t()):this.onFailedRun.forEach(t=>t())}setupShortcuts(){this.editor.editor.on("keypress",(e,t)=>{!e.state.completionActive&&t.key.length===1&&t.key.match(/[a-z0-9]/i)&&this.editor.showCompletion()}),document.addEventListener("keydown",e=>{(e.ctrlKey||e.metaKey)&&e.key==="s"?(this.editor.saveCode(),e.preventDefault()):this.editor.saveCode()})}clearTerminal(){this.editor.terminal.clear()}writeToTerminal(e){this.editor.terminal.write(e)}setEditorFontSize(e){this.editor.setEditorFontSize(e)}};var j=document.currentScript,ie=j==null?void 0:j.getAttribute("data-selector"),ge=C.getConfigurationFromElement(j);ie&&window.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll(ie).forEach(u=>{C.create(u,ge)})});window.Playground=C})();
diff --git a/templates/assets/styles/aside.scss b/templates/assets/styles/aside.scss
deleted file mode 100644
index 3918e2a3a..000000000
--- a/templates/assets/styles/aside.scss
+++ /dev/null
@@ -1,172 +0,0 @@
-aside {
- width: 300px;
- height: 100vh;
-
- position: fixed;
-
- color: var(--text-color);
- background-color: var(--aside-background);
-
- padding: 20px 20px 20px 40px;
-
- z-index: 1000;
-
- @media (max-width: 1000px) {
- display: none;
- }
-
- #searchbox {
- position: relative;
-
- input {
- display: block;
- width: 100%;
- padding: 10px 14px 10px 36px;
- background-color: var(--background);
- border: 1px solid var(--divider-color);
- border-radius: 8px;
- color: var(--secondary-color);
- font-size: 0.875rem;
- transition:
- border-color 0.2s,
- box-shadow 0.2s;
-
- &:hover {
- border-color: var(--theme-color);
- }
-
- &:focus {
- outline: none;
- border-color: var(--theme-color);
- box-shadow: 0 0 0 3px var(--divider-color);
- }
- }
-
- button {
- background: none;
- border: none;
- padding: 0;
- height: 16px;
- color: var(--secondary-color);
- position: absolute;
- left: 14px;
- top: 50%;
- transform: translateY(-50%);
- cursor: pointer;
- }
-
- #searchKeys {
- position: absolute;
- top: 8px;
- right: 8px;
- border-radius: 4px;
- border: 1px solid var(--divider-color);
- background: var(--aside-background);
- padding: 1px 5px;
- opacity: 0.5;
- font-family: inherit;
- font-size: 0.75rem;
- }
- }
-
- #searchResults {
- display: none;
- position: absolute;
- overflow: scroll;
- height: 600px;
- width: 250px;
- background: var(--search-results-background);
- border-radius: 10px;
- }
-
- .title {
- display: grid;
- grid-template-columns: auto max-content;
- grid-column-gap: 10px;
- align-items: center;
- text-decoration: none;
- padding: 12px 0px;
-
- a {
- display: grid;
- grid-template-columns: max-content auto;
- grid-column-gap: 10px;
- align-items: center;
- text-decoration: none;
-
- img {
- width: 25px;
- }
-
- span {
- font-size: 17px;
- font-weight: 500;
- color: var(--color);
- }
- }
-
- .aside-topics-close {
- &:hover {
- cursor: pointer;
-
- svg {
- path {
- fill: var(--color);
- }
- }
- }
-
- svg {
- path {
- fill: var(--secondary-color);
- }
- }
- }
- }
-
- nav {
- height: 100%;
- padding-bottom: 40px; // leave some space for the top search bar
- }
-
- .group {
- border-top: 1px solid var(--divider-color);
- padding: 15px 0;
- height: 100%;
-
- section {
- height: 100%;
- overflow-y: scroll;
- }
-
- .title {
- font-size: 15px;
- font-weight: 600;
- margin-bottom: 10px;
- }
-
- .items {
- margin: 10px 0;
-
- .link {
- display: block;
- margin: 10px 0 0;
- color: var(--secondary-color);
- text-decoration: none;
-
- &:hover {
- cursor: pointer;
- color: var(--color);
- }
-
- &.active {
- color: var(--theme-color);
- }
-
- &.subtopic {
- margin: 6px 0 0;
- }
- }
- }
- }
-}
diff --git a/templates/assets/styles/fonts.css b/templates/assets/styles/fonts.css
deleted file mode 100644
index 8da239132..000000000
--- a/templates/assets/styles/fonts.css
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-/*# sourceMappingURL=fonts.css.map */
diff --git a/templates/assets/styles/fonts.css.map b/templates/assets/styles/fonts.css.map
deleted file mode 100644
index 531d4bdd9..000000000
--- a/templates/assets/styles/fonts.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sourceRoot":"","sources":[],"names":[],"mappings":"","file":"fonts.css"}
\ No newline at end of file
diff --git a/templates/assets/styles/fonts.scss b/templates/assets/styles/fonts.scss
deleted file mode 100644
index 73615dca9..000000000
--- a/templates/assets/styles/fonts.scss
+++ /dev/null
@@ -1,51 +0,0 @@
-@import url('https://fonts.googleapis.com/css2?family=Fira+Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap');
-@import url('https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css');
-
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-ExtraBold.woff2");
- font-weight: 800;
- font-display: swap;
-}
-
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-Bold.woff2");
- font-weight: 700;
- font-display: swap;
-}
-
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-SemiBold.woff2");
- font-weight: 600;
- font-display: swap;
-}
-
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-Medium.woff2");
- font-weight: 500;
- font-display: swap;
-}
-
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-Regular.woff2");
- font-weight: 400;
- font-display: swap;
-}
-
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-Book.woff2");
- font-weight: 350;
- font-display: swap;
-}
-
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-Light.woff2");
- font-weight: 300;
- font-display: swap;
-}
diff --git a/templates/assets/styles/header.css b/templates/assets/styles/header.css
deleted file mode 100644
index ce87c3ae7..000000000
--- a/templates/assets/styles/header.css
+++ /dev/null
@@ -1,79 +0,0 @@
-html[data-theme=dark] {
- --header-background: rgba(36, 36, 36, .7);
- --text-color: rgba(255, 255, 255, .87);
- --color: #f3f3f3;
- --secondary-color: #b3b3b3;
-}
-
-html {
- --header-background: rgba(255, 255, 255, .7);
- --text-color: rgba(0, 0, 0, .87);
- --color: #000;
- --secondary-color: #7f7f7f;
-}
-
-header {
- height: 70px;
- width: 100%;
- position: fixed;
- z-index: 1000;
- -webkit-backdrop-filter: saturate(50%) blur(8px);
- backdrop-filter: saturate(50%) blur(8px);
- background: var(--header-background);
-}
-header .header-container {
- display: grid;
- padding: 0 50px;
- height: 100%;
- width: 100%;
- align-items: center;
- justify-items: right;
-}
-header .header-container ul {
- display: flex;
- list-style: none;
- padding: 0;
- margin: 0;
-}
-header .header-container ul .change-theme {
- margin: 2px 0 0 20px;
- display: flex;
- align-items: center;
- justify-content: center;
- width: 18px;
- height: 18px;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-header .header-container ul .change-theme:hover {
- cursor: pointer;
-}
-header .header-container ul .change-theme:hover svg path {
- fill: var(--secondary-color);
-}
-header .header-container ul .change-theme svg {
- width: 18px;
- height: 18px;
-}
-header .header-container ul .change-theme svg path {
- fill: var(--text-color);
-}
-header .header-container ul li {
- margin: 0 10px;
-}
-header .header-container ul li a {
- color: var(--secondary-color);
- text-decoration: none;
-}
-header .header-container ul li a:hover {
- cursor: pointer;
- color: var(--color);
-}
-header .header-container ul li a.active {
- color: var(--theme-color);
-}
-
-/*# sourceMappingURL=header.css.map */
diff --git a/templates/assets/styles/header.css.map b/templates/assets/styles/header.css.map
deleted file mode 100644
index 8e5f5a676..000000000
--- a/templates/assets/styles/header.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sourceRoot":"","sources":["header.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGE;EACE;;AAKN;EACE;EACA;;AAEA;EACE;;AAKN;EACE;;AAEA;EACE;EACA;;AAEA;EACE;EACA;;AAGF;EACE","file":"header.css"}
\ No newline at end of file
diff --git a/templates/assets/styles/header.scss b/templates/assets/styles/header.scss
deleted file mode 100644
index ed609b5c8..000000000
--- a/templates/assets/styles/header.scss
+++ /dev/null
@@ -1,140 +0,0 @@
-header {
- height: 72px;
- width: 100vw;
- position: fixed;
- top: 0;
- z-index: 1000;
- font: 400 14px/1.5 "FiraSans", Helvetica, Arial, sans-serif;
-
- -webkit-backdrop-filter: saturate(50%) blur(8px);
- backdrop-filter: saturate(50%) blur(8px);
- background: var(--header-background);
- border-bottom: solid var(--divider-color);
-
- .header-container {
- padding: 1px 40px;
- height: 100%;
- width: 100vw;
- display: grid;
- grid-template-columns: max-content auto max-content;
- align-items: center;
-
- .header-container-left-section {
- display: flex;
- list-style: none;
- padding: 0;
- margin: 8px 0 0 0;
-
- .aside-topics-open {
- vertical-align: middle;
-
- &:hover {
- cursor: pointer;
-
- svg {
- path {
- fill: var(--color);
- }
- }
- }
-
- svg {
- path {
- fill: var(--secondary-color);
- }
- }
- }
- }
-
- .logo {
- display: grid;
- align-items: center;
- grid-template-columns: max-content max-content;
- grid-column-gap: 10px;
- margin-top: 2px;
-
- a {
- display: grid;
- align-items: center;
- }
-
- span {
- font-size: 17px;
- font-weight: 500;
- }
-
- span {
- color: var(--text-color);
- }
-
- img {
- width: 25px;
- }
- }
-
- .header-container-right-section {
- display: flex;
- list-style: none;
- padding: 0;
- margin: 2px 0 0 0;
- justify-self: end;
-
- .change-theme {
- margin: 0 0 0 20px;
- display: flex;
- align-items: center;
- justify-content: center;
-
- width: 18px;
- height: 18px;
-
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-
- &:hover {
- cursor: pointer;
-
- svg {
- path {
- fill: var(--secondary-color);
- }
- }
- }
-
- svg {
- width: 18px;
- height: 18px;
-
- &.sun {
- margin-top: 2px;
- }
-
- path {
- fill: var(--text-color);
- }
- }
- }
-
- li {
- margin: 0 10px;
-
- a {
- color: var(--secondary-color);
- text-decoration: none;
-
- &:hover {
- cursor: pointer;
- color: var(--color);
- }
-
- &.active {
- color: var(--theme-color);
- }
- }
- }
- }
- }
-}
diff --git a/templates/assets/styles/style.css.map b/templates/assets/styles/style.css.map
deleted file mode 100644
index 8f44c3d05..000000000
--- a/templates/assets/styles/style.css.map
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "version": 3,
- "file": "style.css",
- "sources": [
- "style.scss",
- "fonts.scss",
- "variables.scss",
- "header.scss",
- "aside.scss"
- ],
- "names": [],
- "mappings": "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"
-}
\ No newline at end of file
diff --git a/templates/assets/styles/style.scss b/templates/assets/styles/style.scss
deleted file mode 100644
index 8c5b2f7f8..000000000
--- a/templates/assets/styles/style.scss
+++ /dev/null
@@ -1,530 +0,0 @@
-@import "fonts.scss";
-@import "variables.scss";
-@import "header.scss";
-@import "aside.scss";
-
-@supports (font-variation-settings: normal) {
- code {
- font-family: "Fira Code VF", monospace;
- }
-}
-
-* {
- box-sizing: border-box;
-}
-
-html {
- scroll-behavior: smooth;
- scroll-padding-top: 80px;
-}
-
-body {
- background-color: var(--background);
- color: var(--color);
- margin: 0;
- padding: 0;
-
- font: 400 14px/1.5 "FiraSans", Helvetica, Arial, sans-serif;
- -webkit-text-size-adjust: 100%;
- font-feature-settings: "kern" 1;
-}
-
-a {
- text-decoration-style: dotted;
- color: var(--link-color);
-}
-
-a:visited {
- color: var(--link-visited-color);
-}
-
-a.external-link {
- padding-right: 12px;
- color: var(--theme-color);
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23ff6b00'%3E%3Cpath d='M14 2H5.75l3.595 3.595L2.22 12.72l1.06 1.06 7.125-7.125L14 10.25V2z'/%3E%3C/svg%3E");
- background-repeat: no-repeat;
- background-size: 11px 11px;
- background-position: 100% calc(100% - 1px);
-}
-
-.wrapper {
-}
-
-article {
- height: calc(100% - 1px);
-
- display: grid;
- align-content: space-between;
-
- padding: 0 0 0 300px;
-
- background-color: var(--background);
-
- @media (max-width: 1000px) {
- padding: 0;
- }
-
- .container {
- display: grid;
- grid-template-columns: calc(100% - 250px) 250px;
- padding: 0px 50px 20px 20px;
-
- @media (max-width: 1200px) {
- grid-template-columns: 100%;
-
- padding-left: 0px;
- padding-right: 0px;
-
- .aside {
- display: none;
- }
- }
-
- .content {
- padding: 72px 30px 0;
-
- @media (max-width: 1000px) {
- padding: 72px 0 0;
- }
-
- .content-container {
- margin: 0 40px;
- max-width: 800px;
- }
-
- footer {
- margin-top: 65px;
-
- .edit-info {
- display: grid;
- grid-template-columns: auto auto;
- justify-content: space-between;
- align-items: center;
- padding-bottom: 15px;
-
- @media (max-width: 700px) {
- grid-template-columns: 1fr;
- grid-template-rows: auto auto;
- }
-
- .edit-link {
- &:hover {
- cursor: pointer;
-
- a {
- color: var(--theme-color-dark);
- }
-
- svg {
- fill: var(--theme-color-dark);
- }
- }
-
- a {
- display: flex;
- align-items: center;
- border: 0;
- line-height: 25px;
- font-size: 14px;
- font-weight: 500;
- color: var(--theme-color);
- text-decoration: none;
- transition: color 0.25s;
- }
-
- svg {
- margin-top: -2px;
- margin-right: 8px;
- width: 14px;
- height: 14px;
- fill: var(--theme-color);
- transition: fill 0.25s;
- }
- }
-
- .last-updated {
- line-height: 32px;
- font-size: 13px;
- font-weight: 400;
- color: var(--secondary-color);
- }
- }
-
- .prev-next {
- padding-top: 25px;
- border-top: 1px solid var(--divider-color);
- display: grid;
- grid-template-columns: 1fr 1fr;
- grid-column-gap: 20px;
-
- &.only-prev {
- .page {
- grid-column: 1;
- }
- }
-
- &.only-next {
- .page {
- grid-column: 2;
- }
- }
-
- .page-link {
- display: block;
- border: 1px solid var(--divider-color);
- border-radius: 8px;
- padding: 11px 16px 13px;
- width: 100%;
- height: 100%;
- transition: border-color 0.25s;
- text-decoration: none;
-
- &:hover {
- cursor: pointer;
- border-color: var(--theme-color);
-
- .title {
- color: var(--theme-color-dark);
- }
- }
-
- .desc {
- display: block;
- line-height: 20px;
- font-size: 12px;
- font-weight: 500;
- color: var(--secondary-color);
- }
-
- .title {
- display: block;
- line-height: 20px;
- font-size: 14px;
- font-weight: 500;
- color: var(--theme-color);
- transition: color 0.25s;
- }
- }
- }
- }
- }
-
- .aside {
- padding: 0 0 0 30px;
-
- .aside-content {
- height: 100%;
- }
-
- .aside-container {
- top: 50px;
- position: -webkit-sticky;
- position: sticky;
- padding-top: 50px;
- }
-
- .title {
- font-size: 14px;
- font-weight: 600;
- margin-bottom: 10px;
- }
-
- ul {
- font-size: 13px;
- list-style: none;
- padding: 0;
- margin: 0;
-
- li {
- margin: 3px 0;
-
- &.active {
- a {
- color: var(--color);
- }
- }
-
- a {
- color: var(--secondary-color);
- text-decoration: none;
-
- &:hover {
- cursor: pointer;
- color: var(--color);
- }
- }
- }
- }
- }
- }
-
- .footer {
- width: 100%;
-
- margin-top: 50px;
- background-color: var(--aside-background);
- color: var(--secondary-color);
-
- .footer-content {
- padding: 0 50px;
-
- @media (max-width: 1000px) {
- padding: 0 20px;
- }
-
- .footer-container {
- display: flex;
- align-items: center;
- padding: 20px 0;
-
- @media (max-width: 1000px) {
- flex-direction: column;
- padding: 30px 0;
- }
- }
- }
- }
-
- main {
- font: 300 16px/1.5 "FiraSans", Helvetica, Arial, sans-serif;
- color: var(--text-color);
-
- h1 {
- font-size: 35px;
-
- @media (max-width: 1200px) {
- margin-bottom: 0px;
- }
- }
-
- section {
- padding: 10px 0;
- margin: 25px 0;
- border-top: 1px solid var(--divider-color);
- border-bottom: 1px solid var(--divider-color);
- }
-
- p {
- overflow-wrap: break-word;
- line-height: 1.7;
- }
-
- .header-anchor {
- float: left;
- margin-left: -0.87em;
- padding-right: 0.23em;
- font-weight: 500;
- user-select: none;
- opacity: 1;
- transition: color 0.25s, opacity 0.25s;
-
- &:hover {
- cursor: pointer;
- color: var(--theme-color-dark);
- }
- }
-
- a {
- font-weight: 500;
- color: var(--theme-color);
- text-decoration-style: dotted;
- transition: color 0.25s;
- }
-
- .language-v {
- max-width: 800px;
- margin-bottom: 30px;
-
- .playground__footer {
- background-color: var(--background);
- }
-
- .playground__wrapper {
- overflow: hidden;
- }
- }
-
- code {
- font-family: "Fira Code", monospace;
- font-size: 0.875em;
-
- &.symbol-ref {
- color: var(--theme-color);
- }
- }
-
- a > code {
- color: var(--theme-color) !important;
- }
-
- :not(pre) > code {
- white-space: nowrap;
- border-radius: 4px;
- padding: 3px 6px;
- color: var(--code-text-color);
- background-color: var(--code-background-color);
- }
-
- pre {
- white-space: pre;
- border-radius: 0;
- padding: 10px 20px;
- color: var(--code-block-text-color);
- background-color: var(--code-block-background-color);
- border: 1px solid var(--code-block-border-color);
- }
-
- table {
- width: 100%;
- border-collapse: collapse;
- border-spacing: 0;
- margin: 20px 0;
- overflow: auto;
-
- th {
- font-weight: 500;
- text-align: left;
- padding: 10px 15px;
- border-bottom: 1px solid var(--divider-color);
- }
-
- td {
- padding: 10px 15px;
- border-bottom: 1px solid var(--divider-color);
- }
- }
-
- kbd {
- display: inline-block;
- padding: 3px 5px;
- font: 11px "Fira Code", Consolas, "Liberation Mono", Menlo, Courier,
- monospace;
- line-height: 10px;
- color: #444d56;
- vertical-align: middle;
- background-color: #fafbfc;
- border: solid 1px #d1d5da;
- border-bottom-color: #c6cbd1;
- border-radius: 3px;
- }
-
- @each $type in tip, warning, info {
- blockquote.#{$type} {
- border-left: 3px solid var(--blockquote-#{$type}-color);
- padding: 0 0 0 15px;
- margin: 20px 0;
-
- .title {
- font-size: 18px;
- font-weight: 600;
- color: var(--blockquote-#{$type}-color);
- margin-bottom: 5px;
- }
-
- .message {
- font-size: 14px;
- font-weight: 400;
- color: var(--blockquote-#{$type}-color);
- }
- }
- }
-
- ul {
- list-style: disc;
- padding-left: 20px;
- margin: 10px 0;
-
- li {
- margin: 5px 0;
- }
- }
-
- .tag {
- display: inline-block;
- padding: 1px 5px;
- font-size: 12px;
- font-weight: 500;
- border-radius: 8px;
- position: relative;
- top: -10px;
- margin-left: 5px;
-
- &.unsafe {
- color: var(--tag-unsafe-color);
- border: 1px solid var(--tag-unsafe-color);
- }
-
- &.deprecated {
- color: var(--tag-deprecated-color);
- border: 1px solid var(--tag-deprecated-color);
- }
- }
- }
-}
-
-// cards
-
-.cards {
- display: grid;
- grid-template-columns: 1fr 1fr;
- justify-content: space-between;
- margin: 40px -10px;
-
- @media (max-width: 700px) {
- grid-template-columns: 1fr;
- margin: 0;
- }
-
- .card {
- margin: 0 10px 20px;
- padding: 20px;
- border-radius: 5px;
- border: 1px solid var(--divider-color);
- transition: border 0.25s;
-
- display: grid;
-
- &:hover {
- cursor: pointer;
- border: 1px solid var(--theme-color);
-
- .logo {
- svg .background {
- fill: var(--theme-color);
- }
- }
- }
-
- @media (max-width: 700px) {
- margin: 0 0 20px;
- }
-
- .logo {
- width: 50px;
- height: 50px;
- margin-bottom: 20px;
- overflow: hidden;
-
- svg {
- width: 100%;
- height: 100%;
-
- .background {
- transition: fill 0.25s;
- }
- }
- }
-
- .title {
- font-size: 20px;
- font-weight: 500;
- margin-bottom: 10px;
- }
-
- .description {
- font-size: 14px;
- font-weight: 400;
- margin-bottom: 20px;
- }
- }
-}
diff --git a/templates/assets/styles/v-docs-cm-theme.css b/templates/assets/styles/v-docs-cm-theme.css
new file mode 100644
index 000000000..1a997b460
--- /dev/null
+++ b/templates/assets/styles/v-docs-cm-theme.css
@@ -0,0 +1,185 @@
+/* Code Mirror V6 Theme */
+
+html[data-theme=dark] {
+
+ --code-text-color: #d0d0d0;
+ --code-background-color: #1e1f22;
+ --code-block-background-color: #484848;
+ --code-block-border-color: #323438;
+ --code-block-text-color: #bbb;
+
+}
+html {
+
+ --code-text-color: #000000;
+ --code-background-color: #f9f9f9;
+ --code-block-background-color: #818b981f;
+ --code-block-border-color: #ecedf1;
+ --code-block-text-color: #000;
+}
+
+.CodeMirror {
+ font-family: ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace;
+ font-size: 13.5px;
+ line-height: 1.57;
+ height: auto;
+ min-height: 1.5em;
+
+ color: var(--code-text-color);
+ background-color: var(--code-background-color);
+}
+
+@media print {
+ .CodeMirror div.CodeMirror-cursors {
+ visibility: hidden
+ }
+}
+
+.cm-tab-wrap-hack:after {
+ content: ""
+}
+.CodeMirror-linenumber {
+ font-size: .9em
+ color: #aeb3c2
+ border-right: 0 solid #e7e8ec
+}
+.CodeMirror-crosshair {
+ cursor: crosshair
+}
+.CodeMirror-selectedtext {
+ background: none
+}
+
+
+/*! Dark Theme */
+
+.CodeMirror.cm-s-dark {
+ color: #BBBBBB;
+}
+
+.cm-s-dark .cm-keyword, .cm-s-dark .cm-valid-escape { color: #CC7832; }
+.cm-s-dark .cm-builtin { color: #CC7832; }
+.cm-s-dark .cm-atom { color: #CC7832; }
+.cm-s-dark .cm-number { color: #6897BB; }
+.cm-s-dark .cm-at-identifier { color: #9876AA}
+.cm-s-dark .cm-compile-time-identifier { color: #9876AA}
+.cm-s-dark .cm-variable,
+.cm-s-dark .cm-punctuation {}
+.cm-s-dark .cm-property { color: #9876AA; }
+.cm-s-dark .cm-operator {}
+.cm-s-dark .cm-variable-2 { color: #05a; }
+.cm-s-dark .cm-variable-3, .cm-type{ font-weight: 700; }
+.cm-s-dark .cm-comment { color: #808080; }
+.cm-s-dark .cm-string { color: #6A8759; }
+.cm-s-dark .cm-string-2 { color: #6A8759; }
+.cm-s-dark .cm-meta { color: #555; }
+.cm-s-dark .cm-qualifier { color: #555; }
+.cm-s-dark .cm-bracket { color: #997; }
+.cm-s-dark .cm-tag { color: #170; }
+.cm-s-dark .cm-attribute { color: #BBB529 !important; }
+.cm-s-dark .cm-hash-directive { color: #BBB529 !important; }
+.cm-s-dark .cm-hr { color: #999; }
+.cm-s-dark .cm-link { color: #00c; }
+.cm-s-dark .cm-function,.cm-def { color: #FFC66D; }
+.cm-s-dark .cm-start-interpolation { color: #CC7832; }
+.cm-s-dark .cm-end-interpolation { color: #CC7832; }
+.cm-s-dark .cm-import-name { color: #AFBF7E; }
+
+.CodeMirror.cm-s-dark .CodeMirror-line.cgen-highlight { background: #20407f; }
+
+.CodeMirror.cm-s-dark span.CodeMirror-matchingbracket {
+ background-color: #336146;
+ color: #ced9d3;
+ padding: 1px 0;
+}
+.CodeMirror.cm-s-dark span.CodeMirror-nonmatchingbracket { color: #a22; }
+
+.cm-s-dark .CodeMirror-gutters {
+ background-color: #1e1f22;
+ border-right: 1px solid #323438;
+}
+
+.cm-s-dark .CodeMirror-linenumbers {
+ border-right: 0 solid #e7e8ec;
+}
+
+.cm-s-dark .CodeMirror-linenumber {
+ color: #4f5157;
+}
+
+.cm-s-dark .CodeMirror-cursor {
+ border-left: 1px solid #bbbbbb;
+ border-right: none;
+ width: 0;
+}
+
+.cm-s-dark .CodeMirror-selected { background: #20407f; }
+.cm-s-dark .CodeMirror-focused .CodeMirror-selected { background: #20407f; }
+.cm-s-dark .CodeMirror-crosshair { cursor: crosshair; }
+.cm-s-dark .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
+.cm-s-dark .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
+
+
+
+/*! Light Theme */
+.CodeMirror.cm-s-light {
+ background: #fff;
+ color: #222222;
+}
+
+.cm-s-light .cm-keyword, .cm-s-light .cm-valid-escape { color: #0033b3; }
+.cm-s-light .cm-builtin { color: #0033b3; }
+.cm-s-light .cm-atom { color: #219; }
+.cm-s-light .cm-number { color: #1750EB; }
+.cm-s-light .cm-at-identifier { color: #708}
+.cm-s-light .cm-def { color: #00f; }
+.cm-s-light .cm-variable,
+.cm-s-light .cm-punctuation {}
+.cm-s-light .cm-property { color: #871094; }
+.cm-s-light .cm-operator {}
+.cm-s-light .cm-variable-2 { color: #05a; }
+.cm-s-light .cm-variable-3, .cm-s-light .cm-type { font-weight: 700; }
+.cm-s-light .cm-comment { color: #8C8C8C; }
+.cm-s-light .cm-string { color: #067D17; }
+.cm-s-light .cm-string-2 { color: #067D17; }
+.cm-s-light .cm-meta { color: #555; }
+.cm-s-light .cm-qualifier { color: #555; }
+.cm-s-light .cm-bracket { color: #997; }
+.cm-s-light .cm-tag { color: #170; }
+.cm-s-light .cm-attribute { color: #9E880D !important; }
+.cm-s-light .cm-hash-directive { color: #9E880D !important; }
+.cm-s-light .cm-hr { color: #999; }
+.cm-s-light .cm-link { color: #00c; }
+.cm-s-light .cm-function {}
+.cm-s-light .cm-start-interpolation { color: #0037A6; }
+.cm-s-light .cm-end-interpolation { color: #0037A6; }
+.cm-s-light .cm-import-name { font-weight: 700; }
+
+.CodeMirror.cm-s-light .CodeMirror-line.cgen-highlight { background: #9cc5ef; }
+
+.CodeMirror.cm-s-light span.CodeMirror-matchingbracket {
+ background-color: #93d9d9;
+ color: #000;
+ padding: 1px 0;
+}
+.CodeMirror.cm-s-light span.CodeMirror-nonmatchingbracket { color: #a22; }
+
+.cm-s-light .CodeMirror-gutters {
+ background-color: #fff;
+ border-right: 1px solid #eaecef;
+}
+
+.CodeMirror-linenumbers {
+ border-right: 0 solid #e7e8ec;
+}
+
+.CodeMirror-linenumber {
+ color: #aeb3c2;
+}
+
+.cm-s-light .CodeMirror-selected { background: #9cc5ef; }
+.cm-s-light .CodeMirror-focused .CodeMirror-selected { background: #9cc5ef; }
+.cm-s-light .CodeMirror-crosshair { cursor: crosshair; }
+.cm-s-light .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
+.cm-s-light .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
+
diff --git a/templates/assets/styles/style.css b/templates/assets/styles/v-docs.css
similarity index 65%
rename from templates/assets/styles/style.css
rename to templates/assets/styles/v-docs.css
index 4172a596e..210bf4017 100644
--- a/templates/assets/styles/style.css
+++ b/templates/assets/styles/v-docs.css
@@ -1,55 +1,16 @@
-@import url("https://fonts.googleapis.com/css2?family=Fira+Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap");
-@import url("https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css");
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-ExtraBold.woff2");
- font-weight: 800;
- font-display: swap;
-}
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-Bold.woff2");
- font-weight: 700;
- font-display: swap;
-}
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-SemiBold.woff2");
- font-weight: 600;
- font-display: swap;
-}
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-Medium.woff2");
- font-weight: 500;
- font-display: swap;
-}
+/*! Theme */
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-Regular.woff2");
- font-weight: 400;
- font-display: swap;
-}
+html[data-theme=dark] {
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-Book.woff2");
- font-weight: 350;
- font-display: swap;
-}
-
-@font-face {
- font-family: "FiraSans";
- src: url("/assets/fonts/FiraSans-Light.woff2");
- font-weight: 300;
- font-display: swap;
-}
+ --code-text-color: #d0d0d0;
+ --code-background-color: #1e1f22;
+ --code-block-background-color: #484848;
+ --code-block-border-color: #323438;
+ --code-block-text-color: #bbb;
-html[data-theme="dark"] {
--background: #242424;
--aside-background: #1a1a1a;
--header-background: rgba(36, 36, 36, .7);
@@ -62,11 +23,8 @@ html[data-theme="dark"] {
--divider-color: #3a3a3a;
--theme-color: #ff6b00;
--theme-color-dark: #cc5307;
- --code-text-color: #d0d0d0;
- --code-background-color: #484848;
- --code-block-background-color: #1e1f22;
- --code-block-border-color: #323438;
- --code-block-text-color: #bbb;
+ --theme-hover-background: #343434;
+
--blockquote-tip-color: #b3b3b3;
--blockquote-warning-color: #ff6b00;
--blockquote-info-color: #00bfa5;
@@ -76,6 +34,13 @@ html[data-theme="dark"] {
}
html {
+
+ --code-text-color: #000000;
+ --code-background-color: #f9f9f9;
+ --code-block-background-color: #818b981f;
+ --code-block-border-color: #ecedf1;
+ --code-block-text-color: #000;
+
--background: #ffffff;
--aside-background: #f9f9f9;
--header-background: rgba(255, 255, 255, .7);
@@ -88,11 +53,7 @@ html {
--divider-color: #e0e0e0;
--theme-color: #ff6b00;
--theme-color-dark: #cc5307;
- --code-text-color: #000000;
- --code-background-color: #f9f9f9;
- --code-block-background-color: #fff;
- --code-block-border-color: #ecedf1;
- --code-block-text-color: #000;
+
--blockquote-tip-color: #7f7f7f;
--blockquote-warning-color: #ff6b00;
--blockquote-info-color: #00bfa5;
@@ -101,17 +62,91 @@ html {
--scrollbar-thumb-color: #d2d2d2;
}
+
+
+* {
+ box-sizing: border-box;
+}
+
+html {
+ scroll-behavior: smooth;
+ scroll-padding-top: 80px;
+}
+
+body {
+ background-color: var(--background);
+ color: var(--color);
+ margin: 0;
+ padding: 0;
+ font: 400 14px/1.5 "FiraSans", Helvetica, Arial, sans-serif;
+ -webkit-text-size-adjust: 100%;
+ font-feature-settings: "kern" 1;
+}
+
+
+
header {
- height: 72px;
- width: 100vw;
+ height: 70px;
+ width: 100%;
position: fixed;
- top: 0;
z-index: 1000;
- font: 400 14px/1.5 "FiraSans", Helvetica, Arial, sans-serif;
-webkit-backdrop-filter: saturate(50%) blur(8px);
backdrop-filter: saturate(50%) blur(8px);
background: var(--header-background);
- border-bottom: solid var(--divider-color);
+}
+header .header-container {
+ display: grid;
+ padding: 0 50px;
+ height: 100%;
+ width: 100%;
+ align-items: center;
+ justify-items: right;
+}
+header .header-container ul {
+ display: flex;
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+header .header-container ul .change-theme {
+ margin: 2px 0 0 20px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 18px;
+ height: 18px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+header .header-container ul .change-theme:hover {
+ cursor: pointer;
+}
+header .header-container ul .change-theme:hover svg path {
+ fill: var(--secondary-color);
+}
+header .header-container ul .change-theme svg {
+ width: 18px;
+ height: 18px;
+}
+header .header-container ul .change-theme svg path {
+ fill: var(--text-color);
+}
+header .header-container ul li {
+ margin: 0 10px;
+}
+header .header-container ul li a {
+ color: var(--secondary-color);
+ text-decoration: none;
+}
+header .header-container ul li a:hover {
+ cursor: pointer;
+ color: var(--color);
+}
+header .header-container ul li a.active {
+ color: var(--theme-color);
}
header .header-container {
@@ -122,56 +157,24 @@ header .header-container {
grid-template-columns: max-content auto max-content;
align-items: center;
}
-
header .header-container .header-container-left-section {
display: flex;
list-style: none;
padding: 0;
margin: 8px 0 0 0;
}
-
-header .header-container .header-container-left-section .aside-topics-open {
+header .header-container .header-container-left-section .sidebar-open-btn {
vertical-align: middle;
}
-
-header .header-container .header-container-left-section .aside-topics-open:hover {
+header .header-container .header-container-left-section .sidebar-open-btn:hover {
cursor: pointer;
}
-
-header .header-container .header-container-left-section .aside-topics-open:hover svg path {
+header .header-container .header-container-left-section .sidebar-open-btn:hover svg path {
fill: var(--color);
}
-
-header .header-container .header-container-left-section .aside-topics-open svg path {
+header .header-container .header-container-left-section .sidebar-open-btn svg path {
fill: var(--secondary-color);
}
-
-header .header-container .logo {
- display: grid;
- align-items: center;
- grid-template-columns: max-content max-content;
- grid-column-gap: 10px;
- margin-top: 2px;
-}
-
-header .header-container .logo a {
- display: grid;
- align-items: center;
-}
-
-header .header-container .logo span {
- font-size: 17px;
- font-weight: 500;
-}
-
-header .header-container .logo span {
- color: var(--text-color);
-}
-
-header .header-container .logo img {
- width: 25px;
-}
-
header .header-container .header-container-right-section {
display: flex;
list-style: none;
@@ -179,7 +182,6 @@ header .header-container .header-container-right-section {
margin: 2px 0 0 0;
justify-self: end;
}
-
header .header-container .header-container-right-section .change-theme {
margin: 0 0 0 20px;
display: flex;
@@ -193,250 +195,287 @@ header .header-container .header-container-right-section .change-theme {
-ms-user-select: none;
user-select: none;
}
-
header .header-container .header-container-right-section .change-theme:hover {
cursor: pointer;
}
-
header .header-container .header-container-right-section .change-theme:hover svg path {
fill: var(--secondary-color);
}
-
header .header-container .header-container-right-section .change-theme svg {
width: 18px;
height: 18px;
}
-
header .header-container .header-container-right-section .change-theme svg.sun {
margin-top: 2px;
}
-
header .header-container .header-container-right-section .change-theme svg path {
fill: var(--text-color);
}
-
header .header-container .header-container-right-section li {
margin: 0 10px;
}
-
header .header-container .header-container-right-section li a {
color: var(--secondary-color);
text-decoration: none;
}
-
header .header-container .header-container-right-section li a:hover {
cursor: pointer;
color: var(--color);
}
-
header .header-container .header-container-right-section li a.active {
color: var(--theme-color);
}
-aside {
- width: 300px;
- height: 100vh;
- position: fixed;
+header .header-container .logo {
+ display: grid;
+ align-items: center;
+ grid-template-columns: max-content max-content;
+ grid-column-gap: 10px;
+ margin-top: 2px;
+}
+header .header-container .logo a {
+ display: grid;
+ align-items: center;
+}
+header .header-container .logo span {
+ font-size: 17px;
+ font-weight: 500;
+}
+header .header-container .logo span {
color: var(--text-color);
- background-color: var(--aside-background);
- padding: 20px 20px 20px 40px;
- z-index: 1000;
+}
+header .header-container .logo img {
+ width: 25px;
}
-@media (max-width: 1000px) {
- aside {
- display: none;
- }
+.kb-shortcut {
+ border-radius: 4px;
+ border: 1px solid var(--divider-color);
+ background: var(--aside-background);
+ padding: 1px 5px;
+ opacity: 0.5;
+ font-family: inherit;
+ font-size: 0.75rem;
}
+.nav-list {
+ height: 100%;
+
+ display: flex;
+ flex-flow: column;
+
+ overflow: hidden;
+}
+
+
+
+.nav-list .nav-contents {
+ overflow: scroll;
+ -webkit-overflow-scrolling: touch;
+}
+.nav-list .nav-group {
+ padding-bottom: 6px;
+}
+
+.nav-entry {
+ line-height: 1.5em;
+ display: flex;
+ flex-direction: column;
+ color: var(--secondary-color) !important;
+ padding: 6px 2px;
+}
+.nav-entry > a {
+ text-decoration: none;
+ color: inherit !important;
+}
+
+
+
+
+.nav-entry.is-group-header{
+ font-size: 1.1em;
+ color: var(--secondary-color) !important;
+}
+.nav-entry.is-selected,
+.nav-entry.is-group-header.is-selected {
+ color: var(--theme-color) !important;
+}
+
+.nav-entry:hover {
+ cursor: pointer;
+ color: var(--color) !important;
+}
+
+.nav-entry.is-search-result {
+ color: var(--theme-color) !important;
+}
+
+.nav-entry > .nav-entry-text {
+ font-size: 0.9em;
+ font-style: italic;
+ padding-left: 6px;
+ color: var(--secondary-color) !important;
+}
+
+.nav-group > .nav-group-body > .nav-entry {
+ padding-left: 16px !important;
+}
+
+/* Website specific */
+
+.sidebar-tool {
+ padding: 6px 20px 6px 20px;
-aside #searchbox {
- position: relative;
}
-aside #searchbox input {
+#search-widget {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ max-height: 60px;
+
+ border-top: 1px solid var(--divider-color);
+ border-bottom: 1px solid var(--divider-color);
+}
+#search-input {
display: block;
width: 100%;
padding: 10px 14px 10px 36px;
+ margin: 10px 0 10px 0;
background-color: var(--background);
border: 1px solid var(--divider-color);
border-radius: 8px;
color: var(--secondary-color);
font-size: 0.875rem;
transition: border-color 0.2s, box-shadow 0.2s;
-}
-aside #searchbox input:hover {
+
+}
+#search-input:hover {
border-color: var(--theme-color);
}
-
-aside #searchbox input:focus {
+#search-input:focus {
outline: none;
border-color: var(--theme-color);
box-shadow: 0 0 0 3px var(--divider-color);
}
-
-aside #searchbox button {
+#search-button {
background: none;
border: none;
padding: 0;
height: 16px;
color: var(--secondary-color);
- position: absolute;
- left: 14px;
- top: 50%;
+
transform: translateY(-50%);
cursor: pointer;
-}
-aside #searchbox #searchKeys {
position: absolute;
- top: 8px;
- right: 8px;
- border-radius: 4px;
- border: 1px solid var(--divider-color);
- background: var(--aside-background);
- padding: 1px 5px;
- opacity: 0.5;
- font-family: inherit;
- font-size: 0.75rem;
+ left: 25px;
+ top: 50%;
}
-aside #searchResults {
- display: none;
+#search-kb-shortcut {
position: absolute;
- overflow: scroll;
- height: 600px;
- width: 250px;
- background: var(--search-results-background);
- border-radius: 10px;
-}
-
-aside .title {
- display: grid;
- grid-template-columns: auto max-content;
- grid-column-gap: 10px;
- align-items: center;
- text-decoration: none;
- padding: 12px 0px;
-}
-
-aside .title a {
- display: grid;
- grid-template-columns: max-content auto;
- grid-column-gap: 10px;
- align-items: center;
- text-decoration: none;
+ top: 50%;
+ right: 25px;
+ transform: translateY(-50%);
}
+#search-results {
+ display: flex;
+ flex-direction: column;
-aside .title a img {
- width: 25px;
+ overflow: clip;
+ height: 600px;
+ padding: 6px 20px 6px 20px;
}
-aside .title a span {
- font-size: 17px;
- font-weight: 500;
- color: var(--color);
+#search-results-header {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ padding: 6px 0;
}
-
-aside .title .aside-topics-close:hover {
+#search-results-close {
cursor: pointer;
}
-
-aside .title .aside-topics-close:hover svg path {
+#search-results-close:hover svg path {
fill: var(--color);
}
-
-aside .title .aside-topics-close svg path {
+#search-results-close svg path {
fill: var(--secondary-color);
}
-aside nav {
- height: 100%;
- padding-bottom: 40px;
-}
-aside .group {
- border-top: 1px solid var(--divider-color);
- padding: 15px 0;
- height: 100%;
-}
-aside .group section {
- height: 100%;
- overflow-y: scroll;
+#topics {
+ padding: 6px 20px 40px 20px;
}
-
-aside .group .title {
- font-size: 15px;
- font-weight: 600;
- margin-bottom: 10px;
+#topics .nav-list .nav-contents {
+ max-height: calc(100% - 40px);
}
-aside .group .items {
- margin: 10px 0;
-}
-aside .group .items .link {
- display: block;
- margin: 10px 0 0;
- color: var(--secondary-color);
- text-decoration: none;
-}
-aside .group .items .link:hover {
- cursor: pointer;
- color: var(--color);
-}
+#sidebar-main {
+
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ width: 300px;
+
+ padding-bottom: 10px;
+
+ color: var(--text-color);
+ background-color: var(--aside-background);
-aside .group .items .link.active {
- color: var(--theme-color);
-}
-aside .group .items .link.subtopic {
- margin: 6px 0 0;
+ z-index: 1000;
+ display: flex;
+ flex-flow: column;
}
-
-@supports (font-variation-settings: normal) {
- code {
- font-family: "Fira Code VF", monospace;
+@media (max-width: 1000px) {
+ #sidebar-main {
+ display: none;
}
}
-* {
- box-sizing: border-box;
+#sidebar-main.search-results-open #topics {
+ display: none;
}
-
-html {
- scroll-behavior: smooth;
- scroll-padding-top: 80px;
+#sidebar-main:not(.search-results-open) #search-results {
+ display: none;
}
-body {
- background-color: var(--background);
+#sidebar-main .sidebar-header {
+ display: grid;
+ grid-template-columns: auto max-content;
+ grid-column-gap: 10px;
+ align-items: center;
+ text-decoration: none;
+ padding: 12px 20px 6px 20px;
+}
+#sidebar-main .sidebar-header a {
+ display: grid;
+ grid-template-columns: max-content auto;
+ grid-column-gap: 10px;
+ align-items: center;
+ text-decoration: none;
+}
+#sidebar-main .sidebar-header a img {
+ width: 25px;
+}
+#sidebar-main .sidebar-header a span {
+ font-size: 17px;
+ font-weight: 500;
color: var(--color);
- margin: 0;
- padding: 0;
- font: 400 14px/1.5 "FiraSans", Helvetica, Arial, sans-serif;
- -webkit-text-size-adjust: 100%;
- font-feature-settings: "kern" 1;
}
-
-a {
- text-decoration-style: dotted;
- color: var(--link-color);
+#sidebar-main .sidebar-header .sidebar-close-btn:hover {
+ cursor: pointer;
}
-
-a:visited {
- color: var(--link-visited-color);
+#sidebar-main .sidebar-header .sidebar-close-btn:hover svg path {
+ fill: var(--color);
}
-
-a.external-link {
- padding-right: 12px;
- color: var(--theme-color);
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23ff6b00'%3E%3Cpath d='M14 2H5.75l3.595 3.595L2.22 12.72l1.06 1.06 7.125-7.125L14 10.25V2z'/%3E%3C/svg%3E");
- background-repeat: no-repeat;
- background-size: 11px 11px;
- background-position: 100% calc(100% - 1px);
+#sidebar-main .sidebar-header .sidebar-close-btn svg path {
+ fill: var(--secondary-color);
}
article {
@@ -446,49 +485,52 @@ article {
padding: 0 0 0 300px;
background-color: var(--background);
}
-
@media (max-width: 1000px) {
article {
- padding: 0;
+ padding: 0;
}
}
+article a {
+ font-weight: 500;
+ color: var(--theme-color);
+ text-decoration-style: dotted;
+ transition: color 0.25s;
+}
+article a:visited {
+ color: var(--theme-color-dark);
+}
+
article .container {
display: grid;
grid-template-columns: calc(100% - 250px) 250px;
padding: 0px 50px 20px 20px;
}
-
@media (max-width: 1200px) {
article .container {
- grid-template-columns: 100%;
- padding-left: 0px;
- padding-right: 0px;
+ grid-template-columns: 100%;
+ padding-left: 0px;
+ padding-right: 0px;
}
article .container .aside {
- display: none;
+ display: none;
}
}
-
article .container .content {
padding: 72px 30px 0;
}
-
@media (max-width: 1000px) {
article .container .content {
- padding: 72px 0 0;
+ padding: 72px 0 0;
}
}
-
article .container .content .content-container {
- margin: 0 40px;
max-width: 800px;
}
-
article .container .content footer {
margin-top: 65px;
+ padding: 0 40px;
}
-
article .container .content footer .edit-info {
display: grid;
grid-template-columns: auto auto;
@@ -496,26 +538,21 @@ article .container .content footer .edit-info {
align-items: center;
padding-bottom: 15px;
}
-
@media (max-width: 700px) {
article .container .content footer .edit-info {
- grid-template-columns: 1fr;
- grid-template-rows: auto auto;
+ grid-template-columns: 1fr;
+ grid-template-rows: auto auto;
}
}
-
article .container .content footer .edit-info .edit-link:hover {
cursor: pointer;
}
-
article .container .content footer .edit-info .edit-link:hover a {
color: var(--theme-color-dark);
}
-
article .container .content footer .edit-info .edit-link:hover svg {
fill: var(--theme-color-dark);
}
-
article .container .content footer .edit-info .edit-link a {
display: flex;
align-items: center;
@@ -527,7 +564,6 @@ article .container .content footer .edit-info .edit-link a {
text-decoration: none;
transition: color 0.25s;
}
-
article .container .content footer .edit-info .edit-link svg {
margin-top: -2px;
margin-right: 8px;
@@ -536,14 +572,12 @@ article .container .content footer .edit-info .edit-link svg {
fill: var(--theme-color);
transition: fill 0.25s;
}
-
article .container .content footer .edit-info .last-updated {
line-height: 32px;
font-size: 13px;
font-weight: 400;
color: var(--secondary-color);
}
-
article .container .content footer .prev-next {
padding-top: 25px;
border-top: 1px solid var(--divider-color);
@@ -551,15 +585,12 @@ article .container .content footer .prev-next {
grid-template-columns: 1fr 1fr;
grid-column-gap: 20px;
}
-
article .container .content footer .prev-next.only-prev .page {
grid-column: 1;
}
-
article .container .content footer .prev-next.only-next .page {
grid-column: 2;
}
-
article .container .content footer .prev-next .page-link {
display: block;
border: 1px solid var(--divider-color);
@@ -570,16 +601,13 @@ article .container .content footer .prev-next .page-link {
transition: border-color 0.25s;
text-decoration: none;
}
-
article .container .content footer .prev-next .page-link:hover {
cursor: pointer;
border-color: var(--theme-color);
}
-
article .container .content footer .prev-next .page-link:hover .title {
color: var(--theme-color-dark);
}
-
article .container .content footer .prev-next .page-link .desc {
display: block;
line-height: 20px;
@@ -587,7 +615,6 @@ article .container .content footer .prev-next .page-link .desc {
font-weight: 500;
color: var(--secondary-color);
}
-
article .container .content footer .prev-next .page-link .title {
display: block;
line-height: 20px;
@@ -596,111 +623,102 @@ article .container .content footer .prev-next .page-link .title {
color: var(--theme-color);
transition: color 0.25s;
}
-
article .container .aside {
padding: 0 0 0 30px;
}
-
article .container .aside .aside-content {
height: 100%;
}
-
article .container .aside .aside-container {
top: 50px;
position: -webkit-sticky;
position: sticky;
padding-top: 50px;
}
-
article .container .aside .title {
font-size: 14px;
font-weight: 600;
margin-bottom: 10px;
}
-
article .container .aside ul {
font-size: 13px;
list-style: none;
padding: 0;
margin: 0;
}
-
article .container .aside ul li {
margin: 3px 0;
}
-
article .container .aside ul li.active a {
color: var(--color);
}
-
article .container .aside ul li a {
color: var(--secondary-color);
text-decoration: none;
}
-
article .container .aside ul li a:hover {
cursor: pointer;
color: var(--color);
}
-
article .footer {
width: 100%;
margin-top: 50px;
background-color: var(--aside-background);
color: var(--secondary-color);
}
-
article .footer .footer-content {
padding: 0 50px;
}
-
@media (max-width: 1000px) {
article .footer .footer-content {
- padding: 0 20px;
+ padding: 0 20px;
}
}
-
article .footer .footer-content .footer-container {
display: flex;
align-items: center;
padding: 20px 0;
}
-
@media (max-width: 1000px) {
article .footer .footer-content .footer-container {
- flex-direction: column;
- padding: 30px 0;
+ flex-direction: column;
+ padding: 30px 0;
}
}
+article .vdocs-code-header {
+ display: flex;
+}
+
+/*! V-DOC */
+.v-doc {
-article main {
font: 300 16px/1.5 "FiraSans", Helvetica, Arial, sans-serif;
color: var(--text-color);
+ padding: 0 40px;
}
-
-article main h1 {
+.v-doc h1 {
font-size: 35px;
}
-
@media (max-width: 1200px) {
- article main h1 {
- margin-bottom: 0px;
+ .v-doc h1 {
+ margin-bottom: 0px;
}
}
-article main section {
+
+
+
+.v-doc section {
padding: 10px 0;
margin: 25px 0;
border-top: 1px solid var(--divider-color);
border-bottom: 1px solid var(--divider-color);
}
-
-article main p {
+.v-doc p {
overflow-wrap: break-word;
line-height: 1.7;
}
-
-article main .header-anchor {
+.v-doc .header-anchor {
float: left;
margin-left: -0.87em;
padding-right: 0.23em;
@@ -709,54 +727,46 @@ article main .header-anchor {
opacity: 1;
transition: color 0.25s, opacity 0.25s;
}
-
-article main .header-anchor:hover {
+.v-doc .header-anchor:hover {
cursor: pointer;
color: var(--theme-color-dark);
}
-
-article main a {
+.v-doc a {
font-weight: 500;
color: var(--theme-color);
text-decoration-style: dotted;
transition: color 0.25s;
}
-
-article main .language-v {
- max-width: 800px;
- margin-bottom: 30px;
-}
-
-article main .language-v .playground__footer {
- background-color: var(--background);
+.v-doc a:visited {
+ color: var(--theme-color-dark);
}
-
-article main .language-v .playground__wrapper {
- overflow: hidden;
+.v-doc a.external-link {
+ padding-right: 12px;
+ color: var(--theme-color);
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23ff6b00'%3E%3Cpath d='M14 2H5.75l3.595 3.595L2.22 12.72l1.06 1.06 7.125-7.125L14 10.25V2z'/%3E%3C/svg%3E");
+ background-repeat: no-repeat;
+ background-size: 11px 11px;
+ background-position: 100% calc(100% - 1px);
}
-article main code {
+.v-doc code {
font-family: "Fira Code", monospace;
font-size: 0.875em;
}
-
-article main code.symbol-ref {
+.v-doc code.symbol-ref {
color: var(--theme-color);
}
-
-article main a > code {
+.v-doc a > code {
color: var(--theme-color) !important;
}
-
-article main :not(pre) > code {
+.v-doc :not(pre) > code {
white-space: nowrap;
border-radius: 4px;
padding: 3px 6px;
color: var(--code-text-color);
- background-color: var(--code-background-color);
+ background-color: var(--code-block-background-color);
}
-
-article main pre {
+.v-doc pre {
white-space: pre;
border-radius: 0;
padding: 10px 20px;
@@ -764,28 +774,24 @@ article main pre {
background-color: var(--code-block-background-color);
border: 1px solid var(--code-block-border-color);
}
-
-article main table {
+.v-doc table {
width: 100%;
border-collapse: collapse;
border-spacing: 0;
margin: 20px 0;
overflow: auto;
}
-
-article main table th {
+.v-doc table th {
font-weight: 500;
text-align: left;
padding: 10px 15px;
border-bottom: 1px solid var(--divider-color);
}
-
-article main table td {
+.v-doc table td {
padding: 10px 15px;
border-bottom: 1px solid var(--divider-color);
}
-
-article main kbd {
+.v-doc kbd {
display: inline-block;
padding: 3px 5px;
font: 11px "Fira Code", Consolas, "Liberation Mono", Menlo, Courier, monospace;
@@ -797,75 +803,63 @@ article main kbd {
border-bottom-color: #c6cbd1;
border-radius: 3px;
}
-
-article main blockquote.tip {
+.v-doc blockquote.tip {
border-left: 3px solid var(--blockquote-tip-color);
padding: 0 0 0 15px;
margin: 20px 0;
}
-
-article main blockquote.tip .title {
+.v-doc blockquote.tip .title {
font-size: 18px;
font-weight: 600;
color: var(--blockquote-tip-color);
margin-bottom: 5px;
}
-
-article main blockquote.tip .message {
+.v-doc blockquote.tip .message {
font-size: 14px;
font-weight: 400;
color: var(--blockquote-tip-color);
}
-
-article main blockquote.warning {
+.v-doc blockquote.warning {
border-left: 3px solid var(--blockquote-warning-color);
padding: 0 0 0 15px;
margin: 20px 0;
}
-
-article main blockquote.warning .title {
+.v-doc blockquote.warning .title {
font-size: 18px;
font-weight: 600;
color: var(--blockquote-warning-color);
margin-bottom: 5px;
}
-
-article main blockquote.warning .message {
+.v-doc blockquote.warning .message {
font-size: 14px;
font-weight: 400;
color: var(--blockquote-warning-color);
}
-
-article main blockquote.info {
+.v-doc blockquote.info {
border-left: 3px solid var(--blockquote-info-color);
padding: 0 0 0 15px;
margin: 20px 0;
}
-
-article main blockquote.info .title {
+.v-doc blockquote.info .title {
font-size: 18px;
font-weight: 600;
color: var(--blockquote-info-color);
margin-bottom: 5px;
}
-
-article main blockquote.info .message {
+.v-doc blockquote.info .message {
font-size: 14px;
font-weight: 400;
color: var(--blockquote-info-color);
}
-
-article main ul {
+.v-doc ul {
list-style: disc;
padding-left: 20px;
margin: 10px 0;
}
-
-article main ul li {
+.v-doc ul li {
margin: 5px 0;
}
-
-article main .tag {
+.v-doc .tag {
display: inline-block;
padding: 1px 5px;
font-size: 12px;
@@ -875,81 +869,188 @@ article main .tag {
top: -10px;
margin-left: 5px;
}
-
-article main .tag.unsafe {
+.v-doc .tag.unsafe {
color: var(--tag-unsafe-color);
border: 1px solid var(--tag-unsafe-color);
}
-article main .tag.deprecated {
+
+.v-doc .tag.deprecated {
color: var(--tag-deprecated-color);
border: 1px solid var(--tag-deprecated-color);
}
-.cards {
- display: grid;
- grid-template-columns: 1fr 1fr;
- justify-content: space-between;
- margin: 40px -10px;
-}
+/*! V-CODE_EXAMPLE */
-@media (max-width: 700px) {
- .cards {
- grid-template-columns: 1fr;
- margin: 0;
- }
-}
+.v-code-example {
+ --font-size: 12px;
-.cards .card {
- margin: 0 10px 20px;
- padding: 20px;
- border-radius: 5px;
+ overflow: hidden;
+ max-width: 800px;
+ margin-bottom: 30px;
border: 1px solid var(--divider-color);
- transition: border 0.25s;
- display: grid;
+ border-radius: 6px 6px;
+
+ background-color: var(--code-background-color);
+ color: var(--code-text-color);
+}
+.v-code-example-header {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ padding: 6px 6px;
+ justify-content: flex-start;
}
-.cards .card:hover {
+
+.v-code-btn {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ padding: 6px 6px;
+ border: 1px solid transparent;
+ border-radius: 3px 3px;
+
+
+ min-height: 24px;
+ min-width: 24px;
cursor: pointer;
- border: 1px solid var(--theme-color);
+}
+.v-code-btn:hover {
+ border-color: var(--divider-color);
}
-.cards .card:hover .logo svg .background {
- fill: var(--theme-color);
+.v-code-btn-copy {
+ margin-left: auto;
+}
+.v-code-btn-run {
+ padding: 3px 6px;
+ background-color: rgba(169,169,169,0.1);
+}
+.v-code-btn-run:hover {
+ background-color: rgba(169,169,169,0.3);
+ color: var(--theme-color);
+}
+.v-code-btn-run svg {
+ margin-right: 6px;
}
-@media (max-width: 700px) {
- .cards .card {
- margin: 0 0 20px;
- }
+.v-code-example:not(.active-tab-results) .v-code-example-header .v-code-btn-show {
+ display: none;
+}
+
+
+
+.v-code-example.language-v {
+
}
-.cards .card .logo {
- width: 50px;
- height: 50px;
- margin-bottom: 20px;
+
+
+
+article1 main .language-v {
+ max-width: 800px;
+ margin-bottom: 30px;
+ border: 1px solid var(--divider-color);
+ border-radius: 6px 6px;
+}
+article1 main .language-v .playground__footer {
+ background-color: var(--background);
+}
+article1 main .language-v .playground__wrapper {
overflow: hidden;
}
-.cards .card .logo svg {
- width: 100%;
- height: 100%;
+
+
+@font-face {
+ font-family: "FiraSans";
+ src: url("../fonts/FiraSans-ExtraBold.woff2");
+ font-weight: 800;
+ font-display: swap;
}
-.cards .card .logo svg .background {
- transition: fill 0.25s;
+@font-face {
+ font-family: "FiraSans";
+ src: url("../fonts/FiraSans-Bold.woff2");
+ font-weight: 700;
+ font-display: swap;
}
-.cards .card .title {
- font-size: 20px;
+@font-face {
+ font-family: "FiraSans";
+ src: url("../fonts/FiraSans-SemiBold.woff2");
+ font-weight: 600;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: "FiraSans";
+ src: url("../fonts/FiraSans-Medium.woff2");
font-weight: 500;
- margin-bottom: 10px;
+ font-display: swap;
}
-.cards .card .description {
- font-size: 14px;
+@font-face {
+ font-family: "FiraSans";
+ src: url("../fonts/FiraSans-Regular.woff2");
+ font-weight: 400;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: "FiraSans";
+ src: url("../fonts/FiraSans-Book.woff2");
+ font-weight: 350;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: "FiraSans";
+ src: url("../fonts/FiraSans-Light.woff2");
+ font-weight: 300;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Fira Code';
+ src: url('../fonts/FiraCode-Light.woff2') format('woff2');
+ font-weight: 300;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Fira Code';
+ src: url('../fonts/FiraCode-Regular.woff2') format('woff2');
font-weight: 400;
- margin-bottom: 20px;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Fira Code';
+ src: url('../fonts/FiraCode-Medium.woff2') format('woff2');
+ font-weight: 500;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Fira Code';
+ src: url('../fonts/FiraCode-SemiBold.woff2') format('woff2');
+ font-weight: 600;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Fira Code';
+ src: url('../fonts/FiraCode-Bold.woff2') format('woff2');
+ font-weight: 700;
+ font-style: normal;
}
-/*# sourceMappingURL=style.css.map */
\ No newline at end of file
+@font-face {
+ font-family: 'Fira Code VF';
+ src: url('../fonts/FiraCode-VF.woff2') format('woff2-variations');
+ /* font-weight requires a range: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide#Using_a_variable_font_font-face_changes */
+ font-weight: 300 700;
+ font-style: normal;
+}
diff --git a/templates/assets/styles/variables.css b/templates/assets/styles/variables.css
deleted file mode 100644
index 20062e579..000000000
--- a/templates/assets/styles/variables.css
+++ /dev/null
@@ -1,45 +0,0 @@
-html[data-theme=dark] {
- --background: #242424;
- --aside-background: #1a1a1a;
- --color: #f3f3f3;
- --text-color: rgba(255, 255, 255, .87);
- --secondary-color: #b3b3b3;
- --divider-color: #3a3a3a;
- --theme-color: #ff6b00;
- --theme-color-dark: #cc5307;
- --code-text-color: #d0d0d0;
- --code-background-color: #484848;
- --code-block-background-color: #1e1f22;
- --code-block-border-color: #323438;
- --code-block-text-color: #bbb;
- --blockquote-tip-color: #b3b3b3;
- --blockquote-warning-color: #ff6b00;
- --blockquote-info-color: #00bfa5;
- --tag-unsafe-color: #ff6b00;
- --tag-deprecated-color: #9d9d9d;
- --scrollbar-thumb-color: #404042;
-}
-
-html {
- --background: #ffffff;
- --aside-background: #f9f9f9;
- --color: #000000;
- --text-color: rgba(0, 0, 0, .87);
- --secondary-color: #7f7f7f;
- --divider-color: #e0e0e0;
- --theme-color: #ff6b00;
- --theme-color-dark: #cc5307;
- --code-text-color: #000000;
- --code-background-color: #f9f9f9;
- --code-block-background-color: #fff;
- --code-block-border-color: #ecedf1;
- --code-block-text-color: #000;
- --blockquote-tip-color: #7f7f7f;
- --blockquote-warning-color: #ff6b00;
- --blockquote-info-color: #00bfa5;
- --tag-unsafe-color: #ff6b00;
- --tag-deprecated-color: #808080;
- --scrollbar-thumb-color: #d2d2d2;
-}
-
-/*# sourceMappingURL=variables.css.map */
diff --git a/templates/assets/styles/variables.css.map b/templates/assets/styles/variables.css.map
deleted file mode 100644
index 025095016..000000000
--- a/templates/assets/styles/variables.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sourceRoot":"","sources":["variables.scss"],"names":[],"mappings":"AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EAEA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EAEA","file":"variables.css"}
\ No newline at end of file
diff --git a/templates/assets/styles/variables.scss b/templates/assets/styles/variables.scss
deleted file mode 100644
index 3c4369dce..000000000
--- a/templates/assets/styles/variables.scss
+++ /dev/null
@@ -1,59 +0,0 @@
-html[data-theme="dark"] {
- --background: #242424;
- --aside-background: #1a1a1a;
- --header-background: rgba(36, 36, 36, .7);
- --search-results-background: #343434;
- --color: #f3f3f3;
- --text-color: rgba(255, 255, 255, .87);
- --link-color: #dddd44;
- --link-visited-color: #aa2222;
- --secondary-color: #b3b3b3;
- --divider-color: #3a3a3a;
- --theme-color: #ff6b00;
- --theme-color-dark: #cc5307;
- --code-text-color: #d0d0d0;
- --code-background-color: #484848;
-
- --code-block-background-color: #1e1f22;
- --code-block-border-color: #323438;
- --code-block-text-color: #bbb;
-
- --blockquote-tip-color: #b3b3b3;
- --blockquote-warning-color: #ff6b00;
- --blockquote-info-color: #00bfa5;
-
- --tag-unsafe-color: #ff6b00;
- --tag-deprecated-color: #9d9d9d;
-
- --scrollbar-thumb-color: #404042;
-}
-
-html {
- --background: #ffffff;
- --aside-background: #f9f9f9;
- --header-background: rgba(255, 255, 255, .7);
- --search-results-background: #ebebeb;
- --color: #000000;
- --text-color: rgba(0, 0, 0, .87);
- --link-color: #4444dd;
- --link-visited-color: #2222aa;
- --secondary-color: #7f7f7f;
- --divider-color: #e0e0e0;
- --theme-color: #ff6b00;
- --theme-color-dark: #cc5307;
- --code-text-color: #000000;
- --code-background-color: #f9f9f9;
-
- --code-block-background-color: #fff;
- --code-block-border-color: #ecedf1;
- --code-block-text-color: #000;
-
- --blockquote-tip-color: #7f7f7f;
- --blockquote-warning-color: #ff6b00;
- --blockquote-info-color: #00bfa5;
-
- --tag-unsafe-color: #ff6b00;
- --tag-deprecated-color: #808080;
-
- --scrollbar-thumb-color: #d2d2d2;
-}
diff --git a/templates/assets/styles/vlang-playground.css b/templates/assets/styles/vlang-playground.css
deleted file mode 100644
index db8dac9c7..000000000
--- a/templates/assets/styles/vlang-playground.css
+++ /dev/null
@@ -1 +0,0 @@
-@import"https://fonts.googleapis.com/css2?family=Fira+Mono:wght@400;500&display=swap";@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap";@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap";.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;inset:-50px 0 0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error,.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow-x:scroll;overflow-y:hidden;height:100%;outline:none;position:relative;z-index:0}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;inset:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors,.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.cm-s-light .cm-keyword,.cm-s-light .cm-builtin{color:#0033b3}.cm-s-light .cm-atom{color:#219}.cm-s-light .cm-number{color:#1750eb}.cm-s-light .cm-at-identifier{color:#708}.cm-s-light .cm-def{color:#00f}.cm-s-light .cm-property{color:#871094}.cm-s-light .cm-variable-2{color:#05a}.cm-s-light .cm-variable-3,.cm-s-light .cm-type{font-weight:700}.cm-s-light .cm-comment{color:#8c8c8c}.cm-s-light .cm-string,.cm-s-light .cm-string-2{color:#067d17}.cm-s-light .cm-meta,.cm-s-light .cm-qualifier{color:#555}.cm-s-light .cm-bracket{color:#997}.cm-s-light .cm-tag{color:#170}.cm-s-light .cm-attribute{color:#9e880d!important}.cm-s-light .cm-hr{color:#999}.cm-s-light .cm-link{color:#00c}.cm-s-light .cm-start-interpolation,.cm-s-light .cm-end-interpolation{color:#0037a6}.cm-s-light .cm-import-name{font-weight:700}.CodeMirror.cm-s-light span.CodeMirror-matchingbracket{background-color:#93d9d9;color:#000;padding:1px 0}.CodeMirror.cm-s-light span.CodeMirror-nonmatchingbracket{color:#a22}.cm-s-light .CodeMirror-gutters{background-color:#fff;border-right:1px solid #eaecef}.CodeMirror-linenumbers{border-right:0 solid #e7e8ec}.CodeMirror-linenumber{color:#aeb3c2}.cm-s-light .CodeMirror-selected,.cm-s-light .CodeMirror-focused .CodeMirror-selected{background:#9cc5ef}.cm-s-light .CodeMirror-crosshair{cursor:crosshair}.cm-s-light .CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.cm-s-light .CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-s-light .CodeMirror-linebackground.unmodifiable-line{background-color:#eaeaec}.CodeMirror.cm-s-dark{color:#bbb}.cm-s-dark .cm-keyword,.cm-s-dark .cm-builtin,.cm-s-dark .cm-atom{color:#cc7832}.cm-s-dark .cm-number{color:#6897bb}.cm-s-dark .cm-at-identifier,.cm-s-dark .cm-compile-time-identifier{color:#9876aa}.cm-s-dark .cm-def{color:#00f}.cm-s-dark .cm-property{color:#9876aa}.cm-s-dark .cm-variable-2{color:#05a}.cm-s-dark .cm-variable-3,.cm-s-dark .cm-type{font-weight:700}.cm-s-dark .cm-comment{color:gray}.cm-s-dark .cm-string,.cm-s-dark .cm-string-2{color:#6a8759}.cm-s-dark .cm-meta,.cm-s-dark .cm-qualifier{color:#555}.cm-s-dark .cm-bracket{color:#997}.cm-s-dark .cm-tag{color:#170}.cm-s-dark .cm-attribute{color:#bbb529!important}.cm-s-dark .cm-hr{color:#999}.cm-s-dark .cm-link{color:#00c}.cm-s-dark .cm-function{color:#ffc66d}.cm-s-dark .cm-start-interpolation,.cm-s-dark .cm-end-interpolation{color:#cc7832}.cm-s-dark .cm-import-name{color:#afbf7e}.CodeMirror.cm-s-dark span.CodeMirror-matchingbracket{background-color:#336146;color:#ced9d3;padding:1px 0}.CodeMirror.cm-s-dark span.CodeMirror-nonmatchingbracket{color:#a22}.cm-s-dark .CodeMirror-gutters{background-color:#1e1f22;border-right:1px solid #323438}.cm-s-dark .CodeMirror-linenumbers{border-right:0 solid #e7e8ec}.cm-s-dark .CodeMirror-linenumber{color:#4f5157}.cm-s-dark .CodeMirror-cursor{border-left:1px solid #bbbbbb;border-right:none;width:0}.cm-s-dark .CodeMirror-selected,.cm-s-dark .CodeMirror-focused .CodeMirror-selected{background:#20407f}.cm-s-dark .CodeMirror-crosshair{cursor:crosshair}.cm-s-dark .CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.cm-s-dark .CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-s-dark .CodeMirror-linebackground.unmodifiable-line{background-color:#343434}.v-playground[data-theme=light]{--background-color: #fff;--text-color: #000;--header-background-color: #f7f8fa;--header-border: #ecedf1;--header-button-hover: #ecedf1;--configuration-item-hover: #cfdefd;--scrollbar-thumb-color: #d2d2d2;--terminal-header-border: #ecedf1;--terminal-header: #f7f8fa;--terminal-header-text: #000;--terminal-close-button: #777b88;--terminal-close-button-hover: #ecedf1;--terminal-text: #000;--terminal-background: #fff;--terminal-ok: #36b639;--terminal-error: #c02929;--playground-link: #7e7d7d;--run-embeded-icon-color: #000000;--completion-variant-background: #cfdefd;--completion-variant-color: #000;--completion-module-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iOS4wMTM3OSIgeT0iOC44ODA4OSIgd2lkdGg9IjYuMTI4MTciIGhlaWdodD0iNi4xMjgxNyIgcng9IjEiIGZpbGw9IiM2MDg4RjAiIGZpbGwtb3BhY2l0eT0iMC4yIiBzdHJva2U9IiM2MDg4RjAiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjEyMTg0IDEuNDE0NDlDMS4yOTg0MSAxLjQxNDQ5IDAuNjI4OTI0IDIuMDc4MjggMC42MjE4OTEgMi45MDE2OEwwLjU0NzAyIDExLjY2NjdDMC41Mzk5MDIgMTIuNTAwMSAxLjIxMzUzIDEzLjE3OTUgMi4wNDY5NyAxMy4xNzk1SDcuODE3ODFWMTIuMTc5NUgyLjA0Njk3QzEuNzY5MTUgMTIuMTc5NSAxLjU0NDYxIDExLjk1MzEgMS41NDY5OCAxMS42NzUzTDEuNjIxODUgMi45MTAyMkMxLjYyNDIgMi42MzU3NSAxLjg0NzM2IDIuNDE0NDkgMi4xMjE4NCAyLjQxNDQ5SDUuNzc2NjdDNS45MDkyOCAyLjQxNDQ5IDYuMDM2NDYgMi40NjcxNyA2LjEzMDIzIDIuNTYwOTRMNy4zODQ2MiAzLjgxNTMzQzcuNjY1OTIgNC4wOTY2MyA4LjA0NzQ2IDQuMjU0NjcgOC40NDUyOCA0LjI1NDY3SDEzLjE5NTdDMTMuNDcxOCA0LjI1NDY3IDEzLjY5NTcgNC40Nzg1MyAxMy42OTU3IDQuNzU0NjdWNy42NTQ2SDE0LjY5NTdWNC43NTQ2N0MxNC42OTU3IDMuOTI2MjQgMTQuMDI0MSAzLjI1NDY3IDEzLjE5NTcgMy4yNTQ2N0g4LjQ0NTI4QzguMzEyNjcgMy4yNTQ2NyA4LjE4NTQ5IDMuMjAxOTkgOC4wOTE3MyAzLjEwODIyTDYuODM3MzQgMS44NTM4M0M2LjU1NjAzIDEuNTcyNTIgNi4xNzQ1IDEuNDE0NDkgNS43NzY2NyAxLjQxNDQ5SDIuMTIxODRaIiBmaWxsPSIjNkQ3MDdEIi8+Cjwvc3ZnPgo=);--completion-type-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iNy43MzIzNiIgY3k9IjcuOTc2MjMiIHI9IjYuNDc4NTgiIGZpbGw9IiM0NTcyRTgiIGZpbGwtb3BhY2l0eT0iMC4yIi8+CjxjaXJjbGUgY3g9IjcuNzMyMzYiIGN5PSI3Ljk3NjIzIiByPSI1Ljk3ODU4IiBzdHJva2U9IiM0NTcyRTgiLz4KPHBhdGggZD0iTTUuMDQ3MzYgNC44NjYzSDEwLjMzNzhWNS43Nzk0NEg4LjE4Mjk3VjExLjYzMDNINy4yMDcwMlY1Ljc3OTQ0SDUuMDQ3MzZWNC44NjYzWiIgZmlsbD0iIzQ1NzJFOCIvPgo8L3N2Zz4K)}.v-playground[data-theme=dark]{--background-color: #1e1f22;--text-color: #e0e0e0;--header-background-color: #2a2a2d;--header-border: #2a2a2d;--header-button-hover: #393b41;--configuration-item-hover: #2f446e;--scrollbar-thumb-color: #404042;--terminal-header-border: #323438;--terminal-header: #2a2a2d;--terminal-header-text: #f7f8fa;--terminal-close-button: #d9dbe2;--terminal-close-button-hover: #393b41;--terminal-text: #BBBBBB;--terminal-background: #000;--terminal-ok: #6ea967;--terminal-error: #e04949;--playground-link: #b9b9b9;--run-embeded-icon-color: #fff;--completion-variant-background: #2e436e;--completion-variant-color: #b4b8c0;--completion-module-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iOS4wMTM3OSIgeT0iOC44ODA4OSIgd2lkdGg9IjYuMTI4MTciIGhlaWdodD0iNi4xMjgxNyIgcng9IjEiIGZpbGw9IiM2MDg4RjAiIGZpbGwtb3BhY2l0eT0iMC4yIiBzdHJva2U9IiM2MDg4RjAiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjEyMTg3IDEuNDE0NDlDMS4yOTg0NCAxLjQxNDQ5IDAuNjI4OTU3IDIuMDc4MjggMC42MjE5MjMgMi45MDE2OEwwLjU0NzA1MyAxMS42NjY3QzAuNTM5OTM0IDEyLjUwMDEgMS4yMTM1NiAxMy4xNzk1IDIuMDQ3IDEzLjE3OTVINy44MTc4NFYxMi4xNzk1SDIuMDQ3QzEuNzY5MTkgMTIuMTc5NSAxLjU0NDY0IDExLjk1MzEgMS41NDcwMiAxMS42NzUzTDEuNjIxODkgMi45MTAyMkMxLjYyNDIzIDIuNjM1NzUgMS44NDczOSAyLjQxNDQ5IDIuMTIxODcgMi40MTQ0OUg1Ljc3NjcxQzUuOTA5MzIgMi40MTQ0OSA2LjAzNjQ5IDIuNDY3MTcgNi4xMzAyNiAyLjU2MDk0TDcuMzg0NjUgMy44MTUzM0M3LjY2NTk2IDQuMDk2NjMgOC4wNDc0OSA0LjI1NDY3IDguNDQ1MzEgNC4yNTQ2N0gxMy4xOTU3QzEzLjQ3MTggNC4yNTQ2NyAxMy42OTU3IDQuNDc4NTMgMTMuNjk1NyA0Ljc1NDY3VjcuNjU0NkgxNC42OTU3VjQuNzU0NjdDMTQuNjk1NyAzLjkyNjI0IDE0LjAyNDEgMy4yNTQ2NyAxMy4xOTU3IDMuMjU0NjdIOC40NDUzMUM4LjMxMjcxIDMuMjU0NjcgOC4xODU1MyAzLjIwMTk5IDguMDkxNzYgMy4xMDgyMkw2LjgzNzM3IDEuODUzODNDNi41NTYwNiAxLjU3MjUyIDYuMTc0NTMgMS40MTQ0OSA1Ljc3NjcxIDEuNDE0NDlIMi4xMjE4N1oiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=);--completion-type-icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iNy43MzIzNiIgY3k9IjcuOTc2MjMiIHI9IjYuNDc4NTgiIGZpbGw9IiMwMDIwNkYiIGZpbGwtb3BhY2l0eT0iMC4yIi8+CjxjaXJjbGUgY3g9IjcuNzMyMzYiIGN5PSI3Ljk3NjIzIiByPSI1Ljk3ODU4IiBzdHJva2U9IiM1RTg2RTkiLz4KPHBhdGggZD0iTTUuMDQ3MzYgNC44NjYzSDEwLjMzNzhWNS43Nzk0NEg4LjE4Mjk3VjExLjYzMDNINy4yMDcwMlY1Ljc3OTQ0SDUuMDQ3MzZWNC44NjYzWiIgZmlsbD0iIzYwODlFRiIvPgo8L3N2Zz4K)}.v-playground{--font-size: 12px }.v-playground *{box-sizing:border-box}.v-playground{font-family:Inter,sans-serif;position:relative;background-color:var(--background-color);height:100%;display:grid;grid-template-rows:1fr 27px}.v-playground.no-footer{display:block}.v-playground.closed-terminal .playground__terminal{display:none}.v-playground .playground__wrapper{border:1px solid var(--terminal-header-border)}.v-playground .playground__editor{position:relative;padding:10px 0}.v-playground.closed-terminal .playground__editor{grid-template-rows:100%}.show-all-button{position:absolute;z-index:100;left:50%;top:-9px;width:17px;height:17px;border-radius:50%;border:1px solid #d4d4d4;background-color:var(--background-color);line-height:.8;text-align:center}.show-all-button svg{width:13px;margin-top:-1px}.show-all-button svg line{stroke:#d4d4d4}.show-all-button:hover{cursor:pointer;border:1px solid #366ca1}.show-all-button:hover svg line{stroke:#366ca1}.run-style-button{width:16px;height:16px;position:absolute;top:10px;right:20px;background-color:transparent;border:none;cursor:pointer;z-index:100}.run-style-button .icon .run-icon{fill:var(--run-embeded-icon-color)}.CodeMirror{width:100%;height:100%;font-family:JetBrains Mono,Fira Mono,JetBrains Mono,ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace;font-size:var(--font-size);line-height:1.57}.CodeMirror{background-color:var(--background-color)}.CodeMirror-line{padding-left:15px!important}.CodeMirror-gutters{padding-left:5px}.CodeMirror-linenumber{font-size:.9em}.playground__terminal{position:relative;min-height:100px;display:grid;grid-template-rows:max-content auto;background-color:var(--terminal-background)}.playground__terminal.closed{display:none}.playground__terminal .header{display:grid;grid-template-columns:auto max-content;height:22px;color:var(--terminal-header-text);border-top:1px solid var(--terminal-header-border);border-bottom:1px solid var(--terminal-header-border);background-color:var(--terminal-header)}.playground__terminal .terminal__close-button{position:absolute;top:2px;right:5px;padding:2px 3px 0;border-radius:5px;border:none;background-color:transparent;cursor:pointer}.playground__terminal .terminal__close-button svg{height:12px}.playground__terminal .terminal__close-button .close-terminal-button-rect{fill:var(--terminal-close-button)}.playground__terminal .terminal__close-button:hover{background-color:var(--terminal-close-button-hover)}.playground__terminal .terminal__output{width:100%;height:100%;margin:0;overflow:scroll;padding:5px 5px 5px 10px;font-family:JetBrains Mono,Fira Mono,JetBrains Mono,ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace;font-size:var(--font-size);line-height:1.57;background-color:var(--terminal-background);color:var(--terminal-text)}.playground__terminal .terminal__output .test-passed-line{display:grid;grid-template-columns:max-content auto;grid-template-rows:auto;grid-column-gap:5px;color:var(--terminal-ok);margin-top:-15px}.playground__terminal .terminal__output .test-passed-line svg *{stroke:var(--terminal-ok)}.playground__terminal .terminal__output .test-failed-line{display:grid;grid-template-columns:max-content auto;grid-template-rows:auto;grid-column-gap:5px;color:var(--terminal-error);margin-top:-15px;margin-bottom:-30px}.playground__terminal .terminal__output .test-failed-line svg *{stroke:var(--terminal-error)}.playground__footer{padding:2px 10px 5px}.playground-link{height:30px;color:var(--playground-link);font-size:11px;margin:0;text-decoration:none}.playground-link:hover{cursor:pointer;text-decoration:underline}.v-playground::-webkit-scrollbar{width:8px;height:8px}.v-playground::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-color);border-radius:5px}.v-playground::-webkit-scrollbar-track{border-radius:5px}.v-playground::-webkit-scrollbar-corner{background-color:var(--background-color)}.v-playground::-webkit-scrollbar-track-piece{background-color:var(--background-color)}.v-playground .terminal__output::-webkit-scrollbar{width:8px;height:8px}.v-playground .terminal__output::-webkit-scrollbar-track{background-color:var(--terminal-background)}.v-playground .terminal__output::-webkit-scrollbar-corner{background-color:var(--terminal-background)!important}.v-playground .terminal__output::-webkit-scrollbar-track-piece{background-color:var(--terminal-background)!important}
diff --git a/templates/index.html b/templates/index.html
index 7b6a952c1..770990855 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -5,15 +5,13 @@
-
-
+
+
+
+
+
V Documentation
-
@@ -21,7 +19,7 @@