From 9a9bfd50cccf9694e0fa634a94716928d8976ca1 Mon Sep 17 00:00:00 2001 From: Rias Date: Tue, 26 May 2026 12:20:33 +0200 Subject: [PATCH 01/14] Markdown field --- package-lock.json | 47 ++ .../markdownfield/src/MarkdownField.js | 318 ++++++++++++ .../markdownfield/src/MarkdownField.scss | 154 ++++++ .../markdownfield/webpack.config.js | 13 + packages/craftcms-legacy/package.json | 1 + .../markdownfield/dist/MarkdownField.js | 2 + .../markdownfield/dist/MarkdownField.js.map | 1 + .../markdownfield/dist/css/MarkdownField.css | 2 + .../dist/css/MarkdownField.css.map | 1 + .../fieldtypes/Markdown/input.twig | 19 + .../fieldtypes/Markdown/settings.twig | 74 +++ routes/actions.php | 1 + src/Field/Data/MarkdownData.php | 56 ++ src/Field/Fields.php | 1 + src/Field/Markdown.php | 490 ++++++++++++++++++ src/Http/Controllers/App/RenderController.php | 15 + src/Markdown/Markdown.php | 25 +- src/Support/Facades/Markdown.php | 1 + src/View/LegacyAssets/MarkdownFieldAsset.php | 27 + tests/Feature/Field/MarkdownFieldTest.php | 206 ++++++++ .../Controllers/App/RenderControllerTest.php | 35 ++ tests/Unit/Field/Data/MarkdownDataTest.php | 30 ++ tests/Unit/Markdown/MarkdownTest.php | 11 + 23 files changed, 1525 insertions(+), 5 deletions(-) create mode 100644 packages/craftcms-legacy/markdownfield/src/MarkdownField.js create mode 100644 packages/craftcms-legacy/markdownfield/src/MarkdownField.scss create mode 100644 packages/craftcms-legacy/markdownfield/webpack.config.js create mode 100644 resources/legacy/markdownfield/dist/MarkdownField.js create mode 100644 resources/legacy/markdownfield/dist/MarkdownField.js.map create mode 100644 resources/legacy/markdownfield/dist/css/MarkdownField.css create mode 100644 resources/legacy/markdownfield/dist/css/MarkdownField.css.map create mode 100644 resources/templates/_components/fieldtypes/Markdown/input.twig create mode 100644 resources/templates/_components/fieldtypes/Markdown/settings.twig create mode 100644 src/Field/Data/MarkdownData.php create mode 100644 src/Field/Markdown.php create mode 100644 src/View/LegacyAssets/MarkdownFieldAsset.php create mode 100644 tests/Feature/Field/MarkdownFieldTest.php create mode 100644 tests/Unit/Field/Data/MarkdownDataTest.php diff --git a/package-lock.json b/package-lock.json index 738fbd16bf7..89356d2f7e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5804,6 +5804,12 @@ "@types/node": "*" } }, + "node_modules/@types/marked": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.3.2.tgz", + "integrity": "sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w==", + "license": "MIT" + }, "node_modules/@types/mdx": { "version": "2.0.13", "dev": true, @@ -8711,6 +8717,15 @@ "@types/tern": "*" } }, + "node_modules/codemirror-spell-checker": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz", + "integrity": "sha512-2Tl6n0v+GJRsC9K3MLCdLaMOmvWL0uukajNJseorZJsslaxZyZMgENocPU8R0DyoTAiKsyqiemSOZo7kjGV0LQ==", + "license": "MIT", + "dependencies": { + "typo-js": "*" + } + }, "node_modules/color-convert": { "version": "1.9.3", "license": "MIT", @@ -10165,6 +10180,31 @@ "version": "0.2.0", "license": "MIT" }, + "node_modules/easymde": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/easymde/-/easymde-2.21.0.tgz", + "integrity": "sha512-5uE7I/DEN8gvGRwxaqAv7h1PMEK2ykNXVX5zL0dK3nCYROGja3AMbdQz8eCEELnfvCfy7tRkTmLuvyJG8uSWjQ==", + "license": "MIT", + "dependencies": { + "@types/codemirror": "^5.60.10", + "@types/marked": "^4.0.7", + "codemirror": "^5.65.15", + "codemirror-spell-checker": "1.1.2", + "marked": "^4.1.0" + } + }, + "node_modules/easymde/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/ee-first": { "version": "1.1.1", "license": "MIT" @@ -20561,6 +20601,12 @@ "node": ">=8" } }, + "node_modules/typo-js": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/typo-js/-/typo-js-1.3.2.tgz", + "integrity": "sha512-Z1YkJ7IIYNrFeOxAlHUercY4Q2I+PhYD/3VkWpJGy/Oqudy3bFpNcQxnv6Oa9fTSXCHPGz1eDoX1bZYm2Z891A==", + "license": "BSD-3-Clause" + }, "node_modules/uc.micro": { "version": "2.1.0", "license": "MIT" @@ -23854,6 +23900,7 @@ "blueimp-file-upload": "^10.32.0", "codemirror": "^5.65.21", "d3": "^7.9.0", + "easymde": "^2.21.0", "fabric": "^1.7.22", "htmx.org": "^1.9.12", "iframe-resizer": "^4.4.5", diff --git a/packages/craftcms-legacy/markdownfield/src/MarkdownField.js b/packages/craftcms-legacy/markdownfield/src/MarkdownField.js new file mode 100644 index 00000000000..d6d1a4bdea8 --- /dev/null +++ b/packages/craftcms-legacy/markdownfield/src/MarkdownField.js @@ -0,0 +1,318 @@ +import EasyMDE from 'easymde'; +import 'easymde/dist/easymde.min.css'; +import './MarkdownField.scss'; + +(function ($) { + Craft.MarkdownField = Garnish.Base.extend( + { + settings: null, + editor: null, + previewRequestId: 0, + previewTimeout: null, + + init: function (fieldId, settings) { + this.setSettings(settings, Craft.MarkdownField.defaults); + + this.$textarea = $('#' + fieldId); + + if (!this.$textarea.length) { + return; + } + + const rows = parseInt(this.$textarea.attr('rows') || 8, 10); + const toolbarItems = this.toolbarItems(); + + this.editor = new EasyMDE({ + autoDownloadFontAwesome: false, + autoRefresh: { + delay: 300, + }, + autosave: { + enabled: false, + }, + element: this.$textarea[0], + forceSync: true, + indentWithTabs: false, + minHeight: `${Math.max(rows, 4) * 1.5}em`, + previewImagesInEditor: false, + previewRender: (plainText, preview) => { + this.renderPreview(plainText, preview); + + return null; + }, + promptURLs: true, + sideBySideFullscreen: false, + spellChecker: false, + status: false, + syncSideBySidePreviewScroll: true, + toolbar: + this.settings.toolbar && toolbarItems.length ? toolbarItems : false, + uploadImage: false, + }); + }, + + toolbarItems: function () { + const selectedButtons = new Set(this.settings.toolbarButtons ?? []); + const toolbarItems = []; + + for (const group of this.toolbarButtonGroups()) { + const groupItems = group.filter((item) => + selectedButtons.has(item.name) + ); + + if (!groupItems.length) { + continue; + } + + if (toolbarItems.length) { + toolbarItems.push('|'); + } + + toolbarItems.push(...groupItems); + } + + return toolbarItems; + }, + + toolbarButtonGroups: function () { + return [ + [ + this.toolbarButton( + 'bold', + EasyMDE.toggleBold, + 'bold', + Craft.t('app', 'Bold') + ), + this.toolbarButton( + 'italic', + EasyMDE.toggleItalic, + 'italic', + Craft.t('app', 'Italic') + ), + this.toolbarButton( + 'strikethrough', + EasyMDE.toggleStrikethrough, + 'strikethrough', + Craft.t('app', 'Strikethrough') + ), + this.toolbarButton( + 'heading', + EasyMDE.toggleHeadingSmaller, + 'heading', + Craft.t('app', 'Heading') + ), + this.toolbarButton( + 'heading-smaller', + EasyMDE.toggleHeadingSmaller, + 'heading', + Craft.t('app', 'Smaller Heading') + ), + this.toolbarButton( + 'heading-bigger', + EasyMDE.toggleHeadingBigger, + 'heading', + Craft.t('app', 'Bigger Heading') + ), + this.toolbarButton( + 'heading-1', + EasyMDE.toggleHeading1, + 'heading', + Craft.t('app', 'Big Heading') + ), + this.toolbarButton( + 'heading-2', + EasyMDE.toggleHeading2, + 'heading', + Craft.t('app', 'Medium Heading') + ), + this.toolbarButton( + 'heading-3', + EasyMDE.toggleHeading3, + 'heading', + Craft.t('app', 'Small Heading') + ), + ], + [ + this.toolbarButton( + 'quote', + EasyMDE.toggleBlockquote, + 'quotes-left', + Craft.t('app', 'Quote') + ), + this.toolbarButton( + 'code', + EasyMDE.toggleCodeBlock, + 'code', + Craft.t('app', 'Code') + ), + this.toolbarButton( + 'unordered-list', + EasyMDE.toggleUnorderedList, + 'list-ul', + Craft.t('app', 'Bulleted List') + ), + this.toolbarButton( + 'ordered-list', + EasyMDE.toggleOrderedList, + 'list-ol', + Craft.t('app', 'Numbered List') + ), + this.toolbarButton( + 'check-list', + EasyMDE.toggleCheckList, + 'list-check', + Craft.t('app', 'Check List') + ), + this.toolbarButton( + 'clean-block', + EasyMDE.cleanBlock, + 'eraser', + Craft.t('app', 'Clean Block') + ), + ], + [ + this.toolbarButton( + 'link', + EasyMDE.drawLink, + 'link', + Craft.t('app', 'Link') + ), + this.toolbarButton( + 'image', + EasyMDE.drawImage, + 'image', + Craft.t('app', 'Image') + ), + this.toolbarButton( + 'table', + EasyMDE.drawTable, + 'table', + Craft.t('app', 'Table') + ), + this.toolbarButton( + 'horizontal-rule', + EasyMDE.drawHorizontalRule, + 'minus', + Craft.t('app', 'Horizontal Rule') + ), + ], + [ + this.toolbarButton( + 'preview', + EasyMDE.togglePreview, + 'eye', + Craft.t('app', 'Preview') + ), + this.toolbarButton( + 'side-by-side', + EasyMDE.toggleSideBySide, + 'split', + Craft.t('app', 'Side-by-side Preview') + ), + this.toolbarButton( + 'fullscreen', + EasyMDE.toggleFullScreen, + 'expand', + Craft.t('app', 'Full Screen') + ), + this.toolbarButton( + 'guide', + 'https://www.markdownguide.org/basic-syntax/', + 'circle-question', + Craft.t('app', 'Markdown Guide') + ), + ], + [ + this.toolbarButton( + 'undo', + EasyMDE.undo, + 'rotate-left', + Craft.t('app', 'Undo') + ), + this.toolbarButton( + 'redo', + EasyMDE.redo, + 'rotate-right', + Craft.t('app', 'Redo') + ), + ], + ]; + }, + + toolbarButton: function (name, action, icon, title) { + return { + name, + action, + className: `markdown-field-toolbar-button markdown-field-toolbar-${name}`, + icon: this.settings.toolbarIcons?.[icon] ?? undefined, + title, + noDisable: [ + 'preview', + 'side-by-side', + 'fullscreen', + 'guide', + 'undo', + 'redo', + ].includes(name), + noMobile: ['side-by-side', 'fullscreen'].includes(name), + }; + }, + + renderPreview: function (plainText, preview) { + const requestId = ++this.previewRequestId; + + clearTimeout(this.previewTimeout); + + this.previewTimeout = setTimeout(async () => { + try { + const {data} = await Craft.sendActionRequest( + 'POST', + this.settings.previewAction, + { + data: { + markdown: plainText, + flavor: this.settings.flavor, + }, + } + ); + + if (requestId === this.previewRequestId) { + preview.innerHTML = data.html; + } + } catch (error) { + if (requestId === this.previewRequestId) { + preview.textContent = Craft.t( + 'app', + 'Couldn’t render Markdown preview.' + ); + } + } + }, this.settings.previewDelay); + }, + }, + { + defaults: { + flavor: 'gfm', + previewAction: 'app/render-markdown', + previewDelay: 250, + toolbar: true, + toolbarButtons: [ + 'bold', + 'italic', + 'heading', + 'quote', + 'code', + 'unordered-list', + 'ordered-list', + 'link', + 'image', + 'table', + 'preview', + 'side-by-side', + 'fullscreen', + ], + toolbarIcons: {}, + }, + } + ); +})(jQuery); diff --git a/packages/craftcms-legacy/markdownfield/src/MarkdownField.scss b/packages/craftcms-legacy/markdownfield/src/MarkdownField.scss new file mode 100644 index 00000000000..d854bfc87d3 --- /dev/null +++ b/packages/craftcms-legacy/markdownfield/src/MarkdownField.scss @@ -0,0 +1,154 @@ +.markdown-field { + .EasyMDEContainer { + .editor-toolbar { + border-color: var(--border-hairline); + border-start-start-radius: var(--large-border-radius); + border-start-end-radius: var(--large-border-radius); + + button { + color: var(--ui-control-color); + + &:hover, + &.active { + background: var(--gray-100); + border-color: var(--border-hairline); + } + + svg { + display: block; + width: 14px; + height: 14px; + margin: 0 auto; + fill: currentColor; + } + } + } + + .CodeMirror { + border-color: var(--border-hairline); + border-end-start-radius: var(--large-border-radius); + border-end-end-radius: var(--large-border-radius); + color: var(--text-color); + font-family: var(--font-monospace); + } + + .editor-preview, + .editor-preview-side { + background: var(--white); + color: var(--text-color); + } + } + + .markdown-field-toolbar-bold:empty::before { + content: 'B'; + font-weight: 700; + } + + .markdown-field-toolbar-italic:empty::before { + content: 'I'; + font-style: italic; + } + + .markdown-field-toolbar-strikethrough:empty::before { + content: 'S'; + text-decoration: line-through; + } + + .markdown-field-toolbar-heading:empty::before { + content: 'H'; + } + + .markdown-field-toolbar-heading-smaller:empty::before { + content: 'H-'; + } + + .markdown-field-toolbar-heading-bigger:empty::before { + content: 'H+'; + } + + .markdown-field-toolbar-heading-1:empty::before { + content: 'H1'; + } + + .markdown-field-toolbar-heading-2:empty::before { + content: 'H2'; + } + + .markdown-field-toolbar-heading-3:empty::before { + content: 'H3'; + } + + .markdown-field-toolbar-quote:empty::before { + content: '>'; + } + + .markdown-field-toolbar-code:empty::before { + content: '{}'; + } + + .markdown-field-toolbar-unordered-list:empty::before { + content: '-'; + } + + .markdown-field-toolbar-ordered-list:empty::before { + content: '1.'; + } + + .markdown-field-toolbar-check-list:empty::before { + content: '[x]'; + } + + .markdown-field-toolbar-clean-block:empty::before { + content: 'C'; + } + + .markdown-field-toolbar-link:empty::before { + content: '[]'; + } + + .markdown-field-toolbar-image:empty::before { + content: 'img'; + } + + .markdown-field-toolbar-table:empty::before { + content: '| |'; + } + + .markdown-field-toolbar-horizontal-rule:empty::before { + content: '--'; + } + + .markdown-field-toolbar-preview:empty::before { + content: 'P'; + } + + .markdown-field-toolbar-side-by-side:empty::before { + content: 'S'; + } + + .markdown-field-toolbar-fullscreen:empty::before { + content: '[]'; + } + + .markdown-field-toolbar-guide:empty::before { + content: '?'; + } + + .markdown-field-toolbar-undo:empty::before { + content: '<'; + } + + .markdown-field-toolbar-redo:empty::before { + content: '>'; + } +} + +.markdown-field-preview { + > :first-child { + margin-block-start: 0; + } + + > :last-child { + margin-block-end: 0; + } +} diff --git a/packages/craftcms-legacy/markdownfield/webpack.config.js b/packages/craftcms-legacy/markdownfield/webpack.config.js new file mode 100644 index 00000000000..10ac0d1cc18 --- /dev/null +++ b/packages/craftcms-legacy/markdownfield/webpack.config.js @@ -0,0 +1,13 @@ +/* jshint esversion: 6 */ +/* globals module, require */ +const {getConfig} = require('@craftcms/webpack'); + +module.exports = getConfig({ + context: __dirname, + config: { + entry: {MarkdownField: './MarkdownField.js'}, + output: { + path: __dirname + '/../../../resources/legacy/markdownfield/dist', + }, + }, +}); diff --git a/packages/craftcms-legacy/package.json b/packages/craftcms-legacy/package.json index 956a27f31dc..8a8901ae9a8 100644 --- a/packages/craftcms-legacy/package.json +++ b/packages/craftcms-legacy/package.json @@ -49,6 +49,7 @@ "blueimp-file-upload": "^10.32.0", "codemirror": "^5.65.21", "d3": "^7.9.0", + "easymde": "^2.21.0", "fabric": "^1.7.22", "htmx.org": "^1.9.12", "iframe-resizer": "^4.4.5", diff --git a/resources/legacy/markdownfield/dist/MarkdownField.js b/resources/legacy/markdownfield/dist/MarkdownField.js new file mode 100644 index 00000000000..46a85ca6216 --- /dev/null +++ b/resources/legacy/markdownfield/dist/MarkdownField.js @@ -0,0 +1,2 @@ +!function(){var e={42:function(e,t,n){!function(e){"use strict";function t(e){e.state.markedSelection&&e.operation(function(){!function(e){if(!e.somethingSelected())return l(e);if(e.listSelections().length>1)return s(e);var t=e.getCursor("start"),n=e.getCursor("end"),r=e.state.markedSelection;if(!r.length)return a(e,t,n);var u=r[0].find(),c=r[r.length-1].find();if(!u||!c||n.line-t.line<=i||o(t,c.to)>=0||o(n,u.from)<=0)return s(e);for(;o(t,u.from)>0;)r.shift().clear(),u=r[0].find();for(o(t,u.from)<0&&(u.to.line-t.line0&&(n.line-c.from.line=n.line,f=h?n:r(d,0),p=e.markText(c,f,{className:s});if(null==a?l.push(p):l.splice(a++,0,p),h)break;u=d}}function l(e){for(var t=e.state.markedSelection,n=0;n)+?/g),s={toggleBold:x,toggleItalic:y,drawLink:I,toggleHeadingSmaller:w,toggleHeadingBigger:k,drawImage:z,toggleBlockquote:C,toggleOrderedList:B,toggleUnorderedList:M,toggleCheckList:N,toggleCodeBlock:D,togglePreview:$,toggleStrikethrough:b,toggleHeading1:S,toggleHeading2:F,toggleHeading3:A,toggleHeading4:E,toggleHeading5:L,toggleHeading6:T,cleanBlock:O,drawTable:_,drawHorizontalRule:W,undo:j,redo:q,toggleSideBySide:U,toggleFullScreen:v},u={toggleBold:"Cmd-B",toggleItalic:"Cmd-I",drawLink:"Cmd-K",toggleHeadingSmaller:"Cmd-H",toggleHeadingBigger:"Shift-Cmd-H",toggleHeading1:"Ctrl+Alt+1",toggleHeading2:"Ctrl+Alt+2",toggleHeading3:"Ctrl+Alt+3",toggleHeading4:"Ctrl+Alt+4",toggleHeading5:"Ctrl+Alt+5",toggleHeading6:"Ctrl+Alt+6",cleanBlock:"Cmd-E",drawImage:"Cmd-Alt-I",toggleBlockquote:"Cmd-'",toggleOrderedList:"Cmd-Alt-L",toggleUnorderedList:"Cmd-L",toggleCheckList:"Shift-Cmd-L",toggleCodeBlock:"Cmd-Alt-C",togglePreview:"Cmd-P",toggleSideBySide:"F9",toggleFullScreen:"F11"},c=function(){var e,t=!1;return e=navigator.userAgent||navigator.vendor||window.opera,(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.substr(0,4)))&&(t=!0),t};function d(e){return a?e.replace("Ctrl","Cmd"):e.replace("Cmd","Ctrl")}function h(e,t,n,i){var r=f(e,!1,t,n,"button",i);r.classList.add("easymde-dropdown"),r.onclick=function(){r.focus()};var o=document.createElement("div");o.className="easymde-dropdown-content";for(var a=0;a0){for(var g=document.createElement("i"),v=0;v=0&&!n(h=s.getLineHandle(o));o--);var g,v,x,y,b=i(s.getTokenAt({line:o,ch:1})).fencedChars;n(s.getLineHandle(u.line))?(g="",v=u.line):n(s.getLineHandle(u.line-1))?(g="",v=u.line-1):(g=b+"\n",v=u.line),n(s.getLineHandle(c.line))?(x="",y=c.line,0===c.ch&&(y+=1)):0!==c.ch&&n(s.getLineHandle(c.line+1))?(x="",y=c.line+1):(x=b+"\n",y=c.line+1),0===c.ch&&(y-=1),s.operation(function(){s.replaceRange(x,{line:y,ch:0},{line:y+(x?0:1),ch:0}),s.replaceRange(g,{line:v,ch:0},{line:v+(g?0:1),ch:0})}),s.setSelection({line:v+(g?1:0),ch:0},{line:y+(g?1:-1),ch:0}),s.focus()}else{var D=u.line;if(n(s.getLineHandle(u.line))&&("fenced"===r(s,u.line+1)?(o=u.line,D=u.line+1):(a=u.line,D=u.line-1)),void 0===o)for(o=D;o>=0&&!n(h=s.getLineHandle(o));o--);if(void 0===a)for(l=s.lineCount(),a=D;a=0;o--)if(!(h=s.getLineHandle(o)).text.match(/^\s*$/)&&"indented"!==r(s,o,h)){o+=1;break}for(l=s.lineCount(),a=u.line;a ]+|[0-9]+(.|\)))[ ]*/,""),e.replaceRange(t,{line:r,ch:0},{line:r,ch:99999999999999})}(e.codemirror)}function I(e){var t=e.options,n="https://";if(t.promptURLs){var i=prompt(t.promptTexts.link,n);if(!i)return!1;n=H(i)}K(e,"link",t.insertTexts.link,n)}function z(e){var t=e.options,n="https://";if(t.promptURLs){var i=prompt(t.promptTexts.image,n);if(!i)return!1;n=H(i)}K(e,"image",t.insertTexts.image,n)}function H(e){return encodeURI(e).replace(/([\\()])/g,"\\$1")}function R(e){e.openBrowseFileWindow()}function P(e,t){var n=e.codemirror,i=m(n),r=e.options,o=t.substr(t.lastIndexOf("/")+1),a=o.substring(o.lastIndexOf(".")+1).replace(/\?.*$/,"").toLowerCase();if(["png","jpg","jpeg","gif","svg","apng","avif","webp"].includes(a))G(n,i.image,r.insertTexts.uploadedImage,t);else{var l=r.insertTexts.link;l[0]="["+o,G(n,i.link,l,t)}e.updateStatusBar("upload-image",e.options.imageTexts.sbOnUploaded.replace("#image_name#",o)),setTimeout(function(){e.updateStatusBar("upload-image",e.options.imageTexts.sbInit)},1e3)}function _(e){var t=e.codemirror,n=m(t),i=e.options;G(t,n.table,i.insertTexts.table)}function W(e){var t=e.codemirror,n=m(t),i=e.options;G(t,n.image,i.insertTexts.horizontalRule)}function j(e){var t=e.codemirror;t.undo(),t.focus()}function q(e){var t=e.codemirror;t.redo(),t.focus()}function U(e){var t=e.codemirror,n=t.getWrapperElement(),i=n.nextSibling,r=e.toolbarElements&&e.toolbarElements["side-by-side"],o=!1,a=n.parentNode;i.classList.contains("editor-preview-active-side")?(!1===e.options.sideBySideFullscreen&&a.classList.remove("sided--no-fullscreen"),i.classList.remove("editor-preview-active-side"),r&&r.classList.remove("active"),n.classList.remove("CodeMirror-sided")):(setTimeout(function(){t.getOption("fullScreen")||(!1===e.options.sideBySideFullscreen?a.classList.add("sided--no-fullscreen"):v(e)),i.classList.add("editor-preview-active-side")},1),r&&r.classList.add("active"),n.classList.add("CodeMirror-sided"),o=!0);var l=n.lastChild;if(l.classList.contains("editor-preview-active")){l.classList.remove("editor-preview-active");var s=e.toolbarElements.preview,u=e.toolbar_div;s.classList.remove("active"),u.classList.remove("disabled-for-preview")}if(t.sideBySideRenderingFunction||(t.sideBySideRenderingFunction=function(){var t=e.options.previewRender(e.value(),i);null!=t&&(i.innerHTML=t)}),o){var c=e.options.previewRender(e.value(),i);null!=c&&(i.innerHTML=c),t.on("update",t.sideBySideRenderingFunction)}else t.off("update",t.sideBySideRenderingFunction);t.refresh()}function $(e){var t=e.codemirror,n=t.getWrapperElement(),i=e.toolbar_div,r=!!e.options.toolbar&&e.toolbarElements.preview,o=n.lastChild;if(t.getWrapperElement().nextSibling.classList.contains("editor-preview-active-side")&&U(e),!o||!o.classList.contains("editor-preview-full")){if((o=document.createElement("div")).className="editor-preview-full",e.options.previewClass)if(Array.isArray(e.options.previewClass))for(var a=0;a\s+/,"unordered-list":i,"ordered-list":i,"check-list":/^(\s*)(- \[[ xX]])(\s+)/},u=function(e,t,o){var a=i.exec(t),l=function(e,t){return{quote:">","unordered-list":n,"ordered-list":"%%i.","check-list":"- [ ]"}[e].replace("%%i",t)}(e,c);return null!==a?(function(e,t){var i=new RegExp({quote:">","unordered-list":"\\"+n,"ordered-list":"\\d+.","check-list":"- \\[[ xX]]"}[e]);return t&&i.test(t)}(e,a[2])&&(l=""),t=a[1]+l+a[3]+t.replace(r,"").replace(s[e],"$1")):0==o&&(t=l+" "+t),t},c=1,d=["unordered-list","ordered-list","check-list"],h=Object.keys(o)[0];if(!d.includes(h)){var f=e.getLine(a.line);/^\s*- \[[ xX]]\s/.test(f)?h="check-list":/^\s*\d+\.\s/.test(f)?h="ordered-list":/^\s*[*\-+]\s/.test(f)&&(h="unordered-list")}for(var p=a.line;p<=l.line;p++)(function(n){var i=e.getLine(n);o[t]?i=i.replace(s[t],"$1"):d.includes(h)&&d.includes(t)?(i=i.replace(s[h],"$1"),i=u(t,i,!1),c+=1):(i=u(t,i,!1),c+=1),e.replaceRange(i,{line:n,ch:0},{line:n,ch:99999999999999})})(p);e.focus()}}function K(e,t,n,i){if(e.codemirror&&!e.isPreviewActive()){var r=e.codemirror,o=m(r)[t];if(o){var a=r.getCursor("start"),l=r.getCursor("end"),s=r.getLine(a.line),u=s.slice(0,a.ch),c=s.slice(a.ch);"link"==t?u=u.replace(/(.*)[^!]\[/,"$1"):"image"==t&&(u=u.replace(/(.*)!\[$/,"$1")),c=c.replace(/]\(.*?\)/,""),r.replaceRange(u+c,{line:a.line,ch:0},{line:a.line,ch:99999999999999}),a.ch-=n[0].length,a!==l&&(l.ch-=n[0].length),r.setSelection(a,l),r.focus()}else G(r,o,n,i)}}function Y(e,t,n,i){if(e.codemirror&&!e.isPreviewActive()){i=void 0===i?n:i;var r,o=e.codemirror,a=m(o),l=n,s=i,u=o.getCursor("start"),c=o.getCursor("end");a[t]?(l=(r=o.getLine(u.line)).slice(0,u.ch),s=r.slice(u.ch),"bold"==t?(l=l.replace(/(\*\*|__)(?![\s\S]*(\*\*|__))/,""),s=s.replace(/(\*\*|__)/,"")):"italic"==t?(l=l.replace(/(\*|_)(?![\s\S]*(\*|_))/,""),s=s.replace(/(\*|_)/,"")):"strikethrough"==t&&(l=l.replace(/(\*\*|~~)(?![\s\S]*(\*\*|~~))/,""),s=s.replace(/(\*\*|~~)/,"")),o.replaceRange(l+s,{line:u.line,ch:0},{line:u.line,ch:99999999999999}),"bold"==t||"strikethrough"==t?(u.ch-=2,u!==c&&(c.ch-=2)):"italic"==t&&(u.ch-=1,u!==c&&(c.ch-=1))):(r=o.getSelection(),"bold"==t?r=(r=r.split("**").join("")).split("__").join(""):"italic"==t?r=(r=r.split("*").join("")).split("_").join(""):"strikethrough"==t&&(r=r.split("~~").join("")),o.replaceSelection(l+r+s),u.ch+=n.length,c.ch=u.ch+r.length),o.setSelection(u,c),o.focus()}}function Z(e,t){if(Math.abs(e)<1024)return""+e+t[0];var n=0;do{e/=1024,++n}while(Math.abs(e)>=1024&&n=19968?n+=t[i].length:n+=1;return n}var te={bold:"fa fa-bold",italic:"fa fa-italic",strikethrough:"fa fa-strikethrough",heading:"fa fa-header fa-heading","heading-smaller":"fa fa-header fa-heading header-smaller","heading-bigger":"fa fa-header fa-heading header-bigger","heading-1":"fa fa-header fa-heading header-1","heading-2":"fa fa-header fa-heading header-2","heading-3":"fa fa-header fa-heading header-3",code:"fa fa-code",quote:"fa fa-quote-left","ordered-list":"fa fa-list-ol","unordered-list":"fa fa-list-ul","check-list":"fa fa-check-square-o","clean-block":"fa fa-eraser",link:"fa fa-link",image:"fa fa-image","upload-image":"fa fa-image",table:"fa fa-table","horizontal-rule":"fa fa-minus",preview:"fa fa-eye","side-by-side":"fa fa-columns",fullscreen:"fa fa-arrows-alt",guide:"fa fa-question-circle",undo:"fa fa-undo",redo:"fa fa-repeat fa-redo"},ne={bold:{name:"bold",action:x,className:te.bold,title:"Bold",default:!0},italic:{name:"italic",action:y,className:te.italic,title:"Italic",default:!0},strikethrough:{name:"strikethrough",action:b,className:te.strikethrough,title:"Strikethrough"},heading:{name:"heading",action:w,className:te.heading,title:"Heading",default:!0},"heading-smaller":{name:"heading-smaller",action:w,className:te["heading-smaller"],title:"Smaller Heading"},"heading-bigger":{name:"heading-bigger",action:k,className:te["heading-bigger"],title:"Bigger Heading"},"heading-1":{name:"heading-1",action:S,className:te["heading-1"],title:"Big Heading"},"heading-2":{name:"heading-2",action:F,className:te["heading-2"],title:"Medium Heading"},"heading-3":{name:"heading-3",action:A,className:te["heading-3"],title:"Small Heading"},"separator-1":{name:"separator-1"},code:{name:"code",action:D,className:te.code,title:"Code"},quote:{name:"quote",action:C,className:te.quote,title:"Quote",default:!0},"unordered-list":{name:"unordered-list",action:M,className:te["unordered-list"],title:"Generic List",default:!0},"ordered-list":{name:"ordered-list",action:B,className:te["ordered-list"],title:"Numbered List",default:!0},"check-list":{name:"check-list",action:N,className:te["check-list"],title:"Check List",default:!0},"clean-block":{name:"clean-block",action:O,className:te["clean-block"],title:"Clean block"},"separator-2":{name:"separator-2"},link:{name:"link",action:I,className:te.link,title:"Create Link",default:!0},image:{name:"image",action:z,className:te.image,title:"Insert Image",default:!0},"upload-image":{name:"upload-image",action:R,className:te["upload-image"],title:"Import an image"},table:{name:"table",action:_,className:te.table,title:"Insert Table"},"horizontal-rule":{name:"horizontal-rule",action:W,className:te["horizontal-rule"],title:"Insert Horizontal Line"},"separator-3":{name:"separator-3"},preview:{name:"preview",action:$,className:te.preview,noDisable:!0,title:"Toggle Preview",default:!0},"side-by-side":{name:"side-by-side",action:U,className:te["side-by-side"],noDisable:!0,noMobile:!0,title:"Toggle Side by Side",default:!0},fullscreen:{name:"fullscreen",action:v,className:te.fullscreen,noDisable:!0,noMobile:!0,title:"Toggle Fullscreen",default:!0},"separator-4":{name:"separator-4"},guide:{name:"guide",action:"https://www.markdownguide.org/basic-syntax/",className:te.guide,noDisable:!0,title:"Markdown Guide",default:!0},"separator-5":{name:"separator-5"},undo:{name:"undo",action:j,className:te.undo,noDisable:!0,title:"Undo"},redo:{name:"redo",action:q,className:te.redo,noDisable:!0,title:"Redo"}},ie={link:["[","](#url#)"],image:["![","](#url#)"],uploadedImage:["![](#url#)",""],table:["","\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n"],horizontalRule:["","\n\n-----\n\n"]},re={link:"URL for the link:",image:"URL of the image:"},oe={locale:"en-US",format:{hour:"2-digit",minute:"2-digit"}},ae={bold:"**",code:"```",italic:"*"},le={sbInit:"Attach files by drag and dropping or pasting from clipboard.",sbOnDragEnter:"Drop image to upload it.",sbOnDrop:"Uploading image #images_names#...",sbProgress:"Uploading #file_name#: #progress#%",sbOnUploaded:"Uploaded #image_name#",sizeUnits:" B, KB, MB"},se={noFileGiven:"You must select a file.",typeNotAllowed:"This image type is not allowed.",fileTooLarge:"Image #image_name# is too big (#image_size#).\nMaximum file size is #image_max_size#.",importError:"Something went wrong when uploading the image #image_name#."};function ue(e){(e=e||{}).parent=this;var t=!0;if(!1===e.autoDownloadFontAwesome&&(t=!1),!0!==e.autoDownloadFontAwesome)for(var n=document.styleSheets,i=0;i-1&&(t=!1);if(t){var r=document.createElement("link");r.rel="stylesheet",r.href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css",document.getElementsByTagName("head")[0].appendChild(r)}if(e.element)this.element=e.element;else if(null===e.element)return void console.log("EasyMDE: Error. No element was found.");if(void 0===e.toolbar)for(var o in e.toolbar=[],ne)Object.prototype.hasOwnProperty.call(ne,o)&&(-1!=o.indexOf("separator-")&&e.toolbar.push("|"),(!0===ne[o].default||e.showIcons&&e.showIcons.constructor===Array&&-1!=e.showIcons.indexOf(o))&&e.toolbar.push(o));if(Object.prototype.hasOwnProperty.call(e,"previewClass")||(e.previewClass="editor-preview"),Object.prototype.hasOwnProperty.call(e,"status")||(e.status=["autosave","lines","words","cursor"],e.uploadImage&&e.status.unshift("upload-image")),e.previewRender||(e.previewRender=function(e){return this.parent.markdown(e)}),e.parsingConfig=J({highlightFormatting:!0},e.parsingConfig||{}),e.insertTexts=J({},ie,e.insertTexts||{}),e.promptTexts=J({},re,e.promptTexts||{}),e.blockStyles=J({},ae,e.blockStyles||{}),null!=e.autosave&&(e.autosave.timeFormat=J({},oe,e.autosave.timeFormat||{})),e.iconClassMap=J({},te,e.iconClassMap||{}),e.shortcuts=J({},u,e.shortcuts||{}),e.maxHeight=e.maxHeight||void 0,e.direction=e.direction||"ltr",void 0!==e.maxHeight?e.minHeight=e.maxHeight:e.minHeight=e.minHeight||"300px",e.errorCallback=e.errorCallback||function(e){alert(e)},e.uploadImage=e.uploadImage||!1,e.imageMaxSize=e.imageMaxSize||2097152,e.imageAccept=e.imageAccept||"image/png, image/jpeg, image/gif, image/avif",e.imageTexts=J({},le,e.imageTexts||{}),e.errorMessages=J({},se,e.errorMessages||{}),e.imagePathAbsolute=e.imagePathAbsolute||!1,e.imageCSRFName=e.imageCSRFName||"csrfmiddlewaretoken",e.imageCSRFHeader=e.imageCSRFHeader||!1,e.imageInputName=e.imageInputName||"image",null!=e.autosave&&null!=e.autosave.unique_id&&""!=e.autosave.unique_id&&(e.autosave.uniqueId=e.autosave.unique_id),e.overlayMode&&void 0===e.overlayMode.combine&&(e.overlayMode.combine=!0),this.options=e,this.render(),!e.initialValue||this.options.autosave&&!0===this.options.autosave.foundSavedValue||this.value(e.initialValue),e.uploadImage){var a=this;this.codemirror.on("dragenter",function(e,t){a.updateStatusBar("upload-image",a.options.imageTexts.sbOnDragEnter),t.stopPropagation(),t.preventDefault()}),this.codemirror.on("dragend",function(e,t){a.updateStatusBar("upload-image",a.options.imageTexts.sbInit),t.stopPropagation(),t.preventDefault()}),this.codemirror.on("dragleave",function(e,t){a.updateStatusBar("upload-image",a.options.imageTexts.sbInit),t.stopPropagation(),t.preventDefault()}),this.codemirror.on("dragover",function(e,t){a.updateStatusBar("upload-image",a.options.imageTexts.sbOnDragEnter),t.stopPropagation(),t.preventDefault()}),this.codemirror.on("drop",function(t,n){n.stopPropagation(),n.preventDefault(),e.imageUploadFunction?a.uploadImagesUsingCustomFunction(e.imageUploadFunction,n.dataTransfer.files):a.uploadImages(n.dataTransfer.files)}),this.codemirror.on("paste",function(t,n){e.imageUploadFunction?a.uploadImagesUsingCustomFunction(e.imageUploadFunction,n.clipboardData.files):a.uploadImages(n.clipboardData.files)})}}function ce(){if("object"!=typeof localStorage)return!1;try{localStorage.setItem("smde_localStorage",1),localStorage.removeItem("smde_localStorage")}catch(e){return!1}return!0}ue.prototype.uploadImages=function(e,t,n){if(0!==e.length){for(var i=[],r=0;r$/,' target="_blank">');e=e.replace(n,i)}}return e}(i))}},ue.prototype.render=function(e){if(e||(e=this.element||document.getElementsByTagName("textarea")[0]),!this._rendered||this._rendered!==e){this.element=e;var t,n,o=this.options,a=this,l={};for(var u in o.shortcuts)null!==o.shortcuts[u]&&null!==s[u]&&function(e){l[d(o.shortcuts[e])]=function(){var t=s[e];"function"==typeof t?t(a):"string"==typeof t&&window.open(t,"_blank")}}(u);if(l.Enter="newlineAndIndentContinueMarkdownList",l.Tab="tabAndIndentMarkdownList",l["Shift-Tab"]="shiftTabAndUnindentMarkdownList",l.Esc=function(e){e.getOption("fullScreen")&&v(a)},this.documentOnKeyDown=function(e){27==(e=e||window.event).keyCode&&a.codemirror.getOption("fullScreen")&&v(a)},document.addEventListener("keydown",this.documentOnKeyDown,!1),o.overlayMode?(i.defineMode("overlay-mode",function(e){return i.overlayMode(i.getMode(e,!1!==o.spellChecker?"spell-checker":"gfm"),o.overlayMode.mode,o.overlayMode.combine)}),t="overlay-mode",(n=o.parsingConfig).gitHubSpice=!1):((t=o.parsingConfig).name="gfm",t.gitHubSpice=!1),!1!==o.spellChecker&&(t="spell-checker",(n=o.parsingConfig).name="gfm",n.gitHubSpice=!1,"function"==typeof o.spellChecker?o.spellChecker({codeMirrorInstance:i}):r({codeMirrorInstance:i})),this.codemirror=i.fromTextArea(e,{mode:t,backdrop:n,theme:null!=o.theme?o.theme:"easymde",tabSize:null!=o.tabSize?o.tabSize:2,indentUnit:null!=o.tabSize?o.tabSize:2,indentWithTabs:!1!==o.indentWithTabs,lineNumbers:!0===o.lineNumbers,autofocus:!0===o.autofocus,extraKeys:l,direction:o.direction,lineWrapping:!1!==o.lineWrapping,allowDropFileTypes:["text/plain"],placeholder:o.placeholder||e.getAttribute("placeholder")||"",styleSelectedText:null!=o.styleSelectedText?o.styleSelectedText:!c(),scrollbarStyle:null!=o.scrollbarStyle?o.scrollbarStyle:"native",configureMouse:function(e,t,n){return{addNew:!1}},inputStyle:null!=o.inputStyle?o.inputStyle:c()?"contenteditable":"textarea",spellcheck:null==o.nativeSpellcheck||o.nativeSpellcheck,autoRefresh:null!=o.autoRefresh&&o.autoRefresh}),this.codemirror.getScrollerElement().style.minHeight=o.minHeight,void 0!==o.maxHeight&&(this.codemirror.getScrollerElement().style.height=o.maxHeight),!0===o.forceSync){var h=this.codemirror;h.on("change",function(){h.save()})}this.gui={};var f=document.createElement("div");f.classList.add("EasyMDEContainer"),f.setAttribute("role","application");var p=this.codemirror.getWrapperElement();p.parentNode.insertBefore(f,p),f.appendChild(p),!1!==o.toolbar&&(this.gui.toolbar=this.createToolbar()),!1!==o.status&&(this.gui.statusbar=this.createStatusbar()),null!=o.autosave&&!0===o.autosave.enabled&&(this.autosave(),this.codemirror.on("change",function(){clearTimeout(a._autosave_timeout),a._autosave_timeout=setTimeout(function(){a.autosave()},a.options.autosave.submit_delay||a.options.autosave.delay||1e3)}));var m=this;this.codemirror.on("update",function(){o.previewImagesInEditor&&f.querySelectorAll(".cm-image-marker").forEach(function(e){var t=e.parentElement;if(t.innerText.match(/^!\[.*?\]\(.*\)/g)&&!t.hasAttribute("data-img-src")){var n=t.innerText.match(/!\[.*?\]\((.*?)\)/);if(window.EMDEimagesCache||(window.EMDEimagesCache={}),n&&n.length>=2){var i=n[1];if(o.imagesPreviewHandler){var r=o.imagesPreviewHandler(n[1]);"string"==typeof r&&(i=r)}if(window.EMDEimagesCache[i])x(t,window.EMDEimagesCache[i]);else{window.EMDEimagesCache[i]={};var a=document.createElement("img");a.onload=function(){window.EMDEimagesCache[i]={naturalWidth:a.naturalWidth,naturalHeight:a.naturalHeight,url:i},x(t,window.EMDEimagesCache[i])},a.src=i}}}})}),this.gui.sideBySide=this.createSideBySide(),this._rendered=this.element,(!0===o.autofocus||e.autofocus)&&this.codemirror.focus();var g=this.codemirror;setTimeout(function(){g.refresh()}.bind(g),0)}function x(e,t){var n,i,r=new URL(t.url,document.baseURI).href;e.setAttribute("data-img-src",r),e.setAttribute("style","--bg-image:url("+r+");--width:"+t.naturalWidth+"px;--height:"+(n=t.naturalWidth,i=t.naturalHeight,nthis.options.imageMaxSize)r(o(this.options.errorMessages.fileTooLarge));else{var a=new FormData;a.append("image",e),i.options.imageCSRFToken&&!i.options.imageCSRFHeader&&a.append(i.options.imageCSRFName,i.options.imageCSRFToken);var l=new XMLHttpRequest;l.upload.onprogress=function(t){if(t.lengthComputable){var n=""+Math.round(100*t.loaded/t.total);i.updateStatusBar("upload-image",i.options.imageTexts.sbProgress.replace("#file_name#",e.name).replace("#progress#",n))}},l.open("POST",this.options.imageUploadEndpoint),i.options.imageCSRFToken&&i.options.imageCSRFHeader&&l.setRequestHeader(i.options.imageCSRFName,i.options.imageCSRFToken),l.onload=function(){try{var e=JSON.parse(this.responseText)}catch(e){return console.error("EasyMDE: The server did not return a valid json."),void r(o(i.options.errorMessages.importError))}200===this.status&&e&&!e.error&&e.data&&e.data.filePath?t((i.options.imagePathAbsolute?"":window.location.origin+"/")+e.data.filePath):e.error&&e.error in i.options.errorMessages?r(o(i.options.errorMessages[e.error])):e.error?r(o(e.error)):(console.error("EasyMDE: Received an unexpected response after uploading the image."+this.status+" ("+this.statusText+")"),r(o(i.options.errorMessages.importError)))},l.onerror=function(e){console.error("EasyMDE: An unexpected error occurred when trying to upload the image."+e.target.status+" ("+e.target.statusText+")"),r(i.options.errorMessages.importError)},l.send(a)}},ue.prototype.uploadImageUsingCustomFunction=function(e,t){var n=this;e.apply(this,[t,function(e){P(n,e)},function(e){var i=function(e){var i=n.options.imageTexts.sizeUnits.split(",");return e.replace("#image_name#",t.name).replace("#image_size#",Z(t.size,i)).replace("#image_max_size#",Z(n.options.imageMaxSize,i))}(e);n.updateStatusBar("upload-image",i),setTimeout(function(){n.updateStatusBar("upload-image",n.options.imageTexts.sbInit)},1e4),n.options.errorCallback(i)}])},ue.prototype.setPreviewMaxHeight=function(){var e=this.codemirror.getWrapperElement(),t=e.nextSibling,n=parseInt(window.getComputedStyle(e).paddingTop),i=parseInt(window.getComputedStyle(e).borderTopWidth),r=(parseInt(this.options.maxHeight)+2*n+2*i).toString()+"px";t.style.height=r},ue.prototype.createSideBySide=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.nextSibling;if(!n||!n.classList.contains("editor-preview-side")){if((n=document.createElement("div")).className="editor-preview-side",this.options.previewClass)if(Array.isArray(this.options.previewClass))for(var i=0;i2),v=/Android/.test(e),x=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=g||/Mac/.test(t),b=/\bCrOS\b/.test(e),D=/win/i.test(t),C=h&&e.match(/Version\/(\d*\.\d*)/);C&&(C=Number(C[1])),C&&C>=15&&(h=!1,s=!0);var w=y&&(u||h&&(null==C||C<12.11)),k=n||a&&l>=9;function S(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var F,A=function(e,t){var n=e.className,i=S(t).exec(n);if(i){var r=n.slice(i.index+i[0].length);e.className=n.slice(0,i.index)+(r?i[1]+r:"")}};function E(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function L(e,t){return E(e).appendChild(t)}function T(e,t,n,i){var r=document.createElement(e);if(n&&(r.className=n),i&&(r.style.cssText=i),"string"==typeof t)r.appendChild(document.createTextNode(t));else if(t)for(var o=0;o=t)return a+(t-o);a+=l-o,a+=n-a%n,o=l+1}}g?z=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:a&&(z=function(e){try{e.select()}catch(e){}});var U=function(){this.id=null,this.f=null,this.time=0,this.handler=W(this.onTimeout,this)};function $(e,t){for(var n=0;n=t)return i+Math.min(a,t-r);if(r+=o-i,i=o+1,(r+=n-r%n)>=t)return i}}var Z=[""];function Q(e){for(;Z.length<=e;)Z.push(J(Z)+" ");return Z[e]}function J(e){return e[e.length-1]}function ee(e,t){for(var n=[],i=0;i"€"&&(e.toUpperCase()!=e.toLowerCase()||ie.test(e))}function oe(e,t){return t?!!(t.source.indexOf("\\w")>-1&&re(e))||t.test(e):re(e)}function ae(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var le=/[\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 se(e){return e.charCodeAt(0)>=768&&le.test(e)}function ue(e,t,n){for(;(n<0?t>0:tn?-1:1;;){if(t==n)return t;var r=(t+n)/2,o=i<0?Math.ceil(r):Math.floor(r);if(o==t)return e(o)?t:n;e(o)?n=o:t=o+i}}var de=null;function he(e,t,n){var i;de=null;for(var r=0;rt)return r;o.to==t&&(o.from!=o.to&&"before"==n?i=r:de=r),o.from==t&&(o.from!=o.to&&"before"!=n?i=r:de=r)}return null!=i?i:de}var fe=function(){function e(e){return e<=247?"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN".charAt(e):1424<=e&&e<=1524?"R":1536<=e&&e<=1785?"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111".charAt(e-1536):1774<=e&&e<=2220?"r":8192<=e&&e<=8203?"w":8204==e?"b":"L"}var t=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,n=/[stwN]/,i=/[LRr]/,r=/[Lb1n]/,o=/[1n]/;function a(e,t,n){this.level=e,this.from=t,this.to=n}return function(l,s){var u="ltr"==s?"L":"R";if(0==l.length||"ltr"==s&&!t.test(l))return!1;for(var c=l.length,d=[],h=0;h-1&&(i[t]=r.slice(0,o).concat(r.slice(o+1)))}}}function ye(e,t){var n=ve(e,t);if(n.length)for(var i=Array.prototype.slice.call(arguments,2),r=0;r0}function we(e){e.prototype.on=function(e,t){ge(this,e,t)},e.prototype.off=function(e,t){xe(this,e,t)}}function ke(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function Se(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Fe(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Ae(e){ke(e),Se(e)}function Ee(e){return e.target||e.srcElement}function Le(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var Te,Me,Be=function(){if(a&&l<9)return!1;var e=T("div");return"draggable"in e||"dragDrop"in e}();function Ne(e){if(null==Te){var t=T("span","​");L(e,T("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Te=t.offsetWidth<=1&&t.offsetHeight>2&&!(a&&l<8))}var n=Te?T("span","​"):T("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function Oe(e){if(null!=Me)return Me;var t=L(e,document.createTextNode("AخA")),n=F(t,0,1).getBoundingClientRect(),i=F(t,1,2).getBoundingClientRect();return E(e),!(!n||n.left==n.right)&&(Me=i.right-n.right<3)}var Ie,ze=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],i=e.length;t<=i;){var r=e.indexOf("\n",t);-1==r&&(r=e.length);var o=e.slice(t,"\r"==e.charAt(r-1)?r-1:r),a=o.indexOf("\r");-1!=a?(n.push(o.slice(0,a)),t+=a+1):(n.push(o),t=r+1)}return n}:function(e){return e.split(/\r\n?|\n/)},He=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Re="oncopy"in(Ie=T("div"))||(Ie.setAttribute("oncopy","return;"),"function"==typeof Ie.oncopy),Pe=null;var _e={},We={};function je(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),_e[e]=t}function qe(e){if("string"==typeof e&&We.hasOwnProperty(e))e=We[e];else if(e&&"string"==typeof e.name&&We.hasOwnProperty(e.name)){var t=We[e.name];"string"==typeof t&&(t={name:t}),(e=ne(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return qe("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return qe("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Ue(e,t){t=qe(t);var n=_e[t.name];if(!n)return Ue(e,"text/plain");var i=n(e,t);if($e.hasOwnProperty(t.name)){var r=$e[t.name];for(var o in r)r.hasOwnProperty(o)&&(i.hasOwnProperty(o)&&(i["_"+o]=i[o]),i[o]=r[o])}if(i.name=t.name,t.helperType&&(i.helperType=t.helperType),t.modeProps)for(var a in t.modeProps)i[a]=t.modeProps[a];return i}var $e={};function Ge(e,t){j(t,$e.hasOwnProperty(e)?$e[e]:$e[e]={})}function Ve(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var i in t){var r=t[i];r instanceof Array&&(r=r.concat([])),n[i]=r}return n}function Xe(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Ke(e,t,n){return!e.startState||e.startState(t,n)}var Ye=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function Ze(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var i=0;;++i){var r=n.children[i],o=r.chunkSize();if(t=e.first&&tn?ot(n,Ze(e,n).text.length):function(e,t){var n=e.ch;return null==n||n>t?ot(e.line,t):n<0?ot(e.line,0):e}(t,Ze(e,t.line).text.length)}function ft(e,t){for(var n=[],i=0;i=this.string.length},Ye.prototype.sol=function(){return this.pos==this.lineStart},Ye.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Ye.prototype.next=function(){if(this.post},Ye.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Ye.prototype.skipToEnd=function(){this.pos=this.string.length},Ye.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Ye.prototype.backUp=function(e){this.pos-=e},Ye.prototype.column=function(){return this.lastColumnPos0?null:(i&&!1!==t&&(this.pos+=i[0].length),i)}var r=function(e){return n?e.toLowerCase():e};if(r(this.string.substr(this.pos,e.length))==r(e))return!1!==t&&(this.pos+=e.length),!0},Ye.prototype.current=function(){return this.string.slice(this.start,this.pos)},Ye.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Ye.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Ye.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var pt=function(e,t){this.state=e,this.lookAhead=t},mt=function(e,t,n,i){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=i||0,this.baseTokens=null,this.baseTokenPos=1};function gt(e,t,n,i){var r=[e.state.modeGen],o={};St(e,t.text,e.doc.mode,n,function(e,t){return r.push(e,t)},o,i);for(var a=n.state,l=function(i){n.baseTokens=r;var l=e.state.overlays[i],s=1,u=0;n.state=!0,St(e,t.text,l.mode,n,function(e,t){for(var n=s;ue&&r.splice(s,1,e,r[s+1],i),s+=2,u=Math.min(e,i)}if(t)if(l.opaque)r.splice(n,s-n,e,"overlay "+t),s=n+2;else for(;ne.options.maxHighlightLength&&Ve(e.doc.mode,i.state),o=gt(e,t,i);r&&(i.state=r),t.stateAfter=i.save(!r),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function xt(e,t,n){var i=e.doc,r=e.display;if(!i.mode.startState)return new mt(i,!0,t);var o=function(e,t,n){for(var i,r,o=e.doc,a=n?-1:t-(e.doc.mode.innerMode?1e3:100),l=t;l>a;--l){if(l<=o.first)return o.first;var s=Ze(o,l-1),u=s.stateAfter;if(u&&(!n||l+(u instanceof pt?u.lookAhead:0)<=o.modeFrontier))return l;var c=q(s.text,null,e.options.tabSize);(null==r||i>c)&&(r=l-1,i=c)}return r}(e,t,n),a=o>i.first&&Ze(i,o-1).stateAfter,l=a?mt.fromSaved(i,a,o):new mt(i,Ke(i.mode),o);return i.iter(o,t,function(n){yt(e,n.text,l);var i=l.line;n.stateAfter=i==t-1||i%5==0||i>=r.viewFrom&&it.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}mt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},mt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},mt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},mt.fromSaved=function(e,t,n){return t instanceof pt?new mt(e,Ve(e.mode,t.state),n,t.lookAhead):new mt(e,Ve(e.mode,t),n)},mt.prototype.save=function(e){var t=!1!==e?Ve(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new pt(t,this.maxLookAhead):t};var Ct=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function wt(e,t,n,i){var r,o,a=e.doc,l=a.mode,s=Ze(a,(t=ht(a,t)).line),u=xt(e,t.line,n),c=new Ye(s.text,e.options.tabSize,u);for(i&&(o=[]);(i||c.pose.options.maxHighlightLength?(l=!1,a&&yt(e,t,i,d.pos),d.pos=t.length,s=null):s=kt(Dt(n,d,i.state,h),o),h){var f=h[0].name;f&&(s="m-"+(s?f+" "+s:f))}if(!l||c!=s){for(;u=t:o.to>t);(i||(i=[])).push(new Et(a,o.from,l?null:o.to))}}return i}(n,r,a),s=function(e,t,n){var i;if(e)for(var r=0;r=t:o.to>t)||o.from==t&&"bookmark"==a.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=t:o.from0&&l)for(var y=0;yt)&&(!n||Ht(n,o.marker)<0)&&(n=o.marker)}return n}function jt(e,t,n,i,r){var o=Ze(e,t),a=At&&o.markedSpans;if(a)for(var l=0;l=0&&d<=0||c<=0&&d>=0)&&(c<=0&&(s.marker.inclusiveRight&&r.inclusiveLeft?at(u.to,n)>=0:at(u.to,n)>0)||c>=0&&(s.marker.inclusiveRight&&r.inclusiveLeft?at(u.from,i)<=0:at(u.from,i)<0)))return!0}}}function qt(e){for(var t;t=Pt(e);)e=t.find(-1,!0).line;return e}function Ut(e,t){var n=Ze(e,t),i=qt(n);return n==i?t:tt(i)}function $t(e,t){if(t>e.lastLine())return t;var n,i=Ze(e,t);if(!Gt(e,i))return t;for(;n=_t(i);)i=n.find(1,!0).line;return tt(i)+1}function Gt(e,t){var n=At&&t.markedSpans;if(n)for(var i=void 0,r=0;rt.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)})}var Zt=function(e,t,n){this.text=e,Ot(this,t),this.height=n?n(this):1};function Qt(e){e.parent=null,Nt(e)}Zt.prototype.lineNo=function(){return tt(this)},we(Zt);var Jt={},en={};function tn(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?en:Jt;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function nn(e,t){var n=M("span",null,null,s?"padding-right: .1px":null),i={pre:M("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var r=0;r<=(t.rest?t.rest.length:0);r++){var o=r?t.rest[r-1]:t.line,a=void 0;i.pos=0,i.addToken=on,Oe(e.display.measure)&&(a=pe(o,e.doc.direction))&&(i.addToken=an(i.addToken,a)),i.map=[],sn(o,i,vt(e,o,t!=e.display.externalMeasured&&tt(o))),o.styleClasses&&(o.styleClasses.bgClass&&(i.bgClass=I(o.styleClasses.bgClass,i.bgClass||"")),o.styleClasses.textClass&&(i.textClass=I(o.styleClasses.textClass,i.textClass||""))),0==i.map.length&&i.map.push(0,0,i.content.appendChild(Ne(e.display.measure))),0==r?(t.measure.map=i.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(i.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(s){var l=i.content.lastChild;(/\bcm-tab\b/.test(l.className)||l.querySelector&&l.querySelector(".cm-tab"))&&(i.content.className="cm-tab-wrap-hack")}return ye(e,"renderLine",e,t.line,i.pre),i.pre.className&&(i.textClass=I(i.pre.className,i.textClass||"")),i}function rn(e){var t=T("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function on(e,t,n,i,r,o,s){if(t){var u,c=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var n=t,i="",r=0;ru&&d.from<=u);h++);if(d.to>=c)return e(n,i,r,o,a,l,s);e(n,i.slice(0,d.to-u),r,o,null,l,s),o=null,i=i.slice(d.to-u),u=d.to}}}function ln(e,t,n,i){var r=!i&&n.widgetNode;r&&e.map.push(e.pos,e.pos+t,r),!i&&e.cm.display.input.needsContentAttribute&&(r||(r=e.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",n.id)),r&&(e.cm.display.input.setUneditable(r),e.content.appendChild(r)),e.pos+=t,e.trailingSpace=!1}function sn(e,t,n){var i=e.markedSpans,r=e.text,o=0;if(i)for(var a,l,s,u,c,d,h,f=r.length,p=0,m=1,g="",v=0;;){if(v==p){s=u=c=l="",h=null,d=null,v=1/0;for(var x=[],y=void 0,b=0;bp||C.collapsed&&D.to==p&&D.from==p)){if(null!=D.to&&D.to!=p&&v>D.to&&(v=D.to,u=""),C.className&&(s+=" "+C.className),C.css&&(l=(l?l+";":"")+C.css),C.startStyle&&D.from==p&&(c+=" "+C.startStyle),C.endStyle&&D.to==v&&(y||(y=[])).push(C.endStyle,D.to),C.title&&((h||(h={})).title=C.title),C.attributes)for(var w in C.attributes)(h||(h={}))[w]=C.attributes[w];C.collapsed&&(!d||Ht(d.marker,C)<0)&&(d=D)}else D.from>p&&v>D.from&&(v=D.from)}if(y)for(var k=0;k=f)break;for(var F=Math.min(f,v);;){if(g){var A=p+g.length;if(!d){var E=A>F?g.slice(0,F-p):g;t.addToken(t,E,a?a+s:s,c,p+E.length==v?u:"",l,h)}if(A>=F){g=g.slice(F-p),p=F;break}p=A,c=""}g=r.slice(o,o=n[m++]),a=tn(n[m++],t.cm.options)}}else for(var L=1;Ln)return{map:e.measure.maps[r],cache:e.measure.caches[r],before:!0}}}function In(e,t,n,i){return Rn(e,Hn(e,t),n,i)}function zn(e,t){if(t>=e.display.viewFrom&&t=n.lineN&&t2&&o.push((s.bottom+u.top)/2-n.top)}}o.push(n.bottom-n.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,n,i){var r,o=Wn(t.map,n,i),s=o.node,u=o.start,c=o.end,d=o.collapse;if(3==s.nodeType){for(var h=0;h<4;h++){for(;u&&se(t.line.text.charAt(o.coverStart+u));)--u;for(;o.coverStart+c1}(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,i=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*i,bottom:t.bottom*i}}(e.display.measure,r))}else{var f;u>0&&(d=i="right"),r=e.options.lineWrapping&&(f=s.getClientRects()).length>1?f["right"==i?f.length-1:0]:s.getBoundingClientRect()}if(a&&l<9&&!u&&(!r||!r.left&&!r.right)){var p=s.parentNode.getClientRects()[0];r=p?{left:p.left,right:p.left+ui(e.display),top:p.top,bottom:p.bottom}:_n}for(var m=r.top-t.rect.top,g=r.bottom-t.rect.top,v=(m+g)/2,x=t.view.measure.heights,y=0;yt)&&(r=(o=s-l)-1,t>=s&&(a="right")),null!=r){if(i=e[u+2],l==s&&n==(i.insertLeft?"left":"right")&&(a=n),"left"==n&&0==r)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)i=e[2+(u-=3)],a="left";if("right"==n&&r==s-l)for(;u=0&&(n=e[r]).left==n.right;r--);return n}function qn(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=i.text.length?(s=i.text.length,u="before"):s<=0&&(s=0,u="after"),!l)return a("before"==u?s-1:s,"before"==u);function c(e,t,n){return a(n?e-1:e,1==l[t].level!=n)}var d=he(l,s,u),h=de,f=c(s,d,"before"==u);return null!=h&&(f.other=c(s,h,"before"!=u)),f}function Jn(e,t){var n=0;t=ht(e.doc,t),e.options.lineWrapping||(n=ui(e.display)*t.ch);var i=Ze(e.doc,t.line),r=Xt(i)+En(e.display);return{left:n,right:n,top:r,bottom:r+i.height}}function ei(e,t,n,i,r){var o=ot(e,t,n);return o.xRel=r,i&&(o.outside=i),o}function ti(e,t,n){var i=e.doc;if((n+=e.display.viewOffset)<0)return ei(i.first,0,null,-1,-1);var r=nt(i,n),o=i.first+i.size-1;if(r>o)return ei(i.first+i.size-1,Ze(i,o).text.length,null,1,1);t<0&&(t=0);for(var a=Ze(i,r);;){var l=oi(e,a,r,t,n),s=Wt(a,l.ch+(l.xRel>0||l.outside>0?1:0));if(!s)return l;var u=s.find(1);if(u.line==r)return u;a=Ze(i,r=u.line)}}function ni(e,t,n,i){i-=Xn(t);var r=t.text.length,o=ce(function(t){return Rn(e,n,t-1).bottom<=i},r,0);return{begin:o,end:r=ce(function(t){return Rn(e,n,t).top>i},o,r)}}function ii(e,t,n,i){return n||(n=Hn(e,t)),ni(e,t,n,Kn(e,t,Rn(e,n,i),"line").top)}function ri(e,t,n,i){return!(e.bottom<=n)&&(e.top>n||(i?e.left:e.right)>t)}function oi(e,t,n,i,r){r-=Xt(t);var o=Hn(e,t),a=Xn(t),l=0,s=t.text.length,u=!0,c=pe(t,e.doc.direction);if(c){var d=(e.options.lineWrapping?li:ai)(e,t,n,o,c,i,r);l=(u=1!=d.level)?d.from:d.to-1,s=u?d.to:d.from-1}var h,f,p=null,m=null,g=ce(function(t){var n=Rn(e,o,t);return n.top+=a,n.bottom+=a,!!ri(n,i,r,!1)&&(n.top<=r&&n.left<=i&&(p=t,m=n),!0)},l,s),v=!1;if(m){var x=i-m.left=b.bottom?1:0}return ei(n,g=ue(t.text,g,1),f,v,i-h)}function ai(e,t,n,i,r,o,a){var l=ce(function(l){var s=r[l],u=1!=s.level;return ri(Qn(e,ot(n,u?s.to:s.from,u?"before":"after"),"line",t,i),o,a,!0)},0,r.length-1),s=r[l];if(l>0){var u=1!=s.level,c=Qn(e,ot(n,u?s.from:s.to,u?"after":"before"),"line",t,i);ri(c,o,a,!0)&&c.top>a&&(s=r[l-1])}return s}function li(e,t,n,i,r,o,a){var l=ni(e,t,i,a),s=l.begin,u=l.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,d=null,h=0;h=u||f.to<=s)){var p=Rn(e,i,1!=f.level?Math.min(u,f.to)-1:Math.max(s,f.from)).right,m=pm)&&(c=f,d=m)}}return c||(c=r[r.length-1]),c.fromu&&(c={from:c.from,to:u,level:c.level}),c}function si(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Pn){Pn=T("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Pn.appendChild(document.createTextNode("x")),Pn.appendChild(T("br"));Pn.appendChild(document.createTextNode("x"))}L(e.measure,Pn);var n=Pn.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),E(e.measure),n||1}function ui(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=T("span","xxxxxxxxxx"),n=T("pre",[t],"CodeMirror-line-like");L(e.measure,n);var i=t.getBoundingClientRect(),r=(i.right-i.left)/10;return r>2&&(e.cachedCharWidth=r),r||10}function ci(e){for(var t=e.display,n={},i={},r=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a){var l=e.display.gutterSpecs[a].className;n[l]=o.offsetLeft+o.clientLeft+r,i[l]=o.clientWidth}return{fixedPos:di(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:i,wrapperWidth:t.wrapper.clientWidth}}function di(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function hi(e){var t=si(e.display),n=e.options.lineWrapping,i=n&&Math.max(5,e.display.scroller.clientWidth/ui(e.display)-3);return function(r){if(Gt(e.doc,r))return 0;var o=0;if(r.widgets)for(var a=0;a0&&(s=Ze(e.doc,u.line).text).length==u.ch){var c=q(s,s.length,e.options.tabSize)-s.length;u=ot(u.line,Math.max(0,Math.round((o-Tn(e.display).left)/ui(e.display))-c))}return u}function mi(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,i=0;it)&&(r.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=r.viewTo)At&&Ut(e.doc,t)r.viewFrom?xi(e):(r.viewFrom+=i,r.viewTo+=i);else if(t<=r.viewFrom&&n>=r.viewTo)xi(e);else if(t<=r.viewFrom){var o=yi(e,n,n+i,1);o?(r.view=r.view.slice(o.index),r.viewFrom=o.lineN,r.viewTo+=i):xi(e)}else if(n>=r.viewTo){var a=yi(e,t,t,-1);a?(r.view=r.view.slice(0,a.index),r.viewTo=a.lineN):xi(e)}else{var l=yi(e,t,t,-1),s=yi(e,n,n+i,1);l&&s?(r.view=r.view.slice(0,l.index).concat(cn(e,l.lineN,s.lineN)).concat(r.view.slice(s.index)),r.viewTo+=i):xi(e)}var u=r.externalMeasured;u&&(n=r.lineN&&t=i.viewTo)){var o=i.view[mi(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==$(a,n)&&a.push(n)}}}function xi(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function yi(e,t,n,i){var r,o=mi(e,t),a=e.display.view;if(!At||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var l=e.display.viewFrom,s=0;s0){if(o==a.length-1)return null;r=l+a[o].size-t,o++}else r=l-t;t+=r,n+=r}for(;Ut(e.doc,n)!=n;){if(o==(i<0?0:a.length-1))return null;n+=i*a[o-(i<0?1:0)].size,o+=i}return{index:o,lineN:n}}function bi(e){for(var t=e.display.view,n=0,i=0;i=e.display.viewTo||s.to().line0?a:e.defaultCharWidth())+"px"}if(i.other){var l=n.appendChild(T("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));l.style.display="",l.style.left=i.other.left+"px",l.style.top=i.other.top+"px",l.style.height=.85*(i.other.bottom-i.other.top)+"px"}}function ki(e,t){return e.top-t.top||e.left-t.left}function Si(e,t,n){var i=e.display,r=e.doc,o=document.createDocumentFragment(),a=Tn(e.display),l=a.left,s=Math.max(i.sizerWidth,Bn(e)-i.sizer.offsetLeft)-a.right,u="ltr"==r.direction;function c(e,t,n,i){t<0&&(t=0),t=Math.round(t),i=Math.round(i),o.appendChild(T("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n top: "+t+"px; width: "+(null==n?s-e:n)+"px;\n height: "+(i-t)+"px"))}function d(t,n,i){var o,a,d=Ze(r,t),h=d.text.length;function f(n,i){return Zn(e,ot(t,n),"div",d,i)}function p(t,n,i){var r=ii(e,d,null,t),o="ltr"==n==("after"==i)?"left":"right";return f("after"==i?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1),o)[o]}var m=pe(d,r.direction);return function(e,t,n,i){if(!e)return i(t,n,"ltr",0);for(var r=!1,o=0;ot||t==n&&a.to==t)&&(i(Math.max(a.from,t),Math.min(a.to,n),1==a.level?"rtl":"ltr",o),r=!0)}r||i(t,n,"ltr")}(m,n||0,null==i?h:i,function(e,t,r,d){var g="ltr"==r,v=f(e,g?"left":"right"),x=f(t-1,g?"right":"left"),y=null==n&&0==e,b=null==i&&t==h,D=0==d,C=!m||d==m.length-1;if(x.top-v.top<=3){var w=(u?b:y)&&C,k=(u?y:b)&&D?l:(g?v:x).left,S=w?s:(g?x:v).right;c(k,v.top,S-k,v.bottom)}else{var F,A,E,L;g?(F=u&&y&&D?l:v.left,A=u?s:p(e,r,"before"),E=u?l:p(t,r,"after"),L=u&&b&&C?s:x.right):(F=u?p(e,r,"before"):l,A=!u&&y&&D?s:v.right,E=!u&&b&&C?l:x.left,L=u?p(t,r,"after"):s),c(F,v.top,A-F,v.bottom),v.bottom0?t.blinker=setInterval(function(){e.hasFocus()||Ti(e),t.cursorDiv.style.visibility=(n=!n)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Ai(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||Li(e))}function Ei(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&Ti(e))},100)}function Li(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(ye(e,"focus",e,t),e.state.focused=!0,O(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),s&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),Fi(e))}function Ti(e,t){e.state.delayingBlurEvent||(e.state.focused&&(ye(e,"blur",e,t),e.state.focused=!1,A(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function Mi(e){for(var t=e.display,n=t.lineDiv.offsetTop,i=Math.max(0,t.scroller.getBoundingClientRect().top),r=t.lineDiv.getBoundingClientRect().top,o=0,s=0;s.005||m<-.005)&&(re.display.sizerWidth){var v=Math.ceil(h/ui(e.display));v>e.display.maxLineLength&&(e.display.maxLineLength=v,e.display.maxLine=u.line,e.display.maxLineChanged=!0)}}}Math.abs(o)>2&&(t.scroller.scrollTop+=o)}function Bi(e){if(e.widgets)for(var t=0;t=a&&(o=nt(t,Xt(Ze(t,s))-e.wrapper.clientHeight),a=s)}return{from:o,to:Math.max(a,o+1)}}function Oi(e,t){var n=e.display,i=si(e.display);t.top<0&&(t.top=0);var r=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,o=Nn(e),a={};t.bottom-t.top>o&&(t.bottom=t.top+o);var l=e.doc.height+Ln(n),s=t.topl-i;if(t.topr+o){var c=Math.min(t.top,(u?l:t.bottom)-o);c!=r&&(a.scrollTop=c)}var d=e.options.fixedGutter?0:n.gutters.offsetWidth,h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-d,f=Bn(e)-n.gutters.offsetWidth,p=t.right-t.left>f;return p&&(t.right=t.left+f),t.left<10?a.scrollLeft=0:t.leftf+h-3&&(a.scrollLeft=t.right+(p?0:10)-f),a}function Ii(e,t){null!=t&&(Ri(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function zi(e){Ri(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Hi(e,t,n){null==t&&null==n||Ri(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Ri(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Pi(e,Jn(e,t.from),Jn(e,t.to),t.margin))}function Pi(e,t,n,i){var r=Oi(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-i,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+i});Hi(e,r.scrollLeft,r.scrollTop)}function _i(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||fr(e,{top:t}),Wi(e,t,!0),n&&fr(e),sr(e,100))}function Wi(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function ji(e,t,n,i){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!i||(e.doc.scrollLeft=t,gr(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function qi(e){var t=e.display,n=t.gutters.offsetWidth,i=Math.round(e.doc.height+Ln(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:i,scrollHeight:i+Mn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var Ui=function(e,t,n){this.cm=n;var i=this.vert=T("div",[T("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=T("div",[T("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");i.tabIndex=r.tabIndex=-1,e(i),e(r),ge(i,"scroll",function(){i.clientHeight&&t(i.scrollTop,"vertical")}),ge(r,"scroll",function(){r.clientWidth&&t(r.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,a&&l<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Ui.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,i=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?i+"px":"0";var r=e.viewHeight-(t?i:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+r)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?i+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?i:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?i:0,bottom:t?i:0}},Ui.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Ui.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Ui.prototype.zeroWidthHack=function(){var e=y&&!p?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new U,this.disableVert=new U},Ui.prototype.enableZeroWidthBar=function(e,t,n){e.style.visibility="",t.set(1e3,function i(){var r=e.getBoundingClientRect();("vert"==n?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1))!=e?e.style.visibility="hidden":t.set(1e3,i)})},Ui.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var $i=function(){};function Gi(e,t){t||(t=qi(e));var n=e.display.barWidth,i=e.display.barHeight;Vi(e,t);for(var r=0;r<4&&n!=e.display.barWidth||i!=e.display.barHeight;r++)n!=e.display.barWidth&&e.options.lineWrapping&&Mi(e),Vi(e,qi(e)),n=e.display.barWidth,i=e.display.barHeight}function Vi(e,t){var n=e.display,i=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=i.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=i.bottom)+"px",n.heightForcer.style.borderBottom=i.bottom+"px solid transparent",i.right&&i.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=i.bottom+"px",n.scrollbarFiller.style.width=i.right+"px"):n.scrollbarFiller.style.display="",i.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=i.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}$i.prototype.update=function(){return{bottom:0,right:0}},$i.prototype.setScrollLeft=function(){},$i.prototype.setScrollTop=function(){},$i.prototype.clear=function(){};var Xi={native:Ui,null:$i};function Ki(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&A(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Xi[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),ge(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,n){"horizontal"==n?ji(e,t):_i(e,t)},e),e.display.scrollbars.addClass&&O(e.display.wrapper,e.display.scrollbars.addClass)}var Yi=0;function Zi(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Yi,markArrays:null},t=e.curOp,dn?dn.ops.push(t):t.ownsGroup=dn={ops:[t],delayedCallbacks:[]}}function Qi(e){var t=e.curOp;t&&function(e,t){var n=e.ownsGroup;if(n)try{!function(e){var t=e.delayedCallbacks,n=0;do{for(;n=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new cr(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function er(e){e.updatedDisplay=e.mustUpdate&&dr(e.cm,e.update)}function tr(e){var t=e.cm,n=t.display;e.updatedDisplay&&Mi(t),e.barMeasure=qi(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=In(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Mn(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Bn(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function nr(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft(o.defaultView.innerHeight||o.documentElement.clientHeight)&&(r=!1),null!=r&&!m){var a=T("div","​",null,"position: absolute;\n top: "+(t.top-n.viewOffset-En(e.display))+"px;\n height: "+(t.bottom-t.top+Mn(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(a),a.scrollIntoView(r),e.display.lineSpace.removeChild(a)}}}(t,function(e,t,n,i){var r;null==i&&(i=0),e.options.lineWrapping||t!=n||(n="before"==t.sticky?ot(t.line,t.ch+1,"before"):t,t=t.ch?ot(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t);for(var o=0;o<5;o++){var a=!1,l=Qn(e,t),s=n&&n!=t?Qn(e,n):l,u=Oi(e,r={left:Math.min(l.left,s.left),top:Math.min(l.top,s.top)-i,right:Math.max(l.left,s.left),bottom:Math.max(l.bottom,s.bottom)+i}),c=e.doc.scrollTop,d=e.doc.scrollLeft;if(null!=u.scrollTop&&(_i(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(a=!0)),null!=u.scrollLeft&&(ji(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(a=!0)),!a)break}return r}(t,ht(i,e.scrollToPos.from),ht(i,e.scrollToPos.to),e.scrollToPos.margin));var r=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(r)for(var a=0;a=e.display.viewTo)){var n=+new Date+e.options.workTime,i=xt(e,t.highlightFrontier),r=[];t.iter(i.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(i.line>=e.display.viewFrom){var a=o.styles,l=o.text.length>e.options.maxHighlightLength?Ve(t.mode,i.state):null,s=gt(e,o,i,!0);l&&(i.state=l),o.styles=s.styles;var u=o.styleClasses,c=s.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var d=!a||a.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),h=0;!d&&hn)return sr(e,e.options.workDelay),!0}),t.highlightFrontier=i.line,t.modeFrontier=Math.max(t.modeFrontier,i.line),r.length&&rr(e,function(){for(var t=0;t=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==bi(e))return!1;vr(e)&&(xi(e),t.dims=ci(e));var r=i.first+i.size,o=Math.max(t.visible.from-e.options.viewportMargin,i.first),a=Math.min(r,t.visible.to+e.options.viewportMargin);n.viewFroma&&n.viewTo-a<20&&(a=Math.min(r,n.viewTo)),At&&(o=Ut(e.doc,o),a=$t(e.doc,a));var l=o!=n.viewFrom||a!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;(function(e,t,n){var i=e.display;0==i.view.length||t>=i.viewTo||n<=i.viewFrom?(i.view=cn(e,t,n),i.viewFrom=t):(i.viewFrom>t?i.view=cn(e,t,i.viewFrom).concat(i.view):i.viewFromn&&(i.view=i.view.slice(0,mi(e,n)))),i.viewTo=n})(e,o,a),n.viewOffset=Xt(Ze(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var u=bi(e);if(!l&&0==u&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var c=function(e){if(e.hasFocus())return null;var t=N(R(e));if(!t||!B(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var i=_(e).getSelection();i.anchorNode&&i.extend&&B(e.display.lineDiv,i.anchorNode)&&(n.anchorNode=i.anchorNode,n.anchorOffset=i.anchorOffset,n.focusNode=i.focusNode,n.focusOffset=i.focusOffset)}return n}(e);return u>4&&(n.lineDiv.style.display="none"),function(e,t,n){var i=e.display,r=e.options.lineNumbers,o=i.lineDiv,a=o.firstChild;function l(t){var n=t.nextSibling;return s&&y&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var u=i.view,c=i.viewFrom,d=0;d-1&&(f=!1),mn(e,h,c,n)),f&&(E(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(rt(e.options,c)))),a=h.node.nextSibling}else{var p=Cn(e,h,c,n);o.insertBefore(p,a)}c+=h.size}for(;a;)a=l(a)}(e,n.updateLineNumbers,t.dims),u>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,function(e){if(e&&e.activeElt&&e.activeElt!=N(P(e.activeElt))&&(e.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(e.activeElt.nodeName)&&e.anchorNode&&B(document.body,e.anchorNode)&&B(document.body,e.focusNode))){var t=e.activeElt.ownerDocument,n=t.defaultView.getSelection(),i=t.createRange();i.setEnd(e.anchorNode,e.anchorOffset),i.collapse(!1),n.removeAllRanges(),n.addRange(i),n.extend(e.focusNode,e.focusOffset)}}(c),E(n.cursorDiv),E(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,l&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,sr(e,400)),n.updateLineNumbers=null,!0}function hr(e,t){for(var n=t.viewport,i=!0;;i=!1){if(i&&e.options.lineWrapping&&t.oldDisplayWidth!=Bn(e))i&&(t.visible=Ni(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+Ln(e.display)-Nn(e),n.top)}),t.visible=Ni(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!dr(e,t))break;Mi(e);var r=qi(e);Di(e),Gi(e,r),mr(e,r),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function fr(e,t){var n=new cr(e,t);if(dr(e,n)){Mi(e),hr(e,n);var i=qi(e);Di(e),Gi(e,i),mr(e,i),n.finish()}}function pr(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px",fn(e,"gutterChanged",e)}function mr(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Mn(e)+"px"}function gr(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var i=di(t)-t.scroller.scrollLeft+e.doc.scrollLeft,r=t.gutters.offsetWidth,o=i+"px",a=0;au.clientWidth,p=u.scrollHeight>u.clientHeight;if(r&&f||o&&p){if(o&&y&&s)e:for(var m=t.target,g=l.view;m!=u;m=m.parentNode)for(var v=0;v=0&&at(e,i.to())<=0)return n}return-1};var Er=function(e,t){this.anchor=e,this.head=t};function Lr(e,t,n){var i=e&&e.options.selectionsMayTouch,r=t[n];t.sort(function(e,t){return at(e.from(),t.from())}),n=$(t,r);for(var o=1;o0:s>=0){var u=ct(l.from(),a.from()),c=ut(l.to(),a.to()),d=l.empty()?a.from()==a.head:l.from()==l.head;o<=n&&--n,t.splice(--o,2,new Er(d?c:u,d?u:c))}}return new Ar(t,n)}function Tr(e,t){return new Ar([new Er(e,t||e)],0)}function Mr(e){return e.text?ot(e.from.line+e.text.length-1,J(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Br(e,t){if(at(e,t.from)<0)return e;if(at(e,t.to)<=0)return Mr(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,i=e.ch;return e.line==t.to.line&&(i+=Mr(t).ch-t.to.ch),ot(n,i)}function Nr(e,t){for(var n=[],i=0;i1&&e.remove(l.line+1,p-1),e.insert(l.line+1,v)}fn(e,"change",e,t)}function Pr(e,t,n){!function e(i,r,o){if(i.linked)for(var a=0;al-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(Ur(e.done),J(e.done)):e.done.length&&!J(e.done).ranges?J(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),J(e.done)):void 0}(r,r.lastOp==i)))a=J(o.changes),0==at(t.from,t.to)&&0==at(t.from,a.to)?a.to=Mr(t):o.changes.push(qr(e,t));else{var s=J(r.done);for(s&&s.ranges||Vr(e.sel,r.done),o={changes:[qr(e,t)],generation:r.generation},r.done.push(o);r.done.length>r.undoDepth;)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(n),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=l,r.lastOp=r.lastSelOp=i,r.lastOrigin=r.lastSelOrigin=t.origin,a||ye(e,"historyAdded")}function Gr(e,t,n,i){var r=e.history,o=i&&i.origin;n==r.lastSelOp||o&&r.lastSelOrigin==o&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==o||function(e,t,n,i){var r=t.charAt(0);return"*"==r||"+"==r&&n.ranges.length==i.ranges.length&&n.somethingSelected()==i.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,J(r.done),t))?r.done[r.done.length-1]=t:Vr(t,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=o,r.lastSelOp=n,i&&!1!==i.clearRedo&&Ur(r.undone)}function Vr(e,t){var n=J(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Xr(e,t,n,i){var r=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,i),function(n){n.markedSpans&&((r||(r=t["spans_"+e.id]={}))[o]=n.markedSpans),++o})}function Kr(e){if(!e)return null;for(var t,n=0;n-1&&(J(l)[d]=u[d],delete u[d])}}}return i}function Qr(e,t,n,i){if(i){var r=e.anchor;if(n){var o=at(t,r)<0;o!=at(n,r)<0?(r=t,t=n):o!=at(t,n)<0&&(t=n)}return new Er(r,t)}return new Er(n||t,t)}function Jr(e,t,n,i,r){null==r&&(r=e.cm&&(e.cm.display.shift||e.extend)),ro(e,new Ar([Qr(e.sel.primary(),t,n,r)],0),i)}function eo(e,t,n){for(var i=[],r=e.cm&&(e.cm.display.shift||e.extend),o=0;o=t.ch:l.to>t.ch))){if(r&&(ye(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!s.atomic)continue;if(n){var d=s.find(i<0?1:-1),h=void 0;if((i<0?c:u)&&(d=ho(e,d,-i,d&&d.line==t.line?o:null)),d&&d.line==t.line&&(h=at(d,n))&&(i<0?h<0:h>0))return uo(e,d,t,i,r)}var f=s.find(i<0?-1:1);return(i<0?u:c)&&(f=ho(e,f,i,f.line==t.line?o:null)),f?uo(e,f,t,i,r):null}}return t}function co(e,t,n,i,r){var o=i||1;return uo(e,t,n,o,r)||!r&&uo(e,t,n,o,!0)||uo(e,t,n,-o,r)||!r&&uo(e,t,n,-o,!0)||(e.cantEdit=!0,ot(e.first,0))}function ho(e,t,n,i){return n<0&&0==t.ch?t.line>e.first?ht(e,ot(t.line-1)):null:n>0&&t.ch==(i||Ze(e,t.line)).text.length?t.line0)){var c=[s,1],d=at(u.from,l.from),h=at(u.to,l.to);(d<0||!a.inclusiveLeft&&!d)&&c.push({from:u.from,to:l.from}),(h>0||!a.inclusiveRight&&!h)&&c.push({from:l.to,to:u.to}),r.splice.apply(r,c),s+=c.length-3}}return r}(e,t.from,t.to);if(i)for(var r=i.length-1;r>=0;--r)go(e,{from:i[r].from,to:i[r].to,text:r?[""]:t.text,origin:t.origin});else go(e,t)}}function go(e,t){if(1!=t.text.length||""!=t.text[0]||0!=at(t.from,t.to)){var n=Nr(e,t);$r(e,t,n,e.cm?e.cm.curOp.id:NaN),yo(e,t,n,Mt(e,t));var i=[];Pr(e,function(e,n){n||-1!=$(i,e.history)||(wo(e.history,t),i.push(e.history)),yo(e,t,null,Mt(e,t))})}}function vo(e,t,n){var i=e.cm&&e.cm.state.suppressEdits;if(!i||n){for(var r,o=e.history,a=e.sel,l="undo"==t?o.done:o.undone,s="undo"==t?o.undone:o.done,u=0;u=0;--f){var p=h(f);if(p)return p.v}}}}function xo(e,t){if(0!=t&&(e.first+=t,e.sel=new Ar(ee(e.sel.ranges,function(e){return new Er(ot(e.anchor.line+t,e.anchor.ch),ot(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){gi(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,i=n.viewFrom;ie.lastLine())){if(t.from.lineo&&(t={from:t.from,to:ot(o,Ze(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Qe(e,t.from,t.to),n||(n=Nr(e,t)),e.cm?function(e,t,n){var i=e.doc,r=e.display,o=t.from,a=t.to,l=!1,s=o.line;e.options.lineWrapping||(s=tt(qt(Ze(i,o.line))),i.iter(s,a.line+1,function(e){if(e==r.maxLine)return l=!0,!0})),i.sel.contains(t.from,t.to)>-1&&De(e),Rr(i,t,n,hi(e)),e.options.lineWrapping||(i.iter(s,o.line+t.text.length,function(e){var t=Kt(e);t>r.maxLineLength&&(r.maxLine=e,r.maxLineLength=t,r.maxLineChanged=!0,l=!1)}),l&&(e.curOp.updateMaxLine=!0)),function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiern;i--){var r=Ze(e,i).stateAfter;if(r&&(!(r instanceof pt)||i+r.lookAhead1||!(this.children[0]instanceof So))){var l=[];this.collapse(l),this.children=[new So(l)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var a=r.lines.length%25+25,l=a;l10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var i=0;i0||0==a&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=M("span",[o.replacedWith],"CodeMirror-widget"),i.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),i.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(jt(e,t.line,t,n,o)||t.line!=n.line&&jt(e,n.line,t,n,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");At=!0}o.addToHistory&&$r(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var l,s=t.line,u=e.cm;if(e.iter(s,n.line+1,function(i){u&&o.collapsed&&!u.options.lineWrapping&&qt(i)==u.display.maxLine&&(l=!0),o.collapsed&&s!=t.line&&et(i,0),function(e,t,n){var i=n&&window.WeakSet&&(n.markedSpans||(n.markedSpans=new WeakSet));i&&e.markedSpans&&i.has(e.markedSpans)?e.markedSpans.push(t):(e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],i&&i.add(e.markedSpans)),t.marker.attachLine(e)}(i,new Et(o,s==t.line?t.ch:null,s==n.line?n.ch:null),e.cm&&e.cm.curOp),++s}),o.collapsed&&e.iter(t.line,n.line+1,function(t){Gt(e,t)&&et(t,0)}),o.clearOnEnter&&ge(o,"beforeCursorEnter",function(){return o.clear()}),o.readOnly&&(Ft=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++Lo,o.atomic=!0),u){if(l&&(u.curOp.updateMaxLine=!0),o.collapsed)gi(u,t.line,n.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var c=t.line;c<=n.line;c++)vi(u,c,"text");o.atomic&&lo(u.doc),fn(u,"markerAdded",u,o)}return o}To.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Zi(e),Ce(this,"clear")){var n=this.find();n&&fn(this,"clear",n.from,n.to)}for(var i=null,r=null,o=0;oe.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=i&&e&&this.collapsed&&gi(e,i,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&lo(e.doc)),e&&fn(e,"markerCleared",e,this,i,r),t&&Qi(e),this.parent&&this.parent.clear()}},To.prototype.find=function(e,t){var n,i;null==e&&"bookmark"==this.type&&(e=1);for(var r=0;r=0;s--)mo(this,i[s]);l?io(this,l):this.cm&&zi(this.cm)}),undo:lr(function(){vo(this,"undo")}),redo:lr(function(){vo(this,"redo")}),undoSelection:lr(function(){vo(this,"undo",!0)}),redoSelection:lr(function(){vo(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,i=0;i=e.ch)&&t.push(r.marker.parent||r.marker)}return t},findMarks:function(e,t,n){e=ht(this,e),t=ht(this,t);var i=[],r=e.line;return this.iter(e.line,t.line+1,function(o){var a=o.markedSpans;if(a)for(var l=0;l=s.to||null==s.from&&r!=e.line||null!=s.from&&r==t.line&&s.from>=t.ch||n&&!n(s.marker)||i.push(s.marker.parent||s.marker)}++r}),i},getAllMarks:function(){var e=[];return this.iter(function(t){var n=t.markedSpans;if(n)for(var i=0;ie)return t=e,!0;e-=o,++n}),ht(this,ot(n,t))},indexFromPos:function(e){var t=(e=ht(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var d=e.dataTransfer.getData("Text");if(d){var h;if(t.state.draggingText&&!t.state.draggingText.copy&&(h=t.listSelections()),oo(t.doc,Tr(n,n)),h)for(var f=0;f=0;t--)bo(e.doc,"",i[t].from,i[t].to,"+delete");zi(e)})}function ia(e,t,n){var i=ue(e.text,t+n,n);return i<0||i>e.text.length?null:i}function ra(e,t,n){var i=ia(e,t.ch,n);return null==i?null:new ot(t.line,i,n<0?"after":"before")}function oa(e,t,n,i,r){if(e){"rtl"==t.doc.direction&&(r=-r);var o=pe(n,t.doc.direction);if(o){var a,l=r<0?J(o):o[0],s=r<0==(1==l.level)?"after":"before";if(l.level>0||"rtl"==t.doc.direction){var u=Hn(t,n);a=r<0?n.text.length-1:0;var c=Rn(t,u,a).top;a=ce(function(e){return Rn(t,u,e).top==c},r<0==(1==l.level)?l.from:l.to-1,a),"before"==s&&(a=ia(n,a,1))}else a=r<0?l.to:l.from;return new ot(i,a,s)}}return new ot(i,r<0?n.text.length:0,r<0?"before":"after")}Xo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Xo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Xo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Xo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Xo.default=y?Xo.macDefault:Xo.pcDefault;var aa={selectAll:fo,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),V)},killLine:function(e){return na(e,function(t){if(t.empty()){var n=Ze(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line0)r=new ot(r.line,r.ch+1),e.replaceRange(o.charAt(r.ch-1)+o.charAt(r.ch-2),ot(r.line,r.ch-2),r,"+transpose");else if(r.line>e.doc.first){var a=Ze(e.doc,r.line-1).text;a&&(r=new ot(r.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+a.charAt(a.length-1),ot(r.line-1,a.length-1),r,"+transpose"))}n.push(new Er(r,r))}e.setSelections(n)})},newlineAndIndent:function(e){return rr(e,function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var i=0;i-1&&(at((r=u.ranges[r]).from(),t)<0||t.xRel>0)&&(at(r.to(),t)>0||t.xRel<0)?function(e,t,n,i){var r=e.display,o=!1,u=or(e,function(t){s&&(r.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:Ei(e)),xe(r.wrapper.ownerDocument,"mouseup",u),xe(r.wrapper.ownerDocument,"mousemove",c),xe(r.scroller,"dragstart",d),xe(r.scroller,"drop",u),o||(ke(t),i.addNew||Jr(e.doc,n,null,null,i.extend),s&&!f||a&&9==l?setTimeout(function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()},20):r.input.focus())}),c=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},d=function(){return o=!0};s&&(r.scroller.draggable=!0),e.state.draggingText=u,u.copy=!i.moveOnDrag,ge(r.wrapper.ownerDocument,"mouseup",u),ge(r.wrapper.ownerDocument,"mousemove",c),ge(r.scroller,"dragstart",d),ge(r.scroller,"drop",u),e.state.delayingBlurEvent=!0,setTimeout(function(){return r.input.focus()},20),r.scroller.dragDrop&&r.scroller.dragDrop()}(e,i,t,o):function(e,t,n,i){a&&Ei(e);var r=e.display,o=e.doc;ke(t);var l,s,u=o.sel,c=u.ranges;if(i.addNew&&!i.extend?(s=o.sel.contains(n),l=s>-1?c[s]:new Er(n,n)):(l=o.sel.primary(),s=o.sel.primIndex),"rectangle"==i.unit)i.addNew||(l=new Er(n,n)),n=pi(e,t,!0,!0),s=-1;else{var d=Ca(e,n,i.unit);l=i.extend?Qr(l,d.anchor,d.head,i.extend):d}i.addNew?-1==s?(s=c.length,ro(o,Lr(e,c.concat([l]),s),{scroll:!1,origin:"*mouse"})):c.length>1&&c[s].empty()&&"char"==i.unit&&!i.extend?(ro(o,Lr(e,c.slice(0,s).concat(c.slice(s+1)),0),{scroll:!1,origin:"*mouse"}),u=o.sel):to(o,s,l,X):(s=0,ro(o,new Ar([l],0),X),u=o.sel);var h=n;function f(t){if(0!=at(h,t))if(h=t,"rectangle"==i.unit){for(var r=[],a=e.options.tabSize,c=q(Ze(o,n.line).text,n.ch,a),d=q(Ze(o,t.line).text,t.ch,a),f=Math.min(c,d),p=Math.max(c,d),m=Math.min(n.line,t.line),g=Math.min(e.lastLine(),Math.max(n.line,t.line));m<=g;m++){var v=Ze(o,m).text,x=Y(v,f,a);f==p?r.push(new Er(ot(m,x),ot(m,x))):v.length>x&&r.push(new Er(ot(m,x),ot(m,Y(v,p,a))))}r.length||r.push(new Er(n,n)),ro(o,Lr(e,u.ranges.slice(0,s).concat(r),s),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var y,b=l,D=Ca(e,t,i.unit),C=b.anchor;at(D.anchor,C)>0?(y=D.head,C=ct(b.from(),D.anchor)):(y=D.anchor,C=ut(b.to(),D.head));var w=u.ranges.slice(0);w[s]=function(e,t){var n=t.anchor,i=t.head,r=Ze(e.doc,n.line);if(0==at(n,i)&&n.sticky==i.sticky)return t;var o=pe(r);if(!o)return t;var a=he(o,n.ch,n.sticky),l=o[a];if(l.from!=n.ch&&l.to!=n.ch)return t;var s,u=a+(l.from==n.ch==(1!=l.level)?0:1);if(0==u||u==o.length)return t;if(i.line!=n.line)s=(i.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=he(o,i.ch,i.sticky),d=c-a||(i.ch-n.ch)*(1==l.level?-1:1);s=c==u-1||c==u?d<0:d>0}var h=o[u+(s?-1:0)],f=s==(1==h.level),p=f?h.from:h.to,m=f?"after":"before";return n.ch==p&&n.sticky==m?t:new Er(new ot(n.line,p,m),i)}(e,new Er(ht(o,C),y)),ro(o,Lr(e,w,s),X)}}var p=r.wrapper.getBoundingClientRect(),m=0;function g(t){var n=++m,a=pi(e,t,!0,"rectangle"==i.unit);if(a)if(0!=at(a,h)){e.curOp.focus=N(R(e)),f(a);var l=Ni(r,o);(a.line>=l.to||a.linep.bottom?20:0;s&&setTimeout(or(e,function(){m==n&&(r.scroller.scrollTop+=s,g(t))}),50)}}function v(t){e.state.selectingText=!1,m=1/0,t&&(ke(t),r.input.focus()),xe(r.wrapper.ownerDocument,"mousemove",x),xe(r.wrapper.ownerDocument,"mouseup",y),o.history.lastSelOrigin=null}var x=or(e,function(e){0!==e.buttons&&Le(e)?g(e):v(e)}),y=or(e,v);e.state.selectingText=y,ge(r.wrapper.ownerDocument,"mousemove",x),ge(r.wrapper.ownerDocument,"mouseup",y)}(e,i,t,o)}(t,i,o,e):Ee(e)==n.scroller&&ke(e):2==r?(i&&Jr(t.doc,i),setTimeout(function(){return n.input.focus()},20)):3==r&&(k?t.display.input.onContextMenu(e):Ei(t)))}}function Ca(e,t,n){if("char"==n)return new Er(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new Er(ot(t.line,0),ht(e.doc,ot(t.line+1,0)));var i=n(e,t);return new Er(i.from,i.to)}function wa(e,t,n,i){var r,o;if(t.touches)r=t.touches[0].clientX,o=t.touches[0].clientY;else try{r=t.clientX,o=t.clientY}catch(e){return!1}if(r>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;i&&ke(t);var a=e.display,l=a.lineDiv.getBoundingClientRect();if(o>l.bottom||!Ce(e,n))return Fe(t);o-=l.top-a.viewOffset;for(var s=0;s=r)return ye(e,n,e,nt(e.doc,o),e.display.gutterSpecs[s].className,t),Fe(t)}}function ka(e,t){return wa(e,t,"gutterClick",!0)}function Sa(e,t){An(e.display,t)||function(e,t){return!!Ce(e,"gutterContextMenu")&&wa(e,t,"gutterContextMenu",!1)}(e,t)||be(e,t,"contextmenu")||k||e.display.input.onContextMenu(t)}function Fa(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),$n(e)}ba.prototype.compare=function(e,t,n){return this.time+400>e&&0==at(t,this.pos)&&n==this.button};var Aa={toString:function(){return"CodeMirror.Init"}},Ea={},La={};function Ta(e,t,n){if(!t!=!(n&&n!=Aa)){var i=e.display.dragFunctions,r=t?ge:xe;r(e.display.scroller,"dragstart",i.start),r(e.display.scroller,"dragenter",i.enter),r(e.display.scroller,"dragover",i.over),r(e.display.scroller,"dragleave",i.leave),r(e.display.scroller,"drop",i.drop)}}function Ma(e){e.options.lineWrapping?(O(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(A(e.display.wrapper,"CodeMirror-wrap"),Yt(e)),fi(e),gi(e),$n(e),setTimeout(function(){return Gi(e)},100)}function Ba(e,t){var n=this;if(!(this instanceof Ba))return new Ba(e,t);this.options=t=t?j(t):{},j(Ea,t,!1);var i=t.value;"string"==typeof i?i=new zo(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i;var r=new Ba.inputStyles[t.inputStyle](this),o=this.display=new Dr(e,i,r,t);for(var u in o.wrapper.CodeMirror=this,Fa(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Ki(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new U,keySeq:null,specialChars:null},t.autofocus&&!x&&o.input.focus(),a&&l<11&&setTimeout(function(){return n.display.input.reset(!0)},20),function(e){var t=e.display;ge(t.scroller,"mousedown",or(e,Da)),ge(t.scroller,"dblclick",a&&l<11?or(e,function(t){if(!be(e,t)){var n=pi(e,t);if(n&&!ka(e,t)&&!An(e.display,t)){ke(t);var i=e.findWordAt(n);Jr(e.doc,i.anchor,i.head)}}}):function(t){return be(e,t)||ke(t)}),ge(t.scroller,"contextmenu",function(t){return Sa(e,t)}),ge(t.input.getField(),"contextmenu",function(n){t.scroller.contains(n.target)||Sa(e,n)});var n,i={end:0};function r(){t.activeTouch&&(n=setTimeout(function(){return t.activeTouch=null},1e3),(i=t.activeTouch).end=+new Date)}function o(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function s(e,t){if(null==t.left)return!0;var n=t.left-e.left,i=t.top-e.top;return n*n+i*i>400}ge(t.scroller,"touchstart",function(r){if(!be(e,r)&&!o(r)&&!ka(e,r)){t.input.ensurePolled(),clearTimeout(n);var a=+new Date;t.activeTouch={start:a,moved:!1,prev:a-i.end<=300?i:null},1==r.touches.length&&(t.activeTouch.left=r.touches[0].pageX,t.activeTouch.top=r.touches[0].pageY)}}),ge(t.scroller,"touchmove",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),ge(t.scroller,"touchend",function(n){var i=t.activeTouch;if(i&&!An(t,n)&&null!=i.left&&!i.moved&&new Date-i.start<300){var o,a=e.coordsChar(t.activeTouch,"page");o=!i.prev||s(i,i.prev)?new Er(a,a):!i.prev.prev||s(i,i.prev.prev)?e.findWordAt(a):new Er(ot(a.line,0),ht(e.doc,ot(a.line+1,0))),e.setSelection(o.anchor,o.head),e.focus(),ke(n)}r()}),ge(t.scroller,"touchcancel",r),ge(t.scroller,"scroll",function(){t.scroller.clientHeight&&(_i(e,t.scroller.scrollTop),ji(e,t.scroller.scrollLeft,!0),ye(e,"scroll",e))}),ge(t.scroller,"mousewheel",function(t){return Fr(e,t)}),ge(t.scroller,"DOMMouseScroll",function(t){return Fr(e,t)}),ge(t.wrapper,"scroll",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(t){be(e,t)||Ae(t)},over:function(t){be(e,t)||(function(e,t){var n=pi(e,t);if(n){var i=document.createDocumentFragment();wi(e,n,i),e.display.dragCursor||(e.display.dragCursor=T("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),L(e.display.dragCursor,i)}}(e,t),Ae(t))},start:function(t){return function(e,t){if(a&&(!e.state.draggingText||+new Date-Ho<100))Ae(t);else if(!be(e,t)&&!An(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!f)){var n=T("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",h&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),h&&n.parentNode.removeChild(n)}}(e,t)},drop:or(e,Ro),leave:function(t){be(e,t)||Po(e)}};var u=t.input.getField();ge(u,"keyup",function(t){return ga.call(e,t)}),ge(u,"keydown",or(e,ma)),ge(u,"keypress",or(e,va)),ge(u,"focus",function(t){return Li(e,t)}),ge(u,"blur",function(t){return Ti(e,t)})}(this),jo(),Zi(this),this.curOp.forceUpdate=!0,_r(this,i),t.autofocus&&!x||this.hasFocus()?setTimeout(function(){n.hasFocus()&&!n.state.focused&&Li(n)},20):Ti(this),La)La.hasOwnProperty(u)&&La[u](this,t[u],Aa);vr(this),t.finishInit&&t.finishInit(this);for(var c=0;c150)){if(!i)return;n="prev"}}else u=0,n="not";"prev"==n?u=t>o.first?q(Ze(o,t-1).text,null,a):0:"add"==n?u=s+e.options.indentUnit:"subtract"==n?u=s-e.options.indentUnit:"number"==typeof n&&(u=s+n),u=Math.max(0,u);var d="",h=0;if(e.options.indentWithTabs)for(var f=Math.floor(u/a);f;--f)h+=a,d+="\t";if(ha,s=ze(t),u=null;if(l&&i.ranges.length>1)if(Ia&&Ia.text.join("\n")==t){if(i.ranges.length%Ia.text.length==0){u=[];for(var c=0;c=0;h--){var f=i.ranges[h],p=f.from(),m=f.to();f.empty()&&(n&&n>0?p=ot(p.line,p.ch-n):e.state.overwrite&&!l?m=ot(m.line,Math.min(Ze(o,m.line).text.length,m.ch+J(s).length)):l&&Ia&&Ia.lineWise&&Ia.text.join("\n")==s.join("\n")&&(p=m=ot(p.line,0)));var g={from:p,to:m,text:u?u[h%u.length]:s,origin:r||(l?"paste":e.state.cutIncoming>a?"cut":"+input")};mo(e.doc,g),fn(e,"inputRead",e,g)}t&&!l&&Pa(e,t),zi(e),e.curOp.updateInput<2&&(e.curOp.updateInput=d),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Ra(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||!t.hasFocus()||rr(t,function(){return Ha(t,n,0,null,"paste")}),!0}function Pa(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,i=n.ranges.length-1;i>=0;i--){var r=n.ranges[i];if(!(r.head.ch>100||i&&n.ranges[i-1].head.line==r.head.line)){var o=e.getModeAt(r.head),a=!1;if(o.electricChars){for(var l=0;l-1){a=Oa(e,r.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Ze(e.doc,r.head.line).text.slice(0,r.head.ch))&&(a=Oa(e,r.head.line,"smart"));a&&fn(e,"electricInput",e,r.head.line)}}}function _a(e){for(var t=[],n=[],i=0;i0?0:-1));if(isNaN(c))a=null;else{var d=n>0?c>=55296&&c<56320:c>=56320&&c<57343;a=new ot(t.line,Math.max(0,Math.min(l.text.length,t.ch+n*(d?2:1))),-n)}}else a=r?function(e,t,n,i){var r=pe(t,e.doc.direction);if(!r)return ra(t,n,i);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=he(r,n.ch,n.sticky),a=r[o];if("ltr"==e.doc.direction&&a.level%2==0&&(i>0?a.to>n.ch:a.from=a.from&&h>=c.begin)){var f=d?"before":"after";return new ot(n.line,h,f)}}var p=function(e,t,i){for(var o=function(e,t){return t?new ot(n.line,s(e,1),"before"):new ot(n.line,e,"after")};e>=0&&e0==(1!=a.level),u=l?i.begin:s(i.end,-1);if(a.from<=u&&u0?c.end:s(c.begin,-1);return null==g||i>0&&g==t.text.length||!(m=p(i>0?0:r.length-1,i,u(g)))?null:m}(e.cm,l,t,n):ra(l,t,n);if(null==a){if(o||((u=t.line+s)=e.first+e.size||(t=new ot(u,t.ch,t.sticky),!(l=Ze(e,u)))))return!1;t=oa(r,e.cm,l,t.line,s)}else t=a;return!0}if("char"==i||"codepoint"==i)u();else if("column"==i)u(!0);else if("word"==i||"group"==i)for(var c=null,d="group"==i,h=e.cm&&e.cm.getHelper(t,"wordChars"),f=!0;!(n<0)||u(!f);f=!1){var p=l.text.charAt(t.ch)||"\n",m=oe(p,h)?"w":d&&"\n"==p?"n":!d||/\s/.test(p)?null:"p";if(!d||f||m||(m="s"),c&&c!=m){n<0&&(n=1,u(),t.sticky="after");break}if(m&&(c=m),n>0&&!u(!f))break}var g=co(e,t,o,a,!0);return lt(o,g)&&(g.hitSide=!0),g}function Ua(e,t,n,i){var r,o,a=e.doc,l=t.left;if("page"==i){var s=Math.min(e.display.wrapper.clientHeight,_(e).innerHeight||a(e).documentElement.clientHeight),u=Math.max(s-.5*si(e.display),3);r=(n>0?t.bottom:t.top)+n*u}else"line"==i&&(r=n>0?t.bottom+3:t.top-3);for(;(o=ti(e,l,r)).outside;){if(n<0?r<=0:r>=a.height){o.hitSide=!0;break}r+=5*n}return o}var $a=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new U,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Ga(e,t){var n=zn(e,t.line);if(!n||n.hidden)return null;var i=Ze(e.doc,t.line),r=On(n,i,t.line),o=pe(i,e.doc.direction),a="left";o&&(a=he(o,t.ch)%2?"right":"left");var l=Wn(r.map,t.ch,a);return l.offset="right"==l.collapse?l.end:l.start,l}function Va(e,t){return t&&(e.bad=!0),e}function Xa(e,t,n){var i;if(t==e.display.lineDiv){if(!(i=e.display.lineDiv.childNodes[n]))return Va(e.clipPos(ot(e.display.viewTo-1)),!0);t=null,n=0}else for(i=t;;i=i.parentNode){if(!i||i==e.display.lineDiv)return null;if(i.parentNode&&i.parentNode==e.display.lineDiv)break}for(var r=0;r=t.display.viewTo||o.line=t.display.viewFrom&&Ga(t,r)||{node:s[0].measure.map[2],offset:0},c=o.linei.firstLine()&&(a=ot(a.line-1,Ze(i.doc,a.line-1).length)),l.ch==Ze(i.doc,l.line).text.length&&l.liner.viewTo-1)return!1;a.line==r.viewFrom||0==(e=mi(i,a.line))?(t=tt(r.view[0].line),n=r.view[0].node):(t=tt(r.view[e].line),n=r.view[e-1].node.nextSibling);var s,u,c=mi(i,l.line);if(c==r.view.length-1?(s=r.viewTo-1,u=r.lineDiv.lastChild):(s=tt(r.view[c+1].line)-1,u=r.view[c+1].node.previousSibling),!n)return!1;for(var d=i.doc.splitLines(function(e,t,n,i,r){var o="",a=!1,l=e.doc.lineSeparator(),s=!1;function u(){a&&(o+=l,s&&(o+=l),a=s=!1)}function c(e){e&&(u(),o+=e)}function d(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)return void c(n);var o,h=t.getAttribute("cm-marker");if(h){var f=e.findMarks(ot(i,0),ot(r+1,0),(g=+h,function(e){return e.id==g}));return void(f.length&&(o=f[0].find(0))&&c(Qe(e.doc,o.from,o.to).join(l)))}if("false"==t.getAttribute("contenteditable"))return;var p=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;p&&u();for(var m=0;m1&&h.length>1;)if(J(d)==J(h))d.pop(),h.pop(),s--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),t++}for(var f=0,p=0,m=d[0],g=h[0],v=Math.min(m.length,g.length);fa.ch&&x.charCodeAt(x.length-p-1)==y.charCodeAt(y.length-p-1);)f--,p++;d[d.length-1]=x.slice(0,x.length-p).replace(/^\u200b+/,""),d[0]=d[0].slice(f).replace(/\u200b+$/,"");var D=ot(t,f),C=ot(s,h.length?J(h).length-p:0);return d.length>1||d[0]||at(D,C)?(bo(i.doc,d,D,C,"+input"),!0):void 0},$a.prototype.ensurePolled=function(){this.forceCompositionEnd()},$a.prototype.reset=function(){this.forceCompositionEnd()},$a.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},$a.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},$a.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||rr(this.cm,function(){return gi(e.cm)})},$a.prototype.setUneditable=function(e){e.contentEditable="false"},$a.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||or(this.cm,Ha)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},$a.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},$a.prototype.onContextMenu=function(){},$a.prototype.resetPosition=function(){},$a.prototype.needsContentAttribute=!0;var Ya=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new U,this.hasSelection=!1,this.composing=null,this.resetting=!1};Ya.prototype.init=function(e){var t=this,n=this,i=this.cm;this.createField(e);var r=this.textarea;function o(e){if(!be(i,e)){if(i.somethingSelected())za({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=_a(i);za({lineWise:!0,text:t.text}),"cut"==e.type?i.setSelections(t.ranges,null,V):(n.prevInput="",r.value=t.text.join("\n"),z(r))}"cut"==e.type&&(i.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(r.style.width="0px"),ge(r,"input",function(){a&&l>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()}),ge(r,"paste",function(e){be(i,e)||Ra(e,i)||(i.state.pasteIncoming=+new Date,n.fastPoll())}),ge(r,"cut",o),ge(r,"copy",o),ge(e.scroller,"paste",function(t){if(!An(e,t)&&!be(i,t)){if(!r.dispatchEvent)return i.state.pasteIncoming=+new Date,void n.focus();var o=new Event("paste");o.clipboardData=t.clipboardData,r.dispatchEvent(o)}}),ge(e.lineSpace,"selectstart",function(t){An(e,t)||ke(t)}),ge(r,"compositionstart",function(){var e=i.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:i.markText(e,i.getCursor("to"),{className:"CodeMirror-composing"})}}),ge(r,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},Ya.prototype.createField=function(e){this.wrapper=ja(),this.textarea=this.wrapper.firstChild;var t=this.cm.options;Wa(this.textarea,t.spellcheck,t.autocorrect,t.autocapitalize)},Ya.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},Ya.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,i=Ci(e);if(e.options.moveInputWithCursor){var r=Qn(e,n.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();i.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,r.top+a.top-o.top)),i.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,r.left+a.left-o.left))}return i},Ya.prototype.showSelection=function(e){var t=this.cm.display;L(t.cursorDiv,e.cursors),L(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Ya.prototype.reset=function(e){if(!(this.contextMenuPending||this.composing&&e)){var t=this.cm;if(this.resetting=!0,t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&z(this.textarea),a&&l>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",a&&l>=9&&(this.hasSelection=null));this.resetting=!1}},Ya.prototype.getField=function(){return this.textarea},Ya.prototype.supportsTouch=function(){return!1},Ya.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!x||N(P(this.textarea))!=this.textarea))try{this.textarea.focus()}catch(e){}},Ya.prototype.blur=function(){this.textarea.blur()},Ya.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Ya.prototype.receivedFocus=function(){this.slowPoll()},Ya.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},Ya.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,function n(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,n))})},Ya.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,i=this.prevInput;if(this.contextMenuPending||this.resetting||!t.state.focused||He(n)&&!i&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var r=n.value;if(r==i&&!t.somethingSelected())return!1;if(a&&l>=9&&this.hasSelection===r||y&&/[\uf700-\uf7ff]/.test(r))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=r.charCodeAt(0);if(8203!=o||i||(i="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var s=0,u=Math.min(i.length,r.length);s1e3||r.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=r,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},Ya.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Ya.prototype.onKeyPress=function(){a&&l>=9&&(this.hasSelection=null),this.fastPoll()},Ya.prototype.onContextMenu=function(e){var t=this,n=t.cm,i=n.display,r=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=pi(n,e),u=i.scroller.scrollTop;if(o&&!h){n.options.resetSelectionOnContextMenu&&-1==n.doc.sel.contains(o)&&or(n,ro)(n.doc,Tr(o),V);var c,d=r.style.cssText,f=t.wrapper.style.cssText,p=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-p.top-5)+"px; left: "+(e.clientX-p.left-5)+"px;\n z-index: 1000; background: "+(a?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",s&&(c=r.ownerDocument.defaultView.scrollY),i.input.focus(),s&&r.ownerDocument.defaultView.scrollTo(null,c),i.input.reset(),n.somethingSelected()||(r.value=t.prevInput=" "),t.contextMenuPending=v,i.selForContextMenu=n.doc.sel,clearTimeout(i.detectingSelectAll),a&&l>=9&&g(),k){Ae(e);var m=function(){xe(window,"mouseup",m),setTimeout(v,20)};ge(window,"mouseup",m)}else setTimeout(v,50)}function g(){if(null!=r.selectionStart){var e=n.somethingSelected(),o="​"+(e?r.value:"");r.value="⇚",r.value=o,t.prevInput=e?"":"​",r.selectionStart=1,r.selectionEnd=o.length,i.selForContextMenu=n.doc.sel}}function v(){if(t.contextMenuPending==v&&(t.contextMenuPending=!1,t.wrapper.style.cssText=f,r.style.cssText=d,a&&l<9&&i.scrollbars.setScrollTop(i.scroller.scrollTop=u),null!=r.selectionStart)){(!a||a&&l<9)&&g();var e=0,o=function(){i.selForContextMenu==n.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==t.prevInput?or(n,fo)(n):e++<10?i.detectingSelectAll=setTimeout(o,500):(i.selForContextMenu=null,i.input.reset())};i.detectingSelectAll=setTimeout(o,200)}}},Ya.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e,this.textarea.readOnly=!!e},Ya.prototype.setUneditable=function(){},Ya.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function n(n,i,r,o){e.defaults[n]=i,r&&(t[n]=o?function(e,t,n){n!=Aa&&r(e,t,n)}:r)}e.defineOption=n,e.Init=Aa,n("value","",function(e,t){return e.setValue(t)},!0),n("mode",null,function(e,t){e.doc.modeOption=t,Ir(e)},!0),n("indentUnit",2,Ir,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,function(e){zr(e),$n(e),gi(e)},!0),n("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var n=[],i=e.doc.first;e.doc.iter(function(e){for(var r=0;;){var o=e.text.indexOf(t,r);if(-1==o)break;r=o+t.length,n.push(ot(i,o))}i++});for(var r=n.length-1;r>=0;r--)bo(e.doc,t,n[r],ot(n[r].line,n[r].ch+t.length))}}),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=Aa&&e.refresh()}),n("specialCharPlaceholder",rn,function(e){return e.refresh()},!0),n("electricChars",!0),n("inputStyle",x?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),n("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),n("autocorrect",!1,function(e,t){return e.getInputField().autocorrect=t},!0),n("autocapitalize",!1,function(e,t){return e.getInputField().autocapitalize=t},!0),n("rtlMoveVisually",!D),n("wholeLineUpdateBefore",!0),n("theme","default",function(e){Fa(e),br(e)},!0),n("keyMap","default",function(e,t,n){var i=ta(t),r=n!=Aa&&ta(n);r&&r.detach&&r.detach(e,i),i.attach&&i.attach(e,r||null)}),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,Ma,!0),n("gutters",[],function(e,t){e.display.gutterSpecs=xr(t,e.options.lineNumbers),br(e)},!0),n("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?di(e.display)+"px":"0",e.refresh()},!0),n("coverGutterNextToScrollbar",!1,function(e){return Gi(e)},!0),n("scrollbarStyle","native",function(e){Ki(e),Gi(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),n("lineNumbers",!1,function(e,t){e.display.gutterSpecs=xr(e.options.gutters,t),br(e)},!0),n("firstLineNumber",1,br,!0),n("lineNumberFormatter",function(e){return e},br,!0),n("showCursorWhenSelecting",!1,Di,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("selectionsMayTouch",!1),n("readOnly",!1,function(e,t){"nocursor"==t&&(Ti(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),n("screenReaderLabel",null,function(e,t){t=""===t?null:t,e.display.input.screenReaderLabelChanged(t)}),n("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),n("dragDrop",!0,Ta),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,Di,!0),n("singleCursorHeightPerLine",!0,Di,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,zr,!0),n("addModeClass",!1,zr,!0),n("pollInterval",100),n("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),n("historyEventDelay",1250),n("viewportMargin",10,function(e){return e.refresh()},!0),n("maxHighlightLength",1e4,zr,!0),n("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),n("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),n("autofocus",null),n("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0),n("phrases",null)}(Ba),function(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){_(this).focus(),this.display.input.focus()},setOption:function(e,n){var i=this.options,r=i[e];i[e]==n&&"mode"!=e||(i[e]=n,t.hasOwnProperty(e)&&or(this,t[e])(this,n,r),ye(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](ta(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;nn&&(Oa(this,r.head.line,e,!0),n=r.head.line,i==this.doc.sel.primIndex&&zi(this));else{var o=r.from(),a=r.to(),l=Math.max(n,o.line);n=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var s=l;s0&&to(this.doc,i,new Er(o,u[i].to()),V)}}}),getTokenAt:function(e,t){return wt(this,e,t)},getLineTokens:function(e,t){return wt(this,ot(e),t,!0)},getTokenTypeAt:function(e){e=ht(this.doc,e);var t,n=vt(this,Ze(this.doc,e.line)),i=0,r=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var a=i+r>>1;if((a?n[2*a-1]:0)>=o)r=a;else{if(!(n[2*a+1]o&&(e=o,r=!0),i=Ze(this.doc,e)}else i=e;return Kn(this,i,{top:0,left:0},t||"page",n||r).top+(r?this.doc.height-Xt(i):0)},defaultTextHeight:function(){return si(this.display)},defaultCharWidth:function(){return ui(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,i,r){var o,a,l,s=this.display,u=(e=Qn(this,ht(this.doc,e))).bottom,c=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),s.sizer.appendChild(t),"over"==i)u=e.top;else if("above"==i||"near"==i){var d=Math.max(s.wrapper.clientHeight,this.doc.height),h=Math.max(s.sizer.clientWidth,s.lineSpace.clientWidth);("above"==i||e.bottom+t.offsetHeight>d)&&e.top>t.offsetHeight?u=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=d&&(u=e.bottom),c+t.offsetWidth>h&&(c=h-t.offsetWidth)}t.style.top=u+"px",t.style.left=t.style.right="","right"==r?(c=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==r?c=0:"middle"==r&&(c=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=c+"px"),n&&(o=this,a={left:c,top:u,right:c+t.offsetWidth,bottom:u+t.offsetHeight},null!=(l=Oi(o,a)).scrollTop&&_i(o,l.scrollTop),null!=l.scrollLeft&&ji(o,l.scrollLeft))},triggerOnKeyDown:ar(ma),triggerOnKeyPress:ar(va),triggerOnKeyUp:ga,triggerOnMouseDown:ar(Da),execCommand:function(e){if(aa.hasOwnProperty(e))return aa[e].call(null,this)},triggerElectric:ar(function(e){Pa(this,e)}),findPosH:function(e,t,n,i){var r=1;t<0&&(r=-1,t=-t);for(var o=ht(this.doc,e),a=0;a0&&a(t.charAt(n-1));)--n;for(;i.5||this.options.lineWrapping)&&fi(this),ye(this,"refresh",this)}),swapDoc:ar(function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),_r(this,e),$n(this),this.display.input.reset(),Hi(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,fn(this,"swapDoc",this,t),t}),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},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}},we(e),e.registerHelper=function(t,i,r){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][i]=r},e.registerGlobalHelper=function(t,i,r,o){e.registerHelper(t,i,o),n[t]._global.push({pred:r,val:o})}}(Ba);var Za="iter insert remove copy getEditor constructor".split(" ");for(var Qa in zo.prototype)zo.prototype.hasOwnProperty(Qa)&&$(Za,Qa)<0&&(Ba.prototype[Qa]=function(e){return function(){return e.apply(this.doc,arguments)}}(zo.prototype[Qa]));return we(zo),Ba.inputStyles={textarea:Ya,contenteditable:$a},Ba.defineMode=function(e){Ba.defaults.mode||"null"==e||(Ba.defaults.mode=e),je.apply(this,arguments)},Ba.defineMIME=function(e,t){We[e]=t},Ba.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),Ba.defineMIME("text/plain","null"),Ba.defineExtension=function(e,t){Ba.prototype[e]=t},Ba.defineDocExtension=function(e,t){zo.prototype[e]=t},Ba.fromTextArea=function(e,t){if((t=t?j(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=N(P(e));t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}function i(){e.value=l.getValue()}var r;if(e.form&&(ge(e.form,"submit",i),!t.leaveSubmitMethodAlone)){var o=e.form;r=o.submit;try{var a=o.submit=function(){i(),o.submit=r,o.submit(),o.submit=a}}catch(e){}}t.finishInit=function(n){n.save=i,n.getTextArea=function(){return e},n.toTextArea=function(){n.toTextArea=isNaN,i(),e.parentNode.removeChild(n.getWrapperElement()),e.style.display="",e.form&&(xe(e.form,"submit",i),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=r))}},e.style.display="none";var l=Ba(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return l},function(e){e.off=xe,e.on=ge,e.wheelEventPixels=Sr,e.Doc=zo,e.splitLines=ze,e.countColumn=q,e.findColumn=Y,e.isWordChar=re,e.Pass=G,e.signal=ye,e.Line=Zt,e.changeEnd=Mr,e.scrollbarModel=Xi,e.Pos=ot,e.cmpPos=at,e.modes=_e,e.mimeModes=We,e.resolveMode=qe,e.getMode=Ue,e.modeExtensions=$e,e.extendMode=Ge,e.copyState=Ve,e.startState=Ke,e.innerMode=Xe,e.commands=aa,e.keyMap=Xo,e.keyName=ea,e.isModifierKey=Qo,e.lookupKey=Zo,e.normalizeKeyMap=Yo,e.StringStream=Ye,e.SharedTextMarker=Bo,e.TextMarker=To,e.LineWidget=Ao,e.e_preventDefault=ke,e.e_stopPropagation=Se,e.e_stop=Ae,e.addClass=O,e.contains=B,e.rmClass=A,e.keyNames=Uo}(Ba),Ba.version="5.65.21",Ba}()},230:function(e,t,n){var i;!function(){"use strict";(i=function(e,t,n,i){i=i||{},this.dictionary=null,this.rules={},this.dictionaryTable=new Map,this.compoundRules=[],this.compoundRuleCodes={},this.replacementTable=[],this.flags=i.flags||{},this.memoized={},this.loaded=!1;var r,o,a,l,s,u=this;function c(e,t){var n=u._readFile(e,null,null==i?void 0:i.asyncLoad);(null==i?void 0:i.asyncLoad)?n.then(function(e){t(e)}):t(n)}function d(){for(u.rules=u._parseAFF(t),u.compoundRuleCodes={},o=0,l=u.compoundRules.length;o0&&(b.continuationClasses=x),"."!==y&&(b.match="SFX"===d?new RegExp(y+"$"):new RegExp("^"+y)),"0"!=m&&(b.remove="SFX"===d?new RegExp(m+"$"):m),p.push(b)}s[h]={type:d,combineable:"Y"===f,entries:p},r+=n}else if("COMPOUNDRULE"===d){for(o=r+1,l=r+1+(n=parseInt(c[1],10));o0&&(null===n.get(e)&&n.set(e,[]),n.get(e).push(t))}for(var r=1,o=t.length;r1){var u=this.parseRuleCodes(l[1]);"NEEDAFFIX"in this.flags&&-1!==u.indexOf(this.flags.NEEDAFFIX)||i(s,u);for(var c=0,d=u.length;c=this.flags.COMPOUNDMIN)for(t=0,n=this.compoundRules.length;t1&&c[1][1]!==c[1][0]&&(o=c[0]+c[1][1]+c[1][0]+c[1].substring(2),t&&!u.check(o)||(o in a?a[o]+=1:a[o]=1)),c[1]){var d=c[1].substring(0,1).toUpperCase()===c[1].substring(0,1)?"uppercase":"lowercase";for(i=0;ii?1:t[0].localeCompare(e[0])}).reverse();var s=[],d="lowercase";e.toUpperCase()===e?d="uppercase":e.substr(0,1).toUpperCase()+e.substr(1).toLowerCase()===e&&(d="capitalized");var h=t;for(i=0;in.parts.length&&(i.parts.length=n.parts.length)}else{var a=[];for(r=0;r` "'(~:]+/,f=/^(~~~+|```+)[ \t]*([\w\/+#-]*)[^\n`]*$/,p=/^\s*\[[^\]]+?\]:.*$/,m=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/;function g(e,t,n){return t.f=t.inline=n,n(e,t)}function v(e,t,n){return t.f=t.block=n,n(e,t)}function x(t){if(t.linkTitle=!1,t.linkHref=!1,t.linkText=!1,t.em=!1,t.strong=!1,t.strikethrough=!1,t.quote=0,t.indentedCode=!1,t.f==b){var n=r;if(!n){var o=e.innerMode(i,t.htmlState);n="xml"==o.mode.name&&null===o.state.tagStart&&!o.state.context&&o.state.tokenize.isInText}n&&(t.f=k,t.block=y,t.htmlState=null)}return t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.prevLine=t.thisLine,t.thisLine={stream:null},null}function y(i,r){var a,h=i.column()===r.indentation,m=!(a=r.prevLine.stream)||!/\S/.test(a.string),v=r.indentedCode,x=r.prevLine.hr,y=!1!==r.list,b=(r.listStack[r.listStack.length-1]||0)+3;r.indentedCode=!1;var w=r.indentation;if(null===r.indentationDiff&&(r.indentationDiff=r.indentation,y)){for(r.list=null;w=4&&(v||r.prevLine.fencedCodeEnd||r.prevLine.header||m))return i.skipToEnd(),r.indentedCode=!0,o.code;if(i.eatSpace())return null;if(h&&r.indentation<=b&&(F=i.match(c))&&F[1].length<=6)return r.quote=0,r.header=F[1].length,r.thisLine.header=!0,n.highlightFormatting&&(r.formatting="header"),r.f=r.inline,C(r);if(r.indentation<=b&&i.eat(">"))return r.quote=h?1:r.quote+1,n.highlightFormatting&&(r.formatting="quote"),i.eatSpace(),C(r);if(!S&&!r.setext&&h&&r.indentation<=b&&(F=i.match(s))){var A=F[1]?"ol":"ul";return r.indentation=w+i.current().length,r.list=!0,r.quote=0,r.listStack.push(r.indentation),r.em=!1,r.strong=!1,r.code=!1,r.strikethrough=!1,n.taskLists&&i.match(u,!1)&&(r.taskList=!0),r.f=r.inline,n.highlightFormatting&&(r.formatting=["list","list-"+A]),C(r)}return h&&r.indentation<=b&&(F=i.match(f,!0))?(r.quote=0,r.fencedEndRE=new RegExp(F[1]+"+ *$"),r.localMode=n.fencedCodeBlockHighlighting&&function(n){if(e.findModeByName){var i=e.findModeByName(n);i&&(n=i.mime||i.mimes[0])}var r=e.getMode(t,n);return"null"==r.name?null:r}(F[2]||n.fencedCodeBlockDefaultMode),r.localMode&&(r.localState=e.startState(r.localMode)),r.f=r.block=D,n.highlightFormatting&&(r.formatting="code-block"),r.code=-1,C(r)):r.setext||!(k&&y||r.quote||!1!==r.list||r.code||S||p.test(i.string))&&(F=i.lookAhead(1))&&(F=F.match(d))?(r.setext?(r.header=r.setext,r.setext=0,i.skipToEnd(),n.highlightFormatting&&(r.formatting="header")):(r.header="="==F[0].charAt(0)?1:2,r.setext=r.header),r.thisLine.header=!0,r.f=r.inline,C(r)):S?(i.skipToEnd(),r.hr=!0,r.thisLine.hr=!0,o.hr):"["===i.peek()?g(i,r,E):g(i,r,r.inline)}function b(t,n){var o=i.token(t,n.htmlState);if(!r){var a=e.innerMode(i,n.htmlState);("xml"==a.mode.name&&null===a.state.tagStart&&!a.state.context&&a.state.tokenize.isInText||n.md_inside&&t.current().indexOf(">")>-1)&&(n.f=k,n.block=y,n.htmlState=null)}return o}function D(e,t){var i,r=t.listStack[t.listStack.length-1]||0,a=t.indentation=e.quote?t.push(o.formatting+"-"+e.formatting[i]+"-"+e.quote):t.push("error"))}if(e.taskOpen)return t.push("meta"),t.length?t.join(" "):null;if(e.taskClosed)return t.push("property"),t.length?t.join(" "):null;if(e.linkHref?t.push(o.linkHref,"url"):(e.strong&&t.push(o.strong),e.em&&t.push(o.em),e.strikethrough&&t.push(o.strikethrough),e.emoji&&t.push(o.emoji),e.linkText&&t.push(o.linkText),e.code&&t.push(o.code),e.image&&t.push(o.image),e.imageAltText&&t.push(o.imageAltText,"link"),e.imageMarker&&t.push(o.imageMarker)),e.header&&t.push(o.header,o.header+"-"+e.header),e.quote&&(t.push(o.quote),!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(o.quote+"-"+e.quote):t.push(o.quote+"-"+n.maxBlockquoteDepth)),!1!==e.list){var r=(e.listStack.length-1)%3;r?1===r?t.push(o.list2):t.push(o.list3):t.push(o.list1)}return e.trailingSpaceNewLine?t.push("trailing-space-new-line"):e.trailingSpace&&t.push("trailing-space-"+(e.trailingSpace%2?"a":"b")),t.length?t.join(" "):null}function w(e,t){if(e.match(h,!0))return C(t)}function k(t,r){var a=r.text(t,r);if(void 0!==a)return a;if(r.list)return r.list=null,C(r);if(r.taskList)return" "===t.match(u,!0)[1]?r.taskOpen=!0:r.taskClosed=!0,n.highlightFormatting&&(r.formatting="task"),r.taskList=!1,C(r);if(r.taskOpen=!1,r.taskClosed=!1,r.header&&t.match(/^#+$/,!0))return n.highlightFormatting&&(r.formatting="header"),C(r);var l=t.next();if(r.linkTitle){r.linkTitle=!1;var s=l;"("===l&&(s=")");var c="^\\s*(?:[^"+(s=(s+"").replace(/([.?*+^\[\]\\(){}|-])/g,"\\$1"))+"\\\\]+|\\\\\\\\|\\\\.)"+s;if(t.match(new RegExp(c),!0))return o.linkHref}if("`"===l){var d=r.formatting;n.highlightFormatting&&(r.formatting="code"),t.eatWhile("`");var h=t.current().length;if(0!=r.code||r.quote&&1!=h){if(h==r.code){var f=C(r);return r.code=0,f}return r.formatting=d,C(r)}return r.code=h,C(r)}if(r.code)return C(r);if("\\"===l&&(t.next(),n.highlightFormatting)){var p=C(r),g=o.formatting+"-escape";return p?p+" "+g:g}if("!"===l&&t.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return r.imageMarker=!0,r.image=!0,n.highlightFormatting&&(r.formatting="image"),C(r);if("["===l&&r.imageMarker&&t.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/,!1))return r.imageMarker=!1,r.imageAltText=!0,n.highlightFormatting&&(r.formatting="image"),C(r);if("]"===l&&r.imageAltText){n.highlightFormatting&&(r.formatting="image");p=C(r);return r.imageAltText=!1,r.image=!1,r.inline=r.f=F,p}if("["===l&&!r.image)return r.linkText&&t.match(/^.*?\]/)||(r.linkText=!0,n.highlightFormatting&&(r.formatting="link")),C(r);if("]"===l&&r.linkText){n.highlightFormatting&&(r.formatting="link");p=C(r);return r.linkText=!1,r.inline=r.f=t.match(/\(.*?\)| ?\[.*?\]/,!1)?F:k,p}if("<"===l&&t.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1))return r.f=r.inline=S,n.highlightFormatting&&(r.formatting="link"),(p=C(r))?p+=" ":p="",p+o.linkInline;if("<"===l&&t.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1))return r.f=r.inline=S,n.highlightFormatting&&(r.formatting="link"),(p=C(r))?p+=" ":p="",p+o.linkEmail;if(n.xml&&"<"===l&&t.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i,!1)){var x=t.string.indexOf(">",t.pos);if(-1!=x){var y=t.string.substring(t.start,x);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(y)&&(r.md_inside=!0)}return t.backUp(1),r.htmlState=e.startState(i),v(t,r,b)}if(n.xml&&"<"===l&&t.match(/^\/\w*?>/))return r.md_inside=!1,"tag";if("*"===l||"_"===l){for(var D=1,w=1==t.pos?" ":t.string.charAt(t.pos-2);D<3&&t.eat(l);)D++;var A=t.peek()||" ",E=!/\s/.test(A)&&(!m.test(A)||/\s/.test(w)||m.test(w)),L=!/\s/.test(w)&&(!m.test(w)||/\s/.test(A)||m.test(A)),T=null,M=null;if(D%2&&(r.em||!E||"*"!==l&&L&&!m.test(w)?r.em!=l||!L||"*"!==l&&E&&!m.test(A)||(T=!1):T=!0),D>1&&(r.strong||!E||"*"!==l&&L&&!m.test(w)?r.strong!=l||!L||"*"!==l&&E&&!m.test(A)||(M=!1):M=!0),null!=M||null!=T)return n.highlightFormatting&&(r.formatting=null==T?"strong":null==M?"em":"strong em"),!0===T&&(r.em=l),!0===M&&(r.strong=l),f=C(r),!1===T&&(r.em=!1),!1===M&&(r.strong=!1),f}else if(" "===l&&(t.eat("*")||t.eat("_"))){if(" "===t.peek())return C(r);t.backUp(1)}if(n.strikethrough)if("~"===l&&t.eatWhile(l)){if(r.strikethrough)return n.highlightFormatting&&(r.formatting="strikethrough"),f=C(r),r.strikethrough=!1,f;if(t.match(/^[^\s]/,!1))return r.strikethrough=!0,n.highlightFormatting&&(r.formatting="strikethrough"),C(r)}else if(" "===l&&t.match("~~",!0)){if(" "===t.peek())return C(r);t.backUp(2)}if(n.emoji&&":"===l&&t.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)){r.emoji=!0,n.highlightFormatting&&(r.formatting="emoji");var B=C(r);return r.emoji=!1,B}return" "===l&&(t.match(/^ +$/,!1)?r.trailingSpace++:r.trailingSpace&&(r.trailingSpaceNewLine=!0)),C(r)}function S(e,t){if(">"===e.next()){t.f=t.inline=k,n.highlightFormatting&&(t.formatting="link");var i=C(t);return i?i+=" ":i="",i+o.linkInline}return e.match(/^[^>]+/,!0),o.linkInline}function F(e,t){if(e.eatSpace())return null;var i,r=e.next();return"("===r||"["===r?(t.f=t.inline=(i="("===r?")":"]",function(e,t){if(e.next()===i){t.f=t.inline=k,n.highlightFormatting&&(t.formatting="link-string");var r=C(t);return t.linkHref=!1,r}return e.match(A[i]),t.linkHref=!0,C(t)}),n.highlightFormatting&&(t.formatting="link-string"),t.linkHref=!0,C(t)):"error"}var A={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/};function E(e,t){return e.match(/^([^\]\\]|\\.)*\]:/,!1)?(t.f=L,e.next(),n.highlightFormatting&&(t.formatting="link"),t.linkText=!0,C(t)):g(e,t,k)}function L(e,t){if(e.match("]:",!0)){t.f=t.inline=T,n.highlightFormatting&&(t.formatting="link");var i=C(t);return t.linkText=!1,i}return e.match(/^([^\]\\]|\\.)+/,!0),o.linkText}function T(e,t){return e.eatSpace()?null:(e.match(/^[^\s]+/,!0),void 0===e.peek()?t.linkTitle=!0:e.match(/^(?:\s+(?:"(?:[^"\\]|\\.)+"|'(?:[^'\\]|\\.)+'|\((?:[^)\\]|\\.)+\)))?/,!0),t.f=t.inline=k,o.linkHref+" url")}var M={startState:function(){return{f:y,prevLine:{stream:null},thisLine:{stream:null},block:y,htmlState:null,indentation:0,inline:k,text:w,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(t){return{f:t.f,prevLine:t.prevLine,thisLine:t.thisLine,block:t.block,htmlState:t.htmlState&&e.copyState(i,t.htmlState),indentation:t.indentation,localMode:t.localMode,localState:t.localMode?e.copyState(t.localMode,t.localState):null,inline:t.inline,text:t.text,formatting:!1,linkText:t.linkText,linkTitle:t.linkTitle,linkHref:t.linkHref,code:t.code,em:t.em,strong:t.strong,strikethrough:t.strikethrough,emoji:t.emoji,header:t.header,setext:t.setext,hr:t.hr,taskList:t.taskList,list:t.list,listStack:t.listStack.slice(0),quote:t.quote,indentedCode:t.indentedCode,trailingSpace:t.trailingSpace,trailingSpaceNewLine:t.trailingSpaceNewLine,md_inside:t.md_inside,fencedEndRE:t.fencedEndRE}},token:function(e,t){if(t.formatting=!1,e!=t.thisLine.stream){if(t.header=0,t.hr=!1,e.match(/^\s*$/,!0))return x(t),null;if(t.prevLine=t.thisLine,t.thisLine={stream:e},t.taskList=!1,t.trailingSpace=0,t.trailingSpaceNewLine=!1,!t.localState&&(t.f=t.block,t.f!=b)){var n=e.match(/^\s*/,!0)[0].replace(/\t/g," ").length;if(t.indentation=n,t.indentationDiff=null,n>0)return null}}return t.f(e,t)},innerMode:function(e){return e.block==b?{state:e.htmlState,mode:i}:e.localState?{state:e.localState,mode:e.localMode}:{state:e,mode:M}},indent:function(t,n,r){return t.block==b&&i.indent?i.indent(t.htmlState,n,r):t.localState&&t.localMode.indent?t.localMode.indent(t.localState,n,r):e.Pass},blankLine:x,getType:C,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",closeBrackets:"()[]{}''\"\"``",fold:"markdown"};return M},"xml"),e.defineMIME("text/markdown","markdown"),e.defineMIME("text/x-markdown","markdown")}(n(226),n(691),n(675))},369:function(){},387:function(e,t,n){var i=n(369);i.__esModule&&(i=i.default),"string"==typeof i&&(i=[[e.id,i,""]]),i.locals&&(e.exports=i.locals),(0,n(233).A)("8fe207ac",i,!0,{})},439:function(e,t,n){!function(e){"use strict";var t=/^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;e.defineMode("gfm",function(n,i){var r=0;var o={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(e){return{code:e.code,codeBlock:e.codeBlock,ateSpace:e.ateSpace}},token:function(e,n){if(n.combineTokens=null,n.codeBlock)return e.match(/^```+/)?(n.codeBlock=!1,null):(e.skipToEnd(),null);if(e.sol()&&(n.code=!1),e.sol()&&e.match(/^```+/))return e.skipToEnd(),n.codeBlock=!0,null;if("`"===e.peek()){e.next();var o=e.pos;e.eatWhile("`");var a=1+e.pos-o;return n.code?a===r&&(n.code=!1):(r=a,n.code=!0),null}if(n.code)return e.next(),null;if(e.eatSpace())return n.ateSpace=!0,null;if((e.sol()||n.ateSpace)&&(n.ateSpace=!1,!1!==i.gitHubSpice)){if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?=.{0,6}\d)(?:[a-f0-9]{7,40}\b)/))return n.combineTokens=!0,"link";if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return n.combineTokens=!0,"link"}return e.match(t)&&"]("!=e.string.slice(e.start-2,e.start)&&(0==e.start||/\W/.test(e.string.charAt(e.start-1)))?(n.combineTokens=!0,"link"):(e.next(),null)},blankLine:function(e){return e.code=!1,null}},a={taskLists:!0,strikethrough:!0,emoji:!0};for(var l in i)a[l]=i[l];return a.name="markdown",e.overlayMode(e.getMode(n,a),o)},"markdown"),e.defineMIME("text/x-gfm","gfm")}(n(226),n(363),n(163))},621:function(){},675:function(e,t,n){!function(e){"use strict";e.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-encrypted","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["asc","pgp","sig"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h","ino"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy","cbl"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp","cs"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists\.txt$/},{name:"CoffeeScript",mimes:["application/vnd.coffeescript","text/coffeescript","text/x-coffeescript"],mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded JavaScript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Esper",mime:"text/x-esper",mode:"sql"},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90","f95"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history)\.md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"],file:/^Jenkinsfile$/},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm","handlebars","hbs"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Pug",mime:"text/x-pug",mode:"pug",ext:["jade","pug"],alias:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"text/jinja2",mode:"jinja2",ext:["j2","jinja","jinja2"]},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"],alias:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb","wl","wls"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mimes:["application/n-triples","application/n-quads","text/n-triples"],mode:"ntriples",ext:["nt","nq"]},{name:"Objective-C",mime:"text/x-objectivec",mode:"clike",ext:["m"],alias:["objective-c","objc"]},{name:"Objective-C++",mime:"text/x-objectivec++",mode:"clike",ext:["mm"],alias:["objective-c++","objc++"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mimes:["text/x-php","application/x-httpd-php","application/x-httpd-php-open"],mode:"php",ext:["php","php3","php4","php5","php7","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PostgreSQL",mime:"text/x-pgsql",mode:"sql"},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r","R"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mimes:["text/x-sh","application/x-sh"],mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"SML",mime:"text/x-sml",mode:"mllike",ext:["sml","sig","fun","smackspec"]},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"SQLite",mime:"text/x-sqlite",mode:"sql"},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Stylus",mime:"text/x-styl",mode:"stylus",ext:["styl"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx","tex"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v","sv","svh"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"TypeScript-JSX",mime:"text/typescript-jsx",mode:"jsx",ext:["tsx"],alias:["tsx"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"Vue.js Component",mimes:["script/x-vue","text/x-vue"],mode:"vue",ext:["vue"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd","svg"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mimes:["text/x-yaml","text/yaml"],mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]},{name:"WebAssembly",mime:"text/webassembly",mode:"wast",ext:["wat","wast"]}];for(var t=0;t-1&&t.substring(r+1,t.length);if(o)return e.findModeByExtension(o)},e.findModeByName=function(t){t=t.toLowerCase();for(var n=0;n")):null:e.match("--")?n(f("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(p(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=f("meta","?>"),"meta"):(o=e.eat("/")?"closeTag":"openTag",t.tokenize=h,"tag bracket"):"&"==i?(e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"))?"atom":"error":(e.eatWhile(/[^&<]/),null)}function h(e,t){var n,i,r=e.next();if(">"==r||"/"==r&&e.eat(">"))return t.tokenize=d,o=">"==r?"endTag":"selfcloseTag","tag bracket";if("="==r)return o="equals",null;if("<"==r){t.tokenize=d,t.state=y,t.tagName=t.tagStart=null;var a=t.tokenize(e,t);return a?a+" tag error":"tag error"}return/[\'\"]/.test(r)?(t.tokenize=(n=r,i=function(e,t){for(;!e.eol();)if(e.next()==n){t.tokenize=h;break}return"string"},i.isInAttribute=!0,i),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function f(e,t){return function(n,i){for(;!n.eol();){if(n.match(t)){i.tokenize=d;break}n.next()}return e}}function p(e){return function(t,n){for(var i;null!=(i=t.next());){if("<"==i)return n.tokenize=p(e+1),n.tokenize(t,n);if(">"==i){if(1==e){n.tokenize=d;break}return n.tokenize=p(e-1),n.tokenize(t,n)}}return"meta"}}function m(e){return e&&e.toLowerCase()}function g(e,t,n){this.prev=e.context,this.tagName=t||"",this.indent=e.indented,this.startOfLine=n,(s.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function v(e){e.context&&(e.context=e.context.prev)}function x(e,t){for(var n;;){if(!e.context)return;if(n=e.context.tagName,!s.contextGrabbers.hasOwnProperty(m(n))||!s.contextGrabbers[m(n)].hasOwnProperty(m(t)))return;v(e)}}function y(e,t,n){return"openTag"==e?(n.tagStart=t.column(),b):"closeTag"==e?D:y}function b(e,t,n){return"word"==e?(n.tagName=t.current(),a="tag",k):s.allowMissingTagName&&"endTag"==e?(a="tag bracket",k(e,0,n)):(a="error",b)}function D(e,t,n){if("word"==e){var i=t.current();return n.context&&n.context.tagName!=i&&s.implicitlyClosed.hasOwnProperty(m(n.context.tagName))&&v(n),n.context&&n.context.tagName==i||!1===s.matchClosing?(a="tag",C):(a="tag error",w)}return s.allowMissingTagName&&"endTag"==e?(a="tag bracket",C(e,0,n)):(a="error",w)}function C(e,t,n){return"endTag"!=e?(a="error",C):(v(n),y)}function w(e,t,n){return a="error",C(e,0,n)}function k(e,t,n){if("word"==e)return a="attribute",S;if("endTag"==e||"selfcloseTag"==e){var i=n.tagName,r=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==e||s.autoSelfClosers.hasOwnProperty(m(i))?x(n,i):(x(n,i),n.context=new g(n,i,r==n.indented)),y}return a="error",k}function S(e,t,n){return"equals"==e?F:(s.allowMissing||(a="error"),k(e,0,n))}function F(e,t,n){return"string"==e?A:"word"==e&&s.allowUnquoted?(a="string",k):(a="error",k(e,0,n))}function A(e,t,n){return"string"==e?A:k(e,0,n)}return d.isInText=!0,{startState:function(e){var t={tokenize:d,state:y,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;o=null;var n=t.tokenize(e,t);return(n||o)&&"comment"!=n&&(a=null,t.state=t.state(o||n,e,t),a&&(n="error"==a?n+" error":a)),n},indent:function(t,n,i){var r=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+l;if(r&&r.noIndent)return e.Pass;if(t.tokenize!=h&&t.tokenize!=d)return i?i.match(/^(\s*)/)[0].length:0;if(t.tagName)return!1!==s.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+l*(s.multilineTagIndentFactor||1);if(s.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:s.htmlMode?"html":"xml",helperType:s.htmlMode?"html":"xml",skipAttribute:function(e){e.state==F&&(e.state=k)},xmlCurrentTag:function(e){return e.tagName?{name:e.tagName,close:"closeTag"==e.type}:null},xmlCurrentContext:function(e){for(var t=[],n=e.context;n;n=n.prev)t.push(n.tagName);return t.reverse()}}}),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})}(n(226))},693:function(){},713:function(e,t,n){var i=n(226);i.commands.tabAndIndentMarkdownList=function(e){var t=e.listSelections()[0].head;if(!1!==e.getStateAfter(t.line).list)e.execCommand("indentMore");else if(e.options.indentWithTabs)e.execCommand("insertTab");else{var n=Array(e.options.tabSize+1).join(" ");e.replaceSelection(n)}},i.commands.shiftTabAndUnindentMarkdownList=function(e){var t=e.listSelections()[0].head;if(!1!==e.getStateAfter(t.line).list)e.execCommand("indentLess");else if(e.options.indentWithTabs)e.execCommand("insertTab");else{var n=Array(e.options.tabSize+1).join(" ");e.replaceSelection(n)}}},771:function(e,t,n){var i=n(621);i.__esModule&&(i=i.default),"string"==typeof i&&(i=[[e.id,i,""]]),i.locals&&(e.exports=i.locals),(0,n(233).A)("8ad042e0",i,!0,{})},847:function(e,t,n){!function(e){function t(e){e.state.placeholder&&(e.state.placeholder.parentNode.removeChild(e.state.placeholder),e.state.placeholder=null)}function n(e){t(e);var n=e.state.placeholder=document.createElement("pre");n.style.cssText="height: 0; overflow: visible",n.style.direction=e.getOption("direction"),n.className="CodeMirror-placeholder CodeMirror-line-like";var i=e.getOption("placeholder");"string"==typeof i&&(i=document.createTextNode(i)),n.appendChild(i),e.display.lineSpace.insertBefore(n,e.display.lineSpace.firstChild)}function i(e){o(e)&&n(e)}function r(e){var i=e.getWrapperElement(),r=o(e);i.className=i.className.replace(" CodeMirror-empty","")+(r?" CodeMirror-empty":""),r?n(e):t(e)}function o(e){return 1===e.lineCount()&&""===e.getLine(0)}e.defineOption("placeholder","",function(o,a,l){var s=l&&l!=e.Init;if(a&&!s)o.on("blur",i),o.on("change",r),o.on("swapDoc",r),e.on(o.getInputField(),"compositionupdate",o.state.placeholderCompose=function(){!function(e){setTimeout(function(){var i=!1;if(1==e.lineCount()){var r=e.getInputField();i="TEXTAREA"==r.nodeName?!e.getLine(0).length:!/[^\u200b]/.test(r.querySelector(".CodeMirror-line").textContent)}i?n(e):t(e)},20)}(o)}),r(o);else if(!a&&s){o.off("blur",i),o.off("change",r),o.off("swapDoc",r),e.off(o.getInputField(),"compositionupdate",o.state.placeholderCompose),t(o);var u=o.getWrapperElement();u.className=u.className.replace(" CodeMirror-empty","")}a&&!o.hasFocus()&&i(o)})}(n(226))},872:function(e,t){"use strict";function n(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function a(e){var t=function(e){if("object"!=typeof e||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}t.NT={async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1};var l=/[&<>"']/,s=new RegExp(l.source,"g"),u=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,c=new RegExp(u.source,"g"),d={"&":"&","<":"<",">":">",'"':""","'":"'"},h=function(e){return d[e]};function f(e,t){if(t){if(l.test(e))return e.replace(s,h)}else if(u.test(e))return e.replace(c,h);return e}var p=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function m(e){return e.replace(p,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}var g=/(^|[^\[])\^/g;function v(e,t){e="string"==typeof e?e:e.source,t=t||"";var n={replace:function(t,i){return i=(i=i.source||i).replace(g,"$1"),e=e.replace(t,i),n},getRegex:function(){return new RegExp(e,t)}};return n}var x=/[^\w:]/g,y=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function b(e,t,n){if(e){var i;try{i=decodeURIComponent(m(n)).replace(x,"").toLowerCase()}catch(e){return null}if(0===i.indexOf("javascript:")||0===i.indexOf("vbscript:")||0===i.indexOf("data:"))return null}t&&!y.test(n)&&(n=function(e,t){D[" "+e]||(C.test(e)?D[" "+e]=e+"/":D[" "+e]=A(e,"/",!0));var n=-1===(e=D[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(w,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(k,"$1")+t:e+t}(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n}var D={},C=/^[^:]+:\/*[^/]*$/,w=/^([^:]+:)[\s\S]*$/,k=/^([^:]+:\/*[^/]*)[\s\S]*$/,S={exec:function(){}};function F(e,t){var n=e.replace(/\|/g,function(e,t,n){for(var i=!1,r=t;--r>=0&&"\\"===n[r];)i=!i;return i?"|":" |"}).split(/ \|/),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),n.length>t)n.splice(t);else for(;n.length1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}function L(e,t,n,i){var r=t.href,o=t.title?f(t.title):null,a=e[1].replace(/\\([\[\]])/g,"$1");if("!"!==e[0].charAt(0)){i.state.inLink=!0;var l={type:"link",raw:n,href:r,title:o,text:a,tokens:i.inlineTokens(a)};return i.state.inLink=!1,l}return{type:"image",raw:n,href:r,title:o,text:f(a)}}var T=function(){function e(e){this.options=e||t.NT}var n=e.prototype;return n.space=function(e){var t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}},n.code=function(e){var t=this.rules.block.code.exec(e);if(t){var n=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:A(n,"\n")}}},n.fences=function(e){var t=this.rules.block.fences.exec(e);if(t){var n=t[0],i=function(e,t){var n=e.match(/^(\s+)(?:```)/);if(null===n)return t;var i=n[1];return t.split("\n").map(function(e){var t=e.match(/^\s+/);return null===t?e:t[0].length>=i.length?e.slice(i.length):e}).join("\n")}(n,t[3]||"");return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline._escapes,"$1"):t[2],text:i}}},n.heading=function(e){var t=this.rules.block.heading.exec(e);if(t){var n=t[2].trim();if(/#$/.test(n)){var i=A(n,"#");this.options.pedantic?n=i.trim():i&&!/ $/.test(i)||(n=i.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}},n.hr=function(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}},n.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){var n=t[0].replace(/^ *>[ \t]?/gm,""),i=this.lexer.state.top;this.lexer.state.top=!0;var r=this.lexer.blockTokens(n);return this.lexer.state.top=i,{type:"blockquote",raw:t[0],tokens:r,text:n}}},n.list=function(e){var t=this.rules.block.list.exec(e);if(t){var n,i,r,o,a,l,s,u,c,d,h,f,p=t[1].trim(),m=p.length>1,g={type:"list",raw:"",ordered:m,start:m?+p.slice(0,-1):"",loose:!1,items:[]};p=m?"\\d{1,9}\\"+p.slice(-1):"\\"+p,this.options.pedantic&&(p=m?p:"[*+-]");for(var v=new RegExp("^( {0,3}"+p+")((?:[\t ][^\\n]*)?(?:\\n|$))");e&&(f=!1,t=v.exec(e))&&!this.rules.block.hr.test(e);){if(n=t[0],e=e.substring(n.length),u=t[2].split("\n",1)[0].replace(/^\t+/,function(e){return" ".repeat(3*e.length)}),c=e.split("\n",1)[0],this.options.pedantic?(o=2,h=u.trimLeft()):(o=(o=t[2].search(/[^ ]/))>4?1:o,h=u.slice(o),o+=t[1].length),l=!1,!u&&/^ *$/.test(c)&&(n+=c+"\n",e=e.substring(c.length+1),f=!0),!f)for(var x=new RegExp("^ {0,"+Math.min(3,o-1)+"}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))"),y=new RegExp("^ {0,"+Math.min(3,o-1)+"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)"),b=new RegExp("^ {0,"+Math.min(3,o-1)+"}(?:```|~~~)"),D=new RegExp("^ {0,"+Math.min(3,o-1)+"}#");e&&(c=d=e.split("\n",1)[0],this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!b.test(c))&&!D.test(c)&&!x.test(c)&&!y.test(e);){if(c.search(/[^ ]/)>=o||!c.trim())h+="\n"+c.slice(o);else{if(l)break;if(u.search(/[^ ]/)>=4)break;if(b.test(u))break;if(D.test(u))break;if(y.test(u))break;h+="\n"+c}l||c.trim()||(l=!0),n+=d+"\n",e=e.substring(d.length+1),u=c.slice(o)}g.loose||(s?g.loose=!0:/\n *\n *$/.test(n)&&(s=!0)),this.options.gfm&&(i=/^\[[ xX]\] /.exec(h))&&(r="[ ] "!==i[0],h=h.replace(/^\[[ xX]\] +/,"")),g.items.push({type:"list_item",raw:n,task:!!i,checked:r,loose:!1,text:h}),g.raw+=n}g.items[g.items.length-1].raw=n.trimRight(),g.items[g.items.length-1].text=h.trimRight(),g.raw=g.raw.trimRight();var C=g.items.length;for(a=0;a0&&w.some(function(e){return/\n.*\n/.test(e.raw)});g.loose=k}if(g.loose)for(a=0;a$/,"$1").replace(this.rules.inline._escapes,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline._escapes,"$1"):t[3];return{type:"def",tag:n,raw:t[0],href:i,title:r}}},n.table=function(e){var t=this.rules.block.table.exec(e);if(t){var n={type:"table",header:F(t[1]).map(function(e){return{text:e}}),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(n.header.length===n.align.length){n.raw=t[0];var i,r,o,a,l=n.align.length;for(i=0;i/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):f(t[0]):t[0]}},n.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var n=t[2].trim();if(!this.options.pedantic&&/^$/.test(n))return;var i=A(n.slice(0,-1),"\\");if((n.length-i.length)%2==0)return}else{var r=function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=e.length,i=0,r=0;r-1){var o=(0===t[0].indexOf("!")?5:4)+t[1].length+r;t[2]=t[2].substring(0,r),t[0]=t[0].substring(0,o).trim(),t[3]=""}}var a=t[2],l="";if(this.options.pedantic){var s=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(a);s&&(a=s[1],l=s[3])}else l=t[3]?t[3].slice(1,-1):"";return a=a.trim(),/^$/.test(n)?a.slice(1):a.slice(1,-1)),L(t,{href:a?a.replace(this.rules.inline._escapes,"$1"):a,title:l?l.replace(this.rules.inline._escapes,"$1"):l},t[0],this.lexer)}},n.reflink=function(e,t){var n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){var i=(n[2]||n[1]).replace(/\s+/g," ");if(!(i=t[i.toLowerCase()])){var r=n[0].charAt(0);return{type:"text",raw:r,text:r}}return L(n,i,n[0],this.lexer)}},n.emStrong=function(e,t,n){void 0===n&&(n="");var i=this.rules.inline.emStrong.lDelim.exec(e);if(i&&(!i[3]||!n.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var r=i[1]||i[2]||"";if(!r||r&&(""===n||this.rules.inline.punctuation.exec(n))){var o,a,l=i[0].length-1,s=l,u=0,c="*"===i[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+l);null!=(i=c.exec(t));)if(o=i[1]||i[2]||i[3]||i[4]||i[5]||i[6])if(a=o.length,i[3]||i[4])s+=a;else if(!((i[5]||i[6])&&l%3)||(l+a)%3){if(!((s-=a)>0)){a=Math.min(a,a+s+u);var d=e.slice(0,l+i.index+(i[0].length-o.length)+a);if(Math.min(l,a)%2){var h=d.slice(1,-1);return{type:"em",raw:d,text:h,tokens:this.lexer.inlineTokens(h)}}var f=d.slice(2,-2);return{type:"strong",raw:d,text:f,tokens:this.lexer.inlineTokens(f)}}}else u+=a}}},n.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var n=t[2].replace(/\n/g," "),i=/[^ ]/.test(n),r=/^ /.test(n)&&/ $/.test(n);return i&&r&&(n=n.substring(1,n.length-1)),n=f(n,!0),{type:"codespan",raw:t[0],text:n}}},n.br=function(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}},n.del=function(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}},n.autolink=function(e,t){var n,i,r=this.rules.inline.autolink.exec(e);if(r)return i="@"===r[2]?"mailto:"+(n=f(this.options.mangle?t(r[1]):r[1])):n=f(r[1]),{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}},n.url=function(e,t){var n;if(n=this.rules.inline.url.exec(e)){var i,r;if("@"===n[2])r="mailto:"+(i=f(this.options.mangle?t(n[0]):n[0]));else{var o;do{o=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(o!==n[0]);i=f(n[0]),r="www."===n[1]?"http://"+n[0]:n[0]}return{type:"link",raw:n[0],text:i,href:r,tokens:[{type:"text",raw:i,text:i}]}}},n.inlineText=function(e,t){var n,i=this.rules.inline.text.exec(e);if(i)return n=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):f(i[0]):i[0]:f(this.options.smartypants?t(i[0]):i[0]),{type:"text",raw:i[0],text:n}},e}(),M={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:S,lheading:/^((?:.|\n(?!\n))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};M.def=v(M.def).replace("label",M._label).replace("title",M._title).getRegex(),M.bullet=/(?:[*+-]|\d{1,9}[.)])/,M.listItemStart=v(/^( *)(bull) */).replace("bull",M.bullet).getRegex(),M.list=v(M.list).replace(/bull/g,M.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+M.def.source+")").getRegex(),M._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",M._comment=/|$)/,M.html=v(M.html,"i").replace("comment",M._comment).replace("tag",M._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),M.paragraph=v(M._paragraph).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",M._tag).getRegex(),M.blockquote=v(M.blockquote).replace("paragraph",M.paragraph).getRegex(),M.normal=i({},M),M.gfm=i({},M.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),M.gfm.table=v(M.gfm.table).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",M._tag).getRegex(),M.gfm.paragraph=v(M._paragraph).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",M.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",M._tag).getRegex(),M.pedantic=i({},M.normal,{html:v("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",M._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:S,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:v(M.normal._paragraph).replace("hr",M.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",M.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var B={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:S,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^(?:[^_*\\]|\\.)*?\_\_(?:[^_*\\]|\\.)*?\*(?:[^_*\\]|\\.)*?(?=\_\_)|(?:[^*\\]|\\.)+(?=[^*])|[punct_](\*+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|(?:[^punct*_\s\\]|\\.)(\*+)(?=[^punct*_\s])/,rDelimUnd:/^(?:[^_*\\]|\\.)*?\*\*(?:[^_*\\]|\\.)*?\_(?:[^_*\\]|\\.)*?(?=\*\*)|(?:[^_\\]|\\.)+(?=[^_])|[punct*](\_+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:S,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\.5&&(n="x"+n.toString(16)),i+="&#"+n+";";return i}B._punctuation="!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~",B.punctuation=v(B.punctuation).replace(/punctuation/g,B._punctuation).getRegex(),B.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,B.escapedEmSt=/(?:^|[^\\])(?:\\\\)*\\[*_]/g,B._comment=v(M._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),B.emStrong.lDelim=v(B.emStrong.lDelim).replace(/punct/g,B._punctuation).getRegex(),B.emStrong.rDelimAst=v(B.emStrong.rDelimAst,"g").replace(/punct/g,B._punctuation).getRegex(),B.emStrong.rDelimUnd=v(B.emStrong.rDelimUnd,"g").replace(/punct/g,B._punctuation).getRegex(),B._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,B._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,B._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,B.autolink=v(B.autolink).replace("scheme",B._scheme).replace("email",B._email).getRegex(),B._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,B.tag=v(B.tag).replace("comment",B._comment).replace("attribute",B._attribute).getRegex(),B._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,B._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,B._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,B.link=v(B.link).replace("label",B._label).replace("href",B._href).replace("title",B._title).getRegex(),B.reflink=v(B.reflink).replace("label",B._label).replace("ref",M._label).getRegex(),B.nolink=v(B.nolink).replace("ref",M._label).getRegex(),B.reflinkSearch=v(B.reflinkSearch,"g").replace("reflink",B.reflink).replace("nolink",B.nolink).getRegex(),B.normal=i({},B),B.pedantic=i({},B.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:v(/^!?\[(label)\]\((.*?)\)/).replace("label",B._label).getRegex(),reflink:v(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",B._label).getRegex()}),B.gfm=i({},B.normal,{escape:v(B.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\0?t[t.length-1].raw+="\n":t.push(n);else if(n=this.tokenizer.code(e))e=e.substring(n.raw.length),!(i=t[t.length-1])||"paragraph"!==i.type&&"text"!==i.type?t.push(n):(i.raw+="\n"+n.raw,i.text+="\n"+n.text,this.inlineQueue[this.inlineQueue.length-1].src=i.text);else if(n=this.tokenizer.fences(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.heading(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.hr(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.blockquote(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.list(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.html(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.def(e))e=e.substring(n.raw.length),!(i=t[t.length-1])||"paragraph"!==i.type&&"text"!==i.type?this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title}):(i.raw+="\n"+n.raw,i.text+="\n"+n.raw,this.inlineQueue[this.inlineQueue.length-1].src=i.text);else if(n=this.tokenizer.table(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.lheading(e))e=e.substring(n.raw.length),t.push(n);else if(r=e,this.options.extensions&&this.options.extensions.startBlock&&function(){var t=1/0,n=e.slice(1),i=void 0;a.options.extensions.startBlock.forEach(function(e){"number"==typeof(i=e.call({lexer:this},n))&&i>=0&&(t=Math.min(t,i))}),t<1/0&&t>=0&&(r=e.substring(0,t+1))}(),this.state.top&&(n=this.tokenizer.paragraph(r)))i=t[t.length-1],o&&"paragraph"===i.type?(i.raw+="\n"+n.raw,i.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):t.push(n),o=r.length!==e.length,e=e.substring(n.raw.length);else if(n=this.tokenizer.text(e))e=e.substring(n.raw.length),(i=t[t.length-1])&&"text"===i.type?(i.raw+="\n"+n.raw,i.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):t.push(n);else if(e){var l="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(l);break}throw new Error(l)}return this.state.top=!0,t},o.inline=function(e,t){return void 0===t&&(t=[]),this.inlineQueue.push({src:e,tokens:t}),t},o.inlineTokens=function(e,t){var n,i,r,o=this;void 0===t&&(t=[]);var a,l,s,u=e;if(this.tokens.links){var c=Object.keys(this.tokens.links);if(c.length>0)for(;null!=(a=this.tokenizer.rules.inline.reflinkSearch.exec(u));)c.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(u=u.slice(0,a.index)+"["+E("a",a[0].length-2)+"]"+u.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(a=this.tokenizer.rules.inline.blockSkip.exec(u));)u=u.slice(0,a.index)+"["+E("a",a[0].length-2)+"]"+u.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(a=this.tokenizer.rules.inline.escapedEmSt.exec(u));)u=u.slice(0,a.index+a[0].length-2)+"++"+u.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex),this.tokenizer.rules.inline.escapedEmSt.lastIndex--;for(;e;)if(l||(s=""),l=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(function(i){return!!(n=i.call({lexer:o},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)})))if(n=this.tokenizer.escape(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.tag(e))e=e.substring(n.raw.length),(i=t[t.length-1])&&"text"===n.type&&"text"===i.type?(i.raw+=n.raw,i.text+=n.text):t.push(n);else if(n=this.tokenizer.link(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(n.raw.length),(i=t[t.length-1])&&"text"===n.type&&"text"===i.type?(i.raw+=n.raw,i.text+=n.text):t.push(n);else if(n=this.tokenizer.emStrong(e,u,s))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.codespan(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.br(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.del(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.autolink(e,O))e=e.substring(n.raw.length),t.push(n);else if(this.state.inLink||!(n=this.tokenizer.url(e,O))){if(r=e,this.options.extensions&&this.options.extensions.startInline&&function(){var t=1/0,n=e.slice(1),i=void 0;o.options.extensions.startInline.forEach(function(e){"number"==typeof(i=e.call({lexer:this},n))&&i>=0&&(t=Math.min(t,i))}),t<1/0&&t>=0&&(r=e.substring(0,t+1))}(),n=this.tokenizer.inlineText(r,N))e=e.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(s=n.raw.slice(-1)),l=!0,(i=t[t.length-1])&&"text"===i.type?(i.raw+=n.raw,i.text+=n.text):t.push(n);else if(e){var d="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(d);break}throw new Error(d)}}else e=e.substring(n.raw.length),t.push(n);return t},i=e,r=[{key:"rules",get:function(){return{block:M,inline:B}}}],null&&n(i.prototype,null),r&&n(i,r),Object.defineProperty(i,"prototype",{writable:!1}),e}(),z=function(){function e(e){this.options=e||t.NT}var n=e.prototype;return n.code=function(e,t,n){var i=(t||"").match(/\S*/)[0];if(this.options.highlight){var r=this.options.highlight(e,i);null!=r&&r!==e&&(n=!0,e=r)}return e=e.replace(/\n$/,"")+"\n",i?'
'+(n?e:f(e,!0))+"
\n":"
"+(n?e:f(e,!0))+"
\n"},n.blockquote=function(e){return"
\n"+e+"
\n"},n.html=function(e){return e},n.heading=function(e,t,n,i){return this.options.headerIds?"'+e+"\n":""+e+"\n"},n.hr=function(){return this.options.xhtml?"
\n":"
\n"},n.list=function(e,t,n){var i=t?"ol":"ul";return"<"+i+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"},n.listitem=function(e){return"
  • "+e+"
  • \n"},n.checkbox=function(e){return" "},n.paragraph=function(e){return"

    "+e+"

    \n"},n.table=function(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
    \n"},n.tablerow=function(e){return"\n"+e+"\n"},n.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"},n.strong=function(e){return""+e+""},n.em=function(e){return""+e+""},n.codespan=function(e){return""+e+""},n.br=function(){return this.options.xhtml?"
    ":"
    "},n.del=function(e){return""+e+""},n.link=function(e,t,n){if(null===(e=b(this.options.sanitize,this.options.baseUrl,e)))return n;var i='"+n+""},n.image=function(e,t,n){if(null===(e=b(this.options.sanitize,this.options.baseUrl,e)))return n;var i=''+n+'":">")},n.text=function(e){return e},e}(),H=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,n){return""+n},t.image=function(e,t,n){return""+n},t.br=function(){return""},e}(),R=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var n=e,i=0;if(this.seen.hasOwnProperty(n)){i=this.seen[e];do{n=e+"-"+ ++i}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=i,this.seen[n]=0),n},t.slug=function(e,t){void 0===t&&(t={});var n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)},e}(),P=function(){function e(e){this.options=e||t.NT,this.options.renderer=this.options.renderer||new z,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new H,this.slugger=new R}e.parse=function(t,n){return new e(n).parse(t)},e.parseInline=function(t,n){return new e(n).parseInline(t)};var n=e.prototype;return n.parse=function(e,t){void 0===t&&(t=!0);var n,i,r,o,a,l,s,u,c,d,h,f,p,g,v,x,y,b,D,C="",w=e.length;for(n=0;n0&&"paragraph"===v.tokens[0].type?(v.tokens[0].text=b+" "+v.tokens[0].text,v.tokens[0].tokens&&v.tokens[0].tokens.length>0&&"text"===v.tokens[0].tokens[0].type&&(v.tokens[0].tokens[0].text=b+" "+v.tokens[0].tokens[0].text)):v.tokens.unshift({type:"text",text:b}):g+=b),g+=this.parse(v.tokens,p),c+=this.renderer.listitem(g,y,x);C+=this.renderer.list(c,h,f);continue;case"html":C+=this.renderer.html(d.text);continue;case"paragraph":C+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(c=d.tokens?this.parseInline(d.tokens):d.text;n+1";return t?Promise.resolve(r):n?void n(null,r):r}if(t)return Promise.reject(i);if(!n)throw i;n(i)}}((r=i({},j.defaults,a)).silent,r.async,o);if(null==n)return l(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof n)return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")}(r),r.hooks&&(r.hooks.options=r),o){var s,u=r.highlight;try{r.hooks&&(n=r.hooks.preprocess(n)),s=e(n,r)}catch(e){return l(e)}var c=function(e){var n;if(!e)try{r.walkTokens&&j.walkTokens(s,r.walkTokens),n=t(s,r),r.hooks&&(n=r.hooks.postprocess(n))}catch(t){e=t}return r.highlight=u,e?l(e):o(null,n)};if(!u||u.length<3)return c();if(delete r.highlight,!s.length)return c();var d=0;return j.walkTokens(s,function(e){"code"===e.type&&(d++,setTimeout(function(){u(e.text,e.lang,function(t,n){if(t)return c(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),0===--d&&c()})},0))}),void(0===d&&c())}if(r.async)return Promise.resolve(r.hooks?r.hooks.preprocess(n):n).then(function(t){return e(t,r)}).then(function(e){return r.walkTokens?Promise.all(j.walkTokens(e,r.walkTokens)).then(function(){return e}):e}).then(function(e){return t(e,r)}).then(function(e){return r.hooks?r.hooks.postprocess(e):e}).catch(l);try{r.hooks&&(n=r.hooks.preprocess(n));var h=e(n,r);r.walkTokens&&j.walkTokens(h,r.walkTokens);var p=t(h,r);return r.hooks&&(p=r.hooks.postprocess(p)),p}catch(e){return l(e)}}}function j(e,t,n){return W(I.lex,P.parse)(e,t,n)}_.passThroughHooks=new Set(["preprocess","postprocess"]),j.options=j.setOptions=function(e){var n;return j.defaults=i({},j.defaults,e),n=j.defaults,t.NT=n,j},j.getDefaults=function(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}},j.defaults=t.NT,j.use=function(){for(var e=j.defaults.extensions||{renderers:{},childTokens:{}},t=arguments.length,n=new Array(t),r=0;rc);d++){var h=e.getLine(u++);l=null==l?h:l+"\n"+h}s*=2,t.lastIndex=n.ch;var f=t.exec(l);if(f){var p=l.slice(0,f.index).split("\n"),m=f[0].split("\n"),g=n.line+p.length-1,v=p[p.length-1].length;return{from:i(g,v),to:i(g+m.length-1,1==m.length?v+m[0].length:m[m.length-1].length),match:f}}}}function s(e,t,n){for(var i,r=0;r<=e.length;){t.lastIndex=r;var o=t.exec(e);if(!o)break;var a=o.index+o[0].length;if(a>e.length-n)break;(!i||a>i.index+i[0].length)&&(i=o),r=o.index+1}return i}function u(e,t,n){t=r(t,"g");for(var o=n.line,a=n.ch,l=e.firstLine();o>=l;o--,a=-1){var u=e.getLine(o),c=s(u,t,a<0?0:u.length-a);if(c)return{from:i(o,c.index),to:i(o,c.index+c[0].length),match:c}}}function c(e,t,n){if(!o(t))return u(e,t,n);t=r(t,"gm");for(var a,l=1,c=e.getLine(n.line).length-n.ch,d=n.line,h=e.firstLine();d>=h;){for(var f=0;f=h;f++){var p=e.getLine(d--);a=null==a?p:p+"\n"+a}l*=2;var m=s(a,t,c);if(m){var g=a.slice(0,m.index).split("\n"),v=m[0].split("\n"),x=d+g.length,y=g[g.length-1].length;return{from:i(x,y),to:i(x+v.length-1,1==v.length?y+v[0].length:v[v.length-1].length),match:m}}}}function d(e,t,n,i){if(e.length==t.length)return n;for(var r=0,o=n+Math.max(0,e.length-t.length);;){if(r==o)return r;var a=r+o>>1,l=i(e.slice(0,a)).length;if(l==n)return a;l>n?o=a:r=a+1}}function h(e,r,o,a){if(!r.length)return null;var l=a?t:n,s=l(r).split(/\r|\n\r?/);e:for(var u=o.line,c=o.ch,h=e.lastLine()+1-s.length;u<=h;u++,c=0){var f=e.getLine(u).slice(c),p=l(f);if(1==s.length){var m=p.indexOf(s[0]);if(-1==m)continue e;return o=d(f,p,m,l)+c,{from:i(u,d(f,p,m,l)+c),to:i(u,d(f,p,m+s[0].length,l)+c)}}var g=p.length-s[0].length;if(p.slice(g)==s[0]){for(var v=1;v=h;u--,c=-1){var f=e.getLine(u);c>-1&&(f=f.slice(0,c));var p=l(f);if(1==s.length){var m=p.lastIndexOf(s[0]);if(-1==m)continue e;return{from:i(u,d(f,p,m,l)),to:i(u,d(f,p,m+s[0].length,l))}}var g=s[s.length-1];if(p.slice(0,g.length)==g){var v=1;for(o=u-s.length+1;v(this.doc.getLine(n.line)||"").length&&(n.ch=0,n.line++)),0!=e.cmpPos(n,this.doc.clipPos(n))))return this.atOccurrence=!1;var r=this.matches(t,n);if(this.afterEmptyMatch=r&&0==e.cmpPos(r.from,r.to),r)return this.pos=r,this.atOccurrence=!0,this.pos.match||!0;var o=i(t?this.doc.firstLine():this.doc.lastLine()+1,0);return this.pos={from:o,to:o},this.atOccurrence=!1},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(t,n){if(this.atOccurrence){var r=e.splitLines(t);this.doc.replaceRange(r,this.pos.from,this.pos.to,n),this.pos.to=i(this.pos.from.line+r.length-1,r[r.length-1].length+(1==r.length?this.pos.from.ch:0))}}},e.defineExtension("getSearchCursor",function(e,t,n){return new p(this.doc,e,t,n)}),e.defineDocExtension("getSearchCursor",function(e,t,n){return new p(this,e,t,n)}),e.defineExtension("selectMatches",function(t,n){for(var i=[],r=this.getSearchCursor(t,this.getCursor("from"),n);r.findNext()&&!(e.cmpPos(r.to(),this.getCursor("to"))>0);)i.push({anchor:r.from(),head:r.to()});i.length&&this.setSelections(i,0)})}(n(226))},951:function(e,t,n){!function(e){"use strict";var t=/^(\s*)(>[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/,n=/^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/,i=/[*+-]\s/;function r(e,n){var i=n.line,r=0,o=0,a=t.exec(e.getLine(i)),l=a[1];do{var s=i+(r+=1),u=e.getLine(s),c=t.exec(u);if(c){var d=c[1],h=parseInt(a[3],10)+r-o,f=parseInt(c[3],10),p=f;if(l!==d||isNaN(f)){if(l.length>d.length)return;if(l.lengthf&&(p=h+1),e.replaceRange(u.replace(t,d+p+c[4]+c[5]),{line:s,ch:0},{line:s,ch:u.length})}}while(c)}e.commands.newlineAndIndentContinueMarkdownList=function(o){if(o.getOption("disableInput"))return e.Pass;for(var a=o.listSelections(),l=[],s=0;s\s*$/.test(p),x=!/>\s*$/.test(p);(v||x)&&o.replaceRange("",{line:u.line,ch:0},{line:u.line,ch:u.ch+1}),l[s]="\n"}else{var y=m[1],b=m[5],D=!(i.test(m[2])||m[2].indexOf(">")>=0),C=D?parseInt(m[3],10)+1+m[4]:m[2].replace("x"," ");l[s]="\n"+y+C+b,D&&r(o,u)}}o.replaceSelections(l)}}(n(226))}},t={};function n(i){var r=t[i];if(void 0!==r)return r.exports;var o=t[i]={id:i,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){"use strict";var e,t=n(69),i=n.n(t);n(771),n(387),e=jQuery,Craft.MarkdownField=Garnish.Base.extend({settings:null,editor:null,previewRequestId:0,previewTimeout:null,init:function(t,n){if(this.setSettings(n,Craft.MarkdownField.defaults),this.$textarea=e("#"+t),!this.$textarea.length)return;const r=parseInt(this.$textarea.attr("rows")||8,10),o=this.toolbarItems();this.editor=new(i())({autoDownloadFontAwesome:!1,autoRefresh:{delay:300},autosave:{enabled:!1},element:this.$textarea[0],forceSync:!0,indentWithTabs:!1,minHeight:1.5*Math.max(r,4)+"em",previewImagesInEditor:!1,previewRender:(e,t)=>(this.renderPreview(e,t),null),promptURLs:!0,sideBySideFullscreen:!1,spellChecker:!1,status:!1,syncSideBySidePreviewScroll:!0,toolbar:!(!this.settings.toolbar||!o.length)&&o,uploadImage:!1})},toolbarItems:function(){const e=new Set(this.settings.toolbarButtons??[]),t=[];for(const n of this.toolbarButtonGroups()){const i=n.filter(t=>e.has(t.name));i.length&&(t.length&&t.push("|"),t.push(...i))}return t},toolbarButtonGroups:function(){return[[this.toolbarButton("bold",i().toggleBold,"bold",Craft.t("app","Bold")),this.toolbarButton("italic",i().toggleItalic,"italic",Craft.t("app","Italic")),this.toolbarButton("strikethrough",i().toggleStrikethrough,"strikethrough",Craft.t("app","Strikethrough")),this.toolbarButton("heading",i().toggleHeadingSmaller,"heading",Craft.t("app","Heading")),this.toolbarButton("heading-smaller",i().toggleHeadingSmaller,"heading",Craft.t("app","Smaller Heading")),this.toolbarButton("heading-bigger",i().toggleHeadingBigger,"heading",Craft.t("app","Bigger Heading")),this.toolbarButton("heading-1",i().toggleHeading1,"heading",Craft.t("app","Big Heading")),this.toolbarButton("heading-2",i().toggleHeading2,"heading",Craft.t("app","Medium Heading")),this.toolbarButton("heading-3",i().toggleHeading3,"heading",Craft.t("app","Small Heading"))],[this.toolbarButton("quote",i().toggleBlockquote,"quotes-left",Craft.t("app","Quote")),this.toolbarButton("code",i().toggleCodeBlock,"code",Craft.t("app","Code")),this.toolbarButton("unordered-list",i().toggleUnorderedList,"list-ul",Craft.t("app","Bulleted List")),this.toolbarButton("ordered-list",i().toggleOrderedList,"list-ol",Craft.t("app","Numbered List")),this.toolbarButton("check-list",i().toggleCheckList,"list-check",Craft.t("app","Check List")),this.toolbarButton("clean-block",i().cleanBlock,"eraser",Craft.t("app","Clean Block"))],[this.toolbarButton("link",i().drawLink,"link",Craft.t("app","Link")),this.toolbarButton("image",i().drawImage,"image",Craft.t("app","Image")),this.toolbarButton("table",i().drawTable,"table",Craft.t("app","Table")),this.toolbarButton("horizontal-rule",i().drawHorizontalRule,"minus",Craft.t("app","Horizontal Rule"))],[this.toolbarButton("preview",i().togglePreview,"eye",Craft.t("app","Preview")),this.toolbarButton("side-by-side",i().toggleSideBySide,"split",Craft.t("app","Side-by-side Preview")),this.toolbarButton("fullscreen",i().toggleFullScreen,"expand",Craft.t("app","Full Screen")),this.toolbarButton("guide","https://www.markdownguide.org/basic-syntax/","circle-question",Craft.t("app","Markdown Guide"))],[this.toolbarButton("undo",i().undo,"rotate-left",Craft.t("app","Undo")),this.toolbarButton("redo",i().redo,"rotate-right",Craft.t("app","Redo"))]]},toolbarButton:function(e,t,n,i){return{name:e,action:t,className:`markdown-field-toolbar-button markdown-field-toolbar-${e}`,icon:this.settings.toolbarIcons?.[n]??void 0,title:i,noDisable:["preview","side-by-side","fullscreen","guide","undo","redo"].includes(e),noMobile:["side-by-side","fullscreen"].includes(e)}},renderPreview:function(e,t){const n=++this.previewRequestId;clearTimeout(this.previewTimeout),this.previewTimeout=setTimeout(async()=>{try{const{data:i}=await Craft.sendActionRequest("POST",this.settings.previewAction,{data:{markdown:e,flavor:this.settings.flavor}});n===this.previewRequestId&&(t.innerHTML=i.html)}catch(e){n===this.previewRequestId&&(t.textContent=Craft.t("app","Couldn’t render Markdown preview."))}},this.settings.previewDelay)}},{defaults:{flavor:"gfm",previewAction:"app/render-markdown",previewDelay:250,toolbar:!0,toolbarButtons:["bold","italic","heading","quote","code","unordered-list","ordered-list","link","image","table","preview","side-by-side","fullscreen"],toolbarIcons:{}}})}()}(); +//# sourceMappingURL=MarkdownField.js.map \ No newline at end of file diff --git a/resources/legacy/markdownfield/dist/MarkdownField.js.map b/resources/legacy/markdownfield/dist/MarkdownField.js.map new file mode 100644 index 00000000000..ee8da5b8b0b --- /dev/null +++ b/resources/legacy/markdownfield/dist/MarkdownField.js.map @@ -0,0 +1 @@ +{"version":3,"file":"MarkdownField.js","mappings":"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","sources":["webpack:///../../../../node_modules/codemirror/addon/selection/mark-selection.js","webpack:///../../../../node_modules/easymde/src/js/easymde.js","webpack:///../../../../node_modules/codemirror/addon/display/fullscreen.js","webpack:///../../../../node_modules/codemirror/addon/mode/overlay.js","webpack:///../../../../node_modules/codemirror/addon/display/autorefresh.js","webpack:///../../../../node_modules/codemirror-spell-checker/src/js/spell-checker.js","webpack:///../../../../node_modules/codemirror/lib/codemirror.js","webpack:///../../../../node_modules/typo-js/typo.js","webpack:///../../../../node_modules/vue-style-loader/lib/listToStyles.js","webpack:///../../../../node_modules/vue-style-loader/lib/addStylesClient.js","webpack:///../../../../node_modules/codemirror/mode/markdown/markdown.js","webpack:///./MarkdownField.scss?a762","webpack:///../../../../node_modules/codemirror/mode/gfm/gfm.js","webpack:///../../../../node_modules/codemirror/mode/meta.js","webpack:///../../../../node_modules/codemirror/mode/xml/xml.js","webpack:///../../../../node_modules/easymde/src/js/codemirror/tablist.js","webpack:///../../../../node_modules/easymde/dist/easymde.min.css?a7dd","webpack:///../../../../node_modules/codemirror/addon/display/placeholder.js","webpack:///../../../../node_modules/easymde/node_modules/marked/lib/marked.cjs","webpack:///../../../../node_modules/codemirror/addon/search/searchcursor.js","webpack:///../../../../node_modules/codemirror/addon/edit/continuelist.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./MarkdownField.js"],"sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// Because sometimes you need to mark the selected *text*.\n//\n// Adds an option 'styleSelectedText' which, when enabled, gives\n// selected text the CSS class given as option value, or\n// \"CodeMirror-selectedtext\" when the value is not a string.\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"styleSelectedText\", false, function(cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n if (val && !prev) {\n cm.state.markedSelection = [];\n cm.state.markedSelectionStyle = typeof val == \"string\" ? val : \"CodeMirror-selectedtext\";\n reset(cm);\n cm.on(\"cursorActivity\", onCursorActivity);\n cm.on(\"change\", onChange);\n } else if (!val && prev) {\n cm.off(\"cursorActivity\", onCursorActivity);\n cm.off(\"change\", onChange);\n clear(cm);\n cm.state.markedSelection = cm.state.markedSelectionStyle = null;\n }\n });\n\n function onCursorActivity(cm) {\n if (cm.state.markedSelection)\n cm.operation(function() { update(cm); });\n }\n\n function onChange(cm) {\n if (cm.state.markedSelection && cm.state.markedSelection.length)\n cm.operation(function() { clear(cm); });\n }\n\n var CHUNK_SIZE = 8;\n var Pos = CodeMirror.Pos;\n var cmp = CodeMirror.cmpPos;\n\n function coverRange(cm, from, to, addAt) {\n if (cmp(from, to) == 0) return;\n var array = cm.state.markedSelection;\n var cls = cm.state.markedSelectionStyle;\n for (var line = from.line;;) {\n var start = line == from.line ? from : Pos(line, 0);\n var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line;\n var end = atEnd ? to : Pos(endLine, 0);\n var mark = cm.markText(start, end, {className: cls});\n if (addAt == null) array.push(mark);\n else array.splice(addAt++, 0, mark);\n if (atEnd) break;\n line = endLine;\n }\n }\n\n function clear(cm) {\n var array = cm.state.markedSelection;\n for (var i = 0; i < array.length; ++i) array[i].clear();\n array.length = 0;\n }\n\n function reset(cm) {\n clear(cm);\n var ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++)\n coverRange(cm, ranges[i].from(), ranges[i].to());\n }\n\n function update(cm) {\n if (!cm.somethingSelected()) return clear(cm);\n if (cm.listSelections().length > 1) return reset(cm);\n\n var from = cm.getCursor(\"start\"), to = cm.getCursor(\"end\");\n\n var array = cm.state.markedSelection;\n if (!array.length) return coverRange(cm, from, to);\n\n var coverStart = array[0].find(), coverEnd = array[array.length - 1].find();\n if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE ||\n cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0)\n return reset(cm);\n\n while (cmp(from, coverStart.from) > 0) {\n array.shift().clear();\n coverStart = array[0].find();\n }\n if (cmp(from, coverStart.from) < 0) {\n if (coverStart.to.line - from.line < CHUNK_SIZE) {\n array.shift().clear();\n coverRange(cm, from, coverStart.to, 0);\n } else {\n coverRange(cm, from, coverStart.from, 0);\n }\n }\n\n while (cmp(to, coverEnd.to) < 0) {\n array.pop().clear();\n coverEnd = array[array.length - 1].find();\n }\n if (cmp(to, coverEnd.to) > 0) {\n if (to.line - coverEnd.from.line < CHUNK_SIZE) {\n array.pop().clear();\n coverRange(cm, coverEnd.from, to);\n } else {\n coverRange(cm, coverEnd.to, to);\n }\n }\n }\n});\n","'use strict';\nvar CodeMirror = require('codemirror');\nrequire('codemirror/addon/edit/continuelist.js');\nrequire('./codemirror/tablist');\nrequire('codemirror/addon/display/fullscreen.js');\nrequire('codemirror/mode/markdown/markdown.js');\nrequire('codemirror/addon/mode/overlay.js');\nrequire('codemirror/addon/display/placeholder.js');\nrequire('codemirror/addon/display/autorefresh.js');\nrequire('codemirror/addon/selection/mark-selection.js');\nrequire('codemirror/addon/search/searchcursor.js');\nrequire('codemirror/mode/gfm/gfm.js');\nrequire('codemirror/mode/xml/xml.js');\nvar CodeMirrorSpellChecker = require('codemirror-spell-checker');\nvar marked = require('marked').marked;\n\n\n// Some variables\nvar isMac = /Mac/.test(navigator.platform);\nvar anchorToExternalRegex = new RegExp(/()+?/g);\n\n// Mapping of actions that can be bound to keyboard shortcuts or toolbar buttons\nvar bindings = {\n 'toggleBold': toggleBold,\n 'toggleItalic': toggleItalic,\n 'drawLink': drawLink,\n 'toggleHeadingSmaller': toggleHeadingSmaller,\n 'toggleHeadingBigger': toggleHeadingBigger,\n 'drawImage': drawImage,\n 'toggleBlockquote': toggleBlockquote,\n 'toggleOrderedList': toggleOrderedList,\n 'toggleUnorderedList': toggleUnorderedList,\n 'toggleCheckList': toggleCheckList,\n 'toggleCodeBlock': toggleCodeBlock,\n 'togglePreview': togglePreview,\n 'toggleStrikethrough': toggleStrikethrough,\n 'toggleHeading1': toggleHeading1,\n 'toggleHeading2': toggleHeading2,\n 'toggleHeading3': toggleHeading3,\n 'toggleHeading4': toggleHeading4,\n 'toggleHeading5': toggleHeading5,\n 'toggleHeading6': toggleHeading6,\n 'cleanBlock': cleanBlock,\n 'drawTable': drawTable,\n 'drawHorizontalRule': drawHorizontalRule,\n 'undo': undo,\n 'redo': redo,\n 'toggleSideBySide': toggleSideBySide,\n 'toggleFullScreen': toggleFullScreen,\n};\n\nvar shortcuts = {\n 'toggleBold': 'Cmd-B',\n 'toggleItalic': 'Cmd-I',\n 'drawLink': 'Cmd-K',\n 'toggleHeadingSmaller': 'Cmd-H',\n 'toggleHeadingBigger': 'Shift-Cmd-H',\n 'toggleHeading1': 'Ctrl+Alt+1',\n 'toggleHeading2': 'Ctrl+Alt+2',\n 'toggleHeading3': 'Ctrl+Alt+3',\n 'toggleHeading4': 'Ctrl+Alt+4',\n 'toggleHeading5': 'Ctrl+Alt+5',\n 'toggleHeading6': 'Ctrl+Alt+6',\n 'cleanBlock': 'Cmd-E',\n 'drawImage': 'Cmd-Alt-I',\n 'toggleBlockquote': 'Cmd-\\'',\n 'toggleOrderedList': 'Cmd-Alt-L',\n 'toggleUnorderedList': 'Cmd-L',\n 'toggleCheckList': 'Shift-Cmd-L',\n 'toggleCodeBlock': 'Cmd-Alt-C',\n 'togglePreview': 'Cmd-P',\n 'toggleSideBySide': 'F9',\n 'toggleFullScreen': 'F11',\n};\n\nvar getBindingName = function (f) {\n for (var key in bindings) {\n if (bindings[key] === f) {\n return key;\n }\n }\n return null;\n};\n\nvar isMobile = function () {\n var check = false;\n (function (a) {\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(a.substr(0, 4))) check = true;\n })(navigator.userAgent || navigator.vendor || window.opera);\n return check;\n};\n\n/**\n * Modify HTML to add 'target=\"_blank\"' to links so they open in new tabs by default.\n * @param {string} htmlText - HTML to be modified.\n * @return {string} The modified HTML text.\n */\nfunction addAnchorTargetBlank(htmlText) {\n var match;\n while ((match = anchorToExternalRegex.exec(htmlText)) !== null) {\n // With only one capture group in the RegExp, we can safely take the first index from the match.\n var linkString = match[0];\n\n if (linkString.indexOf('target=') === -1) {\n var fixedLinkString = linkString.replace(/>$/, ' target=\"_blank\">');\n htmlText = htmlText.replace(linkString, fixedLinkString);\n }\n }\n return htmlText;\n}\n\n/**\n * Modify HTML to remove the list-style when rendering checkboxes.\n * @param {string} htmlText - HTML to be modified.\n * @return {string} The modified HTML text.\n */\nfunction removeListStyleWhenCheckbox(htmlText) {\n\n var parser = new DOMParser();\n var htmlDoc = parser.parseFromString(htmlText, 'text/html');\n var listItems = htmlDoc.getElementsByTagName('li');\n\n for (var i = 0; i < listItems.length; i++) {\n var listItem = listItems[i];\n\n for (var j = 0; j < listItem.children.length; j++) {\n var listItemChild = listItem.children[j];\n\n if (listItemChild instanceof HTMLInputElement && listItemChild.type === 'checkbox') {\n // From Github: margin: 0 .2em .25em -1.6em;\n listItem.style.marginLeft = '-1.5em';\n listItem.style.listStyleType = 'none';\n }\n }\n }\n\n return htmlDoc.documentElement.innerHTML;\n}\n\n/**\n * Fix shortcut. Mac use Command, others use Ctrl.\n */\nfunction fixShortcut(name) {\n if (isMac) {\n name = name.replace('Ctrl', 'Cmd');\n } else {\n name = name.replace('Cmd', 'Ctrl');\n }\n return name;\n}\n\n/**\n * Create dropdown block\n */\nfunction createToolbarDropdown(options, enableTooltips, shortcuts, parent) {\n var el = createToolbarButton(options, false, enableTooltips, shortcuts, 'button', parent);\n el.classList.add('easymde-dropdown');\n\n el.onclick = function () {\n el.focus();\n };\n\n var content = document.createElement('div');\n content.className = 'easymde-dropdown-content';\n for (var childrenIndex = 0; childrenIndex < options.children.length; childrenIndex++) {\n\n var child = options.children[childrenIndex];\n var childElement;\n\n if (typeof child === 'string' && child in toolbarBuiltInButtons) {\n childElement = createToolbarButton(toolbarBuiltInButtons[child], true, enableTooltips, shortcuts, 'button', parent);\n } else {\n childElement = createToolbarButton(child, true, enableTooltips, shortcuts, 'button', parent);\n }\n\n childElement.addEventListener('click', function (e) { e.stopPropagation(); }, false);\n content.appendChild(childElement);\n }\n el.appendChild(content);\n return el;\n}\n\n/**\n * Create button element for toolbar.\n */\nfunction createToolbarButton(options, enableActions, enableTooltips, shortcuts, markup, parent) {\n options = options || {};\n var el = document.createElement(markup);\n\n // Add 'custom' attributes as early as possible, so that 'official' attributes will never be overwritten.\n if (options.attributes) {\n for (var attribute in options.attributes) {\n if (Object.prototype.hasOwnProperty.call(options.attributes, attribute)) {\n el.setAttribute(attribute, options.attributes[attribute]);\n }\n }\n }\n\n var classNamePrefix = parent.options.toolbarButtonClassPrefix ? parent.options.toolbarButtonClassPrefix + '-' : '';\n el.className = classNamePrefix + options.name;\n el.setAttribute('type', markup);\n enableTooltips = (enableTooltips == undefined) ? true : enableTooltips;\n\n if (options.text) {\n el.innerText = options.text;\n }\n\n // Properly handle custom shortcuts\n if (options.name && options.name in shortcuts) {\n bindings[options.name] = options.action;\n }\n\n if (options.title && enableTooltips) {\n el.title = createTooltip(options.title, options.action, shortcuts);\n\n if (isMac) {\n el.title = el.title.replace('Ctrl', '⌘');\n el.title = el.title.replace('Alt', '⌥');\n }\n }\n\n if (options.title) {\n el.setAttribute('aria-label', options.title);\n }\n\n if (options.noDisable) {\n el.classList.add('no-disable');\n }\n\n if (options.noMobile) {\n el.classList.add('no-mobile');\n }\n\n // Prevent errors if there is no class name in custom options\n var classNameParts = [];\n if (typeof options.className !== 'undefined') {\n classNameParts = options.className.split(' ');\n }\n\n // Provide backwards compatibility with simple-markdown-editor by adding custom classes to the button.\n var iconClasses = [];\n for (var classNameIndex = 0; classNameIndex < classNameParts.length; classNameIndex++) {\n var classNamePart = classNameParts[classNameIndex];\n // Split icon classes from the button.\n // Regex will detect \"fa\", \"fas\", \"fa-something\" and \"fa-some-icon-1\", but not \"fanfare\".\n if (classNamePart.match(/^fa([srlb]|(-[\\w-]*)|$)/)) {\n iconClasses.push(classNamePart);\n } else {\n el.classList.add(classNamePart);\n }\n }\n\n el.tabIndex = -1;\n\n if (iconClasses.length > 0) {\n // Create icon element and append as a child to the button\n var icon = document.createElement('i');\n for (var iconClassIndex = 0; iconClassIndex < iconClasses.length; iconClassIndex++) {\n var iconClass = iconClasses[iconClassIndex];\n icon.classList.add(iconClass);\n }\n el.appendChild(icon);\n }\n\n // If there is a custom icon markup set, use that\n if (typeof options.icon !== 'undefined') {\n el.innerHTML = options.icon;\n }\n\n if (options.action && enableActions) {\n if (typeof options.action === 'function') {\n el.onclick = function (e) {\n e.preventDefault();\n options.action(parent);\n };\n } else if (typeof options.action === 'string') {\n el.onclick = function (e) {\n e.preventDefault();\n window.open(options.action, '_blank');\n };\n }\n }\n\n return el;\n}\n\nfunction createSep() {\n var el = document.createElement('i');\n el.className = 'separator';\n el.innerHTML = '|';\n return el;\n}\n\nfunction createTooltip(title, action, shortcuts) {\n var actionName;\n var tooltip = title;\n\n if (action) {\n actionName = getBindingName(action);\n if (shortcuts[actionName]) {\n tooltip += ' (' + fixShortcut(shortcuts[actionName]) + ')';\n }\n }\n\n return tooltip;\n}\n\n/**\n * The state of CodeMirror at the given position.\n */\nfunction getState(cm, pos) {\n pos = pos || cm.getCursor('start');\n var stat = cm.getTokenAt(pos);\n if (!stat.type) return {};\n\n var types = stat.type.split(' ');\n\n var ret = {},\n data, text;\n for (var i = 0; i < types.length; i++) {\n data = types[i];\n if (data === 'strong') {\n ret.bold = true;\n } else if (data === 'variable-2') {\n text = cm.getLine(pos.line);\n if (/^\\s*\\d+\\.\\s/.test(text)) {\n ret['ordered-list'] = true;\n } else if (/^\\s*- \\[[ xX]]\\s/.test(text)) {\n ret['check-list'] = true;\n } else {\n ret['unordered-list'] = true;\n }\n } else if (data === 'atom') {\n ret.quote = true;\n } else if (data === 'em') {\n ret.italic = true;\n } else if (data === 'quote') {\n ret.quote = true;\n } else if (data === 'strikethrough') {\n ret.strikethrough = true;\n } else if (data === 'comment') {\n ret.code = true;\n } else if (data === 'link' && !ret.image) {\n ret.link = true;\n } else if (data === 'image') {\n ret.image = true;\n } else if (data.match(/^header(-[1-6])?$/)) {\n ret[data.replace('header', 'heading')] = true;\n }\n }\n return ret;\n}\n\n\n// Saved overflow setting\nvar saved_overflow = '';\n\n/**\n * Toggle full screen of the editor.\n * @param {EasyMDE} editor\n */\nfunction toggleFullScreen(editor) {\n // Set fullscreen\n var cm = editor.codemirror;\n cm.setOption('fullScreen', !cm.getOption('fullScreen'));\n\n\n // Prevent scrolling on body during fullscreen active\n if (cm.getOption('fullScreen')) {\n saved_overflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = saved_overflow;\n }\n\n var wrapper = cm.getWrapperElement();\n var sidebyside = wrapper.nextSibling;\n\n if (sidebyside.classList.contains('editor-preview-active-side')) {\n if (editor.options.sideBySideFullscreen === false) {\n // if side-by-side not-fullscreen ok, apply classes as needed\n var easyMDEContainer = wrapper.parentNode;\n if (cm.getOption('fullScreen')) {\n easyMDEContainer.classList.remove('sided--no-fullscreen');\n } else {\n easyMDEContainer.classList.add('sided--no-fullscreen');\n }\n } else {\n toggleSideBySide(editor);\n }\n }\n\n if (editor.options.onToggleFullScreen) {\n editor.options.onToggleFullScreen(cm.getOption('fullScreen') || false);\n }\n\n // Remove or set maxHeight\n if (typeof editor.options.maxHeight !== 'undefined') {\n if (cm.getOption('fullScreen')) {\n cm.getScrollerElement().style.removeProperty('height');\n sidebyside.style.removeProperty('height');\n } else {\n cm.getScrollerElement().style.height = editor.options.maxHeight;\n editor.setPreviewMaxHeight();\n }\n }\n\n // Update toolbar class\n editor.toolbar_div.classList.toggle('fullscreen');\n\n // Update toolbar button\n if (editor.toolbarElements && editor.toolbarElements.fullscreen) {\n var toolbarButton = editor.toolbarElements.fullscreen;\n toolbarButton.classList.toggle('active');\n }\n}\n\n\n/**\n * Action for toggling bold.\n * @param {EasyMDE} editor\n */\nfunction toggleBold(editor) {\n _toggleBlock(editor, 'bold', editor.options.blockStyles.bold);\n}\n\n\n/**\n * Action for toggling italic.\n * @param {EasyMDE} editor\n */\nfunction toggleItalic(editor) {\n _toggleBlock(editor, 'italic', editor.options.blockStyles.italic);\n}\n\n\n/**\n * Action for toggling strikethrough.\n * @param {EasyMDE} editor\n */\nfunction toggleStrikethrough(editor) {\n _toggleBlock(editor, 'strikethrough', '~~');\n}\n\n/**\n * Action for toggling code block.\n * @param {EasyMDE} editor\n */\nfunction toggleCodeBlock(editor) {\n var fenceCharsToInsert = editor.options.blockStyles.code;\n\n function fencing_line(line) {\n /* return true, if this is a ``` or ~~~ line */\n if (typeof line !== 'object') {\n throw 'fencing_line() takes a \\'line\\' object (not a line number, or line text). Got: ' + typeof line + ': ' + line;\n }\n return line.styles && line.styles[2] && line.styles[2].indexOf('formatting-code-block') !== -1;\n }\n\n function token_state(token) {\n // base goes an extra level deep when mode backdrops are used, e.g. spellchecker on\n return token.state.base.base || token.state.base;\n }\n\n function code_type(cm, line_num, line, firstTok, lastTok) {\n /*\n * Return \"single\", \"indented\", \"fenced\" or false\n *\n * cm and line_num are required. Others are optional for efficiency\n * To check in the middle of a line, pass in firstTok yourself.\n */\n line = line || cm.getLineHandle(line_num);\n firstTok = firstTok || cm.getTokenAt({\n line: line_num,\n ch: 1,\n });\n lastTok = lastTok || (!!line.text && cm.getTokenAt({\n line: line_num,\n ch: line.text.length - 1,\n }));\n var types = firstTok.type ? firstTok.type.split(' ') : [];\n if (lastTok && token_state(lastTok).indentedCode) {\n // have to check last char, since first chars of first line aren\"t marked as indented\n return 'indented';\n } else if (types.indexOf('comment') === -1) {\n // has to be after \"indented\" check, since first chars of first indented line aren\"t marked as such\n return false;\n } else if (token_state(firstTok).fencedChars || token_state(lastTok).fencedChars || fencing_line(line)) {\n return 'fenced';\n } else {\n return 'single';\n }\n }\n\n function insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert) {\n var start_line_sel = cur_start.line + 1,\n end_line_sel = cur_end.line + 1,\n sel_multi = cur_start.line !== cur_end.line,\n repl_start = fenceCharsToInsert + '\\n',\n repl_end = '\\n' + fenceCharsToInsert;\n if (sel_multi) {\n end_line_sel++;\n }\n // handle last char including \\n or not\n if (sel_multi && cur_end.ch === 0) {\n repl_end = fenceCharsToInsert + '\\n';\n end_line_sel--;\n }\n _replaceSelection(cm, false, [repl_start, repl_end]);\n cm.setSelection({\n line: start_line_sel,\n ch: 0,\n }, {\n line: end_line_sel,\n ch: 0,\n });\n }\n\n var cm = editor.codemirror,\n cur_start = cm.getCursor('start'),\n cur_end = cm.getCursor('end'),\n tok = cm.getTokenAt({\n line: cur_start.line,\n ch: cur_start.ch || 1,\n }), // avoid ch 0 which is a cursor pos but not token\n line = cm.getLineHandle(cur_start.line),\n is_code = code_type(cm, cur_start.line, line, tok);\n var block_start, block_end, lineCount;\n\n if (is_code === 'single') {\n // similar to some EasyMDE _toggleBlock logic\n var start = line.text.slice(0, cur_start.ch).replace('`', ''),\n end = line.text.slice(cur_start.ch).replace('`', '');\n cm.replaceRange(start + end, {\n line: cur_start.line,\n ch: 0,\n }, {\n line: cur_start.line,\n ch: 99999999999999,\n });\n cur_start.ch--;\n if (cur_start !== cur_end) {\n cur_end.ch--;\n }\n cm.setSelection(cur_start, cur_end);\n cm.focus();\n } else if (is_code === 'fenced') {\n if (cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n // use selection\n\n // find the fenced line so we know what type it is (tilde, backticks, number of them)\n for (block_start = cur_start.line; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n if (fencing_line(line)) {\n break;\n }\n }\n var fencedTok = cm.getTokenAt({\n line: block_start,\n ch: 1,\n });\n var fence_chars = token_state(fencedTok).fencedChars;\n var start_text, start_line;\n var end_text, end_line;\n // check for selection going up against fenced lines, in which case we don't want to add more fencing\n if (fencing_line(cm.getLineHandle(cur_start.line))) {\n start_text = '';\n start_line = cur_start.line;\n } else if (fencing_line(cm.getLineHandle(cur_start.line - 1))) {\n start_text = '';\n start_line = cur_start.line - 1;\n } else {\n start_text = fence_chars + '\\n';\n start_line = cur_start.line;\n }\n if (fencing_line(cm.getLineHandle(cur_end.line))) {\n end_text = '';\n end_line = cur_end.line;\n if (cur_end.ch === 0) {\n end_line += 1;\n }\n } else if (cur_end.ch !== 0 && fencing_line(cm.getLineHandle(cur_end.line + 1))) {\n end_text = '';\n end_line = cur_end.line + 1;\n } else {\n end_text = fence_chars + '\\n';\n end_line = cur_end.line + 1;\n }\n if (cur_end.ch === 0) {\n // full last line selected, putting cursor at beginning of next\n end_line -= 1;\n }\n cm.operation(function () {\n // end line first, so that line numbers don't change\n cm.replaceRange(end_text, {\n line: end_line,\n ch: 0,\n }, {\n line: end_line + (end_text ? 0 : 1),\n ch: 0,\n });\n cm.replaceRange(start_text, {\n line: start_line,\n ch: 0,\n }, {\n line: start_line + (start_text ? 0 : 1),\n ch: 0,\n });\n });\n cm.setSelection({\n line: start_line + (start_text ? 1 : 0),\n ch: 0,\n }, {\n line: end_line + (start_text ? 1 : -1),\n ch: 0,\n });\n cm.focus();\n } else {\n // no selection, search for ends of this fenced block\n var search_from = cur_start.line;\n if (fencing_line(cm.getLineHandle(cur_start.line))) { // gets a little tricky if cursor is right on a fenced line\n if (code_type(cm, cur_start.line + 1) === 'fenced') {\n block_start = cur_start.line;\n search_from = cur_start.line + 1; // for searching for \"end\"\n } else {\n block_end = cur_start.line;\n search_from = cur_start.line - 1; // for searching for \"start\"\n }\n }\n if (block_start === undefined) {\n for (block_start = search_from; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n if (fencing_line(line)) {\n break;\n }\n }\n }\n if (block_end === undefined) {\n lineCount = cm.lineCount();\n for (block_end = search_from; block_end < lineCount; block_end++) {\n line = cm.getLineHandle(block_end);\n if (fencing_line(line)) {\n break;\n }\n }\n }\n cm.operation(function () {\n cm.replaceRange('', {\n line: block_start,\n ch: 0,\n }, {\n line: block_start + 1,\n ch: 0,\n });\n cm.replaceRange('', {\n line: block_end - 1,\n ch: 0,\n }, {\n line: block_end,\n ch: 0,\n });\n });\n cm.focus();\n }\n } else if (is_code === 'indented') {\n if (cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n // use selection\n block_start = cur_start.line;\n block_end = cur_end.line;\n if (cur_end.ch === 0) {\n block_end--;\n }\n } else {\n // no selection, search for ends of this indented block\n for (block_start = cur_start.line; block_start >= 0; block_start--) {\n line = cm.getLineHandle(block_start);\n if (line.text.match(/^\\s*$/)) {\n // empty or all whitespace - keep going\n continue;\n } else {\n if (code_type(cm, block_start, line) !== 'indented') {\n block_start += 1;\n break;\n }\n }\n }\n lineCount = cm.lineCount();\n for (block_end = cur_start.line; block_end < lineCount; block_end++) {\n line = cm.getLineHandle(block_end);\n if (line.text.match(/^\\s*$/)) {\n // empty or all whitespace - keep going\n continue;\n } else {\n if (code_type(cm, block_end, line) !== 'indented') {\n block_end -= 1;\n break;\n }\n }\n }\n }\n // if we are going to un-indent based on a selected set of lines, and the next line is indented too, we need to\n // insert a blank line so that the next line(s) continue to be indented code\n var next_line = cm.getLineHandle(block_end + 1),\n next_line_last_tok = next_line && cm.getTokenAt({\n line: block_end + 1,\n ch: next_line.text.length - 1,\n }),\n next_line_indented = next_line_last_tok && token_state(next_line_last_tok).indentedCode;\n if (next_line_indented) {\n cm.replaceRange('\\n', {\n line: block_end + 1,\n ch: 0,\n });\n }\n\n for (var i = block_start; i <= block_end; i++) {\n cm.indentLine(i, 'subtract'); // TODO: this doesn't get tracked in the history, so can't be undone :(\n }\n cm.focus();\n } else {\n // insert code formatting\n var no_sel_and_starting_of_line = (cur_start.line === cur_end.line && cur_start.ch === cur_end.ch && cur_start.ch === 0);\n var sel_multi = cur_start.line !== cur_end.line;\n if (no_sel_and_starting_of_line || sel_multi) {\n insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert);\n } else {\n _replaceSelection(cm, false, ['`', '`']);\n }\n }\n}\n\n/**\n * Action for toggling blockquote.\n */\nfunction toggleBlockquote(editor) {\n _toggleLine(editor.codemirror, 'quote');\n}\n\n/**\n * Action for toggling heading size: normal -> h1 -> h2 -> h3 -> h4 -> h5 -> h6 -> normal\n */\nfunction toggleHeadingSmaller(editor) {\n _toggleHeading(editor.codemirror, 'smaller');\n}\n\n/**\n * Action for toggling heading size: normal -> h6 -> h5 -> h4 -> h3 -> h2 -> h1 -> normal\n */\nfunction toggleHeadingBigger(editor) {\n _toggleHeading(editor.codemirror, 'bigger');\n}\n\n/**\n * Action for toggling heading size 1\n */\nfunction toggleHeading1(editor) {\n _toggleHeading(editor.codemirror, undefined, 1);\n}\n\n/**\n * Action for toggling heading size 2\n */\nfunction toggleHeading2(editor) {\n _toggleHeading(editor.codemirror, undefined, 2);\n}\n\n/**\n * Action for toggling heading size 3\n */\nfunction toggleHeading3(editor) {\n _toggleHeading(editor.codemirror, undefined, 3);\n}\n\n/**\n * Action for toggling heading size 4\n */\nfunction toggleHeading4(editor) {\n _toggleHeading(editor.codemirror, undefined, 4);\n}\n\n/**\n * Action for toggling heading size 5\n */\nfunction toggleHeading5(editor) {\n _toggleHeading(editor.codemirror, undefined, 5);\n}\n\n/**\n * Action for toggling heading size 6\n */\nfunction toggleHeading6(editor) {\n _toggleHeading(editor.codemirror, undefined, 6);\n}\n\n\n/**\n * Action for toggling ul.\n */\nfunction toggleUnorderedList(editor) {\n var cm = editor.codemirror;\n\n var listStyle = '*'; // Default\n if (['-', '+', '*'].includes(editor.options.unorderedListStyle)) {\n listStyle = editor.options.unorderedListStyle;\n }\n\n _toggleLine(cm, 'unordered-list', listStyle);\n}\n\n\n/**\n * Action for toggling ol.\n */\nfunction toggleOrderedList(editor) {\n _toggleLine(editor.codemirror, 'ordered-list');\n}\n\nfunction toggleCheckList(editor) {\n _toggleLine(editor.codemirror, 'check-list');\n}\n\n/**\n * Action for clean block (remove headline, list, blockquote code, markers)\n */\nfunction cleanBlock(editor) {\n _cleanBlock(editor.codemirror);\n}\n\n/**\n * Action for drawing a link.\n * @param {EasyMDE} editor\n */\nfunction drawLink(editor) {\n var options = editor.options;\n var url = 'https://';\n if (options.promptURLs) {\n var result = prompt(options.promptTexts.link, url);\n if (!result) {\n return false;\n }\n url = escapePromptURL(result);\n }\n _toggleLink(editor, 'link', options.insertTexts.link, url);\n}\n\n/**\n * Action for drawing an img.\n * @param {EasyMDE} editor\n */\nfunction drawImage(editor) {\n var options = editor.options;\n var url = 'https://';\n if (options.promptURLs) {\n var result = prompt(options.promptTexts.image, url);\n if (!result) {\n return false;\n }\n url = escapePromptURL(result);\n }\n _toggleLink(editor, 'image', options.insertTexts.image, url);\n}\n\n/**\n * Encode and escape URLs to prevent breaking up rendered Markdown links.\n * @param {string} url The url of the link or image\n */\nfunction escapePromptURL(url) {\n return encodeURI(url).replace(/([\\\\()])/g, '\\\\$1');\n}\n\n/**\n * Action for opening the browse-file window to upload an image to a server.\n * @param {EasyMDE} editor The EasyMDE object\n */\nfunction drawUploadedImage(editor) {\n // TODO: Draw the image template with a fake url? ie: '![](importing foo.png...)'\n editor.openBrowseFileWindow();\n}\n\n/**\n * Action executed after an image have been successfully imported on the server.\n * @param {EasyMDE} editor The EasyMDE object\n * @param {string} url The url of the uploaded image\n */\nfunction afterImageUploaded(editor, url) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n var imageName = url.substr(url.lastIndexOf('/') + 1);\n var ext = imageName.substring(imageName.lastIndexOf('.') + 1).replace(/\\?.*$/, '').toLowerCase();\n\n // Check if media is an image\n if (['png', 'jpg', 'jpeg', 'gif', 'svg', 'apng', 'avif', 'webp'].includes(ext)) {\n _replaceSelection(cm, stat.image, options.insertTexts.uploadedImage, url);\n } else {\n var text_link = options.insertTexts.link;\n text_link[0] = '[' + imageName;\n _replaceSelection(cm, stat.link, text_link, url);\n }\n\n // show uploaded image filename for 1000ms\n editor.updateStatusBar('upload-image', editor.options.imageTexts.sbOnUploaded.replace('#image_name#', imageName));\n setTimeout(function () {\n editor.updateStatusBar('upload-image', editor.options.imageTexts.sbInit);\n }, 1000);\n}\n\n/**\n * Action for drawing a table.\n * @param {EasyMDE} editor\n */\nfunction drawTable(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n _replaceSelection(cm, stat.table, options.insertTexts.table);\n}\n\n/**\n * Action for drawing a horizontal rule.\n * @param {EasyMDE} editor\n */\nfunction drawHorizontalRule(editor) {\n var cm = editor.codemirror;\n var stat = getState(cm);\n var options = editor.options;\n _replaceSelection(cm, stat.image, options.insertTexts.horizontalRule);\n}\n\n\n/**\n * Undo action.\n * @param {EasyMDE} editor\n */\nfunction undo(editor) {\n var cm = editor.codemirror;\n cm.undo();\n cm.focus();\n}\n\n\n/**\n * Redo action.\n * @param {EasyMDE} editor\n */\nfunction redo(editor) {\n var cm = editor.codemirror;\n cm.redo();\n cm.focus();\n}\n\n\n/**\n * Toggle side by side preview\n * @param {EasyMDE} editor\n */\nfunction toggleSideBySide(editor) {\n var cm = editor.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n var toolbarButton = editor.toolbarElements && editor.toolbarElements['side-by-side'];\n var useSideBySideListener = false;\n\n var easyMDEContainer = wrapper.parentNode;\n\n if (preview.classList.contains('editor-preview-active-side')) {\n if (editor.options.sideBySideFullscreen === false) {\n // if side-by-side not-fullscreen ok, remove classes when hiding side\n easyMDEContainer.classList.remove('sided--no-fullscreen');\n }\n preview.classList.remove('editor-preview-active-side');\n if (toolbarButton) toolbarButton.classList.remove('active');\n wrapper.classList.remove('CodeMirror-sided');\n } else {\n // When the preview button is clicked for the first time,\n // give some time for the transition from editor.css to fire and the view to slide from right to left,\n // instead of just appearing.\n setTimeout(function () {\n if (!cm.getOption('fullScreen')) {\n if (editor.options.sideBySideFullscreen === false) {\n // if side-by-side not-fullscreen ok, add classes when not fullscreen and showing side\n easyMDEContainer.classList.add('sided--no-fullscreen');\n } else {\n toggleFullScreen(editor);\n }\n }\n preview.classList.add('editor-preview-active-side');\n }, 1);\n if (toolbarButton) toolbarButton.classList.add('active');\n wrapper.classList.add('CodeMirror-sided');\n useSideBySideListener = true;\n }\n\n // Hide normal preview if active\n var previewNormal = wrapper.lastChild;\n if (previewNormal.classList.contains('editor-preview-active')) {\n previewNormal.classList.remove('editor-preview-active');\n var toolbar = editor.toolbarElements.preview;\n var toolbar_div = editor.toolbar_div;\n toolbar.classList.remove('active');\n toolbar_div.classList.remove('disabled-for-preview');\n }\n\n var sideBySideRenderingFunction = function () {\n var newValue = editor.options.previewRender(editor.value(), preview);\n if (newValue != null) {\n preview.innerHTML = newValue;\n }\n };\n\n if (!cm.sideBySideRenderingFunction) {\n cm.sideBySideRenderingFunction = sideBySideRenderingFunction;\n }\n\n if (useSideBySideListener) {\n var newValue = editor.options.previewRender(editor.value(), preview);\n if (newValue != null) {\n preview.innerHTML = newValue;\n }\n cm.on('update', cm.sideBySideRenderingFunction);\n } else {\n cm.off('update', cm.sideBySideRenderingFunction);\n }\n\n // Refresh to fix selection being off (#309)\n cm.refresh();\n}\n\n\n/**\n * Preview action.\n * @param {EasyMDE} editor\n */\nfunction togglePreview(editor) {\n var cm = editor.codemirror;\n var wrapper = cm.getWrapperElement();\n var toolbar_div = editor.toolbar_div;\n var toolbar = editor.options.toolbar ? editor.toolbarElements.preview : false;\n var preview = wrapper.lastChild;\n\n // Turn off side by side if needed\n var sidebyside = cm.getWrapperElement().nextSibling;\n if (sidebyside.classList.contains('editor-preview-active-side'))\n toggleSideBySide(editor);\n\n if (!preview || !preview.classList.contains('editor-preview-full')) {\n\n preview = document.createElement('div');\n preview.className = 'editor-preview-full';\n\n if (editor.options.previewClass) {\n\n if (Array.isArray(editor.options.previewClass)) {\n for (var i = 0; i < editor.options.previewClass.length; i++) {\n preview.classList.add(editor.options.previewClass[i]);\n }\n\n } else if (typeof editor.options.previewClass === 'string') {\n preview.classList.add(editor.options.previewClass);\n }\n }\n\n wrapper.appendChild(preview);\n }\n\n if (preview.classList.contains('editor-preview-active')) {\n preview.classList.remove('editor-preview-active');\n if (toolbar) {\n toolbar.classList.remove('active');\n toolbar_div.classList.remove('disabled-for-preview');\n }\n } else {\n // When the preview button is clicked for the first time,\n // give some time for the transition from editor.css to fire and the view to slide from right to left,\n // instead of just appearing.\n setTimeout(function () {\n preview.classList.add('editor-preview-active');\n }, 1);\n if (toolbar) {\n toolbar.classList.add('active');\n toolbar_div.classList.add('disabled-for-preview');\n }\n }\n\n var preview_result = editor.options.previewRender(editor.value(), preview);\n if (preview_result !== null) {\n preview.innerHTML = preview_result;\n }\n\n}\n\nfunction _replaceSelection(cm, active, startEnd, url) {\n if (cm.getWrapperElement().lastChild.classList.contains('editor-preview-active'))\n return;\n\n var text;\n var start = startEnd[0];\n var end = startEnd[1];\n var startPoint = {},\n endPoint = {};\n Object.assign(startPoint, cm.getCursor('start'));\n Object.assign(endPoint, cm.getCursor('end'));\n if (url) {\n start = start.replace('#url#', url); // url is in start for upload-image\n end = end.replace('#url#', url);\n }\n if (active) {\n text = cm.getLine(startPoint.line);\n start = text.slice(0, startPoint.ch);\n end = text.slice(startPoint.ch);\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0,\n });\n } else {\n text = cm.getSelection();\n cm.replaceSelection(start + text + end);\n\n startPoint.ch += start.length;\n if (startPoint !== endPoint) {\n endPoint.ch += start.length;\n }\n }\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\n\n\nfunction _toggleHeading(cm, direction, size) {\n if (cm.getWrapperElement().lastChild.classList.contains('editor-preview-active'))\n return;\n\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n for (var i = startPoint.line; i <= endPoint.line; i++) {\n (function (i) {\n var text = cm.getLine(i);\n var currHeadingLevel = text.search(/[^#]/);\n\n if (direction !== undefined) {\n if (currHeadingLevel <= 0) {\n if (direction == 'bigger') {\n text = '###### ' + text;\n } else {\n text = '# ' + text;\n }\n } else if (currHeadingLevel == 6 && direction == 'smaller') {\n text = text.substr(7);\n } else if (currHeadingLevel == 1 && direction == 'bigger') {\n text = text.substr(2);\n } else {\n if (direction == 'bigger') {\n text = text.substr(1);\n } else {\n text = '#' + text;\n }\n }\n } else {\n if (currHeadingLevel <= 0) {\n text = '#'.repeat(size) + ' ' + text;\n } else if (currHeadingLevel == size) {\n text = text.substr(currHeadingLevel + 1);\n } else {\n text = '#'.repeat(size) + ' ' + text.substr(currHeadingLevel + 1);\n }\n }\n\n cm.replaceRange(text, {\n line: i,\n ch: 0,\n }, {\n line: i,\n ch: 99999999999999,\n });\n })(i);\n }\n cm.focus();\n}\n\n\nfunction _toggleLine(cm, name, liststyle) {\n if (cm.getWrapperElement().lastChild.classList.contains('editor-preview-active'))\n return;\n\n var listRegexp = /^(\\s*)(\\*|-|\\+|\\d*\\.)(\\s+)/;\n var whitespacesRegexp = /^\\s*/;\n\n var stat = getState(cm);\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n var repl = {\n 'quote': /^(\\s*)>\\s+/,\n 'unordered-list': listRegexp,\n 'ordered-list': listRegexp,\n 'check-list': /^(\\s*)(- \\[[ xX]])(\\s+)/,\n };\n\n var _getChar = function (name, i) {\n var map = {\n 'quote': '>',\n 'unordered-list': liststyle,\n 'ordered-list': '%%i.',\n 'check-list': '- [ ]',\n };\n\n return map[name].replace('%%i', i);\n };\n\n var _checkChar = function (name, char) {\n var map = {\n 'quote': '>',\n 'unordered-list': '\\\\' + liststyle,\n 'ordered-list': '\\\\d+.',\n 'check-list': '- \\\\[[ xX]]',\n };\n var rt = new RegExp(map[name]);\n\n return char && rt.test(char);\n };\n\n var _toggle = function (name, text, untoggleOnly) {\n var arr = listRegexp.exec(text);\n var char = _getChar(name, line);\n if (arr !== null) {\n if (_checkChar(name, arr[2])) {\n char = '';\n }\n text = arr[1] + char + arr[3] + text.replace(whitespacesRegexp, '').replace(repl[name], '$1');\n } else if (untoggleOnly == false) {\n text = char + ' ' + text;\n }\n return text;\n };\n\n var line = 1;\n var listTypes = ['unordered-list', 'ordered-list', 'check-list'];\n var currentType = Object.keys(stat)[0];\n // After selectAll the cursor's start sits at column 0, where getTokenAt\n // yields no type — stat comes back empty and currentType is undefined,\n // making the swap branch below unreachable. Fall back to detecting the\n // type from the first selected line's text.\n if (!listTypes.includes(currentType)) {\n var firstLineText = cm.getLine(startPoint.line);\n if (/^\\s*- \\[[ xX]]\\s/.test(firstLineText)) currentType = 'check-list';\n else if (/^\\s*\\d+\\.\\s/.test(firstLineText)) currentType = 'ordered-list';\n else if (/^\\s*[*\\-+]\\s/.test(firstLineText)) currentType = 'unordered-list';\n }\n for (var i = startPoint.line; i <= endPoint.line; i++) {\n (function (i) {\n var text = cm.getLine(i);\n if (stat[name]) {\n text = text.replace(repl[name], '$1');\n } else if ( listTypes.includes(currentType) && listTypes.includes(name) ) {\n text = text.replace(repl[currentType], '$1');\n text = _toggle(name, text, false);\n line += 1;\n } else {\n text = _toggle(name, text, false);\n line += 1;\n }\n cm.replaceRange(text, {\n line: i,\n ch: 0,\n }, {\n line: i,\n ch: 99999999999999,\n });\n })(i);\n }\n cm.focus();\n}\n\n/**\n * @param {EasyMDE} editor\n * @param {'link' | 'image'} type\n * @param {string} startEnd\n * @param {string} url\n */\nfunction _toggleLink(editor, type, startEnd, url) {\n if (!editor.codemirror || editor.isPreviewActive()) {\n return;\n }\n\n var cm = editor.codemirror;\n var stat = getState(cm);\n var active = stat[type];\n if (!active) {\n _replaceSelection(cm, active, startEnd, url);\n return;\n }\n\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n var text = cm.getLine(startPoint.line);\n var start = text.slice(0, startPoint.ch);\n var end = text.slice(startPoint.ch);\n\n if (type == 'link') {\n start = start.replace(/(.*)[^!]\\[/, '$1');\n } else if (type == 'image') {\n start = start.replace(/(.*)!\\[$/, '$1');\n }\n end = end.replace(/]\\(.*?\\)/, '');\n\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0,\n }, {\n line: startPoint.line,\n ch: 99999999999999,\n });\n\n startPoint.ch -= startEnd[0].length;\n if (startPoint !== endPoint) {\n endPoint.ch -= startEnd[0].length;\n }\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\n\n/**\n * @param {EasyMDE} editor\n */\nfunction _toggleBlock(editor, type, start_chars, end_chars) {\n if (!editor.codemirror || editor.isPreviewActive()) {\n return;\n }\n\n end_chars = (typeof end_chars === 'undefined') ? start_chars : end_chars;\n var cm = editor.codemirror;\n var stat = getState(cm);\n\n var text;\n var start = start_chars;\n var end = end_chars;\n\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n\n if (stat[type]) {\n text = cm.getLine(startPoint.line);\n start = text.slice(0, startPoint.ch);\n end = text.slice(startPoint.ch);\n if (type == 'bold') {\n start = start.replace(/(\\*\\*|__)(?![\\s\\S]*(\\*\\*|__))/, '');\n end = end.replace(/(\\*\\*|__)/, '');\n } else if (type == 'italic') {\n start = start.replace(/(\\*|_)(?![\\s\\S]*(\\*|_))/, '');\n end = end.replace(/(\\*|_)/, '');\n } else if (type == 'strikethrough') {\n start = start.replace(/(\\*\\*|~~)(?![\\s\\S]*(\\*\\*|~~))/, '');\n end = end.replace(/(\\*\\*|~~)/, '');\n }\n cm.replaceRange(start + end, {\n line: startPoint.line,\n ch: 0,\n }, {\n line: startPoint.line,\n ch: 99999999999999,\n });\n\n if (type == 'bold' || type == 'strikethrough') {\n startPoint.ch -= 2;\n if (startPoint !== endPoint) {\n endPoint.ch -= 2;\n }\n } else if (type == 'italic') {\n startPoint.ch -= 1;\n if (startPoint !== endPoint) {\n endPoint.ch -= 1;\n }\n }\n } else {\n text = cm.getSelection();\n if (type == 'bold') {\n text = text.split('**').join('');\n text = text.split('__').join('');\n } else if (type == 'italic') {\n text = text.split('*').join('');\n text = text.split('_').join('');\n } else if (type == 'strikethrough') {\n text = text.split('~~').join('');\n }\n cm.replaceSelection(start + text + end);\n\n startPoint.ch += start_chars.length;\n endPoint.ch = startPoint.ch + text.length;\n }\n\n cm.setSelection(startPoint, endPoint);\n cm.focus();\n}\n\nfunction _cleanBlock(cm) {\n if (cm.getWrapperElement().lastChild.classList.contains('editor-preview-active'))\n return;\n\n var startPoint = cm.getCursor('start');\n var endPoint = cm.getCursor('end');\n var text;\n\n for (var line = startPoint.line; line <= endPoint.line; line++) {\n text = cm.getLine(line);\n text = text.replace(/^[ ]*([# ]+|\\*|-|[> ]+|[0-9]+(.|\\)))[ ]*/, '');\n\n cm.replaceRange(text, {\n line: line,\n ch: 0,\n }, {\n line: line,\n ch: 99999999999999,\n });\n }\n}\n\n/**\n * Convert a number of bytes to a human-readable file size. If you desire\n * to add a space between the value and the unit, you need to add this space\n * to the given units.\n * @param bytes {number} A number of bytes, as integer. Ex: 421137\n * @param units {number[]} An array of human-readable units, ie. [' B', ' K', ' MB']\n * @returns string A human-readable file size. Ex: '412 KB'\n */\nfunction humanFileSize(bytes, units) {\n if (Math.abs(bytes) < 1024) {\n return '' + bytes + units[0];\n }\n var u = 0;\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length);\n return '' + bytes.toFixed(1) + units[u];\n}\n\n// Merge the properties of one object into another.\nfunction _mergeProperties(target, source) {\n for (var property in source) {\n if (Object.prototype.hasOwnProperty.call(source, property)) {\n if (source[property] instanceof Array) {\n target[property] = source[property].concat(target[property] instanceof Array ? target[property] : []);\n } else if (\n source[property] !== null &&\n typeof source[property] === 'object' &&\n source[property].constructor === Object\n ) {\n target[property] = _mergeProperties(target[property] || {}, source[property]);\n } else {\n target[property] = source[property];\n }\n }\n }\n\n return target;\n}\n\n// Merge an arbitrary number of objects into one.\nfunction extend(target) {\n for (var i = 1; i < arguments.length; i++) {\n target = _mergeProperties(target, arguments[i]);\n }\n\n return target;\n}\n\n/* The right word count in respect for CJK. */\nfunction wordCount(data) {\n var pattern = /[a-zA-Z0-9_\\u00A0-\\u02AF\\u0392-\\u03c9\\u0410-\\u04F9]+|[\\u4E00-\\u9FFF\\u3400-\\u4dbf\\uf900-\\ufaff\\u3040-\\u309f\\uac00-\\ud7af]+/g;\n var m = data.match(pattern);\n var count = 0;\n if (m === null) return count;\n for (var i = 0; i < m.length; i++) {\n if (m[i].charCodeAt(0) >= 0x4E00) {\n count += m[i].length;\n } else {\n count += 1;\n }\n }\n return count;\n}\n\nvar iconClassMap = {\n 'bold': 'fa fa-bold',\n 'italic': 'fa fa-italic',\n 'strikethrough': 'fa fa-strikethrough',\n 'heading': 'fa fa-header fa-heading',\n 'heading-smaller': 'fa fa-header fa-heading header-smaller',\n 'heading-bigger': 'fa fa-header fa-heading header-bigger',\n 'heading-1': 'fa fa-header fa-heading header-1',\n 'heading-2': 'fa fa-header fa-heading header-2',\n 'heading-3': 'fa fa-header fa-heading header-3',\n 'code': 'fa fa-code',\n 'quote': 'fa fa-quote-left',\n 'ordered-list': 'fa fa-list-ol',\n 'unordered-list': 'fa fa-list-ul',\n 'check-list': 'fa fa-check-square-o',\n 'clean-block': 'fa fa-eraser',\n 'link': 'fa fa-link',\n 'image': 'fa fa-image',\n 'upload-image': 'fa fa-image',\n 'table': 'fa fa-table',\n 'horizontal-rule': 'fa fa-minus',\n 'preview': 'fa fa-eye',\n 'side-by-side': 'fa fa-columns',\n 'fullscreen': 'fa fa-arrows-alt',\n 'guide': 'fa fa-question-circle',\n 'undo': 'fa fa-undo',\n 'redo': 'fa fa-repeat fa-redo',\n};\n\nvar toolbarBuiltInButtons = {\n 'bold': {\n name: 'bold',\n action: toggleBold,\n className: iconClassMap['bold'],\n title: 'Bold',\n default: true,\n },\n 'italic': {\n name: 'italic',\n action: toggleItalic,\n className: iconClassMap['italic'],\n title: 'Italic',\n default: true,\n },\n 'strikethrough': {\n name: 'strikethrough',\n action: toggleStrikethrough,\n className: iconClassMap['strikethrough'],\n title: 'Strikethrough',\n },\n 'heading': {\n name: 'heading',\n action: toggleHeadingSmaller,\n className: iconClassMap['heading'],\n title: 'Heading',\n default: true,\n },\n 'heading-smaller': {\n name: 'heading-smaller',\n action: toggleHeadingSmaller,\n className: iconClassMap['heading-smaller'],\n title: 'Smaller Heading',\n },\n 'heading-bigger': {\n name: 'heading-bigger',\n action: toggleHeadingBigger,\n className: iconClassMap['heading-bigger'],\n title: 'Bigger Heading',\n },\n 'heading-1': {\n name: 'heading-1',\n action: toggleHeading1,\n className: iconClassMap['heading-1'],\n title: 'Big Heading',\n },\n 'heading-2': {\n name: 'heading-2',\n action: toggleHeading2,\n className: iconClassMap['heading-2'],\n title: 'Medium Heading',\n },\n 'heading-3': {\n name: 'heading-3',\n action: toggleHeading3,\n className: iconClassMap['heading-3'],\n title: 'Small Heading',\n },\n 'separator-1': {\n name: 'separator-1',\n },\n 'code': {\n name: 'code',\n action: toggleCodeBlock,\n className: iconClassMap['code'],\n title: 'Code',\n },\n 'quote': {\n name: 'quote',\n action: toggleBlockquote,\n className: iconClassMap['quote'],\n title: 'Quote',\n default: true,\n },\n 'unordered-list': {\n name: 'unordered-list',\n action: toggleUnorderedList,\n className: iconClassMap['unordered-list'],\n title: 'Generic List',\n default: true,\n },\n 'ordered-list': {\n name: 'ordered-list',\n action: toggleOrderedList,\n className: iconClassMap['ordered-list'],\n title: 'Numbered List',\n default: true,\n },\n 'check-list': {\n name: 'check-list',\n action: toggleCheckList,\n className: iconClassMap['check-list'],\n title: 'Check List',\n default: true,\n },\n 'clean-block': {\n name: 'clean-block',\n action: cleanBlock,\n className: iconClassMap['clean-block'],\n title: 'Clean block',\n },\n 'separator-2': {\n name: 'separator-2',\n },\n 'link': {\n name: 'link',\n action: drawLink,\n className: iconClassMap['link'],\n title: 'Create Link',\n default: true,\n },\n 'image': {\n name: 'image',\n action: drawImage,\n className: iconClassMap['image'],\n title: 'Insert Image',\n default: true,\n },\n 'upload-image': {\n name: 'upload-image',\n action: drawUploadedImage,\n className: iconClassMap['upload-image'],\n title: 'Import an image',\n },\n 'table': {\n name: 'table',\n action: drawTable,\n className: iconClassMap['table'],\n title: 'Insert Table',\n },\n 'horizontal-rule': {\n name: 'horizontal-rule',\n action: drawHorizontalRule,\n className: iconClassMap['horizontal-rule'],\n title: 'Insert Horizontal Line',\n },\n 'separator-3': {\n name: 'separator-3',\n },\n 'preview': {\n name: 'preview',\n action: togglePreview,\n className: iconClassMap['preview'],\n noDisable: true,\n title: 'Toggle Preview',\n default: true,\n },\n 'side-by-side': {\n name: 'side-by-side',\n action: toggleSideBySide,\n className: iconClassMap['side-by-side'],\n noDisable: true,\n noMobile: true,\n title: 'Toggle Side by Side',\n default: true,\n },\n 'fullscreen': {\n name: 'fullscreen',\n action: toggleFullScreen,\n className: iconClassMap['fullscreen'],\n noDisable: true,\n noMobile: true,\n title: 'Toggle Fullscreen',\n default: true,\n },\n 'separator-4': {\n name: 'separator-4',\n },\n 'guide': {\n name: 'guide',\n action: 'https://www.markdownguide.org/basic-syntax/',\n className: iconClassMap['guide'],\n noDisable: true,\n title: 'Markdown Guide',\n default: true,\n },\n 'separator-5': {\n name: 'separator-5',\n },\n 'undo': {\n name: 'undo',\n action: undo,\n className: iconClassMap['undo'],\n noDisable: true,\n title: 'Undo',\n },\n 'redo': {\n name: 'redo',\n action: redo,\n className: iconClassMap['redo'],\n noDisable: true,\n title: 'Redo',\n },\n};\n\nvar insertTexts = {\n link: ['[', '](#url#)'],\n image: ['![', '](#url#)'],\n uploadedImage: ['![](#url#)', ''],\n // uploadedImage: ['![](#url#)\\n', ''], // TODO: New line insertion doesn't work here.\n table: ['', '\\n\\n| Column 1 | Column 2 | Column 3 |\\n| -------- | -------- | -------- |\\n| Text | Text | Text |\\n\\n'],\n horizontalRule: ['', '\\n\\n-----\\n\\n'],\n};\n\nvar promptTexts = {\n link: 'URL for the link:',\n image: 'URL of the image:',\n};\n\nvar timeFormat = {\n locale: 'en-US',\n format: {\n hour: '2-digit',\n minute: '2-digit',\n },\n};\n\nvar blockStyles = {\n 'bold': '**',\n 'code': '```',\n 'italic': '*',\n};\n\n/**\n * Texts displayed to the user (mainly on the status bar) for the import image\n * feature. Can be used for customization or internationalization.\n */\nvar imageTexts = {\n sbInit: 'Attach files by drag and dropping or pasting from clipboard.',\n sbOnDragEnter: 'Drop image to upload it.',\n sbOnDrop: 'Uploading image #images_names#...',\n sbProgress: 'Uploading #file_name#: #progress#%',\n sbOnUploaded: 'Uploaded #image_name#',\n sizeUnits: ' B, KB, MB',\n};\n\n/**\n * Errors displayed to the user, using the `errorCallback` option. Can be used for\n * customization or internationalization.\n */\nvar errorMessages = {\n noFileGiven: 'You must select a file.',\n typeNotAllowed: 'This image type is not allowed.',\n fileTooLarge: 'Image #image_name# is too big (#image_size#).\\n' +\n 'Maximum file size is #image_max_size#.',\n importError: 'Something went wrong when uploading the image #image_name#.',\n};\n\n/**\n * Interface of EasyMDE.\n */\nfunction EasyMDE(options) {\n // Handle options parameter\n options = options || {};\n\n // Used later to refer to it\"s parent\n options.parent = this;\n\n // Check if Font Awesome needs to be auto downloaded\n var autoDownloadFA = true;\n\n if (options.autoDownloadFontAwesome === false) {\n autoDownloadFA = false;\n }\n\n if (options.autoDownloadFontAwesome !== true) {\n var styleSheets = document.styleSheets;\n for (var i = 0; i < styleSheets.length; i++) {\n if (!styleSheets[i].href)\n continue;\n\n if (styleSheets[i].href.indexOf('//maxcdn.bootstrapcdn.com/font-awesome/') > -1) {\n autoDownloadFA = false;\n }\n }\n }\n\n if (autoDownloadFA) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css';\n document.getElementsByTagName('head')[0].appendChild(link);\n }\n\n\n // Find the textarea to use\n if (options.element) {\n this.element = options.element;\n } else if (options.element === null) {\n // This means that the element option was specified, but no element was found\n console.log('EasyMDE: Error. No element was found.');\n return;\n }\n\n\n // Handle toolbar\n if (options.toolbar === undefined) {\n // Initialize\n options.toolbar = [];\n\n\n // Loop over the built in buttons, to get the preferred order\n for (var key in toolbarBuiltInButtons) {\n if (Object.prototype.hasOwnProperty.call(toolbarBuiltInButtons, key)) {\n if (key.indexOf('separator-') != -1) {\n options.toolbar.push('|');\n }\n\n if (toolbarBuiltInButtons[key].default === true || (options.showIcons && options.showIcons.constructor === Array && options.showIcons.indexOf(key) != -1)) {\n options.toolbar.push(key);\n }\n }\n }\n }\n\n // Editor preview styling class.\n if (!Object.prototype.hasOwnProperty.call(options, 'previewClass')) {\n options.previewClass = 'editor-preview';\n }\n\n // Handle status bar\n if (!Object.prototype.hasOwnProperty.call(options, 'status')) {\n options.status = ['autosave', 'lines', 'words', 'cursor'];\n\n if (options.uploadImage) {\n options.status.unshift('upload-image');\n }\n }\n\n\n // Add default preview rendering function\n if (!options.previewRender) {\n options.previewRender = function (plainText) {\n // Note: \"this\" refers to the options object\n return this.parent.markdown(plainText);\n };\n }\n\n\n // Set default options for parsing config\n options.parsingConfig = extend({\n highlightFormatting: true, // needed for toggleCodeBlock to detect types of code\n }, options.parsingConfig || {});\n\n\n // Merging the insertTexts, with the given options\n options.insertTexts = extend({}, insertTexts, options.insertTexts || {});\n\n\n // Merging the promptTexts, with the given options\n options.promptTexts = extend({}, promptTexts, options.promptTexts || {});\n\n\n // Merging the blockStyles, with the given options\n options.blockStyles = extend({}, blockStyles, options.blockStyles || {});\n\n\n if (options.autosave != undefined) {\n // Merging the Autosave timeFormat, with the given options\n options.autosave.timeFormat = extend({}, timeFormat, options.autosave.timeFormat || {});\n }\n\n options.iconClassMap = extend({}, iconClassMap, options.iconClassMap || {});\n\n // Merging the shortcuts, with the given options\n options.shortcuts = extend({}, shortcuts, options.shortcuts || {});\n\n options.maxHeight = options.maxHeight || undefined;\n\n options.direction = options.direction || 'ltr';\n\n if (typeof options.maxHeight !== 'undefined') {\n // Min and max height are equal if maxHeight is set\n options.minHeight = options.maxHeight;\n } else {\n options.minHeight = options.minHeight || '300px';\n }\n\n options.errorCallback = options.errorCallback || function (errorMessage) {\n alert(errorMessage);\n };\n\n // Import-image default configuration\n options.uploadImage = options.uploadImage || false;\n options.imageMaxSize = options.imageMaxSize || 2097152; // 1024 * 1024 * 2\n options.imageAccept = options.imageAccept || 'image/png, image/jpeg, image/gif, image/avif';\n options.imageTexts = extend({}, imageTexts, options.imageTexts || {});\n options.errorMessages = extend({}, errorMessages, options.errorMessages || {});\n options.imagePathAbsolute = options.imagePathAbsolute || false;\n options.imageCSRFName = options.imageCSRFName || 'csrfmiddlewaretoken';\n options.imageCSRFHeader = options.imageCSRFHeader || false;\n options.imageInputName = options.imageInputName || 'image';\n\n\n // Change unique_id to uniqueId for backwards compatibility\n if (options.autosave != undefined && options.autosave.unique_id != undefined && options.autosave.unique_id != '')\n options.autosave.uniqueId = options.autosave.unique_id;\n\n // If overlay mode is specified and combine is not provided, default it to true\n if (options.overlayMode && options.overlayMode.combine === undefined) {\n options.overlayMode.combine = true;\n }\n\n // Update this options\n this.options = options;\n\n\n // Auto render\n this.render();\n\n\n // The codemirror component is only available after rendering\n // so, the setter for the initialValue can only run after\n // the element has been rendered\n if (options.initialValue && (!this.options.autosave || this.options.autosave.foundSavedValue !== true)) {\n this.value(options.initialValue);\n }\n\n if (options.uploadImage) {\n var self = this;\n\n this.codemirror.on('dragenter', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbOnDragEnter);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragend', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n event.stopPropagation();\n event.preventDefault();\n });\n this.codemirror.on('dragleave', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n event.stopPropagation();\n event.preventDefault();\n });\n\n this.codemirror.on('dragover', function (cm, event) {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbOnDragEnter);\n event.stopPropagation();\n event.preventDefault();\n });\n\n this.codemirror.on('drop', function (cm, event) {\n event.stopPropagation();\n event.preventDefault();\n if (options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(options.imageUploadFunction, event.dataTransfer.files);\n } else {\n self.uploadImages(event.dataTransfer.files);\n }\n });\n\n this.codemirror.on('paste', function (cm, event) {\n if (options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(options.imageUploadFunction, event.clipboardData.files);\n } else {\n self.uploadImages(event.clipboardData.files);\n }\n });\n }\n}\n\n/**\n * Upload asynchronously a list of images to a server.\n *\n * Can be triggered by:\n * - drag&drop;\n * - copy-paste;\n * - the browse-file window (opened when the user clicks on the *upload-image* icon).\n * @param {FileList} files The files to upload the the server.\n * @param [onSuccess] {function} see EasyMDE.prototype.uploadImage\n * @param [onError] {function} see EasyMDE.prototype.uploadImage\n */\nEasyMDE.prototype.uploadImages = function (files, onSuccess, onError) {\n if (files.length === 0) {\n return;\n }\n var names = [];\n for (var i = 0; i < files.length; i++) {\n names.push(files[i].name);\n this.uploadImage(files[i], onSuccess, onError);\n }\n this.updateStatusBar('upload-image', this.options.imageTexts.sbOnDrop.replace('#images_names#', names.join(', ')));\n};\n\n/**\n * Upload asynchronously a list of images to a server.\n *\n * Can be triggered by:\n * - drag&drop;\n * - copy-paste;\n * - the browse-file window (opened when the user clicks on the *upload-image* icon).\n * @param imageUploadFunction {Function} The custom function to upload the image passed in options.\n * @param {FileList} files The files to upload the the server.\n */\nEasyMDE.prototype.uploadImagesUsingCustomFunction = function (imageUploadFunction, files) {\n if (files.length === 0) {\n return;\n }\n var names = [];\n for (var i = 0; i < files.length; i++) {\n names.push(files[i].name);\n this.uploadImageUsingCustomFunction(imageUploadFunction, files[i]);\n }\n this.updateStatusBar('upload-image', this.options.imageTexts.sbOnDrop.replace('#images_names#', names.join(', ')));\n};\n\n/**\n * Update an item in the status bar.\n * @param itemName {string} The name of the item to update (ie. 'upload-image', 'autosave', etc.).\n * @param content {string} the new content of the item to write in the status bar.\n */\nEasyMDE.prototype.updateStatusBar = function (itemName, content) {\n if (!this.gui.statusbar) {\n return;\n }\n\n var matchingClasses = this.gui.statusbar.getElementsByClassName(itemName);\n if (matchingClasses.length === 1) {\n this.gui.statusbar.getElementsByClassName(itemName)[0].textContent = content;\n } else if (matchingClasses.length === 0) {\n console.log('EasyMDE: status bar item ' + itemName + ' was not found.');\n } else {\n console.log('EasyMDE: Several status bar items named ' + itemName + ' was found.');\n }\n};\n\n/**\n * Default markdown render.\n */\nEasyMDE.prototype.markdown = function (text) {\n if (marked) {\n // Initialize\n var markedOptions;\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.markedOptions) {\n markedOptions = this.options.renderingConfig.markedOptions;\n } else {\n markedOptions = {};\n }\n\n // Update options\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.singleLineBreaks === false) {\n markedOptions.breaks = false;\n } else {\n markedOptions.breaks = true;\n }\n\n if (this.options && this.options.renderingConfig && this.options.renderingConfig.codeSyntaxHighlighting === true) {\n\n /* Get HLJS from config or window */\n var hljs = this.options.renderingConfig.hljs || window.hljs;\n\n /* Check if HLJS loaded */\n if (hljs) {\n markedOptions.highlight = function (code, language) {\n if (language && hljs.getLanguage(language)) {\n return hljs.highlight(language, code).value;\n } else {\n return hljs.highlightAuto(code).value;\n }\n };\n }\n }\n\n // Set options\n marked.use(markedOptions);\n\n // Convert the markdown to HTML\n var htmlText = marked.parse(text);\n\n // Sanitize HTML\n if (this.options.renderingConfig && typeof this.options.renderingConfig.sanitizerFunction === 'function') {\n htmlText = this.options.renderingConfig.sanitizerFunction.call(this, htmlText);\n }\n\n // Edit the HTML anchors to add 'target=\"_blank\"' by default.\n htmlText = addAnchorTargetBlank(htmlText);\n\n // Remove list-style when rendering checkboxes\n htmlText = removeListStyleWhenCheckbox(htmlText);\n\n return htmlText;\n }\n};\n\n/**\n * Render editor to the given element.\n */\nEasyMDE.prototype.render = function (el) {\n if (!el) {\n el = this.element || document.getElementsByTagName('textarea')[0];\n }\n\n if (this._rendered && this._rendered === el) {\n // Already rendered.\n return;\n }\n\n this.element = el;\n var options = this.options;\n\n var self = this;\n var keyMaps = {};\n\n for (var key in options.shortcuts) {\n // null stands for \"do not bind this command\"\n if (options.shortcuts[key] !== null && bindings[key] !== null) {\n (function (key) {\n keyMaps[fixShortcut(options.shortcuts[key])] = function () {\n var action = bindings[key];\n if (typeof action === 'function') {\n action(self);\n } else if (typeof action === 'string') {\n window.open(action, '_blank');\n }\n };\n })(key);\n }\n }\n\n keyMaps['Enter'] = 'newlineAndIndentContinueMarkdownList';\n keyMaps['Tab'] = 'tabAndIndentMarkdownList';\n keyMaps['Shift-Tab'] = 'shiftTabAndUnindentMarkdownList';\n keyMaps['Esc'] = function (cm) {\n if (cm.getOption('fullScreen')) toggleFullScreen(self);\n };\n\n this.documentOnKeyDown = function (e) {\n e = e || window.event;\n\n if (e.keyCode == 27) {\n if (self.codemirror.getOption('fullScreen')) toggleFullScreen(self);\n }\n };\n document.addEventListener('keydown', this.documentOnKeyDown, false);\n\n var mode, backdrop;\n\n // CodeMirror overlay mode\n if (options.overlayMode) {\n CodeMirror.defineMode('overlay-mode', function (config) {\n return CodeMirror.overlayMode(CodeMirror.getMode(config, options.spellChecker !== false ? 'spell-checker' : 'gfm'), options.overlayMode.mode, options.overlayMode.combine);\n });\n\n mode = 'overlay-mode';\n backdrop = options.parsingConfig;\n backdrop.gitHubSpice = false;\n } else {\n mode = options.parsingConfig;\n mode.name = 'gfm';\n mode.gitHubSpice = false;\n }\n if (options.spellChecker !== false) {\n mode = 'spell-checker';\n backdrop = options.parsingConfig;\n backdrop.name = 'gfm';\n backdrop.gitHubSpice = false;\n\n if (typeof options.spellChecker === 'function') {\n options.spellChecker({\n codeMirrorInstance: CodeMirror,\n });\n } else {\n CodeMirrorSpellChecker({\n codeMirrorInstance: CodeMirror,\n });\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n function configureMouse(cm, repeat, event) {\n return {\n addNew: false,\n };\n }\n\n this.codemirror = CodeMirror.fromTextArea(el, {\n mode: mode,\n backdrop: backdrop,\n theme: (options.theme != undefined) ? options.theme : 'easymde',\n tabSize: (options.tabSize != undefined) ? options.tabSize : 2,\n indentUnit: (options.tabSize != undefined) ? options.tabSize : 2,\n indentWithTabs: (options.indentWithTabs === false) ? false : true,\n lineNumbers: (options.lineNumbers === true) ? true : false,\n autofocus: (options.autofocus === true) ? true : false,\n extraKeys: keyMaps,\n direction: options.direction,\n lineWrapping: (options.lineWrapping === false) ? false : true,\n allowDropFileTypes: ['text/plain'],\n placeholder: options.placeholder || el.getAttribute('placeholder') || '',\n styleSelectedText: (options.styleSelectedText != undefined) ? options.styleSelectedText : !isMobile(),\n scrollbarStyle: (options.scrollbarStyle != undefined) ? options.scrollbarStyle : 'native',\n configureMouse: configureMouse,\n inputStyle: (options.inputStyle != undefined) ? options.inputStyle : isMobile() ? 'contenteditable' : 'textarea',\n spellcheck: (options.nativeSpellcheck != undefined) ? options.nativeSpellcheck : true,\n autoRefresh: (options.autoRefresh != undefined) ? options.autoRefresh : false,\n });\n\n this.codemirror.getScrollerElement().style.minHeight = options.minHeight;\n\n if (typeof options.maxHeight !== 'undefined') {\n this.codemirror.getScrollerElement().style.height = options.maxHeight;\n }\n\n if (options.forceSync === true) {\n var cm = this.codemirror;\n cm.on('change', function () {\n cm.save();\n });\n }\n\n this.gui = {};\n\n // Wrap Codemirror with container before create toolbar, etc,\n // to use with sideBySideFullscreen option.\n var easyMDEContainer = document.createElement('div');\n easyMDEContainer.classList.add('EasyMDEContainer');\n easyMDEContainer.setAttribute('role', 'application');\n var cmWrapper = this.codemirror.getWrapperElement();\n cmWrapper.parentNode.insertBefore(easyMDEContainer, cmWrapper);\n easyMDEContainer.appendChild(cmWrapper);\n\n if (options.toolbar !== false) {\n this.gui.toolbar = this.createToolbar();\n }\n if (options.status !== false) {\n this.gui.statusbar = this.createStatusbar();\n }\n if (options.autosave != undefined && options.autosave.enabled === true) {\n this.autosave(); // use to load localstorage content\n this.codemirror.on('change', function () {\n clearTimeout(self._autosave_timeout);\n self._autosave_timeout = setTimeout(function () {\n self.autosave();\n }, self.options.autosave.submit_delay || self.options.autosave.delay || 1000);\n });\n }\n\n function calcHeight(naturalWidth, naturalHeight) {\n var height;\n var viewportWidth = window.getComputedStyle(document.querySelector('.CodeMirror-sizer')).width.replace('px', '');\n if (naturalWidth < viewportWidth) {\n height = naturalHeight + 'px';\n } else {\n height = (naturalHeight / naturalWidth * 100) + '%';\n }\n return height;\n }\n\n var _vm = this;\n\n\n function assignImageBlockAttributes(parentEl, img) {\n var url = (new URL(img.url, document.baseURI)).href;\n parentEl.setAttribute('data-img-src', url);\n parentEl.setAttribute('style', '--bg-image:url(' + url + ');--width:' + img.naturalWidth + 'px;--height:' + calcHeight(img.naturalWidth, img.naturalHeight));\n _vm.codemirror.setSize();\n }\n\n function handleImages() {\n if (!options.previewImagesInEditor) {\n return;\n }\n\n easyMDEContainer.querySelectorAll('.cm-image-marker').forEach(function (e) {\n var parentEl = e.parentElement;\n if (!parentEl.innerText.match(/^!\\[.*?\\]\\(.*\\)/g)) {\n // if img pasted on the same line with other text, don't preview, preview only images on separate line\n return;\n }\n if (!parentEl.hasAttribute('data-img-src')) {\n var srcAttr = parentEl.innerText.match(/!\\[.*?\\]\\((.*?)\\)/); // might require better parsing according to markdown spec\n if (!window.EMDEimagesCache) {\n window.EMDEimagesCache = {};\n }\n\n if (srcAttr && srcAttr.length >= 2) {\n var keySrc = srcAttr[1];\n\n if (options.imagesPreviewHandler) {\n var newSrc = options.imagesPreviewHandler(srcAttr[1]);\n // defensive check making sure the handler provided by the user returns a string\n if (typeof newSrc === 'string') {\n keySrc = newSrc;\n }\n }\n\n if (!window.EMDEimagesCache[keySrc]) {\n window.EMDEimagesCache[keySrc] = {};\n var img = document.createElement('img');\n img.onload = function () {\n window.EMDEimagesCache[keySrc] = {\n naturalWidth: img.naturalWidth,\n naturalHeight: img.naturalHeight,\n url: keySrc,\n };\n assignImageBlockAttributes(parentEl, window.EMDEimagesCache[keySrc]);\n };\n img.src = keySrc;\n } else {\n assignImageBlockAttributes(parentEl, window.EMDEimagesCache[keySrc]);\n }\n }\n }\n });\n }\n\n this.codemirror.on('update', function () {\n handleImages();\n });\n\n this.gui.sideBySide = this.createSideBySide();\n this._rendered = this.element;\n\n if (options.autofocus === true || el.autofocus) {\n this.codemirror.focus();\n }\n\n // Fixes CodeMirror bug (#344)\n var temp_cm = this.codemirror;\n setTimeout(function () {\n temp_cm.refresh();\n }.bind(temp_cm), 0);\n};\n\nEasyMDE.prototype.cleanup = function () {\n document.removeEventListener('keydown', this.documentOnKeyDown);\n};\n\n// Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem throw QuotaExceededError. We're going to detect this and set a variable accordingly.\nfunction isLocalStorageAvailable() {\n if (typeof localStorage === 'object') {\n try {\n localStorage.setItem('smde_localStorage', 1);\n localStorage.removeItem('smde_localStorage');\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n\n return true;\n}\n\nEasyMDE.prototype.autosave = function () {\n if (isLocalStorageAvailable()) {\n var easyMDE = this;\n\n if (this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == '') {\n console.log('EasyMDE: You must set a uniqueId to use the autosave feature');\n return;\n }\n\n if (this.options.autosave.binded !== true) {\n if (easyMDE.element.form != null && easyMDE.element.form != undefined) {\n easyMDE.element.form.addEventListener('submit', function () {\n clearTimeout(easyMDE.autosaveTimeoutId);\n easyMDE.autosaveTimeoutId = undefined;\n\n localStorage.removeItem('smde_' + easyMDE.options.autosave.uniqueId);\n });\n }\n\n this.options.autosave.binded = true;\n }\n\n if (this.options.autosave.loaded !== true) {\n if (typeof localStorage.getItem('smde_' + this.options.autosave.uniqueId) == 'string' && localStorage.getItem('smde_' + this.options.autosave.uniqueId) != '') {\n this.codemirror.setValue(localStorage.getItem('smde_' + this.options.autosave.uniqueId));\n this.options.autosave.foundSavedValue = true;\n }\n\n this.options.autosave.loaded = true;\n }\n\n var value = easyMDE.value();\n if (value !== '') {\n localStorage.setItem('smde_' + this.options.autosave.uniqueId, value);\n } else {\n localStorage.removeItem('smde_' + this.options.autosave.uniqueId);\n }\n\n var el = document.getElementById('autosaved');\n if (el != null && el != undefined && el != '') {\n var d = new Date();\n var dd = new Intl.DateTimeFormat([this.options.autosave.timeFormat.locale, 'en-US'], this.options.autosave.timeFormat.format).format(d);\n var save = this.options.autosave.text == undefined ? 'Autosaved: ' : this.options.autosave.text;\n\n el.innerHTML = save + dd;\n }\n } else {\n console.log('EasyMDE: localStorage not available, cannot autosave');\n }\n};\n\nEasyMDE.prototype.clearAutosavedValue = function () {\n if (isLocalStorageAvailable()) {\n if (this.options.autosave == undefined || this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == '') {\n console.log('EasyMDE: You must set a uniqueId to clear the autosave value');\n return;\n }\n\n localStorage.removeItem('smde_' + this.options.autosave.uniqueId);\n } else {\n console.log('EasyMDE: localStorage not available, cannot autosave');\n }\n};\n\n/**\n * Open the browse-file window to upload an image to a server.\n * @param [onSuccess] {function} see EasyMDE.prototype.uploadImage\n * @param [onError] {function} see EasyMDE.prototype.uploadImage\n */\nEasyMDE.prototype.openBrowseFileWindow = function (onSuccess, onError) {\n var self = this;\n var imageInput = this.gui.toolbar.getElementsByClassName('imageInput')[0];\n imageInput.click(); //dispatchEvent(new MouseEvent('click')); // replaced with click() for IE11 compatibility.\n function onChange(event) {\n if (self.options.imageUploadFunction) {\n self.uploadImagesUsingCustomFunction(self.options.imageUploadFunction, event.target.files);\n } else {\n self.uploadImages(event.target.files, onSuccess, onError);\n }\n imageInput.removeEventListener('change', onChange);\n }\n\n imageInput.addEventListener('change', onChange);\n};\n\n/**\n * Upload an image to the server.\n *\n * @param file {File} The image to upload, as a HTML5 File object (https://developer.mozilla.org/en-US/docs/Web/API/File)\n * @param [onSuccess] {function} A callback function to execute after the image has been successfully uploaded, with one parameter:\n * - url (string): The URL of the uploaded image.\n * @param [onError] {function} A callback function to execute when the image upload fails, with one parameter:\n * - error (string): the detailed error to display to the user (based on messages from options.errorMessages).\n */\nEasyMDE.prototype.uploadImage = function (file, onSuccess, onError) {\n var self = this;\n onSuccess = onSuccess || function onSuccess(imageUrl) {\n afterImageUploaded(self, imageUrl);\n };\n\n function onErrorSup(errorMessage) {\n // show error on status bar and reset after 10000ms\n self.updateStatusBar('upload-image', errorMessage);\n\n setTimeout(function () {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n }, 10000);\n\n // run custom error handler\n if (onError && typeof onError === 'function') {\n onError(errorMessage);\n }\n // run error handler from options, this alerts the message.\n self.options.errorCallback(errorMessage);\n }\n\n function fillErrorMessage(errorMessage) {\n var units = self.options.imageTexts.sizeUnits.split(',');\n return errorMessage\n .replace('#image_name#', file.name)\n .replace('#image_size#', humanFileSize(file.size, units))\n .replace('#image_max_size#', humanFileSize(self.options.imageMaxSize, units));\n }\n\n if (file.size > this.options.imageMaxSize) {\n onErrorSup(fillErrorMessage(this.options.errorMessages.fileTooLarge));\n return;\n }\n\n var formData = new FormData();\n formData.append('image', file);\n\n // insert CSRF body token if provided in config.\n if (self.options.imageCSRFToken && !self.options.imageCSRFHeader) {\n formData.append(self.options.imageCSRFName, self.options.imageCSRFToken);\n }\n\n var request = new XMLHttpRequest();\n request.upload.onprogress = function (event) {\n if (event.lengthComputable) {\n var progress = '' + Math.round((event.loaded * 100) / event.total);\n self.updateStatusBar('upload-image', self.options.imageTexts.sbProgress.replace('#file_name#', file.name).replace('#progress#', progress));\n }\n };\n request.open('POST', this.options.imageUploadEndpoint);\n\n // insert CSRF header token if provided in config.\n if (self.options.imageCSRFToken && self.options.imageCSRFHeader) {\n request.setRequestHeader(self.options.imageCSRFName, self.options.imageCSRFToken);\n }\n\n request.onload = function () {\n try {\n var response = JSON.parse(this.responseText);\n } catch (error) {\n console.error('EasyMDE: The server did not return a valid json.');\n onErrorSup(fillErrorMessage(self.options.errorMessages.importError));\n return;\n }\n if (this.status === 200 && response && !response.error && response.data && response.data.filePath) {\n onSuccess((self.options.imagePathAbsolute ? '' : (window.location.origin + '/')) + response.data.filePath);\n } else {\n if (response.error && response.error in self.options.errorMessages) { // preformatted error message\n onErrorSup(fillErrorMessage(self.options.errorMessages[response.error]));\n } else if (response.error) { // server side generated error message\n onErrorSup(fillErrorMessage(response.error));\n } else { //unknown error\n console.error('EasyMDE: Received an unexpected response after uploading the image.'\n + this.status + ' (' + this.statusText + ')');\n onErrorSup(fillErrorMessage(self.options.errorMessages.importError));\n }\n }\n };\n\n request.onerror = function (event) {\n console.error('EasyMDE: An unexpected error occurred when trying to upload the image.'\n + event.target.status + ' (' + event.target.statusText + ')');\n onErrorSup(self.options.errorMessages.importError);\n };\n\n request.send(formData);\n\n};\n\n/**\n * Upload an image to the server using a custom upload function.\n *\n * @param imageUploadFunction {Function} The custom function to upload the image passed in options\n * @param file {File} The image to upload, as a HTML5 File object (https://developer.mozilla.org/en-US/docs/Web/API/File).\n */\nEasyMDE.prototype.uploadImageUsingCustomFunction = function (imageUploadFunction, file) {\n var self = this;\n\n function onSuccess(imageUrl) {\n afterImageUploaded(self, imageUrl);\n }\n\n function onError(errorMessage) {\n var filledErrorMessage = fillErrorMessage(errorMessage);\n // show error on status bar and reset after 10000ms\n self.updateStatusBar('upload-image', filledErrorMessage);\n\n setTimeout(function () {\n self.updateStatusBar('upload-image', self.options.imageTexts.sbInit);\n }, 10000);\n\n // run error handler from options, this alerts the message.\n self.options.errorCallback(filledErrorMessage);\n }\n\n function fillErrorMessage(errorMessage) {\n var units = self.options.imageTexts.sizeUnits.split(',');\n return errorMessage\n .replace('#image_name#', file.name)\n .replace('#image_size#', humanFileSize(file.size, units))\n .replace('#image_max_size#', humanFileSize(self.options.imageMaxSize, units));\n }\n\n imageUploadFunction.apply(this, [file, onSuccess, onError]);\n};\n\nEasyMDE.prototype.setPreviewMaxHeight = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n\n // Calc preview max height\n var paddingTop = parseInt(window.getComputedStyle(wrapper).paddingTop);\n var borderTopWidth = parseInt(window.getComputedStyle(wrapper).borderTopWidth);\n var optionsMaxHeight = parseInt(this.options.maxHeight);\n var wrapperMaxHeight = optionsMaxHeight + paddingTop * 2 + borderTopWidth * 2;\n var previewMaxHeight = wrapperMaxHeight.toString() + 'px';\n\n preview.style.height = previewMaxHeight;\n};\n\nEasyMDE.prototype.createSideBySide = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n\n if (!preview || !preview.classList.contains('editor-preview-side')) {\n preview = document.createElement('div');\n preview.className = 'editor-preview-side';\n\n if (this.options.previewClass) {\n\n if (Array.isArray(this.options.previewClass)) {\n for (var i = 0; i < this.options.previewClass.length; i++) {\n preview.classList.add(this.options.previewClass[i]);\n }\n\n } else if (typeof this.options.previewClass === 'string') {\n preview.classList.add(this.options.previewClass);\n }\n }\n\n wrapper.parentNode.insertBefore(preview, wrapper.nextSibling);\n }\n\n if (typeof this.options.maxHeight !== 'undefined') {\n this.setPreviewMaxHeight();\n }\n\n if (this.options.syncSideBySidePreviewScroll === false) return preview;\n // Syncs scroll editor -> preview\n var cScroll = false;\n var pScroll = false;\n cm.on('scroll', function (v) {\n if (cScroll) {\n cScroll = false;\n return;\n }\n pScroll = true;\n var height = v.getScrollInfo().height - v.getScrollInfo().clientHeight;\n var ratio = parseFloat(v.getScrollInfo().top) / height;\n var move = (preview.scrollHeight - preview.clientHeight) * ratio;\n preview.scrollTop = move;\n });\n\n // Syncs scroll preview -> editor\n preview.onscroll = function () {\n if (pScroll) {\n pScroll = false;\n return;\n }\n cScroll = true;\n var height = preview.scrollHeight - preview.clientHeight;\n var ratio = parseFloat(preview.scrollTop) / height;\n var move = (cm.getScrollInfo().height - cm.getScrollInfo().clientHeight) * ratio;\n cm.scrollTo(0, move);\n };\n return preview;\n};\n\nEasyMDE.prototype.createToolbar = function (items) {\n items = items || this.options.toolbar;\n\n if (!items || items.length === 0) {\n return;\n }\n var i;\n for (i = 0; i < items.length; i++) {\n if (toolbarBuiltInButtons[items[i]] != undefined) {\n items[i] = toolbarBuiltInButtons[items[i]];\n }\n }\n\n var bar = document.createElement('div');\n bar.className = 'editor-toolbar';\n bar.setAttribute('role', 'toolbar');\n\n var self = this;\n\n var toolbarData = {};\n self.toolbar = items;\n\n for (i = 0; i < items.length; i++) {\n if (items[i].name == 'guide' && self.options.toolbarGuideIcon === false)\n continue;\n\n if (self.options.hideIcons && self.options.hideIcons.indexOf(items[i].name) != -1)\n continue;\n\n // Fullscreen does not work well on mobile devices (even tablets)\n // In the future, hopefully this can be resolved\n if ((items[i].name == 'fullscreen' || items[i].name == 'side-by-side') && isMobile())\n continue;\n\n\n // Don't include trailing separators\n if (items[i] === '|') {\n var nonSeparatorIconsFollow = false;\n\n for (var x = (i + 1); x < items.length; x++) {\n if (items[x] !== '|' && (!self.options.hideIcons || self.options.hideIcons.indexOf(items[x].name) == -1)) {\n nonSeparatorIconsFollow = true;\n }\n }\n\n if (!nonSeparatorIconsFollow)\n continue;\n }\n\n\n // Create the icon and append to the toolbar\n (function (item) {\n var el;\n if (item === '|') {\n el = createSep();\n } else if (item.children) {\n el = createToolbarDropdown(item, self.options.toolbarTips, self.options.shortcuts, self);\n } else {\n el = createToolbarButton(item, true, self.options.toolbarTips, self.options.shortcuts, 'button', self);\n }\n\n\n toolbarData[item.name || item] = el;\n bar.appendChild(el);\n\n // Create the input element (ie. ), used among\n // with the 'import-image' icon to open the browse-file window.\n if (item.name === 'upload-image') {\n var imageInput = document.createElement('input');\n imageInput.className = 'imageInput';\n imageInput.type = 'file';\n imageInput.multiple = true;\n imageInput.name = self.options.imageInputName;\n imageInput.accept = self.options.imageAccept;\n imageInput.style.display = 'none';\n imageInput.style.opacity = 0;\n bar.appendChild(imageInput);\n }\n })(items[i]);\n }\n\n self.toolbar_div = bar;\n self.toolbarElements = toolbarData;\n\n var cm = this.codemirror;\n cm.on('cursorActivity', function () {\n var stat = getState(cm);\n\n for (var key in toolbarData) {\n (function (key) {\n var el = toolbarData[key];\n if (stat[key]) {\n el.classList.add('active');\n } else if (key != 'fullscreen' && key != 'side-by-side') {\n el.classList.remove('active');\n }\n })(key);\n }\n });\n\n var cmWrapper = cm.getWrapperElement();\n cmWrapper.parentNode.insertBefore(bar, cmWrapper);\n return bar;\n};\n\nEasyMDE.prototype.createStatusbar = function (status) {\n // Initialize\n status = status || this.options.status;\n var options = this.options;\n var cm = this.codemirror;\n\n // Make sure the status variable is valid\n if (!status || status.length === 0) {\n return;\n }\n\n // Set up the built-in items\n var items = [];\n var i, onUpdate, onActivity, defaultValue;\n\n for (i = 0; i < status.length; i++) {\n // Reset some values\n onUpdate = undefined;\n onActivity = undefined;\n defaultValue = undefined;\n\n\n // Handle if custom or not\n if (typeof status[i] === 'object') {\n items.push({\n className: status[i].className,\n defaultValue: status[i].defaultValue,\n onUpdate: status[i].onUpdate,\n onActivity: status[i].onActivity,\n });\n } else {\n var name = status[i];\n\n if (name === 'words') {\n defaultValue = function (el) {\n el.innerHTML = wordCount(cm.getValue());\n };\n onUpdate = function (el) {\n el.innerHTML = wordCount(cm.getValue());\n };\n } else if (name === 'lines') {\n defaultValue = function (el) {\n el.innerHTML = cm.lineCount();\n };\n onUpdate = function (el) {\n el.innerHTML = cm.lineCount();\n };\n } else if (name === 'cursor') {\n defaultValue = function (el) {\n el.innerHTML = '1:1';\n };\n onActivity = function (el) {\n var pos = cm.getCursor();\n var posLine = pos.line + 1;\n var posColumn = pos.ch + 1;\n el.innerHTML = posLine + ':' + posColumn;\n };\n } else if (name === 'autosave') {\n defaultValue = function (el) {\n if (options.autosave != undefined && options.autosave.enabled === true) {\n el.setAttribute('id', 'autosaved');\n }\n };\n } else if (name === 'upload-image') {\n defaultValue = function (el) {\n el.innerHTML = options.imageTexts.sbInit;\n };\n }\n\n items.push({\n className: name,\n defaultValue: defaultValue,\n onUpdate: onUpdate,\n onActivity: onActivity,\n });\n }\n }\n\n\n // Create element for the status bar\n var bar = document.createElement('div');\n bar.className = 'editor-statusbar';\n\n\n // Create a new span for each item\n for (i = 0; i < items.length; i++) {\n // Store in temporary variable\n var item = items[i];\n\n\n // Create span element\n var el = document.createElement('span');\n el.className = item.className;\n\n\n // Ensure the defaultValue is a function\n if (typeof item.defaultValue === 'function') {\n item.defaultValue(el);\n }\n\n\n // Ensure the onUpdate is a function\n if (typeof item.onUpdate === 'function') {\n // Create a closure around the span of the current action, then execute the onUpdate handler\n this.codemirror.on('update', (function (el, item) {\n return function () {\n item.onUpdate(el);\n };\n }(el, item)));\n }\n if (typeof item.onActivity === 'function') {\n // Create a closure around the span of the current action, then execute the onActivity handler\n this.codemirror.on('cursorActivity', (function (el, item) {\n return function () {\n item.onActivity(el);\n };\n }(el, item)));\n }\n\n\n // Append the item to the status bar\n bar.appendChild(el);\n }\n\n\n // Insert the status bar into the DOM\n var cmWrapper = this.codemirror.getWrapperElement();\n cmWrapper.parentNode.insertBefore(bar, cmWrapper.nextSibling);\n return bar;\n};\n\n/**\n * Get or set the text content.\n */\nEasyMDE.prototype.value = function (val) {\n var cm = this.codemirror;\n if (val === undefined) {\n return cm.getValue();\n } else {\n cm.getDoc().setValue(val);\n if (this.isPreviewActive()) {\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.lastChild;\n var preview_result = this.options.previewRender(val, preview);\n if (preview_result !== null) {\n preview.innerHTML = preview_result;\n }\n\n }\n return this;\n }\n};\n\n\n/**\n * Bind static methods for exports.\n */\nEasyMDE.toggleBold = toggleBold;\nEasyMDE.toggleItalic = toggleItalic;\nEasyMDE.toggleStrikethrough = toggleStrikethrough;\nEasyMDE.toggleBlockquote = toggleBlockquote;\nEasyMDE.toggleHeadingSmaller = toggleHeadingSmaller;\nEasyMDE.toggleHeadingBigger = toggleHeadingBigger;\nEasyMDE.toggleHeading1 = toggleHeading1;\nEasyMDE.toggleHeading2 = toggleHeading2;\nEasyMDE.toggleHeading3 = toggleHeading3;\nEasyMDE.toggleHeading4 = toggleHeading4;\nEasyMDE.toggleHeading5 = toggleHeading5;\nEasyMDE.toggleHeading6 = toggleHeading6;\nEasyMDE.toggleCodeBlock = toggleCodeBlock;\nEasyMDE.toggleUnorderedList = toggleUnorderedList;\nEasyMDE.toggleOrderedList = toggleOrderedList;\nEasyMDE.toggleCheckList = toggleCheckList;\nEasyMDE.cleanBlock = cleanBlock;\nEasyMDE.drawLink = drawLink;\nEasyMDE.drawImage = drawImage;\nEasyMDE.drawUploadedImage = drawUploadedImage;\nEasyMDE.drawTable = drawTable;\nEasyMDE.drawHorizontalRule = drawHorizontalRule;\nEasyMDE.undo = undo;\nEasyMDE.redo = redo;\nEasyMDE.togglePreview = togglePreview;\nEasyMDE.toggleSideBySide = toggleSideBySide;\nEasyMDE.toggleFullScreen = toggleFullScreen;\n\n/**\n * Bind instance methods for exports.\n */\nEasyMDE.prototype.toggleBold = function () {\n toggleBold(this);\n};\nEasyMDE.prototype.toggleItalic = function () {\n toggleItalic(this);\n};\nEasyMDE.prototype.toggleStrikethrough = function () {\n toggleStrikethrough(this);\n};\nEasyMDE.prototype.toggleBlockquote = function () {\n toggleBlockquote(this);\n};\nEasyMDE.prototype.toggleHeadingSmaller = function () {\n toggleHeadingSmaller(this);\n};\nEasyMDE.prototype.toggleHeadingBigger = function () {\n toggleHeadingBigger(this);\n};\nEasyMDE.prototype.toggleHeading1 = function () {\n toggleHeading1(this);\n};\nEasyMDE.prototype.toggleHeading2 = function () {\n toggleHeading2(this);\n};\nEasyMDE.prototype.toggleHeading3 = function () {\n toggleHeading3(this);\n};\nEasyMDE.prototype.toggleHeading4 = function () {\n toggleHeading4(this);\n};\nEasyMDE.prototype.toggleHeading5 = function () {\n toggleHeading5(this);\n};\nEasyMDE.prototype.toggleHeading6 = function () {\n toggleHeading6(this);\n};\nEasyMDE.prototype.toggleCodeBlock = function () {\n toggleCodeBlock(this);\n};\nEasyMDE.prototype.toggleUnorderedList = function () {\n toggleUnorderedList(this);\n};\nEasyMDE.prototype.toggleOrderedList = function () {\n toggleOrderedList(this);\n};\nEasyMDE.prototype.toggleCheckList = function () {\n toggleCheckList(this);\n};\nEasyMDE.prototype.cleanBlock = function () {\n cleanBlock(this);\n};\nEasyMDE.prototype.drawLink = function () {\n drawLink(this);\n};\nEasyMDE.prototype.drawImage = function () {\n drawImage(this);\n};\nEasyMDE.prototype.drawUploadedImage = function () {\n drawUploadedImage(this);\n};\nEasyMDE.prototype.drawTable = function () {\n drawTable(this);\n};\nEasyMDE.prototype.drawHorizontalRule = function () {\n drawHorizontalRule(this);\n};\nEasyMDE.prototype.undo = function () {\n undo(this);\n};\nEasyMDE.prototype.redo = function () {\n redo(this);\n};\nEasyMDE.prototype.togglePreview = function () {\n togglePreview(this);\n};\nEasyMDE.prototype.toggleSideBySide = function () {\n toggleSideBySide(this);\n};\nEasyMDE.prototype.toggleFullScreen = function () {\n toggleFullScreen(this);\n};\n\nEasyMDE.prototype.isPreviewActive = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.lastChild;\n\n return preview.classList.contains('editor-preview-active');\n};\n\nEasyMDE.prototype.isSideBySideActive = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var preview = wrapper.nextSibling;\n\n return preview.classList.contains('editor-preview-active-side');\n};\n\nEasyMDE.prototype.isFullscreenActive = function () {\n var cm = this.codemirror;\n\n return cm.getOption('fullScreen');\n};\n\nEasyMDE.prototype.getState = function () {\n var cm = this.codemirror;\n\n return getState(cm);\n};\n\nEasyMDE.prototype.toTextArea = function () {\n var cm = this.codemirror;\n var wrapper = cm.getWrapperElement();\n var easyMDEContainer = wrapper.parentNode;\n\n if (easyMDEContainer) {\n if (this.gui.toolbar) {\n easyMDEContainer.removeChild(this.gui.toolbar);\n }\n if (this.gui.statusbar) {\n easyMDEContainer.removeChild(this.gui.statusbar);\n }\n if (this.gui.sideBySide) {\n easyMDEContainer.removeChild(this.gui.sideBySide);\n }\n }\n\n // Unwrap easyMDEcontainer before codemirror toTextArea() call\n easyMDEContainer.parentNode.insertBefore(wrapper, easyMDEContainer);\n easyMDEContainer.remove();\n\n cm.toTextArea();\n\n if (this.autosaveTimeoutId) {\n clearTimeout(this.autosaveTimeoutId);\n this.autosaveTimeoutId = undefined;\n this.clearAutosavedValue();\n }\n};\n\nmodule.exports = EasyMDE;\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"fullScreen\", false, function(cm, val, old) {\n if (old == CodeMirror.Init) old = false;\n if (!old == !val) return;\n if (val) setFullscreen(cm);\n else setNormal(cm);\n });\n\n function setFullscreen(cm) {\n var wrap = cm.getWrapperElement();\n cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset,\n width: wrap.style.width, height: wrap.style.height};\n wrap.style.width = \"\";\n wrap.style.height = \"auto\";\n wrap.className += \" CodeMirror-fullscreen\";\n document.documentElement.style.overflow = \"hidden\";\n cm.refresh();\n }\n\n function setNormal(cm) {\n var wrap = cm.getWrapperElement();\n wrap.className = wrap.className.replace(/\\s*CodeMirror-fullscreen\\b/, \"\");\n document.documentElement.style.overflow = \"\";\n var info = cm.state.fullScreenRestore;\n wrap.style.width = info.width; wrap.style.height = info.height;\n window.scrollTo(info.scrollLeft, info.scrollTop);\n cm.refresh();\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.overlayMode = function(base, overlay, combine) {\n return {\n startState: function() {\n return {\n base: CodeMirror.startState(base),\n overlay: CodeMirror.startState(overlay),\n basePos: 0, baseCur: null,\n overlayPos: 0, overlayCur: null,\n streamSeen: null\n };\n },\n copyState: function(state) {\n return {\n base: CodeMirror.copyState(base, state.base),\n overlay: CodeMirror.copyState(overlay, state.overlay),\n basePos: state.basePos, baseCur: null,\n overlayPos: state.overlayPos, overlayCur: null\n };\n },\n\n token: function(stream, state) {\n if (stream != state.streamSeen ||\n Math.min(state.basePos, state.overlayPos) < stream.start) {\n state.streamSeen = stream;\n state.basePos = state.overlayPos = stream.start;\n }\n\n if (stream.start == state.basePos) {\n state.baseCur = base.token(stream, state.base);\n state.basePos = stream.pos;\n }\n if (stream.start == state.overlayPos) {\n stream.pos = stream.start;\n state.overlayCur = overlay.token(stream, state.overlay);\n state.overlayPos = stream.pos;\n }\n stream.pos = Math.min(state.basePos, state.overlayPos);\n\n // state.overlay.combineTokens always takes precedence over combine,\n // unless set to null\n if (state.overlayCur == null) return state.baseCur;\n else if (state.baseCur != null &&\n state.overlay.combineTokens ||\n combine && state.overlay.combineTokens == null)\n return state.baseCur + \" \" + state.overlayCur;\n else return state.overlayCur;\n },\n\n indent: base.indent && function(state, textAfter, line) {\n return base.indent(state.base, textAfter, line);\n },\n electricChars: base.electricChars,\n\n innerMode: function(state) { return {state: state.base, mode: base}; },\n\n blankLine: function(state) {\n var baseToken, overlayToken;\n if (base.blankLine) baseToken = base.blankLine(state.base);\n if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n\n return overlayToken == null ?\n baseToken :\n (combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken);\n }\n };\n};\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"))\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod)\n else // Plain browser env\n mod(CodeMirror)\n})(function(CodeMirror) {\n \"use strict\"\n\n CodeMirror.defineOption(\"autoRefresh\", false, function(cm, val) {\n if (cm.state.autoRefresh) {\n stopListening(cm, cm.state.autoRefresh)\n cm.state.autoRefresh = null\n }\n if (val && cm.display.wrapper.offsetHeight == 0)\n startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250})\n })\n\n function startListening(cm, state) {\n function check() {\n if (cm.display.wrapper.offsetHeight) {\n stopListening(cm, state)\n if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight)\n cm.refresh()\n } else {\n state.timeout = setTimeout(check, state.delay)\n }\n }\n state.timeout = setTimeout(check, state.delay)\n state.hurry = function() {\n clearTimeout(state.timeout)\n state.timeout = setTimeout(check, 50)\n }\n CodeMirror.on(window, \"mouseup\", state.hurry)\n CodeMirror.on(window, \"keyup\", state.hurry)\n }\n\n function stopListening(_cm, state) {\n clearTimeout(state.timeout)\n CodeMirror.off(window, \"mouseup\", state.hurry)\n CodeMirror.off(window, \"keyup\", state.hurry)\n }\n});\n","// Use strict mode (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)\n\"use strict\";\n\n\n// Requires\nvar Typo = require(\"typo-js\");\n\n\n// Create function\nfunction CodeMirrorSpellChecker(options) {\n\t// Initialize\n\toptions = options || {};\n\n\n\t// Verify\n\tif(typeof options.codeMirrorInstance !== \"function\" || typeof options.codeMirrorInstance.defineMode !== \"function\") {\n\t\tconsole.log(\"CodeMirror Spell Checker: You must provide an instance of CodeMirror via the option `codeMirrorInstance`\");\n\t\treturn;\n\t}\n\n\n\t// Because some browsers don't support this functionality yet\n\tif(!String.prototype.includes) {\n\t\tString.prototype.includes = function() {\n\t\t\t\"use strict\";\n\t\t\treturn String.prototype.indexOf.apply(this, arguments) !== -1;\n\t\t};\n\t}\n\n\n\t// Define the new mode\n\toptions.codeMirrorInstance.defineMode(\"spell-checker\", function(config) {\n\t\t// Load AFF/DIC data\n\t\tif(!CodeMirrorSpellChecker.aff_loading) {\n\t\t\tCodeMirrorSpellChecker.aff_loading = true;\n\t\t\tvar xhr_aff = new XMLHttpRequest();\n\t\t\txhr_aff.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff\", true);\n\t\t\txhr_aff.onload = function() {\n\t\t\t\tif(xhr_aff.readyState === 4 && xhr_aff.status === 200) {\n\t\t\t\t\tCodeMirrorSpellChecker.aff_data = xhr_aff.responseText;\n\t\t\t\t\tCodeMirrorSpellChecker.num_loaded++;\n\n\t\t\t\t\tif(CodeMirrorSpellChecker.num_loaded == 2) {\n\t\t\t\t\t\tCodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n\t\t\t\t\t\t\tplatform: \"any\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\txhr_aff.send(null);\n\t\t}\n\n\t\tif(!CodeMirrorSpellChecker.dic_loading) {\n\t\t\tCodeMirrorSpellChecker.dic_loading = true;\n\t\t\tvar xhr_dic = new XMLHttpRequest();\n\t\t\txhr_dic.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic\", true);\n\t\t\txhr_dic.onload = function() {\n\t\t\t\tif(xhr_dic.readyState === 4 && xhr_dic.status === 200) {\n\t\t\t\t\tCodeMirrorSpellChecker.dic_data = xhr_dic.responseText;\n\t\t\t\t\tCodeMirrorSpellChecker.num_loaded++;\n\n\t\t\t\t\tif(CodeMirrorSpellChecker.num_loaded == 2) {\n\t\t\t\t\t\tCodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n\t\t\t\t\t\t\tplatform: \"any\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\txhr_dic.send(null);\n\t\t}\n\n\n\t\t// Define what separates a word\n\t\tvar rx_word = \"!\\\"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~ \";\n\n\n\t\t// Create the overlay and such\n\t\tvar overlay = {\n\t\t\ttoken: function(stream) {\n\t\t\t\tvar ch = stream.peek();\n\t\t\t\tvar word = \"\";\n\n\t\t\t\tif(rx_word.includes(ch)) {\n\t\t\t\t\tstream.next();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\twhile((ch = stream.peek()) != null && !rx_word.includes(ch)) {\n\t\t\t\t\tword += ch;\n\t\t\t\t\tstream.next();\n\t\t\t\t}\n\n\t\t\t\tif(CodeMirrorSpellChecker.typo && !CodeMirrorSpellChecker.typo.check(word))\n\t\t\t\t\treturn \"spell-error\"; // CSS class: cm-spell-error\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\tvar mode = options.codeMirrorInstance.getMode(\n\t\t\tconfig, config.backdrop || \"text/plain\"\n\t\t);\n\n\t\treturn options.codeMirrorInstance.overlayMode(mode, overlay, true);\n\t});\n}\n\n\n// Initialize data globally to reduce memory consumption\nCodeMirrorSpellChecker.num_loaded = 0;\nCodeMirrorSpellChecker.aff_loading = false;\nCodeMirrorSpellChecker.dic_loading = false;\nCodeMirrorSpellChecker.aff_data = \"\";\nCodeMirrorSpellChecker.dic_data = \"\";\nCodeMirrorSpellChecker.typo;\n\n\n// Export\nmodule.exports = CodeMirrorSpellChecker;","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// This is CodeMirror (https://codemirror.net/5), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n var userAgent = navigator.userAgent;\n var platform = navigator.platform;\n\n var gecko = /gecko\\/\\d/i.test(userAgent);\n var ie_upto10 = /MSIE \\d/.test(userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n var edge = /Edge\\/(\\d+)/.exec(userAgent);\n var ie = ie_upto10 || ie_11up || edge;\n var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n var webkit = !edge && /WebKit\\//.test(userAgent);\n var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n var chrome = !edge && /Chrome\\/(\\d+)/.exec(userAgent);\n var chrome_version = chrome && +chrome[1];\n var presto = /Opera\\//.test(userAgent);\n var safari = /Apple Computer/.test(navigator.vendor);\n var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n var phantom = /PhantomJS/.test(userAgent);\n\n var ios = safari && (/Mobile\\/\\w+/.test(userAgent) || navigator.maxTouchPoints > 2);\n var android = /Android/.test(userAgent);\n // This is woefully incomplete. Suggestions for alternative methods welcome.\n var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n var mac = ios || /Mac/.test(platform);\n var chromeOS = /\\bCrOS\\b/.test(userAgent);\n var windows = /win/i.test(platform);\n\n var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n if (presto_version) { presto_version = Number(presto_version[1]); }\n if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n var captureRightClick = gecko || (ie && ie_version >= 9);\n\n function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n var rmClass = function(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n };\n\n function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count)\n { e.removeChild(e.firstChild); }\n return e\n }\n\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e)\n }\n\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) { e.className = className; }\n if (style) { e.style.cssText = style; }\n if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n return e\n }\n // wrapper for elt, which removes the elt from the accessibility tree\n function eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e\n }\n\n var range;\n if (document.createRange) { range = function(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r\n }; }\n else { range = function(node, start, end) {\n var r = document.body.createTextRange();\n try { r.moveToElementText(node.parentNode); }\n catch(e) { return r }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r\n }; }\n\n function contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n { child = child.parentNode; }\n if (parent.contains)\n { return parent.contains(child) }\n do {\n if (child.nodeType == 11) { child = child.host; }\n if (child == parent) { return true }\n } while (child = child.parentNode)\n }\n\n function activeElt(rootNode) {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var doc = rootNode.ownerDocument || rootNode;\n var activeElement;\n try {\n activeElement = rootNode.activeElement;\n } catch(e) {\n activeElement = doc.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n { activeElement = activeElement.shadowRoot.activeElement; }\n return activeElement\n }\n\n function addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n }\n function joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++)\n { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n return b\n }\n\n var selectInput = function(node) { node.select(); };\n if (ios) // Mobile Safari apparently has a bug where select() is broken.\n { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n else if (ie) // Suppress mysterious IE10 errors\n { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n function doc(cm) { return cm.display.wrapper.ownerDocument }\n\n function root(cm) {\n return rootNode(cm.display.wrapper)\n }\n\n function rootNode(element) {\n // Detect modern browsers (2017+).\n return element.getRootNode ? element.getRootNode() : element.ownerDocument\n }\n\n function win(cm) { return doc(cm).defaultView }\n\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function(){return f.apply(null, args)}\n }\n\n function copyObj(obj, target, overwrite) {\n if (!target) { target = {}; }\n for (var prop in obj)\n { if (Object.prototype.hasOwnProperty.call(obj, prop) && (overwrite !== false || !Object.prototype.hasOwnProperty.call(target, prop)))\n { target[prop] = obj[prop]; } }\n return target\n }\n\n // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n function countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) { end = string.length; }\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end)\n { return n + (end - i) }\n n += nextTab - i;\n n += tabSize - (n % tabSize);\n i = nextTab + 1;\n }\n }\n\n var Delayed = function() {\n this.id = null;\n this.f = null;\n this.time = 0;\n this.handler = bind(this.onTimeout, this);\n };\n Delayed.prototype.onTimeout = function (self) {\n self.id = 0;\n if (self.time <= +new Date) {\n self.f();\n } else {\n setTimeout(self.handler, self.time - +new Date);\n }\n };\n Delayed.prototype.set = function (ms, f) {\n this.f = f;\n var time = +new Date + ms;\n if (!this.id || time < this.time) {\n clearTimeout(this.id);\n this.id = setTimeout(this.handler, ms);\n this.time = time;\n }\n };\n\n function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i)\n { if (array[i] == elt) { return i } }\n return -1\n }\n\n // Number of pixels added to scroller and sizer to hide scrollbar\n var scrollerGap = 50;\n\n // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n // Reused option objects for setSelection & friends\n var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) { nextTab = string.length; }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal)\n { return pos + Math.min(skipped, goal - col) }\n col += nextTab - pos;\n col += tabSize - (col % tabSize);\n pos = nextTab + 1;\n if (col >= goal) { return pos }\n }\n }\n\n var spaceStrs = [\"\"];\n function spaceStr(n) {\n while (spaceStrs.length <= n)\n { spaceStrs.push(lst(spaceStrs) + \" \"); }\n return spaceStrs[n]\n }\n\n function lst(arr) { return arr[arr.length-1] }\n\n function map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n return out\n }\n\n function insertSorted(array, value, score) {\n var pos = 0, priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n array.splice(pos, 0, value);\n }\n\n function nothing() {}\n\n function createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n if (props) { copyObj(props, inst); }\n return inst\n }\n\n var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n function isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" &&\n (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n }\n function isWordChar(ch, helper) {\n if (!helper) { return isWordCharBasic(ch) }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n return helper.test(ch)\n }\n\n function isEmpty(obj) {\n for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n return true\n }\n\n // Extending unicode characters. A series of a non-extending char +\n // any number of extending chars is treated as a single unit as far\n // as editing and measuring is concerned. This is not fully correct,\n // since some scripts/fonts/browsers also treat other configurations\n // of code points as a group.\n 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]/;\n function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n function skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n return pos\n }\n\n // Returns the value from the range [`from`; `to`] that satisfies\n // `pred` and is closest to `from`. Assumes that at least `to`\n // satisfies `pred`. Supports `from` being greater than `to`.\n function findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n for (;;) {\n if (from == to) { return from }\n var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) { return pred(mid) ? from : to }\n if (pred(mid)) { to = mid; }\n else { from = mid + dir; }\n }\n }\n\n // BIDI HELPERS\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) { return f(from, to, \"ltr\", 0) }\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n if (!found) { f(from, to, \"ltr\"); }\n }\n\n var bidiOther = null;\n function getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < ch && cur.to > ch) { return i }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") { found = i; }\n else { bidiOther = i; }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") { found = i; }\n else { bidiOther = i; }\n }\n }\n return found != null ? found : bidiOther\n }\n\n // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n\n // One-char codes used for character types:\n // L (L): Left-to-Right\n // R (R): Right-to-Left\n // r (AL): Right-to-Left Arabic\n // 1 (EN): European Number\n // + (ES): European Number Separator\n // % (ET): European Number Terminator\n // n (AN): Arabic Number\n // , (CS): Common Number Separator\n // m (NSM): Non-Spacing Mark\n // b (BN): Boundary Neutral\n // s (B): Paragraph Separator\n // t (S): Segment Separator\n // w (WS): Whitespace\n // N (ON): Other Neutrals\n\n // Returns null if characters are ordered as they appear\n // (left-to-right), or an array of sections ({from, to, level}\n // objects) in the order in which they occur visually.\n var bidiOrdering = (function() {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6f9\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n function charType(code) {\n if (code <= 0xf7) { return lowTypes.charAt(code) }\n else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n else if (code == 0x200c) { return \"b\" }\n else { return \"L\" }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from; this.to = to;\n }\n\n return function(str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n var len = str.length, types = [];\n for (var i = 0; i < len; ++i)\n { types.push(charType(str.charCodeAt(i))); }\n\n // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n if (type == \"m\") { types[i$1] = prev; }\n else { prev = type; }\n }\n\n // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n }\n\n // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n prev$1 = type$2;\n }\n\n // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n if (type$3 == \",\") { types[i$4] = \"N\"; }\n else if (type$3 == \"%\") {\n var end = (void 0);\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n for (var j = i$4; j < end; ++j) { types[j] = replace; }\n i$4 = end - 1;\n }\n }\n\n // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n else if (isStrong.test(type$4)) { cur$1 = type$4; }\n }\n\n // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = (void 0);\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n i$6 = end$1 - 1;\n }\n }\n\n // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n var order = [], m;\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7, at = order.length, isRTL = direction == \"rtl\" ? 1 : 0;\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }\n var nstart = j$2;\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n at += isRTL;\n pos = j$2;\n } else { ++j$2; }\n }\n if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n }\n }\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order\n }\n })();\n\n // Get the bidi ordering for the given line (and cache it). Returns\n // false for lines that are fully left-to-right, and an array of\n // BidiSpan objects otherwise.\n function getOrder(line, direction) {\n var order = line.order;\n if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n return order\n }\n\n // EVENT HANDLING\n\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n var noHandlers = [];\n\n var on = function(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers || (emitter._handlers = {});\n map[type] = (map[type] || noHandlers).concat(f);\n }\n };\n\n function getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers\n }\n\n function off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers, arr = map && map[type];\n if (arr) {\n var index = indexOf(arr, f);\n if (index > -1)\n { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n }\n }\n }\n\n function signal(emitter, type /*, values...*/) {\n var handlers = getHandlers(emitter, type);\n if (!handlers.length) { return }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n }\n\n // The DOM events that CodeMirror handles can be overridden by\n // registering a (non-DOM) handler on the editor for the event name,\n // and preventDefault-ing the event in that handler.\n function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\")\n { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore\n }\n\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) { return }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n { set.push(arr[i]); } }\n }\n\n function hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0\n }\n\n // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n function eventMixin(ctor) {\n ctor.prototype.on = function(type, f) {on(this, type, f);};\n ctor.prototype.off = function(type, f) {off(this, type, f);};\n }\n\n // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n function e_preventDefault(e) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n }\n function e_stopPropagation(e) {\n if (e.stopPropagation) { e.stopPropagation(); }\n else { e.cancelBubble = true; }\n }\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n }\n function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n function e_target(e) {return e.target || e.srcElement}\n function e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) { b = 1; }\n else if (e.button & 2) { b = 3; }\n else if (e.button & 4) { b = 2; }\n }\n if (mac && e.ctrlKey && b == 1) { b = 3; }\n return b\n }\n\n // Detect drag-and-drop\n var dragAndDrop = function() {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) { return false }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div\n }();\n\n var zwspSupported;\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0)\n { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node\n }\n\n // Feature-detect IE's crummy client rect reporting for bidi text\n var badBidiRects;\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) { return badBidiRects }\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n return badBidiRects = (r1.right - r0.right < 3)\n }\n\n // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0, result = [], l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) { nl = string.length; }\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n return result\n } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n var hasSelection = window.getSelection ? function (te) {\n try { return te.selectionStart != te.selectionEnd }\n catch(e) { return false }\n } : function (te) {\n var range;\n try {range = te.ownerDocument.selection.createRange();}\n catch(e) {}\n if (!range || range.parentElement() != te) { return false }\n return range.compareEndPoints(\"StartToEnd\", range) != 0\n };\n\n var hasCopyEvent = (function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) { return true }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\"\n })();\n\n var badZoomedRects = null;\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) { return badZoomedRects }\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n }\n\n // Known modes, by name and by MIME\n var modes = {}, mimeModes = {};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n function defineMode(name, mode) {\n if (arguments.length > 2)\n { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n modes[name] = mode;\n }\n\n function defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n }\n\n // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\n function resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n if (typeof found == \"string\") { found = {name: found}; }\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\")\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\")\n }\n if (typeof spec == \"string\") { return {name: spec} }\n else { return spec || {name: \"null\"} }\n }\n\n // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n function getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) { return getMode(options, \"text/plain\") }\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) { continue }\n if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) { modeObj.helperType = spec.helperType; }\n if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n return modeObj\n }\n\n // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n var modeExtensions = {};\n function extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n copyObj(properties, exts);\n }\n\n function copyState(mode, state) {\n if (state === true) { return state }\n if (mode.copyState) { return mode.copyState(state) }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) { val = val.concat([]); }\n nstate[n] = val;\n }\n return nstate\n }\n\n // Given a mode and a state (for that mode), find the inner mode and\n // state at the position that the state refers to.\n function innerMode(mode, state) {\n var info;\n while (mode.innerMode) {\n info = mode.innerMode(state);\n if (!info || info.mode == mode) { break }\n state = info.state;\n mode = info.mode;\n }\n return info || {mode: mode, state: state}\n }\n\n function startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true\n }\n\n // STRING STREAM\n\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n var StringStream = function(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n };\n\n StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length)\n { return this.string.charAt(this.pos++) }\n };\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") { ok = ch == match; }\n else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n if (ok) {++this.pos; return ch}\n };\n StringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n while (this.eat(match)){}\n return this.pos > start\n };\n StringStream.prototype.eatSpace = function () {\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n return this.pos > start\n };\n StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {this.pos = found; return true}\n };\n StringStream.prototype.backUp = function (n) {this.pos -= n;};\n StringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) -\n (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) { this.pos += pattern.length; }\n return true\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) { return null }\n if (match && consume !== false) { this.pos += match[0].length; }\n return match\n }\n };\n StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try { return inner() }\n finally { this.lineStart -= n; }\n };\n StringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n)\n };\n StringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos)\n };\n\n // Find the line object corresponding to the given line number.\n function getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i], sz = child.chunkSize();\n if (n < sz) { chunk = child; break }\n n -= sz;\n }\n }\n return chunk.lines[n]\n }\n\n // Get the part of a document between two positions, as an array of\n // strings.\n function getBetween(doc, start, end) {\n var out = [], n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) { text = text.slice(0, end.ch); }\n if (n == start.line) { text = text.slice(start.ch); }\n out.push(text);\n ++n;\n });\n return out\n }\n // Get the lines between from and to, as array of strings.\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n return out\n }\n\n // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n }\n\n // Given a line object, find its line number by walking up through\n // its parent links.\n function lineNo(line) {\n if (line.parent == null) { return null }\n var cur = line.parent, no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) { break }\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first\n }\n\n // Find the line at the given vertical position, using the height\n // information in the document tree.\n function lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1], ch = child.height;\n if (h < ch) { chunk = child; continue outer }\n h -= ch;\n n += child.chunkSize();\n }\n return n\n } while (!chunk.lines)\n var i = 0;\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i], lh = line.height;\n if (h < lh) { break }\n h -= lh;\n }\n return n + i\n }\n\n function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber))\n }\n\n // A Pos instance represents a position within the text.\n function Pos(line, ch, sticky) {\n if ( sticky === void 0 ) sticky = null;\n\n if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n }\n\n // Compare two positions, return 0 if they are the same, a negative\n // number when a is less, and a positive number otherwise.\n function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n function copyPos(x) {return Pos(x.line, x.ch)}\n function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n function clipPos(doc, pos) {\n if (pos.line < doc.first) { return Pos(doc.first, 0) }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n return clipToLen(pos, getLine(doc, pos.line).text.length)\n }\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n else if (ch < 0) { return Pos(pos.line, 0) }\n else { return pos }\n }\n function clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n return out\n }\n\n var SavedContext = function(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n };\n\n var Context = function(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n };\n\n Context.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n return line\n };\n\n Context.prototype.baseToken = function (n) {\n if (!this.baseTokens) { return null }\n while (this.baseTokens[this.baseTokenPos] <= n)\n { this.baseTokenPos += 2; }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n}\n };\n\n Context.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n };\n\n Context.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext)\n { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n else\n { return new Context(doc, copyState(doc.mode, saved), line) }\n };\n\n Context.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n };\n\n\n // Compute a style array (an array starting with a mode generation\n // -- for invalidation -- followed by pairs of end positions and\n // style strings), which is used to highlight the tokens on the\n // line.\n function highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen], lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function ( o ) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o], i = 1, at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end)\n { st.splice(i, 1, end, st[i+1], i_end); }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) { return }\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start+1];\n st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n }\n\n function getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n if (resetState) { context.state = resetState; }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) { line.styleClasses = result.classes; }\n else if (line.styleClasses) { line.styleClasses = null; }\n if (updateFrontier === cm.doc.highlightFrontier)\n { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n }\n return line.styles\n }\n\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc, display = cm.display;\n if (!doc.mode.startState) { return new Context(doc, true, n) }\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n if (precise) { doc.modeFrontier = context.line; }\n return context\n }\n\n // Lightweight form of highlight -- proceed over this line and\n // update state, but don't save a style array. Used for lines that\n // aren't currently visible.\n function processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n if (text == \"\") { callBlankLine(mode, context.state); }\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n }\n\n function callBlankLine(mode, state) {\n if (mode.blankLine) { return mode.blankLine(state) }\n if (!mode.innerMode) { return }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n }\n\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) { inner[0] = innerMode(mode, state).mode; }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) { return style }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n }\n\n var Token = function(stream, type, state) {\n this.start = stream.start; this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n };\n\n // Utility for getTokenAt and getLineTokens\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc, mode = doc.mode, style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n if (asArray) { tokens = []; }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n }\n return asArray ? tokens : new Token(stream, style, context.state)\n }\n\n function extractLineClasses(type, output) {\n if (type) { for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) { break }\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n if (output[prop] == null)\n { output[prop] = lineClass[2]; }\n else if (!(new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\")).test(output[prop]))\n { output[prop] += \" \" + lineClass[2]; }\n } }\n return type\n }\n\n // Run the given mode's parser over a line, calling f for each token.\n function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n var curStart = 0, curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context), style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n curStyle = style;\n }\n stream.start = stream.pos;\n }\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n }\n\n // Finds the line to start with when starting a parse. Tries to\n // find a line with a stateAfter, so that it can start with a\n // valid state. If that fails, it returns the line with the\n // smallest indentation, which tends to need the least context to\n // parse correctly.\n function findStartLine(cm, n, precise) {\n var minindent, minline, doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) { return doc.first }\n var line = getLine(doc, search - 1), after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n { return search }\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline\n }\n\n function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) { return }\n var start = doc.first;\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter;\n // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break\n }\n }\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n }\n\n // Optimize some code when these features are not used.\n var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\n }\n\n function seeCollapsedSpans() {\n sawCollapsedSpans = true;\n }\n\n // TEXTMARKER SPANS\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from; this.to = to;\n }\n\n // Search an array of spans for a span matching the given marker.\n function getMarkedSpanFor(spans, marker) {\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) { return span }\n } }\n }\n\n // Remove a span from an array, returning undefined if no spans are\n // left (we don't store arrays for lines without spans).\n function removeMarkedSpan(spans, span) {\n var r;\n for (var i = 0; i < spans.length; ++i)\n { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n return r\n }\n\n // Add a span to a line.\n function addMarkedSpan(line, span, op) {\n var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet));\n if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) {\n line.markedSpans.push(span);\n } else {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n if (inThisOp) { inThisOp.add(line.markedSpans); }\n }\n span.marker.attachLine(line);\n }\n\n // Used for the algorithm that adjusts markers for a change in the\n // document. These functions cut an array of spans at a given\n // character position, returning an array of remaining chunks (or\n // undefined if nothing remains).\n function markedSpansBefore(old, startCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n } }\n return nw\n }\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n span.to == null ? null : span.to - endCh));\n }\n } }\n return nw\n }\n\n // Given a change object, compute the new set of marker spans that\n // cover the line in which the change took place. Removes spans\n // entirely within the change, reconnects spans belonging to the\n // same marker that appear on both sides of the change, and cuts off\n // spans partially within the change. Returns an array of span\n // arrays with one element for each line in (after) the change.\n function stretchSpansOverChange(doc, change) {\n if (change.full) { return null }\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) { return null }\n\n var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) { span.to = startCh; }\n else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n if (span$1.to != null) { span$1.to += offset; }\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n if (!found$1) {\n span$1.from = offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n } else {\n span$1.from += offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) { first = clearEmptySpans(first); }\n if (last && last != first) { last = clearEmptySpans(last); }\n\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2, gapMarkers;\n if (gap > 0 && first)\n { for (var i$2 = 0; i$2 < first.length; ++i$2)\n { if (first[i$2].to == null)\n { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n for (var i$3 = 0; i$3 < gap; ++i$3)\n { newMarkers.push(gapMarkers); }\n newMarkers.push(last);\n }\n return newMarkers\n }\n\n // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n { spans.splice(i--, 1); }\n }\n if (!spans.length) { return null }\n return spans\n }\n\n // Used to 'clip' out readOnly ranges when making a change.\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n { (markers || (markers = [])).push(mark); }\n } }\n });\n if (!markers) { return null }\n var parts = [{from: from, to: to}];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i], m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n { newParts.push({from: p.from, to: m.from}); }\n if (dto > 0 || !mk.inclusiveRight && !dto)\n { newParts.push({from: m.to, to: p.to}); }\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n return parts\n }\n\n // Connect or disconnect spans from a line.\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.detachLine(line); }\n line.markedSpans = null;\n }\n function attachMarkedSpans(line, spans) {\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.attachLine(line); }\n line.markedSpans = spans;\n }\n\n // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n // Returns a number indicating which of two overlapping collapsed\n // spans is larger (and thus includes the other). Falls back to\n // comparing ids when the spans cover exactly the same range.\n function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) { return lenDiff }\n var aPos = a.find(), bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) { return -fromCmp }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) { return toCmp }\n return b.id - a.id\n }\n\n // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n { found = sp.marker; }\n } }\n return found\n }\n function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n } }\n return found\n }\n\n // Test whether there exists a collapsed span that partially\n // overlaps (covers the start or end, but not both) of a new span.\n // Such overlap is not allowed.\n function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n var line = getLine(doc, lineNo);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n { return true }\n } }\n }\n\n // A visual line is a line as drawn on the screen. Folding, for\n // example, can cause multiple logical lines to appear on the same\n // visual line. This finds the start of the visual line that the\n // given line is part of (usually that is the line itself).\n function visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line))\n { line = merged.find(-1, true).line; }\n return line\n }\n\n function visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return line\n }\n\n // Returns an array of logical lines that continue the visual line\n // started by the argument, or undefined if there are no such lines.\n function visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line\n ;(lines || (lines = [])).push(line);\n }\n return lines\n }\n\n // Get the line number of the start of the visual line that the\n // given line number is part of.\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN), vis = visualLine(line);\n if (line == vis) { return lineN }\n return lineNo(vis)\n }\n\n // Get the line number of the start of the next visual line after\n // the given line.\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) { return lineN }\n var line = getLine(doc, lineN), merged;\n if (!lineIsHidden(doc, line)) { return lineN }\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return lineNo(line) + 1\n }\n\n // Compute whether a line is hidden. Lines count as hidden when they\n // are part of a visual line that starts with another line, or when\n // they are entirely covered by collapsed, non-widget span.\n function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n if (sp.from == null) { return true }\n if (sp.marker.widgetNode) { continue }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n { return true }\n } }\n }\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n }\n if (span.marker.inclusiveRight && span.to == line.text.length)\n { return true }\n for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n (sp.to == null || sp.to != span.from) &&\n (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n lineIsHiddenInner(doc, line, sp)) { return true }\n }\n }\n\n // Find the height above the given line.\n function heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n\n var h = 0, chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) { break }\n else { h += line.height; }\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n if (cur == chunk) { break }\n else { h += cur.height; }\n }\n }\n return h\n }\n\n // Compute the character length of a line, taking into account\n // collapsed ranges (see markText) that might hide parts, and join\n // other lines onto it.\n function lineLength(line) {\n if (line.height == 0) { return 0 }\n var len = line.text.length, merged, cur = line;\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n cur = line;\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n return len\n }\n\n // Find the longest line in the document.\n function findMaxLine(cm) {\n var d = cm.display, doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n }\n\n // LINE DATA STRUCTURE\n\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n var Line = function(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n };\n\n Line.prototype.lineNo = function () { return lineNo(this) };\n eventMixin(Line);\n\n // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n if (line.order != null) { line.order = null; }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n }\n\n // Detach a line from the document tree and its markers.\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n }\n\n // Convert a style as returned by a mode (either null, or a string\n // containing one or more styles) to a CSS style. This is cached,\n // and also looks for line-wide styles.\n var styleToClassCache = {}, styleToClassCacheWithMode = {};\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) { return null }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] ||\n (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n }\n\n // Render the DOM representation of the text of a line. Also builds\n // up a 'line map', which points at the DOM nodes that represent\n // specific stretches of text, and is used by the measuring code.\n // The returned object contains the DOM node, this map, and\n // information about line-wide styles that were set by the mode.\n function buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n col: 0, pos: 0, cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")};\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass)\n { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n if (line.styleClasses.textClass)\n { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0)\n { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n // Store the map and a cache object for the current logical line\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n }\n\n // See issue #2901\n if (webkit) {\n var last = builder.content.lastChild;\n if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n { builder.content.className = \"cm-tab-wrap-hack\"; }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className)\n { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n return builder\n }\n\n function defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token\n }\n\n // Build up the DOM representation for a single token, and add it to\n // the line map. Takes care to render special characters separately.\n function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n if (!text) { return }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars, mustWrap = false;\n var content;\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n if (ie && ie_version < 9) { mustWrap = true; }\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n else { content.appendChild(txt); }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) { break }\n pos += skipped + 1;\n var txt$1 = (void 0);\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n else { content.appendChild(txt$1); }\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n if (style || startStyle || endStyle || mustWrap || css || attributes) {\n var fullStyle = style || \"\";\n if (startStyle) { fullStyle += startStyle; }\n if (endStyle) { fullStyle += endStyle; }\n var token = elt(\"span\", [content], fullStyle, css);\n if (attributes) {\n for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n { token.setAttribute(attr, attributes[attr]); } }\n }\n return builder.content.appendChild(token)\n }\n builder.content.appendChild(content);\n }\n\n // Change some spaces to NBSP to prevent the browser from collapsing\n // trailing spaces at the end of a line when rendering text (issue #1362).\n function splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) { return text }\n var spaceBefore = trailingBefore, result = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n { ch = \"\\u00a0\"; }\n result += ch;\n spaceBefore = ch == \" \";\n }\n return result\n }\n\n // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\n function buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, css, attributes) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos, end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = (void 0);\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n if (part.to > start && part.from <= start) { break }\n }\n if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n }\n }\n\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget)\n { widget = builder.content.appendChild(document.createElement(\"span\")); }\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n builder.trailingSpace = false;\n }\n\n // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans, allText = line.text, at = 0;\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n return\n }\n\n var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n for (;;) {\n if (nextChange == pos) { // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null; nextChange = Infinity;\n var foundBookmarks = [], endStyles = (void 0);\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j], m = sp.marker;\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n if (m.className) { spanStyle += \" \" + m.className; }\n if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n if (m.title) { (attributes || (attributes = {})).title = m.title; }\n if (m.attributes) {\n for (var attr in m.attributes)\n { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n { collapsed = sp; }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) { return }\n if (collapsed.to == pos) { collapsed = false; }\n }\n }\n if (pos >= len) { break }\n\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n }\n\n\n // These objects are used to represent the visible (currently drawn)\n // part of the document. A LineView may correspond to multiple\n // logical lines, if those are connected by collapsed ranges.\n function LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n }\n\n // Create a range of LineView objects for the given lines.\n function buildViewArray(cm, from, to) {\n var array = [], nextPos;\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n return array\n }\n\n var operationGroup = null;\n\n function pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n }\n\n function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks, i = 0;\n do {\n for (; i < callbacks.length; i++)\n { callbacks[i].call(null); }\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers)\n { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n }\n } while (i < callbacks.length)\n }\n\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) { return }\n\n try { fireCallbacksForOps(group); }\n finally {\n operationGroup = null;\n endCb(group);\n }\n }\n\n var orphanDelayedCallbacks = null;\n\n // Often, we want to signal events at a point where we are in the\n // middle of some work, but don't want the handler to start calling\n // other methods on the editor, which might be in an inconsistent\n // state or simply not expect any other events to happen.\n // signalLater looks whether there are any handlers, and schedules\n // them to be executed when the last operation ends, or, if no\n // operation is active, when a timeout fires.\n function signalLater(emitter, type /*, values...*/) {\n var arr = getHandlers(emitter, type);\n if (!arr.length) { return }\n var args = Array.prototype.slice.call(arguments, 2), list;\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n var loop = function ( i ) {\n list.push(function () { return arr[i].apply(null, args); });\n };\n\n for (var i = 0; i < arr.length; ++i)\n loop( i );\n }\n\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n }\n\n // When an aspect of a line changes, a string is added to\n // lineView.changes. This updates the relevant part of the line's\n // DOM structure.\n function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") { updateLineText(cm, lineView); }\n else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n else if (type == \"class\") { updateLineClasses(cm, lineView); }\n else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n }\n lineView.changes = null;\n }\n\n // Lines with gutter elements, widgets or a background class need to\n // be wrapped, and have the extra elements added to the wrapper div\n function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode)\n { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n }\n return lineView.node\n }\n\n function updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) { cls += \" CodeMirror-linebackground\"; }\n if (lineView.background) {\n if (cls) { lineView.background.className = cls; }\n else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n }\n\n // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built\n }\n return buildLineContent(cm, lineView)\n }\n\n // Redraw the line's text. Interacts with the background and text\n // classes because the mode may output tokens that influence these\n // classes.\n function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) { lineView.node = built.pre; }\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n }\n\n function updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n if (lineView.line.wrapClass)\n { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n else if (lineView.node != lineView.text)\n { lineView.node.className = \"\"; }\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n }\n\n function updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n var markers = lineView.line.gutterMarkers;\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n gutterWrap.setAttribute(\"aria-hidden\", \"true\");\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n if (lineView.line.gutterClass)\n { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n { lineView.lineNumber = gutterWrap.appendChild(\n elt(\"div\", lineNumberFor(cm.options, lineN),\n \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n if (found)\n { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n } }\n }\n }\n\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) { lineView.alignable = null; }\n var isWidget = classTest(\"CodeMirror-linewidget\");\n for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n next = node.nextSibling;\n if (isWidget.test(node.className)) { lineView.node.removeChild(node); }\n }\n insertLineWidgets(cm, lineView, dims);\n }\n\n // Build a line's DOM representation from scratch\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) { lineView.bgClass = built.bgClass; }\n if (built.textClass) { lineView.textClass = built.textClass; }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node\n }\n\n // A lineView may contain multiple logical lines (when merged by\n // collapsed spans). The widgets for all of them need to be drawn.\n function insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n }\n\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) { return }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n if (allowAbove && widget.above)\n { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n else\n { wrap.appendChild(node); }\n signalLater(widget, \"redraw\");\n }\n }\n\n function positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n }\n }\n\n function widgetHeight(widget) {\n if (widget.height != null) { return widget.height }\n var cm = widget.doc.cm;\n if (!cm) { return 0 }\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter)\n { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n if (widget.noHScroll)\n { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.parentNode.offsetHeight\n }\n\n // Return true when the given mouse event happened in a widget\n function eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n (n.parentNode == display.sizer && n != display.mover))\n { return true }\n }\n }\n\n // POSITION MEASUREMENT\n\n function paddingTop(display) {return display.lineSpace.offsetTop}\n function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n function paddingH(display) {\n if (display.cachedPaddingH) { return display.cachedPaddingH }\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n return data\n }\n\n function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n }\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n }\n\n // Ensure the lineView.wrapping.heights array is populated. This is\n // an array of bottom offsets for the lines that make up a drawn\n // line. When lineWrapping is on, there might be more than one\n // height.\n function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i], next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2)\n { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n }\n\n // Find a line map (mapping character offsets to text nodes) and a\n // measurement cache for the given line number. (A line view might\n // contain multiple lines when collapsed ranges are present.)\n function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line)\n { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++)\n { if (lineView.rest[i] == line)\n { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n { if (lineNo(lineView.rest[i$1]) > lineN)\n { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n }\n }\n\n // Render a line into the hidden node display.externalMeasured. Used\n // when measurement is needed for a line that's not in the viewport.\n function updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view\n }\n\n // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n }\n\n // Find a line view that corresponds to the given line number.\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n { return cm.display.view[findViewIndex(cm, lineN)] }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n { return ext }\n }\n\n // Measurement can be split in two steps, the set-up work that\n // applies to the whole line, and the measurement of the actual\n // character. Functions like coordsChar, that need to do a lot of\n // measurements in a row, can thus ensure that the set-up work is\n // only done once.\n function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n if (!view)\n { view = updateExternalMeasurement(cm, line); }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line, view: view, rect: null,\n map: info.map, cache: info.cache, before: info.before,\n hasHeights: false\n }\n }\n\n // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) { ch = -1; }\n var key = ch + (bias || \"\"), found;\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect)\n { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) { prepared.cache[key] = found; }\n }\n return {left: found.left, right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom}\n }\n\n var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n function nodeAndOffsetInLineMap(map, ch, bias) {\n var node, start, end, collapse, mStart, mEnd;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map.length; i += 3) {\n mStart = map[i];\n mEnd = map[i + 1];\n if (ch < mStart) {\n start = 0; end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) { collapse = \"right\"; }\n }\n if (start != null) {\n node = map[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n { collapse = bias; }\n if (bias == \"left\" && start == 0)\n { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n node = map[(i -= 3) + 2];\n collapse = \"left\";\n } }\n if (bias == \"right\" && start == mEnd - mStart)\n { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n node = map[(i += 3) + 2];\n collapse = \"right\";\n } }\n break\n }\n }\n return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n }\n\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) { break }\n } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) { break }\n } }\n return rect\n }\n\n function measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n var rect;\n if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n { rect = node.parentNode.getBoundingClientRect(); }\n else\n { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n if (rect.left || rect.right || start == 0) { break }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n } else { // If it is a widget, simply get the box for the whole widget.\n if (start > 0) { collapse = bias = \"right\"; }\n var rects;\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n else\n { rect = node.getBoundingClientRect(); }\n }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan)\n { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n else\n { rect = nullRect; }\n }\n\n var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++)\n { if (mid < heights[i]) { break } }\n var top = i ? heights[i - 1] : 0, bot = heights[i];\n var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top, bottom: bot};\n if (!rect.left && !rect.right) { result.bogus = true; }\n if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n return result\n }\n\n // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null ||\n screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n { return rect }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {left: rect.left * scaleX, right: rect.right * scaleX,\n top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n }\n\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { lineView.measure.caches[i] = {}; } }\n }\n }\n\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++)\n { clearLineMeasurementCacheFor(cm.display.view[i]); }\n }\n\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n cm.display.lineNumChars = null;\n }\n\n function pageScrollX(doc) {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) { return -(doc.body.getBoundingClientRect().left - parseInt(getComputedStyle(doc.body).marginLeft)) }\n return doc.defaultView.pageXOffset || (doc.documentElement || doc.body).scrollLeft\n }\n function pageScrollY(doc) {\n if (chrome && android) { return -(doc.body.getBoundingClientRect().top - parseInt(getComputedStyle(doc.body).marginTop)) }\n return doc.defaultView.pageYOffset || (doc.documentElement || doc.body).scrollTop\n }\n\n function widgetTopHeight(lineObj) {\n var ref = visualLine(lineObj);\n var widgets = ref.widgets;\n var height = 0;\n if (widgets) { for (var i = 0; i < widgets.length; ++i) { if (widgets[i].above)\n { height += widgetHeight(widgets[i]); } } }\n return height\n }\n\n // Converts a {top, bottom, left, right} box from line-local\n // coordinates into another coordinate system. Context may be one of\n // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n // or \"page\".\n function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height; rect.bottom += height;\n }\n if (context == \"line\") { return rect }\n if (!context) { context = \"local\"; }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") { yOff += paddingTop(cm.display); }\n else { yOff -= cm.display.viewOffset; }\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY(doc(cm)));\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX(doc(cm)));\n rect.left += xOff; rect.right += xOff;\n }\n rect.top += yOff; rect.bottom += yOff;\n return rect\n }\n\n // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") { return coords }\n var left = coords.left, top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX(doc(cm));\n top -= pageScrollY(doc(cm));\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n }\n\n function charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n }\n\n // Returns a box for a given cursor position, which may have an\n // 'other' property containing the position of the secondary cursor\n // on a bidi boundary.\n // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n // and after `char - 1` in writing order of `char - 1`\n // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n // and before `char` in writing order of `char`\n // Examples (upper-case letters are RTL, lower-case are LTR):\n // Pos(0, 1, ...)\n // before after\n // ab a|b a|b\n // aB a|B aB|\n // Ab |Ab A|b\n // AB B|A B|A\n // Every position after the last character on a line is considered to stick\n // to the last character on the line.\n function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) { m.left = m.right; } else { m.right = m.left; }\n return intoCoordSystem(cm, lineObj, m, context)\n }\n var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos], right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert)\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n return val\n }\n\n // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n function estimateCoords(cm, pos) {\n var left = 0;\n pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {left: left, right: left, top: top, bottom: top + lineObj.height}\n }\n\n // Positions returned by coordsChar contain some extra information.\n // xRel is the relative x position of the input coordinates compared\n // to the found position (so xRel > 0 means the coordinates are to\n // the right of the character position, for example). When outside\n // is true, that means the coordinates lie outside the line's\n // vertical range.\n function PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n if (outside) { pos.outside = outside; }\n return pos\n }\n\n // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n function coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n if (lineN > last)\n { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n if (x < 0) { x = 0; }\n\n var lineObj = getLine(doc, lineN);\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n if (!collapsed) { return found }\n var rangeEnd = collapsed.find(1);\n if (rangeEnd.line == lineN) { return rangeEnd }\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n }\n\n function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n return {begin: begin, end: end}\n }\n\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n }\n\n // Returns true if the given side of a box is after the given\n // coordinates, in top-to-bottom, left-to-right order.\n function boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n }\n\n function coordsCharInner(cm, lineObj, lineNo, x, y) {\n // Move y into line-local coordinate space\n y -= heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n var widgetHeight = widgetTopHeight(lineObj);\n var begin = 0, end = lineObj.text.length, ltr = true;\n\n var order = getOrder(lineObj, cm.doc.direction);\n // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n (cm, lineObj, lineNo, preparedMeasure, order, x, y);\n ltr = part.level != 1;\n // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n }\n\n // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n var chAround = null, boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight; box.bottom += widgetHeight;\n if (!boxIsAfter(box, x, y, false)) { return false }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true\n }, begin, end);\n\n var baseX, sticky, outside = false;\n // If a box around the coordinates was found, use that\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) { ch++; }\n // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?\n \"after\" : \"before\";\n // Now get accurate coordinates for this place, in order to get a\n // base X position\n var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n baseX = coords.left;\n outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)\n }\n\n function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i], ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n \"line\", lineObj, preparedMeasure), x, y, true)\n }, 0, order.length - 1);\n var part = order[index];\n // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n if (index > 0) {\n var ltr = part.level != 1;\n var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y)\n { part = order[index - 1]; }\n }\n return part\n }\n\n function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n var part = null, closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) { continue }\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n if (!part) { part = order[order.length - 1]; }\n // Clip the part to the wrapped line.\n if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n return part\n }\n\n var measureText;\n // Compute the default text height.\n function textHeight(display) {\n if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n if (measureText == null) {\n measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) { display.cachedTextHeight = height; }\n removeChildren(display.measure);\n return height || 1\n }\n\n // Compute the default character width.\n function charWidth(display) {\n if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n if (width > 2) { display.cachedCharWidth = width; }\n return width || 10\n }\n\n // Do a bulk-read of the DOM positions and sizes needed to draw the\n // view, so that we don't interleave reading and writing to the DOM.\n function getDimensions(cm) {\n var d = cm.display, left = {}, width = {};\n var gutterLeft = d.gutters.clientLeft;\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n var id = cm.display.gutterSpecs[i].className;\n left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[id] = n.clientWidth;\n }\n return {fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth}\n }\n\n // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n }\n\n // Returns a function that estimates the height of a line, to use as\n // first approximation until the line becomes visible (and is thus\n // properly measurable).\n function estimateHeight(cm) {\n var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) { return 0 }\n\n var widgetsHeight = 0;\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n } }\n\n if (wrapping)\n { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n else\n { return widgetsHeight + th }\n }\n }\n\n function estimateLineHeights(cm) {\n var doc = cm.doc, est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n });\n }\n\n // Given a mouse event, find the corresponding position. If liberal\n // is false, it checks whether a gutter or scrollbar was clicked,\n // and returns null if it was. forRect is used by rectangular\n // selections, and tries to estimate a character position even for\n // coordinates beyond the right of the text.\n function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n var x, y, space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try { x = e.clientX - space.left; y = e.clientY - space.top; }\n catch (e$1) { return null }\n var coords = coordsChar(cm, x, y), line;\n if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n return coords\n }\n\n // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) { return null }\n n -= cm.display.viewFrom;\n if (n < 0) { return null }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) { return i }\n }\n }\n\n // Updates the display.view data structure for a given change to the\n // document. From and to are in pre-change coordinates. Lendiff is\n // the amount of lines added or subtracted by the change. This is\n // used for changes that span multiple lines, or change the way\n // lines are divided into visual lines. regLineChange (below)\n // registers single-line changes.\n function regChange(cm, from, to, lendiff) {\n if (from == null) { from = cm.doc.first; }\n if (to == null) { to = cm.doc.first + cm.doc.size; }\n if (!lendiff) { lendiff = 0; }\n\n var display = cm.display;\n if (lendiff && to < display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers > from))\n { display.updateLineNumbers = from; }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) { // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n { resetView(cm); }\n } else if (to <= display.viewFrom) { // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) { // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) { // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else { // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index)\n .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n .concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n if (ext) {\n if (to < ext.lineN)\n { ext.lineN += lendiff; }\n else if (from < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n }\n }\n\n // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display, ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n\n if (line < display.viewFrom || line >= display.viewTo) { return }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) { return }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) { arr.push(type); }\n }\n\n // Clear the view.\n function resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n }\n\n function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n { return {index: index, lineN: newN} }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++)\n { n += view[i].size; }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) { return null }\n diff = (n + view[index].size) - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff; newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {index: index, lineN: newN}\n }\n\n // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n function adjustView(cm, from, to) {\n var display = cm.display, view = display.view;\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from)\n { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n else if (display.viewFrom < from)\n { display.view = display.view.slice(findViewIndex(cm, from)); }\n display.viewFrom = from;\n if (display.viewTo < to)\n { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n else if (display.viewTo > to)\n { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n }\n display.viewTo = to;\n }\n\n // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n function countDirtyView(cm) {\n var view = cm.display.view, dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n }\n return dirty\n }\n\n function updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n }\n\n function prepareSelection(cm, primary) {\n if ( primary === void 0 ) primary = true;\n\n var doc = cm.doc, result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n var customCursor = cm.options.$customCursor;\n if (customCursor) { primary = true; }\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) { continue }\n var range = doc.sel.ranges[i];\n if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }\n var collapsed = range.empty();\n if (customCursor) {\n var head = customCursor(cm, range);\n if (head) { drawSelectionCursor(cm, head, curFragment); }\n } else if (collapsed || cm.options.showCursorWhenSelecting) {\n drawSelectionCursor(cm, range.head, curFragment);\n }\n if (!collapsed)\n { drawSelectionRange(cm, range, selFragment); }\n }\n return result\n }\n\n // Draws a cursor for the given range\n function drawSelectionCursor(cm, head, output) {\n var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (/\\bcm-fat-cursor\\b/.test(cm.getWrapperElement().className)) {\n var charPos = charCoords(cm, head, \"div\", null, null);\n var width = charPos.right - charPos.left;\n cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + \"px\";\n }\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n }\n\n function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n // Draws the given range as a highlighted selection\n function drawSelectionRange(cm, range, output) {\n var display = cm.display, doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display), leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) { top = 0; }\n top = Math.round(top);\n bottom = Math.round(bottom);\n 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\")));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n function coords(ch, bias) {\n return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop]\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n var first = i == 0, last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) { // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else { // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n if (cmpCoords(toPos, start) < 0) { start = toPos; }\n if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n if (cmpCoords(toPos, end) < 0) { end = toPos; }\n });\n return {start: start, end: end}\n }\n\n var sFrom = range.from(), sTo = range.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n if (leftEnd.bottom < rightStart.top)\n { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n }\n\n output.appendChild(fragment);\n }\n\n // Cursor-blinking\n function restartBlink(cm) {\n if (!cm.state.focused) { return }\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0)\n { display.blinker = setInterval(function () {\n if (!cm.hasFocus()) { onBlur(cm); }\n display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n }, cm.options.cursorBlinkRate); }\n else if (cm.options.cursorBlinkRate < 0)\n { display.cursorDiv.style.visibility = \"hidden\"; }\n }\n\n function ensureFocus(cm) {\n if (!cm.hasFocus()) {\n cm.display.input.focus();\n if (!cm.state.focused) { onFocus(cm); }\n }\n }\n\n function delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n if (cm.state.focused) { onBlur(cm); }\n } }, 100);\n }\n\n function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }\n\n if (cm.options.readOnly == \"nocursor\") { return }\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n }\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n }\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) { return }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n clearInterval(cm.display.blinker);\n setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n }\n\n // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top);\n var oldHeight = display.lineDiv.getBoundingClientRect().top;\n var mustScroll = 0;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i], wrapping = cm.options.lineWrapping;\n var height = (void 0), width = 0;\n if (cur.hidden) { continue }\n oldHeight += cur.line.height;\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top;\n // Check that lines don't extend past the right of the current\n // editor width\n if (!wrapping && cur.text.firstChild)\n { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n }\n var diff = cur.line.height - height;\n if (diff > .005 || diff < -.005) {\n if (oldHeight < viewTop) { mustScroll -= diff; }\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n { updateWidgetHeight(cur.rest[j]); } }\n }\n if (width > cm.display.sizerWidth) {\n var chWidth = Math.ceil(width / charWidth(cm.display));\n if (chWidth > cm.display.maxLineLength) {\n cm.display.maxLineLength = chWidth;\n cm.display.maxLine = cur.line;\n cm.display.maxLineChanged = true;\n }\n }\n }\n if (Math.abs(mustScroll) > 2) { display.scroller.scrollTop += mustScroll; }\n }\n\n // Read and store the height of line widgets associated with the\n // given line.\n function updateWidgetHeight(line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i], parent = w.node.parentNode;\n if (parent) { w.height = parent.offsetHeight; }\n } }\n }\n\n // Compute the lines that are visible in a given viewport (defaults\n // the current scroll position). viewport may contain top,\n // height, and ensure (see op.scrollToPos) properties.\n function visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n if (ensureFrom < from) {\n from = ensureFrom;\n to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n return {from: from, to: Math.max(to, from + 1)}\n }\n\n // SCROLLING THINGS INTO VIEW\n\n // If an editor sits on the top or bottom of the window, partially\n // scrolled out of view, this ensures that the cursor is visible.\n function maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n var doc = display.wrapper.ownerDocument;\n if (rect.top + box.top < 0) { doScroll = true; }\n else if (rect.bottom + box.top > (doc.defaultView.innerHeight || doc.documentElement.clientHeight)) { doScroll = false; }\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", 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;\"));\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n }\n\n // Scroll a given position into view (immediately), verifying that\n // it actually became visible (as line heights are accurately\n // measured, the position of something may 'drift' during drawing).\n function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) { margin = 0; }\n var rect;\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n }\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n var coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n rect = {left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n }\n if (!changed) { break }\n }\n return rect\n }\n\n // Scroll a given set of coordinates into view (immediately).\n function scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n }\n\n // Calculate a new scroll position needed to scroll the given\n // rectangle into view. Returns an object with scrollTop and\n // scrollLeft properties. When these are undefined, the\n // vertical/horizontal position does not need to be adjusted.\n function calculateScrollPos(cm, rect) {\n var display = cm.display, snapMargin = textHeight(cm.display);\n if (rect.top < 0) { rect.top = 0; }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm), result = {};\n if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n if (newTop != screentop) { result.scrollTop = newTop; }\n }\n\n var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;\n var screenw = displayWidth(cm) - display.gutters.offsetWidth;\n var tooWide = rect.right - rect.left > screenw;\n if (tooWide) { rect.right = rect.left + screenw; }\n if (rect.left < 10)\n { result.scrollLeft = 0; }\n else if (rect.left < screenleft)\n { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }\n else if (rect.right > screenw + screenleft - 3)\n { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n return result\n }\n\n // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n function addToScrollTop(cm, top) {\n if (top == null) { return }\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n }\n\n // Make sure that at the end of the operation the current cursor is\n // shown.\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n }\n\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) { resolveScrollToPos(cm); }\n if (x != null) { cm.curOp.scrollLeft = x; }\n if (y != null) { cm.curOp.scrollTop = y; }\n }\n\n function scrollToRange(cm, range) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range;\n }\n\n // When an operation has its scrollToPos property set, and another\n // scroll action is applied before the end of the operation, this\n // 'simulates' scrolling that position into view in a cheap way, so\n // that the effect of intermediate scroll commands is not ignored.\n function resolveScrollToPos(cm) {\n var range = cm.curOp.scrollToPos;\n if (range) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n scrollToCoordsRange(cm, from, to, range.margin);\n }\n }\n\n function scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n }\n\n // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n function updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n setScrollTop(cm, val, true);\n if (gecko) { updateDisplaySimple(cm); }\n startWorker(cm, 100);\n }\n\n function setScrollTop(cm, val, forceScroll) {\n val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n }\n\n // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n function setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n cm.display.scrollbars.setScrollLeft(val);\n }\n\n // SCROLLBARS\n\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n function measureForScrollbars(cm) {\n var d = cm.display, gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n }\n }\n\n var NativeScrollbars = function(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert); place(horiz);\n\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n });\n\n this.checkedZeroWidth = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n };\n\n NativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height =\n Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.scrollTop = 0;\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width =\n Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) { this.zeroWidthHack(); }\n this.checkedZeroWidth = true;\n }\n\n return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n };\n\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n };\n\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n };\n\n NativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.visibility = this.vert.style.visibility = \"hidden\";\n this.disableHoriz = new Delayed;\n this.disableVert = new Delayed;\n };\n\n NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.visibility = \"\";\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt != bar) { bar.style.visibility = \"hidden\"; }\n else { delay.set(1000, maybeDisable); }\n }\n delay.set(1000, maybeDisable);\n };\n\n NativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n };\n\n var NullScrollbars = function () {};\n\n NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n NullScrollbars.prototype.setScrollLeft = function () {};\n NullScrollbars.prototype.setScrollTop = function () {};\n NullScrollbars.prototype.clear = function () {};\n\n function updateScrollbars(cm, measure) {\n if (!measure) { measure = measureForScrollbars(cm); }\n var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n { updateHeightsInViewport(cm); }\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n }\n }\n\n // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else { d.scrollbarFiller.style.display = \"\"; }\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else { d.gutterFiller.style.display = \"\"; }\n }\n\n var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass)\n { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n // Prevent clicks in the scrollbars from killing focus\n on(node, \"mousedown\", function () {\n if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n else { updateScrollTop(cm, pos); }\n }, cm);\n if (cm.display.scrollbars.addClass)\n { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n // Operations are used to wrap a series of changes to the editor\n // state in such a way that each change won't have to update the\n // cursor and display (which would be awkward, slow, and\n // error-prone). Instead, display updates are batched and then all\n // combined and executed at once.\n\n var nextOpId = 0;\n // Start a new operation.\n function startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false, // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height, // Used to detect need to update scrollbar\n forceUpdate: false, // Used to force a redraw\n updateInput: 0, // Whether to reset the input textarea\n typing: false, // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null, // Accumulated changes, for firing change events\n cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n selectionChanged: false, // Whether the selection needs to be redrawn\n updateMaxLine: false, // Set when the widest line needs to be determined anew\n scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null, // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId, // Unique ID\n markArrays: null // Used by addMarkedSpan\n };\n pushOperation(cm.curOp);\n }\n\n // Finish an operation, updating the display and signalling delayed events\n function endOperation(cm) {\n var op = cm.curOp;\n if (op) { finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++)\n { group.ops[i].cm.curOp = null; }\n endOperations(group);\n }); }\n }\n\n // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n function endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++) // Read DOM\n { endOperation_R1(ops[i]); }\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n { endOperation_W1(ops[i$1]); }\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n { endOperation_R2(ops[i$2]); }\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n { endOperation_W2(ops[i$3]); }\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n { endOperation_finish(ops[i$4]); }\n }\n\n function endOperation_R1(op) {\n var cm = op.cm, display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) { findMaxLine(cm); }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n op.scrollToPos.to.line >= display.viewTo) ||\n display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate &&\n new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n }\n\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n\n function endOperation_R2(op) {\n var cm = op.cm, display = cm.display;\n if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n op.barMeasure = measureForScrollbars(cm);\n\n // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth =\n Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged)\n { op.preparedSelection = display.input.prepareSelection(); }\n }\n\n function endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n if (op.maxScrollLeft < cm.doc.scrollLeft)\n { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt(root(cm));\n if (op.preparedSelection)\n { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n if (op.updatedDisplay || op.startHeight != cm.doc.height)\n { updateScrollbars(cm, op.barMeasure); }\n if (op.updatedDisplay)\n { setDocumentHeight(cm, op.barMeasure); }\n\n if (op.selectionChanged) { restartBlink(cm); }\n\n if (cm.state.focused && op.updateInput)\n { cm.display.input.reset(op.typing); }\n if (takeFocus) { ensureFocus(op.cm); }\n }\n\n function endOperation_finish(op) {\n var cm = op.cm, display = cm.display, doc = cm.doc;\n\n if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n { display.wheelStartX = display.wheelStartY = null; }\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n if (hidden) { for (var i = 0; i < hidden.length; ++i)\n { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n if (display.wrapper.offsetHeight)\n { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs)\n { signal(cm, \"changes\", cm, op.changeObjs); }\n if (op.update)\n { op.update.finish(); }\n }\n\n // Run the given function in an operation\n function runInOp(cm, f) {\n if (cm.curOp) { return f() }\n startOperation(cm);\n try { return f() }\n finally { endOperation(cm); }\n }\n // Wraps a function in an operation. Returns the wrapped function.\n function operation(cm, f) {\n return function() {\n if (cm.curOp) { return f.apply(cm, arguments) }\n startOperation(cm);\n try { return f.apply(cm, arguments) }\n finally { endOperation(cm); }\n }\n }\n // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n function methodOp(f) {\n return function() {\n if (this.curOp) { return f.apply(this, arguments) }\n startOperation(this);\n try { return f.apply(this, arguments) }\n finally { endOperation(this); }\n }\n }\n function docMethodOp(f) {\n return function() {\n var cm = this.cm;\n if (!cm || cm.curOp) { return f.apply(this, arguments) }\n startOperation(cm);\n try { return f.apply(this, arguments) }\n finally { endOperation(cm); }\n }\n }\n\n // HIGHLIGHT WORKER\n\n function startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo)\n { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n }\n\n function highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.highlightFrontier >= cm.display.viewTo) { return }\n var end = +new Date + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) { // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n if (resetState) { context.state = resetState; }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses, newCls = highlighted.classes;\n if (newCls) { line.styleClasses = newCls; }\n else if (oldCls) { line.styleClasses = null; }\n var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n if (ischange) { changedLines.push(context.line); }\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength)\n { processLine(cm, line.text, context); }\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n if (+new Date > end) {\n startWorker(cm, cm.options.workDelay);\n return true\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n if (changedLines.length) { runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++)\n { regLineChange(cm, changedLines[i], \"text\"); }\n }); }\n }\n\n // DISPLAY DRAWING\n\n var DisplayUpdate = function(cm, viewport, force) {\n var display = cm.display;\n\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n };\n\n DisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type))\n { this.events.push(arguments); }\n };\n DisplayUpdate.prototype.finish = function () {\n for (var i = 0; i < this.events.length; i++)\n { signal.apply(null, this.events[i]); }\n };\n\n function maybeClipScrollbars(cm) {\n var display = cm.display;\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n }\n\n function selectionSnapshot(cm) {\n if (cm.hasFocus()) { return null }\n var active = activeElt(root(cm));\n if (!active || !contains(cm.display.lineDiv, active)) { return null }\n var result = {activeElt: active};\n if (window.getSelection) {\n var sel = win(cm).getSelection();\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n return result\n }\n\n function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt(rootNode(snapshot.activeElt))) { return }\n snapshot.activeElt.focus();\n if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&\n snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var doc = snapshot.activeElt.ownerDocument;\n var sel = doc.defaultView.getSelection(), range = doc.createRange();\n range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n }\n\n // Does the actual updating of the line display. Bails out\n // (returning false) when there is nothing to be done and forced is\n // false.\n function updateDisplayIfNeeded(cm, update) {\n var display = cm.display, doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force &&\n update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n display.renderedView == display.view && countDirtyView(cm) == 0)\n { return false }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo ||\n display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n { return false }\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var selSnapshot = selectionSnapshot(cm);\n if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n restoreSelection(selSnapshot);\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n\n return true\n }\n\n function postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null)\n { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n { break }\n } else if (first) {\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n }\n if (!updateDisplayIfNeeded(cm, update)) { break }\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n }\n\n // Sync the actual display DOM structure with display.view, removing\n // nodes for lines that are no longer in view, and creating the ones\n // that are not there yet, and updating the ones that are out of\n // date.\n function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display, lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv, cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node)\n { node.style.display = \"none\"; }\n else\n { node.parentNode.removeChild(node); }\n return next\n }\n\n var view = display.view, lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else { // Already drawn\n while (cur != lineView.node) { cur = rm(cur); }\n var updateNumber = lineNumbers && updateNumbersFrom != null &&\n updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) { cur = rm(cur); }\n }\n\n function updateGutterSpace(display) {\n var width = display.gutters.offsetWidth;\n display.sizer.style.marginLeft = width + \"px\";\n // Send an event to consumers responding to changes in gutter width.\n signalLater(display, \"gutterChanged\", display);\n }\n\n function setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n }\n\n // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n function alignHorizontally(cm) {\n var display = cm.display, view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter)\n { view[i].gutter.style.left = left; }\n if (view[i].gutterBackground)\n { view[i].gutterBackground.style.left = left; }\n }\n var align = view[i].alignable;\n if (align) { for (var j = 0; j < align.length; j++)\n { align[j].style.left = left; } }\n } }\n if (cm.options.fixedGutter)\n { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n }\n\n // Used to ensure that the line number gutter is still the right\n // size for the current document size. Returns true when an update\n // is needed.\n function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) { return false }\n var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm.display);\n return true\n }\n return false\n }\n\n function getGutters(gutters, lineNumbers) {\n var result = [], sawLineNumbers = false;\n for (var i = 0; i < gutters.length; i++) {\n var name = gutters[i], style = null;\n if (typeof name != \"string\") { style = name.style; name = name.className; }\n if (name == \"CodeMirror-linenumbers\") {\n if (!lineNumbers) { continue }\n else { sawLineNumbers = true; }\n }\n result.push({className: name, style: style});\n }\n if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n return result\n }\n\n // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n function renderGutters(display) {\n var gutters = display.gutters, specs = display.gutterSpecs;\n removeChildren(gutters);\n display.lineGutter = null;\n for (var i = 0; i < specs.length; ++i) {\n var ref = specs[i];\n var className = ref.className;\n var style = ref.style;\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n if (style) { gElt.style.cssText = style; }\n if (className == \"CodeMirror-linenumbers\") {\n display.lineGutter = gElt;\n gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n }\n }\n gutters.style.display = specs.length ? \"\" : \"none\";\n updateGutterSpace(display);\n }\n\n function updateGutters(cm) {\n renderGutters(cm.display);\n regChange(cm);\n alignHorizontally(cm);\n }\n\n // The display handles the DOM integration, both for input reading\n // and content drawing. It holds references to DOM nodes and\n // display-related state.\n\n function Display(place, doc, input, options) {\n var d = this;\n this.input = input;\n\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [lines], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n // See #6982. FIXME remove when this has been fixed for a while in Chrome\n if (chrome && chrome_version === 105) { d.wrapper.style.clipPath = \"inset(0px)\"; }\n\n // This attribute is respected by automatic translation systems such as Google Translate,\n // and may also be respected by tools used by human translators.\n d.wrapper.setAttribute('translate', 'no');\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n if (place) {\n if (place.appendChild) { place.appendChild(d.wrapper); }\n else { place(d.wrapper); }\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n d.alignWidgets = false;\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n\n d.activeTouch = null;\n\n d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n renderGutters(d);\n\n input.init(d);\n }\n\n // Since the delta values reported on mouse wheel events are\n // unstandardized between browsers and even browser versions, and\n // generally horribly unpredictable, this code starts by measuring\n // the scroll effect that the first few mouse wheel events have,\n // and, from that, detects the way it can convert deltas to pixel\n // offsets afterwards.\n //\n // The reason we want to know the amount a wheel event will scroll\n // is that it gives us a chance to update the display before the\n // actual scrolling happens, reducing flickering.\n\n var wheelSamples = 0, wheelPixelsPerUnit = null;\n // Fill in a browser-detected starting value on browsers where we\n // know one. These don't have to be accurate -- the result of them\n // being wrong would just be a slight flicker on the first wheel\n // scroll (if it is large enough).\n if (ie) { wheelPixelsPerUnit = -.53; }\n else if (gecko) { wheelPixelsPerUnit = 15; }\n else if (chrome) { wheelPixelsPerUnit = -.7; }\n else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n else if (dy == null) { dy = e.wheelDelta; }\n return {x: dx, y: dy}\n }\n function wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta\n }\n\n function onScrollWheel(cm, e) {\n // On Chrome 102, viewport updates somehow stop wheel-based\n // scrolling. Turning off pointer events during the scroll seems\n // to avoid the issue.\n if (chrome && chrome_version == 102) {\n if (cm.display.chromeScrollHack == null) { cm.display.sizer.style.pointerEvents = \"none\"; }\n else { clearTimeout(cm.display.chromeScrollHack); }\n cm.display.chromeScrollHack = setTimeout(function () {\n cm.display.chromeScrollHack = null;\n cm.display.sizer.style.pointerEvents = \"\";\n }, 100);\n }\n var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n var pixelsPerUnit = wheelPixelsPerUnit;\n if (e.deltaMode === 0) {\n dx = e.deltaX;\n dy = e.deltaY;\n pixelsPerUnit = 1;\n }\n\n var display = cm.display, scroll = display.scroller;\n // Quit if there's nothing to scroll here\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer\n }\n }\n }\n }\n\n // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n if (dx && !gecko && !presto && pixelsPerUnit != null) {\n if (dy && canScrollY)\n { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); }\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit));\n // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n if (!dy || (dy && canScrollY))\n { e_preventDefault(e); }\n display.wheelStartX = null; // Abort measurement, if in progress\n return\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && pixelsPerUnit != null) {\n var pixels = dy * pixelsPerUnit;\n var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n updateDisplaySimple(cm, {top: top, bottom: bot});\n }\n\n if (wheelSamples < 20 && e.deltaMode !== 0) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx; display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) { return }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n (movedX && display.wheelDX && movedX / display.wheelDX);\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) { return }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx; display.wheelDY += dy;\n }\n }\n }\n\n // Selection objects are immutable. A new one is created every time\n // the selection changes. A selection is one or more non-overlapping\n // (and non-touching) ranges, sorted, and an integer that indicates\n // which one is the primary selection (the one that's scrolled into\n // view, that getCursor returns, etc).\n var Selection = function(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n };\n\n Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n Selection.prototype.equals = function (other) {\n if (other == this) { return true }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this.ranges[i], there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n }\n return true\n };\n\n Selection.prototype.deepCopy = function () {\n var out = [];\n for (var i = 0; i < this.ranges.length; i++)\n { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }\n return new Selection(out, this.primIndex)\n };\n\n Selection.prototype.somethingSelected = function () {\n for (var i = 0; i < this.ranges.length; i++)\n { if (!this.ranges[i].empty()) { return true } }\n return false\n };\n\n Selection.prototype.contains = function (pos, end) {\n if (!end) { end = pos; }\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n { return i }\n }\n return -1\n };\n\n var Range = function(anchor, head) {\n this.anchor = anchor; this.head = head;\n };\n\n Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n function normalizeSelection(cm, ranges, primIndex) {\n var mayTouch = cm && cm.options.selectionsMayTouch;\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i], prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) { --primIndex; }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex)\n }\n\n function simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0)\n }\n\n // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n function changeEnd(change) {\n if (!change.text) { return change.to }\n return Pos(change.from.line + change.text.length - 1,\n lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n }\n\n // Adjust a position to refer to the post-change position of the\n // same text, or the end of the change if the change covers it.\n function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) { return pos }\n if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n return Pos(line, ch)\n }\n\n function computeSelAfterChange(doc, change) {\n var out = [];\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change),\n adjustForChange(range.head, change)));\n }\n return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n }\n\n function offsetPos(pos, old, nw) {\n if (pos.line == old.line)\n { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n else\n { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n }\n\n // Used by replaceSelections to allow moving the selection to the\n // start or around the replaced test. Hint may be \"start\" or \"around\".\n function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n if (hint == \"around\") {\n var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n return new Selection(out, doc.sel.primIndex)\n }\n\n // Used to get the editor into a consistent state again when options change.\n\n function loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n }\n\n function resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) { regChange(cm); }\n }\n\n // DOCUMENT DATA STRUCTURE\n\n // By default, updates that start and end at the beginning of a line\n // are treated specially, in order to make the association of line\n // widgets and marker elements with the text behave more intuitive.\n function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n }\n\n // Perform a change on the document data structure.\n function updateDoc(doc, change, markedSpans, estimateHeight) {\n function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n var result = [];\n for (var i = start; i < end; ++i)\n { result.push(new Line(text[i], spansFor(i), estimateHeight)); }\n return result\n }\n\n var from = change.from, to = change.to, text = change.text;\n var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n // Adjust the line structure\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n if (nlines) { doc.remove(from.line, nlines); }\n if (added.length) { doc.insert(from.line, added); }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n }\n\n // Call f for all linked documents.\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) { continue }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) { continue }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n } }\n }\n propagate(doc, null, true);\n }\n\n // Attach a document to an editor.\n function attachDoc(cm, doc) {\n if (doc.cm) { throw new Error(\"This document is already in use.\") }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n cm.options.direction = doc.direction;\n if (!cm.options.lineWrapping) { findMaxLine(cm); }\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n\n function setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n }\n\n function directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n }\n\n function History(prev) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = []; this.undone = [];\n this.undoDepth = prev ? prev.undoDepth : Infinity;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1;\n }\n\n // Create a history change event from an updateDoc-style change\n // object.\n function historyChangeFromChange(doc, change) {\n var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n return histChange\n }\n\n // Pop all selection events off the end of a history array. Stop at\n // a change event.\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) { array.pop(); }\n else { break }\n }\n }\n\n // Find the top change event in the history. Pop off selection\n // events that are in the way.\n function lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done)\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done)\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done)\n }\n }\n\n // Register a change in the history. Merges changes that are within\n // a single operation, or are close together with an origin that\n // allows merging (starting with \"+\") into a single event.\n function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date, cur;\n var last;\n\n if ((hist.lastOp == opId ||\n hist.lastOrigin == change.origin && change.origin &&\n ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n change.origin.charAt(0) == \"*\")) &&\n (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n if (!before || !before.ranges)\n { pushSelectionToHistory(doc.sel, hist.done); }\n cur = {changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation};\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) { hist.done.shift(); }\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) { signal(doc, \"historyAdded\"); }\n }\n\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" ||\n ch == \"+\" &&\n prev.ranges.length == sel.ranges.length &&\n prev.somethingSelected() == sel.somethingSelected() &&\n new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n }\n\n // Called whenever the selection changes, sets the new selection as\n // the pending selection in the history, and pushes the old pending\n // selection into the 'done' array when it was significantly\n // different (in number of selected ranges, emptiness, or time).\n function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history, origin = options && options.origin;\n\n // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n if (opId == hist.lastSelOp ||\n (origin && hist.lastSelOrigin == origin &&\n (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n { hist.done[hist.done.length - 1] = sel; }\n else\n { pushSelectionToHistory(sel, hist.done); }\n\n hist.lastSelTime = +new Date;\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false)\n { clearSelectionEvents(hist.undone); }\n }\n\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel)))\n { dest.push(sel); }\n }\n\n // Used to store marked span information in the history.\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id], n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans)\n { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n ++n;\n });\n }\n\n // When un/re-doing restores text containing marked spans, those\n // that have been explicitly cleared should not be restored.\n function removeClearedSpans(spans) {\n if (!spans) { return null }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n else if (out) { out.push(spans[i]); }\n }\n return !out ? spans : out.length ? out : null\n }\n\n // Retrieve and filter the old marked spans stored in a change event.\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) { return null }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i)\n { nw.push(removeClearedSpans(found[i])); }\n return nw\n }\n\n // Used for un/re-doing changes from the history. Combines the\n // result of computing the existing spans with the set of spans that\n // existed in the history (so that deleting around a span and then\n // undoing brings back the span).\n function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) { return stretched }\n if (!stretched) { return old }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i], stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k)\n { if (oldCur[k].marker == span.marker) { continue spans } }\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old\n }\n\n // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n function copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue\n }\n var changes = event.changes, newChanges = [];\n copy.push({changes: newChanges});\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j], m = (void 0);\n newChanges.push({from: change.from, to: change.to, text: change.text});\n if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n } } }\n }\n }\n return copy\n }\n\n // The 'scroll' parameter given to many of these indicated whether\n // the new cursor position should be scrolled into view after\n // modifying the selection.\n\n // If shift is held or the extend flag is set, extends a range to\n // include a given position (and optionally a second position).\n // Otherwise, simply returns the range between the given positions.\n // Used for cursor motion and such.\n function extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n if (posBefore != (cmp(other, anchor) < 0)) {\n anchor = head;\n head = other;\n } else if (posBefore != (cmp(head, other) < 0)) {\n head = other;\n }\n }\n return new Range(anchor, head)\n } else {\n return new Range(other || head, head)\n }\n }\n\n // Extend the primary selection range, discard the rest.\n function extendSelection(doc, head, other, options, extend) {\n if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n }\n\n // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n function extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n for (var i = 0; i < doc.sel.ranges.length; i++)\n { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n }\n\n // Updates a single range in the selection.\n function replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n }\n\n // Reset the selection to a single range.\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n }\n\n // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n function filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function(ranges) {\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++)\n { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n clipPos(doc, ranges[i].head)); }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n else { return sel }\n }\n\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done, last = lst(done);\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n }\n\n // Set a new selection.\n function setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n }\n\n function setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n { sel = filterSelectionChange(doc, sel, options); }\n\n var bias = options && options.bias ||\n (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption(\"readOnly\") != \"nocursor\")\n { ensureCursorVisible(doc.cm); }\n }\n\n function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) { return }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = 1;\n doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n signalLater(doc, \"cursorActivity\", doc);\n }\n\n // Verify that the selection does not partially select any atomic\n // marked ranges.\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n }\n\n // Return a selection that does not partially select any atomic\n // ranges.\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = range.head == range.anchor ? newAnchor : skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) { out = sel.ranges.slice(0, i); }\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n }\n\n function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i], m = sp.marker;\n\n // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n // is with selectLeft/Right\n var preventCursorLeft = (\"selectLeft\" in m) ? !m.selectLeft : m.inclusiveLeft;\n var preventCursorRight = (\"selectRight\" in m) ? !m.selectRight : m.inclusiveRight;\n\n if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) { break }\n else {--i; continue}\n }\n }\n if (!m.atomic) { continue }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n if (dir < 0 ? preventCursorRight : preventCursorLeft)\n { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n if (dir < 0 ? preventCursorLeft : preventCursorRight)\n { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n }\n } }\n return pos\n }\n\n // Ensure a given position is not inside an atomic range.\n function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0)\n }\n return found\n }\n\n function movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n else { return null }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n else { return null }\n } else {\n return new Pos(pos.line, pos.ch + dir)\n }\n }\n\n function selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n }\n\n // UPDATING\n\n // Allow \"beforeChange\" event handlers to influence a change\n function filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function () { return obj.canceled = true; }\n };\n if (update) { obj.update = function (from, to, text, origin) {\n if (from) { obj.from = clipPos(doc, from); }\n if (to) { obj.to = clipPos(doc, to); }\n if (text) { obj.text = text; }\n if (origin !== undefined) { obj.origin = origin; }\n }; }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n if (obj.canceled) {\n if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n return null\n }\n return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n }\n\n // Apply a change to a document, and add it to the document's\n // history, and propagating it to all linked documents.\n function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n if (doc.cm.state.suppressEdits) { return }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) { return }\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i)\n { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n } else {\n makeChangeInner(doc, change);\n }\n }\n\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n }\n\n // Revert a change stored in a document's history.\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n if (suppress && !allowSelectionOnly) { return }\n\n var hist = doc.history, event, selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n var i = 0;\n for (; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n { break }\n }\n if (i == source.length) { return }\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {clearRedo: false});\n return\n }\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return\n } else { break }\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({changes: antiChanges, generation: hist.generation});\n hist.generation = event.generation || ++hist.maxGeneration;\n\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function ( i ) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {}\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n var rebased = [];\n\n // Propagate to the linked documents\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop( i$1 );\n\n if ( returned ) return returned.v;\n }\n }\n\n // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n function shiftDoc(doc, distance) {\n if (distance == 0) { return }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n Pos(range.anchor.line + distance, range.anchor.ch),\n Pos(range.head.line + distance, range.head.ch)\n ); }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n { regLineChange(doc.cm, l, \"gutter\"); }\n }\n }\n\n // More lower-level change function, handling only a single document\n // (not linked ones).\n function makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp)\n { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return\n }\n if (change.from.line > doc.lastLine()) { return }\n\n // Clip the change to the size of this doc\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)], origin: change.origin};\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]], origin: change.origin};\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n else { updateDoc(doc, change, spans); }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n { doc.cantEdit = false; }\n }\n\n // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n var recomputeMaxLength = false, checkWidthStart = from.line;\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1)\n { signalCursorActivity(cm); }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\n if (change.full)\n { regChange(cm); }\n else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n { regLineChange(cm, from.line, \"text\"); }\n else\n { regChange(cm, from.line, to.line + 1, lendiff); }\n\n var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from, to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n }\n cm.display.selForContextMenu = null;\n }\n\n function replaceRange(doc, code, from, to, origin) {\n var assign;\n\n if (!to) { to = from; }\n if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n if (typeof code == \"string\") { code = doc.splitLines(code); }\n makeChange(doc, {from: from, to: to, text: code, origin: origin});\n }\n\n // Rebasing/resetting history to deal with externally-sourced changes\n\n function rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n }\n\n // Tries to rebase an array of history events given a change in the\n // document. If the change touches the same lines as the event, the\n // event, and everything 'behind' it, is discarded. If the change is\n // before the event, the event's positions are updated. Uses a\n // copy-on-write scheme for the positions, to avoid having to\n // reallocate them all on every rebase, but also avoid problems with\n // shared position objects being unsafely updated.\n function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i], ok = true;\n if (sub.ranges) {\n if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n continue\n }\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break\n }\n }\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n }\n\n function rebaseHist(hist, change) {\n var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n }\n\n // Utility for applying a change to a line by handle or number,\n // returning the number and optionally registering the line as\n // changed.\n function changeLine(doc, handle, changeType, op) {\n var no = handle, line = handle;\n if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n else { no = lineNo(handle); }\n if (no == null) { return null }\n if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n return line\n }\n\n // The document is represented as a BTree consisting of leaves, with\n // chunk of lines in them, and branches, with up to ten leaves or\n // other branch nodes below them. The top node is always a branch\n // node, and is the document object itself (meaning it has\n // additional methods and properties).\n //\n // All nodes have parent links. The tree is used both to go from\n // line numbers to line objects, and to go from objects to numbers.\n // It also indexes by height, and is used to convert between height\n // and line object, and to find the total height of the document.\n //\n // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n function LeafChunk(lines) {\n this.lines = lines;\n this.parent = null;\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n height += lines[i].height;\n }\n this.height = height;\n }\n\n LeafChunk.prototype = {\n chunkSize: function() { return this.lines.length },\n\n // Remove the n lines at offset 'at'.\n removeInner: function(at, n) {\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this.lines[i];\n this.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n this.lines.splice(at, n);\n },\n\n // Helper used to collapse a small branch into a single leaf.\n collapse: function(lines) {\n lines.push.apply(lines, this.lines);\n },\n\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function(at, lines, height) {\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }\n },\n\n // Used to iterate over a part of the tree.\n iterN: function(at, n, op) {\n for (var e = at + n; at < e; ++at)\n { if (op(this.lines[at])) { return true } }\n }\n };\n\n function BranchChunk(children) {\n this.children = children;\n var size = 0, height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize(); height += ch.height;\n ch.parent = this;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n\n BranchChunk.prototype = {\n chunkSize: function() { return this.size },\n\n removeInner: function(at, n) {\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at), oldHeight = child.height;\n child.removeInner(at, rm);\n this.height -= oldHeight - child.height;\n if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n if ((n -= rm) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 &&\n (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n\n collapse: function(lines) {\n for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }\n },\n\n insertInner: function(at, lines, height) {\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this.children.splice(++i, 0, leaf);\n leaf.parent = this;\n }\n child.lines = child.lines.slice(0, remaining);\n this.maybeSpill();\n }\n break\n }\n at -= sz;\n }\n },\n\n // When a node has grown, check whether it should be split.\n maybeSpill: function() {\n if (this.children.length <= 10) { return }\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) { // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10)\n me.parent.maybeSpill();\n },\n\n iterN: function(at, n, op) {\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) { return true }\n if ((n -= used) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n }\n };\n\n // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = function(doc, node, options) {\n if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n { this[opt] = options[opt]; } } }\n this.doc = doc;\n this.node = node;\n };\n\n LineWidget.prototype.clear = function () {\n var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n if (no == null || !ws) { return }\n for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }\n if (!ws.length) { line.widgets = null; }\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n };\n\n LineWidget.prototype.changed = function () {\n var this$1 = this;\n\n var oldH = this.height, cm = this.doc.cm, line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) { return }\n if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n };\n eventMixin(LineWidget);\n\n function adjustScrollWhenAboveVisible(cm, line, diff) {\n if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n { addToScrollTop(cm, diff); }\n }\n\n function addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) { widgets.push(widget); }\n else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }\n widget.line = line;\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) { addToScrollTop(cm, widget.height); }\n cm.curOp.forceUpdate = true;\n }\n return true\n });\n if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n return widget\n }\n\n // TEXTMARKERS\n\n // Created with markText and setBookmark methods. A TextMarker is a\n // handle that can be used to clear or find a marked position in the\n // document. Line objects hold arrays (markedSpans) containing\n // {from, to, marker} object pointing to such marker objects, and\n // indicating that such a marker is present on that line. Multiple\n // lines may point to the same marker when it spans across lines.\n // The spans will have null for their from/to properties when the\n // marker continues beyond the start/end of the line. Markers have\n // links back to the lines they currently touch.\n\n // Collapsed markers have unique ids, in order to be able to order\n // them, which is needed for uniquely determining an outer marker\n // when they overlap (they may nest, but not partially overlap).\n var nextMarkerId = 0;\n\n var TextMarker = function(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n };\n\n // Clear the marker.\n TextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) { return }\n var cm = this.doc.cm, withOp = cm && !cm.curOp;\n if (withOp) { startOperation(cm); }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) { signalLater(this, \"clear\", found.from, found.to); }\n }\n var min = null, max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n else if (cm) {\n if (span.to != null) { max = lineNo(line); }\n if (span.from != null) { min = lineNo(line); }\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n { updateLineHeight(line, textHeight(cm.display)); }\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this.lines[i$1]), len = lineLength(visual);\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n } }\n\n if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) { reCheckSelection(cm.doc); }\n }\n if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n if (withOp) { endOperation(cm); }\n if (this.parent) { this.parent.clear(); }\n };\n\n // Find the position of the marker in the document. Returns a {from,\n // to} object by default. Side can be passed to get a specific side\n // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n // Pos objects returned contain a line object, rather than a line\n // number (used to prevent looking up the same line twice).\n TextMarker.prototype.find = function (side, lineObj) {\n if (side == null && this.type == \"bookmark\") { side = 1; }\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) { return from }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) { return to }\n }\n }\n return from && {from: from, to: to}\n };\n\n // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n TextMarker.prototype.changed = function () {\n var this$1 = this;\n\n var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n if (!pos || !cm) { return }\n runInOp(cm, function () {\n var line = pos.line, lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n if (dHeight)\n { updateLineHeight(line, line.height + dHeight); }\n }\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n };\n\n TextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n }\n this.lines.push(line);\n };\n\n TextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp\n ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n };\n eventMixin(TextMarker);\n\n // Create a marker, wire it up to the right lines, and\n function markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n var marker = new TextMarker(doc, type), diff = cmp(from, to);\n if (options) { copyObj(options, marker, false); }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n { return marker }\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory)\n { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n var curLine = from.line, cm = doc.cm, updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n { updateMaxLine = true; }\n if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n addMarkedSpan(line, new MarkedSpan(marker,\n curLine == from.line ? from.ch : null,\n curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp);\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n }); }\n\n if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length)\n { doc.clearHistory(); }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n if (marker.collapsed)\n { regChange(cm, from.line, to.line + 1); }\n else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n marker.attributes || marker.title)\n { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n if (marker.atomic) { reCheckSelection(cm.doc); }\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker\n }\n\n // SHARED TEXTMARKERS\n\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n var SharedTextMarker = function(markers, primary) {\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i)\n { markers[i].parent = this; }\n };\n\n SharedTextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) { return }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i)\n { this.markers[i].clear(); }\n signalLater(this, \"clear\");\n };\n\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj)\n };\n eventMixin(SharedTextMarker);\n\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) { options.widgetNode = widget.cloneNode(true); }\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i)\n { if (doc.linked[i].isParent) { return } }\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary)\n }\n\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n }\n\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], pos = marker.find();\n var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n\n function detachSharedMarkers(markers) {\n var loop = function ( i ) {\n var marker = markers[i], linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) loop( i );\n }\n\n var nextDocId = 0;\n var Doc = function(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n if (firstLine == null) { firstLine = 0; }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") { text = this.splitLines(text); }\n updateDoc(this, {from: start, to: start, text: text});\n setSelection(this, simpleSelection(start), sel_dontScroll);\n };\n\n Doc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function(from, to, op) {\n if (op) { this.iterN(from - this.first, to - from, op); }\n else { this.iterN(this.first, this.first + this.size, from); }\n },\n\n // Non-public interface for adding and removing lines.\n insert: function(at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n setValue: docMethodOp(function(code) {\n var top = Pos(this.first, 0), last = this.first + this.size - 1;\n makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function(code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function(from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) { return lines }\n if (lineSep === '') { return lines.join('') }\n return lines.join(lineSep || this.lineSeparator())\n },\n\n getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n getLineNumber: function(line) {return lineNo(line)},\n\n getLineHandleVisualStart: function(line) {\n if (typeof line == \"number\") { line = getLine(this, line); }\n return visualLine(line)\n },\n\n lineCount: function() {return this.size},\n firstLine: function() {return this.first},\n lastLine: function() {return this.first + this.size - 1},\n\n clipPos: function(pos) {return clipPos(this, pos)},\n\n getCursor: function(start) {\n var range = this.sel.primary(), pos;\n if (start == null || start == \"head\") { pos = range.head; }\n else if (start == \"anchor\") { pos = range.anchor; }\n else if (start == \"end\" || start == \"to\" || start === false) { pos = range.to(); }\n else { pos = range.from(); }\n return pos\n },\n listSelections: function() { return this.sel.ranges },\n somethingSelected: function() {return this.sel.somethingSelected()},\n\n setCursor: docMethodOp(function(line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function(anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function(head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function(heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function(f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function(ranges, primary, options) {\n if (!ranges.length) { return }\n var out = [];\n for (var i = 0; i < ranges.length; i++)\n { out[i] = new Range(clipPos(this, ranges[i].anchor),\n clipPos(this, ranges[i].head || ranges[i].anchor)); }\n if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n setSelection(this, normalizeSelection(this.cm, out, primary), options);\n }),\n addSelection: docMethodOp(function(anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n }),\n\n getSelection: function(lineSep) {\n var ranges = this.sel.ranges, lines;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n if (lineSep === false) { return lines }\n else { return lines.join(lineSep || this.lineSeparator()) }\n },\n getSelections: function(lineSep) {\n var parts = [], ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }\n parts[i] = sel;\n }\n return parts\n },\n replaceSelection: function(code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++)\n { dup[i] = code; }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function(code, collapse, origin) {\n var changes = [], sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n { makeChange(this, changes[i$1]); }\n if (newSel) { setSelectionReplaceHistory(this, newSel); }\n else if (this.cm) { ensureCursorVisible(this.cm); }\n }),\n undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n setExtending: function(val) {this.extend = val;},\n getExtending: function() {return this.extend},\n\n historySize: function() {\n var hist = this.history, done = 0, undone = 0;\n for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n return {undo: done, redo: undone}\n },\n clearHistory: function() {\n var this$1 = this;\n\n this.history = new History(this.history);\n linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);\n },\n\n markClean: function() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function(forceSplit) {\n if (forceSplit)\n { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n return this.history.generation\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration)\n },\n\n getHistory: function() {\n return {done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)}\n },\n setHistory: function(histData) {\n var hist = this.history = new History(this.history);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n\n setGutterMarker: docMethodOp(function(line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n return true\n })\n }),\n\n clearGutter: docMethodOp(function(gutterID) {\n var this$1 = this;\n\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n return true\n });\n }\n });\n }),\n\n lineInfo: function(line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) { return null }\n n = line;\n line = getLine(this, line);\n if (!line) { return null }\n } else {\n n = lineNo(line);\n if (n == null) { return null }\n }\n return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n widgets: line.widgets}\n },\n\n addLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) { line[prop] = cls; }\n else if (classTest(cls).test(line[prop])) { return false }\n else { line[prop] += \" \" + cls; }\n return true\n })\n }),\n removeLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) { return false }\n else if (cls == null) { line[prop] = null; }\n else {\n var found = cur.match(classTest(cls));\n if (!found) { return false }\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true\n })\n }),\n\n addLineWidget: docMethodOp(function(handle, node, options) {\n return addLineWidget(this, handle, node, options)\n }),\n removeLineWidget: function(widget) { widget.clear(); },\n\n markText: function(from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n },\n setBookmark: function(pos, options) {\n var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false, shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents};\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\")\n },\n findMarksAt: function(pos) {\n pos = clipPos(this, pos);\n var markers = [], spans = getLine(this, pos.line).markedSpans;\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) &&\n (span.to == null || span.to >= pos.ch))\n { markers.push(span.marker.parent || span.marker); }\n } }\n return markers\n },\n findMarks: function(from, to, filter) {\n from = clipPos(this, from); to = clipPos(this, to);\n var found = [], lineNo = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) { for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n span.from == null && lineNo != from.line ||\n span.from != null && lineNo == to.line && span.from >= to.ch) &&\n (!filter || filter(span.marker)))\n { found.push(span.marker.parent || span.marker); }\n } }\n ++lineNo;\n });\n return found\n },\n getAllMarks: function() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i)\n { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n });\n return markers\n },\n\n posFromIndex: function(off) {\n var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) { ch = off; return true }\n off -= sz;\n ++lineNo;\n });\n return clipPos(this, Pos(lineNo, ch))\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) { return 0 }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index\n },\n\n copy: function(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size),\n this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc\n },\n\n linkedDoc: function(options) {\n if (!options) { options = {}; }\n var from = this.first, to = this.first + this.size;\n if (options.from != null && options.from > from) { from = options.from; }\n if (options.to != null && options.to < to) { to = options.to; }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) { copy.history = this.history\n ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy\n },\n unlinkDoc: function(other) {\n if (other instanceof CodeMirror) { other = other.doc; }\n if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n var link = this.linked[i];\n if (link.doc != other) { continue }\n this.linked.splice(i, 1);\n other.unlinkDoc(this);\n detachSharedMarkers(findSharedMarkers(this));\n break\n } }\n // If the histories were shared, split them again\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n getMode: function() {return this.mode},\n getEditor: function() {return this.cm},\n\n splitLines: function(str) {\n if (this.lineSep) { return str.split(this.lineSep) }\n return splitLinesAuto(str)\n },\n lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") { dir = \"ltr\"; }\n if (dir == this.direction) { return }\n this.direction = dir;\n this.iter(function (line) { return line.order = null; });\n if (this.cm) { directionChanged(this.cm); }\n })\n });\n\n // Public alias.\n Doc.prototype.eachLine = Doc.prototype.iter;\n\n // Kludge to work around strange IE behavior where it'll sometimes\n // re-fire a series of drag-related events right after the drop (#1551)\n var lastDrop = 0;\n\n function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n { return }\n e_preventDefault(e);\n if (ie) { lastDrop = +new Date; }\n var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) { return }\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length, text = Array(n), read = 0;\n var markAsReadAndPasteIfAllFilesAreRead = function () {\n if (++read == n) {\n operation(cm, function () {\n pos = clipPos(cm.doc, pos);\n var change = {from: pos, to: pos,\n text: cm.doc.splitLines(\n text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),\n origin: \"paste\"};\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n })();\n }\n };\n var readTextFromFile = function (file, i) {\n if (cm.options.allowDropFileTypes &&\n indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n markAsReadAndPasteIfAllFilesAreRead();\n return\n }\n var reader = new FileReader;\n reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };\n reader.onload = function () {\n var content = reader.result;\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n markAsReadAndPasteIfAllFilesAreRead();\n return\n }\n text[i] = content;\n markAsReadAndPasteIfAllFilesAreRead();\n };\n reader.readAsText(file);\n };\n for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }\n } else { // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(function () { return cm.display.input.focus(); }, 20);\n return\n }\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n if (text$1) {\n var selected;\n if (cm.state.draggingText && !cm.state.draggingText.copy)\n { selected = cm.listSelections(); }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n }\n catch(e$1){}\n }\n }\n\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\";\n\n // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) { img.parentNode.removeChild(img); }\n }\n }\n\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) { return }\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n }\n\n function clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n }\n\n // These must be handled carefully, because naively registering a\n // handler for each editor will cause the editors to never be\n // garbage collected.\n\n function forEachCodeMirror(f) {\n if (!document.getElementsByClassName) { return }\n var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) { editors.push(cm); }\n }\n if (editors.length) { editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n }); }\n }\n\n var globalsRegistered = false;\n function ensureGlobalHandlers() {\n if (globalsRegistered) { return }\n registerGlobalHandlers();\n globalsRegistered = true;\n }\n function registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100); }\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n }\n // Called when the window resizes\n function onResize(cm) {\n var d = cm.display;\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n\n var keyNames = {\n 3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n 19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n 36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n 46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n 106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n 173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n 221: \"]\", 222: \"'\", 224: \"Mod\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n 63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n };\n\n // Number keys\n for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n // Alphabetic keys\n for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n // Function keys\n for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n var keyMap = {};\n\n keyMap.basic = {\n \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n };\n // Note that the save and find-related commands aren't defined by\n // default. User code or addons can define them. Unknown commands\n // are simply ignored.\n keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n };\n // Very basic readline/emacs-style bindings, which are standard on Mac.\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\", \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\",\n \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\",\n \"Ctrl-T\": \"transposeChars\", \"Ctrl-O\": \"openLine\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n // KEYMAP DISPATCH\n\n function normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n }\n if (alt) { name = \"Alt-\" + name; }\n if (ctrl) { name = \"Ctrl-\" + name; }\n if (cmd) { name = \"Cmd-\" + name; }\n if (shift) { name = \"Shift-\" + name; }\n return name\n }\n\n // This is a kludge to keep keymaps mostly working as raw objects\n // (backwards compatibility) while at the same time support features\n // like normalization and multi-stroke key bindings. It compiles a\n // new normalized keymap, and then updates the old object to reflect\n // this.\n function normalizeKeyMap(keymap) {\n var copy = {};\n for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n if (value == \"...\") { delete keymap[keyname]; continue }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = (void 0), name = (void 0);\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n var prev = copy[name];\n if (!prev) { copy[name] = val; }\n else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n }\n delete keymap[keyname];\n } }\n for (var prop in copy) { keymap[prop] = copy[prop]; }\n return keymap\n }\n\n function lookupKey(key, map, handle, context) {\n map = getKeyMap(map);\n var found = map.call ? map.call(key, context) : map[key];\n if (found === false) { return \"nothing\" }\n if (found === \"...\") { return \"multi\" }\n if (found != null && handle(found)) { return \"handled\" }\n\n if (map.fallthrough) {\n if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n { return lookupKey(key, map.fallthrough, handle, context) }\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle, context);\n if (result) { return result }\n }\n }\n }\n\n // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\n function isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n }\n\n function addModifierNames(name, event, noShift) {\n var base = name;\n if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") { name = \"Cmd-\" + name; }\n if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n return name\n }\n\n // Look up the name of a key as indicated by an event object.\n function keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) { return false }\n // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n if (event.keyCode == 3 && event.code) { name = event.code; }\n return addModifierNames(name, event, noShift)\n }\n\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val\n }\n\n // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges, kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n ensureCursorVisible(cm);\n });\n }\n\n function moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target\n }\n\n function moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n }\n\n function endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n if (cm.doc.direction == \"rtl\") { dir = -dir; }\n var order = getOrder(lineObj, cm.doc.direction);\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = (dir < 0) == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch;\n // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n } else { ch = dir < 0 ? part.to : part.from; }\n return new Pos(lineNo, ch, sticky)\n }\n }\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n }\n\n function moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n if (!bidi) { return moveLogically(line, start, dir) }\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir)\n }\n\n var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch)\n };\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = (part.level == 1) == (dir < 0);\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky)\n }\n }\n\n // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n ? new Pos(start.line, mv(ch, 1), \"before\")\n : new Pos(start.line, ch, \"after\"); };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = (dir > 0) == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n }\n };\n\n // Case 3a: Look for other bidi parts on the same visual line\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n if (res) { return res }\n\n // Case 3b: Look for other bidi parts on the next visual line\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n if (res) { return res }\n }\n\n // Case 4: Nowhere to move\n return null\n }\n\n // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n var commands = {\n selectAll: selectAll,\n singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine())\n { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n else\n { return {from: range.head, to: Pos(range.head.line, len)} }\n } else {\n return {from: range.from(), to: range.to()}\n }\n }); },\n deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n }); }); },\n delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0), to: range.from()\n }); }); },\n delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n return {from: leftPos, to: range.from()}\n }); },\n delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n return {from: range.from(), to: rightPos }\n }); },\n undo: function (cm) { return cm.undo(); },\n redo: function (cm) { return cm.redo(); },\n undoSelection: function (cm) { return cm.undoSelection(); },\n redoSelection: function (cm) { return cm.redoSelection(); },\n goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n {origin: \"+move\", bias: -1}\n ); },\n goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n }, sel_move); },\n goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: 0, top: top}, \"div\")\n }, sel_move); },\n goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n return pos\n }, sel_move); },\n goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n delCharBefore: function (cm) { return cm.deleteH(-1, \"codepoint\"); },\n delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n insertSoftTab: function (cm) {\n var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n cm.replaceSelections(spaces);\n },\n defaultTab: function (cm) {\n if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n else { cm.execCommand(\"insertTab\"); }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function (cm) { return runInOp(cm, function () {\n var ranges = cm.listSelections(), newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) { continue }\n var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n prev.charAt(prev.length - 1),\n Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n }); },\n newlineAndIndent: function (cm) { return runInOp(cm, function () {\n var sels = cm.listSelections();\n for (var i = sels.length - 1; i >= 0; i--)\n { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n sels = cm.listSelections();\n for (var i$1 = 0; i$1 < sels.length; i$1++)\n { cm.indentLine(sels[i$1].from().line, null, true); }\n ensureCursorVisible(cm);\n }); },\n openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n };\n\n\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, visual, lineN, 1)\n }\n function lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, line, lineN, -1)\n }\n function lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n }\n return start\n }\n\n // Run a handler that was bound to a key.\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) { return false }\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift, done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n if (dropShift) { cm.display.shift = false; }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done\n }\n\n function lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n if (result) { return result }\n }\n return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n || lookupKey(name, cm.options.keyMap, handle, cm)\n }\n\n // Note that, despite the name, this function is also used to check\n // for bound mouse clicks.\n\n var stopSeq = new Delayed;\n\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) { return \"handled\" }\n if (/\\'$/.test(name))\n { cm.state.keySeq = null; }\n else\n { stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n }); }\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n }\n return dispatchKeyInner(cm, name, e, handle)\n }\n\n function dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\")\n { cm.state.keySeq = name; }\n if (result == \"handled\")\n { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result\n }\n\n // Handle a key from the keydown event.\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) { return false }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n { return doHandleBinding(cm, b) }\n })\n } else {\n return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n }\n }\n\n // Handle a key from the keypress event\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n }\n\n var lastStoppedKey = null;\n function onKeyDown(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) { return }\n cm.curOp.focus = activeElt(root(cm));\n if (signalDOMEvent(cm, e)) { return }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n { cm.replaceSelection(\"\", null, \"cut\"); }\n }\n if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)\n { document.execCommand(\"cut\"); }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n { showCrossHair(cm); }\n }\n\n function showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n\n function onKeyUp(e) {\n if (e.keyCode == 16) { this.doc.sel.shift = false; }\n signalDOMEvent(this, e);\n }\n\n function onKeyPress(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) { return }\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n var keyCode = e.keyCode, charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") { return }\n if (handleCharBinding(cm, e, ch)) { return }\n cm.display.input.onKeyPress(e);\n }\n\n var DOUBLECLICK_DELAY = 400;\n\n var PastClick = function(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n };\n\n PastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time &&\n cmp(pos, this.pos) == 0 && button == this.button\n };\n\n var lastClick, lastDoubleClick;\n function clickRepeat(pos, button) {\n var now = +new Date;\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\"\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\"\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\"\n }\n }\n\n // A mouse down can be a single click, double click, triple click,\n // start of selection drag, start of text drag, new cursor\n // (ctrl-click), rectangle drag (alt-drag), or xwin\n // middle-click-paste. Or it might be a click on something we should\n // not interfere with, such as a scrollbar or widget.\n function onMouseDown(e) {\n var cm = this, display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () { return display.scroller.draggable = true; }, 100);\n }\n return\n }\n if (clickInGutter(cm, e)) { return }\n var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n win(cm).focus();\n\n // #3261: make sure, that we're not starting a second selection\n if (button == 1 && cm.state.selectingText)\n { cm.state.selectingText(e); }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n if (button == 1) {\n if (pos) { leftButtonDown(cm, pos, repeat, e); }\n else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n } else if (button == 2) {\n if (pos) { extendSelection(cm.doc, pos); }\n setTimeout(function () { return display.input.focus(); }, 20);\n } else if (button == 3) {\n if (captureRightClick) { cm.display.input.onContextMenu(e); }\n else { delayBlurEvent(cm); }\n }\n }\n\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") { name = \"Double\" + name; }\n else if (repeat == \"triple\") { name = \"Triple\" + name; }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") { bound = commands[bound]; }\n if (!bound) { return false }\n var done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n return done\n })\n }\n\n function configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n return value\n }\n\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n else { cm.curOp.focus = activeElt(root(cm)); }\n\n var behavior = configureMouse(cm, repeat, event);\n\n var sel = cm.doc.sel, contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n { leftButtonStartDrag(cm, event, pos, behavior); }\n else\n { leftButtonSelect(cm, event, pos, behavior); }\n }\n\n // Start a text drag. When it ends, see if any dragging actually\n // happen, and treat as a click if it didn't.\n function leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display, moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) { display.scroller.draggable = false; }\n cm.state.draggingText = false;\n if (cm.state.delayingBlurEvent) {\n if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }\n else { delayBlurEvent(cm); }\n }\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n if (!moved) {\n e_preventDefault(e);\n if (!behavior.addNew)\n { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n if ((webkit && !safari) || ie && ie_version == 9)\n { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }\n else\n { display.input.focus(); }\n }\n });\n var mouseMove = function(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n var dragStart = function () { return moved = true; };\n // Let the drag handler handle this.\n if (webkit) { display.scroller.draggable = true; }\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { return display.input.focus(); }, 20);\n // IE's approach to draggable\n if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n }\n\n function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") { return new Range(pos, pos) }\n if (unit == \"word\") { return cm.findWordAt(pos) }\n if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n var result = unit(cm, pos);\n return new Range(result.from, result.to)\n }\n\n // Normal selection, as opposed to text dragging.\n function leftButtonSelect(cm, event, start, behavior) {\n if (ie) { delayBlurEvent(cm); }\n var display = cm.display, doc = cm.doc;\n e_preventDefault(event);\n\n var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n if (ourIndex > -1)\n { ourRange = ranges[ourIndex]; }\n else\n { ourRange = new Range(start, start); }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) { ourRange = new Range(start, start); }\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range = rangeForUnit(cm, start, behavior.unit);\n if (behavior.extend)\n { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }\n else\n { ourRange = range; }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n startSel = doc.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n {scroll: false, origin: \"*mouse\"});\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n {scroll: false, origin: \"*mouse\"});\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) { return }\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [], tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n line <= end; line++) {\n var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n if (left == right)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n else if (text.length > leftPos)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n }\n if (!ranges.length) { ranges.push(new Range(start, start)); }\n setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n {origin: \"*mouse\", scroll: false});\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor, head;\n if (cmp(range.anchor, anchor) > 0) {\n head = range.head;\n anchor = minPos(oldRange.from(), range.anchor);\n } else {\n head = range.anchor;\n anchor = maxPos(oldRange.to(), range.head);\n }\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect();\n // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) { return }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt(root(cm));\n extendTo(cur);\n var visible = visibleLines(display, doc);\n if (cur.line >= visible.to || cur.line < visible.from)\n { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) { setTimeout(operation(cm, function () {\n if (counter != curCount) { return }\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50); }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity;\n // If e is null or undefined we interpret this as someone trying\n // to explicitly cancel the selection rather than the user\n // letting go of the mouse button.\n if (e) {\n e_preventDefault(e);\n display.input.focus();\n }\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) { done(e); }\n else { extend(e); }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n }\n\n // Used when mouse-selecting to adjust the anchor to the proper side\n // of a bidi jump depending on the visual position of the head.\n function bidiSimplify(cm, range) {\n var anchor = range.anchor;\n var head = range.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }\n var order = getOrder(anchorLine);\n if (!order) { return range }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) { return range }\n var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) { return range }\n\n // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n var leftSide;\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n if (headIndex == boundary - 1 || headIndex == boundary)\n { leftSide = dir < 0; }\n else\n { leftSide = dir > 0; }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)\n }\n\n\n // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n function gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try { mX = e.clientX; mY = e.clientY; }\n catch(e$1) { return false }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n if (prevent) { e_preventDefault(e); }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n var g = display.gutters.childNodes[i];\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\n var gutter = cm.display.gutterSpecs[i];\n signal(cm, type, cm, line, gutter.className, e);\n return e_defaultPrevented(e)\n }\n }\n }\n\n function clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true)\n }\n\n // CONTEXT MENU HANDLING\n\n // To make the context menu work, we need to briefly unhide the\n // textarea (making it as unobtrusive as possible) to let the\n // right-click take effect on it.\n function onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n }\n\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n return gutterEvent(cm, e, \"gutterContextMenu\", false)\n }\n\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n\n var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n var defaults = {};\n var optionHandlers = {};\n\n function defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) { optionHandlers[name] =\n notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n }\n\n CodeMirror.defineOption = option;\n\n // Passed to option handlers when there is no old value.\n CodeMirror.Init = Init;\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) { return }\n var newBreaks = [], lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) { break }\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n lineNo++;\n });\n for (var i = newBreaks.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n if (old != Init) { cm.refresh(); }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n updateGutters(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n if (prev && prev.detach) { prev.detach(cm, next); }\n if (next.attach) { next.attach(cm, prev || null); }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm, val) {\n cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n updateGutters(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm, val) {\n cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n updateGutters(cm);\n }, true);\n option(\"firstLineNumber\", 1, updateGutters, true);\n option(\"lineNumberFormatter\", function (integer) { return integer; }, updateGutters, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n\n option(\"screenReaderLabel\", null, function (cm, val) {\n val = (val === '') ? null : val;\n cm.display.input.screenReaderLabelChanged(val);\n });\n\n option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) { cm.display.input.resetPosition(); }\n });\n\n option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n option(\"phrases\", null);\n }\n\n function dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n }\n\n function wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () { return updateScrollbars(cm); }, 100);\n }\n\n // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n function CodeMirror(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n\n var doc = options.value;\n if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n else if (options.mode) { doc.modeOption = options.mode; }\n this.doc = doc;\n\n var input = new CodeMirror.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input, options);\n display.wrapper.CodeMirror = this;\n themeChanged(this);\n if (options.lineWrapping)\n { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n initScrollbars(this);\n\n this.state = {\n keyMaps: [], // stores maps added by addKeyMap\n overlays: [], // highlighting overlays, as added by addOverlay\n modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(), // stores highlight worker timeout\n keySeq: null, // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) { display.input.focus(); }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if ((options.autofocus && !mobile) || this.hasFocus())\n { setTimeout(function () {\n if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }\n }, 20); }\n else\n { onBlur(this); }\n\n for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n { optionHandlers[opt](this, options[opt], Init); } }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) { options.finishInit(this); }\n for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping &&\n getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n { display.lineDiv.style.textRendering = \"auto\"; }\n }\n\n // The default configuration options.\n CodeMirror.defaults = defaults;\n // Functions to run when options are changed.\n CodeMirror.optionHandlers = optionHandlers;\n\n // Attach the necessary event handlers when initializing the editor\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11)\n { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) { return }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n })); }\n else\n { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n on(d.input.getField(), \"contextmenu\", function (e) {\n if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }\n });\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished, prevTouch = {end: 0};\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date;\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) { return false }\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1\n }\n function farAway(touch, other) {\n if (other.left == null) { return true }\n var dx = other.left - touch.left, dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20\n }\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date;\n d.activeTouch = {start: now, moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null};\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) { d.activeTouch.moved = true; }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null &&\n !touch.moved && new Date - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n { range = new Range(pos, pos); }\n else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n { range = cm.findWordAt(pos); }\n else // Triple tap\n { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch);\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n d.dragFunctions = {\n enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n start: function (e) { return onDragStart(cm, e); },\n drop: operation(cm, onDrop),\n leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n };\n\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n }\n\n var initHooks = [];\n CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n // Indent the given line. The how parameter can be \"smart\",\n // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n // (typically set to true for forced single-line indents), empty\n // lines are not indented, and places where the mode returns Pass\n // are left alone.\n function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc, state;\n if (how == null) { how = \"add\"; }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) { how = \"prev\"; }\n else { state = getContextBefore(cm, n).state; }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) { line.stateAfter = null; }\n var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) { return }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n else { indentation = 0; }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n\n var indentString = \"\", pos = 0;\n if (cm.options.indentWithTabs)\n { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n line.stateAfter = null;\n return true\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break\n }\n }\n }\n }\n\n // This will be set to a {lineWise: bool, text: [string]} object, so\n // that, when pasting, we know what kind of selections the copied\n // text was made out of.\n var lastCopied = null;\n\n function setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n }\n\n function applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n if (!sel) { sel = doc.sel; }\n\n var recent = +new Date - 200;\n var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n var textLines = splitLinesAuto(inserted), multiPaste = null;\n // When pasting N lines into N selections, insert one line per selection\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n for (var i = 0; i < lastCopied.text.length; i++)\n { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) { return [l]; });\n }\n }\n\n var updateInput = cm.curOp.updateInput;\n // Normal behavior is to insert the new text into every selection\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range = sel.ranges[i$1];\n var from = range.from(), to = range.to();\n if (range.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n { from = Pos(from.line, from.ch - deleted); }\n else if (cm.state.overwrite && !paste) // Handle overwrite\n { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\"))\n { from = to = Pos(from.line, 0); }\n }\n var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste)\n { triggerElectric(cm, inserted); }\n\n ensureCursorVisible(cm);\n if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n }\n\n function handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n if (pasted) {\n e.preventDefault();\n if (!cm.isReadOnly() && !cm.options.disableInput && cm.hasFocus())\n { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n return true\n }\n }\n\n function triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range = sel.ranges[i];\n if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }\n var mode = cm.getModeAt(range.head);\n var indented = false;\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++)\n { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range.head.line, \"smart\");\n break\n } }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n { indented = indentLine(cm, range.head.line, \"smart\"); }\n }\n if (indented) { signalLater(cm, \"electricInput\", cm, range.head.line); }\n }\n }\n\n function copyableRanges(cm) {\n var text = [], ranges = [];\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {text: text, ranges: ranges}\n }\n\n function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n field.setAttribute(\"autocorrect\", autocorrect ? \"on\" : \"off\");\n field.setAttribute(\"autocapitalize\", autocapitalize ? \"on\" : \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n }\n\n function hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n if (webkit) { te.style.width = \"1000px\"; }\n else { te.setAttribute(\"wrap\", \"off\"); }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) { te.style.border = \"1px solid black\"; }\n return div\n }\n\n // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n\n // This is not the complete set of editor methods. Most of the\n // methods defined on the Doc type are also injected into\n // CodeMirror.prototype, for backwards compatibility and\n // convenience.\n\n function addEditorMethods(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n var helpers = CodeMirror.helpers = {};\n\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function(){win(this).focus(); this.display.input.focus();},\n\n setOption: function(option, value) {\n var options = this.options, old = options[option];\n if (options[option] == value && option != \"mode\") { return }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option))\n { operation(this, optionHandlers[option])(this, value, old); }\n signal(this, \"optionChange\", this, option);\n },\n\n getOption: function(option) {return this.options[option]},\n getDoc: function() {return this.doc},\n\n addKeyMap: function(map, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n },\n removeKeyMap: function(map) {\n var maps = this.state.keyMaps;\n for (var i = 0; i < maps.length; ++i)\n { if (maps[i] == map || maps[i].name == map) {\n maps.splice(i, 1);\n return true\n } }\n },\n\n addOverlay: methodOp(function(spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n insertSorted(this.state.overlays,\n {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n priority: (options && options.priority) || 0},\n function (overlay) { return overlay.priority; });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function(spec) {\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this.state.modeGen++;\n regChange(this);\n return\n }\n }\n }),\n\n indentLine: methodOp(function(n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n else { dir = dir ? \"add\" : \"subtract\"; }\n }\n if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n }),\n indentSelection: methodOp(function(how) {\n var ranges = this.doc.sel.ranges, end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (!range.empty()) {\n var from = range.from(), to = range.to();\n var start = Math.max(end, from.line);\n end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j)\n { indentLine(this, j, how); }\n var newRanges = this.doc.sel.ranges;\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n } else if (range.head.line > end) {\n indentLine(this, range.head.line, how, true);\n end = range.head.line;\n if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }\n }\n }\n }),\n\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function(pos, precise) {\n return takeToken(this, pos, precise)\n },\n\n getLineTokens: function(line, precise) {\n return takeToken(this, Pos(line), precise, true)\n },\n\n getTokenTypeAt: function(pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n var type;\n if (ch == 0) { type = styles[2]; }\n else { for (;;) {\n var mid = (before + after) >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n else { type = styles[mid * 2 + 2]; break }\n } }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n },\n\n getModeAt: function(pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) { return mode }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n },\n\n getHelper: function(pos, type) {\n return this.getHelpers(pos, type)[0]\n },\n\n getHelpers: function(pos, type) {\n var found = [];\n if (!helpers.hasOwnProperty(type)) { return found }\n var help = helpers[type], mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) { found.push(help[mode[type]]); }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) { found.push(val); }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n { found.push(cur.val); }\n }\n return found\n },\n\n getStateAfter: function(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n return getContextBefore(this, line + 1, precise).state\n },\n\n cursorCoords: function(start, mode) {\n var pos, range = this.doc.sel.primary();\n if (start == null) { pos = range.head; }\n else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n else { pos = start ? range.from() : range.to(); }\n return cursorCoords(this, pos, mode || \"page\")\n },\n\n charCoords: function(pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n },\n\n coordsChar: function(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top)\n },\n\n lineAtHeight: function(height, mode) {\n height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset)\n },\n heightAtLine: function(line, mode, includeWidgets) {\n var end = false, lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) { line = this.doc.first; }\n else if (line > last) { line = last; end = true; }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n (end ? this.doc.height - heightAtLine(lineObj) : 0)\n },\n\n defaultTextHeight: function() { return textHeight(this.display) },\n defaultCharWidth: function() { return charWidth(this.display) },\n\n getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n addWidget: function(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom, left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n { top = pos.top - node.offsetHeight; }\n else if (pos.bottom + node.offsetHeight <= vspace)\n { top = pos.bottom; }\n if (left + node.offsetWidth > hspace)\n { left = hspace - node.offsetWidth; }\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") { left = 0; }\n else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n node.style.left = left + \"px\";\n }\n if (scroll)\n { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n },\n\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n\n execCommand: function(cmd) {\n if (commands.hasOwnProperty(cmd))\n { return commands[cmd].call(null, this) }\n },\n\n triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n findPosH: function(from, amount, unit, visually) {\n var dir = 1;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n cur = findPosH(this.doc, cur, dir, unit, visually);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveH: methodOp(function(dir, unit) {\n var this$1 = this;\n\n this.extendSelectionsBy(function (range) {\n if (this$1.display.shift || this$1.doc.extend || range.empty())\n { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }\n else\n { return dir < 0 ? range.from() : range.to() }\n }, sel_move);\n }),\n\n deleteH: methodOp(function(dir, unit) {\n var sel = this.doc.sel, doc = this.doc;\n if (sel.somethingSelected())\n { doc.replaceSelection(\"\", null, \"+delete\"); }\n else\n { deleteNearSelection(this, function (range) {\n var other = findPosH(doc, range.head, dir, unit, false);\n return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n }); }\n }),\n\n findPosV: function(from, amount, unit, goalColumn) {\n var dir = 1, x = goalColumn;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n var coords = cursorCoords(this, cur, \"div\");\n if (x == null) { x = coords.left; }\n else { coords.left = x; }\n cur = findPosV(this, coords, dir, unit);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveV: methodOp(function(dir, unit) {\n var this$1 = this;\n\n var doc = this.doc, goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range) {\n if (collapse)\n { return dir < 0 ? range.from() : range.to() }\n var headPos = cursorCoords(this$1, range.head, \"div\");\n if (range.goalColumn != null) { headPos.left = range.goalColumn; }\n goals.push(headPos.left);\n var pos = findPosV(this$1, headPos, dir, unit);\n if (unit == \"page\" && range == doc.sel.primary())\n { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n return pos\n }, sel_move);\n if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n { doc.sel.ranges[i].goalColumn = goals[i]; } }\n }),\n\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function(pos) {\n var doc = this.doc, line = getLine(doc, pos.line).text;\n var start = pos.ch, end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper)\n ? function (ch) { return isWordChar(ch, helper); }\n : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n while (start > 0 && check(line.charAt(start - 1))) { --start; }\n while (end < line.length && check(line.charAt(end))) { ++end; }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end))\n },\n\n toggleOverwrite: function(value) {\n if (value != null && value == this.state.overwrite) { return }\n if (this.state.overwrite = !this.state.overwrite)\n { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n else\n { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function() { return this.display.input.getField() == activeElt(root(this)) },\n isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n getScrollInfo: function() {\n var scroller = this.display.scroller;\n return {left: scroller.scrollLeft, top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n },\n\n scrollIntoView: methodOp(function(range, margin) {\n if (range == null) {\n range = {from: this.doc.sel.primary().head, to: null};\n if (margin == null) { margin = this.options.cursorScrollMargin; }\n } else if (typeof range == \"number\") {\n range = {from: Pos(range, 0), to: null};\n } else if (range.from == null) {\n range = {from: range, to: null};\n }\n if (!range.to) { range.to = range.from; }\n range.margin = margin || 0;\n\n if (range.from.line != null) {\n scrollToRange(this, range);\n } else {\n scrollToCoordsRange(this, range.from, range.to, range.margin);\n }\n }),\n\n setSize: methodOp(function(width, height) {\n var this$1 = this;\n\n var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n if (width != null) { this.display.wrapper.style.width = interpret(width); }\n if (height != null) { this.display.wrapper.style.height = interpret(height); }\n if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n var lineNo = this.display.viewFrom;\n this.doc.iter(lineNo, this.display.viewTo, function (line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, \"widget\"); break } } }\n ++lineNo;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n\n operation: function(f){return runInOp(this, f)},\n startOperation: function(){return startOperation(this)},\n endOperation: function(){return endOperation(this)},\n\n refresh: methodOp(function() {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this.display);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)\n { estimateLineHeights(this); }\n signal(this, \"refresh\", this);\n }),\n\n swapDoc: methodOp(function(doc) {\n var old = this.doc;\n old.cm = null;\n // Cancel the current text selection if any (#5821)\n if (this.state.selectingText) { this.state.selectingText(); }\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old\n }),\n\n phrase: function(phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n },\n\n getInputField: function(){return this.display.input.getField()},\n getWrapperElement: function(){return this.display.wrapper},\n getScrollerElement: function(){return this.display.scroller},\n getGutterElement: function(){return this.display.gutters}\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function(type, name, value) {\n if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({pred: predicate, val: value});\n };\n }\n\n // Used for horizontal relative motion. Dir is -1 or 1 (left or\n // right), unit can be \"codepoint\", \"char\", \"column\" (like char, but\n // doesn't cross line boundaries), \"word\" (across next word), or\n // \"group\" (to the start of next group of word or\n // non-word-non-whitespace chars). The visually param controls\n // whether, in right-to-left text, direction 1 means to move towards\n // the next index in the string, or towards the character to the right\n // of the current position. The resulting position will have a\n // hitSide=true property if it reached the end of the document.\n function findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n function findNextLine() {\n var l = pos.line + lineDir;\n if (l < doc.first || l >= doc.first + doc.size) { return false }\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l)\n }\n function moveOnce(boundToLine) {\n var next;\n if (unit == \"codepoint\") {\n var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1));\n if (isNaN(ch)) {\n next = null;\n } else {\n var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF;\n next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir);\n }\n } else if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n if (next == null) {\n if (!boundToLine && findNextLine())\n { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }\n else\n { return false }\n } else {\n pos = next;\n }\n return true\n }\n\n if (unit == \"char\" || unit == \"codepoint\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null, group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) { break }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\"\n : group && cur == \"\\n\" ? \"n\"\n : !group || /\\s/.test(cur) ? null\n : \"p\";\n if (group && !first && !type) { type = \"s\"; }\n if (sawType && sawType != type) {\n if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n break\n }\n\n if (type) { sawType = type; }\n if (dir > 0 && !moveOnce(!first)) { break }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n return result\n }\n\n // For relative vertical movement. Dir may be -1 or 1. Unit can be\n // \"page\" or \"line\". The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n function findPosV(cm, pos, dir, unit) {\n var doc = cm.doc, x = pos.left, y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, win(cm).innerHeight || doc(cm).documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) { break }\n if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n y += dir * 5;\n }\n return target\n }\n\n // CONTENTEDITABLE INPUT STYLE\n\n var ContentEditableInput = function(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n };\n\n ContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = input.cm;\n var div = input.div = display.lineDiv;\n div.contentEditable = true;\n disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n function belongsToInput(e) {\n for (var t = e.target; t; t = t.parentNode) {\n if (t == div) { return true }\n if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) { break }\n }\n return false\n }\n\n on(div, \"paste\", function (e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n });\n\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {data: e.data, done: false};\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n this$1.composing.done = true;\n }\n });\n\n on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n on(div, \"input\", function () {\n if (!this$1.composing) { this$1.readFromDOMSoon(); }\n });\n\n function onCopyCut(e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\");\n // iOS exposes the clipboard API, but seems to discard content inserted into it\n e.clipboardData.setData(\"Text\", content);\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return\n }\n }\n // Old-fashioned briefly-focus-a-textarea hack\n var kludge = hiddenTextarea(), te = kludge.firstChild;\n disableBrowserMagic(te);\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = activeElt(rootNode(div));\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n if (hadFocus == div) { input.showPrimarySelection(); }\n }, 50);\n }\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n };\n\n ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if(label) {\n this.div.setAttribute('aria-label', label);\n } else {\n this.div.removeAttribute('aria-label');\n }\n };\n\n ContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = activeElt(rootNode(this.div)) == this.div;\n return result\n };\n\n ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) { return }\n if (info.focus || takeFocus) { this.showPrimarySelection(); }\n this.showMultipleSelections(info);\n };\n\n ContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection()\n };\n\n ContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n var from = prim.from(), to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n cmp(minPos(curAnchor, curFocus), from) == 0 &&\n cmp(maxPos(curAnchor, curFocus), to) == 0)\n { return }\n\n var view = cm.display.view;\n var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n {node: view[0].measure.map[2], offset: 0};\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0), rng;\n try { rng = range(start.node, start.offset, end.offset, end.node); }\n catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n if (old && sel.anchorNode == null) { sel.addRange(old); }\n else if (gecko) { this.startGracePeriod(); }\n }\n this.rememberSelection();\n };\n\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged())\n { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n }, 20);\n };\n\n ContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n };\n\n ContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n };\n\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n if (!sel.rangeCount) { return false }\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node)\n };\n\n ContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor() || activeElt(rootNode(this.div)) != this.div)\n { this.showSelection(this.prepareSelection(), true); }\n this.div.focus();\n }\n };\n ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n ContentEditableInput.prototype.getField = function () { return this.div };\n\n ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n ContentEditableInput.prototype.receivedFocus = function () {\n var this$1 = this;\n\n var input = this;\n if (this.selectionInEditor())\n { setTimeout(function () { return this$1.pollSelection(); }, 20); }\n else\n { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n this.polling.set(this.cm.options.pollInterval, poll);\n };\n\n ContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n };\n\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n var sel = this.getSelection(), cm = this.cm;\n // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n this.blur();\n this.focus();\n return\n }\n if (this.composing) { return }\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (anchor && head) { runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n }); }\n };\n\n ContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n var from = sel.from(), to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine())\n { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n { to = Pos(to.line + 1, 0); }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n var fromIndex, fromLine, fromNode;\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) { return false }\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n else { break }\n }\n\n var cutFront = 0, cutEnd = 0;\n var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n { ++cutFront; }\n var newBot = lst(newText), oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n { ++cutEnd; }\n // Try to move start of change to start of selection if ambiguous\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true\n }\n };\n\n ContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) { return }\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n };\n ContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) { return }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) { this$1.composing = null; }\n else { return }\n }\n this$1.updateFromDOM();\n }, 80);\n };\n\n ContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent())\n { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n };\n\n ContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n };\n\n ContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) { return }\n e.preventDefault();\n if (!this.cm.isReadOnly())\n { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n };\n\n ContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n };\n\n ContentEditableInput.prototype.onContextMenu = function () {};\n ContentEditableInput.prototype.resetPosition = function () {};\n\n ContentEditableInput.prototype.needsContentAttribute = true;\n\n function posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n if (!view || view.hidden) { return null }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n\n var order = getOrder(line, cm.doc.direction), side = \"left\";\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result\n }\n\n function isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode)\n { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n return false\n }\n\n function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n function close() {\n if (closing) {\n text += lineSep;\n if (extraLinebreak) { text += lineSep; }\n closing = extraLinebreak = false;\n }\n }\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n if (cmText) {\n addText(cmText);\n return\n }\n var markerID = node.getAttribute(\"cm-marker\"), range;\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n if (found.length && (range = found[0].find(0)))\n { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }\n return\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n if (isBlock) { close(); }\n for (var i = 0; i < node.childNodes.length; i++)\n { walk(node.childNodes[i]); }\n\n if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n if (isBlock) { closing = true; }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n for (;;) {\n walk(from);\n if (from == to) { break }\n from = from.nextSibling;\n extraLinebreak = false;\n }\n return text\n }\n\n function domToPos(cm, node, offset) {\n var lineNode;\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n node = null; offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n }\n }\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n if (lineView.node == lineNode)\n { return locateNodeInLineView(lineView, node, offset) }\n }\n }\n\n function locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild, bad = false;\n if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad)\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null, topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) { offset = textNode.nodeValue.length; }\n }\n while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n var measure = lineView.measure, maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map = i < 0 ? measure.map : maps[i];\n for (var j = 0; j < map.length; j += 3) {\n var curNode = map[j + 2];\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map[j] + offset;\n if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }\n return Pos(line, ch)\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) { return badPos(found, bad) }\n\n // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n if (found)\n { return badPos(Pos(found.line, found.ch - dist), bad) }\n else\n { dist += after.textContent.length; }\n }\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n if (found)\n { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n else\n { dist$1 += before.textContent.length; }\n }\n }\n\n // TEXTAREA INPUT STYLE\n\n var TextareaInput = function(cm) {\n this.cm = cm;\n // See input.poll and input.reset\n this.prevInput = \"\";\n\n // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n this.pollingFast = false;\n // Self-resetting timeout for the poller\n this.polling = new Delayed();\n // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n this.hasSelection = false;\n this.composing = null;\n this.resetting = false;\n };\n\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) { te.style.width = \"0px\"; }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n input.poll();\n });\n\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n cm.state.pasteIncoming = +new Date;\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n if (!te.dispatchEvent) {\n cm.state.pasteIncoming = +new Date;\n input.focus();\n return\n }\n\n // Pass the `paste` event to the textarea so it's handled by its event listener.\n var event = new Event(\"paste\");\n event.clipboardData = e.clipboardData;\n te.dispatchEvent(event);\n });\n\n // Prevent normal selection in the editor (we handle our own)\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) { e_preventDefault(e); }\n });\n\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) { input.composing.range.clear(); }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n };\n\n TextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea();\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n this.textarea = this.wrapper.firstChild;\n var opts = this.cm.options;\n disableBrowserMagic(this.textarea, opts.spellcheck, opts.autocorrect, opts.autocapitalize);\n };\n\n TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if(label) {\n this.textarea.setAttribute('aria-label', label);\n } else {\n this.textarea.removeAttribute('aria-label');\n }\n };\n\n TextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm, display = cm.display, doc = cm.doc;\n var result = prepareSelection(cm);\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result\n };\n\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm, display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n };\n\n // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n TextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing && typing) { return }\n var cm = this.cm;\n this.resetting = true;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) { selectInput(this.textarea); }\n if (ie && ie_version >= 9) { this.hasSelection = content; }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n }\n this.resetting = false;\n };\n\n TextareaInput.prototype.getField = function () { return this.textarea };\n\n TextareaInput.prototype.supportsTouch = function () { return false };\n\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt(rootNode(this.textarea)) != this.textarea)) {\n try { this.textarea.focus(); }\n catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n };\n\n TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n\n TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n TextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) { return }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) { this$1.slowPoll(); }\n });\n };\n\n // When an event has just come in that is likely to add or change\n // something in the input textarea, we poll faster, to ensure that\n // the change appears on the screen quickly.\n TextareaInput.prototype.fastPoll = function () {\n var missed = false, input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n else {input.pollingFast = false; input.slowPoll();}\n }\n input.polling.set(20, p);\n };\n\n // Read input from the textarea, and update the document to match.\n // When something is selected, it is present in the textarea, and\n // selected (unless it is huge, in which case a placeholder is\n // used). When nothing is selected, the cursor sits after previously\n // seen text (can be empty), which is stored in prevInput (we must\n // not reset the textarea when typing, because that breaks IME).\n TextareaInput.prototype.poll = function () {\n var this$1 = this;\n\n var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n if (this.contextMenuPending || this.resetting || !cm.state.focused ||\n (hasSelection(input) && !prevInput && !this.composing) ||\n cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n { return false }\n\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) { return false }\n // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n if (ie && ie_version >= 9 && this.hasSelection === text ||\n mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n }\n // Find the part of the input that is actually new\n var same = 0, l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same,\n null, this$1.composing ? \"*compose\" : null);\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n else { this$1.prevInput = text; }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n {className: \"CodeMirror-composing\"});\n }\n });\n return true\n };\n\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n };\n\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n this.fastPoll();\n };\n\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n if (input.contextMenuPending) { input.contextMenuPending(); }\n var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n if (!pos || presto) { return } // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1)\n { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n input.wrapper.style.cssText = \"position: static\";\n 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);\";\n var oldScrollY;\n if (webkit) { oldScrollY = te.ownerDocument.defaultView.scrollY; } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) { te.ownerDocument.defaultView.scrollTo(null, oldScrollY); }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n input.contextMenuPending = rehide;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200b\" + (selected ? te.value : \"\");\n te.value = \"\\u21da\"; // Used to catch context-menu undo\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200b\";\n te.selectionStart = 1; te.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n if (input.contextMenuPending != rehide) { return }\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n var i = 0, poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function () {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n };\n\n TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) { this.reset(); }\n this.textarea.disabled = val == \"nocursor\";\n this.textarea.readOnly = !!val;\n };\n\n TextareaInput.prototype.setUneditable = function () {};\n\n TextareaInput.prototype.needsContentAttribute = false;\n\n function fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n if (!options.tabindex && textarea.tabIndex)\n { options.tabindex = textarea.tabIndex; }\n if (!options.placeholder && textarea.placeholder)\n { options.placeholder = textarea.placeholder; }\n // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n if (options.autofocus == null) {\n var hasFocus = activeElt(rootNode(textarea));\n options.autofocus = hasFocus == textarea ||\n textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {textarea.value = cm.getValue();}\n\n var realSubmit;\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch(e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n cm.getTextArea = function () { return textarea; };\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n { textarea.form.submit = realSubmit; }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n options);\n return cm\n }\n\n function addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n }\n\n // EDITOR CONSTRUCTOR\n\n defineOptions(CodeMirror);\n\n addEditorMethods(CodeMirror);\n\n // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n { CodeMirror.prototype[prop] = (function(method) {\n return function() {return method.apply(this.doc, arguments)}\n })(Doc.prototype[prop]); } }\n\n eventMixin(Doc);\n CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n CodeMirror.defineMode = function(name/*, mode, …*/) {\n if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n defineMode.apply(this, arguments);\n };\n\n CodeMirror.defineMIME = defineMIME;\n\n // Minimal default mode.\n CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n // EXTENSIONS\n\n CodeMirror.defineExtension = function (name, func) {\n CodeMirror.prototype[name] = func;\n };\n CodeMirror.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n };\n\n CodeMirror.fromTextArea = fromTextArea;\n\n addLegacyProps(CodeMirror);\n\n CodeMirror.version = \"5.65.21\";\n\n return CodeMirror;\n\n})));\n","/* globals chrome: false */\n/* globals __dirname: false */\n/* globals require: false */\n/* globals Buffer: false */\n/* globals module: false */\nvar Typo;\n(function () {\n \"use strict\";\n /**\n * Typo constructor.\n *\n * @param {string} [dictionary] The locale code of the dictionary being used. e.g.,\n * \"en_US\". This is only used to auto-load dictionaries.\n * @param {string} [affData] The data from the dictionary's .aff file. If omitted\n * and Typo.js is being used in a Chrome extension, the .aff\n * file will be loaded automatically from\n * lib/typo/dictionaries/[dictionary]/[dictionary].aff\n * In other environments, it will be loaded from\n * [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].aff\n * @param {string} [wordsData] The data from the dictionary's .dic file. If omitted\n * and Typo.js is being used in a Chrome extension, the .dic\n * file will be loaded automatically from\n * lib/typo/dictionaries/[dictionary]/[dictionary].dic\n * In other environments, it will be loaded from\n * [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].dic\n * @param {Object} [settings] Constructor settings. Available properties are:\n * {string} [dictionaryPath]: path to load dictionary from in non-chrome\n * environment.\n * {Object} [flags]: flag information.\n * {boolean} [asyncLoad]: If true, affData and wordsData will be loaded\n * asynchronously.\n * {Function} [loadedCallback]: Called when both affData and wordsData\n * have been loaded. Only used if asyncLoad is set to true. The parameter\n * is the instantiated Typo object.\n *\n * @returns {Typo} A Typo object.\n */\n Typo = function (dictionary, affData, wordsData, settings) {\n settings = settings || {};\n this.dictionary = null;\n this.rules = {};\n this.dictionaryTable = new Map();\n this.compoundRules = [];\n this.compoundRuleCodes = {};\n this.replacementTable = [];\n this.flags = settings.flags || {};\n this.memoized = {};\n this.loaded = false;\n var self = this;\n var path;\n // Loop-control variables.\n var i, j, _len, _jlen;\n if (dictionary) {\n self.dictionary = dictionary;\n // If the data is preloaded, just setup the Typo object.\n if (affData && wordsData) {\n setup();\n }\n else {\n if (typeof window !== 'undefined') {\n // Webpage or browser extension\n if (settings.dictionaryPath) {\n path = settings.dictionaryPath;\n }\n else {\n path = \"typo/dictionaries\";\n }\n // Browser extensions assume that the file is being loaded from the root of the extension.\n if (window.chrome && window.chrome.runtime && window.chrome.runtime.getURL) {\n path = window.chrome.runtime.getURL(path);\n }\n else if (window.browser && window.browser.runtime && window.browser.runtime.getURL) {\n path = window.browser.runtime.getURL(path);\n }\n }\n else if (typeof __dirname !== 'undefined') {\n // Node\n path = __dirname + '/dictionaries';\n }\n else {\n // Node\n path = './dictionaries';\n }\n if (!affData)\n readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\", setAffData);\n if (!wordsData)\n readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\", setWordsData);\n }\n }\n function readDataFile(url, setFunc) {\n var response = self._readFile(url, null, settings === null || settings === void 0 ? void 0 : settings.asyncLoad);\n if (settings === null || settings === void 0 ? void 0 : settings.asyncLoad) {\n response.then(function (data) {\n setFunc(data);\n });\n }\n else {\n setFunc(response);\n }\n }\n function setAffData(data) {\n affData = data;\n if (wordsData) {\n setup();\n }\n }\n function setWordsData(data) {\n wordsData = data;\n if (affData) {\n setup();\n }\n }\n function setup() {\n self.rules = self._parseAFF(affData);\n // Save the rule codes that are used in compound rules.\n self.compoundRuleCodes = {};\n for (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n var rule = self.compoundRules[i];\n for (j = 0, _jlen = rule.length; j < _jlen; j++) {\n self.compoundRuleCodes[rule[j]] = [];\n }\n }\n // If we add this ONLYINCOMPOUND flag to self.compoundRuleCodes, then _parseDIC\n // will do the work of saving the list of words that are compound-only.\n if (\"ONLYINCOMPOUND\" in self.flags) {\n self.compoundRuleCodes[self.flags.ONLYINCOMPOUND] = [];\n }\n self.dictionaryTable = self._parseDIC(wordsData);\n // Get rid of any codes from the compound rule codes that are never used\n // (or that were special regex characters). Not especially necessary...\n for (i in self.compoundRuleCodes) {\n if (self.compoundRuleCodes[i].length === 0) {\n delete self.compoundRuleCodes[i];\n }\n }\n // Build the full regular expressions for each compound rule.\n // I have a feeling (but no confirmation yet) that this method of\n // testing for compound words is probably slow.\n for (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n var ruleText = self.compoundRules[i];\n var expressionText = \"\";\n for (j = 0, _jlen = ruleText.length; j < _jlen; j++) {\n var character = ruleText[j];\n if (character in self.compoundRuleCodes) {\n expressionText += \"(\" + self.compoundRuleCodes[character].join(\"|\") + \")\";\n }\n else {\n expressionText += character;\n }\n }\n self.compoundRules[i] = new RegExp('^' + expressionText + '$', \"i\");\n }\n self.loaded = true;\n if ((settings === null || settings === void 0 ? void 0 : settings.asyncLoad) && (settings === null || settings === void 0 ? void 0 : settings.loadedCallback)) {\n settings.loadedCallback(self);\n }\n }\n return this;\n };\n Typo.prototype = {\n /**\n * Loads a Typo instance from a hash of all of the Typo properties.\n *\n * @param {object} obj A hash of Typo properties, probably gotten from a JSON.parse(JSON.stringify(typo_instance)).\n */\n load: function (obj) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n this[i] = obj[i];\n }\n }\n return this;\n },\n /**\n * Read the contents of a file.\n *\n * @param {string} path The path (relative) to the file.\n * @param {string} [charset=\"ISO8859-1\"] The expected charset of the file\n * @param {boolean} async If true, the file will be read asynchronously. For node.js this does nothing, all\n * files are read synchronously.\n * @returns {string} The file data if async is false, otherwise a promise object. If running node.js, the data is\n * always returned.\n */\n _readFile: function (path, charset, async) {\n var _a;\n charset = charset || \"utf8\";\n if (typeof XMLHttpRequest !== 'undefined') {\n var req_1 = new XMLHttpRequest();\n req_1.open(\"GET\", path, !!async);\n (_a = req_1.overrideMimeType) === null || _a === void 0 ? void 0 : _a.call(req_1, \"text/plain; charset=\" + charset);\n if (!!async) {\n var promise = new Promise(function (resolve, reject) {\n req_1.onload = function () {\n if (req_1.status === 200) {\n resolve(req_1.responseText);\n }\n else {\n reject(req_1.statusText);\n }\n };\n req_1.onerror = function () {\n reject(req_1.statusText);\n };\n });\n req_1.send(null);\n return promise;\n }\n else {\n req_1.send(null);\n return req_1.responseText;\n }\n }\n else if (typeof require !== 'undefined') {\n // Node.js\n var fs = require(\"fs\");\n try {\n if (fs.existsSync(path)) {\n return fs.readFileSync(path, charset);\n }\n else {\n console.log(\"Path \" + path + \" does not exist.\");\n }\n }\n catch (e) {\n console.log(e);\n }\n return '';\n }\n return '';\n },\n /**\n * Parse the rules out from a .aff file.\n *\n * @param {string} data The contents of the affix file.\n * @returns object The rules from the file.\n */\n _parseAFF: function (data) {\n var rules = {};\n var line, subline, numEntries, lineParts;\n var i, j, _len, _jlen;\n var lines = data.split(/\\r?\\n/);\n for (i = 0, _len = lines.length; i < _len; i++) {\n // Remove comment lines\n line = this._removeAffixComments(lines[i]);\n line = line.trim();\n if (!line) {\n continue;\n }\n var definitionParts = line.split(/\\s+/);\n var ruleType = definitionParts[0];\n if (ruleType === \"PFX\" || ruleType === \"SFX\") {\n var ruleCode = definitionParts[1];\n var combineable = definitionParts[2];\n numEntries = parseInt(definitionParts[3], 10);\n var entries = [];\n for (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n subline = lines[j];\n lineParts = subline.split(/\\s+/);\n var charactersToRemove = lineParts[2];\n var additionParts = lineParts[3].split(\"/\");\n var charactersToAdd = additionParts[0];\n if (charactersToAdd === \"0\")\n charactersToAdd = \"\";\n var continuationClasses = this.parseRuleCodes(additionParts[1]);\n var regexToMatch = lineParts[4];\n var entry = {\n add: charactersToAdd\n };\n if (continuationClasses.length > 0)\n entry.continuationClasses = continuationClasses;\n if (regexToMatch !== \".\") {\n if (ruleType === \"SFX\") {\n entry.match = new RegExp(regexToMatch + \"$\");\n }\n else {\n entry.match = new RegExp(\"^\" + regexToMatch);\n }\n }\n if (charactersToRemove != \"0\") {\n if (ruleType === \"SFX\") {\n entry.remove = new RegExp(charactersToRemove + \"$\");\n }\n else {\n entry.remove = charactersToRemove;\n }\n }\n entries.push(entry);\n }\n rules[ruleCode] = { \"type\": ruleType, \"combineable\": (combineable === \"Y\"), \"entries\": entries };\n i += numEntries;\n }\n else if (ruleType === \"COMPOUNDRULE\") {\n numEntries = parseInt(definitionParts[1], 10);\n for (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n line = lines[j];\n lineParts = line.split(/\\s+/);\n this.compoundRules.push(lineParts[1]);\n }\n i += numEntries;\n }\n else if (ruleType === \"REP\") {\n lineParts = line.split(/\\s+/);\n if (lineParts.length === 3) {\n this.replacementTable.push([lineParts[1], lineParts[2]]);\n }\n }\n else {\n // ONLYINCOMPOUND\n // COMPOUNDMIN\n // FLAG\n // KEEPCASE\n // NEEDAFFIX\n this.flags[ruleType] = definitionParts[1];\n }\n }\n return rules;\n },\n /**\n * Removes comments.\n *\n * @param {string} data A line from an affix file.\n * @return {string} The cleaned-up line.\n */\n _removeAffixComments: function (line) {\n // This used to remove any string starting with '#' up to the end of the line,\n // but some COMPOUNDRULE definitions include '#' as part of the rule.\n // So, only remove lines that begin with a comment, optionally preceded by whitespace.\n if (line.match(/^\\s*#/)) {\n return '';\n }\n return line;\n },\n /**\n * Parses the words out from the .dic file.\n *\n * @param {string} data The data from the dictionary file.\n * @returns {Map} The lookup table containing all of the words and\n * word forms from the dictionary.\n */\n _parseDIC: function (data) {\n data = this._removeDicComments(data);\n var lines = data.split(/\\r?\\n/);\n var dictionaryTable = new Map();\n function addWord(word, rules) {\n // Some dictionaries will list the same word multiple times with different rule sets.\n if (!dictionaryTable.has(word)) {\n dictionaryTable.set(word, null);\n }\n if (rules.length > 0) {\n if (dictionaryTable.get(word) === null) {\n dictionaryTable.set(word, []);\n }\n dictionaryTable.get(word).push(rules);\n }\n }\n // The first line is the number of words in the dictionary.\n for (var i = 1, _len = lines.length; i < _len; i++) {\n var line = lines[i];\n if (!line) {\n // Ignore empty lines.\n continue;\n }\n // The line format is one of:\n // word\n // word/flags\n // word/flags xx:abc yy:def\n // word xx:abc yy:def\n // We don't use the morphological flags (xx:abc, yy:def) and we don't want them included\n // in the extracted flags.\n var just_word_and_flags = line.replace(/\\s.*$/, '');\n // just_word_and_flags is definitely one of:\n // word\n // word/flags\n var parts = just_word_and_flags.split('/', 2);\n var word = parts[0];\n // Now for each affix rule, generate that form of the word.\n if (parts.length > 1) {\n var ruleCodesArray = this.parseRuleCodes(parts[1]);\n // Save the ruleCodes for compound word situations.\n if (!(\"NEEDAFFIX\" in this.flags) || ruleCodesArray.indexOf(this.flags.NEEDAFFIX) === -1) {\n addWord(word, ruleCodesArray);\n }\n for (var j = 0, _jlen = ruleCodesArray.length; j < _jlen; j++) {\n var code = ruleCodesArray[j];\n var rule = this.rules[code];\n if (rule) {\n var newWords = this._applyRule(word, rule);\n for (var ii = 0, _iilen = newWords.length; ii < _iilen; ii++) {\n var newWord = newWords[ii];\n addWord(newWord, []);\n if (rule.combineable) {\n for (var k = j + 1; k < _jlen; k++) {\n var combineCode = ruleCodesArray[k];\n var combineRule = this.rules[combineCode];\n if (combineRule) {\n if (combineRule.combineable && (rule.type != combineRule.type)) {\n var otherNewWords = this._applyRule(newWord, combineRule);\n for (var iii = 0, _iiilen = otherNewWords.length; iii < _iiilen; iii++) {\n var otherNewWord = otherNewWords[iii];\n addWord(otherNewWord, []);\n }\n }\n }\n }\n }\n }\n }\n if (code in this.compoundRuleCodes) {\n this.compoundRuleCodes[code].push(word);\n }\n }\n }\n else {\n addWord(word.trim(), []);\n }\n }\n return dictionaryTable;\n },\n /**\n * Removes comment lines and then cleans up blank lines and trailing whitespace.\n *\n * @param {string} data The data from a .dic file.\n * @return {string} The cleaned-up data.\n */\n _removeDicComments: function (data) {\n // I can't find any official documentation on it, but at least the de_DE\n // dictionary uses tab-indented lines as comments.\n // Remove comments\n data = data.replace(/^\\t.*$/mg, \"\");\n return data;\n },\n parseRuleCodes: function (textCodes) {\n if (!textCodes) {\n return [];\n }\n else if (!(\"FLAG\" in this.flags)) {\n // The flag symbols are single characters\n return textCodes.split(\"\");\n }\n else if (this.flags.FLAG === \"long\") {\n // The flag symbols are two characters long.\n var flags = [];\n for (var i = 0, _len = textCodes.length; i < _len; i += 2) {\n flags.push(textCodes.substr(i, 2));\n }\n return flags;\n }\n else if (this.flags.FLAG === \"num\") {\n // The flag symbols are a CSV list of numbers.\n return textCodes.split(\",\");\n }\n else if (this.flags.FLAG === \"UTF-8\") {\n // The flags are single UTF-8 characters.\n // @see https://github.com/cfinke/Typo.js/issues/57\n return Array.from(textCodes);\n }\n else {\n // It's possible that this fallback case will not work for all FLAG values,\n // but I think it's more likely to work than not returning anything at all.\n return textCodes.split(\"\");\n }\n },\n /**\n * Applies an affix rule to a word.\n *\n * @param {string} word The base word.\n * @param {Object} rule The affix rule.\n * @returns {string[]} The new words generated by the rule.\n */\n _applyRule: function (word, rule) {\n var entries = rule.entries;\n var newWords = [];\n for (var i = 0, _len = entries.length; i < _len; i++) {\n var entry = entries[i];\n if (!entry.match || word.match(entry.match)) {\n var newWord = word;\n if (entry.remove) {\n newWord = newWord.replace(entry.remove, \"\");\n }\n if (rule.type === \"SFX\") {\n newWord = newWord + entry.add;\n }\n else {\n newWord = entry.add + newWord;\n }\n newWords.push(newWord);\n if (\"continuationClasses\" in entry) {\n for (var j = 0, _jlen = entry.continuationClasses.length; j < _jlen; j++) {\n var continuationRule = this.rules[entry.continuationClasses[j]];\n if (continuationRule) {\n newWords = newWords.concat(this._applyRule(newWord, continuationRule));\n }\n /*\n else {\n // This shouldn't happen, but it does, at least in the de_DE dictionary.\n // I think the author mistakenly supplied lower-case rule codes instead\n // of upper-case.\n }\n */\n }\n }\n }\n }\n return newWords;\n },\n /**\n * Checks whether a word or a capitalization variant exists in the current dictionary.\n * The word is trimmed and several variations of capitalizations are checked.\n * If you want to check a word without any changes made to it, call checkExact()\n *\n * @see http://blog.stevenlevithan.com/archives/faster-trim-javascript re:trimming function\n *\n * @param {string} aWord The word to check.\n * @returns {boolean}\n */\n check: function (aWord) {\n if (!this.loaded) {\n throw \"Dictionary not loaded.\";\n }\n if (!aWord) {\n return false;\n }\n // Remove leading and trailing whitespace\n var trimmedWord = aWord.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n if (this.checkExact(trimmedWord)) {\n return true;\n }\n // The exact word is not in the dictionary.\n if (trimmedWord.toUpperCase() === trimmedWord) {\n // The word was supplied in all uppercase.\n // Check for a capitalized form of the word.\n var capitalizedWord = trimmedWord[0] + trimmedWord.substring(1).toLowerCase();\n if (this.hasFlag(capitalizedWord, \"KEEPCASE\")) {\n // Capitalization variants are not allowed for this word.\n return false;\n }\n if (this.checkExact(capitalizedWord)) {\n // The all-caps word is a capitalized word spelled correctly.\n return true;\n }\n if (this.checkExact(trimmedWord.toLowerCase())) {\n // The all-caps is a lowercase word spelled correctly.\n return true;\n }\n }\n var uncapitalizedWord = trimmedWord[0].toLowerCase() + trimmedWord.substring(1);\n if (uncapitalizedWord !== trimmedWord) {\n if (this.hasFlag(uncapitalizedWord, \"KEEPCASE\")) {\n // Capitalization variants are not allowed for this word.\n return false;\n }\n // Check for an uncapitalized form\n if (this.checkExact(uncapitalizedWord)) {\n // The word is spelled correctly but with the first letter capitalized.\n return true;\n }\n }\n return false;\n },\n /**\n * Checks whether a word exists in the current dictionary.\n *\n * @param {string} word The word to check.\n * @returns {boolean}\n */\n checkExact: function (word) {\n if (!this.loaded) {\n throw \"Dictionary not loaded.\";\n }\n var ruleCodes = this.dictionaryTable.get(word);\n var i, _len;\n if (typeof ruleCodes === 'undefined') {\n // Check if this might be a compound word.\n if (\"COMPOUNDMIN\" in this.flags && word.length >= this.flags.COMPOUNDMIN) {\n for (i = 0, _len = this.compoundRules.length; i < _len; i++) {\n if (word.match(this.compoundRules[i])) {\n return true;\n }\n }\n }\n }\n else if (ruleCodes === null) {\n // a null (but not undefined) value for an entry in the dictionary table\n // means that the word is in the dictionary but has no flags.\n return true;\n }\n else if (typeof ruleCodes === 'object') { // this.dictionary['hasOwnProperty'] will be a function.\n for (i = 0, _len = ruleCodes.length; i < _len; i++) {\n if (!this.hasFlag(word, \"ONLYINCOMPOUND\", ruleCodes[i])) {\n return true;\n }\n }\n }\n return false;\n },\n /**\n * Looks up whether a given word is flagged with a given flag.\n *\n * @param {string} word The word in question.\n * @param {string} flag The flag in question.\n * @return {boolean}\n */\n hasFlag: function (word, flag, wordFlags) {\n if (!this.loaded) {\n throw \"Dictionary not loaded.\";\n }\n if (flag in this.flags) {\n if (typeof wordFlags === 'undefined') {\n wordFlags = Array.prototype.concat.apply([], this.dictionaryTable.get(word));\n }\n if (wordFlags && wordFlags.indexOf(this.flags[flag]) !== -1) {\n return true;\n }\n }\n return false;\n },\n /**\n * Returns a list of suggestions for a misspelled word.\n *\n * @see http://www.norvig.com/spell-correct.html for the basis of this suggestor.\n * This suggestor is primitive, but it works.\n *\n * @param {string} word The misspelling.\n * @param {number} [limit=5] The maximum number of suggestions to return.\n * @returns {string[]} The array of suggestions.\n */\n alphabet: \"\",\n suggest: function (word, limit) {\n if (!this.loaded) {\n throw \"Dictionary not loaded.\";\n }\n limit = limit || 5;\n if (this.memoized.hasOwnProperty(word)) {\n var memoizedLimit = this.memoized[word]['limit'];\n // Only return the cached list if it's big enough or if there weren't enough suggestions\n // to fill a smaller limit.\n if (limit <= memoizedLimit || this.memoized[word]['suggestions'].length < memoizedLimit) {\n return this.memoized[word]['suggestions'].slice(0, limit);\n }\n }\n if (this.check(word))\n return [];\n // Check the replacement table.\n for (var i = 0, _len = this.replacementTable.length; i < _len; i++) {\n var replacementEntry = this.replacementTable[i];\n if (word.indexOf(replacementEntry[0]) !== -1) {\n var correctedWord = word.replace(replacementEntry[0], replacementEntry[1]);\n if (this.check(correctedWord)) {\n return [correctedWord];\n }\n }\n }\n if (!this.alphabet) {\n // Use the English alphabet as the default. Problematic, but backwards-compatible.\n this.alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n // Any characters defined in the affix file as substitutions can go in the alphabet too.\n // Note that dictionaries do not include the entire alphabet in the TRY flag when it's there.\n // For example, Q is not in the default English TRY list; that's why having the default\n // alphabet above is useful.\n if ('TRY' in this.flags) {\n this.alphabet += this.flags['TRY'];\n }\n // Plus any additional characters specifically defined as being allowed in words.\n if ('WORDCHARS' in this.flags) {\n this.alphabet += this.flags['WORDCHARS'];\n }\n // Remove any duplicates.\n var alphaArray = this.alphabet.split(\"\");\n alphaArray.sort();\n var alphaHash = {};\n for (var i = 0; i < alphaArray.length; i++) {\n alphaHash[alphaArray[i]] = true;\n }\n this.alphabet = '';\n for (var i in alphaHash) {\n this.alphabet += i;\n }\n }\n var self = this;\n /**\n * Returns a hash keyed by all of the strings that can be made by making a single edit to the word (or words in) `words`\n * The value of each entry is the number of unique ways that the resulting word can be made.\n *\n * @arg HashMap words A hash keyed by words (all with the value `true` to make lookups very quick).\n * @arg boolean known_only Whether this function should ignore strings that are not in the dictionary.\n */\n function edits1(words, known_only) {\n var rv = {};\n var i, j, _iilen, _len, _jlen, _edit;\n var alphabetLength = self.alphabet.length;\n for (var word_1 in words) {\n for (i = 0, _len = word_1.length + 1; i < _len; i++) {\n var s = [word_1.substring(0, i), word_1.substring(i)];\n // Remove a letter.\n if (s[1]) {\n _edit = s[0] + s[1].substring(1);\n if (!known_only || self.check(_edit)) {\n if (!(_edit in rv)) {\n rv[_edit] = 1;\n }\n else {\n rv[_edit] += 1;\n }\n }\n }\n // Transpose letters\n // Eliminate transpositions of identical letters\n if (s[1].length > 1 && s[1][1] !== s[1][0]) {\n _edit = s[0] + s[1][1] + s[1][0] + s[1].substring(2);\n if (!known_only || self.check(_edit)) {\n if (!(_edit in rv)) {\n rv[_edit] = 1;\n }\n else {\n rv[_edit] += 1;\n }\n }\n }\n if (s[1]) {\n // Replace a letter with another letter.\n var lettercase = (s[1].substring(0, 1).toUpperCase() === s[1].substring(0, 1)) ? 'uppercase' : 'lowercase';\n for (j = 0; j < alphabetLength; j++) {\n var replacementLetter = self.alphabet[j];\n // Set the case of the replacement letter to the same as the letter being replaced.\n if ('uppercase' === lettercase) {\n replacementLetter = replacementLetter.toUpperCase();\n }\n // Eliminate replacement of a letter by itself\n if (replacementLetter != s[1].substring(0, 1)) {\n _edit = s[0] + replacementLetter + s[1].substring(1);\n if (!known_only || self.check(_edit)) {\n if (!(_edit in rv)) {\n rv[_edit] = 1;\n }\n else {\n rv[_edit] += 1;\n }\n }\n }\n }\n }\n if (s[1]) {\n // Add a letter between each letter.\n for (j = 0; j < alphabetLength; j++) {\n // If the letters on each side are capitalized, capitalize the replacement.\n var lettercase = (s[0].substring(-1).toUpperCase() === s[0].substring(-1) && s[1].substring(0, 1).toUpperCase() === s[1].substring(0, 1)) ? 'uppercase' : 'lowercase';\n var replacementLetter = self.alphabet[j];\n if ('uppercase' === lettercase) {\n replacementLetter = replacementLetter.toUpperCase();\n }\n _edit = s[0] + replacementLetter + s[1];\n if (!known_only || self.check(_edit)) {\n if (!(_edit in rv)) {\n rv[_edit] = 1;\n }\n else {\n rv[_edit] += 1;\n }\n }\n }\n }\n }\n }\n return rv;\n }\n function correct(word) {\n var _a;\n // Get the edit-distance-1 and edit-distance-2 forms of this word.\n var ed1 = edits1((_a = {}, _a[word] = true, _a));\n var ed2 = edits1(ed1, true);\n // Sort the edits based on how many different ways they were created.\n var weighted_corrections = ed2;\n for (var ed1word in ed1) {\n if (!self.check(ed1word)) {\n continue;\n }\n if (ed1word in weighted_corrections) {\n weighted_corrections[ed1word] += ed1[ed1word];\n }\n else {\n weighted_corrections[ed1word] = ed1[ed1word];\n }\n }\n var i, _len;\n var sorted_corrections = [];\n for (i in weighted_corrections) {\n if (weighted_corrections.hasOwnProperty(i)) {\n if (self.hasFlag(i, \"PRIORITYSUGGEST\")) {\n // We've defined a new affix rule called PRIORITYSUGGEST, indicating that\n // if this word is in the suggestions list for a misspelled word, it should\n // be given priority over other suggestions.\n //\n // Add a large number to its weight to push it to the top of the list.\n // If multiple priority suggestions are in the list, they'll still be ranked\n // against each other, but they'll all be above non-priority suggestions.\n weighted_corrections[i] += 1000;\n }\n sorted_corrections.push([i, weighted_corrections[i]]);\n }\n }\n function sorter(a, b) {\n var a_val = a[1];\n var b_val = b[1];\n if (a_val < b_val) {\n return -1;\n }\n else if (a_val > b_val) {\n return 1;\n }\n // @todo If a and b are equally weighted, add our own weight based on something like the key locations on this language's default keyboard.\n return b[0].localeCompare(a[0]);\n }\n sorted_corrections.sort(sorter).reverse();\n var rv = [];\n var capitalization_scheme = \"lowercase\";\n if (word.toUpperCase() === word) {\n capitalization_scheme = \"uppercase\";\n }\n else if (word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase() === word) {\n capitalization_scheme = \"capitalized\";\n }\n var working_limit = limit;\n for (i = 0; i < Math.min(working_limit, sorted_corrections.length); i++) {\n if (\"uppercase\" === capitalization_scheme) {\n sorted_corrections[i][0] = sorted_corrections[i][0].toUpperCase();\n }\n else if (\"capitalized\" === capitalization_scheme) {\n sorted_corrections[i][0] = sorted_corrections[i][0].substr(0, 1).toUpperCase() + sorted_corrections[i][0].substr(1);\n }\n if (!self.hasFlag(sorted_corrections[i][0], \"NOSUGGEST\") && rv.indexOf(sorted_corrections[i][0]) === -1) {\n rv.push(sorted_corrections[i][0]);\n }\n else {\n // If one of the corrections is not eligible as a suggestion , make sure we still return the right number of suggestions.\n working_limit++;\n }\n }\n return rv;\n }\n this.memoized[word] = {\n 'suggestions': correct(word),\n 'limit': limit\n };\n return this.memoized[word]['suggestions'];\n }\n };\n})();\n// Support for use as a node.js module.\nif (typeof module !== 'undefined') {\n module.exports = Typo;\n}\n","/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nexport default function listToStyles (parentId, list) {\n var styles = []\n var newStyles = {}\n for (var i = 0; i < list.length; i++) {\n var item = list[i]\n var id = item[0]\n var css = item[1]\n var media = item[2]\n var sourceMap = item[3]\n var part = {\n id: parentId + ':' + i,\n css: css,\n media: media,\n sourceMap: sourceMap\n }\n if (!newStyles[id]) {\n styles.push(newStyles[id] = { id: id, parts: [part] })\n } else {\n newStyles[id].parts.push(part)\n }\n }\n return styles\n}\n","/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n Modified by Evan You @yyx990803\n*/\n\nimport listToStyles from './listToStyles'\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n if (!hasDocument) {\n throw new Error(\n 'vue-style-loader cannot be used in a non-browser environment. ' +\n \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n ) }\n}\n\n/*\ntype StyleObject = {\n id: number;\n parts: Array\n}\n\ntype StyleObjectPart = {\n css: string;\n media: string;\n sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n [id: number]: {\n id: number,\n refs: number,\n parts: Array<(obj?: StyleObjectPart) => void>\n }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of