@leoyin/fluent-editor
Version:
A rich text editor based on Quill 2.0, which extends rich modules and formats on the basis of Quill. It's powerful and out-of-the-box.
138 lines (137 loc) • 4.28 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const Quill = require("quill");
const Delta = Quill.import("delta");
function hexToRgbA(hex) {
let color;
if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {
color = hex.substring(1).split("");
if (color.length === 3) {
color = [color[0], color[0], color[1], color[1], color[2], color[2]];
}
color = `0x${color.join("")}`;
return `rgba(${[color >> 16 & 255, color >> 8 & 255, color & 255].join(",")},1)`;
}
}
function imageFileToUrl(imageFile) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(imageFile);
reader.onload = function(e) {
resolve(e.target.result);
};
reader.onerror = reject;
}).catch((error) => {
console.error("Error reading file:", error);
});
}
function imageUrlToFile(imageUrl, isErrorImage) {
return new Promise((resolve, reject) => {
fetch(imageUrl, {
method: "get",
mode: "no-cors"
}).then((res) => res.blob()).then((blob) => {
if (!blob.type.includes("image") || !blob.type) {
return reject();
}
const fileType = blob.type.replace(/^.*\//, "");
const fileName = isErrorImage ? "editorx-error-image.png" : `image-${(/* @__PURE__ */ new Date()).getTime()}.${fileType}`;
const file = new File([blob], fileName, blob);
resolve(file);
}).catch(reject);
});
}
function isNullOrUndefined(param) {
return param === null || param === void 0;
}
function omit(obj, uselessKeys) {
return obj && Object.keys(obj).reduce((acc, key) => {
return uselessKeys.includes(key) ? acc : { ...acc, [key]: obj[key] };
}, {});
}
function replaceDeltaImage(delta, imageUrls, imagePlaceholder) {
let imageIndex = 0;
return delta.reduce((newDelta, op) => {
if (op.insert.image && !op.insert.image.hasExisted) {
const attributes = imagePlaceholder[imageIndex] ? { ...op.attributes, width: "auto", height: 225 } : op.attributes;
newDelta.insert({ image: imageUrls[imageIndex] }, attributes);
imageIndex++;
} else {
newDelta.insert(op.insert, op.attributes);
}
return newDelta;
}, new Delta());
}
function splitWithBreak(insertContent) {
const lines = [];
const insertStr = insertContent;
let start = 0;
for (let i = 0; i < insertContent.length; i++) {
if (insertStr.charAt(i) === "\n") {
if (i === 0) {
lines.push("\n");
} else {
lines.push(insertStr.substring(start, i));
lines.push("\n");
}
start = i + 1;
}
}
const tailStr = insertStr.substring(start);
if (tailStr) {
lines.push(tailStr);
}
return lines;
}
function getEventComposedPath(evt) {
let path;
path = evt.path || evt.composedPath && evt.composedPath();
if (path === void 0 && evt.target) {
path = [];
let target = evt.target;
path.push(target);
while (target && target.parentNode) {
target = target.parentNode;
path.push(target);
}
}
return path;
}
function sanitize(url, protocols) {
const anchor = document.createElement("a");
anchor.href = url;
const protocol = anchor.href.slice(0, anchor.href.indexOf(":"));
return protocols.includes(protocol);
}
function hadProtocol(url) {
if (!url || !/^(?:f|ht)tps?\:\/\//.test(url)) {
return false;
}
return true;
}
function isInside(position, dom) {
const areaPosition = dom.getBoundingClientRect();
const { pageX, pageY } = position;
const left = pageX - window.scrollX;
const top = pageY - window.scrollY;
const {
left: areaLeft,
top: areaTop,
width: areaWidth,
height: areaHeight
} = areaPosition;
const inside = left > areaLeft && left < areaLeft + areaWidth && top > areaTop && top < areaTop + areaHeight;
return inside;
}
exports.getEventComposedPath = getEventComposedPath;
exports.hadProtocol = hadProtocol;
exports.hexToRgbA = hexToRgbA;
exports.imageFileToUrl = imageFileToUrl;
exports.imageUrlToFile = imageUrlToFile;
exports.isInside = isInside;
exports.isNullOrUndefined = isNullOrUndefined;
exports.omit = omit;
exports.replaceDeltaImage = replaceDeltaImage;
exports.sanitize = sanitize;
exports.splitWithBreak = splitWithBreak;
//# sourceMappingURL=editor.utils.cjs.js.map