Skip to content

Commit

Permalink
move save/restore selection to modify
Browse files Browse the repository at this point in the history
  • Loading branch information
jhchen committed Oct 1, 2016
1 parent 4861065 commit 506c3ab
Showing 1 changed file with 43 additions and 54 deletions.
97 changes: 43 additions & 54 deletions core/quill.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,12 +103,8 @@ class Quill {

deleteText(index, length, source) {
[index, length, , source] = overload(index, length, source);
return modify.call(this, source, () => {
let range = this.getSelection();
let change = this.editor.deleteText(index, length, source);
range = shiftRange(range, index, -1*length, source);
this.setSelection(range, Emitter.sources.SILENT);
return change;
return modify.call(this, source, index, -1*length, () => {
return this.editor.deleteText(index, length, source);
});
}

Expand All @@ -130,44 +126,37 @@ class Quill {
}

format(name, value, source = Emitter.sources.API) {
return modify.call(this, source, () => {
let range = this.getSelection(true);
let change = new Delta();
if (range == null) return change;
if (Parchment.query(name, Parchment.Scope.BLOCK)) {
change = this.formatLine(range, name, value, source);
} else if (range.length === 0) {
this.selection.format(name, value);
return change;
} else {
change = this.formatText(range, name, value, source);
}
this.setSelection(range, Emitter.sources.SILENT);
if (this.container.classList.contains('ql-disabled') && source === Emitter.sources.USER) {
return new Delta();
}
let range = this.getSelection(true);
let change = new Delta();
if (range == null) return change;
if (Parchment.query(name, Parchment.Scope.BLOCK)) {
change = this.formatLine(range, name, value, source);
} else if (range.length === 0) {
this.selection.format(name, value);
return change;
});
} else {
change = this.formatText(range, name, value, source);
}
this.setSelection(range, Emitter.sources.SILENT);
return change;
}

formatLine(index, length, name, value, source) {
let formats;
[index, length, formats, source] = overload(index, length, name, value, source);
return modify.call(this, source, () => {
let range = this.getSelection();
let change = this.editor.formatLine(index, length, formats, source);
this.selection.setRange(range, true, Emitter.sources.SILENT);
this.selection.scrollIntoView();
return change;
return modify.call(this, source, index, 0, () => {
return this.editor.formatLine(index, length, formats, source);
});
}

formatText(index, length, name, value, source) {
let formats;
[index, length, formats, source] = overload(index, length, name, value, source);
return modify.call(this, source, () => {
let range = this.getSelection();
let change = this.editor.formatText(index, length, formats, source);
this.selection.setRange(range, true, Emitter.sources.SILENT);
this.selection.scrollIntoView();
return change;
return modify.call(this, source, index, 0, () => {
return this.editor.formatText(index, length, formats, source);
});
}

Expand Down Expand Up @@ -216,24 +205,16 @@ class Quill {
}

insertEmbed(index, embed, value, source = Quill.sources.API) {
return modify.call(this, source, () => {
let range = this.getSelection();
let change = this.editor.insertEmbed(index, embed, value, source);
range = shiftRange(range, change, source);
this.setSelection(range, Emitter.sources.SILENT);
return change;
return modify.call(this, source, index, null, () => {
return this.editor.insertEmbed(index, embed, value, source);
});
}

insertText(index, text, name, value, source) {
let formats;
[index, , formats, source] = overload(index, 0, name, value, source);
return modify.call(this, source, () => {
let range = this.getSelection();
let change = this.editor.insertText(index, text, formats, source);
range = shiftRange(range, index, text.length, source);
this.setSelection(range, Emitter.sources.SILENT);
return change;
return modify.call(this, source, index, text.length, () => {
return this.editor.insertText(index, text, formats, source);
});
}

Expand All @@ -255,17 +236,15 @@ class Quill {

removeFormat(index, length, source) {
[index, length, , source] = overload(index, length, source);
return modify.call(this, source, () => {
let range = this.getSelection();
let change = this.editor.removeFormat(index, length, source);
range = shiftRange(range, change, source);
this.setSelection(range, Emitter.sources.SILENT);
return change;
return modify.call(this, source, index, null, () => {
return this.editor.removeFormat(index, length, source);
});
}

setContents(delta, source = Emitter.sources.API) {
if (this.container.classList.contains('ql-disabled') && source === Emitter.sources.USER) return;
if (this.container.classList.contains('ql-disabled') && source === Emitter.sources.USER) {
return new Delta();
}
delta = new Delta(delta).slice();
let lastOp = delta.ops[delta.ops.length - 1];
// Quill contents must always end with newline
Expand Down Expand Up @@ -298,7 +277,9 @@ class Quill {
}

updateContents(delta, source = Emitter.sources.API) {
if (this.container.classList.contains('ql-disabled') && source === Emitter.sources.USER) return;
if (this.container.classList.contains('ql-disabled') && source === Emitter.sources.USER) {
return new Delta();
}
let range = this.getSelection();
if (Array.isArray(delta)) {
delta = new Delta(delta.slice());
Expand Down Expand Up @@ -389,12 +370,20 @@ function expandConfig(container, userConfig) {
return userConfig;
}

function modify(source, modifier) {
function modify(source, index, shift, modifier) {
let change = new Delta();
if (this.container.classList.contains('ql-disabled') && source === Emitter.sources.USER) {
return new Delta();
}
return modifier();
let range = this.getSelection();
change = modifier();
if (shift === null) {
range = shiftRange(range, index, change, source);
} else if (shift !== 0) {
range = shiftRange(range, index, shift, source);
}
this.setSelection(range, Emitter.sources.SILENT);
return change;
}

function overload(index, length, name, value, source) {
Expand Down

0 comments on commit 506c3ab

Please sign in to comment.