diff --git a/index.html b/index.html index 984debe55..9db738dcc 100644 --- a/index.html +++ b/index.html @@ -33,18 +33,24 @@ Online JavaScript beautifier - + - - + - + + + - - - + + + + + - + + + + @@ -73,7 +79,6 @@

Online JavaScript Beautifier

-
@@ -170,7 +175,7 @@

Online JavaScript Beautifier

-
+
@@ -179,7 +184,7 @@

Online JavaScript Beautifier

Your Selected Options (JSON):

-
+
diff --git a/package-lock.json b/package-lock.json index df494c0cf..e88bda809 100644 --- a/package-lock.json +++ b/package-lock.json @@ -801,6 +801,12 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "codemirror": { + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.48.2.tgz", + "integrity": "sha512-i9VsmC8AfA5ji6EDIZ+aoSe4vt9FcwPLdHB1k1ItFbVyuOFRrcfvnoKqwZlC7EVA2UmTRiNEypE4Uo7YvzVY8Q==", + "dev": true + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -2784,6 +2790,12 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "jquery": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==", + "dev": true + }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", diff --git a/package.json b/package.json index dd32aed77..b152ed151 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,8 @@ }, "devDependencies": { "benchmark": "^2.1.4", + "codemirror": "^5.48.2", + "jquery": "^3.4.1", "jshint": "^2.10.2", "mocha": "^6.1.4", "mustache": "^3.0.1", diff --git a/tools/build.sh b/tools/build.sh index 1e39808fb..045f02705 100755 --- a/tools/build.sh +++ b/tools/build.sh @@ -45,19 +45,6 @@ build_beautify() build_js } -build_update-codemirror() -{ - rm -rf node_modules/codemirror - npm install codemirror - rm -rf ./web/third-party/codemirror/* - cp ./node_modules/codemirror/LICENSE ./web/third-party/codemirror/ - cp ./node_modules/codemirror/README.md ./web/third-party/codemirror/ - cp -r ./node_modules/codemirror/lib ./web/third-party/codemirror/ - mkdir -p ./web/third-party/codemirror/mode - cp -r ./node_modules/codemirror/mode/javascript ./web/third-party/codemirror/mode/ - git add -Av ./web/third-party/codemirror -} - main() { cd $PROJECT_DIR local ACTION diff --git a/web/common-function.js b/web/common-function.js index 28502c043..3f1d3252f 100644 --- a/web/common-function.js +++ b/web/common-function.js @@ -26,6 +26,21 @@ function any(a, b) { return a || b; } +function set_editor_mode() { + if (the.editor) { + var language = $('#language').val(); + var mode = 'javascript'; + if (language === 'js') { + mode = 'javascript'; + } else if (language === 'html') { + mode = 'htmlmixed'; + } else if (language === 'css') { + mode = 'css'; + } + the.editor.setOption("mode", mode); + } +} + function run_tests() { $.when($.getScript("js/test/sanitytest.js"), $.getScript("js/test/generated/beautify-javascript-tests.js"), @@ -68,7 +83,7 @@ function read_settings_from_cookie() { $('#indent-inner-html').prop('checked', Cookies.get('indent-inner-html') === 'on'); $('#comma-first').prop('checked', Cookies.get('comma-first') === 'on'); $('#e4x').prop('checked', Cookies.get('e4x') === 'on'); - $('#language').val(any(Cookies.get('language'), 'auto')); + $('#language').val(any(Cookies.get('language'), 'js')); $('#indent-empty-lines').prop('checked', Cookies.get('indent-empty-lines') === 'on'); } @@ -209,6 +224,7 @@ function beautify() { the.lastOpts = selectedOptions; $('#open-issue').show(); + set_editor_mode(); the.beautify_in_progress = false; } diff --git a/web/lib/codemirror/LICENSE b/web/lib/codemirror/LICENSE deleted file mode 100644 index f4a5a4a25..000000000 --- a/web/lib/codemirror/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2015 by Marijn Haverbeke and others - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/web/lib/codemirror/README.md b/web/lib/codemirror/README.md deleted file mode 100644 index 6c818272f..000000000 --- a/web/lib/codemirror/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# CodeMirror -[![Build Status](https://travis-ci.org/codemirror/CodeMirror.svg)](https://travis-ci.org/codemirror/CodeMirror) -[![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror) -[![Join the chat at https://gitter.im/codemirror/CodeMirror](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/codemirror/CodeMirror) -[Funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png?again)](https://marijnhaverbeke.nl/fund/) - -CodeMirror is a versatile text editor implemented in JavaScript for -the browser. It is specialized for editing code, and comes with over -100 language modes and various addons that implement more advanced -editing functionality. - -A rich programming API and a CSS theming system are available for -customizing CodeMirror to fit your application, and extending it with -new functionality. - -You can find more information (and the -[manual](http://codemirror.net/doc/manual.html)) on the [project -page](http://codemirror.net). For questions and discussion, use the -[discussion forum](http://discuss.codemirror.net/). - -See -[CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md) -for contributing guidelines. - -The CodeMirror community aims to be welcoming to everybody. We use the -[Contributor Covenant -(1.1)](http://contributor-covenant.org/version/1/1/0/) as our code of -conduct. diff --git a/web/lib/codemirror/lib/codemirror.css b/web/lib/codemirror/lib/codemirror.css deleted file mode 100644 index c56510e99..000000000 --- a/web/lib/codemirror/lib/codemirror.css +++ /dev/null @@ -1,309 +0,0 @@ -/* BASICS */ - -.CodeMirror { - /* Set height, width, borders, and global font properties here */ - font-family: monospace; - height: 300px; -} - -/* PADDING */ - -.CodeMirror-lines { - padding: 4px 0; /* Vertical padding around content */ -} -.CodeMirror pre { - padding: 0 4px; /* Horizontal padding of content */ -} - -.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - background-color: white; /* The little square between H and V scrollbars */ -} - -/* GUTTER */ - -.CodeMirror-gutters { - border-right: 1px solid #ddd; - background-color: #f7f7f7; - white-space: nowrap; -} -.CodeMirror-linenumbers {} -.CodeMirror-linenumber { - padding: 0 3px 0 5px; - min-width: 20px; - text-align: right; - color: #999; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -.CodeMirror-guttermarker { color: black; } -.CodeMirror-guttermarker-subtle { color: #999; } - -/* CURSOR */ - -.CodeMirror div.CodeMirror-cursor { - border-left: 1px solid black; -} -/* Shown when moving in bi-directional text */ -.CodeMirror div.CodeMirror-secondarycursor { - border-left: 1px solid silver; -} -.CodeMirror.cm-fat-cursor div.CodeMirror-cursor { - width: auto; - border: 0; - background: #7e7; -} -.CodeMirror.cm-fat-cursor div.CodeMirror-cursors { - z-index: 1; -} - -.cm-animate-fat-cursor { - width: auto; - border: 0; - -webkit-animation: blink 1.06s steps(1) infinite; - -moz-animation: blink 1.06s steps(1) infinite; - animation: blink 1.06s steps(1) infinite; -} -@-moz-keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} -@-webkit-keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} -@keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} - -/* Can style cursor different in overwrite (non-insert) mode */ -div.CodeMirror-overwrite div.CodeMirror-cursor {} - -.cm-tab { display: inline-block; text-decoration: inherit; } - -.CodeMirror-ruler { - border-left: 1px solid #ccc; - position: absolute; -} - -/* DEFAULT THEME */ - -.cm-s-default .cm-keyword {color: #708;} -.cm-s-default .cm-atom {color: #219;} -.cm-s-default .cm-number {color: #164;} -.cm-s-default .cm-def {color: #00f;} -.cm-s-default .cm-variable, -.cm-s-default .cm-punctuation, -.cm-s-default .cm-property, -.cm-s-default .cm-operator {} -.cm-s-default .cm-variable-2 {color: #05a;} -.cm-s-default .cm-variable-3 {color: #085;} -.cm-s-default .cm-comment {color: #a50;} -.cm-s-default .cm-string {color: #a11;} -.cm-s-default .cm-string-2 {color: #f50;} -.cm-s-default .cm-meta {color: #555;} -.cm-s-default .cm-qualifier {color: #555;} -.cm-s-default .cm-builtin {color: #30a;} -.cm-s-default .cm-bracket {color: #997;} -.cm-s-default .cm-tag {color: #170;} -.cm-s-default .cm-attribute {color: #00c;} -.cm-s-default .cm-header {color: blue;} -.cm-s-default .cm-quote {color: #090;} -.cm-s-default .cm-hr {color: #999;} -.cm-s-default .cm-link {color: #00c;} - -.cm-negative {color: #d44;} -.cm-positive {color: #292;} -.cm-header, .cm-strong {font-weight: bold;} -.cm-em {font-style: italic;} -.cm-link {text-decoration: underline;} -.cm-strikethrough {text-decoration: line-through;} - -.cm-s-default .cm-error {color: #f00;} -.cm-invalidchar {color: #f00;} - -/* Default styles for common addons */ - -div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} -div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} -.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } -.CodeMirror-activeline-background {background: #e8f2ff;} - -/* STOP */ - -/* The rest of this file contains styles related to the mechanics of - the editor. You probably shouldn't touch them. */ - -.CodeMirror { - line-height: 1; - position: relative; - overflow: hidden; - background: white; - color: black; -} - -.CodeMirror-scroll { - overflow: scroll !important; /* Things will break if this is overridden */ - /* 30px is the magic margin used to hide the element's real scrollbars */ - /* See overflow: hidden in .CodeMirror */ - margin-bottom: -30px; margin-right: -30px; - padding-bottom: 30px; - height: 100%; - outline: none; /* Prevent dragging from highlighting the element */ - position: relative; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -.CodeMirror-sizer { - position: relative; - border-right: 30px solid transparent; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -/* The fake, visible scrollbars. Used to force redraw during scrolling - before actuall scrolling happens, thus preventing shaking and - flickering artifacts. */ -.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - position: absolute; - z-index: 6; - display: none; -} -.CodeMirror-vscrollbar { - right: 0; top: 0; - overflow-x: hidden; - overflow-y: scroll; -} -.CodeMirror-hscrollbar { - bottom: 0; left: 0; - overflow-y: hidden; - overflow-x: scroll; -} -.CodeMirror-scrollbar-filler { - right: 0; bottom: 0; -} -.CodeMirror-gutter-filler { - left: 0; bottom: 0; -} - -.CodeMirror-gutters { - position: absolute; left: 0; top: 0; - z-index: 3; -} -.CodeMirror-gutter { - white-space: normal; - height: 100%; - -moz-box-sizing: content-box; - box-sizing: content-box; - display: inline-block; - margin-bottom: -30px; - /* Hack to make IE7 behave */ - *zoom:1; - *display:inline; -} -.CodeMirror-gutter-wrapper { - position: absolute; - z-index: 4; - height: 100%; -} -.CodeMirror-gutter-elt { - position: absolute; - cursor: default; - z-index: 4; -} - -.CodeMirror-lines { - cursor: text; - min-height: 1px; /* prevents collapsing before first draw */ -} -.CodeMirror pre { - /* Reset some styles that the rest of the page might have set */ - -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; - border-width: 0; - background: transparent; - font-family: inherit; - font-size: inherit; - margin: 0; - white-space: pre; - word-wrap: normal; - line-height: inherit; - color: inherit; - z-index: 2; - position: relative; - overflow: visible; -} -.CodeMirror-wrap pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: normal; -} - -.CodeMirror-linebackground { - position: absolute; - left: 0; right: 0; top: 0; bottom: 0; - z-index: 0; -} - -.CodeMirror-linewidget { - position: relative; - z-index: 2; - overflow: auto; -} - -.CodeMirror-widget {} - -.CodeMirror-measure { - position: absolute; - width: 100%; - height: 0; - overflow: hidden; - visibility: hidden; -} -.CodeMirror-measure pre { position: static; } - -.CodeMirror div.CodeMirror-cursor { - position: absolute; - border-right: none; - width: 0; -} - -div.CodeMirror-cursors { - visibility: hidden; - position: relative; - z-index: 3; -} -.CodeMirror-focused div.CodeMirror-cursors { - visibility: visible; -} - -.CodeMirror-selected { background: #d9d9d9; } -.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } -.CodeMirror-crosshair { cursor: crosshair; } - -.cm-searching { - background: #ffa; - background: rgba(255, 255, 0, .4); -} - -/* IE7 hack to prevent it from returning funny offsetTops on the spans */ -.CodeMirror span { *vertical-align: text-bottom; } - -/* Used to force a border model for a node */ -.cm-force-border { padding-right: .1px; } - -@media print { - /* Hide the cursor when printing */ - .CodeMirror div.CodeMirror-cursors { - visibility: hidden; - } -} - -/* See issue #2901 */ -.cm-tab-wrap-hack:after { content: ''; } - -/* Help users use markselection to safely style text background */ -span.CodeMirror-selectedtext { background: none; } diff --git a/web/lib/codemirror/lib/codemirror.js b/web/lib/codemirror/lib/codemirror.js deleted file mode 100644 index 73f339503..000000000 --- a/web/lib/codemirror/lib/codemirror.js +++ /dev/null @@ -1,13 +0,0 @@ -/* CodeMirror - Minified & Bundled - Generated on 11/19/2015 with http://codemirror.net/doc/compress.html - Version: 4.13 - - CodeMirror Library: - - codemirror.js - */ - -!function(a){if("object"==typeof exports&&"object"==typeof module)module.exports=a();else{if("function"==typeof define&&define.amd)return define([],a);this.CodeMirror=a()}}(function(){"use strict";function w(a,b){if(!(this instanceof w))return new w(a,b);this.options=b=b?Xf(b):{},Xf(pd,b,!1),J(b);var c=b.value;"string"==typeof c&&(c=new Re(c,b.mode)),this.doc=c;var g=this.display=new x(a,c);g.wrapper.CodeMirror=this,F(this),D(this),b.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),b.autofocus&&!o&&fc(this),N(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,draggingText:!1,highlight:new Nf,keySeq:null},d&&11>e&&setTimeout(Yf(ec,this,!0),20),ic(this),pg(),Gb(this),this.curOp.forceUpdate=!0,Ve(this,c),b.autofocus&&!o||ig()==g.input?setTimeout(Yf(Oc,this),20):Pc(this);for(var h in qd)qd.hasOwnProperty(h)&&qd[h](this,b[h],sd);S(this),b.finishInit&&b.finishInit(this);for(var i=0;ie&&(c.gutters.style.zIndex=-1,c.scroller.style.paddingRight=0),n&&(g.style.width="0px"),f||(c.scroller.draggable=!0),k&&(c.inputDiv.style.height="1px",c.inputDiv.style.position="absolute"),a&&(a.appendChild?a.appendChild(c.wrapper):a(c.wrapper)),c.viewFrom=c.viewTo=b.first,c.reportedViewFrom=c.reportedViewTo=b.first,c.view=[],c.renderedView=null,c.externalMeasured=null,c.viewOffset=0,c.lastWrapHeight=c.lastWrapWidth=0,c.updateLineNumbers=null,c.nativeBarWidth=c.barHeight=c.barWidth=0,c.scrollbarsClipped=!1,c.lineNumWidth=c.lineNumInnerWidth=c.lineNumChars=null,c.prevInput="",c.alignWidgets=!1,c.pollingFast=!1,c.poll=new Nf,c.cachedCharWidth=c.cachedTextHeight=c.cachedPaddingH=null,c.inaccurateSelection=!1,c.maxLine=null,c.maxLineLength=0,c.maxLineChanged=!1,c.wheelDX=c.wheelDY=c.wheelStartX=c.wheelStartY=null,c.shift=!1,c.selForContextMenu=null}function y(a){a.doc.mode=w.getMode(a.options,a.doc.modeOption),z(a)}function z(a){a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null)}),a.doc.frontier=a.doc.first,Wa(a,100),a.state.modeGen++,a.curOp&&Vb(a)}function A(a){a.options.lineWrapping?(lg(a.display.wrapper,"CodeMirror-wrap"),a.display.sizer.style.minWidth="",a.display.sizerWidth=null):(kg(a.display.wrapper,"CodeMirror-wrap"),I(a)),C(a),Vb(a),qb(a),setTimeout(function(){O(a)},100)}function B(a){var b=Cb(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/Db(a.display)-3);return function(e){if(le(a.doc,e))return 0;var f=0;if(e.widgets)for(var g=0;gb.maxLineLength&&(b.maxLineLength=c,b.maxLine=a)})}function J(a){var b=Uf(a.gutters,"CodeMirror-linenumbers");-1==b&&a.lineNumbers?a.gutters=a.gutters.concat(["CodeMirror-linenumbers"]):b>-1&&!a.lineNumbers&&(a.gutters=a.gutters.slice(0),a.gutters.splice(b,1))}function K(a){var b=a.display,c=b.gutters.offsetWidth,d=Math.round(a.doc.height+_a(a.display));return{clientHeight:b.scroller.clientHeight,viewHeight:b.wrapper.clientHeight,scrollWidth:b.scroller.scrollWidth,clientWidth:b.scroller.clientWidth,viewWidth:b.wrapper.clientWidth,barLeft:a.options.fixedGutter?c:0,docHeight:d,scrollHeight:d+bb(a)+b.barHeight,nativeBarWidth:b.nativeBarWidth,gutterWidth:c}}function L(a,b,c){this.cm=c;var f=this.vert=dg("div",[dg("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),g=this.horiz=dg("div",[dg("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");a(f),a(g),yf(f,"scroll",function(){f.clientHeight&&b(f.scrollTop,"vertical")}),yf(g,"scroll",function(){g.clientWidth&&b(g.scrollLeft,"horizontal")}),this.checkedOverlay=!1,d&&8>e&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")}function M(){}function N(a){a.display.scrollbars&&(a.display.scrollbars.clear(),a.display.scrollbars.addClass&&kg(a.display.wrapper,a.display.scrollbars.addClass)),a.display.scrollbars=new w.scrollbarModel[a.options.scrollbarStyle](function(b){a.display.wrapper.insertBefore(b,a.display.scrollbarFiller),yf(b,"mousedown",function(){a.state.focused&&setTimeout(Yf(fc,a),0)}),b.setAttribute("not-content","true")},function(b,c){"horizontal"==c?yc(a,b):xc(a,b)},a),a.display.scrollbars.addClass&&lg(a.display.wrapper,a.display.scrollbars.addClass)}function O(a,b){b||(b=K(a));var c=a.display.barWidth,d=a.display.barHeight;P(a,b);for(var e=0;4>e&&c!=a.display.barWidth||d!=a.display.barHeight;e++)c!=a.display.barWidth&&a.options.lineWrapping&&_(a),P(a,K(a)),c=a.display.barWidth,d=a.display.barHeight}function P(a,b){var c=a.display,d=c.scrollbars.update(b);c.sizer.style.paddingRight=(c.barWidth=d.right)+"px",c.sizer.style.paddingBottom=(c.barHeight=d.bottom)+"px",d.right&&d.bottom?(c.scrollbarFiller.style.display="block",c.scrollbarFiller.style.height=d.bottom+"px",c.scrollbarFiller.style.width=d.right+"px"):c.scrollbarFiller.style.display="",d.bottom&&a.options.coverGutterNextToScrollbar&&a.options.fixedGutter?(c.gutterFiller.style.display="block",c.gutterFiller.style.height=d.bottom+"px",c.gutterFiller.style.width=b.gutterWidth+"px"):c.gutterFiller.style.display=""}function Q(a,b,c){var d=c&&null!=c.top?Math.max(0,c.top):a.scroller.scrollTop;d=Math.floor(d-$a(a));var e=c&&null!=c.bottom?c.bottom:d+a.wrapper.clientHeight,f=_e(b,d),g=_e(b,e);if(c&&c.ensure){var h=c.ensure.from.line,i=c.ensure.to.line;f>h?(f=h,g=_e(b,af(We(b,h))+a.wrapper.clientHeight)):Math.min(i,b.lastLine())>=g&&(f=_e(b,af(We(b,i))-a.wrapper.clientHeight),g=i)}return{from:f,to:Math.max(g,f+1)}}function R(a){var b=a.display,c=b.view;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var d=U(b)-b.scroller.scrollLeft+a.doc.scrollLeft,e=b.gutters.offsetWidth,f=d+"px",g=0;g=c.viewFrom&&b.visible.to<=c.viewTo&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo)&&c.renderedView==c.view&&0==_b(a))return!1;S(a)&&(Xb(a),b.dims=ba(a));var e=d.first+d.size,f=Math.max(b.visible.from-a.options.viewportMargin,d.first),g=Math.min(e,b.visible.to+a.options.viewportMargin);c.viewFromg&&c.viewTo-g<20&&(g=Math.min(e,c.viewTo)),v&&(f=je(a.doc,f),g=ke(a.doc,g));var h=f!=c.viewFrom||g!=c.viewTo||c.lastWrapHeight!=b.wrapperHeight||c.lastWrapWidth!=b.wrapperWidth;$b(a,f,g),c.viewOffset=af(We(a.doc,c.viewFrom)),a.display.mover.style.top=c.viewOffset+"px";var i=_b(a);if(!h&&0==i&&!b.force&&c.renderedView==c.view&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo))return!1;var j=ig();return i>4&&(c.lineDiv.style.display="none"),ca(a,c.updateLineNumbers,b.dims),i>4&&(c.lineDiv.style.display=""),c.renderedView=c.view,j&&ig()!=j&&j.offsetHeight&&j.focus(),fg(c.cursorDiv),fg(c.selectionDiv),c.gutters.style.height=0,h&&(c.lastWrapHeight=b.wrapperHeight,c.lastWrapWidth=b.wrapperWidth,Wa(a,400)),c.updateLineNumbers=null,!0}function Y(a,b){for(var c=b.force,d=b.viewport,e=!0;;e=!1){if(e&&a.options.lineWrapping&&b.oldDisplayWidth!=cb(a))c=!0;else if(c=!1,d&&null!=d.top&&(d={top:Math.min(a.doc.height+_a(a.display)-db(a),d.top)}),b.visible=Q(a.display,a.doc,d),b.visible.from>=a.display.viewFrom&&b.visible.to<=a.display.viewTo)break;if(!X(a,b))break;_(a);var f=K(a);Sa(a),$(a,f),O(a,f)}b.signal(a,"update",a),(a.display.viewFrom!=a.display.reportedViewFrom||a.display.viewTo!=a.display.reportedViewTo)&&(b.signal(a,"viewportChange",a,a.display.viewFrom,a.display.viewTo),a.display.reportedViewFrom=a.display.viewFrom,a.display.reportedViewTo=a.display.viewTo)}function Z(a,b){var c=new V(a,b);if(X(a,c)){_(a),Y(a,c);var d=K(a);Sa(a),$(a,d),O(a,d),c.finish()}}function $(a,b){a.display.sizer.style.minHeight=b.docHeight+"px";var c=b.docHeight+a.display.barHeight;a.display.heightForcer.style.top=c+"px",a.display.gutters.style.height=Math.max(c+bb(a),b.clientHeight)+"px"}function _(a){for(var b=a.display,c=b.lineDiv.offsetTop,f=0;fe){var i=g.node.offsetTop+g.node.offsetHeight;h=i-c,c=i}else{var j=g.node.getBoundingClientRect();h=j.bottom-j.top}var k=g.line.height-h;if(2>h&&(h=Cb(b)),(k>.001||-.001>k)&&(Ze(g.line,h),aa(g.line),g.rest))for(var l=0;l=b&&m.lineNumber;m.changes&&(Uf(m.changes,"gutter")>-1&&(o=!1),da(a,m,k,c)),o&&(fg(m.lineNumber),m.lineNumber.appendChild(document.createTextNode(T(a.options,k)))),h=m.node.nextSibling}else{var n=la(a,m,k,c);g.insertBefore(n,h)}k+=m.size}for(;h;)h=i(h)}function da(a,b,c,d){for(var e=0;ee&&(a.node.style.zIndex=2)),a.node}function fa(a){var b=a.bgClass?a.bgClass+" "+(a.line.bgClass||""):a.line.bgClass;if(b&&(b+=" CodeMirror-linebackground"),a.background)b?a.background.className=b:(a.background.parentNode.removeChild(a.background),a.background=null);else if(b){var c=ea(a);a.background=c.insertBefore(dg("div",null,b),c.firstChild)}}function ga(a,b){var c=a.display.externalMeasured;return c&&c.line==b.line?(a.display.externalMeasured=null,b.measure=c.measure,c.built):Fe(a,b)}function ha(a,b){var c=b.text.className,d=ga(a,b);b.text==b.node&&(b.node=d.pre),b.text.parentNode.replaceChild(d.pre,b.text),b.text=d.pre,d.bgClass!=b.bgClass||d.textClass!=b.textClass?(b.bgClass=d.bgClass,b.textClass=d.textClass,ia(b)):c&&(b.text.className=c)}function ia(a){fa(a),a.line.wrapClass?ea(a).className=a.line.wrapClass:a.node!=a.text&&(a.node.className="");var b=a.textClass?a.textClass+" "+(a.line.textClass||""):a.line.textClass;a.text.className=b||""}function ja(a,b,c,d){b.gutter&&(b.node.removeChild(b.gutter),b.gutter=null);var e=b.line.gutterMarkers;if(a.options.lineNumbers||e){var f=ea(b),g=b.gutter=f.insertBefore(dg("div",null,"CodeMirror-gutter-wrapper","left: "+(a.options.fixedGutter?d.fixedPos:-d.gutterTotalWidth)+"px; width: "+d.gutterTotalWidth+"px"),b.text);if(b.line.gutterClass&&(g.className+=" "+b.line.gutterClass),!a.options.lineNumbers||e&&e["CodeMirror-linenumbers"]||(b.lineNumber=g.appendChild(dg("div",T(a.options,c),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+d.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+a.display.lineNumInnerWidth+"px"))),e)for(var h=0;h=0){var g=ta(f.from(),e.from()),h=sa(f.to(),e.to()),i=f.empty()?e.from()==e.head:f.from()==f.head;b>=d&&--b,a.splice(--d,2,new va(i?h:g,i?g:h))}}return new ua(a,b)}function xa(a,b){return new ua([new va(a,b||a)],0)}function ya(a,b){return Math.max(a.first,Math.min(b,a.first+a.size-1))}function za(a,b){if(b.linec?pa(c,We(a,c).text.length):Aa(b,We(a,b.line).text.length)}function Aa(a,b){var c=a.ch;return null==c||c>b?pa(a.line,b):0>c?pa(a.line,0):a}function Ba(a,b){return b>=a.first&&b=f.ch:j.to>f.ch))){if(d&&(Af(k,"beforeCursorEnter"),k.explicitlyCleared)){if(h.markedSpans){--i;continue}break}if(!k.atomic)continue;var l=k.find(0>g?-1:1);if(0==qa(l,f)&&(l.ch+=g,l.ch<0?l=l.line>a.first?za(a,pa(l.line-1)):null:l.ch>h.text.length&&(l=l.lineb&&(b=0),b=Math.round(b),d=Math.round(d),f.appendChild(dg("div",null,"CodeMirror-selected","position: absolute; left: "+a+"px; top: "+b+"px; width: "+(null==c?i-a:c)+"px; height: "+(d-b)+"px"))}function k(b,c,d){function m(c,d){return vb(a,pa(b,c),"div",f,d)}var k,l,f=We(e,b),g=f.text.length;return Cg(bf(f),c||0,null==d?g:d,function(a,b,e){var n,o,p,f=m(a,"left");if(a==b)n=f,o=p=f.left;else{if(n=m(b-1,"right"),"rtl"==e){var q=f;f=n,n=q}o=f.left,p=n.right}null==c&&0==a&&(o=h),n.top-f.top>3&&(j(o,f.top,null,f.bottom),o=h,f.bottoml.bottom||n.bottom==l.bottom&&n.right>l.right)&&(l=n),h+1>o&&(o=h),j(o,n.top,p-o,n.bottom)}),{start:k,end:l}}var d=a.display,e=a.doc,f=document.createDocumentFragment(),g=ab(a.display),h=g.left,i=Math.max(d.sizerWidth,cb(a)-d.sizer.offsetLeft)-g.right,l=b.from(),m=b.to();if(l.line==m.line)k(l.line,l.ch,m.ch);else{var n=We(e,l.line),o=We(e,m.line),p=he(n)==he(o),q=k(l.line,l.ch,p?n.text.length+1:null).end,r=k(m.line,p?0:null,m.ch).start;p&&(q.top0?b.blinker=setInterval(function(){b.cursorDiv.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate):a.options.cursorBlinkRate<0&&(b.cursorDiv.style.visibility="hidden")}}function Wa(a,b){a.doc.mode.startState&&a.doc.frontier=a.display.viewTo)){var c=+new Date+a.options.workTime,d=yd(b.mode,Za(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.viewTo+500),function(f){if(b.frontier>=a.display.viewFrom){var g=f.styles,h=ze(a,f,d,!0);f.styles=h.styles;var i=f.styleClasses,j=h.classes;j?f.styleClasses=j:i&&(f.styleClasses=null);for(var k=!g||g.length!=f.styles.length||i!=j&&(!i||!j||i.bgClass!=j.bgClass||i.textClass!=j.textClass),l=0;!k&&lc?(Wa(a,a.options.workDelay),!0):void 0}),e.length&&Pb(a,function(){for(var b=0;bg;--h){if(h<=f.first)return f.first;var i=We(f,h-1);if(i.stateAfter&&(!c||h<=f.frontier))return h;var j=Of(i.text,null,a.options.tabSize);(null==e||d>j)&&(e=h-1,d=j)}return e}function Za(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0;var f=Ya(a,b,c),g=f>d.first&&We(d,f-1).stateAfter;return g=g?yd(d.mode,g):zd(d.mode),d.iter(f,b,function(c){Be(a,c.text,g);var h=f==b-1||f%5==0||f>=e.viewFrom&&f2&&f.push((i.bottom+j.top)/2-c.top)}}f.push(c.bottom-c.top)}}function fb(a,b,c){if(a.line==b)return{map:a.measure.map,cache:a.measure.cache};for(var d=0;dc)return{map:a.measure.maps[d],cache:a.measure.caches[d],before:!0}}function gb(a,b){b=he(b);var c=$e(b),d=a.display.externalMeasured=new Tb(a.doc,b,c);d.lineN=c;var e=d.built=Fe(a,d);return d.text=e.pre,gg(a.display.lineMeasure,e.pre),d}function hb(a,b,c,d){return kb(a,jb(a,b),c,d)}function ib(a,b){if(b>=a.display.viewFrom&&b=c.lineN&&bc?(i=0,j=1,k="left"):n>c?(i=c-m,j=i+1):(l==g.length-3||c==n&&g[l+3]>c)&&(j=n-m,i=j-1,c>=n&&(k="right")),null!=i){if(h=g[l+2],m==n&&f==(h.insertLeft?"left":"right")&&(k=f),"left"==f&&0==i)for(;l&&g[l-2]==g[l-3]&&g[l-1].insertLeft;)h=g[(l-=3)+2],k="left";if("right"==f&&i==n-m)for(;ll;l++){for(;i&&cg(b.line.text.charAt(m+i));)--i;for(;n>m+j&&cg(b.line.text.charAt(m+j));)++j;if(d&&9>e&&0==i&&j==n-m)o=h.parentNode.getBoundingClientRect();else if(d&&a.options.lineWrapping){var p=eg(h,i,j).getClientRects();o=p.length?p["right"==f?p.length-1:0]:lb}else o=eg(h,i,j).getBoundingClientRect()||lb;if(o.left||o.right||0==i)break;j=i,i-=1,k="right"}d&&11>e&&(o=nb(a.display.measure,o))}else{i>0&&(k=f="right");var p;o=a.options.lineWrapping&&(p=h.getClientRects()).length>1?p["right"==f?p.length-1:0]:h.getBoundingClientRect()}if(d&&9>e&&!i&&(!o||!o.left&&!o.right)){var q=h.parentNode.getClientRects()[0];o=q?{left:q.left,right:q.left+Db(a.display),top:q.top,bottom:q.bottom}:lb}for(var r=o.top-b.rect.top,s=o.bottom-b.rect.top,t=(r+s)/2,u=b.view.measure.heights,l=0;lc.from?g(a-1):g(a,d)}d=d||We(a.doc,b.line),e||(e=jb(a,d));var i=bf(d),j=b.ch;if(!i)return g(j);var k=Mg(i,j),l=h(j,k);return null!=Lg&&(l.other=h(j,Lg)),l}function xb(a,b){var c=0,b=za(a.doc,b);a.options.lineWrapping||(c=Db(a.display)*b.ch);var d=We(a.doc,b.line),e=af(d)+$a(a.display);return{left:c,right:c,top:e,bottom:e+d.height}}function yb(a,b,c,d){var e=pa(a,b);return e.xRel=d,c&&(e.outside=!0),e}function zb(a,b,c){var d=a.doc;if(c+=a.display.viewOffset,0>c)return yb(d.first,0,!0,-1);var e=_e(d,c),f=d.first+d.size-1;if(e>f)return yb(d.first+d.size-1,We(d,f).text.length,!0,1);0>b&&(b=0);for(var g=We(d,e);;){var h=Ab(a,g,e,b,c),i=fe(g),j=i&&i.find(0,!0);if(!i||!(h.ch>j.from.ch||h.ch==j.from.ch&&h.xRel>0))return h;e=$e(g=j.to.line)}}function Ab(a,b,c,d,e){function j(d){var e=wb(a,pa(c,d),"line",b,i);return g=!0,f>e.bottom?e.left-h:fq)return yb(c,n,r,1);for(;;){if(k?n==m||n==Og(b,m,1):1>=n-m){for(var s=o>d||q-d>=d-o?m:n,t=d-(s==m?o:q);cg(b.text.charAt(s));)++s;var u=yb(c,s,s==m?p:r,-1>t?-1:t>1?1:0);return u}var v=Math.ceil(l/2),w=m+v;if(k){w=m;for(var x=0;v>x;++x)w=Og(b,w,1)}var y=j(w);y>d?(n=w,q=y,(r=g)&&(q+=1e3),l=v):(m=w,o=y,p=g,l-=v)}}function Cb(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==Bb){Bb=dg("pre");for(var b=0;49>b;++b)Bb.appendChild(document.createTextNode("x")),Bb.appendChild(dg("br"));Bb.appendChild(document.createTextNode("x"))}gg(a.measure,Bb);var c=Bb.offsetHeight/50;return c>3&&(a.cachedTextHeight=c),fg(a.measure),c||1}function Db(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b=dg("span","xxxxxxxxxx"),c=dg("pre",[b]);gg(a.measure,c); -var d=b.getBoundingClientRect(),e=(d.right-d.left)/10;return e>2&&(a.cachedCharWidth=e),e||10}function Gb(a){a.curOp={cm:a,viewChanged:!1,startHeight:a.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,id:++Fb},Eb?Eb.ops.push(a.curOp):a.curOp.ownsGroup=Eb={ops:[a.curOp],delayedCallbacks:[]}}function Hb(a){var b=a.delayedCallbacks,c=0;do{for(;c=c.viewTo)||c.maxLineChanged&&b.options.lineWrapping,a.update=a.mustUpdate&&new V(b,a.mustUpdate&&{top:a.scrollTop,ensure:a.scrollToPos},a.forceUpdate)}function Lb(a){a.updatedDisplay=a.mustUpdate&&X(a.cm,a.update)}function Mb(a){var b=a.cm,c=b.display;a.updatedDisplay&&_(b),a.barMeasure=K(b),c.maxLineChanged&&!b.options.lineWrapping&&(a.adjustWidthTo=hb(b,c.maxLine,c.maxLine.text.length).left+3,b.display.sizerWidth=a.adjustWidthTo,a.barMeasure.scrollWidth=Math.max(c.scroller.clientWidth,c.sizer.offsetLeft+a.adjustWidthTo+bb(b)+b.display.barWidth),a.maxScrollLeft=Math.max(0,c.sizer.offsetLeft+a.adjustWidthTo-cb(b))),(a.updatedDisplay||a.selectionChanged)&&(a.newSelectionNodes=Qa(b))}function Nb(a){var b=a.cm;null!=a.adjustWidthTo&&(b.display.sizer.style.minWidth=a.adjustWidthTo+"px",a.maxScrollLeftf;f=e){var g=new Tb(a.doc,We(a.doc,f),f);e=f+g.size,d.push(g)}return d}function Vb(a,b,c,d){null==b&&(b=a.doc.first),null==c&&(c=a.doc.first+a.doc.size),d||(d=0);var e=a.display;if(d&&cb)&&(e.updateLineNumbers=b),a.curOp.viewChanged=!0,b>=e.viewTo)v&&je(a.doc,b)e.viewFrom?Xb(a):(e.viewFrom+=d,e.viewTo+=d);else if(b<=e.viewFrom&&c>=e.viewTo)Xb(a);else if(b<=e.viewFrom){var f=Zb(a,c,c+d,1);f?(e.view=e.view.slice(f.index),e.viewFrom=f.lineN,e.viewTo+=d):Xb(a)}else if(c>=e.viewTo){var f=Zb(a,b,b,-1);f?(e.view=e.view.slice(0,f.index),e.viewTo=f.lineN):Xb(a)}else{var g=Zb(a,b,b,-1),h=Zb(a,c,c+d,1);g&&h?(e.view=e.view.slice(0,g.index).concat(Ub(a,g.lineN,h.lineN)).concat(e.view.slice(h.index)),e.viewTo+=d):Xb(a)}var i=e.externalMeasured;i&&(c=e.lineN&&b=d.viewTo)){var f=d.view[Yb(a,b)];if(null!=f.node){var g=f.changes||(f.changes=[]);-1==Uf(g,c)&&g.push(c)}}}function Xb(a){a.display.viewFrom=a.display.viewTo=a.doc.first,a.display.view=[],a.display.viewOffset=0}function Yb(a,b){if(b>=a.display.viewTo)return null;if(b-=a.display.viewFrom,0>b)return null;for(var c=a.display.view,d=0;db)return d}function Zb(a,b,c,d){var f,e=Yb(a,b),g=a.display.view;if(!v||c==a.doc.first+a.doc.size)return{index:e,lineN:c};for(var h=0,i=a.display.viewFrom;e>h;h++)i+=g[h].size;if(i!=b){if(d>0){if(e==g.length-1)return null;f=i+g[e].size-b,e++}else f=i-b;b+=f,c+=f}for(;je(a.doc,c)!=c;){if(e==(0>d?0:g.length-1))return null;c+=d*g[e-(0>d?1:0)].size,e+=d}return{index:e,lineN:c}}function $b(a,b,c){var d=a.display,e=d.view;0==e.length||b>=d.viewTo||c<=d.viewFrom?(d.view=Ub(a,b,c),d.viewFrom=b):(d.viewFrom>b?d.view=Ub(a,b,d.viewFrom).concat(d.view):d.viewFromc&&(d.view=d.view.slice(0,Yb(a,c)))),d.viewTo=c}function _b(a){for(var b=a.display.view,c=0,d=0;d=9&&a.display.inputHasSelection===g||p&&/[\uf700-\uf7ff]/.test(g))return ec(a),!1;var h=!a.curOp;h&&Gb(a),a.display.shift=!1,8203!=g.charCodeAt(0)||f.sel!=a.display.selForContextMenu||c||(c="\u200b");for(var i=0,j=Math.min(c.length,g.length);j>i&&c.charCodeAt(i)==g.charCodeAt(i);)++i;var k=g.slice(i),l=wg(k),m=null;a.state.pasteIncoming&&f.sel.ranges.length>1&&(cc&&cc.join("\n")==k?m=f.sel.ranges.length%cc.length==0&&Vf(cc,wg):l.length==f.sel.ranges.length&&(m=Vf(l,function(a){return[a]})));for(var n=f.sel.ranges.length-1;n>=0;n--){var o=f.sel.ranges[n],q=o.from(),r=o.to();i-1){kd(a,v.line,"smart");break}}else u.electricInput&&u.electricInput.test(We(f,v.line).text.slice(0,v.ch))&&kd(a,v.line,"smart")}}return id(a),a.curOp.updateInput=s,a.curOp.typing=!0,g.length>1e3||g.indexOf("\n")>-1?b.value=a.display.prevInput="":a.display.prevInput=g,h&&Ib(a),a.state.pasteIncoming=a.state.cutIncoming=!1,!0}function ec(a,b){if(!a.display.contextMenuPending){var c,f,g=a.doc;if(a.somethingSelected()){a.display.prevInput="";var h=g.sel.primary();c=yg&&(h.to().line-h.from().line>100||(f=a.getSelection()).length>1e3);var i=c?"-":f||a.getSelection();a.display.input.value=i,a.state.focused&&Tf(a.display.input),d&&e>=9&&(a.display.inputHasSelection=i)}else b||(a.display.prevInput=a.display.input.value="",d&&e>=9&&(a.display.inputHasSelection=null));a.display.inaccurateSelection=c}}function fc(a){if("nocursor"!=a.options.readOnly&&(!o||ig()!=a.display.input))try{a.display.input.focus()}catch(b){}}function gc(a){a.state.focused||(fc(a),Oc(a))}function hc(a){return a.options.readOnly||a.doc.cantEdit}function ic(a){function c(b){Ef(a,b)||vf(b)}function g(c){if(a.somethingSelected())cc=a.getSelections(),b.inaccurateSelection&&(b.prevInput="",b.inaccurateSelection=!1,b.input.value=cc.join("\n"),Tf(b.input));else{for(var d=[],e=[],f=0;fe?yf(b.scroller,"dblclick",Qb(a,function(b){if(!Ef(a,b)){var c=lc(a,b);if(c&&!tc(a,b)&&!kc(a.display,b)){sf(b);var d=a.findWordAt(c);Ea(a.doc,d.anchor,d.head)}}})):yf(b.scroller,"dblclick",function(b){Ef(a,b)||sf(b)}),yf(b.lineSpace,"selectstart",function(a){kc(b,a)||sf(a)}),t||yf(b.scroller,"contextmenu",function(b){Qc(a,b)}),yf(b.scroller,"scroll",function(){b.scroller.clientHeight&&(xc(a,b.scroller.scrollTop),yc(a,b.scroller.scrollLeft,!0),Af(a,"scroll",a))}),yf(b.scroller,"mousewheel",function(b){Cc(a,b)}),yf(b.scroller,"DOMMouseScroll",function(b){Cc(a,b)}),yf(b.wrapper,"scroll",function(){b.wrapper.scrollTop=b.wrapper.scrollLeft=0}),yf(b.input,"keyup",function(b){Mc.call(a,b)}),yf(b.input,"input",function(){d&&e>=9&&a.display.inputHasSelection&&(a.display.inputHasSelection=null),dc(a)}),yf(b.input,"keydown",Qb(a,Kc)),yf(b.input,"keypress",Qb(a,Nc)),yf(b.input,"focus",Yf(Oc,a)),yf(b.input,"blur",Yf(Pc,a)),a.options.dragDrop&&(yf(b.scroller,"dragstart",function(b){wc(a,b)}),yf(b.scroller,"dragenter",c),yf(b.scroller,"dragover",c),yf(b.scroller,"drop",Qb(a,vc))),yf(b.scroller,"paste",function(c){kc(b,c)||(a.state.pasteIncoming=!0,fc(a),bc(a))}),yf(b.input,"paste",function(){if(f&&!a.state.fakedLastChar&&!(new Date-a.state.lastMiddleDown<200)){var c=b.input.selectionStart,d=b.input.selectionEnd;b.input.value+="$",b.input.selectionEnd=d,b.input.selectionStart=c,a.state.fakedLastChar=!0}a.state.pasteIncoming=!0,bc(a)}),yf(b.input,"cut",g),yf(b.input,"copy",g),k&&yf(b.sizer,"mouseup",function(){ig()==b.input&&b.input.blur(),fc(a)})}function jc(a){var b=a.display;(b.lastWrapHeight!=b.wrapper.clientHeight||b.lastWrapWidth!=b.wrapper.clientWidth)&&(b.cachedCharWidth=b.cachedTextHeight=b.cachedPaddingH=null,b.scrollbarsClipped=!1,a.setSize())}function kc(a,b){for(var c=wf(b);c!=a.wrapper;c=c.parentNode)if(!c||1==c.nodeType&&"true"==c.getAttribute("cm-ignore-events")||c.parentNode==a.sizer&&c!=a.mover)return!0}function lc(a,b,c,d){var e=a.display;if(!c&&"true"==wf(b).getAttribute("not-content"))return null;var f,g,h=e.lineSpace.getBoundingClientRect();try{f=b.clientX-h.left,g=b.clientY-h.top}catch(b){return null}var j,i=zb(a,f,g);if(d&&1==i.xRel&&(j=We(a.doc,i.line).text).length==i.ch){var k=Of(j,j.length,a.options.tabSize)-j.length;i=pa(i.line,Math.max(0,Math.round((f-ab(a.display).left)/Db(a.display))-k))}return i}function mc(a){if(!Ef(this,a)){var b=this,c=b.display;if(c.shift=a.shiftKey,kc(c,a))return void(f||(c.scroller.draggable=!1,setTimeout(function(){c.scroller.draggable=!0},100)));if(!tc(b,a)){var d=lc(b,a);switch(window.focus(),xf(a)){case 1:d?pc(b,a,d):wf(a)==c.scroller&&sf(a);break;case 2:f&&(b.state.lastMiddleDown=+new Date),d&&Ea(b.doc,d),setTimeout(Yf(fc,b),20),sf(a);break;case 3:t&&Qc(b,a)}}}}function pc(a,b,c){setTimeout(Yf(gc,a),0);var e,d=+new Date;oc&&oc.time>d-400&&0==qa(oc.pos,c)?e="triple":nc&&nc.time>d-400&&0==qa(nc.pos,c)?(e="double",oc={time:d,pos:c}):(e="single",nc={time:d,pos:c});var h,f=a.doc.sel,g=p?b.metaKey:b.ctrlKey;a.options.dragDrop&&rg&&!hc(a)&&"single"==e&&(h=f.contains(c))>-1&&!f.ranges[h].empty()?qc(a,b,c,g):rc(a,b,c,e,g)}function qc(a,b,c,g){var h=a.display,i=Qb(a,function(j){f&&(h.scroller.draggable=!1),a.state.draggingText=!1,zf(document,"mouseup",i),zf(h.scroller,"drop",i),Math.abs(b.clientX-j.clientX)+Math.abs(b.clientY-j.clientY)<10&&(sf(j),g||Ea(a.doc,c),fc(a),d&&9==e&&setTimeout(function(){document.body.focus(),fc(a)},20))});f&&(h.scroller.draggable=!0),a.state.draggingText=i,h.scroller.dragDrop&&h.scroller.dragDrop(),yf(document,"mouseup",i),yf(h.scroller,"drop",i)}function rc(a,b,c,d,e){function o(b){if(0!=qa(n,b))if(n=b,"rect"==d){for(var e=[],f=a.options.tabSize,k=Of(We(g,c.line).text,c.ch,f),l=Of(We(g,b.line).text,b.ch,f),m=Math.min(k,l),o=Math.max(k,l),p=Math.min(c.line,b.line),q=Math.min(a.lastLine(),Math.max(c.line,b.line));q>=p;p++){var r=We(g,p).text,s=Pf(r,m,f);m==o?e.push(new va(pa(p,s),pa(p,s))):r.length>s&&e.push(new va(pa(p,s),pa(p,Pf(r,o,f))))}e.length||e.push(new va(c,c)),Ka(g,wa(j.ranges.slice(0,i).concat(e),i),{origin:"*mouse",scroll:!1}),a.scrollIntoView(b)}else{var t=h,u=t.anchor,v=b;if("single"!=d){if("double"==d)var w=a.findWordAt(b);else var w=new va(pa(b.line,0),za(g,pa(b.line+1,0)));qa(w.anchor,u)>0?(v=w.head,u=ta(t.from(),w.anchor)):(v=w.anchor,u=sa(t.to(),w.head))}var e=j.ranges.slice(0);e[i]=new va(za(g,u),v),Ka(g,wa(e,i),Lf)}}function r(b){var c=++q,e=lc(a,b,!0,"rect"==d);if(e)if(0!=qa(e,n)){gc(a),o(e);var h=Q(f,g);(e.line>=h.to||e.linep.bottom?20:0;i&&setTimeout(Qb(a,function(){q==c&&(f.scroller.scrollTop+=i,r(b))}),50)}}function s(b){q=1/0,sf(b),fc(a),zf(document,"mousemove",t),zf(document,"mouseup",u),g.history.lastSelOrigin=null}var f=a.display,g=a.doc;sf(b);var h,i,j=g.sel,k=j.ranges;if(e&&!b.shiftKey?(i=g.sel.contains(c),h=i>-1?k[i]:new va(c,c)):h=g.sel.primary(),b.altKey)d="rect",e||(h=new va(c,c)),c=lc(a,b,!0,!0),i=-1;else if("double"==d){var l=a.findWordAt(c);h=a.display.shift||g.extend?Da(g,h,l.anchor,l.head):l}else if("triple"==d){var m=new va(pa(c.line,0),za(g,pa(c.line+1,0)));h=a.display.shift||g.extend?Da(g,h,m.anchor,m.head):m}else h=Da(g,h,c);e?-1==i?(i=k.length,Ka(g,wa(k.concat([h]),i),{scroll:!1,origin:"*mouse"})):k.length>1&&k[i].empty()&&"single"==d?(Ka(g,wa(k.slice(0,i).concat(k.slice(i+1)),0)),j=g.sel):Ga(g,i,h,Lf):(i=0,Ka(g,new ua([h],0),Lf),j=g.sel);var n=c,p=f.wrapper.getBoundingClientRect(),q=0,t=Qb(a,function(a){xf(a)?r(a):s(a)}),u=Qb(a,s);yf(document,"mousemove",t),yf(document,"mouseup",u)}function sc(a,b,c,d,e){try{var f=b.clientX,g=b.clientY}catch(b){return!1}if(f>=Math.floor(a.display.gutters.getBoundingClientRect().right))return!1;d&&sf(b);var h=a.display,i=h.lineDiv.getBoundingClientRect();if(g>i.bottom||!Gf(a,c))return uf(b);g-=i.top-h.viewOffset;for(var j=0;j=f){var l=_e(a.doc,g),m=a.options.gutters[j];return e(a,c,a,l,m,b),uf(b)}}}function tc(a,b){return sc(a,b,"gutterClick",!0,Cf)}function vc(a){var b=this;if(!Ef(b,a)&&!kc(b.display,a)){sf(a),d&&(uc=+new Date);var c=lc(b,a,!0),e=a.dataTransfer.files;if(c&&!hc(b))if(e&&e.length&&window.FileReader&&window.File)for(var f=e.length,g=Array(f),h=0,i=function(a,d){var e=new FileReader;e.onload=Qb(b,function(){if(g[d]=e.result,++h==f){c=za(b.doc,c);var a={from:c,to:c,text:wg(g.join("\n")),origin:"paste"};Yc(b.doc,a),Ja(b.doc,xa(c,Sc(a)))}}),e.readAsText(a)},j=0;f>j;++j)i(e[j],j);else{if(b.state.draggingText&&b.doc.sel.contains(c)>-1)return b.state.draggingText(a),void setTimeout(Yf(fc,b),20);try{var g=a.dataTransfer.getData("Text");if(g){if(b.state.draggingText&&!(p?a.metaKey:a.ctrlKey))var k=b.listSelections();if(La(b.doc,xa(c,c)),k)for(var j=0;jj.clientWidth||g&&j.scrollHeight>j.clientHeight){if(g&&p&&f)a:for(var k=c.target,l=h.view;k!=j;k=k.parentNode)for(var m=0;mn?o=Math.max(0,o+n-50):q=Math.min(b.doc.height,q+n+50),Z(b,{top:o,bottom:q})}20>zc&&(null==h.wheelStartX?(h.wheelStartX=j.scrollLeft,h.wheelStartY=j.scrollTop,h.wheelDX=e,h.wheelDY=g,setTimeout(function(){if(null!=h.wheelStartX){var a=j.scrollLeft-h.wheelStartX,b=j.scrollTop-h.wheelStartY,c=b&&h.wheelDY&&b/h.wheelDY||a&&h.wheelDX&&a/h.wheelDX;h.wheelStartX=h.wheelStartY=null,c&&(Ac=(Ac*zc+c)/(zc+1),++zc)}},200)):(h.wheelDX+=e,h.wheelDY+=g))}}function Dc(a,b,c){if("string"==typeof b&&(b=Ad[b],!b))return!1;a.display.pollingFast&&dc(a)&&(a.display.pollingFast=!1);var d=a.display.shift,e=!1;try{hc(a)&&(a.state.suppressEdits=!0),c&&(a.display.shift=!1),e=b(a)!=Jf}finally{a.display.shift=d,a.state.suppressEdits=!1}return e}function Ec(a,b,c){for(var d=0;de&&27==a.keyCode&&(a.returnValue=!1);var c=a.keyCode;b.display.shift=16==c||a.shiftKey;var f=Hc(b,a);i&&(Jc=f?c:null,!f&&88==c&&!yg&&(p?a.metaKey:a.ctrlKey)&&b.replaceSelection("",null,"cut")),18!=c||/\bCodeMirror-crosshair\b/.test(b.display.lineDiv.className)||Lc(b)}}function Lc(a){function c(a){18!=a.keyCode&&a.altKey||(kg(b,"CodeMirror-crosshair"),zf(document,"keyup",c),zf(document,"mouseover",c))}var b=a.display.lineDiv;lg(b,"CodeMirror-crosshair"),yf(document,"keyup",c),yf(document,"mouseover",c)}function Mc(a){16==a.keyCode&&(this.doc.sel.shift=!1),Ef(this,a)}function Nc(a){var b=this;if(!(Ef(b,a)||a.ctrlKey&&!a.altKey||p&&a.metaKey)){var c=a.keyCode,f=a.charCode;if(i&&c==Jc)return Jc=null,void sf(a);if(!(i&&(!a.which||a.which<10)||k)||!Hc(b,a)){var g=String.fromCharCode(null==f?c:f);Ic(b,a,g)||(d&&e>=9&&(b.display.inputHasSelection=null),bc(b))}}}function Oc(a){"nocursor"!=a.options.readOnly&&(a.state.focused||(Af(a,"focus",a),a.state.focused=!0,lg(a.display.wrapper,"CodeMirror-focused"),a.curOp||a.display.selForContextMenu==a.doc.sel||(ec(a),f&&setTimeout(Yf(ec,a,!0),0))),ac(a),Va(a))}function Pc(a){a.state.focused&&(Af(a,"blur",a),a.state.focused=!1,kg(a.display.wrapper,"CodeMirror-focused")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.display.shift=!1)},150)}function Qc(a,b){function m(){if(null!=c.input.selectionStart){var b=a.somethingSelected(),d=c.input.value="\u200b"+(b?c.input.value:"");c.prevInput=b?"":"\u200b",c.input.selectionStart=1,c.input.selectionEnd=d.length,c.selForContextMenu=a.doc.sel}}function n(){if(c.contextMenuPending=!1,c.inputDiv.style.position="relative",c.input.style.cssText=k,d&&9>e&&c.scrollbars.setScrollTop(c.scroller.scrollTop=h),ac(a),null!=c.input.selectionStart){(!d||d&&9>e)&&m();var b=0,f=function(){c.selForContextMenu==a.doc.sel&&0==c.input.selectionStart?Qb(a,Ad.selectAll)(a):b++<10?c.detectingSelectAll=setTimeout(f,500):ec(a)};c.detectingSelectAll=setTimeout(f,200)}}if(!Ef(a,b,"contextmenu")){var c=a.display;if(!kc(c,b)&&!Rc(a,b)){var g=lc(a,b),h=c.scroller.scrollTop;if(g&&!i){var j=a.options.resetSelectionOnContextMenu;j&&-1==a.doc.sel.contains(g)&&Qb(a,Ka)(a.doc,xa(g),Kf);var k=c.input.style.cssText;if(c.inputDiv.style.position="absolute",c.input.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(b.clientY-5)+"px; left: "+(b.clientX-5)+"px; z-index: 1000; background: "+(d?"rgba(255, 255, 255, .05)":"transparent")+"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",f)var l=window.scrollY;if(fc(a),f&&window.scrollTo(null,l),ec(a),a.somethingSelected()||(c.input.value=c.prevInput=" "),c.contextMenuPending=!0,c.selForContextMenu=a.doc.sel,clearTimeout(c.detectingSelectAll),d&&e>=9&&m(),t){vf(b);var o=function(){zf(window,"mouseup",o),setTimeout(n,20)};yf(window,"mouseup",o)}else setTimeout(n,50)}}}}function Rc(a,b){return Gf(a,"gutterContextMenu")?sc(a,b,"gutterContextMenu",!1,Af):!1}function Tc(a,b){if(qa(a,b.from)<0)return a;if(qa(a,b.to)<=0)return Sc(b);var c=a.line+b.text.length-(b.to.line-b.from.line)-1,d=a.ch;return a.line==b.to.line&&(d+=Sc(b).ch-b.to.ch),pa(c,d)}function Uc(a,b){for(var c=[],d=0;d=0;--e)Zc(a,{from:d[e].from,to:d[e].to,text:e?[""]:b.text});else Zc(a,b)}}function Zc(a,b){if(1!=b.text.length||""!=b.text[0]||0!=qa(b.from,b.to)){var c=Uc(a,b);gf(a,b,c,a.cm?a.cm.curOp.id:NaN),ad(a,b,c,Wd(a,b));var d=[];Ue(a,function(a,c){c||-1!=Uf(d,a.history)||(rf(a.history,b),d.push(a.history)),ad(a,b,null,Wd(a,b))})}}function $c(a,b,c){if(!a.cm||!a.cm.state.suppressEdits){for(var e,d=a.history,f=a.sel,g="undo"==b?d.done:d.undone,h="undo"==b?d.undone:d.done,i=0;i=0;--i){var l=e.changes[i];if(l.origin=b,k&&!Xc(a,l,!1))return void(g.length=0);j.push(df(a,l));var m=i?Uc(a,l):Sf(g);ad(a,l,m,Yd(a,l)),!i&&a.cm&&a.cm.scrollIntoView({from:l.from,to:Sc(l)});var n=[];Ue(a,function(a,b){b||-1!=Uf(n,a.history)||(rf(a.history,l),n.push(a.history)),ad(a,l,null,Yd(a,l))})}}}}function _c(a,b){if(0!=b&&(a.first+=b,a.sel=new ua(Vf(a.sel.ranges,function(a){return new va(pa(a.anchor.line+b,a.anchor.ch),pa(a.head.line+b,a.head.ch))}),a.sel.primIndex),a.cm)){Vb(a.cm,a.first,a.first-b,b);for(var c=a.cm.display,d=c.viewFrom;da.lastLine())){if(b.from.linef&&(b={from:b.from,to:pa(f,We(a,f).text.length),text:[b.text[0]],origin:b.origin}),b.removed=Xe(a,b.from,b.to),c||(c=Uc(a,b)),a.cm?bd(a.cm,b,d):Ne(a,b,d),La(a,c,Kf)}}function bd(a,b,c){var d=a.doc,e=a.display,f=b.from,g=b.to,h=!1,i=f.line;a.options.lineWrapping||(i=$e(he(We(d,f.line))),d.iter(i,g.line+1,function(a){return a==e.maxLine?(h=!0,!0):void 0})),d.sel.contains(b.from,b.to)>-1&&Ff(a),Ne(d,b,c,B(a)),a.options.lineWrapping||(d.iter(i,f.line+b.text.length,function(a){var b=H(a);b>e.maxLineLength&&(e.maxLine=a,e.maxLineLength=b,e.maxLineChanged=!0,h=!1)}),h&&(a.curOp.updateMaxLine=!0)),d.frontier=Math.min(d.frontier,f.line),Wa(a,400);var j=b.text.length-(g.line-f.line)-1;b.full?Vb(a):f.line!=g.line||1!=b.text.length||Me(a.doc,b)?Vb(a,f.line,g.line+1,j):Wb(a,f.line,"text");var k=Gf(a,"changes"),l=Gf(a,"change");if(l||k){var m={from:f,to:g,text:b.text,removed:b.removed,origin:b.origin};l&&Cf(a,"change",a,m),k&&(a.curOp.changeObjs||(a.curOp.changeObjs=[])).push(m)}a.display.selForContextMenu=null}function cd(a,b,c,d,e){if(d||(d=c),qa(d,c)<0){var f=d;d=c,c=f}"string"==typeof b&&(b=wg(b)),Yc(a,{from:c,to:d,text:b,origin:e})}function dd(a,b){if(!Ef(a,"scrollCursorIntoView")){var c=a.display,d=c.sizer.getBoundingClientRect(),e=null;if(b.top+d.top<0?e=!0:b.bottom+d.top>(window.innerHeight||document.documentElement.clientHeight)&&(e=!1),null!=e&&!m){var f=dg("div","\u200b",null,"position: absolute; top: "+(b.top-c.viewOffset-$a(a.display))+"px; height: "+(b.bottom-b.top+bb(a)+c.barHeight)+"px; left: "+b.left+"px; width: 2px;");a.display.lineSpace.appendChild(f),f.scrollIntoView(e),a.display.lineSpace.removeChild(f)}}}function ed(a,b,c,d){null==d&&(d=0);for(var e=0;5>e;e++){var f=!1,g=wb(a,b),h=c&&c!=b?wb(a,c):g,i=gd(a,Math.min(g.left,h.left),Math.min(g.top,h.top)-d,Math.max(g.left,h.left),Math.max(g.bottom,h.bottom)+d),j=a.doc.scrollTop,k=a.doc.scrollLeft;if(null!=i.scrollTop&&(xc(a,i.scrollTop),Math.abs(a.doc.scrollTop-j)>1&&(f=!0)),null!=i.scrollLeft&&(yc(a,i.scrollLeft),Math.abs(a.doc.scrollLeft-k)>1&&(f=!0)),!f)break}return g}function fd(a,b,c,d,e){var f=gd(a,b,c,d,e);null!=f.scrollTop&&xc(a,f.scrollTop),null!=f.scrollLeft&&yc(a,f.scrollLeft)}function gd(a,b,c,d,e){var f=a.display,g=Cb(a.display);0>c&&(c=0);var h=a.curOp&&null!=a.curOp.scrollTop?a.curOp.scrollTop:f.scroller.scrollTop,i=db(a),j={};e-c>i&&(e=c+i);var k=a.doc.height+_a(f),l=g>c,m=e>k-g;if(h>c)j.scrollTop=l?0:c;else if(e>h+i){var n=Math.min(c,(m?k:e)-i);n!=h&&(j.scrollTop=n)}var o=a.curOp&&null!=a.curOp.scrollLeft?a.curOp.scrollLeft:f.scroller.scrollLeft,p=cb(a)-(a.options.fixedGutter?f.gutters.offsetWidth:0),q=d-b>p;return q&&(d=b+p),10>b?j.scrollLeft=0:o>b?j.scrollLeft=Math.max(0,b-(q?0:10)):d>p+o-3&&(j.scrollLeft=d+(q?0:10)-p),j}function hd(a,b,c){(null!=b||null!=c)&&jd(a),null!=b&&(a.curOp.scrollLeft=(null==a.curOp.scrollLeft?a.doc.scrollLeft:a.curOp.scrollLeft)+b),null!=c&&(a.curOp.scrollTop=(null==a.curOp.scrollTop?a.doc.scrollTop:a.curOp.scrollTop)+c)}function id(a){jd(a);var b=a.getCursor(),c=b,d=b;a.options.lineWrapping||(c=b.ch?pa(b.line,b.ch-1):b,d=pa(b.line,b.ch+1)),a.curOp.scrollToPos={from:c,to:d,margin:a.options.cursorScrollMargin,isCursor:!0}}function jd(a){var b=a.curOp.scrollToPos;if(b){a.curOp.scrollToPos=null;var c=xb(a,b.from),d=xb(a,b.to),e=gd(a,Math.min(c.left,d.left),Math.min(c.top,d.top)-b.margin,Math.max(c.right,d.right),Math.max(c.bottom,d.bottom)+b.margin);a.scrollTo(e.scrollLeft,e.scrollTop)}}function kd(a,b,c,d){var f,e=a.doc;null==c&&(c="add"),"smart"==c&&(e.mode.indent?f=Za(a,b):c="prev");var g=a.options.tabSize,h=We(e,b),i=Of(h.text,null,g);h.stateAfter&&(h.stateAfter=null);var k,j=h.text.match(/^\s*/)[0];if(d||/\S/.test(h.text)){if("smart"==c&&(k=e.mode.indent(f,h.text.slice(j.length),h.text),k==Jf||k>150)){if(!d)return;c="prev"}}else k=0,c="not";"prev"==c?k=b>e.first?Of(We(e,b-1).text,null,g):0:"add"==c?k=i+a.options.indentUnit:"subtract"==c?k=i-a.options.indentUnit:"number"==typeof c&&(k=i+c),k=Math.max(0,k);var l="",m=0;if(a.options.indentWithTabs)for(var n=Math.floor(k/g);n;--n)m+=g,l+=" ";if(k>m&&(l+=Rf(k-m)),l!=j)cd(e,l,pa(b,0),pa(b,j.length),"+input");else for(var n=0;n=0;b--)cd(a.doc,"",d[b].from,d[b].to,"+delete");id(a)})}function nd(a,b,c,d,e){function k(){var b=f+c;return b=a.first+a.size?j=!1:(f=b,i=We(a,b))}function l(a){var b=(e?Og:Pg)(i,g,c,!0);if(null==b){if(a||!k())return j=!1;g=e?(0>c?Gg:Fg)(i):0>c?i.text.length:0}else g=b;return!0}var f=b.line,g=b.ch,h=c,i=We(a,f),j=!0;if("char"==d)l();else if("column"==d)l(!0);else if("word"==d||"group"==d)for(var m=null,n="group"==d,o=a.cm&&a.cm.getHelper(b,"wordChars"),p=!0;!(0>c)||l(!p);p=!1){var q=i.text.charAt(g)||"\n",r=_f(q,o)?"w":n&&"\n"==q?"n":!n||/\s/.test(q)?null:"p";if(!n||p||r||(r="s"),m&&m!=r){0>c&&(c=1,l());break}if(r&&(m=r),c>0&&!l(!p))break}var s=Pa(a,pa(f,g),h,!0);return j||(s.hitSide=!0),s}function od(a,b,c,d){var g,e=a.doc,f=b.left;if("page"==d){var h=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);g=b.top+c*(h-(0>c?1.5:.5)*Cb(a.display))}else"line"==d&&(g=c>0?b.bottom+3:b.top-3);for(;;){var i=zb(a,f,g);if(!i.outside)break;if(0>c?0>=g:g>=e.height){i.hitSide=!0;break}g+=5*c}return i}function rd(a,b,c,d){w.defaults[a]=b,c&&(qd[a]=d?function(a,b,d){d!=sd&&c(a,b,d)}:c)}function Cd(a){for(var c,d,e,f,b=a.split(/-(?!$)/),a=b[b.length-1],g=0;g0||0==g&&f.clearWhenEmpty!==!1)return f;if(f.replacedWith&&(f.collapsed=!0,f.widgetNode=dg("span",[f.replacedWith],"CodeMirror-widget"),d.handleMouseEvents||f.widgetNode.setAttribute("cm-ignore-events","true"),d.insertLeft&&(f.widgetNode.insertLeft=!0)),f.collapsed){if(ge(a,b.line,b,c,f)||b.line!=c.line&&ge(a,c.line,b,c,f))throw new Error("Inserting collapsed marker partially overlapping an existing one");v=!0}f.addToHistory&&gf(a,{from:b,to:c,origin:"markText"},a.sel,NaN);var j,h=b.line,i=a.cm;if(a.iter(h,c.line+1,function(a){i&&f.collapsed&&!i.options.lineWrapping&&he(a)==i.display.maxLine&&(j=!0),f.collapsed&&h!=b.line&&Ze(a,0),Td(a,new Qd(f,h==b.line?b.ch:null,h==c.line?c.ch:null)),++h}),f.collapsed&&a.iter(b.line,c.line+1,function(b){le(a,b)&&Ze(b,0)}),f.clearOnEnter&&yf(f,"beforeCursorEnter",function(){f.clear()}),f.readOnly&&(u=!0,(a.history.done.length||a.history.undone.length)&&a.clearHistory()),f.collapsed&&(f.id=++Jd,f.atomic=!0),i){if(j&&(i.curOp.updateMaxLine=!0),f.collapsed)Vb(i,b.line,c.line+1);else if(f.className||f.title||f.startStyle||f.endStyle||f.css)for(var k=b.line;k<=c.line;k++)Wb(i,k,"text");f.atomic&&Na(i.doc),Cf(i,"markerAdded",i,f)}return f}function Md(a,b,c,d,e){d=Xf(d),d.shared=!1;var f=[Kd(a,b,c,d,e)],g=f[0],h=d.widgetNode;return Ue(a,function(a){h&&(d.widgetNode=h.cloneNode(!0)),f.push(Kd(a,za(a,b),za(a,c),d,e));for(var i=0;i=b:f.to>b);(e||(e=[])).push(new Qd(g,f.from,i?null:f.to))}}return e}function Vd(a,b,c){if(a)for(var e,d=0;d=b:f.to>b);if(h||f.from==b&&"bookmark"==g.type&&(!c||f.marker.insertLeft)){var i=null==f.from||(g.inclusiveLeft?f.from<=b:f.from0&&h)for(var l=0;ll;++l)o.push(q);o.push(i)}return o}function Xd(a){for(var b=0;b0)){var k=[i,1],l=qa(j.from,h.from),m=qa(j.to,h.to);(0>l||!g.inclusiveLeft&&!l)&&k.push({from:j.from,to:h.from}),(m>0||!g.inclusiveRight&&!m)&&k.push({from:h.to,to:j.to}),e.splice.apply(e,k),i+=k.length-1}}return e}function $d(a){var b=a.markedSpans;if(b){for(var c=0;c=0&&0>=l||0>=k&&l>=0)&&(0>=k&&(qa(j.to,c)>0||i.marker.inclusiveRight&&e.inclusiveLeft)||k>=0&&(qa(j.from,d)<0||i.marker.inclusiveLeft&&e.inclusiveRight)))return!0}}}function he(a){for(var b;b=ee(a);)a=b.find(-1,!0).line;return a}function ie(a){for(var b,c;b=fe(a);)a=b.find(1,!0).line,(c||(c=[])).push(a);return c}function je(a,b){var c=We(a,b),d=he(c);return c==d?b:$e(d)}function ke(a,b){if(b>a.lastLine())return b;var d,c=We(a,b);if(!le(a,c))return b;for(;d=fe(c);)c=d.find(1,!0).line;return $e(c)+1}function le(a,b){var c=v&&b.markedSpans;if(c)for(var d,e=0;ee;e++){d&&(d[0]=w.innerMode(a,c).mode);var f=a.token(b,c);if(b.pos>b.start)return f}throw new Error("Mode "+a.name+" failed to advance stream.")}function xe(a,b,c,d){function e(a){return{start:k.start,end:k.pos,string:k.current(),type:h||null,state:a?yd(f.mode,j):j}}var h,f=a.doc,g=f.mode;b=za(f,b);var l,i=We(f,b.line),j=Za(a,b.line,c),k=new Hd(i.text,a.options.tabSize);for(d&&(l=[]);(d||k.posa.options.maxHighlightLength?(h=!1,g&&Be(a,b,d,k.pos),k.pos=b.length,l=null):l=ue(we(c,k,d,m),f),m){var n=m[0].name;n&&(l="m-"+(l?n+" "+l:n))}if(!h||j!=l){for(;ij;){var d=e[i];d>a&&e.splice(i,1,a,e[i+1],d),i+=2,j=Math.min(a,d)}if(b)if(h.opaque)e.splice(c,i-c,a,"cm-overlay "+b),i=c+2;else for(;i>c;c+=2){var f=e[c+1];e[c+1]=(f?f+" ":"")+"cm-overlay "+b}},f)}return{styles:e,classes:f.bgClass||f.textClass?f:null}}function Ae(a,b,c){if(!b.styles||b.styles[0]!=a.state.modeGen){var d=ze(a,b,b.stateAfter=Za(a,$e(b)));b.styles=d.styles,d.classes?b.styleClasses=d.classes:b.styleClasses&&(b.styleClasses=null),c===a.doc.frontier&&a.doc.frontier++}return b.styles}function Be(a,b,c,d){var e=a.doc.mode,f=new Hd(b,a.options.tabSize);for(f.start=f.pos=d||0,""==b&&ve(e,c);!f.eol()&&f.pos<=a.options.maxHighlightLength;)we(e,f,c),f.start=f.pos}function Ee(a,b){if(!a||/^\s*$/.test(a))return null;var c=b.addModeClass?De:Ce;return c[a]||(c[a]=a.replace(/\S+/g,"cm-$&"))}function Fe(a,b){var c=dg("span",null,null,f?"padding-right: .1px":null),e={pre:dg("pre",[c]),content:c,col:0,pos:0,cm:a};b.measure={};for(var g=0;g<=(b.rest?b.rest.length:0);g++){var i,h=g?b.rest[g-1]:b.line;e.pos=0,e.addToken=He,(d||f)&&a.getOption("lineWrapping")&&(e.addToken=Ie(e.addToken)),vg(a.display.measure)&&(i=bf(h))&&(e.addToken=Je(e.addToken,i)),e.map=[];var j=b!=a.display.externalMeasured&&$e(h);Le(h,e,Ae(a,h,j)),h.styleClasses&&(h.styleClasses.bgClass&&(e.bgClass=mg(h.styleClasses.bgClass,e.bgClass||"")),h.styleClasses.textClass&&(e.textClass=mg(h.styleClasses.textClass,e.textClass||""))),0==e.map.length&&e.map.push(0,0,e.content.appendChild(tg(a.display.measure))),0==g?(b.measure.map=e.map,b.measure.cache={}):((b.measure.maps||(b.measure.maps=[])).push(e.map),(b.measure.caches||(b.measure.caches=[])).push({}))}return f&&/\bcm-tab\b/.test(e.content.lastChild.className)&&(e.content.className="cm-tab-wrap-hack"),Af(a,"renderLine",a,b.line,e.pre),e.pre.className&&(e.textClass=mg(e.pre.className,e.textClass||"")),e}function Ge(a){var b=dg("span","\u2022","cm-invalidchar");return b.title="\\u"+a.charCodeAt(0).toString(16),b.setAttribute("aria-label",b.title),b}function He(a,b,c,f,g,h,i){if(b){var j=a.cm.options.specialChars,k=!1;if(j.test(b))for(var l=document.createDocumentFragment(),m=0;;){j.lastIndex=m;var n=j.exec(b),o=n?n.index-m:b.length-m;if(o){var p=document.createTextNode(b.slice(m,m+o));d&&9>e?l.appendChild(dg("span",[p])):l.appendChild(p),a.map.push(a.pos,a.pos+o,p),a.col+=o,a.pos+=o}if(!n)break;if(m+=o+1," "==n[0]){var q=a.cm.options.tabSize,r=q-a.col%q,p=l.appendChild(dg("span",Rf(r),"cm-tab"));p.setAttribute("role","presentation"),a.col+=r}else{var p=a.cm.options.specialCharPlaceholder(n[0]);d&&9>e?l.appendChild(dg("span",[p])):l.appendChild(p),a.col+=1}a.map.push(a.pos,a.pos+1,p),a.pos++}else{a.col+=b.length;var l=document.createTextNode(b);a.map.push(a.pos,a.pos+b.length,l),d&&9>e&&(k=!0),a.pos+=b.length}if(c||f||g||k||i){var s=c||"";f&&(s+=f),g&&(s+=g);var t=dg("span",[l],s,i);return h&&(t.title=h),a.content.appendChild(t)}a.content.appendChild(l)}}function Ie(a){function b(a){for(var b=" ",c=0;ci&&l.from<=i)break}if(l.to>=j)return a(c,d,e,f,g,h);a(c,d.slice(0,l.to-i),e,f,null,h),f=null,d=d.slice(l.to-i),i=l.to}}}function Ke(a,b,c,d){var e=!d&&c.widgetNode;e&&(a.map.push(a.pos,a.pos+b,e),a.content.appendChild(e)),a.pos+=b}function Le(a,b,c){var d=a.markedSpans,e=a.text,f=0;if(d)for(var k,l,n,o,p,q,r,h=e.length,i=0,g=1,j="",m=0;;){if(m==i){n=o=p=q=l="",r=null,m=1/0;for(var s=[],t=0;ti)?(null!=u.to&&m>u.to&&(m=u.to,o=""),v.className&&(n+=" "+v.className),v.css&&(l=v.css),v.startStyle&&u.from==i&&(p+=" "+v.startStyle),v.endStyle&&u.to==m&&(o+=" "+v.endStyle),v.title&&!q&&(q=v.title),v.collapsed&&(!r||ce(r.marker,v)<0)&&(r=u)):u.from>i&&m>u.from&&(m=u.from),"bookmark"==v.type&&u.from==i&&v.widgetNode&&s.push(v)}if(r&&(r.from||0)==i&&(Ke(b,(null==r.to?h+1:r.to)-i,r.marker,null==r.from),null==r.to))return;if(!r&&s.length)for(var t=0;t=h)break;for(var w=Math.min(h,m);;){if(j){var x=i+j.length;if(!r){var y=x>w?j.slice(0,w-i):j;b.addToken(b,y,k?k+n:n,p,i+y.length==m?o:"",q,l)}if(x>=w){j=j.slice(w-i),i=w;break}i=x,p=""}j=e.slice(f,f=c[g++]),k=Ee(c[g++],b.cm.options)}}else for(var g=1;gc;++c)f.push(new re(j[c],e(c),d));return f}var h=b.from,i=b.to,j=b.text,k=We(a,h.line),l=We(a,i.line),m=Sf(j),n=e(j.length-1),o=i.line-h.line;if(b.full)a.insert(0,g(0,j.length)),a.remove(j.length,a.size-j.length);else if(Me(a,b)){var p=g(0,j.length-1);f(l,l.text,n),o&&a.remove(h.line,o),p.length&&a.insert(h.line,p)}else if(k==l)if(1==j.length)f(k,k.text.slice(0,h.ch)+m+k.text.slice(i.ch),n);else{var p=g(1,j.length-1);p.push(new re(m+k.text.slice(i.ch),n,d)),f(k,k.text.slice(0,h.ch)+j[0],e(0)),a.insert(h.line+1,p)}else if(1==j.length)f(k,k.text.slice(0,h.ch)+j[0]+l.text.slice(i.ch),e(0)),a.remove(h.line+1,o);else{f(k,k.text.slice(0,h.ch)+j[0],e(0)),f(l,m+l.text.slice(i.ch),n);var p=g(1,j.length-1);o>1&&a.remove(h.line+1,o-1),a.insert(h.line+1,p)}Cf(a,"change",a,b)}function Oe(a){this.lines=a,this.parent=null;for(var b=0,c=0;bb||b>=a.size)throw new Error("There is no line "+(b+a.first)+" in the document.");for(var c=a;!c.lines;)for(var d=0;;++d){var e=c.children[d],f=e.chunkSize();if(f>b){c=e;break}b-=f}return c.lines[b]}function Xe(a,b,c){var d=[],e=b.line;return a.iter(b.line,c.line+1,function(a){var f=a.text;e==c.line&&(f=f.slice(0,c.ch)),e==b.line&&(f=f.slice(b.ch)),d.push(f),++e}),d}function Ye(a,b,c){var d=[];return a.iter(b,c,function(a){d.push(a.text)}),d}function Ze(a,b){var c=b-a.height;if(c)for(var d=a;d;d=d.parent)d.height+=c}function $e(a){if(null==a.parent)return null;for(var b=a.parent,c=Uf(b.lines,a),d=b.parent;d;b=d,d=d.parent)for(var e=0;d.children[e]!=b;++e)c+=d.children[e].chunkSize();return c+b.first}function _e(a,b){var c=a.first;a:do{for(var d=0;db){a=e;continue a}b-=f,c+=e.chunkSize()}return c}while(!a.lines);for(var d=0;db)break;b-=h}return c+d}function af(a){a=he(a);for(var b=0,c=a.parent,d=0;d1&&!a.done[a.done.length-2].ranges?(a.done.pop(),Sf(a.done)):void 0}function gf(a,b,c,d){var e=a.history;e.undone.length=0;var g,f=+new Date;if((e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&("+"==b.origin.charAt(0)&&a.cm&&e.lastModTime>f-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0)))&&(g=ff(e,e.lastOp==d))){var h=Sf(g.changes);0==qa(b.from,b.to)&&0==qa(b.from,h.to)?h.to=Sc(b):g.changes.push(df(a,b))}else{var i=Sf(e.done);for(i&&i.ranges||kf(a.sel,e.done),g={changes:[df(a,b)],generation:e.generation},e.done.push(g);e.done.length>e.undoDepth;)e.done.shift(),e.done[0].ranges||e.done.shift()}e.done.push(c),e.generation=++e.maxGeneration,e.lastModTime=e.lastSelTime=f,e.lastOp=e.lastSelOp=d,e.lastOrigin=e.lastSelOrigin=b.origin,h||Af(a,"historyAdded")}function hf(a,b,c,d){var e=b.charAt(0);return"*"==e||"+"==e&&c.ranges.length==d.ranges.length&&c.somethingSelected()==d.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}function jf(a,b,c,d){var e=a.history,f=d&&d.origin;c==e.lastSelOp||f&&e.lastSelOrigin==f&&(e.lastModTime==e.lastSelTime&&e.lastOrigin==f||hf(a,f,Sf(e.done),b))?e.done[e.done.length-1]=b:kf(b,e.done),e.lastSelTime=+new Date,e.lastSelOrigin=f,e.lastSelOp=c,d&&d.clearRedo!==!1&&ef(e.undone)}function kf(a,b){var c=Sf(b);c&&c.ranges&&c.equals(a)||b.push(a)}function lf(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=c.markedSpans),++f})}function mf(a){if(!a)return null;for(var c,b=0;b-1&&(Sf(h)[l]=j[l],delete j[l])}}}return e}function pf(a,b,c,d){c0}function Hf(a){a.prototype.on=function(a,b){yf(this,a,b)},a.prototype.off=function(a,b){zf(this,a,b)}}function Nf(){this.id=null}function Pf(a,b,c){for(var d=0,e=0;;){var f=a.indexOf(" ",d);-1==f&&(f=a.length);var g=f-d;if(f==a.length||e+g>=b)return d+Math.min(g,b-e);if(e+=f-d,e+=c-e%c,d=f+1,e>=b)return d}}function Rf(a){for(;Qf.length<=a;)Qf.push(Sf(Qf)+" ");return Qf[a]}function Sf(a){return a[a.length-1]}function Uf(a,b){for(var c=0;c-1&&$f(a)?!0:b.test(a):$f(a)}function ag(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function cg(a){return a.charCodeAt(0)>=768&&bg.test(a)}function dg(a,b,c,d){var e=document.createElement(a);if(c&&(e.className=c),d&&(e.style.cssText=d),"string"==typeof b)e.appendChild(document.createTextNode(b));else if(b)for(var f=0;f0;--b)a.removeChild(a.firstChild);return a}function gg(a,b){return fg(a).appendChild(b)}function ig(){return document.activeElement}function jg(a){return new RegExp("(^|\\s)"+a+"(?:$|\\s)\\s*")}function mg(a,b){for(var c=a.split(" "),d=0;d2&&!(d&&8>e))}return sg?dg("span","\u200b"):dg("span","\xa0",null,"display: inline-block; width: 1px; margin-right: -1px")}function vg(a){if(null!=ug)return ug;var b=gg(a,document.createTextNode("A\u062eA")),c=eg(b,0,1).getBoundingClientRect();if(!c||c.left==c.right)return!1;var d=eg(b,1,2).getBoundingClientRect();return ug=d.right-c.right<3}function Ag(a){if(null!=zg)return zg;var b=gg(a,dg("span","x")),c=b.getBoundingClientRect(),d=eg(b,0,1).getBoundingClientRect();return zg=Math.abs(c.left-d.left)>1}function Cg(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;fb||b==c&&g.to==b)&&(d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?"rtl":"ltr"),e=!0)}e||d(b,c,"ltr")}function Dg(a){return a.level%2?a.to:a.from}function Eg(a){return a.level%2?a.from:a.to}function Fg(a){var b=bf(a);return b?Dg(b[0]):0}function Gg(a){var b=bf(a);return b?Eg(Sf(b)):a.text.length}function Hg(a,b){var c=We(a.doc,b),d=he(c);d!=c&&(b=$e(d));var e=bf(d),f=e?e[0].level%2?Gg(d):Fg(d):0;return pa(b,f)}function Ig(a,b){for(var c,d=We(a.doc,b);c=fe(d);)d=c.find(1,!0).line,b=null;var e=bf(d),f=e?e[0].level%2?Fg(d):Gg(d):d.text.length;return pa(null==b?$e(d):b,f)}function Jg(a,b){var c=Hg(a,b.line),d=We(a.doc,c.line),e=bf(d);if(!e||0==e[0].level){var f=Math.max(0,d.text.search(/\S/)),g=b.line==c.line&&b.ch<=f&&b.ch;return pa(c.line,g?0:f)}return c}function Kg(a,b,c){var d=a[0].level;return b==d?!0:c==d?!1:c>b}function Mg(a,b){Lg=null;for(var d,c=0;cb)return c;if(e.from==b||e.to==b){if(null!=d)return Kg(a,e.level,a[d].level)?(e.from!=e.to&&(Lg=d),c):(e.from!=e.to&&(Lg=c),d);d=c}}return d}function Ng(a,b,c,d){if(!d)return b+c;do b+=c;while(b>0&&cg(a.text.charAt(b)));return b}function Og(a,b,c,d){var e=bf(a);if(!e)return Pg(a,b,c,d);for(var f=Mg(e,b),g=e[f],h=Ng(a,b,g.level%2?-c:c,d);;){if(h>g.from&&h0==g.level%2?g.to:g.from);if(g=e[f+=c],!g)return null;h=c>0==g.level%2?Ng(a,g.to,-1,d):Ng(a,g.from,1,d)}}function Pg(a,b,c,d){var e=b+c;if(d)for(;e>0&&cg(a.text.charAt(e));)e+=c;return 0>e||e>a.text.length?null:e}var a=/gecko\/\d/i.test(navigator.userAgent),b=/MSIE \d/.test(navigator.userAgent),c=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),d=b||c,e=d&&(b?document.documentMode||6:c[1]),f=/WebKit\//.test(navigator.userAgent),g=f&&/Qt\/\d+\.\d+/.test(navigator.userAgent),h=/Chrome\//.test(navigator.userAgent),i=/Opera\//.test(navigator.userAgent),j=/Apple Computer/.test(navigator.vendor),k=/KHTML\//.test(navigator.userAgent),l=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent),m=/PhantomJS/.test(navigator.userAgent),n=/AppleWebKit/.test(navigator.userAgent)&&/Mobile\/\w+/.test(navigator.userAgent),o=n||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent),p=n||/Mac/.test(navigator.platform),q=/win/i.test(navigator.platform),r=i&&navigator.userAgent.match(/Version\/(\d*\.\d*)/);r&&(r=Number(r[1])),r&&r>=15&&(i=!1,f=!0);var s=p&&(g||i&&(null==r||12.11>r)),t=a||d&&e>=9,u=!1,v=!1;L.prototype=Xf({update:function(a){var b=a.scrollWidth>a.clientWidth+1,c=a.scrollHeight>a.clientHeight+1,d=a.nativeBarWidth;if(c){this.vert.style.display="block",this.vert.style.bottom=b?d+"px":"0";var e=a.viewHeight-(b?d:0);this.vert.firstChild.style.height=Math.max(0,a.scrollHeight-a.clientHeight+e)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(b){this.horiz.style.display="block",this.horiz.style.right=c?d+"px":"0",this.horiz.style.left=a.barLeft+"px";var f=a.viewWidth-a.barLeft-(c?d:0);this.horiz.firstChild.style.width=a.scrollWidth-a.clientWidth+f+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedOverlay&&a.clientHeight>0&&(0==d&&this.overlayHack(),this.checkedOverlay=!0),{right:c?d:0,bottom:b?d:0}},setScrollLeft:function(a){this.horiz.scrollLeft!=a&&(this.horiz.scrollLeft=a)},setScrollTop:function(a){this.vert.scrollTop!=a&&(this.vert.scrollTop=a)},overlayHack:function(){var a=p&&!l?"12px":"18px";this.horiz.style.minHeight=this.vert.style.minWidth=a;var b=this,c=function(a){wf(a)!=b.vert&&wf(a)!=b.horiz&&Qb(b.cm,mc)(a)};yf(this.vert,"mousedown",c),yf(this.horiz,"mousedown",c)},clear:function(){var a=this.horiz.parentNode;a.removeChild(this.horiz),a.removeChild(this.vert)}},L.prototype),M.prototype=Xf({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},M.prototype),w.scrollbarModel={"native":L,"null":M},V.prototype.signal=function(a,b){Gf(a,b)&&this.events.push(arguments)},V.prototype.finish=function(){for(var a=0;a=0&&qa(a,d.to())<=0)return c}return-1}},va.prototype={from:function(){return ta(this.anchor,this.head)},to:function(){return sa(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};var Bb,nc,oc,lb={left:0,right:0,top:0,bottom:0},Eb=null,Fb=0,cc=null,uc=0,zc=0,Ac=null;d?Ac=-.53:a?Ac=15:h?Ac=-.7:j&&(Ac=-1/3);var Bc=function(a){var b=a.wheelDeltaX,c=a.wheelDeltaY;return null==b&&a.detail&&a.axis==a.HORIZONTAL_AXIS&&(b=a.detail),null==c&&a.detail&&a.axis==a.VERTICAL_AXIS?c=a.detail:null==c&&(c=a.wheelDelta),{x:b,y:c}};w.wheelEventPixels=function(a){var b=Bc(a);return b.x*=Ac,b.y*=Ac,b};var Fc=new Nf,Jc=null,Sc=w.changeEnd=function(a){return a.text?pa(a.from.line+a.text.length-1,Sf(a.text).length+(1==a.text.length?a.from.ch:0)):a.to};w.prototype={constructor:w,focus:function(){window.focus(),fc(this),bc(this)},setOption:function(a,b){var c=this.options,d=c[a];(c[a]!=b||"mode"==a)&&(c[a]=b,qd.hasOwnProperty(a)&&Qb(this,qd[a])(this,b,d))},getOption:function(a){return this.options[a]},getDoc:function(){return this.doc},addKeyMap:function(a,b){this.state.keyMaps[b?"push":"unshift"](Gd(a))},removeKeyMap:function(a){for(var b=this.state.keyMaps,c=0;cc&&(kd(this,e.head.line,a,!0),c=e.head.line,d==this.doc.sel.primIndex&&id(this));else{var f=e.from(),g=e.to(),h=Math.max(c,f.line);c=Math.min(this.lastLine(),g.line-(g.ch?0:1))+1;for(var i=h;c>i;++i)kd(this,i,a);var j=this.doc.sel.ranges;0==f.ch&&b.length==j.length&&j[d].from().ch>0&&Ga(this.doc,d,new va(f,j[d].to()),Kf)}}}),getTokenAt:function(a,b){return xe(this,a,b)},getLineTokens:function(a,b){return xe(this,pa(a),b,!0)},getTokenTypeAt:function(a){a=za(this.doc,a);var f,b=Ae(this,We(this.doc,a.line)),c=0,d=(b.length-1)/2,e=a.ch; -if(0==e)f=b[2];else for(;;){var g=c+d>>1;if((g?b[2*g-1]:0)>=e)d=g;else{if(!(b[2*g+1]h?f:0==h?null:f.slice(0,h-1)},getModeAt:function(a){var b=this.doc.mode;return b.innerMode?w.innerMode(b,this.getTokenAt(a).state).mode:b},getHelper:function(a,b){return this.getHelpers(a,b)[0]},getHelpers:function(a,b){var c=[];if(!xd.hasOwnProperty(b))return xd;var d=xd[b],e=this.getModeAt(a);if("string"==typeof e[b])d[e[b]]&&c.push(d[e[b]]);else if(e[b])for(var f=0;fd&&(a=d,c=!0);var e=We(this.doc,a);return tb(this,e,{top:0,left:0},b||"page").top+(c?this.doc.height-af(e):0)},defaultTextHeight:function(){return Cb(this.display)},defaultCharWidth:function(){return Db(this.display)},setGutterMarker:Rb(function(a,b,c){return ld(this.doc,a,"gutter",function(a){var d=a.gutterMarkers||(a.gutterMarkers={});return d[b]=c,!c&&ag(d)&&(a.gutterMarkers=null),!0})}),clearGutter:Rb(function(a){var b=this,c=b.doc,d=c.first;c.iter(function(c){c.gutterMarkers&&c.gutterMarkers[a]&&(c.gutterMarkers[a]=null,Wb(b,d,"gutter"),ag(c.gutterMarkers)&&(c.gutterMarkers=null)),++d})}),addLineWidget:Rb(function(a,b,c){return qe(this,a,b,c)}),removeLineWidget:function(a){a.clear()},lineInfo:function(a){if("number"==typeof a){if(!Ba(this.doc,a))return null;var b=a;if(a=We(this.doc,a),!a)return null}else{var b=$e(a);if(null==b)return null}return{line:b,handle:a,text:a.text,gutterMarkers:a.gutterMarkers,textClass:a.textClass,bgClass:a.bgClass,wrapClass:a.wrapClass,widgets:a.widgets}},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(a,b,c,d,e){var f=this.display;a=wb(this,za(this.doc,a));var g=a.bottom,h=a.left;if(b.style.position="absolute",b.setAttribute("cm-ignore-events","true"),f.sizer.appendChild(b),"over"==d)g=a.top;else if("above"==d||"near"==d){var i=Math.max(f.wrapper.clientHeight,this.doc.height),j=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);("above"==d||a.bottom+b.offsetHeight>i)&&a.top>b.offsetHeight?g=a.top-b.offsetHeight:a.bottom+b.offsetHeight<=i&&(g=a.bottom),h+b.offsetWidth>j&&(h=j-b.offsetWidth)}b.style.top=g+"px",b.style.left=b.style.right="","right"==e?(h=f.sizer.clientWidth-b.offsetWidth,b.style.right="0px"):("left"==e?h=0:"middle"==e&&(h=(f.sizer.clientWidth-b.offsetWidth)/2),b.style.left=h+"px"),c&&fd(this,h,g,h+b.offsetWidth,g+b.offsetHeight)},triggerOnKeyDown:Rb(Kc),triggerOnKeyPress:Rb(Nc),triggerOnKeyUp:Mc,execCommand:function(a){return Ad.hasOwnProperty(a)?Ad[a](this):void 0},findPosH:function(a,b,c,d){var e=1;0>b&&(e=-1,b=-b);for(var f=0,g=za(this.doc,a);b>f&&(g=nd(this.doc,g,e,c,d),!g.hitSide);++f);return g},moveH:Rb(function(a,b){var c=this;c.extendSelectionsBy(function(d){return c.display.shift||c.doc.extend||d.empty()?nd(c.doc,d.head,a,b,c.options.rtlMoveVisually):0>a?d.from():d.to()},Mf)}),deleteH:Rb(function(a,b){var c=this.doc.sel,d=this.doc;c.somethingSelected()?d.replaceSelection("",null,"+delete"):md(this,function(c){var e=nd(d,c.head,a,b,!1);return 0>a?{from:e,to:c.head}:{from:c.head,to:e}})}),findPosV:function(a,b,c,d){var e=1,f=d;0>b&&(e=-1,b=-b);for(var g=0,h=za(this.doc,a);b>g;++g){var i=wb(this,h,"div");if(null==f?f=i.left:i.left=f,h=od(this,i,e,c),h.hitSide)break}return h},moveV:Rb(function(a,b){var c=this,d=this.doc,e=[],f=!c.display.shift&&!d.extend&&d.sel.somethingSelected();if(d.extendSelectionsBy(function(g){if(f)return 0>a?g.from():g.to();var h=wb(c,g.head,"div");null!=g.goalColumn&&(h.left=g.goalColumn),e.push(h.left);var i=od(c,h,a,b);return"page"==b&&g==d.sel.primary()&&hd(c,null,vb(c,i,"div").top-h.top),i},Mf),e.length)for(var g=0;g0&&h(c.charAt(d-1));)--d;for(;e.5)&&C(this),Af(this,"refresh",this)}),swapDoc:Rb(function(a){var b=this.doc;return b.cm=null,Ve(this,a),qb(this),ec(this),this.scrollTo(a.scrollLeft,a.scrollTop),this.curOp.forceScroll=!0,Cf(this,"swapDoc",this,b),b}),getInputField:function(){return this.display.input},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Hf(w);var pd=w.defaults={},qd=w.optionHandlers={},sd=w.Init={toString:function(){return"CodeMirror.Init"}};rd("value","",function(a,b){a.setValue(b)},!0),rd("mode",null,function(a,b){a.doc.modeOption=b,y(a)},!0),rd("indentUnit",2,y,!0),rd("indentWithTabs",!1),rd("smartIndent",!0),rd("tabSize",4,function(a){z(a),qb(a),Vb(a)},!0),rd("specialChars",/[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(a,b){a.options.specialChars=new RegExp(b.source+(b.test(" ")?"":"| "),"g"),a.refresh()},!0),rd("specialCharPlaceholder",Ge,function(a){a.refresh()},!0),rd("electricChars",!0),rd("rtlMoveVisually",!q),rd("wholeLineUpdateBefore",!0),rd("theme","default",function(a){D(a),E(a)},!0),rd("keyMap","default",function(a,b,c){var d=Gd(b),e=c!=w.Init&&Gd(c);e&&e.detach&&e.detach(a,d),d.attach&&d.attach(a,e||null)}),rd("extraKeys",null),rd("lineWrapping",!1,A,!0),rd("gutters",[],function(a){J(a.options),E(a)},!0),rd("fixedGutter",!0,function(a,b){a.display.gutters.style.left=b?U(a.display)+"px":"0",a.refresh()},!0),rd("coverGutterNextToScrollbar",!1,function(a){O(a)},!0),rd("scrollbarStyle","native",function(a){N(a),O(a),a.display.scrollbars.setScrollTop(a.doc.scrollTop),a.display.scrollbars.setScrollLeft(a.doc.scrollLeft)},!0),rd("lineNumbers",!1,function(a){J(a.options),E(a)},!0),rd("firstLineNumber",1,E,!0),rd("lineNumberFormatter",function(a){return a},E,!0),rd("showCursorWhenSelecting",!1,Sa,!0),rd("resetSelectionOnContextMenu",!0),rd("readOnly",!1,function(a,b){"nocursor"==b?(Pc(a),a.display.input.blur(),a.display.disabled=!0):(a.display.disabled=!1,b||ec(a))}),rd("disableInput",!1,function(a,b){b||ec(a)},!0),rd("dragDrop",!0),rd("cursorBlinkRate",530),rd("cursorScrollMargin",0),rd("cursorHeight",1,Sa,!0),rd("singleCursorHeightPerLine",!0,Sa,!0),rd("workTime",100),rd("workDelay",100),rd("flattenSpans",!0,z,!0),rd("addModeClass",!1,z,!0),rd("pollInterval",100),rd("undoDepth",200,function(a,b){a.doc.history.undoDepth=b}),rd("historyEventDelay",1250),rd("viewportMargin",10,function(a){a.refresh()},!0),rd("maxHighlightLength",1e4,z,!0),rd("moveInputWithCursor",!0,function(a,b){b||(a.display.inputDiv.style.top=a.display.inputDiv.style.left=0)}),rd("tabindex",null,function(a,b){a.display.input.tabIndex=b||""}),rd("autofocus",null);var td=w.modes={},ud=w.mimeModes={};w.defineMode=function(a,b){w.defaults.mode||"null"==a||(w.defaults.mode=a),arguments.length>2&&(b.dependencies=Array.prototype.slice.call(arguments,2)),td[a]=b},w.defineMIME=function(a,b){ud[a]=b},w.resolveMode=function(a){if("string"==typeof a&&ud.hasOwnProperty(a))a=ud[a];else if(a&&"string"==typeof a.name&&ud.hasOwnProperty(a.name)){var b=ud[a.name];"string"==typeof b&&(b={name:b}),a=Wf(b,a),a.name=b.name}else if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a))return w.resolveMode("application/xml");return"string"==typeof a?{name:a}:a||{name:"null"}},w.getMode=function(a,b){var b=w.resolveMode(b),c=td[b.name];if(!c)return w.getMode(a,"text/plain");var d=c(a,b);if(vd.hasOwnProperty(b.name)){var e=vd[b.name];for(var f in e)e.hasOwnProperty(f)&&(d.hasOwnProperty(f)&&(d["_"+f]=d[f]),d[f]=e[f])}if(d.name=b.name,b.helperType&&(d.helperType=b.helperType),b.modeProps)for(var f in b.modeProps)d[f]=b.modeProps[f];return d},w.defineMode("null",function(){return{token:function(a){a.skipToEnd()}}}),w.defineMIME("text/plain","null");var vd=w.modeExtensions={};w.extendMode=function(a,b){var c=vd.hasOwnProperty(a)?vd[a]:vd[a]={};Xf(b,c)},w.defineExtension=function(a,b){w.prototype[a]=b},w.defineDocExtension=function(a,b){Re.prototype[a]=b},w.defineOption=rd;var wd=[];w.defineInitHook=function(a){wd.push(a)};var xd=w.helpers={};w.registerHelper=function(a,b,c){xd.hasOwnProperty(a)||(xd[a]=w[a]={_global:[]}),xd[a][b]=c},w.registerGlobalHelper=function(a,b,c,d){w.registerHelper(a,b,d),xd[a]._global.push({pred:c,val:d})};var yd=w.copyState=function(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c},zd=w.startState=function(a,b,c){return a.startState?a.startState(b,c):!0};w.innerMode=function(a,b){for(;a.innerMode;){var c=a.innerMode(b);if(!c||c.mode==a)break;b=c.state,a=c.mode}return c||{mode:a,state:b}};var Ad=w.commands={selectAll:function(a){a.setSelection(pa(a.firstLine(),0),pa(a.lastLine()),Kf)},singleSelection:function(a){a.setSelection(a.getCursor("anchor"),a.getCursor("head"),Kf)},killLine:function(a){md(a,function(b){if(b.empty()){var c=We(a.doc,b.head.line).text.length;return b.head.ch==c&&b.head.line0)e=new pa(e.line,e.ch+1),a.replaceRange(f.charAt(e.ch-1)+f.charAt(e.ch-2),pa(e.line,e.ch-2),e,"+transpose");else if(e.line>a.doc.first){var g=We(a.doc,e.line-1).text;g&&a.replaceRange(f.charAt(0)+"\n"+g.charAt(g.length-1),pa(e.line-1,g.length-1),pa(e.line,1),"+transpose")}c.push(new va(e,e))}a.setSelections(c)})},newlineAndIndent:function(a){Pb(a,function(){for(var b=a.listSelections().length,c=0;b>c;c++){var d=a.listSelections()[c];a.replaceRange("\n",d.anchor,d.head,"+input"),a.indentLine(d.from().line+1,null,!0),id(a)}})},toggleOverwrite:function(a){a.toggleOverwrite()}},Bd=w.keyMap={};Bd.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"},Bd.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"},Bd.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars"},Bd.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"]},Bd["default"]=p?Bd.macDefault:Bd.pcDefault,w.normalizeKeyMap=function(a){var b={};for(var c in a)if(a.hasOwnProperty(c)){var d=a[c];if(/^(name|fallthrough|(de|at)tach)$/.test(c))continue;if("..."==d){delete a[c];continue}for(var e=Vf(c.split(" "),Cd),f=0;f=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){return this.posb},eatSpace:function(){for(var a=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);return b>-1?(this.pos=b,!0):void 0},backUp:function(a){this.pos-=a},column:function(){return this.lastColumnPos0?null:(f&&b!==!1&&(this.pos+=f[0].length),f)}var d=function(a){return c?a.toLowerCase():a},e=this.string.substr(this.pos,a.length);return d(e)==d(a)?(b!==!1&&(this.pos+=a.length),!0):void 0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(a,b){this.lineStart+=a;try{return b()}finally{this.lineStart-=a}}};var Id=w.TextMarker=function(a,b){this.lines=[],this.type=b,this.doc=a};Hf(Id),Id.prototype.clear=function(){if(!this.explicitlyCleared){var a=this.doc.cm,b=a&&!a.curOp;if(b&&Gb(a),Gf(this,"clear")){var c=this.find();c&&Cf(this,"clear",c.from,c.to)}for(var d=null,e=null,f=0;fa.display.maxLineLength&&(a.display.maxLine=i,a.display.maxLineLength=j,a.display.maxLineChanged=!0)}null!=d&&a&&this.collapsed&&Vb(a,d,e+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,a&&Na(a.doc)),a&&Cf(a,"markerCleared",a,this),b&&Ib(a),this.parent&&this.parent.clear()}},Id.prototype.find=function(a,b){null==a&&"bookmark"==this.type&&(a=1);for(var c,d,e=0;ec;++c){var e=this.lines[c];this.height-=e.height,te(e),Cf(e,"delete")}this.lines.splice(a,b)},collapse:function(a){a.push.apply(a,this.lines)},insertInner:function(a,b,c){this.height+=c,this.lines=this.lines.slice(0,a).concat(b).concat(this.lines.slice(a));for(var d=0;da;++a)if(c(this.lines[a]))return!0}},Pe.prototype={chunkSize:function(){return this.size},removeInner:function(a,b){this.size-=b;for(var c=0;ca){var f=Math.min(b,e-a),g=d.height;if(d.removeInner(a,f),this.height-=g-d.height,e==f&&(this.children.splice(c--,1),d.parent=null),0==(b-=f))break;a=0}else a-=e}if(this.size-b<25&&(this.children.length>1||!(this.children[0]instanceof Oe))){var h=[];this.collapse(h),this.children=[new Oe(h)],this.children[0].parent=this}},collapse:function(a){for(var b=0;b=a){if(e.insertInner(a,b,c),e.lines&&e.lines.length>50){for(;e.lines.length>50;){var g=e.lines.splice(e.lines.length-25,25),h=new Oe(g);e.height-=h.height,this.children.splice(d+1,0,h),h.parent=this}this.maybeSpill()}break}a-=f}},maybeSpill:function(){if(!(this.children.length<=10)){var a=this;do{var b=a.children.splice(a.children.length-5,5),c=new Pe(b);if(a.parent){a.size-=c.size,a.height-=c.height;var e=Uf(a.parent.children,a);a.parent.children.splice(e+1,0,c)}else{var d=new Pe(a.children);d.parent=a,a.children=[d,c],a=d}c.parent=a.parent}while(a.children.length>10);a.parent.maybeSpill()}},iterN:function(a,b,c){for(var d=0;da){var g=Math.min(b,f-a);if(e.iterN(a,g,c))return!0;if(0==(b-=g))break;a=0}else a-=f}}};var Qe=0,Re=w.Doc=function(a,b,c){if(!(this instanceof Re))return new Re(a,b,c);null==c&&(c=0),Pe.call(this,[new Oe([new re("",null)])]),this.first=c,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.frontier=c;var d=pa(c,0);this.sel=xa(d),this.history=new cf(null),this.id=++Qe,this.modeOption=b,"string"==typeof a&&(a=wg(a)),Ne(this,{from:d,to:d,text:a}),Ka(this,xa(d),Kf)};Re.prototype=Wf(Pe.prototype,{constructor:Re,iter:function(a,b,c){c?this.iterN(a-this.first,b-a,c):this.iterN(this.first,this.first+this.size,a)},insert:function(a,b){for(var c=0,d=0;d=0;f--)Yc(this,d[f]);h?Ja(this,h):this.cm&&id(this.cm)}),undo:Sb(function(){$c(this,"undo")}),redo:Sb(function(){$c(this,"redo")}),undoSelection:Sb(function(){$c(this,"undo",!0)}),redoSelection:Sb(function(){$c(this,"redo",!0)}),setExtending:function(a){this.extend=a},getExtending:function(){return this.extend},historySize:function(){for(var a=this.history,b=0,c=0,d=0;d=a.ch)&&b.push(e.marker.parent||e.marker)}return b},findMarks:function(a,b,c){a=za(this,a),b=za(this,b);var d=[],e=a.line;return this.iter(a.line,b.line+1,function(f){var g=f.markedSpans;if(g)for(var h=0;hi.to||null==i.from&&e!=a.line||e==b.line&&i.from>b.ch||c&&!c(i.marker)||d.push(i.marker.parent||i.marker)}++e}),d},getAllMarks:function(){var a=[];return this.iter(function(b){var c=b.markedSpans;if(c)for(var d=0;da?(b=a,!0):(a-=e,void++c)}),za(this,pa(c,b))},indexFromPos:function(a){a=za(this,a);var b=a.ch;return a.lineb&&(b=a.from),null!=a.to&&a.toh||h>=b)return g+(b-f);g+=h-f,g+=c-g%c,f=h+1}},Qf=[""],Tf=function(a){a.select()};n?Tf=function(a){a.selectionStart=0,a.selectionEnd=a.value.length}:d&&(Tf=function(a){try{a.select()}catch(b){}});var eg,Zf=/[\u00df\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,$f=w.isWordChar=function(a){return/\w/.test(a)||a>"\x80"&&(a.toUpperCase()!=a.toLowerCase()||Zf.test(a))},bg=/[\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]/;eg=document.createRange?function(a,b,c){var d=document.createRange();return d.setEnd(a,c),d.setStart(a,b),d}:function(a,b,c){var d=document.body.createTextRange();try{d.moveToElementText(a.parentNode)}catch(e){return d}return d.collapse(!0),d.moveEnd("character",c),d.moveStart("character",b),d};var hg=w.contains=function(a,b){if(a.contains)return a.contains(b);for(;b=b.parentNode;)if(11==b.nodeType&&(b=b.host),b==a)return!0};d&&11>e&&(ig=function(){try{return document.activeElement}catch(a){return document.body}});var sg,ug,kg=w.rmClass=function(a,b){var c=a.className,d=jg(b).exec(c);if(d){var e=c.slice(d.index+d[0].length);a.className=c.slice(0,d.index)+(e?d[1]+e:"")}},lg=w.addClass=function(a,b){var c=a.className;jg(b).test(c)||(a.className+=(c?" ":"")+b)},og=!1,rg=function(){if(d&&9>e)return!1;var a=dg("div");return"draggable"in a||"dragDrop"in a}(),wg=w.splitLines=3!="\n\nb".split(/\n/).length?function(a){for(var b=0,c=[],d=a.length;d>=b;){var e=a.indexOf("\n",b);-1==e&&(e=a.length);var f=a.slice(b,"\r"==a.charAt(e-1)?e-1:e),g=f.indexOf("\r");-1!=g?(c.push(f.slice(0,g)),b+=g+1):(c.push(f),b=e+1)}return c}:function(a){return a.split(/\r\n?|\n/)},xg=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return!1}}:function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){}return b&&b.parentElement()==a?0!=b.compareEndPoints("StartToEnd",b):!1},yg=function(){var a=dg("div");return"oncopy"in a?!0:(a.setAttribute("oncopy","return;"),"function"==typeof a.oncopy)}(),zg=null,Bg={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",107:"=",109:"-",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"};w.keyNames=Bg,function(){for(var a=0;10>a;a++)Bg[a+48]=Bg[a+96]=String(a);for(var a=65;90>=a;a++)Bg[a]=String.fromCharCode(a);for(var a=1;12>=a;a++)Bg[a+111]=Bg[a+63235]="F"+a}();var Lg,Qg=function(){function c(c){return 247>=c?a.charAt(c):c>=1424&&1524>=c?"R":c>=1536&&1773>=c?b.charAt(c-1536):c>=1774&&2220>=c?"r":c>=8192&&8203>=c?"w":8204==c?"b":"L"}function j(a,b,c){this.level=a,this.from=b,this.to=c}var a="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",b="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm",d=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,e=/[stwN]/,f=/[LRr]/,g=/[Lb1n]/,h=/[1n]/,i="L";return function(a){if(!d.test(a))return!1;for(var m,b=a.length,k=[],l=0;b>l;++l)k.push(m=c(a.charCodeAt(l)));for(var l=0,n=i;b>l;++l){var m=k[l];"m"==m?k[l]=n:n=m}for(var l=0,o=i;b>l;++l){var m=k[l];"1"==m&&"r"==o?k[l]="n":f.test(m)&&(o=m,"r"==m&&(k[l]="R"))}for(var l=1,n=k[0];b-1>l;++l){var m=k[l];"+"==m&&"1"==n&&"1"==k[l+1]?k[l]="1":","!=m||n!=k[l+1]||"1"!=n&&"n"!=n||(k[l]=n),n=m}for(var l=0;b>l;++l){var m=k[l];if(","==m)k[l]="N";else if("%"==m){for(var p=l+1;b>p&&"%"==k[p];++p);for(var q=l&&"!"==k[l-1]||b>p&&"1"==k[p]?"1":"N",r=l;p>r;++r)k[r]=q;l=p-1}}for(var l=0,o=i;b>l;++l){var m=k[l];"L"==o&&"1"==m?k[l]="L":f.test(m)&&(o=m)}for(var l=0;b>l;++l)if(e.test(k[l])){for(var p=l+1;b>p&&e.test(k[p]);++p);for(var s="L"==(l?k[l-1]:i),t="L"==(b>p?k[p]:i),q=s||t?"L":"R",r=l;p>r;++r)k[r]=q;l=p-1}for(var v,u=[],l=0;b>l;)if(g.test(k[l])){var w=l;for(++l;b>l&&g.test(k[l]);++l);u.push(new j(0,w,l))}else{var x=l,y=u.length;for(++l;b>l&&"L"!=k[l];++l);for(var r=x;l>r;)if(h.test(k[r])){r>x&&u.splice(y,0,new j(1,x,r));var z=r;for(++r;l>r&&h.test(k[r]);++r);u.splice(y,0,new j(2,z,r)),x=r}else++r;l>x&&u.splice(y,0,new j(1,x,l))}return 1==u[0].level&&(v=a.match(/^\s+/))&&(u[0].from=v[0].length,u.unshift(new j(0,0,v[0].length))),1==Sf(u).level&&(v=a.match(/\s+$/))&&(Sf(u).to-=v[0].length,u.push(new j(0,b-v[0].length,b))),u[0].level!=Sf(u).level&&u.push(new j(u[0].level,b,b)),u}}();return w.version="4.13.0",w}); diff --git a/web/lib/codemirror/mode/javascript/index.html b/web/lib/codemirror/mode/javascript/index.html deleted file mode 100644 index 592a133d8..000000000 --- a/web/lib/codemirror/mode/javascript/index.html +++ /dev/null @@ -1,114 +0,0 @@ - - -CodeMirror: JavaScript mode - - - - - - - - - - - - -
-

