Skip to content

Commit 4861065

Browse files
committed
Disable modification when editor disabled
Fixes #909
1 parent d7346d6 commit 4861065

File tree

1 file changed

+67
-42
lines changed

1 file changed

+67
-42
lines changed

Diff for: core/quill.js

+67-42
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,13 @@ class Quill {
103103

104104
deleteText(index, length, source) {
105105
[index, length, , source] = overload(index, length, source);
106-
let range = this.getSelection();
107-
let change = this.editor.deleteText(index, length, source);
108-
range = shiftRange(range, index, -1*length, source);
109-
this.setSelection(range, Emitter.sources.SILENT);
110-
return change;
106+
return modify.call(this, source, () => {
107+
let range = this.getSelection();
108+
let change = this.editor.deleteText(index, length, source);
109+
range = shiftRange(range, index, -1*length, source);
110+
this.setSelection(range, Emitter.sources.SILENT);
111+
return change;
112+
});
111113
}
112114

113115
disable() {
@@ -128,39 +130,45 @@ class Quill {
128130
}
129131

130132
format(name, value, source = Emitter.sources.API) {
131-
let range = this.getSelection(true);
132-
let change = new Delta();
133-
if (range == null) return change;
134-
if (Parchment.query(name, Parchment.Scope.BLOCK)) {
135-
change = this.formatLine(range, name, value, source);
136-
} else if (range.length === 0) {
137-
this.selection.format(name, value);
133+
return modify.call(this, source, () => {
134+
let range = this.getSelection(true);
135+
let change = new Delta();
136+
if (range == null) return change;
137+
if (Parchment.query(name, Parchment.Scope.BLOCK)) {
138+
change = this.formatLine(range, name, value, source);
139+
} else if (range.length === 0) {
140+
this.selection.format(name, value);
141+
return change;
142+
} else {
143+
change = this.formatText(range, name, value, source);
144+
}
145+
this.setSelection(range, Emitter.sources.SILENT);
138146
return change;
139-
} else {
140-
change = this.formatText(range, name, value, source);
141-
}
142-
this.setSelection(range, Emitter.sources.SILENT);
143-
return change;
147+
});
144148
}
145149

146150
formatLine(index, length, name, value, source) {
147151
let formats;
148152
[index, length, formats, source] = overload(index, length, name, value, source);
149-
let range = this.getSelection();
150-
let change = this.editor.formatLine(index, length, formats, source);
151-
this.selection.setRange(range, true, Emitter.sources.SILENT);
152-
this.selection.scrollIntoView();
153-
return change;
153+
return modify.call(this, source, () => {
154+
let range = this.getSelection();
155+
let change = this.editor.formatLine(index, length, formats, source);
156+
this.selection.setRange(range, true, Emitter.sources.SILENT);
157+
this.selection.scrollIntoView();
158+
return change;
159+
});
154160
}
155161

156162
formatText(index, length, name, value, source) {
157163
let formats;
158164
[index, length, formats, source] = overload(index, length, name, value, source);
159-
let range = this.getSelection();
160-
let change = this.editor.formatText(index, length, formats, source);
161-
this.selection.setRange(range, true, Emitter.sources.SILENT);
162-
this.selection.scrollIntoView();
163-
return change;
165+
return modify.call(this, source, () => {
166+
let range = this.getSelection();
167+
let change = this.editor.formatText(index, length, formats, source);
168+
this.selection.setRange(range, true, Emitter.sources.SILENT);
169+
this.selection.scrollIntoView();
170+
return change;
171+
});
164172
}
165173

166174
getBounds(index, length = 0) {
@@ -208,20 +216,25 @@ class Quill {
208216
}
209217

210218
insertEmbed(index, embed, value, source = Quill.sources.API) {
211-
let range = this.getSelection();
212-
let change = this.editor.insertEmbed(index, embed, value, source);
213-
range = shiftRange(range, change, source);
214-
this.setSelection(range, Emitter.sources.SILENT);
215-
return change;
219+
return modify.call(this, source, () => {
220+
let range = this.getSelection();
221+
let change = this.editor.insertEmbed(index, embed, value, source);
222+
range = shiftRange(range, change, source);
223+
this.setSelection(range, Emitter.sources.SILENT);
224+
return change;
225+
});
216226
}
217227

218228
insertText(index, text, name, value, source) {
219-
let formats, range = this.getSelection();
229+
let formats;
220230
[index, , formats, source] = overload(index, 0, name, value, source);
221-
let change = this.editor.insertText(index, text, formats, source);
222-
range = shiftRange(range, index, text.length, source);
223-
this.setSelection(range, Emitter.sources.SILENT);
224-
return change;
231+
return modify.call(this, source, () => {
232+
let range = this.getSelection();
233+
let change = this.editor.insertText(index, text, formats, source);
234+
range = shiftRange(range, index, text.length, source);
235+
this.setSelection(range, Emitter.sources.SILENT);
236+
return change;
237+
});
225238
}
226239

227240
off() {
@@ -241,15 +254,18 @@ class Quill {
241254
}
242255

243256
removeFormat(index, length, source) {
244-
let range = this.getSelection();
245257
[index, length, , source] = overload(index, length, source);
246-
let change = this.editor.removeFormat(index, length, source);
247-
range = shiftRange(range, change, source);
248-
this.setSelection(range, Emitter.sources.SILENT);
249-
return change;
258+
return modify.call(this, source, () => {
259+
let range = this.getSelection();
260+
let change = this.editor.removeFormat(index, length, source);
261+
range = shiftRange(range, change, source);
262+
this.setSelection(range, Emitter.sources.SILENT);
263+
return change;
264+
});
250265
}
251266

252267
setContents(delta, source = Emitter.sources.API) {
268+
if (this.container.classList.contains('ql-disabled') && source === Emitter.sources.USER) return;
253269
delta = new Delta(delta).slice();
254270
let lastOp = delta.ops[delta.ops.length - 1];
255271
// Quill contents must always end with newline
@@ -282,6 +298,7 @@ class Quill {
282298
}
283299

284300
updateContents(delta, source = Emitter.sources.API) {
301+
if (this.container.classList.contains('ql-disabled') && source === Emitter.sources.USER) return;
285302
let range = this.getSelection();
286303
if (Array.isArray(delta)) {
287304
delta = new Delta(delta.slice());
@@ -372,6 +389,14 @@ function expandConfig(container, userConfig) {
372389
return userConfig;
373390
}
374391

392+
function modify(source, modifier) {
393+
let change = new Delta();
394+
if (this.container.classList.contains('ql-disabled') && source === Emitter.sources.USER) {
395+
return new Delta();
396+
}
397+
return modifier();
398+
}
399+
375400
function overload(index, length, name, value, source) {
376401
let formats = {};
377402
if (typeof index.index === 'number' && typeof index.length === 'number') {

0 commit comments

Comments
 (0)