@atlaskit/editor-plugin-rule
Version:
Rule plugin for @atlaskit/editor-core
74 lines (73 loc) • 2.61 kB
JavaScript
"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();
}
}]);
}();