JavaScript mode

- - -
- - - -

- JavaScript mode supports several configuration options: -

    -
  • json which will set the mode to expect JSON - data rather than a JavaScript program.
  • -
  • jsonld which will set the mode to expect - JSON-LD linked data rather - than a JavaScript program (demo).
  • -
  • typescript which will activate additional - syntax highlighting and some other things for TypeScript code - (demo).
  • -
  • statementIndent which (given a number) will - determine the amount of indentation to use for statements - continued on a new line.
  • -
  • wordCharacters, a regexp that indicates which - characters should be considered part of an identifier. - Defaults to /[\w$]/, which does not handle - non-ASCII identifiers. Can be set to something more elaborate - to improve Unicode support.
  • -
-

- -

MIME types defined: text/javascript, application/json, application/ld+json, text/typescript, application/typescript.

-
diff --git a/web/lib/codemirror/mode/javascript/javascript.js b/web/lib/codemirror/mode/javascript/javascript.js deleted file mode 100644 index 3f05ac46c..000000000 --- a/web/lib/codemirror/mode/javascript/javascript.js +++ /dev/null @@ -1,692 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// TODO actually recognize syntax of TypeScript constructs - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.defineMode("javascript", function(config, parserConfig) { - var indentUnit = config.indentUnit; - var statementIndent = parserConfig.statementIndent; - var jsonldMode = parserConfig.jsonld; - var jsonMode = parserConfig.json || jsonldMode; - var isTS = parserConfig.typescript; - var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; - - // Tokenizer - - var keywords = function(){ - function kw(type) {return {type: type, style: "keyword"};} - var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); - var operator = kw("operator"), atom = {type: "atom", style: "atom"}; - - var jsKeywords = { - "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, - "return": C, "break": C, "continue": C, "new": C, "delete": C, "throw": C, "debugger": C, - "var": kw("var"), "const": kw("var"), "let": kw("var"), - "function": kw("function"), "catch": kw("catch"), - "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), - "in": operator, "typeof": operator, "instanceof": operator, - "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, - "this": kw("this"), "module": kw("module"), "class": kw("class"), "super": kw("atom"), - "yield": C, "export": kw("export"), "import": kw("import"), "extends": C - }; - - // Extend the 'normal' keywords with the TypeScript language extensions - if (isTS) { - var type = {type: "variable", style: "variable-3"}; - var tsKeywords = { - // object-like things - "interface": kw("interface"), - "extends": kw("extends"), - "constructor": kw("constructor"), - - // scope modifiers - "public": kw("public"), - "private": kw("private"), - "protected": kw("protected"), - "static": kw("static"), - - // types - "string": type, "number": type, "bool": type, "any": type - }; - - for (var attr in tsKeywords) { - jsKeywords[attr] = tsKeywords[attr]; - } - } - - return jsKeywords; - }(); - - var isOperatorChar = /[+\-*&%=<>!?|~^]/; - var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; - - function readRegexp(stream) { - var escaped = false, next, inSet = false; - while ((next = stream.next()) != null) { - if (!escaped) { - if (next == "/" && !inSet) return; - if (next == "[") inSet = true; - else if (inSet && next == "]") inSet = false; - } - escaped = !escaped && next == "\\"; - } - } - - // Used as scratch variables to communicate multiple values without - // consing up tons of objects. - var type, content; - function ret(tp, style, cont) { - type = tp; content = cont; - return style; - } - function tokenBase(stream, state) { - var ch = stream.next(); - if (ch == '"' || ch == "'") { - state.tokenize = tokenString(ch); - return state.tokenize(stream, state); - } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) { - return ret("number", "number"); - } else if (ch == "." && stream.match("..")) { - return ret("spread", "meta"); - } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { - return ret(ch); - } else if (ch == "=" && stream.eat(">")) { - return ret("=>", "operator"); - } else if (ch == "0" && stream.eat(/x/i)) { - stream.eatWhile(/[\da-f]/i); - return ret("number", "number"); - } else if (/\d/.test(ch)) { - stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); - return ret("number", "number"); - } else if (ch == "/") { - if (stream.eat("*")) { - state.tokenize = tokenComment; - return tokenComment(stream, state); - } else if (stream.eat("/")) { - stream.skipToEnd(); - return ret("comment", "comment"); - } else if (state.lastType == "operator" || state.lastType == "keyword c" || - state.lastType == "sof" || /^[\[{}\(,;:]$/.test(state.lastType)) { - readRegexp(stream); - stream.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/); - return ret("regexp", "string-2"); - } else { - stream.eatWhile(isOperatorChar); - return ret("operator", "operator", stream.current()); - } - } else if (ch == "`") { - state.tokenize = tokenQuasi; - return tokenQuasi(stream, state); - } else if (ch == "#") { - stream.skipToEnd(); - return ret("error", "error"); - } else if (isOperatorChar.test(ch)) { - stream.eatWhile(isOperatorChar); - return ret("operator", "operator", stream.current()); - } else if (wordRE.test(ch)) { - stream.eatWhile(wordRE); - var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; - return (known && state.lastType != ".") ? ret(known.type, known.style, word) : - ret("variable", "variable", word); - } - } - - function tokenString(quote) { - return function(stream, state) { - var escaped = false, next; - if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ - state.tokenize = tokenBase; - return ret("jsonld-keyword", "meta"); - } - while ((next = stream.next()) != null) { - if (next == quote && !escaped) break; - escaped = !escaped && next == "\\"; - } - if (!escaped) state.tokenize = tokenBase; - return ret("string", "string"); - }; - } - - function tokenComment(stream, state) { - var maybeEnd = false, ch; - while (ch = stream.next()) { - if (ch == "/" && maybeEnd) { - state.tokenize = tokenBase; - break; - } - maybeEnd = (ch == "*"); - } - return ret("comment", "comment"); - } - - function tokenQuasi(stream, state) { - var escaped = false, next; - while ((next = stream.next()) != null) { - if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { - state.tokenize = tokenBase; - break; - } - escaped = !escaped && next == "\\"; - } - return ret("quasi", "string-2", stream.current()); - } - - var brackets = "([{}])"; - // This is a crude lookahead trick to try and notice that we're - // parsing the argument patterns for a fat-arrow function before we - // actually hit the arrow token. It only works if the arrow is on - // the same line as the arguments and there's no strange noise - // (comments) in between. Fallback is to only notice when we hit the - // arrow, and not declare the arguments as locals for the arrow - // body. - function findFatArrow(stream, state) { - if (state.fatArrowAt) state.fatArrowAt = null; - var arrow = stream.string.indexOf("=>", stream.start); - if (arrow < 0) return; - - var depth = 0, sawSomething = false; - for (var pos = arrow - 1; pos >= 0; --pos) { - var ch = stream.string.charAt(pos); - var bracket = brackets.indexOf(ch); - if (bracket >= 0 && bracket < 3) { - if (!depth) { ++pos; break; } - if (--depth == 0) break; - } else if (bracket >= 3 && bracket < 6) { - ++depth; - } else if (wordRE.test(ch)) { - sawSomething = true; - } else if (/["'\/]/.test(ch)) { - return; - } else if (sawSomething && !depth) { - ++pos; - break; - } - } - if (sawSomething && !depth) state.fatArrowAt = pos; - } - - // Parser - - var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true}; - - function JSLexical(indented, column, type, align, prev, info) { - this.indented = indented; - this.column = column; - this.type = type; - this.prev = prev; - this.info = info; - if (align != null) this.align = align; - } - - function inScope(state, varname) { - for (var v = state.localVars; v; v = v.next) - if (v.name == varname) return true; - for (var cx = state.context; cx; cx = cx.prev) { - for (var v = cx.vars; v; v = v.next) - if (v.name == varname) return true; - } - } - - function parseJS(state, style, type, content, stream) { - var cc = state.cc; - // Communicate our context to the combinators. - // (Less wasteful than consing up a hundred closures on every call.) - cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; - - if (!state.lexical.hasOwnProperty("align")) - state.lexical.align = true; - - while(true) { - var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; - if (combinator(type, content)) { - while(cc.length && cc[cc.length - 1].lex) - cc.pop()(); - if (cx.marked) return cx.marked; - if (type == "variable" && inScope(state, content)) return "variable-2"; - return style; - } - } - } - - // Combinator utils - - var cx = {state: null, column: null, marked: null, cc: null}; - function pass() { - for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); - } - function cont() { - pass.apply(null, arguments); - return true; - } - function register(varname) { - function inList(list) { - for (var v = list; v; v = v.next) - if (v.name == varname) return true; - return false; - } - var state = cx.state; - if (state.context) { - cx.marked = "def"; - if (inList(state.localVars)) return; - state.localVars = {name: varname, next: state.localVars}; - } else { - if (inList(state.globalVars)) return; - if (parserConfig.globalVars) - state.globalVars = {name: varname, next: state.globalVars}; - } - } - - // Combinators - - var defaultVars = {name: "this", next: {name: "arguments"}}; - function pushcontext() { - cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; - cx.state.localVars = defaultVars; - } - function popcontext() { - cx.state.localVars = cx.state.context.vars; - cx.state.context = cx.state.context.prev; - } - function pushlex(type, info) { - var result = function() { - var state = cx.state, indent = state.indented; - if (state.lexical.type == "stat") indent = state.lexical.indented; - else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) - indent = outer.indented; - state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); - }; - result.lex = true; - return result; - } - function poplex() { - var state = cx.state; - if (state.lexical.prev) { - if (state.lexical.type == ")") - state.indented = state.lexical.indented; - state.lexical = state.lexical.prev; - } - } - poplex.lex = true; - - function expect(wanted) { - function exp(type) { - if (type == wanted) return cont(); - else if (wanted == ";") return pass(); - else return cont(exp); - }; - return exp; - } - - function statement(type, value) { - if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex); - if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); - if (type == "keyword b") return cont(pushlex("form"), statement, poplex); - if (type == "{") return cont(pushlex("}"), block, poplex); - if (type == ";") return cont(); - if (type == "if") { - if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) - cx.state.cc.pop()(); - return cont(pushlex("form"), expression, statement, poplex, maybeelse); - } - if (type == "function") return cont(functiondef); - if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); - if (type == "variable") return cont(pushlex("stat"), maybelabel); - if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), - block, poplex, poplex); - if (type == "case") return cont(expression, expect(":")); - if (type == "default") return cont(expect(":")); - if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), - statement, poplex, popcontext); - if (type == "module") return cont(pushlex("form"), pushcontext, afterModule, popcontext, poplex); - if (type == "class") return cont(pushlex("form"), className, poplex); - if (type == "export") return cont(pushlex("form"), afterExport, poplex); - if (type == "import") return cont(pushlex("form"), afterImport, poplex); - return pass(pushlex("stat"), expression, expect(";"), poplex); - } - function expression(type) { - return expressionInner(type, false); - } - function expressionNoComma(type) { - return expressionInner(type, true); - } - function expressionInner(type, noComma) { - if (cx.state.fatArrowAt == cx.stream.start) { - var body = noComma ? arrowBodyNoComma : arrowBody; - if (type == "(") return cont(pushcontext, pushlex(")"), commasep(pattern, ")"), poplex, expect("=>"), body, popcontext); - else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); - } - - var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; - if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); - if (type == "function") return cont(functiondef, maybeop); - if (type == "keyword c") return cont(noComma ? maybeexpressionNoComma : maybeexpression); - if (type == "(") return cont(pushlex(")"), maybeexpression, comprehension, expect(")"), poplex, maybeop); - if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); - if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); - if (type == "{") return contCommasep(objprop, "}", null, maybeop); - if (type == "quasi") { return pass(quasi, maybeop); } - return cont(); - } - function maybeexpression(type) { - if (type.match(/[;\}\)\],]/)) return pass(); - return pass(expression); - } - function maybeexpressionNoComma(type) { - if (type.match(/[;\}\)\],]/)) return pass(); - return pass(expressionNoComma); - } - - function maybeoperatorComma(type, value) { - if (type == ",") return cont(expression); - return maybeoperatorNoComma(type, value, false); - } - function maybeoperatorNoComma(type, value, noComma) { - var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; - var expr = noComma == false ? expression : expressionNoComma; - if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); - if (type == "operator") { - if (/\+\+|--/.test(value)) return cont(me); - if (value == "?") return cont(expression, expect(":"), expr); - return cont(expr); - } - if (type == "quasi") { return pass(quasi, me); } - if (type == ";") return; - if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); - if (type == ".") return cont(property, me); - if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); - } - function quasi(type, value) { - if (type != "quasi") return pass(); - if (value.slice(value.length - 2) != "${") return cont(quasi); - return cont(expression, continueQuasi); - } - function continueQuasi(type) { - if (type == "}") { - cx.marked = "string-2"; - cx.state.tokenize = tokenQuasi; - return cont(quasi); - } - } - function arrowBody(type) { - findFatArrow(cx.stream, cx.state); - return pass(type == "{" ? statement : expression); - } - function arrowBodyNoComma(type) { - findFatArrow(cx.stream, cx.state); - return pass(type == "{" ? statement : expressionNoComma); - } - function maybelabel(type) { - if (type == ":") return cont(poplex, statement); - return pass(maybeoperatorComma, expect(";"), poplex); - } - function property(type) { - if (type == "variable") {cx.marked = "property"; return cont();} - } - function objprop(type, value) { - if (type == "variable" || cx.style == "keyword") { - cx.marked = "property"; - if (value == "get" || value == "set") return cont(getterSetter); - return cont(afterprop); - } else if (type == "number" || type == "string") { - cx.marked = jsonldMode ? "property" : (cx.style + " property"); - return cont(afterprop); - } else if (type == "jsonld-keyword") { - return cont(afterprop); - } else if (type == "[") { - return cont(expression, expect("]"), afterprop); - } - } - function getterSetter(type) { - if (type != "variable") return pass(afterprop); - cx.marked = "property"; - return cont(functiondef); - } - function afterprop(type) { - if (type == ":") return cont(expressionNoComma); - if (type == "(") return pass(functiondef); - } - function commasep(what, end) { - function proceed(type) { - if (type == ",") { - var lex = cx.state.lexical; - if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; - return cont(what, proceed); - } - if (type == end) return cont(); - return cont(expect(end)); - } - return function(type) { - if (type == end) return cont(); - return pass(what, proceed); - }; - } - function contCommasep(what, end, info) { - for (var i = 3; i < arguments.length; i++) - cx.cc.push(arguments[i]); - return cont(pushlex(end, info), commasep(what, end), poplex); - } - function block(type) { - if (type == "}") return cont(); - return pass(statement, block); - } - function maybetype(type) { - if (isTS && type == ":") return cont(typedef); - } - function typedef(type) { - if (type == "variable"){cx.marked = "variable-3"; return cont();} - } - function vardef() { - return pass(pattern, maybetype, maybeAssign, vardefCont); - } - function pattern(type, value) { - if (type == "variable") { register(value); return cont(); } - if (type == "[") return contCommasep(pattern, "]"); - if (type == "{") return contCommasep(proppattern, "}"); - } - function proppattern(type, value) { - if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { - register(value); - return cont(maybeAssign); - } - if (type == "variable") cx.marked = "property"; - return cont(expect(":"), pattern, maybeAssign); - } - function maybeAssign(_type, value) { - if (value == "=") return cont(expressionNoComma); - } - function vardefCont(type) { - if (type == ",") return cont(vardef); - } - function maybeelse(type, value) { - if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); - } - function forspec(type) { - if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex); - } - function forspec1(type) { - if (type == "var") return cont(vardef, expect(";"), forspec2); - if (type == ";") return cont(forspec2); - if (type == "variable") return cont(formaybeinof); - return pass(expression, expect(";"), forspec2); - } - function formaybeinof(_type, value) { - if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } - return cont(maybeoperatorComma, forspec2); - } - function forspec2(type, value) { - if (type == ";") return cont(forspec3); - if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } - return pass(expression, expect(";"), forspec3); - } - function forspec3(type) { - if (type != ")") cont(expression); - } - function functiondef(type, value) { - if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} - if (type == "variable") {register(value); return cont(functiondef);} - if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, statement, popcontext); - } - function funarg(type) { - if (type == "spread") return cont(funarg); - return pass(pattern, maybetype); - } - function className(type, value) { - if (type == "variable") {register(value); return cont(classNameAfter);} - } - function classNameAfter(type, value) { - if (value == "extends") return cont(expression, classNameAfter); - if (type == "{") return cont(pushlex("}"), classBody, poplex); - } - function classBody(type, value) { - if (type == "variable" || cx.style == "keyword") { - cx.marked = "property"; - if (value == "get" || value == "set") return cont(classGetterSetter, functiondef, classBody); - return cont(functiondef, classBody); - } - if (value == "*") { - cx.marked = "keyword"; - return cont(classBody); - } - if (type == ";") return cont(classBody); - if (type == "}") return cont(); - } - function classGetterSetter(type) { - if (type != "variable") return pass(); - cx.marked = "property"; - return cont(); - } - function afterModule(type, value) { - if (type == "string") return cont(statement); - if (type == "variable") { register(value); return cont(maybeFrom); } - } - function afterExport(_type, value) { - if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } - if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } - return pass(statement); - } - function afterImport(type) { - if (type == "string") return cont(); - return pass(importSpec, maybeFrom); - } - function importSpec(type, value) { - if (type == "{") return contCommasep(importSpec, "}"); - if (type == "variable") register(value); - return cont(); - } - function maybeFrom(_type, value) { - if (value == "from") { cx.marked = "keyword"; return cont(expression); } - } - function arrayLiteral(type) { - if (type == "]") return cont(); - return pass(expressionNoComma, maybeArrayComprehension); - } - function maybeArrayComprehension(type) { - if (type == "for") return pass(comprehension, expect("]")); - if (type == ",") return cont(commasep(maybeexpressionNoComma, "]")); - return pass(commasep(expressionNoComma, "]")); - } - function comprehension(type) { - if (type == "for") return cont(forspec, comprehension); - if (type == "if") return cont(expression, comprehension); - } - - function isContinuedStatement(state, textAfter) { - return state.lastType == "operator" || state.lastType == "," || - isOperatorChar.test(textAfter.charAt(0)) || - /[,.]/.test(textAfter.charAt(0)); - } - - // Interface - - return { - startState: function(basecolumn) { - var state = { - tokenize: tokenBase, - lastType: "sof", - cc: [], - lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), - localVars: parserConfig.localVars, - context: parserConfig.localVars && {vars: parserConfig.localVars}, - indented: 0 - }; - if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") - state.globalVars = parserConfig.globalVars; - return state; - }, - - token: function(stream, state) { - if (stream.sol()) { - if (!state.lexical.hasOwnProperty("align")) - state.lexical.align = false; - state.indented = stream.indentation(); - findFatArrow(stream, state); - } - if (state.tokenize != tokenComment && stream.eatSpace()) return null; - var style = state.tokenize(stream, state); - if (type == "comment") return style; - state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; - return parseJS(state, style, type, content, stream); - }, - - indent: function(state, textAfter) { - if (state.tokenize == tokenComment) return CodeMirror.Pass; - if (state.tokenize != tokenBase) return 0; - var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; - // Kludge to prevent 'maybelse' from blocking lexical scope pops - if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { - var c = state.cc[i]; - if (c == poplex) lexical = lexical.prev; - else if (c != maybeelse) break; - } - if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; - if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") - lexical = lexical.prev; - var type = lexical.type, closing = firstChar == type; - - if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0); - else if (type == "form" && firstChar == "{") return lexical.indented; - else if (type == "form") return lexical.indented + indentUnit; - else if (type == "stat") - return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); - else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) - return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); - else if (lexical.align) return lexical.column + (closing ? 0 : 1); - else return lexical.indented + (closing ? 0 : indentUnit); - }, - - electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, - blockCommentStart: jsonMode ? null : "/*", - blockCommentEnd: jsonMode ? null : "*/", - lineComment: jsonMode ? null : "//", - fold: "brace", - - helperType: jsonMode ? "json" : "javascript", - jsonldMode: jsonldMode, - jsonMode: jsonMode - }; -}); - -CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); - -CodeMirror.defineMIME("text/javascript", "javascript"); -CodeMirror.defineMIME("text/ecmascript", "javascript"); -CodeMirror.defineMIME("application/javascript", "javascript"); -CodeMirror.defineMIME("application/x-javascript", "javascript"); -CodeMirror.defineMIME("application/ecmascript", "javascript"); -CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); -CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); -CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true}); -CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); -CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); - -}); diff --git a/web/lib/codemirror/mode/javascript/test.js b/web/lib/codemirror/mode/javascript/test.js deleted file mode 100644 index 91b0e89a0..000000000 --- a/web/lib/codemirror/mode/javascript/test.js +++ /dev/null @@ -1,200 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function() { - var mode = CodeMirror.getMode({indentUnit: 2}, "javascript"); - function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } - - MT("locals", - "[keyword function] [variable foo]([def a], [def b]) { [keyword var] [def c] [operator =] [number 10]; [keyword return] [variable-2 a] [operator +] [variable-2 c] [operator +] [variable d]; }"); - - MT("comma-and-binop", - "[keyword function](){ [keyword var] [def x] [operator =] [number 1] [operator +] [number 2], [def y]; }"); - - MT("destructuring", - "([keyword function]([def a], [[[def b], [def c] ]]) {", - " [keyword let] {[def d], [property foo]: [def c][operator =][number 10], [def x]} [operator =] [variable foo]([variable-2 a]);", - " [[[variable-2 c], [variable y] ]] [operator =] [variable-2 c];", - "})();"); - - MT("class_body", - "[keyword class] [variable Foo] {", - " [property constructor]() {}", - " [property sayName]() {", - " [keyword return] [string-2 `foo${][variable foo][string-2 }oo`];", - " }", - "}"); - - MT("class", - "[keyword class] [variable Point] [keyword extends] [variable SuperThing] {", - " [property get] [property prop]() { [keyword return] [number 24]; }", - " [property constructor]([def x], [def y]) {", - " [keyword super]([string 'something']);", - " [keyword this].[property x] [operator =] [variable-2 x];", - " }", - "}"); - - MT("module", - "[keyword module] [string 'foo'] {", - " [keyword export] [keyword let] [def x] [operator =] [number 42];", - " [keyword export] [keyword *] [keyword from] [string 'somewhere'];", - "}"); - - MT("import", - "[keyword function] [variable foo]() {", - " [keyword import] [def $] [keyword from] [string 'jquery'];", - " [keyword module] [def crypto] [keyword from] [string 'crypto'];", - " [keyword import] { [def encrypt], [def decrypt] } [keyword from] [string 'crypto'];", - "}"); - - MT("const", - "[keyword function] [variable f]() {", - " [keyword const] [[ [def a], [def b] ]] [operator =] [[ [number 1], [number 2] ]];", - "}"); - - MT("for/of", - "[keyword for]([keyword let] [variable of] [keyword of] [variable something]) {}"); - - MT("generator", - "[keyword function*] [variable repeat]([def n]) {", - " [keyword for]([keyword var] [def i] [operator =] [number 0]; [variable-2 i] [operator <] [variable-2 n]; [operator ++][variable-2 i])", - " [keyword yield] [variable-2 i];", - "}"); - - MT("quotedStringAddition", - "[keyword let] [variable f] [operator =] [variable a] [operator +] [string 'fatarrow'] [operator +] [variable c];"); - - MT("quotedFatArrow", - "[keyword let] [variable f] [operator =] [variable a] [operator +] [string '=>'] [operator +] [variable c];"); - - MT("fatArrow", - "[variable array].[property filter]([def a] [operator =>] [variable-2 a] [operator +] [number 1]);", - "[variable a];", // No longer in scope - "[keyword let] [variable f] [operator =] ([[ [def a], [def b] ]], [def c]) [operator =>] [variable-2 a] [operator +] [variable-2 c];", - "[variable c];"); - - MT("spread", - "[keyword function] [variable f]([def a], [meta ...][def b]) {", - " [variable something]([variable-2 a], [meta ...][variable-2 b]);", - "}"); - - MT("comprehension", - "[keyword function] [variable f]() {", - " [[([variable x] [operator +] [number 1]) [keyword for] ([keyword var] [def x] [keyword in] [variable y]) [keyword if] [variable pred]([variable-2 x]) ]];", - " ([variable u] [keyword for] ([keyword var] [def u] [keyword of] [variable generateValues]()) [keyword if] ([variable-2 u].[property color] [operator ===] [string 'blue']));", - "}"); - - MT("quasi", - "[variable re][string-2 `fofdlakj${][variable x] [operator +] ([variable re][string-2 `foo`]) [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); - - MT("quasi_no_function", - "[variable x] [operator =] [string-2 `fofdlakj${][variable x] [operator +] [string-2 `foo`] [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); - - MT("indent_statement", - "[keyword var] [variable x] [operator =] [number 10]", - "[variable x] [operator +=] [variable y] [operator +]", - " [atom Infinity]", - "[keyword debugger];"); - - MT("indent_if", - "[keyword if] ([number 1])", - " [keyword break];", - "[keyword else] [keyword if] ([number 2])", - " [keyword continue];", - "[keyword else]", - " [number 10];", - "[keyword if] ([number 1]) {", - " [keyword break];", - "} [keyword else] [keyword if] ([number 2]) {", - " [keyword continue];", - "} [keyword else] {", - " [number 10];", - "}"); - - MT("indent_for", - "[keyword for] ([keyword var] [variable i] [operator =] [number 0];", - " [variable i] [operator <] [number 100];", - " [variable i][operator ++])", - " [variable doSomething]([variable i]);", - "[keyword debugger];"); - - MT("indent_c_style", - "[keyword function] [variable foo]()", - "{", - " [keyword debugger];", - "}"); - - MT("indent_else", - "[keyword for] (;;)", - " [keyword if] ([variable foo])", - " [keyword if] ([variable bar])", - " [number 1];", - " [keyword else]", - " [number 2];", - " [keyword else]", - " [number 3];"); - - MT("indent_funarg", - "[variable foo]([number 10000],", - " [keyword function]([def a]) {", - " [keyword debugger];", - "};"); - - MT("indent_below_if", - "[keyword for] (;;)", - " [keyword if] ([variable foo])", - " [number 1];", - "[number 2];"); - - MT("multilinestring", - "[keyword var] [variable x] [operator =] [string 'foo\\]", - "[string bar'];"); - - MT("scary_regexp", - "[string-2 /foo[[/]]bar/];"); - - MT("indent_strange_array", - "[keyword var] [variable x] [operator =] [[", - " [number 1],,", - " [number 2],", - "]];", - "[number 10];"); - - var jsonld_mode = CodeMirror.getMode( - {indentUnit: 2}, - {name: "javascript", jsonld: true} - ); - function LD(name) { - test.mode(name, jsonld_mode, Array.prototype.slice.call(arguments, 1)); - } - - LD("json_ld_keywords", - '{', - ' [meta "@context"]: {', - ' [meta "@base"]: [string "http://example.com"],', - ' [meta "@vocab"]: [string "http://xmlns.com/foaf/0.1/"],', - ' [property "likesFlavor"]: {', - ' [meta "@container"]: [meta "@list"]', - ' [meta "@reverse"]: [string "@beFavoriteOf"]', - ' },', - ' [property "nick"]: { [meta "@container"]: [meta "@set"] },', - ' [property "nick"]: { [meta "@container"]: [meta "@index"] }', - ' },', - ' [meta "@graph"]: [[ {', - ' [meta "@id"]: [string "http://dbpedia.org/resource/John_Lennon"],', - ' [property "name"]: [string "John Lennon"],', - ' [property "modified"]: {', - ' [meta "@value"]: [string "2010-05-29T14:17:39+02:00"],', - ' [meta "@type"]: [string "http://www.w3.org/2001/XMLSchema#dateTime"]', - ' }', - ' } ]]', - '}'); - - LD("json_ld_fake", - '{', - ' [property "@fake"]: [string "@fake"],', - ' [property "@contextual"]: [string "@identifier"],', - ' [property "user@domain.com"]: [string "@graphical"],', - ' [property "@ID"]: [string "@@ID"]', - '}'); -})(); diff --git a/web/lib/codemirror/mode/javascript/typescript.html b/web/lib/codemirror/mode/javascript/typescript.html deleted file mode 100644 index 2cfc5381f..000000000 --- a/web/lib/codemirror/mode/javascript/typescript.html +++ /dev/null @@ -1,61 +0,0 @@ - - -CodeMirror: TypeScript mode - - - - - - - - - -
-

TypeScript mode

- - -
- - - -

This is a specialization of the JavaScript mode.

-
diff --git a/web/onload.js b/web/onload.js index d67f0c3ba..32e2610a0 100644 --- a/web/onload.js +++ b/web/onload.js @@ -10,22 +10,23 @@ $(function() { var default_text = "// This is just a sample script. Paste your real code (javascript or HTML) here.\n\nif ('this_is'==/an_example/){of_beautifier();}else{var a=b?(c%d):e[f];}"; var textArea = $('#source')[0]; + $('#source').val(default_text); if (the.use_codemirror && typeof CodeMirror !== 'undefined') { + the.editor = CodeMirror.fromTextArea(textArea, { - theme: 'default', lineNumbers: true }); + set_editor_mode(); the.editor.focus(); - the.editor.setValue(default_text); $('.CodeMirror').click(function() { if (the.editor.getValue() === default_text) { the.editor.setValue(''); } }); } else { - $('#source').val(default_text).bind('click focus', function() { + $('#source').bind('click focus', function() { if ($(this).val() === default_text) { $(this).val(''); }