10 changes: 10 additions & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ benbro
Beni Cherniavsky-Paskin
Benjamin DeCoste
Ben Keen
Ben Mosher
Bernhard Sirlinger
Bert Chang
Billy Moon
Expand Down Expand Up @@ -137,6 +138,7 @@ David Barnett
David Mignot
David Pathakjee
David Vázquez
David Whittington
deebugger
Deep Thought
Devin Abbott
Expand Down Expand Up @@ -184,6 +186,7 @@ galambalazs
Gautam Mehta
Gavin Douglas
gekkoe
geowarin
Gerard Braad
Gergely Hegykozi
Giovanni Calò
Expand All @@ -198,6 +201,7 @@ greengiant
Gregory Koberger
Guillaume Massé
Guillaume Massé
guraga
Gustavo Rodrigues
Hakan Tunc
Hans Engel
Expand Down Expand Up @@ -274,13 +278,15 @@ ju1ius
Juan Benavides Romero
Jucovschi Constantin
Juho Vuori
Julien Rebetez
Justin Andresen
Justin Hileman
jwallers@gmail.com
kaniga
karevn
Kayur Patel
Ken Newman
ken restivo
Ken Rockot
Kevin Earls
Kevin Sawicki
Expand Down Expand Up @@ -426,7 +432,9 @@ peter
Peter Flynn
peterkroon
Peter Kroon
Philipp A
Philip Stadermann
Pierre Gerold
Piët Delport
prasanthj
Prasanth J
Expand Down Expand Up @@ -476,6 +484,7 @@ Shiv Deepak
Shmuel Englard
Shubham Jain
silverwind
sinkuu
snasa
soliton4
sonson
Expand Down Expand Up @@ -518,6 +527,7 @@ Tom MacWright
Tony Jian
Travis Heppe
Triangle717
Tristan Tarrant
TSUYUSATO Kitsune
twifkak
Vestimir Markov
Expand Down
30 changes: 29 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,32 @@
## 5.12.0 (2015-02-19)
## 5.13.0 (2016-03-21)

### New features

