UNPKG

slate-style-plugin

Version:

It is a plugin for generating inline-style formats conveniently

158 lines (127 loc) 4.98 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (factory((global.SlateStylePlugin = global.SlateStylePlugin || {}))); }(this, (function (exports) { 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /** * Slate-Style-Plugin * 便于添加行内样式功能 * * @constructor */ /* eslint-disable consistent-return */ /* eslint-disable no-useless-escape */ var StylePlugin = { single: function single(style) { if (!style.mark || !style.type) { throw new Error("`mark` and `type` properties should be included in first parameter!"); } return { schema: { marks: _defineProperty({}, style.type, style.mark) }, onKeyDown: function onKeyDown(event, data, state) { var isCtrl = style.isCtrl || false; var isShift = style.isShift || false; if (style.key === data.key && data.isCmd && data.isCtrl === isCtrl && data.isShift === isShift) { event.preventDefault(); return state.transform().toggleMark(style.type).apply(); } } }; }, group: function group(styles) { var schema = { marks: {} }; var types = []; for (var i = 0, len = styles.length; i < len; i++) { var style = styles[i]; if (!style.mark || !style.type) { throw new Error("`mark` and `type` properties should be included in first parameter!"); } schema.marks[style.type] = style.mark; types.push(style.type); } return { schema: schema, onKeyDown: function onKeyDown(event, data, state) { var _loop = function _loop(_i, _len) { var style = styles[_i]; var isCtrl = style.isCtrl || false; var isShift = style.isShift || false; var isDefault = style.isDefault || false; var hasMark = state.marks.some(function (mark) { return mark.type === style.type; }); if (style.key === data.key && data.isCmd && data.isCtrl === isCtrl && data.isShift === isShift) { event.preventDefault(); var transform = state.transform(); for (var j = 0; j < _len; j++) { if (_i === j && hasMark && !isDefault) { transform = transform.toggleMark(types[j]); } else if (_i === j && !hasMark && !isDefault) { transform = transform.addMark(types[j]); } else { transform = transform.removeMark(types[j]); } } return { v: transform.apply() }; } }; for (var _i = 0, _len = styles.length; _i < _len; _i++) { var _ret = _loop(_i, _len); if ((typeof _ret === "undefined" ? "undefined" : _typeof(_ret)) === "object") return _ret.v; } } }; } /** * 变化 style 的快捷函数 */ };var toggleStyle = { single: function single(type, state, onChange) { if (!state) { throw new Error("`state` parameter can\'t be Void!"); } return function (e) { // 阻止默认事件 e.preventDefault(); var res = state.transform().toggleMark(type).apply(); return onChange ? onChange(res) : res; }; }, group: function group(types, state, onChange) { if (!state) { throw new Error("`state` parameter can\'t be Void!"); } return function (type) { var isDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (!type) { throw new Error("`type` parameter can\'t be Void!"); } return function (e) { e.preventDefault(); var hasMark = state.marks.some(function (mark) { return mark.type === type; }); var transform = state.transform(); for (var i = 0, len = types.length; i < len; i++) { if (type === types[i] && hasMark && !isDefault) { transform = transform.toggleMark(types[i]); } else if (type === types[i] && !hasMark && !isDefault) { transform = transform.addMark(types[i]); } else { transform = transform.removeMark(types[i]); } } var res = transform.apply(); return onChange ? onChange(res) : res; }; }; } }; exports['default'] = StylePlugin; exports.toggleStyle = toggleStyle; Object.defineProperty(exports, '__esModule', { value: true }); })));