erp_app 3.0.12 → 3.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/erp_app/version.rb +1 -1
- data/public/javascripts/erp_app/codemirror/doc/compress.html +27 -25
- data/public/javascripts/erp_app/codemirror/doc/manual.html +8 -1
- data/public/javascripts/erp_app/codemirror/doc/oldrelease.html +51 -0
- data/public/javascripts/erp_app/codemirror/doc/realworld.html +72 -0
- data/public/javascripts/erp_app/codemirror/keymap/vim.js +9 -10
- data/public/javascripts/erp_app/codemirror/lib/codemirror.css +1 -0
- data/public/javascripts/erp_app/codemirror/lib/codemirror.js +53 -31
- data/public/javascripts/erp_app/codemirror/lib/util/overlay.js +6 -1
- data/public/javascripts/erp_app/codemirror/lib/util/runmode.js +1 -1
- data/public/javascripts/erp_app/codemirror/lib/util/searchcursor.js +3 -3
- data/public/javascripts/erp_app/codemirror/lib/util/simple-hint.js +9 -4
- data/public/javascripts/erp_app/codemirror/mode/clike/clike.js +1 -0
- data/public/javascripts/erp_app/codemirror/mode/css/css.js +1 -1
- data/public/javascripts/erp_app/codemirror/mode/css/test.js +2 -2
- data/public/javascripts/erp_app/codemirror/mode/gfm/gfm.js +83 -139
- data/public/javascripts/erp_app/codemirror/mode/gfm/index.html +27 -4
- data/public/javascripts/erp_app/codemirror/mode/gfm/test.js +225 -0
- data/public/javascripts/erp_app/codemirror/mode/htmlembedded/htmlembedded.js +1 -0
- data/public/javascripts/erp_app/codemirror/mode/javascript/index.html +11 -4
- data/public/javascripts/erp_app/codemirror/mode/javascript/javascript.js +63 -15
- data/public/javascripts/erp_app/codemirror/mode/javascript/typescript.html +48 -0
- data/public/javascripts/erp_app/codemirror/mode/lua/lua.js +1 -1
- data/public/javascripts/erp_app/codemirror/mode/markdown/markdown.js +122 -23
- data/public/javascripts/erp_app/codemirror/mode/markdown/test.js +183 -1
- data/public/javascripts/erp_app/codemirror/package.json +1 -1
- data/public/javascripts/erp_app/codemirror/test/index.html +3 -0
- data/public/javascripts/erp_app/codemirror/test/test.js +11 -6
- metadata +15 -32
data/lib/erp_app/version.rb
CHANGED
@@ -30,30 +30,32 @@
|
|
30
30
|
<input type="hidden" id="download" name="download" value="codemirror-compressed.js"/>
|
31
31
|
<p>Version: <select id="version" onchange="setVersion(this);" style="padding: 1px">
|
32
32
|
<option value="http://codemirror.net/">HEAD</option>
|
33
|
-
<option value="http://marijnhaverbeke.nl/git/
|
34
|
-
<option value="http://marijnhaverbeke.nl/git/
|
35
|
-
<option value="http://marijnhaverbeke.nl/git/
|
36
|
-
<option value="http://marijnhaverbeke.nl/git/
|
37
|
-
<option value="http://marijnhaverbeke.nl/git/
|
38
|
-
<option value="http://marijnhaverbeke.nl/git/
|
39
|
-
<option value="http://marijnhaverbeke.nl/git/
|
40
|
-
<option value="http://marijnhaverbeke.nl/git/
|
41
|
-
<option value="http://marijnhaverbeke.nl/git/
|
42
|
-
<option value="http://marijnhaverbeke.nl/git/
|
43
|
-
<option value="http://marijnhaverbeke.nl/git/
|
44
|
-
<option value="http://marijnhaverbeke.nl/git/
|
45
|
-
<option value="http://marijnhaverbeke.nl/git/
|
46
|
-
<option value="http://marijnhaverbeke.nl/git/
|
47
|
-
<option value="http://marijnhaverbeke.nl/git/
|
48
|
-
<option value="http://marijnhaverbeke.nl/git/
|
49
|
-
<option value="http://marijnhaverbeke.nl/git/
|
50
|
-
<option value="http://marijnhaverbeke.nl/git/
|
51
|
-
<option value="http://marijnhaverbeke.nl/git/
|
52
|
-
<option value="http://marijnhaverbeke.nl/git/
|
53
|
-
<option value="http://marijnhaverbeke.nl/git/
|
54
|
-
<option value="http://marijnhaverbeke.nl/git/
|
55
|
-
<option value="http://marijnhaverbeke.nl/git/
|
56
|
-
<option value="http://marijnhaverbeke.nl/git/
|
33
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v3.0beta2;f=">3.0beta2</option>
|
34
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.35;f=">2.35</option>
|
35
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v3.0beta1;f=">3.0beta1</option>
|
36
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.34;f=">2.34</option>
|
37
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.33;f=">2.33</option>
|
38
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.32;f=">2.32</option>
|
39
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.31;f=">2.31</option>
|
40
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.3;f=">2.3</option>
|
41
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.25;f=">2.25</option>
|
42
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.24;f=">2.24</option>
|
43
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.23;f=">2.23</option>
|
44
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.22;f=">2.22</option>
|
45
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.21;f=">2.21</option>
|
46
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.2;f=">2.2</option>
|
47
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.18;f=">2.18</option>
|
48
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.16;f=">2.16</option>
|
49
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.15;f=">2.15</option>
|
50
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.13;f=">2.13</option>
|
51
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.12;f=">2.12</option>
|
52
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.11;f=">2.11</option>
|
53
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.1;f=">2.1</option>
|
54
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.02;f=">2.02</option>
|
55
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.01;f=">2.01</option>
|
56
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=v2.0;f=">2.0</option>
|
57
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=beta2;f=">beta2</option>
|
58
|
+
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=beta1;f=">beta1</option>
|
57
59
|
</select></p>
|
58
60
|
|
59
61
|
<select multiple="multiple" size="20" name="code_url" style="width: 40em;" class="field" id="files">
|
@@ -153,7 +155,7 @@
|
|
153
155
|
continue;
|
154
156
|
else if (m = opt.value.match(/^http:\/\/codemirror.net\/(.*)$/))
|
155
157
|
opt.value = urlprefix + m[1];
|
156
|
-
else if (m = opt.value.match(/http:\/\/marijnhaverbeke.nl\/git\/
|
158
|
+
else if (m = opt.value.match(/http:\/\/marijnhaverbeke.nl\/git\/codemirror\?a=blob_plain;hb=[^;]+;f=(.*)$/))
|
157
159
|
opt.value = urlprefix + m[1];
|
158
160
|
}
|
159
161
|
}
|
@@ -838,6 +838,13 @@
|
|
838
838
|
will cause the given value (usually a method) to be added to all
|
839
839
|
CodeMirror instances created from then on.</p>
|
840
840
|
|
841
|
+
<p id="defineInitHook">If your extention just needs to run some
|
842
|
+
code whenever a CodeMirror instance is initialized,
|
843
|
+
use <code>CodeMirror.defineInitHook</code>. Give it a function as
|
844
|
+
its only argument, and from then on, that function will be called
|
845
|
+
(with the instance as argument) whenever a new CodeMirror instance
|
846
|
+
is initialized.</p>
|
847
|
+
|
841
848
|
<h2 id="addons">Add-ons</h2>
|
842
849
|
|
843
850
|
<p>The <code>lib/util</code> directory in the distribution
|
@@ -1120,7 +1127,7 @@
|
|
1120
1127
|
state.</p>
|
1121
1128
|
|
1122
1129
|
<p id="indent">If you want your mode to provide smart indentation
|
1123
|
-
(
|
1130
|
+
(through the <a href="#indentLine"><code>indentLine</code></a>
|
1124
1131
|
method and the <code>indentAuto</code>
|
1125
1132
|
and <code>newlineAndIndent</code> commands, which keys can be
|
1126
1133
|
<a href="#option_extraKeys">bound</a> to), you must define
|
@@ -19,6 +19,57 @@
|
|
19
19
|
</pre>
|
20
20
|
</div>
|
21
21
|
|
22
|
+
<p class="rel">27-02-2012: <a href="http://codemirror.net/codemirror-2.22.zip">Version 2.22</a>:</p>
|
23
|
+
|
24
|
+
<ul class="rel-note">
|
25
|
+
<li>Allow <a href="manual.html#keymaps">key handlers</a> to pass up events, allow binding characters.</li>
|
26
|
+
<li>Add <a href="manual.html#option_autoClearEmptyLines"><code>autoClearEmptyLines</code></a> option.</li>
|
27
|
+
<li>Properly use tab stops when rendering tabs.</li>
|
28
|
+
<li>Make PHP mode more robust.</li>
|
29
|
+
<li>Support indentation blocks in <a href="manual.html#util_foldcode">code folder</a>.</li>
|
30
|
+
<li>Add a script for <a href="manual.html#util_match-highlighter">highlighting instances of the selection</a>.</li>
|
31
|
+
<li>New <a href="../mode/properties/index.html">.properties</a> mode.</li>
|
32
|
+
<li>Fix many bugs.</li>
|
33
|
+
</ul>
|
34
|
+
|
35
|
+
<p class="rel">27-01-2012: <a href="http://codemirror.net/codemirror-2.21.zip">Version 2.21</a>:</p>
|
36
|
+
|
37
|
+
<ul class="rel-note">
|
38
|
+
<li>Added <a href="../mode/less/index.html">LESS</a>, <a href="../mode/mysql/index.html">MySQL</a>,
|
39
|
+
<a href="../mode/go/index.html">Go</a>, and <a href="../mode/verilog/index.html">Verilog</a> modes.</li>
|
40
|
+
<li>Add <a href="manual.html#option_smartIndent"><code>smartIndent</code></a>
|
41
|
+
option.</li>
|
42
|
+
<li>Support a cursor in <a href="manual.html#option_readOnly"><code>readOnly</code></a>-mode.</li>
|
43
|
+
<li>Support assigning multiple styles to a token.</li>
|
44
|
+
<li>Use a new approach to drawing the selection.</li>
|
45
|
+
<li>Add <a href="manual.html#scrollTo"><code>scrollTo</code></a> method.</li>
|
46
|
+
<li>Allow undo/redo events to span non-adjacent lines.</li>
|
47
|
+
<li>Lots and lots of bugfixes.</li>
|
48
|
+
</ul>
|
49
|
+
|
50
|
+
<p class="rel">20-12-2011: <a href="http://codemirror.net/codemirror-2.2.zip">Version 2.2</a>:</p>
|
51
|
+
|
52
|
+
<ul class="rel-note">
|
53
|
+
<li>Slightly incompatible API changes. Read <a href="upgrade_v2.2.html">this</a>.</li>
|
54
|
+
<li>New approach
|
55
|
+
to <a href="manual.html#option_extraKeys">binding</a> keys,
|
56
|
+
support for <a href="manual.html#option_keyMap">custom
|
57
|
+
bindings</a>.</li>
|
58
|
+
<li>Support for overwrite (insert).</li>
|
59
|
+
<li><a href="manual.html#option_tabSize">Custom-width</a>
|
60
|
+
and <a href="../demo/visibletabs.html">stylable</a> tabs.</li>
|
61
|
+
<li>Moved more code into <a href="manual.html#addons">add-on scripts</a>.</li>
|
62
|
+
<li>Support for sane vertical cursor movement in wrapped lines.</li>
|
63
|
+
<li>More reliable handling of
|
64
|
+
editing <a href="manual.html#markText">marked text</a>.</li>
|
65
|
+
<li>Add minimal <a href="../demo/emacs.html">emacs</a>
|
66
|
+
and <a href="../demo/vim.html">vim</a> bindings.</li>
|
67
|
+
<li>Rename <code>coordsFromIndex</code>
|
68
|
+
to <a href="manual.html#posFromIndex"><code>posFromIndex</code></a>,
|
69
|
+
add <a href="manual.html#indexFromPos"><code>indexFromPos</code></a>
|
70
|
+
method.</li>
|
71
|
+
</ul>
|
72
|
+
|
22
73
|
<p class="rel">21-11-2011: <a href="http://codemirror.net/codemirror-2.18.zip">Version 2.18</a>:</p>
|
23
74
|
<p class="rel-note">Fixes <code>TextMarker.clear</code>, which is broken in 2.17.</p>
|
24
75
|
|
@@ -0,0 +1,72 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8"/>
|
5
|
+
<title>CodeMirror: Real-world uses</title>
|
6
|
+
<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans:bold"/>
|
7
|
+
<link rel="stylesheet" type="text/css" href="docs.css"/>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<h1><span class="logo-braces">{ }</span> <a href="http://codemirror.net/">CodeMirror</a></h1>
|
12
|
+
|
13
|
+
<div class="grey">
|
14
|
+
<img src="baboon.png" class="logo" alt="logo"/>
|
15
|
+
<pre>
|
16
|
+
/* Real world uses,
|
17
|
+
full list */
|
18
|
+
</pre>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<p><a href="mailto:marijnh@gmail.com">Contact me</a> if you'd like
|
22
|
+
your project to be added to this list.</p>
|
23
|
+
|
24
|
+
<ul>
|
25
|
+
<li><a href="http://brackets.io">Adobe Brackets</a> (code editor)</li>
|
26
|
+
<li><a href="http://bluegriffon.org/">BlueGriffon</a> (HTML editor)</li>
|
27
|
+
<li><a href="http://cargocollective.com/">Cargo Collective</a> (creative publishing platform)</li>
|
28
|
+
<li><a href="http://www.codebugapp.com/">Codebug</a> (PHP Xdebug front-end)</li>
|
29
|
+
<li><a href="http://code.google.com/p/codemirror2-gwt/">CodeMirror2-GWT</a> (Google Web Toolkit wrapper)</li>
|
30
|
+
<li><a href="http://codev.it/">Codev</a> (collaborative IDE)</li>
|
31
|
+
<li><a href="http://ot.substance.io/demo/">Collaborative CodeMirror demo</a> (CodeMirror + operational transforms)</li>
|
32
|
+
<li><a href="http://www.ckwnc.com/">CKWNC</a> (UML editor)</li>
|
33
|
+
<li><a href="http://cssdeck.com/">CSSDeck</a> (CSS showcase)</li>
|
34
|
+
<li><a href="http://ireneros.com/deck/deck.js-codemirror/introduction/#textarea-code">Deck.js integration</a> (slides with editors)</li>
|
35
|
+
<li><a href="http://www.dbninja.com">DbNinja</a> (MySQL access interface)</li>
|
36
|
+
<li><a href="http://elm-lang.org/Examples.elm">Elm language examples</a></li>
|
37
|
+
<li><a href="http://eloquentjavascript.net/chapter1.html">Eloquent JavaScript</a> (book)</li>
|
38
|
+
<li><a href="http://www.fastfig.com/">Fastfig</a> (online computation/math tool)</li>
|
39
|
+
<li><a href="http://blog.pamelafox.org/2012/02/interactive-html5-slides-with-fathomjs.html">FathomJS integration</a> (slides with editors, again)</li>
|
40
|
+
<li><a href="http://tour.golang.org">Go language tour</a></li>
|
41
|
+
<li><a href="https://github.com/github/android">GitHub's Android app</a></li>
|
42
|
+
<li><a href="https://script.google.com/">Google Apps Script</a></li>
|
43
|
+
<li><a href="http://try.haxe.org">Haxe</a> (Haxe Playground) </li>
|
44
|
+
<li><a href="http://megafonweblab.github.com/histone-javascript/">Histone template engine playground</a></li>
|
45
|
+
<li><a href="http://icecoder.net">ICEcoder</a> (web IDE)</li>
|
46
|
+
<li><a href="http://extensions.joomla.org/extensions/edition/editors/8723">Joomla plugin</a></li>
|
47
|
+
<li><a href="http://jsbin.com">jsbin.com</a> (JS playground)</li>
|
48
|
+
<li><a href="http://www.jshint.com/">JSHint</a> (JS linter)</li>
|
49
|
+
<li><a href="http://kl1p.com/cmtest/1">kl1p</a> (paste service)</li>
|
50
|
+
<li><a href="http://www.chris-granger.com/2012/04/12/light-table---a-new-ide-concept/">Light Table</a> (experimental IDE)</li>
|
51
|
+
<li><a href="http://www.mergely.com/">Mergely</a> (interactive diffing)</li>
|
52
|
+
<li><a href="https://notex.ch">NoTex</a> (rST authoring)</li>
|
53
|
+
<li><a href="https://github.com/mamacdon/orion-codemirror">Orion-CodeMirror integration</a> (running CodeMirror modes in Orion)</li>
|
54
|
+
<li><a href="http://paperjs.org/">Paper.js</a> (graphics scripting)</li>
|
55
|
+
<li><a href="http://prose.io/">Prose.io</a> (github content editor)</li>
|
56
|
+
<li><a href="http://ql.io/">ql.io</a> (http API query helper)</li>
|
57
|
+
<li><a href="http://qyapp.com">QiYun web app platform</a></li>
|
58
|
+
<li><a href="http://ariya.ofilabs.com/2011/09/hybrid-webnative-desktop-codemirror.html">Qt+Webkit integration</a> (building a desktop CodeMirror app)</li>
|
59
|
+
<li><a href="http://www.sketchpatch.net/labs/livecodelabIntro.html">sketchPatch Livecodelab</a></li>
|
60
|
+
<li><a href="http://www.skulpt.org/">Skulpt</a> (in-browser Python environment)</li.
|
61
|
+
<li><a href="http://www.solidshops.com/">SolidShops</a> (hosted e-commerce platform)</li>
|
62
|
+
<li><a href="http://sqlfiddle.com">SQLFiddle</a> (SQL playground)</li>
|
63
|
+
<li><a href="https://thefiletree.com">The File Tree</a> (collab editor)</li>
|
64
|
+
<li><a href="http://enjalot.com/tributary/2636296/sinwaves.js">Tributary</a> (augmented editing)</li>
|
65
|
+
<li><a href="http://webglplayground.net/">WebGL playground</a></li>
|
66
|
+
<li><a href="http://www.wescheme.org/">WeScheme</a> (learning tool)</li>
|
67
|
+
<li><a href="http://wordpress.org/extend/plugins/codemirror-for-codeeditor/">WordPress plugin</a></li>
|
68
|
+
<li><a href="http://media.chikuyonok.ru/codemirror2/">Zen Coding</a> (fast XML editing)</li>
|
69
|
+
</ul>
|
70
|
+
|
71
|
+
</body>
|
72
|
+
</html>
|
@@ -318,13 +318,12 @@
|
|
318
318
|
};
|
319
319
|
|
320
320
|
// standard mode switching
|
321
|
-
iterList(["d", "t", "T", "f", "F", "c", "r"],
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
});
|
321
|
+
iterList(["d", "t", "T", "f", "F", "c", "r"], function (ch) {
|
322
|
+
CodeMirror.keyMap.vim[toCombo(ch)] = function (cm) {
|
323
|
+
cm.setOption("keyMap", "vim-prefix-" + ch);
|
324
|
+
emptyBuffer();
|
325
|
+
};
|
326
|
+
});
|
328
327
|
|
329
328
|
function addCountBindings(keyMap) {
|
330
329
|
// Add bindings for number keys
|
@@ -645,7 +644,7 @@
|
|
645
644
|
};
|
646
645
|
|
647
646
|
// Map our movement actions each operator and non-operational movement
|
648
|
-
motionList
|
647
|
+
iterList(motionList, function(key, index, array) {
|
649
648
|
CodeMirror.keyMap['vim-prefix-d'][key] = function(cm) {
|
650
649
|
// Get our selected range
|
651
650
|
var start = cm.getCursor();
|
@@ -695,7 +694,7 @@
|
|
695
694
|
});
|
696
695
|
|
697
696
|
var nums = [1,2,3,4,5,6,7,8,9];
|
698
|
-
nums
|
697
|
+
iterList(nums, function(key, index, array) {
|
699
698
|
CodeMirror.keyMap['vim'][key] = function (cm) {
|
700
699
|
reptTimes = (reptTimes * 10) + key;
|
701
700
|
};
|
@@ -713,7 +712,7 @@
|
|
713
712
|
// Create our keymaps for each operator and make xa and xi where x is an operator
|
714
713
|
// change to the corrosponding keymap
|
715
714
|
var operators = ['d', 'y', 'c'];
|
716
|
-
operators
|
715
|
+
iterList(operators, function(key, index, array) {
|
717
716
|
CodeMirror.keyMap['vim-prefix-'+key+'a'] = {
|
718
717
|
auto: 'vim', nofallthrough: true, style: "fat-cursor"
|
719
718
|
};
|
@@ -1,5 +1,5 @@
|
|
1
|
-
// CodeMirror version 2.
|
2
|
-
|
1
|
+
// CodeMirror version 2.35
|
2
|
+
//
|
3
3
|
// All functions that need access to the editor's state live inside
|
4
4
|
// the CodeMirror function. Below that, at the bottom of the file,
|
5
5
|
// some utilities are defined.
|
@@ -77,7 +77,7 @@ window.CodeMirror = (function() {
|
|
77
77
|
// Selection-related flags. shiftSelecting obviously tracks
|
78
78
|
// whether the user is holding shift.
|
79
79
|
var shiftSelecting, lastClick, lastDoubleClick, lastScrollTop = 0, draggingText,
|
80
|
-
overwrite = false, suppressEdits = false;
|
80
|
+
overwrite = false, suppressEdits = false, pasteIncoming = false;
|
81
81
|
// Variables used by startOperation/endOperation to track what
|
82
82
|
// happened during the operation.
|
83
83
|
var updateInput, userSelChange, changes, textChanged, selectionChanged,
|
@@ -130,7 +130,7 @@ window.CodeMirror = (function() {
|
|
130
130
|
connect(scroller, "drop", operation(onDrop));
|
131
131
|
}
|
132
132
|
connect(scroller, "paste", function(){focusInput(); fastPoll();});
|
133
|
-
connect(input, "paste", fastPoll);
|
133
|
+
connect(input, "paste", function(){pasteIncoming = true; fastPoll();});
|
134
134
|
connect(input, "cut", operation(function(){
|
135
135
|
if (!options.readOnly) replaceSelection("");
|
136
136
|
}));
|
@@ -169,6 +169,7 @@ window.CodeMirror = (function() {
|
|
169
169
|
else if (option == "lineWrapping" && oldVal != value) operation(wrappingChanged)();
|
170
170
|
else if (option == "tabSize") updateDisplay(true);
|
171
171
|
else if (option == "keyMap") keyMapChanged();
|
172
|
+
else if (option == "tabindex") input.tabIndex = value;
|
172
173
|
if (option == "lineNumbers" || option == "gutter" || option == "firstLineNumber" ||
|
173
174
|
option == "theme" || option == "lineNumberFormatter") {
|
174
175
|
gutterChanged();
|
@@ -956,12 +957,13 @@ window.CodeMirror = (function() {
|
|
956
957
|
while (same < l && prevInput[same] == text[same]) ++same;
|
957
958
|
if (same < prevInput.length)
|
958
959
|
sel.from = {line: sel.from.line, ch: sel.from.ch - (prevInput.length - same)};
|
959
|
-
else if (overwrite && posEq(sel.from, sel.to))
|
960
|
+
else if (overwrite && posEq(sel.from, sel.to) && !pasteIncoming)
|
960
961
|
sel.to = {line: sel.to.line, ch: Math.min(getLine(sel.to.line).text.length, sel.to.ch + (text.length - same))};
|
961
962
|
replaceSelection(text.slice(same), "end");
|
962
963
|
if (text.length > 1000) { input.value = prevInput = ""; }
|
963
964
|
else prevInput = text;
|
964
965
|
if (!nestedOperation) endOperation();
|
966
|
+
pasteIncoming = false;
|
965
967
|
return true;
|
966
968
|
}
|
967
969
|
function resetInput(user) {
|
@@ -1418,7 +1420,7 @@ window.CodeMirror = (function() {
|
|
1418
1420
|
var startChar = line.charAt(start);
|
1419
1421
|
var check = isWordChar(startChar) ? isWordChar :
|
1420
1422
|
/\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} :
|
1421
|
-
function(ch) {return !/\s/.test(ch) &&
|
1423
|
+
function(ch) {return !/\s/.test(ch) && isWordChar(ch);};
|
1422
1424
|
while (start > 0 && check(line.charAt(start - 1))) --start;
|
1423
1425
|
while (end < line.length && check(line.charAt(end))) ++end;
|
1424
1426
|
}
|
@@ -1462,6 +1464,7 @@ window.CodeMirror = (function() {
|
|
1462
1464
|
|
1463
1465
|
if (indentString != curSpaceString)
|
1464
1466
|
replaceRange(indentString, {line: n, ch: 0}, {line: n, ch: curSpaceString.length});
|
1467
|
+
line.stateAfter = null;
|
1465
1468
|
}
|
1466
1469
|
|
1467
1470
|
function loadMode() {
|
@@ -1507,18 +1510,17 @@ window.CodeMirror = (function() {
|
|
1507
1510
|
|
1508
1511
|
function TextMarker(type, style) { this.lines = []; this.type = type; if (style) this.style = style; }
|
1509
1512
|
TextMarker.prototype.clear = operation(function() {
|
1510
|
-
var min
|
1513
|
+
var min, max;
|
1511
1514
|
for (var i = 0; i < this.lines.length; ++i) {
|
1512
1515
|
var line = this.lines[i];
|
1513
|
-
var span = getMarkedSpanFor(line.markedSpans, this
|
1514
|
-
if (span.from != null
|
1515
|
-
|
1516
|
-
|
1517
|
-
}
|
1516
|
+
var span = getMarkedSpanFor(line.markedSpans, this);
|
1517
|
+
if (span.from != null) min = lineNo(line);
|
1518
|
+
if (span.to != null) max = lineNo(line);
|
1519
|
+
line.markedSpans = removeMarkedSpan(line.markedSpans, span);
|
1518
1520
|
}
|
1519
|
-
if (min !=
|
1520
|
-
changes.push({from: min, to: max + 1});
|
1521
|
+
if (min != null) changes.push({from: min, to: max + 1});
|
1521
1522
|
this.lines.length = 0;
|
1523
|
+
this.explicitlyCleared = true;
|
1522
1524
|
});
|
1523
1525
|
TextMarker.prototype.find = function() {
|
1524
1526
|
var from, to;
|
@@ -1545,7 +1547,7 @@ window.CodeMirror = (function() {
|
|
1545
1547
|
var span = {from: curLine == from.line ? from.ch : null,
|
1546
1548
|
to: curLine == to.line ? to.ch : null,
|
1547
1549
|
marker: marker};
|
1548
|
-
|
1550
|
+
line.markedSpans = (line.markedSpans || []).concat([span]);
|
1549
1551
|
marker.lines.push(line);
|
1550
1552
|
++curLine;
|
1551
1553
|
});
|
@@ -1556,8 +1558,9 @@ window.CodeMirror = (function() {
|
|
1556
1558
|
function setBookmark(pos) {
|
1557
1559
|
pos = clipPos(pos);
|
1558
1560
|
var marker = new TextMarker("bookmark"), line = getLine(pos.line);
|
1561
|
+
history.addChange(pos.line, 1, [newHL(line.text, line.markedSpans)], true);
|
1559
1562
|
var span = {from: pos.ch, to: pos.ch, marker: marker};
|
1560
|
-
|
1563
|
+
line.markedSpans = (line.markedSpans || []).concat([span]);
|
1561
1564
|
marker.lines.push(line);
|
1562
1565
|
return marker;
|
1563
1566
|
}
|
@@ -1646,8 +1649,6 @@ window.CodeMirror = (function() {
|
|
1646
1649
|
|
1647
1650
|
function measureLine(line, ch) {
|
1648
1651
|
if (ch == 0) return {top: 0, left: 0};
|
1649
|
-
var wbr = options.lineWrapping && ch < line.text.length &&
|
1650
|
-
spanAffectsWrapping.test(line.text.slice(ch - 1, ch + 1));
|
1651
1652
|
var pre = lineContent(line, ch);
|
1652
1653
|
removeChildrenAndAdd(measure, pre);
|
1653
1654
|
var anchor = pre.anchor;
|
@@ -1980,6 +1981,7 @@ window.CodeMirror = (function() {
|
|
1980
1981
|
if (extensions.propertyIsEnumerable(ext) &&
|
1981
1982
|
!instance.propertyIsEnumerable(ext))
|
1982
1983
|
instance[ext] = extensions[ext];
|
1984
|
+
for (var i = 0; i < initHooks.length; ++i) initHooks[i](instance);
|
1983
1985
|
return instance;
|
1984
1986
|
} // (end of function CodeMirror)
|
1985
1987
|
|
@@ -2077,6 +2079,9 @@ window.CodeMirror = (function() {
|
|
2077
2079
|
extensions[name] = func;
|
2078
2080
|
};
|
2079
2081
|
|
2082
|
+
var initHooks = [];
|
2083
|
+
CodeMirror.defineInitHook = function(f) {initHooks.push(f);};
|
2084
|
+
|
2080
2085
|
var modeExtensions = CodeMirror.modeExtensions = {};
|
2081
2086
|
CodeMirror.extendMode = function(mode, properties) {
|
2082
2087
|
var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
|
@@ -2206,6 +2211,7 @@ window.CodeMirror = (function() {
|
|
2206
2211
|
var name = keyNames[e_prop(event, "keyCode")];
|
2207
2212
|
return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod";
|
2208
2213
|
}
|
2214
|
+
CodeMirror.isModifierKey = isModifierKey;
|
2209
2215
|
|
2210
2216
|
CodeMirror.fromTextArea = function(textarea, options) {
|
2211
2217
|
if (!options) options = {};
|
@@ -2355,16 +2361,20 @@ window.CodeMirror = (function() {
|
|
2355
2361
|
this.from = from; this.to = to; this.marker = marker;
|
2356
2362
|
}
|
2357
2363
|
|
2358
|
-
function getMarkedSpanFor(spans, marker
|
2364
|
+
function getMarkedSpanFor(spans, marker) {
|
2359
2365
|
if (spans) for (var i = 0; i < spans.length; ++i) {
|
2360
2366
|
var span = spans[i];
|
2361
|
-
if (span.marker == marker)
|
2362
|
-
if (del) spans.splice(i, 1);
|
2363
|
-
return span;
|
2364
|
-
}
|
2367
|
+
if (span.marker == marker) return span;
|
2365
2368
|
}
|
2366
2369
|
}
|
2367
2370
|
|
2371
|
+
function removeMarkedSpan(spans, span) {
|
2372
|
+
var r;
|
2373
|
+
for (var i = 0; i < spans.length; ++i)
|
2374
|
+
if (spans[i] != span) (r || (r = [])).push(spans[i]);
|
2375
|
+
return r;
|
2376
|
+
}
|
2377
|
+
|
2368
2378
|
function markedSpansBefore(old, startCh, endCh) {
|
2369
2379
|
if (old) for (var i = 0, nw; i < old.length; ++i) {
|
2370
2380
|
var span = old[i], marker = span.marker;
|
@@ -2448,7 +2458,15 @@ window.CodeMirror = (function() {
|
|
2448
2458
|
// hl stands for history-line, a data structure that can be either a
|
2449
2459
|
// string (line without markers) or a {text, markedSpans} object.
|
2450
2460
|
function hlText(val) { return typeof val == "string" ? val : val.text; }
|
2451
|
-
function hlSpans(val) {
|
2461
|
+
function hlSpans(val) {
|
2462
|
+
if (typeof val == "string") return null;
|
2463
|
+
var spans = val.markedSpans, out = null;
|
2464
|
+
for (var i = 0; i < spans.length; ++i) {
|
2465
|
+
if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); }
|
2466
|
+
else if (out) out.push(spans[i]);
|
2467
|
+
}
|
2468
|
+
return !out ? spans : out.length ? out : null;
|
2469
|
+
}
|
2452
2470
|
function newHL(text, spans) { return spans ? {text: text, markedSpans: spans} : text; }
|
2453
2471
|
|
2454
2472
|
function detachMarkedSpans(line) {
|
@@ -2584,13 +2602,17 @@ window.CodeMirror = (function() {
|
|
2584
2602
|
span = function(html, text, style) {
|
2585
2603
|
var l = text.length;
|
2586
2604
|
if (wrapAt >= outPos && wrapAt < outPos + l) {
|
2587
|
-
|
2588
|
-
|
2605
|
+
var cut = wrapAt - outPos;
|
2606
|
+
if (cut) {
|
2607
|
+
span_(html, text.slice(0, cut), style);
|
2589
2608
|
// See comment at the definition of spanAffectsWrapping
|
2590
|
-
if (compensateForWrapping)
|
2609
|
+
if (compensateForWrapping) {
|
2610
|
+
var view = text.slice(cut - 1, cut + 1);
|
2611
|
+
if (spanAffectsWrapping.test(view)) html.appendChild(elt("wbr"));
|
2612
|
+
else if (!ie_lt8 && /\w\w/.test(view)) html.appendChild(document.createTextNode("\u200d"));
|
2613
|
+
}
|
2591
2614
|
}
|
2592
2615
|
html.appendChild(anchor);
|
2593
|
-
var cut = wrapAt - outPos;
|
2594
2616
|
span_(anchor, opera ? text.slice(cut, cut + 1) : text.slice(cut), style);
|
2595
2617
|
if (opera) span_(html, text.slice(cut + 1), style);
|
2596
2618
|
wrapAt--;
|
@@ -2874,7 +2896,7 @@ window.CodeMirror = (function() {
|
|
2874
2896
|
var time = +new Date, cur = lst(this.done), last = cur && lst(cur);
|
2875
2897
|
var dtime = time - this.time;
|
2876
2898
|
|
2877
|
-
if (
|
2899
|
+
if (cur && !this.closed && this.compound) {
|
2878
2900
|
cur.push({start: start, added: added, old: old});
|
2879
2901
|
} else if (dtime > 400 || !last || this.closed ||
|
2880
2902
|
last.start > start + old.length || last.start + last.added < start) {
|
@@ -3081,7 +3103,7 @@ window.CodeMirror = (function() {
|
|
3081
3103
|
return -1;
|
3082
3104
|
}
|
3083
3105
|
function isWordChar(ch) {
|
3084
|
-
return /\w/.test(ch) || ch.toUpperCase() != ch.toLowerCase();
|
3106
|
+
return /\w/.test(ch) || ch.toUpperCase() != ch.toLowerCase() || /[\u4E00-\u9FA5]/.test(ch);
|
3085
3107
|
}
|
3086
3108
|
|
3087
3109
|
// See if "".split is the broken IE version, if so, provide an
|
@@ -3137,7 +3159,7 @@ window.CodeMirror = (function() {
|
|
3137
3159
|
for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i;
|
3138
3160
|
})();
|
3139
3161
|
|
3140
|
-
CodeMirror.version = "2.
|
3162
|
+
CodeMirror.version = "2.35";
|
3141
3163
|
|
3142
3164
|
return CodeMirror;
|
3143
3165
|
})();
|
@@ -49,6 +49,11 @@ CodeMirror.overlayMode = CodeMirror.overlayParser = function(base, overlay, comb
|
|
49
49
|
},
|
50
50
|
electricChars: base.electricChars,
|
51
51
|
|
52
|
-
innerMode: function(state) { return {state: state.base, mode: base}; }
|
52
|
+
innerMode: function(state) { return {state: state.base, mode: base}; },
|
53
|
+
|
54
|
+
blankLine: function(state) {
|
55
|
+
if (base.blankLine) base.blankLine(state.base);
|
56
|
+
if (overlay.blankLine) overlay.blankLine(state.overlay);
|
57
|
+
}
|
53
58
|
};
|
54
59
|
};
|
@@ -1,6 +1,6 @@
|
|
1
1
|
CodeMirror.runMode = function(string, modespec, callback, options) {
|
2
2
|
function esc(str) {
|
3
|
-
return str.replace(/[<&]
|
3
|
+
return str.replace(/[<&]/g, function(ch) { return ch == "<" ? "<" : "&"; });
|
4
4
|
}
|
5
5
|
|
6
6
|
var mode = CodeMirror.getMode(CodeMirror.defaults, modespec);
|
@@ -17,14 +17,14 @@
|
|
17
17
|
query.lastIndex = 0;
|
18
18
|
var line = cm.getLine(pos.line).slice(0, pos.ch), match = query.exec(line), start = 0;
|
19
19
|
while (match) {
|
20
|
-
start += match.index;
|
21
|
-
|
20
|
+
start += match.index + 1;
|
21
|
+
line = line.slice(start);
|
22
22
|
query.lastIndex = 0;
|
23
23
|
var newmatch = query.exec(line);
|
24
24
|
if (newmatch) match = newmatch;
|
25
25
|
else break;
|
26
|
-
start++;
|
27
26
|
}
|
27
|
+
start--;
|
28
28
|
} else {
|
29
29
|
query.lastIndex = pos.ch;
|
30
30
|
var line = cm.getLine(pos.line), match = query.exec(line),
|
@@ -25,7 +25,10 @@
|
|
25
25
|
editor.replaceRange(str, result.from, result.to);
|
26
26
|
}
|
27
27
|
// When there is only one completion, use it directly.
|
28
|
-
if (completions.length == 1) {
|
28
|
+
if (options.completeSingle && completions.length == 1) {
|
29
|
+
insert(completions[0]);
|
30
|
+
return true;
|
31
|
+
}
|
29
32
|
|
30
33
|
// Build the select widget
|
31
34
|
var complete = document.createElement("div");
|
@@ -41,7 +44,7 @@
|
|
41
44
|
}
|
42
45
|
sel.firstChild.selected = true;
|
43
46
|
sel.size = Math.min(10, completions.length);
|
44
|
-
var pos = editor.cursorCoords();
|
47
|
+
var pos = options.alignWithWord ? editor.charCoords(result.from) : editor.cursorCoords();
|
45
48
|
complete.style.left = pos.x + "px";
|
46
49
|
complete.style.top = pos.yBot + "px";
|
47
50
|
document.body.appendChild(complete);
|
@@ -71,7 +74,7 @@
|
|
71
74
|
if (code == 13) {CodeMirror.e_stop(event); pick();}
|
72
75
|
// Escape
|
73
76
|
else if (code == 27) {CodeMirror.e_stop(event); close(); editor.focus();}
|
74
|
-
else if (code != 38 && code != 40 && code != 33 && code != 34) {
|
77
|
+
else if (code != 38 && code != 40 && code != 33 && code != 34 && !CodeMirror.isModifierKey(event)) {
|
75
78
|
close(); editor.focus();
|
76
79
|
// Pass the event to the CodeMirror instance so that it can handle things like backspace properly.
|
77
80
|
editor.triggerOnKeyDown(event);
|
@@ -92,6 +95,8 @@
|
|
92
95
|
};
|
93
96
|
CodeMirror.simpleHint.defaults = {
|
94
97
|
closeOnBackspace: true,
|
95
|
-
closeOnTokenChange: false
|
98
|
+
closeOnTokenChange: false,
|
99
|
+
completeSingle: true,
|
100
|
+
alignWithWord: true
|
96
101
|
};
|
97
102
|
})();
|
@@ -140,6 +140,7 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
|
|
140
140
|
},
|
141
141
|
|
142
142
|
indent: function(state, textAfter) {
|
143
|
+
if (state.tokenize == tokenComment) return CodeMirror.Pass;
|
143
144
|
if (state.tokenize != tokenBase && state.tokenize != null) return 0;
|
144
145
|
var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);
|
145
146
|
if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev;
|
@@ -228,7 +228,7 @@ CodeMirror.defineMode("css", function(config) {
|
|
228
228
|
else if (/[,+>*\/]/.test(ch)) {
|
229
229
|
return ret(null, "select-op");
|
230
230
|
}
|
231
|
-
else if (ch == "." && stream.match(
|
231
|
+
else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {
|
232
232
|
return ret("qualifier", type);
|
233
233
|
}
|
234
234
|
else if (ch == ":") {
|