New DOM event forwarded: [`"dragleave"`](http://codemirror.net/doc/manual.html#event_dom).

[protobuf mode](http://codemirror.net/mode/protobuf/index.html): Newly added.

### Bugfixes

Fix problem where [`findMarks`](http://codemirror.net/doc/manual.html#findMarks) sometimes failed to find multi-line marks.

Fix crash that showed up when atomic ranges and bidi text were combined.

[show-hint addon](http://codemirror.net/demo/complete.html): Completion widgets no longer close when the line indented or dedented.

[merge addon](http://codemirror.net/demo/merge.html): Fix bug when merging chunks at the end of the file.

[placeholder addon](http://codemirror.net/doc/manual.html#addon_placeholder): No longer gets confused by [`swapDoc`](http://codemirror.net/doc/manual.html#swapDoc).

[simplescrollbars addon](http://codemirror.net/doc/manual.html#addon_simplescrollbars): Fix invalid state when deleting at end of document.

[clike mode](http://codemirror.net/mode/clike/index.html): No longer gets confused when a comment starts after an operator.

[markdown mode](http://codemirror.net/mode/markdown/index.html): Now supports CommonMark-style flexible list indentation.

[dylan mode](http://codemirror.net/mode/dylan/index.html): Several improvements and fixes.

## 5.12.0 (2016-02-19)

### New features

Expand Down
2 changes: 2 additions & 0 deletions addon/display/placeholder.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@
if (val && !prev) {
cm.on("blur", onBlur);
cm.on("change", onChange);
cm.on("swapDoc", onChange);
onChange(cm);
} else if (!val && prev) {
cm.off("blur", onBlur);
cm.off("change", onChange);
cm.off("swapDoc", onChange);
clearPlaceholder(cm);
var wrapper = cm.getWrapperElement();
wrapper.className = wrapper.className.replace(" CodeMirror-empty", "");
Expand Down
11 changes: 9 additions & 2 deletions addon/hint/show-hint.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,11 +121,13 @@

finishUpdate: function(data, first) {
if (this.data) CodeMirror.signal(this.data, "update");
if (data && this.data && CodeMirror.cmpPos(data.from, this.data.from)) data = null;
this.data = data;

var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle);
if (this.widget) this.widget.close();

if (data && this.data && isNewCompletion(this.data, data)) return;
this.data = data;

if (data && data.list.length) {
if (picked && data.list.length == 1) {
this.pick(data, 0);
Expand All @@ -137,6 +139,11 @@
}
};

function isNewCompletion(old, nw) {
var moved = CodeMirror.cmpPos(nw.from, old.from)
return moved > 0 && old.to.ch - old.from.ch != nw.to.ch - nw.from.ch
}

function parseOptions(cm, pos, options) {
var editor = cm.options.hintOptions;
var out = {};
Expand Down
57 changes: 42 additions & 15 deletions addon/hint/sql-hint.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
};
var Pos = CodeMirror.Pos;

function isArray(val) { return Object.prototype.toString.call(val) == "[object Array]" }

function getKeywords(editor) {
var mode = editor.doc.modeOption;
if (mode === "sql") mode = "text/x-sql";
Expand All @@ -30,10 +32,28 @@
return typeof item == "string" ? item : item.text;
}

function getItem(list, item) {
if (!list.slice) return list[item];
for (var i = list.length - 1; i >= 0; i--) if (getText(list[i]) == item)
return list[i];
function wrapTable(name, value) {
if (isArray(value)) value = {columns: value}
if (!value.text) value.text = name
return value
}

function parseTables(input) {
var result = {}
if (isArray(input)) {
for (var i = input.length - 1; i >= 0; i--) {
var item = input[i]
result[getText(item).toUpperCase()] = wrapTable(getText(item), item)
}
} else if (input) {
for (var name in input)
result[name.toUpperCase()] = wrapTable(name, input[name])
}
return result
}

function getTable(name) {
return tables[name.toUpperCase()]
}

function shallowClone(object) {
Expand All @@ -50,11 +70,18 @@
}

function addMatches(result, search, wordlist, formatter) {
for (var word in wordlist) {
if (!wordlist.hasOwnProperty(word)) continue;
if (wordlist.slice) word = wordlist[word];

if (match(search, word)) result.push(formatter(word));
if (isArray(wordlist)) {
for (var i = 0; i < wordlist.length; i++)
if (match(search, wordlist[i])) result.push(formatter(wordlist[i]))
} else {
for (var word in wordlist) if (wordlist.hasOwnProperty(word)) {
var val = wordlist[word]
if (!val || val === true)
val = word
else
val = val.displayText ? {text: val.text, displayText: val.displayText} : val.text
if (match(search, val)) result.push(formatter(val))
}
}
}

Expand Down Expand Up @@ -115,13 +142,13 @@
var alias = false;
var aliasTable = table;
// Check if table is available. If not, find table by Alias
if (!getItem(tables, table)) {
if (!getTable(table)) {
var oldTable = table;
table = findTableByAlias(table, editor);
if (table !== oldTable) alias = true;
}

var columns = getItem(tables, table);
var columns = getTable(table);
if (columns && columns.columns)
columns = columns.columns;

Expand Down Expand Up @@ -184,7 +211,7 @@
//find valid range
var prevItem = 0;
var current = convertCurToNumber(editor.getCursor());
for (var i=0; i< separator.length; i++) {
for (var i = 0; i < separator.length; i++) {
var _v = convertCurToNumber(separator[i]);
if (current > prevItem && current <= _v) {
validRange = { start: convertNumberToCur(prevItem), end: convertNumberToCur(_v) };
Expand All @@ -199,7 +226,7 @@
var lineText = query[i];
eachWord(lineText, function(word) {
var wordUpperCase = word.toUpperCase();
if (wordUpperCase === aliasUpperCase && getItem(tables, previousWord))
if (wordUpperCase === aliasUpperCase && getTable(previousWord))
table = previousWord;
if (wordUpperCase !== CONS.ALIAS_KEYWORD)
previousWord = word;
Expand All @@ -210,10 +237,10 @@
}

CodeMirror.registerHelper("hint", "sql", function(editor, options) {
tables = (options && options.tables) || {};
tables = parseTables(options && options.tables)
var defaultTableName = options && options.defaultTable;
var disableKeywords = options && options.disableKeywords;
defaultTable = defaultTableName && getItem(tables, defaultTableName);
defaultTable = defaultTableName && getTable(defaultTableName);
keywords = keywords || getKeywords(editor);

if (defaultTableName && !defaultTable)
Expand Down
15 changes: 11 additions & 4 deletions addon/lint/lint.js
Original file line number Diff line number Diff line change
Expand Up @@ -186,20 +186,27 @@
state.timeout = setTimeout(function(){startLinting(cm);}, state.options.delay || 500);
}

function popupSpanTooltip(ann, e) {
function popupTooltips(annotations, e) {
var target = e.target || e.srcElement;
showTooltipFor(e, annotationTooltip(ann), target);
var tooltip = document.createDocumentFragment();
for (var i = 0; i < annotations.length; i++) {
var ann = annotations[i];
tooltip.appendChild(annotationTooltip(ann));
}
showTooltipFor(e, tooltip, target);
}

function onMouseOver(cm, e) {
var target = e.target || e.srcElement;
if (!/\bCodeMirror-lint-mark-/.test(target.className)) return;
var box = target.getBoundingClientRect(), x = (box.left + box.right) / 2, y = (box.top + box.bottom) / 2;
var spans = cm.findMarksAt(cm.coordsChar({left: x, top: y}, "client"));

var annotations = [];
for (var i = 0; i < spans.length; ++i) {
var ann = spans[i].__annotation;
if (ann) return popupSpanTooltip(ann, e);
annotations.push(spans[i].__annotation);
}
if (annotations.length) popupTooltips(annotations, e);
}

CodeMirror.defineOption("lint", false, function(cm, val, old) {
Expand Down
6 changes: 3 additions & 3 deletions addon/merge/merge.js
Original file line number Diff line number Diff line change
Expand Up @@ -427,9 +427,9 @@

function copyChunk(dv, to, from, chunk) {
if (dv.diffOutOfDate) return;
var start = chunk.editTo > to.lastLine() ? Pos(chunk.editFrom - 1) : Pos(chunk.editFrom, 0)
to.replaceRange(from.getRange(Pos(chunk.origFrom, 0), Pos(chunk.origTo, 0)),
start, Pos(chunk.editTo, 0));
var editStart = chunk.editTo > to.lastLine() ? Pos(chunk.editFrom - 1) : Pos(chunk.editFrom, 0)
var origStart = chunk.origTo > from.lastLine() ? Pos(chunk.origFrom - 1) : Pos(chunk.origFrom, 0)
to.replaceRange(from.getRange(origStart, Pos(chunk.origTo, 0)), editStart, Pos(chunk.editTo, 0))
}

// Merge view, containing 0, 1, or 2 diff views.
Expand Down
18 changes: 10 additions & 8 deletions addon/scroll/simplescrollbars.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,20 @@
CodeMirror.on(this.node, "DOMMouseScroll", onWheel);
}

Bar.prototype.moveTo = function(pos, update) {
Bar.prototype.setPos = function(pos) {
if (pos < 0) pos = 0;
if (pos > this.total - this.screen) pos = this.total - this.screen;
if (pos == this.pos) return;
if (pos == this.pos) return false;
this.pos = pos;
this.inner.style[this.orientation == "horizontal" ? "left" : "top"] =
(pos * (this.size / this.total)) + "px";
if (update !== false) this.scroll(pos, this.orientation);
return true
};

Bar.prototype.moveTo = function(pos) {
if (this.setPos(pos)) this.scroll(pos, this.orientation);
}

var minButtonSize = 10;

Bar.prototype.update = function(scrollSize, clientSize, barSize) {
Expand All @@ -83,8 +87,7 @@
}
this.inner.style[this.orientation == "horizontal" ? "width" : "height"] =
buttonSize + "px";
this.inner.style[this.orientation == "horizontal" ? "left" : "top"] =
this.pos * (this.size / this.total) + "px";
this.setPos(this.pos);
};

function SimpleScrollbars(cls, place, scroll) {
Expand All @@ -111,7 +114,6 @@
if (needsV) {
this.vert.update(measure.scrollHeight, measure.clientHeight,
measure.viewHeight - (needsH ? width : 0));
this.vert.node.style.display = "block";
this.vert.node.style.bottom = needsH ? width + "px" : "0";
}
if (needsH) {
Expand All @@ -125,11 +127,11 @@
};

SimpleScrollbars.prototype.setScrollTop = function(pos) {
this.vert.moveTo(pos, false);
this.vert.setPos(pos);
};

SimpleScrollbars.prototype.setScrollLeft = function(pos) {
this.horiz.moveTo(pos, false);
this.horiz.setPos(pos);
};

SimpleScrollbars.prototype.clear = function() {
Expand Down
2 changes: 1 addition & 1 deletion demo/merge.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<script src="../mode/css/css.js"></script>
<script src="../mode/javascript/javascript.js"></script>
<script src="../mode/htmlmixed/htmlmixed.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/diff_match_patch/20121119/diff_match_patch.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/diff_match_patch/20121119/diff_match_patch.js"></script>
<script src="../addon/merge/merge.js"></script>
<style>
.CodeMirror { line-height: 1.2; }
Expand Down
2 changes: 2 additions & 0 deletions doc/compress.html
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ <h2>Script compression helper</h2>
<input type="hidden" id="download" name="download" value="codemirror-compressed.js"/>
<p>Version: <select id="version" onchange="setVersion(this);" style="padding: 1px;">
<option value="http://codemirror.net/">HEAD</option>
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=5.13.0;f=">5.13</option>
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=5.12.0;f=">5.12</option>
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=5.11.0;f=">5.11</option>
<option value="http://marijnhaverbeke.nl/git/codemirror?a=blob_plain;hb=5.10.0;f=">5.10</option>
Expand Down Expand Up @@ -181,6 +182,7 @@ <h2>Script compression helper</h2>
<option value="http://codemirror.net/mode/php/php.js">php.js</option>
<option value="http://codemirror.net/mode/pig/pig.js">pig.js</option>
<option value="http://codemirror.net/mode/properties/properties.js">properties.js</option>
<option value="http://codemirror.net/mode/protobuf/protobuf.js">protobuf.js</option>
<option value="http://codemirror.net/mode/python/python.js">python.js</option>
<option value="http://codemirror.net/mode/puppet/puppet.js">puppet.js</option>
<option value="http://codemirror.net/mode/q/q.js">q.js</option>
Expand Down
Loading