Files
wdi-dashboard/node_modules/quilljs/lib/modules/keyboard.js
2024-08-16 15:06:52 +05:30

156 lines
4.1 KiB
JavaScript

var Delta, Keyboard, Quill, dom, _;
Quill = require('../quill');
_ = Quill.require('lodash');
dom = Quill.require('dom');
Delta = Quill.require('delta');
Keyboard = (function() {
Keyboard.hotkeys = {
BOLD: {
key: 'B',
metaKey: true
},
INDENT: {
key: dom.KEYS.TAB
},
ITALIC: {
key: 'I',
metaKey: true
},
OUTDENT: {
key: dom.KEYS.TAB,
shiftKey: true
},
UNDERLINE: {
key: 'U',
metaKey: true
}
};
function Keyboard(quill, options) {
this.quill = quill;
this.hotkeys = {};
this._initListeners();
this._initHotkeys();
this._initDeletes();
}
Keyboard.prototype.addHotkey = function(hotkeys, callback) {
if (!_.isArray(hotkeys)) {
hotkeys = [hotkeys];
}
return _.each(hotkeys, (function(_this) {
return function(hotkey) {
var which, _base;
hotkey = _.isObject(hotkey) ? _.clone(hotkey) : {
key: hotkey
};
hotkey.callback = callback;
which = _.isNumber(hotkey.key) ? hotkey.key : hotkey.key.toUpperCase().charCodeAt(0);
if ((_base = _this.hotkeys)[which] == null) {
_base[which] = [];
}
return _this.hotkeys[which].push(hotkey);
};
})(this));
};
Keyboard.prototype.toggleFormat = function(range, format) {
var delta, toolbar, value;
if (range.isCollapsed()) {
delta = this.quill.getContents(Math.max(0, range.start - 1), range.end);
} else {
delta = this.quill.getContents(range);
}
value = delta.ops.length === 0 || !_.all(delta.ops, function(op) {
var _ref;
return (_ref = op.attributes) != null ? _ref[format] : void 0;
});
if (range.isCollapsed()) {
this.quill.prepareFormat(format, value);
} else {
this.quill.formatText(range, format, value, 'user');
}
toolbar = this.quill.getModule('toolbar');
if (toolbar != null) {
return toolbar.setActive(format, value);
}
};
Keyboard.prototype._initDeletes = function() {
return this.addHotkey([dom.KEYS.DELETE, dom.KEYS.BACKSPACE], (function(_this) {
return function() {
return _this.quill.getLength() > 1;
};
})(this));
};
Keyboard.prototype._initHotkeys = function() {
this.addHotkey(Keyboard.hotkeys.INDENT, (function(_this) {
return function(range) {
_this._onTab(range, false);
return false;
};
})(this));
this.addHotkey(Keyboard.hotkeys.OUTDENT, (function(_this) {
return function(range) {
return false;
};
})(this));
return _.each(['bold', 'italic', 'underline'], (function(_this) {
return function(format) {
return _this.addHotkey(Keyboard.hotkeys[format.toUpperCase()], function(range) {
_this.toggleFormat(range, format);
return false;
});
};
})(this));
};
Keyboard.prototype._initListeners = function() {
return dom(this.quill.root).on('keydown', (function(_this) {
return function(event) {
var prevent;
prevent = false;
_.each(_this.hotkeys[event.which], function(hotkey) {
var metaKey;
metaKey = dom.isMac() ? event.metaKey : event.metaKey || event.ctrlKey;
if (!!hotkey.metaKey !== !!metaKey) {
return;
}
if (!!hotkey.shiftKey !== !!event.shiftKey) {
return;
}
if (!!hotkey.altKey !== !!event.altKey) {
return;
}
prevent = hotkey.callback(_this.quill.getSelection()) === false || prevent;
return true;
});
return !prevent;
};
})(this));
};
Keyboard.prototype._onTab = function(range, shift) {
var delta;
if (shift == null) {
shift = false;
}
delta = new Delta().retain(range.start).insert("\t")["delete"](range.end - range.start).retain(this.quill.getLength() - range.end);
this.quill.updateContents(delta);
return this.quill.setSelection(range.start + 1, range.start + 1);
};
return Keyboard;
})();
Quill.registerModule('keyboard', Keyboard);
module.exports = Keyboard;