react-simple-wysiwyg
Version:
Simple and lightweight React WYSIWYG editor
87 lines • 2.73 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
function compare(a, b, keys) {
return keys.every(function (key) {
return a[key] === b[key];
});
}
exports.compare = compare;
function deepMerge(target) {
var _a, _b;
var sources = [];
for (var _i = 1; _i < arguments.length; _i++) {
sources[_i - 1] = arguments[_i];
}
if (!sources.length) {
return target;
}
var source = sources.shift();
if (isObject(target) && isObject(source)) {
for (var key in source) {
if (!source.hasOwnProperty(key)) {
continue;
}
if (isObject(source[key])) {
if (!target[key]) {
Object.assign(target, (_a = {}, _a[key] = {}, _a));
}
deepMerge(target[key], source[key]);
}
else {
Object.assign(target, (_b = {}, _b[key] = source[key], _b));
}
}
}
return deepMerge.apply(void 0, [target].concat(sources));
}
exports.deepMerge = deepMerge;
function findLastTextNode(node) {
if (node.nodeType === Node.TEXT_NODE) {
return node;
}
var children = node.childNodes;
for (var i = children.length - 1; i >= 0; i--) {
var textNode = findLastTextNode(children[i]);
if (textNode !== null) {
return textNode;
}
}
return null;
}
exports.findLastTextNode = findLastTextNode;
function getSelectedNode() {
if (document.selection) {
return document.selection.createRange().parentElement();
}
var selection = window.getSelection();
if (selection.rangeCount > 0) {
return selection.getRangeAt(0).startContainer.parentNode;
}
}
exports.getSelectedNode = getSelectedNode;
function isObject(item) {
return (item && typeof item === 'object' && !Array.isArray(item));
}
function normalizeHtml(str) {
return str && str.replace(/ |\u202F|\u00A0/g, ' ');
}
exports.normalizeHtml = normalizeHtml;
function replaceCaret(el) {
// Place the caret at the end of the element
var target = findLastTextNode(el);
// do not move caret if element was not focused
var isTargetFocused = document.activeElement === el;
if (target !== null && target.nodeValue !== null && isTargetFocused) {
var range = document.createRange();
var sel = window.getSelection();
range.setStart(target, target.nodeValue.length);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
if (el instanceof HTMLElement) {
el.focus();
}
}
}
exports.replaceCaret = replaceCaret;
//# sourceMappingURL=utils.js.map
;