Files
Housekeeping-web-admin/node_modules/quilljs/lib/quill.js
T
2026-06-24 09:48:54 +02:00

360 lines
10 KiB
JavaScript

var Delta, Editor, EventEmitter2, Format, Quill, Range, dom, pkg, _,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
__slice = [].slice;
_ = require('lodash');
pkg = require('../package.json');
Delta = require('rich-text').Delta;
EventEmitter2 = require('eventemitter2').EventEmitter2;
dom = require('./lib/dom');
Editor = require('./core/editor');
Format = require('./core/format');
Range = require('./lib/range');
Quill = (function(_super) {
__extends(Quill, _super);
Quill.version = pkg.version;
Quill.editors = [];
Quill.modules = [];
Quill.themes = [];
Quill.DEFAULTS = {
formats: ['align', 'bold', 'italic', 'strike', 'underline', 'color', 'background', 'font', 'size', 'link', 'image', 'bullet', 'list'],
modules: {
'keyboard': true,
'paste-manager': true,
'undo-manager': true
},
pollInterval: 100,
readOnly: false,
theme: 'default'
};
Quill.events = {
MODULE_INIT: 'module-init',
POST_EVENT: 'post-event',
PRE_EVENT: 'pre-event',
SELECTION_CHANGE: 'selection-change',
TEXT_CHANGE: 'text-change'
};
Quill.sources = Editor.sources;
Quill.registerModule = function(name, module) {
if (Quill.modules[name] != null) {
console.warn("Overwriting " + name + " module");
}
return Quill.modules[name] = module;
};
Quill.registerTheme = function(name, theme) {
if (Quill.themes[name] != null) {
console.warn("Overwriting " + name + " theme");
}
return Quill.themes[name] = theme;
};
Quill.require = function(name) {
switch (name) {
case 'lodash':
return _;
case 'delta':
return Delta;
case 'dom':
return dom;
default:
return null;
}
};
function Quill(container, options) {
var html, moduleOptions, themeClass;
if (options == null) {
options = {};
}
if (_.isString(container)) {
container = document.querySelector(container);
}
if (container == null) {
throw new Error('Invalid Quill container');
}
moduleOptions = _.defaults(options.modules || {}, Quill.DEFAULTS.modules);
html = container.innerHTML;
this.options = _.defaults(options, Quill.DEFAULTS);
this.options.modules = moduleOptions;
this.options.id = this.id = "quill-" + (Quill.editors.length + 1);
this.options.emitter = this;
this.modules = {};
this.editor = new Editor(container, this, this.options);
this.root = this.editor.doc.root;
Quill.editors.push(this);
this.setHTML(html, Quill.sources.SILENT);
themeClass = Quill.themes[this.options.theme];
if (themeClass == null) {
throw new Error("Cannot load " + this.options.theme + " theme. Are you sure you registered it?");
}
this.theme = new themeClass(this, this.options);
_.each(this.options.modules, (function(_this) {
return function(option, name) {
return _this.addModule(name, option);
};
})(this));
}
Quill.prototype.addContainer = function(className, before) {
if (before == null) {
before = false;
}
return this.editor.renderer.addContainer(className, before);
};
Quill.prototype.addFormat = function(name, format) {
return this.editor.doc.addFormat(name, format);
};
Quill.prototype.addModule = function(name, options) {
var moduleClass;
moduleClass = Quill.modules[name];
if (moduleClass == null) {
throw new Error("Cannot load " + name + " module. Are you sure you registered it?");
}
if (!_.isObject(options)) {
options = {};
}
options = _.defaults(options, this.theme.constructor.OPTIONS[name] || {}, moduleClass.DEFAULTS || {});
this.modules[name] = new moduleClass(this, options);
this.emit(Quill.events.MODULE_INIT, name, this.modules[name]);
return this.modules[name];
};
Quill.prototype.addStyles = function(styles) {
return this.editor.renderer.addStyles(styles);
};
Quill.prototype.deleteText = function(start, end, source) {
var delta, formats, _ref;
if (source == null) {
source = Quill.sources.API;
}
_ref = this._buildParams(start, end, {}, source), start = _ref[0], end = _ref[1], formats = _ref[2], source = _ref[3];
if (!(end > start)) {
return;
}
delta = new Delta().retain(start)["delete"](end - start);
return this.editor.applyDelta(delta, source);
};
Quill.prototype.emit = function() {
var args, eventName;
eventName = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
Quill.__super__.emit.apply(this, [Quill.events.PRE_EVENT, eventName].concat(__slice.call(args)));
Quill.__super__.emit.apply(this, [eventName].concat(__slice.call(args)));
return Quill.__super__.emit.apply(this, [Quill.events.POST_EVENT, eventName].concat(__slice.call(args)));
};
Quill.prototype.focus = function() {
return this.editor.focus();
};
Quill.prototype.formatLine = function(start, end, name, value, source) {
var formats, line, offset, _ref, _ref1;
_ref = this._buildParams(start, end, name, value, source), start = _ref[0], end = _ref[1], formats = _ref[2], source = _ref[3];
_ref1 = this.editor.doc.findLineAt(end), line = _ref1[0], offset = _ref1[1];
if (line != null) {
end += line.length - offset;
}
return this.formatText(start, end, formats, source);
};
Quill.prototype.formatText = function(start, end, name, value, source) {
var delta, formats, _ref;
_ref = this._buildParams(start, end, name, value, source), start = _ref[0], end = _ref[1], formats = _ref[2], source = _ref[3];
formats = _.reduce(formats, (function(_this) {
return function(formats, value, name) {
var format;
format = _this.editor.doc.formats[name];
if (!(value && value !== format.config["default"])) {
formats[name] = null;
}
return formats;
};
})(this), formats);
delta = new Delta().retain(start).retain(end - start, formats);
return this.editor.applyDelta(delta, source);
};
Quill.prototype.getContents = function(start, end) {
if (start == null) {
start = 0;
}
if (end == null) {
end = null;
}
if (_.isObject(start)) {
end = start.end;
start = start.start;
}
return this.editor.getDelta().slice(start, end);
};
Quill.prototype.getHTML = function() {
return this.root.innerHTML;
};
Quill.prototype.getLength = function() {
return this.editor.getDelta().length();
};
Quill.prototype.getModule = function(name) {
return this.modules[name];
};
Quill.prototype.getSelection = function() {
this.editor.checkUpdate();
return this.editor.selection.getRange();
};
Quill.prototype.getText = function(start, end) {
if (start == null) {
start = 0;
}
if (end == null) {
end = null;
}
return _.map(this.getContents(start, end).ops, function(op) {
if (_.isString(op.insert)) {
return op.insert;
} else {
return '';
}
}).join('');
};
Quill.prototype.insertEmbed = function(index, type, url, source) {
return this.insertText(index, dom.EMBED_TEXT, type, url, source);
};
Quill.prototype.insertText = function(index, text, name, value, source) {
var delta, end, formats, _ref;
_ref = this._buildParams(index, 0, name, value, source), index = _ref[0], end = _ref[1], formats = _ref[2], source = _ref[3];
if (!(text.length > 0)) {
return;
}
delta = new Delta().retain(index).insert(text, formats);
return this.editor.applyDelta(delta, source);
};
Quill.prototype.onModuleLoad = function(name, callback) {
if (this.modules[name]) {
return callback(this.modules[name]);
}
return this.on(Quill.events.MODULE_INIT, function(moduleName, module) {
if (moduleName === name) {
return callback(module);
}
});
};
Quill.prototype.prepareFormat = function(name, value) {
var format, range;
format = this.editor.doc.formats[name];
if (format == null) {
return;
}
range = this.getSelection();
if (!(range != null ? range.isCollapsed() : void 0)) {
return;
}
if (format.isType(Format.types.LINE)) {
return this.formatLine(range, name, value, Quill.sources.USER);
} else {
return format.prepare(value);
}
};
Quill.prototype.setContents = function(delta, source) {
if (source == null) {
source = Quill.sources.API;
}
if (_.isArray(delta)) {
delta = {
ops: delta
};
}
delta.ops.unshift({
"delete": this.getLength()
});
return this.updateContents(delta, source);
};
Quill.prototype.setHTML = function(html, source) {
if (source == null) {
source = Quill.sources.API;
}
if (!html) {
html = "<" + dom.DEFAULT_BLOCK_TAG + "><" + dom.DEFAULT_BREAK_TAG + "></" + dom.DEFAULT_BLOCK_TAG + ">";
}
this.editor.doc.setHTML(html);
return this.editor.checkUpdate(source);
};
Quill.prototype.setSelection = function(start, end, source) {
var range;
if (source == null) {
source = Quill.sources.API;
}
if (_.isNumber(start) && _.isNumber(end)) {
range = new Range(start, end);
} else {
range = start;
source = end || source;
}
return this.editor.selection.setRange(range, source);
};
Quill.prototype.updateContents = function(delta, source) {
if (source == null) {
source = Quill.sources.API;
}
return this.editor.applyDelta(delta, source);
};
Quill.prototype._buildParams = function() {
var formats, params;
params = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
if (_.isObject(params[0])) {
params.splice(0, 1, params[0].start, params[0].end);
}
if (_.isString(params[2])) {
formats = {};
formats[params[2]] = params[3];
params.splice(2, 2, formats);
}
if (params[3] == null) {
params[3] = Quill.sources.API;
}
return params;
};
return Quill;
})(EventEmitter2);
Quill.registerTheme('default', require('./themes/default'));
Quill.registerTheme('snow', require('./themes/snow'));
module.exports = Quill;