codemirror-rails 3.14 → 3.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/codemirror/rails/version.rb +2 -2
- data/vendor/assets/javascripts/codemirror.js +178 -94
- data/vendor/assets/javascripts/codemirror/addons/comment/comment.js +3 -3
- data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +3 -1
- data/vendor/assets/javascripts/codemirror/addons/edit/matchtags.js +51 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/brace-fold.js +9 -6
- data/vendor/assets/javascripts/codemirror/addons/fold/foldcode.js +9 -4
- data/vendor/assets/javascripts/codemirror/addons/fold/foldgutter.js +122 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/indent-fold.js +3 -2
- data/vendor/assets/javascripts/codemirror/addons/fold/xml-fold.js +24 -17
- data/vendor/assets/javascripts/codemirror/addons/hint/anyword-hint.js +34 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/html-hint.js +5 -3
- data/vendor/assets/javascripts/codemirror/addons/hint/javascript-hint.js +7 -3
- data/vendor/assets/javascripts/codemirror/addons/hint/pig-hint.js +4 -2
- data/vendor/assets/javascripts/codemirror/addons/hint/python-hint.js +4 -2
- data/vendor/assets/javascripts/codemirror/addons/hint/show-hint.js +6 -2
- data/vendor/assets/javascripts/codemirror/addons/hint/xml-hint.js +5 -2
- data/vendor/assets/javascripts/codemirror/addons/lint/coffeescript-lint.js +3 -2
- data/vendor/assets/javascripts/codemirror/addons/lint/javascript-lint.js +3 -6
- data/vendor/assets/javascripts/codemirror/addons/lint/json-lint.js +3 -2
- data/vendor/assets/javascripts/codemirror/addons/lint/lint.js +12 -6
- data/vendor/assets/javascripts/codemirror/addons/merge/dep/diff_match_patch.js +50 -0
- data/vendor/assets/javascripts/codemirror/addons/merge/merge.js +40 -24
- data/vendor/assets/javascripts/codemirror/addons/runmode/runmode-standalone.js +3 -1
- data/vendor/assets/javascripts/codemirror/addons/runmode/runmode.node.js +3 -1
- data/vendor/assets/javascripts/codemirror/addons/search/match-highlighter.js +11 -9
- data/vendor/assets/javascripts/codemirror/addons/selection/active-line.js +1 -1
- data/vendor/assets/javascripts/codemirror/addons/tern/tern.js +608 -0
- data/vendor/assets/javascripts/codemirror/addons/tern/worker.js +39 -0
- data/vendor/assets/javascripts/codemirror/keymaps/vim.js +120 -101
- data/vendor/assets/javascripts/codemirror/modes/clike.js +2 -1
- data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +2 -1
- data/vendor/assets/javascripts/codemirror/modes/css.js +33 -16
- data/vendor/assets/javascripts/codemirror/modes/groovy.js +2 -1
- data/vendor/assets/javascripts/codemirror/modes/jade.js +90 -0
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +21 -18
- data/vendor/assets/javascripts/codemirror/modes/markdown.js +26 -1
- data/vendor/assets/javascripts/codemirror/modes/nginx.js +163 -0
- data/vendor/assets/javascripts/codemirror/modes/python.js +19 -2
- data/vendor/assets/javascripts/codemirror/modes/rst.js +30 -19
- data/vendor/assets/javascripts/codemirror/modes/ruby.js +4 -4
- data/vendor/assets/javascripts/codemirror/modes/rust.js +2 -1
- data/vendor/assets/javascripts/codemirror/modes/scss_test.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/smalltalk.js +12 -2
- data/vendor/assets/javascripts/codemirror/modes/smartymixed.js +170 -0
- data/vendor/assets/javascripts/codemirror/modes/sparql.js +4 -2
- data/vendor/assets/javascripts/codemirror/modes/vbscript.js +330 -22
- data/vendor/assets/javascripts/codemirror/modes/xml.js +18 -3
- data/vendor/assets/stylesheets/codemirror.css +10 -0
- data/vendor/assets/stylesheets/codemirror/addons/merge/merge.css +39 -29
- data/vendor/assets/stylesheets/codemirror/addons/tern/tern.css +85 -0
- data/vendor/assets/stylesheets/codemirror/themes/3024-day.css +33 -0
- data/vendor/assets/stylesheets/codemirror/themes/3024-night.css +33 -0
- data/vendor/assets/stylesheets/codemirror/themes/base16-dark.css +33 -0
- data/vendor/assets/stylesheets/codemirror/themes/base16-light.css +33 -0
- data/vendor/assets/stylesheets/codemirror/themes/lesser-dark.css +1 -1
- data/vendor/assets/stylesheets/codemirror/themes/midnight.css +5 -14
- data/vendor/assets/stylesheets/codemirror/themes/tomorrow-night-eighties.css +33 -0
- data/vendor/assets/stylesheets/codemirror/themes/vibrant-ink.css +2 -2
- metadata +17 -2
@@ -327,9 +327,11 @@
|
|
327
327
|
populate(data[tag]);
|
328
328
|
|
329
329
|
CodeMirror.htmlSchema = data;
|
330
|
-
|
330
|
+
function htmlHint(cm, options) {
|
331
331
|
var local = {schemaInfo: data};
|
332
332
|
if (options) for (var opt in options) local[opt] = options[opt];
|
333
|
-
return CodeMirror.
|
334
|
-
}
|
333
|
+
return CodeMirror.hint.xml(cm, local);
|
334
|
+
}
|
335
|
+
CodeMirror.htmlHint = htmlHint; // deprecated
|
336
|
+
CodeMirror.registerHelper("hint", "html", htmlHint);
|
335
337
|
})();
|
@@ -56,11 +56,13 @@
|
|
56
56
|
to: Pos(cur.line, token.end)};
|
57
57
|
}
|
58
58
|
|
59
|
-
|
59
|
+
function javascriptHint(editor, options) {
|
60
60
|
return scriptHint(editor, javascriptKeywords,
|
61
61
|
function (e, cur) {return e.getTokenAt(cur);},
|
62
62
|
options);
|
63
63
|
};
|
64
|
+
CodeMirror.javascriptHint = javascriptHint; // deprecated
|
65
|
+
CodeMirror.registerHelper("hint", "javascript", javascriptHint);
|
64
66
|
|
65
67
|
function getCoffeeScriptToken(editor, cur) {
|
66
68
|
// This getToken, it is for coffeescript, imitates the behavior of
|
@@ -80,9 +82,11 @@
|
|
80
82
|
return token;
|
81
83
|
}
|
82
84
|
|
83
|
-
|
85
|
+
function coffeescriptHint(editor, options) {
|
84
86
|
return scriptHint(editor, coffeescriptKeywords, getCoffeeScriptToken, options);
|
85
|
-
}
|
87
|
+
}
|
88
|
+
CodeMirror.coffeescriptHint = coffeescriptHint; // deprecated
|
89
|
+
CodeMirror.registerHelper("hint", "coffeescript", coffeescriptHint);
|
86
90
|
|
87
91
|
var stringProps = ("charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight " +
|
88
92
|
"toUpperCase toLowerCase split concat match replace search").split(" ");
|
@@ -41,9 +41,11 @@
|
|
41
41
|
to: CodeMirror.Pos(cur.line, token.end)};
|
42
42
|
}
|
43
43
|
|
44
|
-
|
44
|
+
function pigHint(editor) {
|
45
45
|
return scriptHint(editor, pigKeywordsU, function (e, cur) {return e.getTokenAt(cur);});
|
46
|
-
}
|
46
|
+
}
|
47
|
+
CodeMirror.pigHint = pigHint; // deprecated
|
48
|
+
CodeMirror.registerHelper("hint", "pig", hinter);
|
47
49
|
|
48
50
|
var pigKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP "
|
49
51
|
+ "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL "
|
@@ -41,9 +41,11 @@
|
|
41
41
|
to: CodeMirror.Pos(cur.line, token.end)};
|
42
42
|
}
|
43
43
|
|
44
|
-
|
44
|
+
function pythonHint(editor) {
|
45
45
|
return scriptHint(editor, pythonKeywordsU, function (e, cur) {return e.getTokenAt(cur);});
|
46
|
-
}
|
46
|
+
}
|
47
|
+
CodeMirror.pythonHint = pythonHint; // deprecated
|
48
|
+
CodeMirror.registerHelper("hint", "python", pythonHint);
|
47
49
|
|
48
50
|
var pythonKeywords = "and del from not while as elif global or with assert else if pass yield"
|
49
51
|
+ "break except import print class exec in raise continue finally is return def for lambda try";
|
@@ -4,6 +4,8 @@
|
|
4
4
|
CodeMirror.showHint = function(cm, getHints, options) {
|
5
5
|
// We want a single cursor position.
|
6
6
|
if (cm.somethingSelected()) return;
|
7
|
+
if (getHints == null) getHints = cm.getHelper(cm.getCursor(), "hint");
|
8
|
+
if (getHints == null) return;
|
7
9
|
|
8
10
|
if (cm.state.completionActive) cm.state.completionActive.close();
|
9
11
|
|
@@ -25,10 +27,10 @@
|
|
25
27
|
Completion.prototype = {
|
26
28
|
close: function() {
|
27
29
|
if (!this.active()) return;
|
30
|
+
this.cm.state.completionActive = null;
|
28
31
|
|
29
32
|
if (this.widget) this.widget.close();
|
30
33
|
if (this.onClose) this.onClose();
|
31
|
-
this.cm.state.completionActive = null;
|
32
34
|
CodeMirror.signal(this.cm, "endCompletion", this.cm);
|
33
35
|
},
|
34
36
|
|
@@ -74,12 +76,14 @@
|
|
74
76
|
|
75
77
|
function update() {
|
76
78
|
if (isDone()) return;
|
79
|
+
CodeMirror.signal(data, "update");
|
77
80
|
if (completion.options.async)
|
78
81
|
completion.getHints(completion.cm, finishUpdate, completion.options);
|
79
82
|
else
|
80
83
|
finishUpdate(completion.getHints(completion.cm, completion.options));
|
81
84
|
}
|
82
|
-
function finishUpdate(
|
85
|
+
function finishUpdate(data_) {
|
86
|
+
data = data_;
|
83
87
|
if (isDone()) return;
|
84
88
|
if (!data || !data.list.length) return done();
|
85
89
|
completion.widget.close();
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
var Pos = CodeMirror.Pos;
|
5
5
|
|
6
|
-
|
6
|
+
function getHints(cm, options) {
|
7
7
|
var tags = options && options.schemaInfo;
|
8
8
|
var quote = (options && options.quoteChar) || '"';
|
9
9
|
if (!tags) return;
|
@@ -61,5 +61,8 @@
|
|
61
61
|
from: replaceToken ? Pos(cur.line, token.start) : cur,
|
62
62
|
to: replaceToken ? Pos(cur.line, token.end) : cur
|
63
63
|
};
|
64
|
-
}
|
64
|
+
}
|
65
|
+
|
66
|
+
CodeMirror.xmlHint = getHints; // deprecated
|
67
|
+
CodeMirror.registerHelper("hint", "xml", getHints);
|
65
68
|
})();
|
@@ -1,6 +1,6 @@
|
|
1
1
|
// Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js
|
2
2
|
|
3
|
-
CodeMirror.
|
3
|
+
CodeMirror.registerHelper("lint", "coffeescript", function(text) {
|
4
4
|
var found = [];
|
5
5
|
var parseError = function(err) {
|
6
6
|
var loc = err.lineNumber;
|
@@ -21,4 +21,5 @@ CodeMirror.coffeeValidator = function(text) {
|
|
21
21
|
message: e.message});
|
22
22
|
}
|
23
23
|
return found;
|
24
|
-
};
|
24
|
+
});
|
25
|
+
CodeMirror.coffeeValidator = CodeMirror.lint.coffeescript; // deprecated
|
@@ -9,18 +9,15 @@
|
|
9
9
|
"Unmatched ", " and instead saw", " is not defined",
|
10
10
|
"Unclosed string", "Stopping, unable to continue" ];
|
11
11
|
|
12
|
-
function validator(
|
12
|
+
function validator(text, options) {
|
13
13
|
JSHINT(text, options);
|
14
14
|
var errors = JSHINT.data().errors, result = [];
|
15
15
|
if (errors) parseErrors(errors, result);
|
16
16
|
return result;
|
17
17
|
}
|
18
18
|
|
19
|
-
CodeMirror.
|
20
|
-
|
21
|
-
};
|
22
|
-
|
23
|
-
CodeMirror.javascriptValidator = CodeMirror.javascriptValidatorWithOptions(null);
|
19
|
+
CodeMirror.registerHelper("lint", "javascript", validator);
|
20
|
+
CodeMirror.javascriptValidator = CodeMirror.lint.javascript; // deprecated
|
24
21
|
|
25
22
|
function cleanup(error) {
|
26
23
|
// All problems are warnings by default
|
@@ -1,6 +1,6 @@
|
|
1
1
|
// Depends on jsonlint.js from https://github.com/zaach/jsonlint
|
2
2
|
|
3
|
-
CodeMirror.
|
3
|
+
CodeMirror.registerHelper("lint", "json", function(text) {
|
4
4
|
var found = [];
|
5
5
|
jsonlint.parseError = function(str, hash) {
|
6
6
|
var loc = hash.loc;
|
@@ -11,4 +11,5 @@ CodeMirror.jsonValidator = function(text) {
|
|
11
11
|
try { jsonlint.parse(text); }
|
12
12
|
catch(e) {}
|
13
13
|
return found;
|
14
|
-
};
|
14
|
+
});
|
15
|
+
CodeMirror.jsonValidator = CodeMirror.lint.json; // deprecated
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
(function() {
|
2
|
+
"use strict";
|
2
3
|
var GUTTER_ID = "CodeMirror-lint-markers";
|
3
4
|
var SEVERITIES = /^(?:error|warning)$/;
|
4
5
|
|
@@ -52,9 +53,11 @@ CodeMirror.validate = (function() {
|
|
52
53
|
this.onMouseOver = function(e) { onMouseOver(cm, e); };
|
53
54
|
}
|
54
55
|
|
55
|
-
function parseOptions(options) {
|
56
|
+
function parseOptions(cm, options) {
|
56
57
|
if (options instanceof Function) return {getAnnotations: options};
|
57
|
-
|
58
|
+
if (!options || options === true) options = {};
|
59
|
+
if (!options.getAnnotations) options.getAnnotations = cm.getHelper(CodeMirror.Pos(0, 0), "lint");
|
60
|
+
if (!options.getAnnotations) throw new Error("Required option 'getAnnotations' missing (lint addon)");
|
58
61
|
return options;
|
59
62
|
}
|
60
63
|
|
@@ -175,7 +178,7 @@ CodeMirror.validate = (function() {
|
|
175
178
|
}
|
176
179
|
}
|
177
180
|
|
178
|
-
|
181
|
+
function optionHandler(cm, val, old) {
|
179
182
|
if (old && old != CodeMirror.Init) {
|
180
183
|
clearMarks(cm);
|
181
184
|
cm.off("change", onChange);
|
@@ -186,12 +189,15 @@ CodeMirror.validate = (function() {
|
|
186
189
|
if (val) {
|
187
190
|
var gutters = cm.getOption("gutters"), hasLintGutter = false;
|
188
191
|
for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true;
|
189
|
-
var state = cm.state.lint = new LintState(cm, parseOptions(val), hasLintGutter);
|
192
|
+
var state = cm.state.lint = new LintState(cm, parseOptions(cm, val), hasLintGutter);
|
190
193
|
cm.on("change", onChange);
|
191
194
|
if (state.options.tooltips != false)
|
192
195
|
CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver);
|
193
196
|
|
194
197
|
startLinting(cm);
|
195
198
|
}
|
196
|
-
}
|
199
|
+
}
|
200
|
+
|
201
|
+
CodeMirror.defineOption("lintWith", false, optionHandler); // deprecated
|
202
|
+
CodeMirror.defineOption("lint", false, optionHandler); // deprecated
|
197
203
|
})();
|
@@ -0,0 +1,50 @@
|
|
1
|
+
// From https://code.google.com/p/google-diff-match-patch/ , licensed under the Apache License 2.0
|
2
|
+
(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=0.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=0.5;this.Patch_Margin=4;this.Match_MaxBits=32}
|
3
|
+
diff_match_patch.prototype.diff_main=function(a,b,c,d){"undefined"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error("Null input. (diff_main)");if(a==b)return a?[[0,a]]:[];"undefined"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);var f=this.diff_commonSuffix(a,b),g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,
|
4
|
+
b,e,d);c&&a.unshift([0,c]);g&&a.push([0,g]);this.diff_cleanupMerge(a);return a};
|
5
|
+
diff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[1,b]];if(!b)return[[-1,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[1,e.substring(0,g)],[0,f],[1,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=-1),c):1==f.length?[[-1,a],[1,b]]:(e=this.diff_halfMatch_(a,b))?(f=e[0],a=e[1],g=e[2],b=e[3],e=e[4],f=this.diff_main(f,g,c,d),c=this.diff_main(a,b,c,d),f.concat([[0,e]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,
|
6
|
+
d):this.diff_bisect_(a,b,d)};
|
7
|
+
diff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([0,""]);for(var e=d=b=0,f="",g="";b<a.length;){switch(a[b][0]){case 1:e++;g+=a[b][1];break;case -1:d++;f+=a[b][1];break;case 0:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=d.length}d=e=0;g=f=""}b++}a.pop();return a};
|
8
|
+
diff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=f,h=2*f,j=Array(h),i=Array(h),k=0;k<h;k++)j[k]=-1,i[k]=-1;j[g+1]=0;i[g+1]=0;for(var k=d-e,q=0!=k%2,r=0,t=0,p=0,w=0,v=0;v<f&&!((new Date).getTime()>c);v++){for(var n=-v+r;n<=v-t;n+=2){var l=g+n,m;m=n==-v||n!=v&&j[l-1]<j[l+1]?j[l+1]:j[l-1]+1;for(var s=m-n;m<d&&s<e&&a.charAt(m)==b.charAt(s);)m++,s++;j[l]=m;if(m>d)t+=2;else if(s>e)r+=2;else if(q&&(l=g+k-n,0<=l&&l<h&&-1!=i[l])){var u=d-i[l];if(m>=
|
9
|
+
u)return this.diff_bisectSplit_(a,b,m,s,c)}}for(n=-v+p;n<=v-w;n+=2){l=g+n;u=n==-v||n!=v&&i[l-1]<i[l+1]?i[l+1]:i[l-1]+1;for(m=u-n;u<d&&m<e&&a.charAt(d-u-1)==b.charAt(e-m-1);)u++,m++;i[l]=u;if(u>d)w+=2;else if(m>e)p+=2;else if(!q&&(l=g+k-n,0<=l&&(l<h&&-1!=j[l])&&(m=j[l],s=g+m-l,u=d-u,m>=u)))return this.diff_bisectSplit_(a,b,m,s,c)}}return[[-1,a],[1,b]]};
|
10
|
+
diff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};
|
11
|
+
diff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b="",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf("\n",c);-1==f&&(f=a.length-1);var r=a.substring(c,f+1),c=f+1;(e.hasOwnProperty?e.hasOwnProperty(r):void 0!==e[r])?b+=String.fromCharCode(e[r]):(b+=String.fromCharCode(g),e[r]=g,d[g++]=r)}return b}var d=[],e={};d[0]="";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};
|
12
|
+
diff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join("")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};
|
13
|
+
diff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};
|
14
|
+
diff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;for(var d=0,e=1;;){var f=a.substring(c-e),f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};
|
15
|
+
diff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g="",h,j,n,l;-1!=(e=b.indexOf(d,e+1));){var m=f.diff_commonPrefix(a.substring(c),b.substring(e)),s=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<s+m&&(g=b.substring(e-s,e)+b.substring(e,e+m),h=a.substring(0,c-s),j=a.substring(c+m),n=b.substring(0,e-s),l=b.substring(e+m))}return 2*g.length>=a.length?[h,j,n,l,g]:null}if(0>=this.Diff_Timeout)return null;
|
16
|
+
var d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4)),d=c(d,e,Math.ceil(d.length/2)),h;if(!g&&!d)return null;h=d?g?g[4].length>d[4].length?g:d:d:g;var j;a.length>b.length?(g=h[0],d=h[1],e=h[2],j=h[3]):(e=h[0],j=h[1],g=h[2],d=h[3]);h=h[4];return[g,d,e,j,h]};
|
17
|
+
diff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,j=0,i=0;f<a.length;)0==a[f][0]?(c[d++]=f,g=j,h=i,i=j=0,e=a[f][1]):(1==a[f][0]?j+=a[f][1].length:i+=a[f][1].length,e&&(e.length<=Math.max(g,h)&&e.length<=Math.max(j,i))&&(a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,d--,f=0<d?c[d-1]:-1,i=j=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(-1==a[f-1][0]&&1==a[f][0]){b=a[f-1][1];c=a[f][1];
|
18
|
+
d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[0,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[0,b.substring(0,e)]),a[f-1][0]=1,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=-1,a[f+1][1]=b.substring(e),f++;f++}f++}};
|
19
|
+
diff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_),c=g&&c.match(diff_match_patch.linebreakRegex_),d=h&&d.match(diff_match_patch.linebreakRegex_),i=c&&a.match(diff_match_patch.blanklineEndRegex_),j=d&&b.match(diff_match_patch.blanklineStartRegex_);
|
20
|
+
return i||j?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(0==a[c-1][0]&&0==a[c+1][0]){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g)var h=e.substring(e.length-g),d=d.substring(0,d.length-g),e=h+e.substring(0,e.length-g),f=h+f;for(var g=d,h=e,j=f,i=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){var d=d+e.charAt(0),e=e.substring(1)+f.charAt(0),f=f.substring(1),k=b(d,e)+b(e,f);k>=i&&(i=k,g=d,h=e,j=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-1,1),c--),a[c][1]=
|
21
|
+
h,j?a[c+1][1]=j:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\s/;diff_match_patch.linebreakRegex_=/[\r\n]/;diff_match_patch.blanklineEndRegex_=/\n\r?\n$/;diff_match_patch.blanklineStartRegex_=/^\r?\n\r?\n/;
|
22
|
+
diff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,j=!1,i=!1;f<a.length;){if(0==a[f][0])a[f][1].length<this.Diff_EditCost&&(j||i)?(c[d++]=f,g=j,h=i,e=a[f][1]):(d=0,e=null),j=i=!1;else if(-1==a[f][0]?i=!0:j=!0,e&&(g&&h&&j&&i||e.length<this.Diff_EditCost/2&&3==g+h+j+i))a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,e=null,g&&h?(j=i=!0,d=0):(d--,f=0<d?c[d-1]:-1,j=i=!1),b=!0;f++}b&&this.diff_cleanupMerge(a)};
|
23
|
+
diff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([0,""]);for(var b=0,c=0,d=0,e="",f="",g;b<a.length;)switch(a[b][0]){case 1:d++;f+=a[b][1];b++;break;case -1:c++;e+=a[b][1];b++;break;case 0:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&0==a[b-c-d-1][0]?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[0,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-g)+a[b][1],f=f.substring(0,f.length-
|
24
|
+
g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[1,f]):0===d?a.splice(b-c,c+d,[-1,e]):a.splice(b-c-d,c+d,[-1,e],[1,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&0==a[b-1][0]?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=""}""===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)0==a[b-1][0]&&0==a[b+1][0]&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,a[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,
|
25
|
+
a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};diff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){1!==a[g][0]&&(c+=a[g][1].length);-1!==a[g][0]&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&-1===a[g][0]?f:f+(b-e)};
|
26
|
+
diff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\n/g,g=0;g<a.length;g++){var h=a[g][0],j=a[g][1],j=j.replace(c,"&").replace(d,"<").replace(e,">").replace(f,"¶<br>");switch(h){case 1:b[g]='<ins style="background:#e6ffe6;">'+j+"</ins>";break;case -1:b[g]='<del style="background:#ffe6e6;">'+j+"</del>";break;case 0:b[g]="<span>"+j+"</span>"}}return b.join("")};
|
27
|
+
diff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)1!==a[c][0]&&(b[c]=a[c][1]);return b.join("")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)-1!==a[c][0]&&(b[c]=a[c][1]);return b.join("")};diff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][0],g=a[e][1];switch(f){case 1:c+=g.length;break;case -1:d+=g.length;break;case 0:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};
|
28
|
+
diff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case 1:b[c]="+"+encodeURI(a[c][1]);break;case -1:b[c]="-"+a[c][1].length;break;case 0:b[c]="="+a[c][1].length}return b.join("\t").replace(/%20/g," ")};
|
29
|
+
diff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case "+":try{c[d++]=[1,decodeURI(h)]}catch(j){throw Error("Illegal escape in diff_fromDelta: "+h);}break;case "-":case "=":var i=parseInt(h,10);if(isNaN(i)||0>i)throw Error("Invalid number in diff_fromDelta: "+h);h=a.substring(e,e+=i);"="==f[g].charAt(0)?c[d++]=[0,h]:c[d++]=[-1,h];break;default:if(f[g])throw Error("Invalid diff operation in diff_fromDelta: "+
|
30
|
+
f[g]);}}if(e!=a.length)throw Error("Delta length ("+e+") does not equal source text length ("+a.length+").");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error("Null input. (match_main)");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};
|
31
|
+
diff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return!f.Match_Distance?g?1:e:e+g/f.Match_Distance}if(b.length>this.Match_MaxBits)throw Error("Pattern too long for this browser.");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));for(var j=1<<b.length-1,h=-1,i,k,q=b.length+a.length,r,t=0;t<b.length;t++){i=0;for(k=q;i<k;)d(t,c+
|
32
|
+
k)<=g?i=k:q=k,k=Math.floor((q-i)/2+i);q=k;i=Math.max(1,c-k+1);var p=Math.min(c+k,a.length)+b.length;k=Array(p+2);for(k[p+1]=(1<<t)-1;p>=i;p--){var w=e[a.charAt(p-1)];k[p]=0===t?(k[p+1]<<1|1)&w:(k[p+1]<<1|1)&w|((r[p+1]|r[p])<<1|1)|r[p+1];if(k[p]&j&&(w=d(t,p-1),w<=g))if(g=w,h=p-1,h>c)i=Math.max(1,2*c-h);else break}if(d(t+1,c)>g)break;r=k}return h};
|
33
|
+
diff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};
|
34
|
+
diff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([0,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([0,d]);a.start1-=c.length;a.start2-=c.length;a.length1+=
|
35
|
+
c.length+d.length;a.length2+=c.length+d.length}};
|
36
|
+
diff_match_patch.prototype.patch_make=function(a,b,c){var d;if("string"==typeof a&&"string"==typeof b&&"undefined"==typeof c)d=a,b=this.diff_main(d,b,!0),2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b));else if(a&&"object"==typeof a&&"undefined"==typeof b&&"undefined"==typeof c)b=a,d=this.diff_text1(b);else if("string"==typeof a&&b&&"object"==typeof b&&"undefined"==typeof c)d=a;else if("string"==typeof a&&"string"==typeof b&&c&&"object"==typeof c)d=a,b=c;else throw Error("Unknown call format to patch_make.");
|
37
|
+
if(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,j=0;j<b.length;j++){var i=b[j][0],k=b[j][1];!e&&0!==i&&(a.start1=f,a.start2=g);switch(i){case 1:a.diffs[e++]=b[j];a.length2+=k.length;d=d.substring(0,g)+k+d.substring(g);break;case -1:a.length1+=k.length;a.diffs[e++]=b[j];d=d.substring(0,g)+d.substring(g+k.length);break;case 0:k.length<=2*this.Patch_Margin&&e&&b.length!=j+1?(a.diffs[e++]=b[j],a.length1+=k.length,a.length2+=k.length):k.length>=2*this.Patch_Margin&&
|
38
|
+
e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}1!==i&&(f+=k.length);-1!==i&&(g+=k.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};diff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};
|
39
|
+
diff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),j,i=-1;if(h.length>this.Match_MaxBits){if(j=this.match_main(b,h.substring(0,this.Match_MaxBits),g),-1!=j&&(i=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==i||j>=i))j=-1}else j=this.match_main(b,h,g);
|
40
|
+
if(-1==j)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=j-g,g=-1==i?b.substring(j,j+h.length):b.substring(j,i+this.Match_MaxBits),h==g)b=b.substring(0,j)+this.diff_text2(a[f].diffs)+b.substring(j+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);for(var h=0,k,i=0;i<a[f].diffs.length;i++){var q=a[f].diffs[i];0!==q[0]&&(k=this.diff_xIndex(g,h));1===q[0]?b=b.substring(0,
|
41
|
+
j+k)+q[1]+b.substring(j+k):-1===q[0]&&(b=b.substring(0,j+k)+b.substring(j+this.diff_xIndex(g,h+q[1].length)));-1!==q[0]&&(h+=q[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};
|
42
|
+
diff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c="",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;var d=a[0],e=d.diffs;if(0==e.length||0!=e[0][0])e.unshift([0,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||0!=e[e.length-1][0]?(e.push([0,
|
43
|
+
c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};
|
44
|
+
diff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g="";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,j=!0;h.start1=e-g.length;h.start2=f-g.length;""!==g&&(h.length1=h.length2=g.length,h.diffs.push([0,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){var g=d.diffs[0][0],i=d.diffs[0][1];1===g?(h.length2+=i.length,f+=i.length,h.diffs.push(d.diffs.shift()),
|
45
|
+
j=!1):-1===g&&1==h.diffs.length&&0==h.diffs[0][0]&&i.length>2*b?(h.length1+=i.length,e+=i.length,j=!1,h.diffs.push([g,i]),d.diffs.shift()):(i=i.substring(0,b-h.length1-this.Patch_Margin),h.length1+=i.length,e+=i.length,0===g?(h.length2+=i.length,f+=i.length):j=!1,h.diffs.push([g,i]),i==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(i.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);i=this.diff_text1(d.diffs).substring(0,this.Patch_Margin);""!==i&&
|
46
|
+
(h.length1+=i.length,h.length2+=i.length,0!==h.diffs.length&&0===h.diffs[h.diffs.length-1][0]?h.diffs[h.diffs.length-1][1]+=i:h.diffs.push([0,i]));j||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join("")};
|
47
|
+
diff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split("\n");for(var c=0,d=/^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error("Invalid patch string: "+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);""===e[2]?(f.start1--,f.length1=1):"0"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);""===e[4]?(f.start2--,f.length2=1):"0"==e[4]?f.length2=0:(f.start2--,f.length2=
|
48
|
+
parseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error("Illegal escape in patch_fromText: "+g);}if("-"==e)f.diffs.push([-1,g]);else if("+"==e)f.diffs.push([1,g]);else if(" "==e)f.diffs.push([0,g]);else if("@"==e)break;else if(""!==e)throw Error('Invalid patch mode "'+e+'" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};
|
49
|
+
diff_match_patch.patch_obj.prototype.toString=function(){var a,b;a=0===this.length1?this.start1+",0":1==this.length1?this.start1+1:this.start1+1+","+this.length1;b=0===this.length2?this.start2+",0":1==this.length2?this.start2+1:this.start2+1+","+this.length2;a=["@@ -"+a+" +"+b+" @@\n"];var c;for(b=0;b<this.diffs.length;b++){switch(this.diffs[b][0]){case 1:c="+";break;case -1:c="-";break;case 0:c=" "}a[b+1]=c+encodeURI(this.diffs[b][1])+"\n"}return a.join("").replace(/%20/g," ")};
|
50
|
+
this.diff_match_patch=diff_match_patch;this.DIFF_DELETE=-1;this.DIFF_INSERT=1;this.DIFF_EQUAL=0;})()
|
@@ -8,18 +8,18 @@
|
|
8
8
|
this.mv = mv;
|
9
9
|
this.type = type;
|
10
10
|
this.classes = type == "left"
|
11
|
-
? {chunk: "CodeMirror-
|
12
|
-
start: "CodeMirror-
|
13
|
-
end: "CodeMirror-
|
14
|
-
insert: "CodeMirror-
|
15
|
-
del: "CodeMirror-
|
16
|
-
connect: "CodeMirror-
|
17
|
-
: {chunk: "CodeMirror-
|
18
|
-
start: "CodeMirror-
|
19
|
-
end: "CodeMirror-
|
20
|
-
insert: "CodeMirror-
|
21
|
-
del: "CodeMirror-
|
22
|
-
connect: "CodeMirror-
|
11
|
+
? {chunk: "CodeMirror-merge-l-chunk",
|
12
|
+
start: "CodeMirror-merge-l-chunk-start",
|
13
|
+
end: "CodeMirror-merge-l-chunk-end",
|
14
|
+
insert: "CodeMirror-merge-l-inserted",
|
15
|
+
del: "CodeMirror-merge-l-deleted",
|
16
|
+
connect: "CodeMirror-merge-l-connect"}
|
17
|
+
: {chunk: "CodeMirror-merge-r-chunk",
|
18
|
+
start: "CodeMirror-merge-r-chunk-start",
|
19
|
+
end: "CodeMirror-merge-r-chunk-end",
|
20
|
+
insert: "CodeMirror-merge-r-inserted",
|
21
|
+
del: "CodeMirror-merge-r-deleted",
|
22
|
+
connect: "CodeMirror-merge-r-connect"};
|
23
23
|
}
|
24
24
|
|
25
25
|
DiffView.prototype = {
|
@@ -93,7 +93,21 @@
|
|
93
93
|
var off = getOffsets(editor, type == DIFF_INSERT ? around.edit : around.orig);
|
94
94
|
var offOther = getOffsets(other, type == DIFF_INSERT ? around.orig : around.edit);
|
95
95
|
var ratio = (midY - off.top) / (off.bot - off.top);
|
96
|
-
|
96
|
+
var targetPos = (offOther.top - halfScreen) + ratio * (offOther.bot - offOther.top);
|
97
|
+
|
98
|
+
var botDist, mix;
|
99
|
+
// Some careful tweaking to make sure no space is left out of view
|
100
|
+
// when scrolling to top or bottom.
|
101
|
+
if (targetPos > sInfo.top && (mix = sInfo.top / halfScreen) < 1) {
|
102
|
+
targetPos = targetPos * mix + sInfo.top * (1 - mix);
|
103
|
+
} else if ((botDist = sInfo.height - sInfo.clientHeight - sInfo.top) < halfScreen) {
|
104
|
+
var otherInfo = other.getScrollInfo();
|
105
|
+
var botDistOther = otherInfo.height - otherInfo.clientHeight - targetPos;
|
106
|
+
if (botDistOther > botDist && (mix = botDist / halfScreen) < 1)
|
107
|
+
targetPos = targetPos * mix + (otherInfo.height - otherInfo.clientHeight - botDist) * (1 - mix);
|
108
|
+
}
|
109
|
+
|
110
|
+
other.scrollTo(sInfo.left, targetPos);
|
97
111
|
other.state.scrollSetAt = now;
|
98
112
|
other.state.scrollSetBy = dv;
|
99
113
|
return true;
|
@@ -208,8 +222,8 @@
|
|
208
222
|
var vpEdit = dv.edit.getViewport(), vpOrig = dv.orig.getViewport();
|
209
223
|
var sTopEdit = dv.edit.getScrollInfo().top, sTopOrig = dv.orig.getScrollInfo().top;
|
210
224
|
iterateChunks(dv.diff, function(topOrig, botOrig, topEdit, botEdit) {
|
211
|
-
if (topEdit
|
212
|
-
topOrig
|
225
|
+
if (topEdit > vpEdit.to || botEdit < vpEdit.from ||
|
226
|
+
topOrig > vpOrig.to || botOrig < vpOrig.from)
|
213
227
|
return;
|
214
228
|
var topLpx = dv.orig.heightAtLine(topOrig, "local") - sTopOrig, top = topLpx;
|
215
229
|
if (dv.svg) {
|
@@ -225,7 +239,7 @@
|
|
225
239
|
"class", dv.classes.connect);
|
226
240
|
}
|
227
241
|
var copy = dv.copyButtons.appendChild(elt("div", dv.type == "left" ? "\u21dd" : "\u21dc",
|
228
|
-
"CodeMirror-
|
242
|
+
"CodeMirror-merge-copy"));
|
229
243
|
copy.title = "Revert chunk";
|
230
244
|
copy.chunk = {topEdit: topEdit, botEdit: botEdit, topOrig: topOrig, botOrig: botOrig};
|
231
245
|
copy.style.top = top + "px";
|
@@ -250,23 +264,25 @@
|
|
250
264
|
|
251
265
|
if (hasLeft) {
|
252
266
|
left = this.left = new DiffView(this, "left");
|
253
|
-
var leftPane = elt("div", null, "CodeMirror-
|
267
|
+
var leftPane = elt("div", null, "CodeMirror-merge-pane");
|
254
268
|
wrap.push(leftPane);
|
255
269
|
wrap.push(buildGap(left));
|
256
270
|
}
|
257
271
|
|
258
|
-
var editPane = elt("div", null, "CodeMirror-
|
272
|
+
var editPane = elt("div", null, "CodeMirror-merge-pane");
|
259
273
|
wrap.push(editPane);
|
260
274
|
|
261
275
|
if (hasRight) {
|
262
276
|
right = this.right = new DiffView(this, "right");
|
263
277
|
wrap.push(buildGap(right));
|
264
|
-
var rightPane = elt("div", null, "CodeMirror-
|
278
|
+
var rightPane = elt("div", null, "CodeMirror-merge-pane");
|
265
279
|
wrap.push(rightPane);
|
266
280
|
}
|
267
281
|
|
282
|
+
(hasRight ? rightPane : editPane).className += " CodeMirror-merge-pane-rightmost";
|
283
|
+
|
268
284
|
wrap.push(elt("div", null, null, "height: 0; clear: both;"));
|
269
|
-
var wrapElt = this.wrap = node.appendChild(elt("div", wrap, "CodeMirror-
|
285
|
+
var wrapElt = this.wrap = node.appendChild(elt("div", wrap, "CodeMirror-merge CodeMirror-merge-" + panes + "pane"));
|
270
286
|
this.edit = CodeMirror(editPane, copyObj(options));
|
271
287
|
|
272
288
|
if (left) left.init(leftPane, origLeft, options);
|
@@ -284,11 +300,11 @@
|
|
284
300
|
};
|
285
301
|
|
286
302
|
function buildGap(dv) {
|
287
|
-
var lock = dv.lockButton = elt("div", null, "CodeMirror-
|
303
|
+
var lock = dv.lockButton = elt("div", null, "CodeMirror-merge-scrolllock");
|
288
304
|
lock.title = "Toggle locked scrolling";
|
289
|
-
var lockWrap = elt("div", [lock], "CodeMirror-
|
305
|
+
var lockWrap = elt("div", [lock], "CodeMirror-merge-scrolllock-wrap");
|
290
306
|
CodeMirror.on(lock, "click", function() { setScrollLock(dv, !dv.lockScroll); });
|
291
|
-
dv.copyButtons = elt("div", null, "CodeMirror-
|
307
|
+
dv.copyButtons = elt("div", null, "CodeMirror-merge-copybuttons-" + dv.type);
|
292
308
|
CodeMirror.on(dv.copyButtons, "click", function(e) {
|
293
309
|
var node = e.target || e.srcElement;
|
294
310
|
if (node.chunk) copyChunk(dv, node.chunk);
|
@@ -299,7 +315,7 @@
|
|
299
315
|
dv.svg = svg;
|
300
316
|
if (svg) gapElts.push(svg);
|
301
317
|
|
302
|
-
return dv.gap = elt("div", gapElts, "CodeMirror-
|
318
|
+
return dv.gap = elt("div", gapElts, "CodeMirror-merge-gap");
|
303
319
|
}
|
304
320
|
|
305
321
|
MergeView.prototype = {
|
@@ -43,12 +43,14 @@ StringStream.prototype = {
|
|
43
43
|
match: function(pattern, consume, caseInsensitive) {
|
44
44
|
if (typeof pattern == "string") {
|
45
45
|
var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};
|
46
|
-
|
46
|
+
var substr = this.string.substr(this.pos, pattern.length);
|
47
|
+
if (cased(substr) == cased(pattern)) {
|
47
48
|
if (consume !== false) this.pos += pattern.length;
|
48
49
|
return true;
|
49
50
|
}
|
50
51
|
} else {
|
51
52
|
var match = this.string.slice(this.pos).match(pattern);
|
53
|
+
if (match && match.index > 0) return null;
|
52
54
|
if (match && consume !== false) this.pos += match[0].length;
|
53
55
|
return match;
|
54
56
|
}
|
@@ -41,12 +41,14 @@ StringStream.prototype = {
|
|
41
41
|
match: function(pattern, consume, caseInsensitive) {
|
42
42
|
if (typeof pattern == "string") {
|
43
43
|
var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};
|
44
|
-
|
44
|
+
var substr = this.string.substr(this.pos, pattern.length);
|
45
|
+
if (cased(substr) == cased(pattern)) {
|
45
46
|
if (consume !== false) this.pos += pattern.length;
|
46
47
|
return true;
|
47
48
|
}
|
48
49
|
} else {
|
49
50
|
var match = this.string.slice(this.pos).match(pattern);
|
51
|
+
if (match && match.index > 0) return null;
|
50
52
|
if (match && consume !== false) this.pos += match[0].length;
|
51
53
|
return match;
|
52
54
|
}
|
@@ -55,11 +55,13 @@
|
|
55
55
|
cm.removeOverlay(state.overlay);
|
56
56
|
state.overlay = null;
|
57
57
|
}
|
58
|
-
|
59
58
|
if (!cm.somethingSelected() && state.showToken) {
|
60
|
-
var
|
61
|
-
|
62
|
-
|
59
|
+
var re = state.showToken === true ? /[\w$]/ : state.showToken;
|
60
|
+
var cur = cm.getCursor(), line = cm.getLine(cur.line), start = cur.ch, end = start;
|
61
|
+
while (start && re.test(line.charAt(start - 1))) --start;
|
62
|
+
while (end < line.length && re.test(line.charAt(end))) ++end;
|
63
|
+
if (start < end)
|
64
|
+
cm.addOverlay(state.overlay = makeOverlay(line.slice(start, end), re, state.style));
|
63
65
|
return;
|
64
66
|
}
|
65
67
|
if (cm.getCursor("head").line != cm.getCursor("anchor").line) return;
|
@@ -69,15 +71,15 @@
|
|
69
71
|
});
|
70
72
|
}
|
71
73
|
|
72
|
-
function boundariesAround(stream) {
|
73
|
-
return (stream.start ||
|
74
|
-
(stream.pos == stream.string.length ||
|
74
|
+
function boundariesAround(stream, re) {
|
75
|
+
return (!stream.start || !re.test(stream.string.charAt(stream.start - 1))) &&
|
76
|
+
(stream.pos == stream.string.length || !re.test(stream.string.charAt(stream.pos)));
|
75
77
|
}
|
76
78
|
|
77
|
-
function makeOverlay(query,
|
79
|
+
function makeOverlay(query, hasBoundary, style) {
|
78
80
|
return {token: function(stream) {
|
79
81
|
if (stream.match(query) &&
|
80
|
-
(!
|
82
|
+
(!hasBoundary || boundariesAround(stream, hasBoundary)))
|
81
83
|
return style;
|
82
84
|
stream.next();
|
83
85
|
stream.skipTo(query.charAt(0)) || stream.skipToEnd();
|