@opentiny/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.
57 lines (56 loc) • 2.23 kB
JavaScript
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
import Quill from "quill";
import { sanitize } from "../../../config/editor.utils.es.js";
const Embed = Quill.import("blots/embed");
const FILE_ATTRIBUTES = ["id", "title", "size", "lastModified"];
class File extends Embed {
static create(value) {
const node = super.create(value);
const size = value.size / 1024;
const fixSize = !size ? 0 : size < 1 ? 1 : size.toFixed(0);
node.classList.add("icon-file");
node.setAttribute("contenteditable", "false");
const fileSvg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326z m1.8 562H232V136h302v216c0 23.2 18.8 42 42 42h216v494z" p-id="2307"></path></svg>';
node.innerHTML = `${fileSvg} ${value.title} (${fixSize} KB)`;
const src = this.sanitize(value.src);
if (src) {
node.href = src;
node.target = "_blank";
}
FILE_ATTRIBUTES.forEach((key) => {
if (value[key]) {
node.dataset[key] = value[key];
}
});
return node;
}
static value(domNode) {
return this.getFormats(domNode);
}
static getFormats(domNode) {
const formats = {};
const href = this.sanitize(domNode.href);
if (href) {
formats.src = href;
}
FILE_ATTRIBUTES.forEach((key) => {
if (domNode.dataset[key]) {
formats[key] = domNode.dataset[key];
}
});
return formats;
}
static sanitize(url) {
return sanitize(url, this.PROTOCOL_WHITELIST) && url || "";
}
}
__publicField(File, "blotName", "file");
__publicField(File, "tagName", "A");
__publicField(File, "className", "ql-file-item");
__publicField(File, "PROTOCOL_WHITELIST", ["http", "https", "blob"]);
export {
File
};
//# sourceMappingURL=file.es.js.map