UNPKG

@atlaskit/editor-plugin-rule

Version:

Rule plugin for @atlaskit/editor-core

74 lines (73 loc) • 2.61 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.RuleNodeView = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _bindEventListener = require("bind-event-listener"); var _model = require("@atlaskit/editor-prosemirror/model"); var ruleNodeViewAttribute = 'data-rule-node-view'; var RuleNodeView = exports.RuleNodeView = /*#__PURE__*/function () { function RuleNodeView(node, view) { var _this = this; (0, _classCallCheck2.default)(this, RuleNodeView); // when there is only 1 rule node on the page and it is not editable, clicking on it does not focus the editor and Cmd+C/ Ctrl+C shortcut will not work. this mouse down listener adds focus to the editor. (0, _defineProperty2.default)(this, "handleMousedown", function () { if (!_this.view.hasFocus()) { _this.view.focus(); } }); this.node = node; this.view = view; var dom = this.view.dom.ownerDocument.createElement('div'); this.dom = dom; dom.setAttribute(ruleNodeViewAttribute, ''); dom.setAttribute('contenteditable', 'inherit'); this.unbindMousedown = (0, _bindEventListener.bind)(dom, { type: 'mousedown', listener: this.handleMousedown }); this.update(node); } return (0, _createClass2.default)(RuleNodeView, [{ key: "update", value: function update(node) { if (node.type !== this.node.type) { return false; } if (this.dom.firstChild && node.sameMarkup(this.node)) { this.node = node; return true; } var toDOM = node.type.spec.toDOM; if (!toDOM) { return false; } var _DOMSerializer$render = _model.DOMSerializer.renderSpec(this.view.dom.ownerDocument, toDOM(node)), dom = _DOMSerializer$render.dom; if (dom instanceof HTMLElement) { dom.contentEditable = 'false'; } if (this.dom.firstChild) { this.dom.replaceChild(dom, this.dom.firstChild); } else { this.dom.appendChild(dom); } this.node = node; return true; } }, { key: "ignoreMutation", value: function ignoreMutation() { return true; } }, { key: "destroy", value: function destroy() { this.unbindMousedown(); } }]); }();