@opentiny/fluent-editor 3.20.0 → 3.20.2-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/attributors/index.es.js +1 -1
- package/es/config/base64-image.es.js.map +1 -1
- package/es/config/editor.config.es.js.map +1 -1
- package/es/config/editor.utils.es.js +12 -12
- package/es/config/editor.utils.es.js.map +1 -1
- package/es/{config.es.js → config/index.es.js} +14 -7
- package/es/config/index.es.js.map +1 -0
- package/es/config/types/index.es.js +2 -2
- package/es/counter/index.es.js +2 -1
- package/es/counter/index.es.js.map +1 -1
- package/es/custom-clipboard.es.js +14 -14
- package/es/custom-clipboard.es.js.map +1 -1
- package/es/custom-image/BlotFormatter.es.js +1 -1
- package/es/custom-image/BlotFormatter.es.js.map +1 -1
- package/es/custom-image/actions/CustomResizeAction.es.js +6 -4
- package/es/custom-image/actions/CustomResizeAction.es.js.map +1 -1
- package/es/custom-image/image.es.js +3 -3
- package/es/custom-image/image.es.js.map +1 -1
- package/es/custom-image/specs/BlotSpec.es.js.map +1 -1
- package/es/custom-uploader.es.js +4 -7
- package/es/custom-uploader.es.js.map +1 -1
- package/es/emoji/emoji-list/people.es.js.map +1 -1
- package/es/emoji/formats/emoji-blot.es.js +2 -2
- package/es/emoji/formats/emoji-blot.es.js.map +1 -1
- package/es/emoji/modules/emoji.es.js +7 -7
- package/es/emoji/modules/emoji.es.js.map +1 -1
- package/es/emoji/modules/toolbar-emoji.es.js +15 -15
- package/es/emoji/modules/toolbar-emoji.es.js.map +1 -1
- package/es/file/modules/file-bar.es.js +3 -3
- package/es/file/modules/file-bar.es.js.map +1 -1
- package/es/fluent-editor.es.js +4 -4
- package/es/fluent-editor.es.js.map +1 -1
- package/es/format-painter/index.es.js.map +1 -1
- package/es/global-link/formats/work-item-link.es.js.map +1 -1
- package/es/global-link/index.es.js +1 -1
- package/es/global-link/index.es.js.map +1 -1
- package/es/index.es.js +17 -1
- package/es/index.es.js.map +1 -1
- package/es/link/formats/link.es.js +1 -1
- package/es/link/formats/link.es.js.map +1 -1
- package/es/link/index.es.js.map +1 -1
- package/es/link/modules/tooltip.es.js +3 -3
- package/es/link/modules/tooltip.es.js.map +1 -1
- package/es/mention/Mention.es.js +7 -12
- package/es/mention/Mention.es.js.map +1 -1
- package/es/quick-menu/index.es.js +1 -1
- package/es/quick-menu/index.es.js.map +1 -1
- package/es/screenshot/index.es.js +42 -7
- package/es/screenshot/index.es.js.map +1 -1
- package/es/strike/index.es.js.map +1 -1
- package/es/syntax/index.es.js.map +1 -1
- package/es/table/better-table.es.js +4 -5
- package/es/table/better-table.es.js.map +1 -1
- package/es/table/formats/list.es.js +3 -3
- package/es/table/formats/list.es.js.map +1 -1
- package/es/table/formats/table.es.js +26 -27
- package/es/table/formats/table.es.js.map +1 -1
- package/es/table/modules/table-column-tool.es.js +8 -8
- package/es/table/modules/table-column-tool.es.js.map +1 -1
- package/es/table/modules/table-operation-menu.es.js +7 -8
- package/es/table/modules/table-operation-menu.es.js.map +1 -1
- package/es/table/modules/table-scroll-bar.es.js +1 -1
- package/es/table/modules/table-scroll-bar.es.js.map +1 -1
- package/es/table/modules/table-selection.es.js +0 -1
- package/es/table/modules/table-selection.es.js.map +1 -1
- package/es/table/utils/node-matchers.es.js +14 -14
- package/es/table/utils/node-matchers.es.js.map +1 -1
- package/es/toolbar/better-picker.es.js.map +1 -1
- package/es/toolbar/index.es.js +1 -1
- package/es/toolbar/index.es.js.map +1 -1
- package/es/utils/debounce.es.js.map +1 -1
- package/es/utils/image.es.js +26 -0
- package/es/utils/image.es.js.map +1 -0
- package/es/utils/method.es.js +2 -2
- package/es/utils/method.es.js.map +1 -1
- package/es/utils/scroll-lock.es.js +47 -0
- package/es/utils/scroll-lock.es.js.map +1 -0
- package/es/video/index.es.js +6 -3
- package/es/video/index.es.js.map +1 -1
- package/lib/attributors/index.cjs.js +2 -2
- package/lib/config/base64-image.cjs.js.map +1 -1
- package/lib/config/editor.config.cjs.js.map +1 -1
- package/lib/config/editor.utils.cjs.js +12 -12
- package/lib/config/editor.utils.cjs.js.map +1 -1
- package/lib/{config.cjs.js → config/index.cjs.js} +27 -21
- package/lib/config/index.cjs.js.map +1 -0
- package/lib/config/types/index.cjs.js +2 -2
- package/lib/counter/index.cjs.js +5 -4
- package/lib/counter/index.cjs.js.map +1 -1
- package/lib/custom-clipboard.cjs.js +14 -14
- package/lib/custom-clipboard.cjs.js.map +1 -1
- package/lib/custom-image/BlotFormatter.cjs.js +1 -1
- package/lib/custom-image/BlotFormatter.cjs.js.map +1 -1
- package/lib/custom-image/actions/CustomResizeAction.cjs.js +6 -4
- package/lib/custom-image/actions/CustomResizeAction.cjs.js.map +1 -1
- package/lib/custom-image/image.cjs.js +3 -3
- package/lib/custom-image/image.cjs.js.map +1 -1
- package/lib/custom-image/specs/BlotSpec.cjs.js.map +1 -1
- package/lib/custom-uploader.cjs.js +4 -7
- package/lib/custom-uploader.cjs.js.map +1 -1
- package/lib/emoji/emoji-list/people.cjs.js.map +1 -1
- package/lib/emoji/formats/emoji-blot.cjs.js +2 -2
- package/lib/emoji/formats/emoji-blot.cjs.js.map +1 -1
- package/lib/emoji/modules/emoji.cjs.js +7 -7
- package/lib/emoji/modules/emoji.cjs.js.map +1 -1
- package/lib/emoji/modules/toolbar-emoji.cjs.js +15 -15
- package/lib/emoji/modules/toolbar-emoji.cjs.js.map +1 -1
- package/lib/file/modules/file-bar.cjs.js +3 -3
- package/lib/file/modules/file-bar.cjs.js.map +1 -1
- package/lib/fluent-editor.cjs.js +32 -32
- package/lib/fluent-editor.cjs.js.map +1 -1
- package/lib/format-painter/index.cjs.js.map +1 -1
- package/lib/global-link/formats/work-item-link.cjs.js.map +1 -1
- package/lib/global-link/index.cjs.js +1 -1
- package/lib/global-link/index.cjs.js.map +1 -1
- package/lib/index.cjs.js +16 -0
- package/lib/index.cjs.js.map +1 -1
- package/lib/link/formats/link.cjs.js +1 -1
- package/lib/link/formats/link.cjs.js.map +1 -1
- package/lib/link/index.cjs.js.map +1 -1
- package/lib/link/modules/tooltip.cjs.js +3 -3
- package/lib/link/modules/tooltip.cjs.js.map +1 -1
- package/lib/mention/Mention.cjs.js +7 -12
- package/lib/mention/Mention.cjs.js.map +1 -1
- package/lib/quick-menu/index.cjs.js +1 -1
- package/lib/quick-menu/index.cjs.js.map +1 -1
- package/lib/screenshot/index.cjs.js +44 -9
- package/lib/screenshot/index.cjs.js.map +1 -1
- package/lib/strike/index.cjs.js.map +1 -1
- package/lib/syntax/index.cjs.js.map +1 -1
- package/lib/table/better-table.cjs.js +4 -5
- package/lib/table/better-table.cjs.js.map +1 -1
- package/lib/table/formats/list.cjs.js +3 -3
- package/lib/table/formats/list.cjs.js.map +1 -1
- package/lib/table/formats/table.cjs.js +26 -27
- package/lib/table/formats/table.cjs.js.map +1 -1
- package/lib/table/modules/table-column-tool.cjs.js +8 -8
- package/lib/table/modules/table-column-tool.cjs.js.map +1 -1
- package/lib/table/modules/table-operation-menu.cjs.js +7 -8
- package/lib/table/modules/table-operation-menu.cjs.js.map +1 -1
- package/lib/table/modules/table-scroll-bar.cjs.js +1 -1
- package/lib/table/modules/table-scroll-bar.cjs.js.map +1 -1
- package/lib/table/modules/table-selection.cjs.js +0 -1
- package/lib/table/modules/table-selection.cjs.js.map +1 -1
- package/lib/table/utils/node-matchers.cjs.js +14 -14
- package/lib/table/utils/node-matchers.cjs.js.map +1 -1
- package/lib/toolbar/better-picker.cjs.js.map +1 -1
- package/lib/toolbar/index.cjs.js +1 -1
- package/lib/toolbar/index.cjs.js.map +1 -1
- package/lib/utils/debounce.cjs.js.map +1 -1
- package/lib/utils/image.cjs.js +26 -0
- package/lib/utils/image.cjs.js.map +1 -0
- package/lib/utils/method.cjs.js +2 -2
- package/lib/utils/method.cjs.js.map +1 -1
- package/lib/utils/scroll-lock.cjs.js +47 -0
- package/lib/utils/scroll-lock.cjs.js.map +1 -0
- package/lib/video/index.cjs.js +6 -3
- package/lib/video/index.cjs.js.map +1 -1
- package/package.json +16 -28
- package/{theme/style.css → style.css} +86 -17
- package/es/config.es.js.map +0 -1
- package/es/types/vue.d.es.js +0 -2
- package/es/types/vue.d.es.js.map +0 -1
- package/lib/config.cjs.js.map +0 -1
- package/lib/types/vue.d.cjs.js +0 -2
- package/lib/types/vue.d.cjs.js.map +0 -1
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
3
3
|
const Quill = require("quill");
|
|
4
4
|
const editor_config = require("./config/editor.config.cjs.js");
|
|
5
5
|
const Uploader = Quill.imports["modules/uploader"];
|
|
6
|
-
const Delta = Quill.
|
|
6
|
+
const Delta = Quill.import("delta");
|
|
7
7
|
class CustomUploader extends Uploader {
|
|
8
8
|
constructor() {
|
|
9
9
|
super(...arguments);
|
|
@@ -14,10 +14,7 @@ class CustomUploader extends Uploader {
|
|
|
14
14
|
return acceptArr.some((type) => {
|
|
15
15
|
const validType = type.trim();
|
|
16
16
|
if (validType.startsWith(".")) {
|
|
17
|
-
return file.name.toLowerCase().
|
|
18
|
-
validType.toLowerCase(),
|
|
19
|
-
file.name.toLowerCase().length - validType.toLowerCase().length
|
|
20
|
-
) > -1;
|
|
17
|
+
return file.name.toLowerCase().includes(validType.toLowerCase(), file.name.toLowerCase().length - validType.toLowerCase().length);
|
|
21
18
|
} else if (/\/\*$/.test(validType)) {
|
|
22
19
|
return baseMimeType === validType.replace(/\/.*$/, "");
|
|
23
20
|
}
|
|
@@ -101,7 +98,7 @@ class CustomUploader extends Uploader {
|
|
|
101
98
|
handleUploadImage(range, { file, files }, hasRejectedImage) {
|
|
102
99
|
var _a, _b, _c;
|
|
103
100
|
if ((_a = this.quill.options.uploadOption) == null ? void 0 : _a.imageUpload) {
|
|
104
|
-
const imageEnableMultiUpload = this.enableMultiUpload === true || ((_b = this.enableMultiUpload) == null ? void 0 : _b
|
|
101
|
+
const imageEnableMultiUpload = this.enableMultiUpload === true || ((_b = this.enableMultiUpload) == null ? void 0 : _b.image);
|
|
105
102
|
const result = {
|
|
106
103
|
file,
|
|
107
104
|
data: { files: [file] },
|
|
@@ -118,7 +115,7 @@ class CustomUploader extends Uploader {
|
|
|
118
115
|
}
|
|
119
116
|
};
|
|
120
117
|
if (imageEnableMultiUpload) {
|
|
121
|
-
result
|
|
118
|
+
result.data = { files };
|
|
122
119
|
}
|
|
123
120
|
(_c = this.quill.options.uploadOption) == null ? void 0 : _c.imageUpload(result);
|
|
124
121
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-uploader.cjs.js","sources":["../../src/custom-uploader.ts"],"sourcesContent":["import Quill from 'quill'\r\n\r\nimport {\r\n FILE_UPLOADER_MIME_TYPES,\r\n IMAGE_UPLOADER_MIME_TYPES,\r\n} from './config/editor.config'\r\nimport type { Range } from 'quill/core/quill'\r\n\r\ntype InsertFileData = {\r\n code: number\r\n message?: string\r\n data: {\r\n title: string\r\n size: number\r\n src: string\r\n }\r\n}\r\n\r\nconst Uploader = Quill.imports['modules/uploader']\r\nconst Delta = Quill.imports['delta']\r\n\r\nclass CustomUploader extends Uploader {\r\n quill\r\n options\r\n\r\n upload(range, files, isFile?) {\r\n const uploads = []\r\n const fileFlags = []\r\n const rejectFlags = {\r\n file: false,\r\n image: false,\r\n }\r\n const uploadOption = this.quill.options.uploadOption\r\n const acceptObj\r\n = (uploadOption && {\r\n image: uploadOption.imageAccept,\r\n file: uploadOption.fileAccept,\r\n })\r\n || {}\r\n Array.from(files).forEach((file: any) => {\r\n if (file) {\r\n const fileFlag\r\n = typeof isFile === 'boolean'\r\n ? isFile\r\n : !/^image\\/[-\\w.]+$/.test(file.type)\r\n const fileType = fileFlag ? 'file' : 'image'\r\n const accept = acceptObj[fileType] || this.options[fileType]\r\n if (this.isAllowedFileType(accept, file)) {\r\n uploads.push(file)\r\n fileFlags.push(fileFlag)\r\n }\r\n else {\r\n rejectFlags[fileType] = true\r\n }\r\n }\r\n })\r\n this.options.handler.call(this, range, uploads, fileFlags, rejectFlags)\r\n }\r\n\r\n isAllowedFileType = (accept: Array<string> | string, file: File) => {\r\n if (accept) {\r\n const baseMimeType = file.type.replace(/\\/.*$/, '')\r\n const acceptArr = typeof accept === 'string' ? accept.split(',') : accept\r\n return acceptArr.some((type: string) => {\r\n const validType = type.trim()\r\n // suffix name (e.g. '.png,.xlsx')\r\n if (validType.startsWith('.')) {\r\n return (\r\n file.name\r\n .toLowerCase()\r\n .indexOf(\r\n validType.toLowerCase(),\r\n file.name.toLowerCase().length - validType.toLowerCase().length,\r\n ) > -1\r\n )\r\n // mime type like 'image/*'\r\n }\r\n else if (/\\/\\*$/.test(validType)) {\r\n return baseMimeType === validType.replace(/\\/.*$/, '')\r\n }\r\n // mime type like 'text/plain,application/json'\r\n return file.type === validType\r\n })\r\n }\r\n return true\r\n }\r\n\r\n // 处理上传文件\r\n handleUploadFile(range, files, _hasRejectedFile) {\r\n this.insertFileToEditor(range, files[0], {\r\n code: 0,\r\n data: {\r\n title: files[0].name,\r\n size: files[0].size,\r\n src: files[0].src,\r\n },\r\n })\r\n }\r\n\r\n // 将文件插入编辑器\r\n insertFileToEditor(range: Range, file: File, { code, message, data }: InsertFileData) {\r\n if (code === 0) {\r\n const oldContent = new Delta().retain(range.index).delete(range.length)\r\n const videoFlag = this.uploadOption && this.uploadOption.isVideoPlay && /^video\\/[-\\w.]+$/.test(file.type)\r\n const insertObj = videoFlag ? { video: data } : { file: data }\r\n const currentContent = new Delta([{ insert: insertObj }])\r\n const newContent = oldContent.concat(currentContent)\r\n this.quill.updateContents(newContent, Quill.sources.USER)\r\n this.quill.setSelection(range.index + 1)\r\n }\r\n else {\r\n console.error('error message:', message)\r\n }\r\n }\r\n\r\n // 将图片插入编辑器\r\n insertImageToEditor(range, { code, message, data }) {\r\n if (code === 0) {\r\n const { imageId, imageUrl } = data\r\n // 粘贴截图或者从外源直接拷贝的单图时,需要将编辑器中已选中的内容删除\r\n const oldContent = new Delta().retain(range.index).delete(range.length)\r\n const currentContent = new Delta([\r\n {\r\n insert: { image: imageUrl },\r\n attributes: { 'image-id': imageId },\r\n },\r\n ])\r\n const newContent = oldContent.concat(currentContent)\r\n this.quill.updateContents(newContent, Quill.sources.USER)\r\n this.quill.setSelection(range.index + 1)\r\n }\r\n else {\r\n console.error('error message:', message)\r\n }\r\n }\r\n\r\n // 处理上传图片\r\n handleUploadImage(range, { file, files }, hasRejectedImage) {\r\n if (this.quill.options.uploadOption?.imageUpload) {\r\n const imageEnableMultiUpload = this.enableMultiUpload === true || this.enableMultiUpload?.['image']\r\n\r\n const result = {\r\n file,\r\n data: { files: [file] },\r\n hasRejectedImage: hasRejectedImage,\r\n callback: (res) => {\r\n if (!res) {\r\n return\r\n }\r\n if (imageEnableMultiUpload && Array.isArray(res)) {\r\n res.forEach(value => this.insertImageToEditor(range, value))\r\n }\r\n else {\r\n this.insertImageToEditor(range, res)\r\n }\r\n },\r\n }\r\n if (imageEnableMultiUpload) {\r\n result['data'] = { files }\r\n }\r\n this.quill.options.uploadOption?.imageUpload(result)\r\n }\r\n else {\r\n const promises = files.map((fileItem) => {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader()\r\n reader.onload = (e: any) => {\r\n resolve(e.target.result)\r\n }\r\n reader.readAsDataURL(fileItem)\r\n })\r\n })\r\n Promise.all(promises).then((images) => {\r\n const update = images.reduce((delta: any, image) => {\r\n return delta.insert({ image })\r\n }, new Delta().retain(range.index).delete(range.length))\r\n\r\n this.quill.updateContents(update, Quill.sources.USER)\r\n this.quill.setSelection(range.index + images.length, Quill.sources.SILENT)\r\n })\r\n }\r\n }\r\n}\r\n\r\nCustomUploader.DEFAULTS = {\r\n file: FILE_UPLOADER_MIME_TYPES,\r\n image: IMAGE_UPLOADER_MIME_TYPES,\r\n enableMultiUpload: false,\r\n handler(range, files, fileFlags, rejectFlags) {\r\n const fileArr = []\r\n const imgArr = []\r\n files.forEach((file, index) => (fileFlags[index] ? fileArr.push(file) : imgArr.push(file)))\r\n if (this.quill.options.modules.file && (fileArr.length || rejectFlags.file)) {\r\n this.handleUploadFile(range, fileArr, rejectFlags.file)\r\n }\r\n if (imgArr.length || rejectFlags.image) {\r\n this.handleUploadImage(range, { file: imgArr[0], files: imgArr }, rejectFlags.image)\r\n }\r\n },\r\n}\r\n\r\nexport default CustomUploader\r\n"],"names":["FILE_UPLOADER_MIME_TYPES","IMAGE_UPLOADER_MIME_TYPES"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"custom-uploader.cjs.js","sources":["../../src/custom-uploader.ts"],"sourcesContent":["import type { Range } from 'quill/core/quill'\r\n\r\nimport Quill from 'quill'\r\nimport {\r\n FILE_UPLOADER_MIME_TYPES,\r\n IMAGE_UPLOADER_MIME_TYPES,\r\n} from './config/editor.config'\r\n\r\ninterface InsertFileData {\r\n code: number\r\n message?: string\r\n data: {\r\n title: string\r\n size: number\r\n src: string\r\n }\r\n}\r\n\r\nconst Uploader = Quill.imports['modules/uploader']\r\nconst Delta = Quill.import('delta')\r\n\r\nclass CustomUploader extends Uploader {\r\n quill\r\n options\r\n\r\n upload(range, files, isFile?) {\r\n const uploads = []\r\n const fileFlags = []\r\n const rejectFlags = {\r\n file: false,\r\n image: false,\r\n }\r\n const uploadOption = this.quill.options.uploadOption\r\n const acceptObj\r\n = (uploadOption && {\r\n image: uploadOption.imageAccept,\r\n file: uploadOption.fileAccept,\r\n })\r\n || {}\r\n Array.from(files).forEach((file: any) => {\r\n if (file) {\r\n const fileFlag\r\n = typeof isFile === 'boolean'\r\n ? isFile\r\n : !/^image\\/[-\\w.]+$/.test(file.type)\r\n const fileType = fileFlag ? 'file' : 'image'\r\n const accept = acceptObj[fileType] || this.options[fileType]\r\n if (this.isAllowedFileType(accept, file)) {\r\n uploads.push(file)\r\n fileFlags.push(fileFlag)\r\n }\r\n else {\r\n rejectFlags[fileType] = true\r\n }\r\n }\r\n })\r\n this.options.handler.call(this, range, uploads, fileFlags, rejectFlags)\r\n }\r\n\r\n isAllowedFileType = (accept: Array<string> | string, file: File) => {\r\n if (accept) {\r\n const baseMimeType = file.type.replace(/\\/.*$/, '')\r\n const acceptArr = typeof accept === 'string' ? accept.split(',') : accept\r\n return acceptArr.some((type: string) => {\r\n const validType = type.trim()\r\n // suffix name (e.g. '.png,.xlsx')\r\n if (validType.startsWith('.')) {\r\n return (\r\n file.name\r\n .toLowerCase()\r\n .includes(validType.toLowerCase(), file.name.toLowerCase().length - validType.toLowerCase().length)\r\n )\r\n // mime type like 'image/*'\r\n }\r\n else if (/\\/\\*$/.test(validType)) {\r\n return baseMimeType === validType.replace(/\\/.*$/, '')\r\n }\r\n // mime type like 'text/plain,application/json'\r\n return file.type === validType\r\n })\r\n }\r\n return true\r\n }\r\n\r\n // 处理上传文件\r\n handleUploadFile(range, files, _hasRejectedFile) {\r\n this.insertFileToEditor(range, files[0], {\r\n code: 0,\r\n data: {\r\n title: files[0].name,\r\n size: files[0].size,\r\n src: files[0].src,\r\n },\r\n })\r\n }\r\n\r\n // 将文件插入编辑器\r\n insertFileToEditor(range: Range, file: File, { code, message, data }: InsertFileData) {\r\n if (code === 0) {\r\n const oldContent = new Delta().retain(range.index).delete(range.length)\r\n const videoFlag = this.uploadOption && this.uploadOption.isVideoPlay && /^video\\/[-\\w.]+$/.test(file.type)\r\n const insertObj = videoFlag ? { video: data } : { file: data }\r\n const currentContent = new Delta([{ insert: insertObj }])\r\n const newContent = oldContent.concat(currentContent)\r\n this.quill.updateContents(newContent, Quill.sources.USER)\r\n this.quill.setSelection(range.index + 1)\r\n }\r\n else {\r\n console.error('error message:', message)\r\n }\r\n }\r\n\r\n // 将图片插入编辑器\r\n insertImageToEditor(range, { code, message, data }) {\r\n if (code === 0) {\r\n const { imageId, imageUrl } = data\r\n // 粘贴截图或者从外源直接拷贝的单图时,需要将编辑器中已选中的内容删除\r\n const oldContent = new Delta().retain(range.index).delete(range.length)\r\n const currentContent = new Delta([\r\n {\r\n insert: { image: imageUrl },\r\n attributes: { 'image-id': imageId },\r\n },\r\n ])\r\n const newContent = oldContent.concat(currentContent)\r\n this.quill.updateContents(newContent, Quill.sources.USER)\r\n this.quill.setSelection(range.index + 1)\r\n }\r\n else {\r\n console.error('error message:', message)\r\n }\r\n }\r\n\r\n // 处理上传图片\r\n handleUploadImage(range, { file, files }, hasRejectedImage) {\r\n if (this.quill.options.uploadOption?.imageUpload) {\r\n const imageEnableMultiUpload = this.enableMultiUpload === true || this.enableMultiUpload?.image\r\n\r\n const result = {\r\n file,\r\n data: { files: [file] },\r\n hasRejectedImage,\r\n callback: (res) => {\r\n if (!res) {\r\n return\r\n }\r\n if (imageEnableMultiUpload && Array.isArray(res)) {\r\n res.forEach(value => this.insertImageToEditor(range, value))\r\n }\r\n else {\r\n this.insertImageToEditor(range, res)\r\n }\r\n },\r\n }\r\n if (imageEnableMultiUpload) {\r\n result.data = { files }\r\n }\r\n this.quill.options.uploadOption?.imageUpload(result)\r\n }\r\n else {\r\n const promises = files.map((fileItem) => {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader()\r\n reader.onload = (e: any) => {\r\n resolve(e.target.result)\r\n }\r\n reader.readAsDataURL(fileItem)\r\n })\r\n })\r\n Promise.all(promises).then((images) => {\r\n const update = images.reduce((delta: any, image) => {\r\n return delta.insert({ image })\r\n }, new Delta().retain(range.index).delete(range.length))\r\n\r\n this.quill.updateContents(update, Quill.sources.USER)\r\n this.quill.setSelection(range.index + images.length, Quill.sources.SILENT)\r\n })\r\n }\r\n }\r\n}\r\n\r\nCustomUploader.DEFAULTS = {\r\n file: FILE_UPLOADER_MIME_TYPES,\r\n image: IMAGE_UPLOADER_MIME_TYPES,\r\n enableMultiUpload: false,\r\n handler(range, files, fileFlags, rejectFlags) {\r\n const fileArr = []\r\n const imgArr = []\r\n files.forEach((file, index) => (fileFlags[index] ? fileArr.push(file) : imgArr.push(file)))\r\n if (this.quill.options.modules.file && (fileArr.length || rejectFlags.file)) {\r\n this.handleUploadFile(range, fileArr, rejectFlags.file)\r\n }\r\n if (imgArr.length || rejectFlags.image) {\r\n this.handleUploadImage(range, { file: imgArr[0], files: imgArr }, rejectFlags.image)\r\n }\r\n },\r\n}\r\n\r\nexport default CustomUploader\r\n"],"names":["FILE_UPLOADER_MIME_TYPES","IMAGE_UPLOADER_MIME_TYPES"],"mappings":";;;;AAkBA,MAAM,WAAW,MAAM,QAAQ,kBAAkB;AACjD,MAAM,QAAQ,MAAM,OAAO,OAAO;AAElC,MAAM,uBAAuB,SAAS;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA;AAsCsB,SAAA,oBAAA,CAAC,QAAgC,SAAe;AAClE,UAAI,QAAQ;AACV,cAAM,eAAe,KAAK,KAAK,QAAQ,SAAS,EAAE;AAClD,cAAM,YAAY,OAAO,WAAW,WAAW,OAAO,MAAM,GAAG,IAAI;AAC5D,eAAA,UAAU,KAAK,CAAC,SAAiB;AAChC,gBAAA,YAAY,KAAK;AAEnB,cAAA,UAAU,WAAW,GAAG,GAAG;AAC7B,mBACE,KAAK,KACF,YACA,EAAA,SAAS,UAAU,YAAY,GAAG,KAAK,KAAK,cAAc,SAAS,UAAU,YAAA,EAAc,MAAM;AAAA,UAI/F,WAAA,QAAQ,KAAK,SAAS,GAAG;AAChC,mBAAO,iBAAiB,UAAU,QAAQ,SAAS,EAAE;AAAA,UACvD;AAEA,iBAAO,KAAK,SAAS;AAAA,QAAA,CACtB;AAAA,MACH;AACO,aAAA;AAAA,IAAA;AAAA,EACT;AAAA,EAzDA,OAAO,OAAO,OAAO,QAAS;AAC5B,UAAM,UAAU,CAAA;AAChB,UAAM,YAAY,CAAA;AAClB,UAAM,cAAc;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAEH,UAAA,eAAe,KAAK,MAAM,QAAQ;AACxC,UAAM,YACD,gBAAgB;AAAA,MACjB,OAAO,aAAa;AAAA,MACpB,MAAM,aAAa;AAAA,SAElB;AACL,UAAM,KAAK,KAAK,EAAE,QAAQ,CAAC,SAAc;AACvC,UAAI,MAAM;AACF,cAAA,WACF,OAAO,WAAW,YAChB,SACA,CAAC,mBAAmB,KAAK,KAAK,IAAI;AAClC,cAAA,WAAW,WAAW,SAAS;AACrC,cAAM,SAAS,UAAU,QAAQ,KAAK,KAAK,QAAQ,QAAQ;AAC3D,YAAI,KAAK,kBAAkB,QAAQ,IAAI,GAAG;AACxC,kBAAQ,KAAK,IAAI;AACjB,oBAAU,KAAK,QAAQ;AAAA,QAAA,OAEpB;AACH,sBAAY,QAAQ,IAAI;AAAA,QAC1B;AAAA,MACF;AAAA,IAAA,CACD;AACD,SAAK,QAAQ,QAAQ,KAAK,MAAM,OAAO,SAAS,WAAW,WAAW;AAAA,EACxE;AAAA;AAAA,EA4BA,iBAAiB,OAAO,OAAO,kBAAkB;AAC/C,SAAK,mBAAmB,OAAO,MAAM,CAAC,GAAG;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,OAAO,MAAM,CAAC,EAAE;AAAA,QAChB,MAAM,MAAM,CAAC,EAAE;AAAA,QACf,KAAK,MAAM,CAAC,EAAE;AAAA,MAChB;AAAA,IAAA,CACD;AAAA,EACH;AAAA;AAAA,EAGA,mBAAmB,OAAc,MAAY,EAAE,MAAM,SAAS,QAAwB;AACpF,QAAI,SAAS,GAAG;AACR,YAAA,aAAa,IAAI,MAAQ,EAAA,OAAO,MAAM,KAAK,EAAE,OAAO,MAAM,MAAM;AAChE,YAAA,YAAY,KAAK,gBAAgB,KAAK,aAAa,eAAe,mBAAmB,KAAK,KAAK,IAAI;AACnG,YAAA,YAAY,YAAY,EAAE,OAAO,SAAS,EAAE,MAAM;AAClD,YAAA,iBAAiB,IAAI,MAAM,CAAC,EAAE,QAAQ,UAAW,CAAA,CAAC;AAClD,YAAA,aAAa,WAAW,OAAO,cAAc;AACnD,WAAK,MAAM,eAAe,YAAY,MAAM,QAAQ,IAAI;AACxD,WAAK,MAAM,aAAa,MAAM,QAAQ,CAAC;AAAA,IAAA,OAEpC;AACK,cAAA,MAAM,kBAAkB,OAAO;AAAA,IACzC;AAAA,EACF;AAAA;AAAA,EAGA,oBAAoB,OAAO,EAAE,MAAM,SAAS,QAAQ;AAClD,QAAI,SAAS,GAAG;AACR,YAAA,EAAE,SAAS,SAAa,IAAA;AAExB,YAAA,aAAa,IAAI,MAAQ,EAAA,OAAO,MAAM,KAAK,EAAE,OAAO,MAAM,MAAM;AAChE,YAAA,iBAAiB,IAAI,MAAM;AAAA,QAC/B;AAAA,UACE,QAAQ,EAAE,OAAO,SAAS;AAAA,UAC1B,YAAY,EAAE,YAAY,QAAQ;AAAA,QACpC;AAAA,MAAA,CACD;AACK,YAAA,aAAa,WAAW,OAAO,cAAc;AACnD,WAAK,MAAM,eAAe,YAAY,MAAM,QAAQ,IAAI;AACxD,WAAK,MAAM,aAAa,MAAM,QAAQ,CAAC;AAAA,IAAA,OAEpC;AACK,cAAA,MAAM,kBAAkB,OAAO;AAAA,IACzC;AAAA,EACF;AAAA;AAAA,EAGA,kBAAkB,OAAO,EAAE,MAAM,MAAA,GAAS,kBAAkB;;AAC1D,SAAI,UAAK,MAAM,QAAQ,iBAAnB,mBAAiC,aAAa;AAChD,YAAM,yBAAyB,KAAK,sBAAsB,UAAQ,UAAK,sBAAL,mBAAwB;AAE1F,YAAM,SAAS;AAAA,QACb;AAAA,QACA,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE;AAAA,QACtB;AAAA,QACA,UAAU,CAAC,QAAQ;AACjB,cAAI,CAAC,KAAK;AACR;AAAA,UACF;AACA,cAAI,0BAA0B,MAAM,QAAQ,GAAG,GAAG;AAChD,gBAAI,QAAQ,CAAS,UAAA,KAAK,oBAAoB,OAAO,KAAK,CAAC;AAAA,UAAA,OAExD;AACE,iBAAA,oBAAoB,OAAO,GAAG;AAAA,UACrC;AAAA,QACF;AAAA,MAAA;AAEF,UAAI,wBAAwB;AACnB,eAAA,OAAO,EAAE;MAClB;AACA,iBAAK,MAAM,QAAQ,iBAAnB,mBAAiC,YAAY;AAAA,IAAM,OAEhD;AACH,YAAM,WAAW,MAAM,IAAI,CAAC,aAAa;AAChC,eAAA,IAAI,QAAQ,CAAC,YAAY;AACxB,gBAAA,SAAS,IAAI;AACZ,iBAAA,SAAS,CAAC,MAAW;AAClB,oBAAA,EAAE,OAAO,MAAM;AAAA,UAAA;AAEzB,iBAAO,cAAc,QAAQ;AAAA,QAAA,CAC9B;AAAA,MAAA,CACF;AACD,cAAQ,IAAI,QAAQ,EAAE,KAAK,CAAC,WAAW;AACrC,cAAM,SAAS,OAAO,OAAO,CAAC,OAAY,UAAU;AAClD,iBAAO,MAAM,OAAO,EAAE,MAAO,CAAA;AAAA,QAAA,GAC5B,IAAI,QAAQ,OAAO,MAAM,KAAK,EAAE,OAAO,MAAM,MAAM,CAAC;AAEvD,aAAK,MAAM,eAAe,QAAQ,MAAM,QAAQ,IAAI;AAC/C,aAAA,MAAM,aAAa,MAAM,QAAQ,OAAO,QAAQ,MAAM,QAAQ,MAAM;AAAA,MAAA,CAC1E;AAAA,IACH;AAAA,EACF;AACF;AAEA,eAAe,WAAW;AAAA,EACxB,MAAMA,cAAA;AAAA,EACN,OAAOC,cAAA;AAAA,EACP,mBAAmB;AAAA,EACnB,QAAQ,OAAO,OAAO,WAAW,aAAa;AAC5C,UAAM,UAAU,CAAA;AAChB,UAAM,SAAS,CAAA;AACf,UAAM,QAAQ,CAAC,MAAM,UAAW,UAAU,KAAK,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,CAAE;AACtF,QAAA,KAAK,MAAM,QAAQ,QAAQ,SAAS,QAAQ,UAAU,YAAY,OAAO;AAC3E,WAAK,iBAAiB,OAAO,SAAS,YAAY,IAAI;AAAA,IACxD;AACI,QAAA,OAAO,UAAU,YAAY,OAAO;AACjC,WAAA,kBAAkB,OAAO,EAAE,MAAM,OAAO,CAAC,GAAG,OAAO,OAAA,GAAU,YAAY,KAAK;AAAA,IACrF;AAAA,EACF;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"people.cjs.js","sources":["../../../../src/emoji/emoji-list/people.ts"],"sourcesContent":["import { createEmoji } from '../utils'\r\nconst peopleEmojiArr = [\r\n ['grinning', '1f600', ':grinning:', '😀', 'p', '1'],\r\n ['grin', '1f601', ':grin:', '😁', 'p', '2'],\r\n ['joy', '1f602', ':joy:', '😂', 'p', '3'],\r\n ['smiley', '1f603', ':smiley:', '😃', 'p', '5'],\r\n ['smile', '1f604', ':smile:', '😄', 'p', '6'],\r\n ['sweat_smile', '1f605', ':sweat_smile:', '😅', 'p', '7'],\r\n ['laughing', '1f606', ':laughing:', '😆', 'p', '8'],\r\n ['wink', '1f609', ':wink:', '😉', 'p', '9'],\r\n ['blush', '1f60a', ':blush:', '😊', 'p', '10'],\r\n ['yum', '1f60b', ':yum:', '😋', 'p', '11'],\r\n ['sunglasses', '1f60e', ':sunglasses:', '😎', 'p', '12'],\r\n ['heart_eyes', '1f60d', ':heart_eyes:', '😍', 'p', '13'],\r\n ['kissing_heart', '1f618', ':kissing_heart:', '😘', 'p', '14'],\r\n ['kissing', '1f617', ':kissing:', '😗', 'p', '15'],\r\n ['kissing_smiling_eyes', '1f619', ':kissing_smiling_eyes:', '😙', 'p', '16'],\r\n ['kissing_closed_eyes', '1f61a', ':kissing_closed_eyes:', '😚', 'p', '17'],\r\n ['slightly_smiling_face', '1f642', ':slight_smile:', '🙂', 'p', '19'],\r\n ['hugging_face', '1f917', ':hugging:', '🤗', 'p', '20'],\r\n ['thinking_face', '1f914', ':thinking:', '🤔', 'p', '21'],\r\n ['neutral_face', '1f610', ':neutral_face:', '😐', 'p', '22'],\r\n ['expressionless', '1f611', ':expressionless:', '😑', 'p', '23'],\r\n ['no_mouth', '1f636', ':no_mouth:', '😶', 'p', '24'],\r\n ['smirk', '1f60f', ':smirk:', '😏', 'p', '26'],\r\n ['persevere', '1f623', ':persevere:', '😣', 'p', '27'],\r\n ['disappointed_relieved', '1f625', ':disappointed_relieved:', '😥', 'p', '28'],\r\n ['open_mouth', '1f62e', ':open_mouth:', '😮', 'p', '29'],\r\n ['zipper_mouth_face', '1f910', ':zipper_mouth:', '🤐', 'p', '30'],\r\n ['hushed', '1f62f', ':hushed:', '😯', 'p', '31'],\r\n ['sleepy', '1f62a', ':sleepy:', '😪', 'p', '32'],\r\n ['tired_face', '1f62b', ':tired_face:', '😫', 'p', '33'],\r\n ['sleeping', '1f634', ':sleeping:', '😴', 'p', '34'],\r\n ['relieved', '1f60c', ':relieved:', '😌', 'p', '35'],\r\n ['nerd_face', '1f913', ':nerd:', '🤓', 'p', '36'],\r\n ['stuck_out_tongue', '1f61b', ':stuck_out_tongue:', '😛', 'p', '37'],\r\n ['stuck_out_tongue_winking_eye', '1f61c', ':stuck_out_tongue_winking_eye:', '😜', 'p', '38'],\r\n ['stuck_out_tongue_closed_eyes', '1f61d', ':stuck_out_tongue_closed_eyes:', '😝', 'p', '39'],\r\n ['unamused', '1f612', ':unamused:', '😒', 'p', '41'],\r\n ['sweat', '1f613', ':sweat:', '😓', 'p', '42'],\r\n ['pensive', '1f614', ':pensive:', '😔', 'p', '43'],\r\n ['confused', '1f615', ':confused:', '😕', 'p', '44'],\r\n ['money_mouth_face', '1f911', ':money_mouth:', '🤑', 'p', '46'],\r\n ['astonished', '1f632', ':astonished:', '😲', 'p', '47'],\r\n ['slightly_frowning_face', '1f641', ':slight_frown:', '🙁', 'p', '49'],\r\n ['confounded', '1f616', ':confounded:', '😖', 'p', '50'],\r\n ['disappointed', '1f61e', ':disappointed:', '😞', 'p', '51'],\r\n ['worried', '1f61f', ':worried:', '😟', 'p', '52'],\r\n ['triumph', '1f624', ':triumph:', '😤', 'p', '53'],\r\n ['cry', '1f622', ':cry:', '😢', 'p', '54'],\r\n ['sob', '1f62d', ':sob:', '😭', 'p', '55'],\r\n ['frowning', '1f626', ':frowning:', '😦', 'p', '56'],\r\n ['anguished', '1f627', ':anguished:', '😧', 'p', '57'],\r\n ['fearful', '1f628', ':fearful:', '😨', 'p', '58'],\r\n ['weary', '1f629', ':weary:', '😩', 'p', '59'],\r\n ['grimacing', '1f62c', ':grimacing:', '😬', 'p', '60'],\r\n ['cold_sweat', '1f630', ':cold_sweat:', '😰', 'p', '61'],\r\n ['scream', '1f631', ':scream:', '😱', 'p', '62'],\r\n ['flushed', '1f633', ':flushed:', '😳', 'p', '63'],\r\n ['dizzy_face', '1f635', ':dizzy_face:', '😵', 'p', '64'],\r\n ['rage', '1f621', ':rage:', '😡', 'p', '65'],\r\n ['angry', '1f620', ':angry:', '😠', 'p', '66'],\r\n ['innocent', '1f607', ':innocent:', '😇', 'p', '67'],\r\n ['mask', '1f637', ':mask:', '😷', 'p', '71'],\r\n ['face_with_thermometer', '1f912', ':thermometer_face:', '🤒', 'p', '72'],\r\n ['face_with_head_bandage', '1f915', ':head_bandage:', '🤕', 'p', '73'],\r\n ['smiling_imp', '1f608', ':smiling_imp:', '😈', 'p', '76'],\r\n ['imp', '1f47f', ':imp:', '👿', 'p', '77'],\r\n ['skull', '1f480', ':skull:', '💀', 'p', '80'],\r\n ['ghost', '1f47b', ':ghost:', '👻', 'p', '82'],\r\n ['alien', '1f47d', ':alien:', '👽', 'p', '83'],\r\n ['space_invader', '1f47e', ':space_invader:', '👾', 'a', '84'],\r\n ['robot_face', '1f916', ':robot:', '🤖', 'p', '85'],\r\n ['hankey', '1f4a9', ':poop:', '💩', 'p', '86'],\r\n ['smiley_cat', '1f63a', ':smiley_cat:', '😺', 'p', '87'],\r\n ['smile_cat', '1f638', ':smile_cat:', '😸', 'p', '88'],\r\n ['joy_cat', '1f639', ':joy_cat:', '😹', 'p', '89'],\r\n ['heart_eyes_cat', '1f63b', ':heart_eyes_cat:', '😻', 'p', '90'],\r\n ['smirk_cat', '1f63c', ':smirk_cat:', '😼', 'p', '91'],\r\n ['kissing_cat', '1f63d', ':kissing_cat:', '😽', 'p', '92'],\r\n ['scream_cat', '1f640', ':scream_cat:', '🙀', 'p', '93'],\r\n ['crying_cat_face', '1f63f', ':crying_cat_face:', '😿', 'p', '94'],\r\n ['pouting_cat', '1f63e', ':pouting_cat:', '😾', 'p', '95'],\r\n ['muscle', '1f4aa', ':muscle:', '💪', 'p', '1080'],\r\n ['point_left', '1f448', ':point_left:', '👈', 'p', '1092'],\r\n ['point_right', '1f449', ':point_right:', '👉', 'p', '1098'],\r\n ['point_up', '261d', ':point_up:', '☝', 'p', '1104'],\r\n ['point_up_2', '1f446', ':point_up_2:', '👆', 'p', '1110'],\r\n ['middle_finger', '1f595', ':middle_finger:', '🖕', 'p', '1116'],\r\n ['point_down', '1f447', ':point_down:', '👇', 'p', '1122'],\r\n ['v', '270c', ':v:', '✌', 'p', '1128'],\r\n ['raised_hand_with_fingers_splayed', '1f590', ':hand_splayed:', '🖐', 'p', '1158'],\r\n ['ok_hand', '1f44c', ':ok_hand:', '👌', 'p', '1170'],\r\n ['thumbsup', '1f44d', ':thumbsup:', '👍', 'p', '1176'],\r\n ['thumbsdown', '1f44e', ':thumbsdown:', '👎', 'p', '1182'],\r\n ['fist', '270a', ':fist:', '✊', 'p', '1188'],\r\n ['facepunch', '1f44a', ':punch:', '👊', 'p', '1194'],\r\n ['wave', '1f44b', ':wave:', '👋', 'p', '1218'],\r\n ['clap', '1f44f', ':clap:', '👏', 'p', '1224'],\r\n ['writing_hand', '270d', ':writing_hand:', '✍', 'p', '1230'],\r\n ['open_hands', '1f450', ':open_hands:', '👐', 'p', '1236'],\r\n ['pray', '1f64f', ':pray:', '🙏', 'p', '1248'],\r\n ['ear', '1f442', ':ear:', '👂', 'p', '1266'],\r\n ['nose', '1f443', ':nose:', '👃', 'p', '1272'],\r\n ['eyes', '1f440', ':eyes:', '👀', 'p', '1279'],\r\n ['eye', '1f441', ':eye:', '👁', 'p', '1280'],\r\n ['lips', '1f444', ':lips:', '👄', 'p', '1283'],\r\n ['fire', '1f525', ':fire:', '🔥', 'n', '1753'],\r\n]\r\nexport const peopleEmoji = createEmoji(peopleEmojiArr)\r\n"],"names":["createEmoji"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"people.cjs.js","sources":["../../../../src/emoji/emoji-list/people.ts"],"sourcesContent":["import { createEmoji } from '../utils'\r\n\r\nconst peopleEmojiArr = [\r\n ['grinning', '1f600', ':grinning:', '😀', 'p', '1'],\r\n ['grin', '1f601', ':grin:', '😁', 'p', '2'],\r\n ['joy', '1f602', ':joy:', '😂', 'p', '3'],\r\n ['smiley', '1f603', ':smiley:', '😃', 'p', '5'],\r\n ['smile', '1f604', ':smile:', '😄', 'p', '6'],\r\n ['sweat_smile', '1f605', ':sweat_smile:', '😅', 'p', '7'],\r\n ['laughing', '1f606', ':laughing:', '😆', 'p', '8'],\r\n ['wink', '1f609', ':wink:', '😉', 'p', '9'],\r\n ['blush', '1f60a', ':blush:', '😊', 'p', '10'],\r\n ['yum', '1f60b', ':yum:', '😋', 'p', '11'],\r\n ['sunglasses', '1f60e', ':sunglasses:', '😎', 'p', '12'],\r\n ['heart_eyes', '1f60d', ':heart_eyes:', '😍', 'p', '13'],\r\n ['kissing_heart', '1f618', ':kissing_heart:', '😘', 'p', '14'],\r\n ['kissing', '1f617', ':kissing:', '😗', 'p', '15'],\r\n ['kissing_smiling_eyes', '1f619', ':kissing_smiling_eyes:', '😙', 'p', '16'],\r\n ['kissing_closed_eyes', '1f61a', ':kissing_closed_eyes:', '😚', 'p', '17'],\r\n ['slightly_smiling_face', '1f642', ':slight_smile:', '🙂', 'p', '19'],\r\n ['hugging_face', '1f917', ':hugging:', '🤗', 'p', '20'],\r\n ['thinking_face', '1f914', ':thinking:', '🤔', 'p', '21'],\r\n ['neutral_face', '1f610', ':neutral_face:', '😐', 'p', '22'],\r\n ['expressionless', '1f611', ':expressionless:', '😑', 'p', '23'],\r\n ['no_mouth', '1f636', ':no_mouth:', '😶', 'p', '24'],\r\n ['smirk', '1f60f', ':smirk:', '😏', 'p', '26'],\r\n ['persevere', '1f623', ':persevere:', '😣', 'p', '27'],\r\n ['disappointed_relieved', '1f625', ':disappointed_relieved:', '😥', 'p', '28'],\r\n ['open_mouth', '1f62e', ':open_mouth:', '😮', 'p', '29'],\r\n ['zipper_mouth_face', '1f910', ':zipper_mouth:', '🤐', 'p', '30'],\r\n ['hushed', '1f62f', ':hushed:', '😯', 'p', '31'],\r\n ['sleepy', '1f62a', ':sleepy:', '😪', 'p', '32'],\r\n ['tired_face', '1f62b', ':tired_face:', '😫', 'p', '33'],\r\n ['sleeping', '1f634', ':sleeping:', '😴', 'p', '34'],\r\n ['relieved', '1f60c', ':relieved:', '😌', 'p', '35'],\r\n ['nerd_face', '1f913', ':nerd:', '🤓', 'p', '36'],\r\n ['stuck_out_tongue', '1f61b', ':stuck_out_tongue:', '😛', 'p', '37'],\r\n ['stuck_out_tongue_winking_eye', '1f61c', ':stuck_out_tongue_winking_eye:', '😜', 'p', '38'],\r\n ['stuck_out_tongue_closed_eyes', '1f61d', ':stuck_out_tongue_closed_eyes:', '😝', 'p', '39'],\r\n ['unamused', '1f612', ':unamused:', '😒', 'p', '41'],\r\n ['sweat', '1f613', ':sweat:', '😓', 'p', '42'],\r\n ['pensive', '1f614', ':pensive:', '😔', 'p', '43'],\r\n ['confused', '1f615', ':confused:', '😕', 'p', '44'],\r\n ['money_mouth_face', '1f911', ':money_mouth:', '🤑', 'p', '46'],\r\n ['astonished', '1f632', ':astonished:', '😲', 'p', '47'],\r\n ['slightly_frowning_face', '1f641', ':slight_frown:', '🙁', 'p', '49'],\r\n ['confounded', '1f616', ':confounded:', '😖', 'p', '50'],\r\n ['disappointed', '1f61e', ':disappointed:', '😞', 'p', '51'],\r\n ['worried', '1f61f', ':worried:', '😟', 'p', '52'],\r\n ['triumph', '1f624', ':triumph:', '😤', 'p', '53'],\r\n ['cry', '1f622', ':cry:', '😢', 'p', '54'],\r\n ['sob', '1f62d', ':sob:', '😭', 'p', '55'],\r\n ['frowning', '1f626', ':frowning:', '😦', 'p', '56'],\r\n ['anguished', '1f627', ':anguished:', '😧', 'p', '57'],\r\n ['fearful', '1f628', ':fearful:', '😨', 'p', '58'],\r\n ['weary', '1f629', ':weary:', '😩', 'p', '59'],\r\n ['grimacing', '1f62c', ':grimacing:', '😬', 'p', '60'],\r\n ['cold_sweat', '1f630', ':cold_sweat:', '😰', 'p', '61'],\r\n ['scream', '1f631', ':scream:', '😱', 'p', '62'],\r\n ['flushed', '1f633', ':flushed:', '😳', 'p', '63'],\r\n ['dizzy_face', '1f635', ':dizzy_face:', '😵', 'p', '64'],\r\n ['rage', '1f621', ':rage:', '😡', 'p', '65'],\r\n ['angry', '1f620', ':angry:', '😠', 'p', '66'],\r\n ['innocent', '1f607', ':innocent:', '😇', 'p', '67'],\r\n ['mask', '1f637', ':mask:', '😷', 'p', '71'],\r\n ['face_with_thermometer', '1f912', ':thermometer_face:', '🤒', 'p', '72'],\r\n ['face_with_head_bandage', '1f915', ':head_bandage:', '🤕', 'p', '73'],\r\n ['smiling_imp', '1f608', ':smiling_imp:', '😈', 'p', '76'],\r\n ['imp', '1f47f', ':imp:', '👿', 'p', '77'],\r\n ['skull', '1f480', ':skull:', '💀', 'p', '80'],\r\n ['ghost', '1f47b', ':ghost:', '👻', 'p', '82'],\r\n ['alien', '1f47d', ':alien:', '👽', 'p', '83'],\r\n ['space_invader', '1f47e', ':space_invader:', '👾', 'a', '84'],\r\n ['robot_face', '1f916', ':robot:', '🤖', 'p', '85'],\r\n ['hankey', '1f4a9', ':poop:', '💩', 'p', '86'],\r\n ['smiley_cat', '1f63a', ':smiley_cat:', '😺', 'p', '87'],\r\n ['smile_cat', '1f638', ':smile_cat:', '😸', 'p', '88'],\r\n ['joy_cat', '1f639', ':joy_cat:', '😹', 'p', '89'],\r\n ['heart_eyes_cat', '1f63b', ':heart_eyes_cat:', '😻', 'p', '90'],\r\n ['smirk_cat', '1f63c', ':smirk_cat:', '😼', 'p', '91'],\r\n ['kissing_cat', '1f63d', ':kissing_cat:', '😽', 'p', '92'],\r\n ['scream_cat', '1f640', ':scream_cat:', '🙀', 'p', '93'],\r\n ['crying_cat_face', '1f63f', ':crying_cat_face:', '😿', 'p', '94'],\r\n ['pouting_cat', '1f63e', ':pouting_cat:', '😾', 'p', '95'],\r\n ['muscle', '1f4aa', ':muscle:', '💪', 'p', '1080'],\r\n ['point_left', '1f448', ':point_left:', '👈', 'p', '1092'],\r\n ['point_right', '1f449', ':point_right:', '👉', 'p', '1098'],\r\n ['point_up', '261d', ':point_up:', '☝', 'p', '1104'],\r\n ['point_up_2', '1f446', ':point_up_2:', '👆', 'p', '1110'],\r\n ['middle_finger', '1f595', ':middle_finger:', '🖕', 'p', '1116'],\r\n ['point_down', '1f447', ':point_down:', '👇', 'p', '1122'],\r\n ['v', '270c', ':v:', '✌', 'p', '1128'],\r\n ['raised_hand_with_fingers_splayed', '1f590', ':hand_splayed:', '🖐', 'p', '1158'],\r\n ['ok_hand', '1f44c', ':ok_hand:', '👌', 'p', '1170'],\r\n ['thumbsup', '1f44d', ':thumbsup:', '👍', 'p', '1176'],\r\n ['thumbsdown', '1f44e', ':thumbsdown:', '👎', 'p', '1182'],\r\n ['fist', '270a', ':fist:', '✊', 'p', '1188'],\r\n ['facepunch', '1f44a', ':punch:', '👊', 'p', '1194'],\r\n ['wave', '1f44b', ':wave:', '👋', 'p', '1218'],\r\n ['clap', '1f44f', ':clap:', '👏', 'p', '1224'],\r\n ['writing_hand', '270d', ':writing_hand:', '✍', 'p', '1230'],\r\n ['open_hands', '1f450', ':open_hands:', '👐', 'p', '1236'],\r\n ['pray', '1f64f', ':pray:', '🙏', 'p', '1248'],\r\n ['ear', '1f442', ':ear:', '👂', 'p', '1266'],\r\n ['nose', '1f443', ':nose:', '👃', 'p', '1272'],\r\n ['eyes', '1f440', ':eyes:', '👀', 'p', '1279'],\r\n ['eye', '1f441', ':eye:', '👁', 'p', '1280'],\r\n ['lips', '1f444', ':lips:', '👄', 'p', '1283'],\r\n ['fire', '1f525', ':fire:', '🔥', 'n', '1753'],\r\n]\r\nexport const peopleEmoji = createEmoji(peopleEmojiArr)\r\n"],"names":["createEmoji"],"mappings":"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"}
|
|
@@ -25,11 +25,11 @@ class EmojiBlot extends Embed {
|
|
|
25
25
|
const emojiSpan = document.createElement("span");
|
|
26
26
|
emojiSpan.classList.add(this.emojiClass);
|
|
27
27
|
emojiSpan.classList.add(this.emojiPrefix + value.name);
|
|
28
|
-
emojiSpan.
|
|
28
|
+
emojiSpan.textContent = String.fromCodePoint(...EmojiBlot.parseUnicode(value.unicode));
|
|
29
29
|
node.appendChild(emojiSpan);
|
|
30
30
|
}
|
|
31
31
|
static parseUnicode(string) {
|
|
32
|
-
return string.split("-").map((str) => parseInt(str, 16));
|
|
32
|
+
return string.split("-").map((str) => Number.parseInt(str, 16));
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
EmojiBlot.blotName = "emoji";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emoji-blot.cjs.js","sources":["../../../../src/emoji/formats/emoji-blot.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport emojiMap from '../emoji-map'\r\n\r\nconst Embed = Quill.imports['blots/embed']\r\n\r\n// @dynamic\r\nclass EmojiBlot extends Embed {\r\n static emojiClass: string\r\n static emojiPrefix: any\r\n static tagName: string\r\n static blotName: string\r\n static className: string\r\n static create(value) {\r\n const node = super.create()\r\n if (typeof value === 'object') {\r\n EmojiBlot.buildSpan(value, node)\r\n }\r\n else if (typeof value === 'string') {\r\n const valueObj = emojiMap[value]\r\n if (valueObj) {\r\n EmojiBlot.buildSpan(valueObj, node)\r\n }\r\n }\r\n // 修复在emoji后输入中文插入其中导致quill不能识别\r\n node.setAttribute('contenteditable', false)\r\n return node\r\n }\r\n\r\n static value(node) {\r\n return node.dataset.name\r\n }\r\n\r\n static buildSpan(value, node) {\r\n node.setAttribute('data-name', value.name)\r\n const emojiSpan = document.createElement('span')\r\n emojiSpan.classList.add(this.emojiClass)\r\n emojiSpan.classList.add(this.emojiPrefix + value.name)\r\n // unicode can be '1f1f5-1f1ea',see emoji-list.js.\r\n emojiSpan.
|
|
1
|
+
{"version":3,"file":"emoji-blot.cjs.js","sources":["../../../../src/emoji/formats/emoji-blot.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport emojiMap from '../emoji-map'\r\n\r\nconst Embed = Quill.imports['blots/embed']\r\n\r\n// @dynamic\r\nclass EmojiBlot extends Embed {\r\n static emojiClass: string\r\n static emojiPrefix: any\r\n static tagName: string\r\n static blotName: string\r\n static className: string\r\n static create(value) {\r\n const node = super.create()\r\n if (typeof value === 'object') {\r\n EmojiBlot.buildSpan(value, node)\r\n }\r\n else if (typeof value === 'string') {\r\n const valueObj = emojiMap[value]\r\n if (valueObj) {\r\n EmojiBlot.buildSpan(valueObj, node)\r\n }\r\n }\r\n // 修复在emoji后输入中文插入其中导致quill不能识别\r\n node.setAttribute('contenteditable', false)\r\n return node\r\n }\r\n\r\n static value(node) {\r\n return node.dataset.name\r\n }\r\n\r\n static buildSpan(value, node) {\r\n node.setAttribute('data-name', value.name)\r\n const emojiSpan = document.createElement('span')\r\n emojiSpan.classList.add(this.emojiClass)\r\n emojiSpan.classList.add(this.emojiPrefix + value.name)\r\n // unicode can be '1f1f5-1f1ea',see emoji-list.js.\r\n emojiSpan.textContent = String.fromCodePoint(...EmojiBlot.parseUnicode(value.unicode))\r\n node.appendChild(emojiSpan)\r\n }\r\n\r\n static parseUnicode(string) {\r\n return string.split('-').map(str => Number.parseInt(str, 16))\r\n }\r\n}\r\n\r\nEmojiBlot.blotName = 'emoji'\r\nEmojiBlot.className = 'ql-emojiblot'\r\nEmojiBlot.tagName = 'span'\r\nEmojiBlot.emojiClass = 'ap'\r\nEmojiBlot.emojiPrefix = 'ap-'\r\n\r\nexport default EmojiBlot\r\n"],"names":["emojiMap"],"mappings":";;;;AAGA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAGzC,MAAM,kBAAkB,MAAM;AAAA,EAM5B,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM;AACf,QAAA,OAAO,UAAU,UAAU;AACnB,gBAAA,UAAU,OAAO,IAAI;AAAA,IAAA,WAExB,OAAO,UAAU,UAAU;AAC5B,YAAA,WAAWA,iBAAS,KAAK;AAC/B,UAAI,UAAU;AACF,kBAAA,UAAU,UAAU,IAAI;AAAA,MACpC;AAAA,IACF;AAEK,SAAA,aAAa,mBAAmB,KAAK;AACnC,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,MAAM;AACjB,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,OAAO,UAAU,OAAO,MAAM;AACvB,SAAA,aAAa,aAAa,MAAM,IAAI;AACnC,UAAA,YAAY,SAAS,cAAc,MAAM;AACrC,cAAA,UAAU,IAAI,KAAK,UAAU;AACvC,cAAU,UAAU,IAAI,KAAK,cAAc,MAAM,IAAI;AAE3C,cAAA,cAAc,OAAO,cAAc,GAAG,UAAU,aAAa,MAAM,OAAO,CAAC;AACrF,SAAK,YAAY,SAAS;AAAA,EAC5B;AAAA,EAEA,OAAO,aAAa,QAAQ;AACnB,WAAA,OAAO,MAAM,GAAG,EAAE,IAAI,SAAO,OAAO,SAAS,KAAK,EAAE,CAAC;AAAA,EAC9D;AACF;AAEA,UAAU,WAAW;AACrB,UAAU,YAAY;AACtB,UAAU,UAAU;AACpB,UAAU,aAAa;AACvB,UAAU,cAAc;;"}
|
|
@@ -61,11 +61,11 @@ class ShortNameEmoji extends Module {
|
|
|
61
61
|
this.atIndex = range.index;
|
|
62
62
|
const paletteMaxPos = atSignBounds.left + 250;
|
|
63
63
|
if (paletteMaxPos > this.quill.container.offsetWidth) {
|
|
64
|
-
this.container.style.left = atSignBounds.left - 250
|
|
64
|
+
this.container.style.left = `${atSignBounds.left - 250}px`;
|
|
65
65
|
} else {
|
|
66
|
-
this.container.style.left = atSignBounds.left
|
|
66
|
+
this.container.style.left = `${atSignBounds.left}px`;
|
|
67
67
|
}
|
|
68
|
-
this.container.style.top = atSignBounds.top + atSignBounds.height
|
|
68
|
+
this.container.style.top = `${atSignBounds.top + atSignBounds.height}px`;
|
|
69
69
|
this.open = true;
|
|
70
70
|
this.quill.on("text-change", this.onTextChange);
|
|
71
71
|
this.quill.once("selection-change", this.onSelectionChange);
|
|
@@ -97,7 +97,7 @@ class ShortNameEmoji extends Module {
|
|
|
97
97
|
}
|
|
98
98
|
this.query = this.query.trim();
|
|
99
99
|
let emojis = this.emojiList;
|
|
100
|
-
emojis.sort(
|
|
100
|
+
emojis.sort((a, b) => {
|
|
101
101
|
return a.emoji_order - b.emoji_order;
|
|
102
102
|
});
|
|
103
103
|
if (this.query.length < this.options.fuse.minMatchCharLength || emojis.length === 0) {
|
|
@@ -134,7 +134,7 @@ class ShortNameEmoji extends Module {
|
|
|
134
134
|
while (this.container.firstChild) {
|
|
135
135
|
this.container.removeChild(this.container.firstChild);
|
|
136
136
|
}
|
|
137
|
-
const buttons = Array(emojis.length);
|
|
137
|
+
const buttons = Array.from({ length: emojis.length });
|
|
138
138
|
this.buttons = buttons;
|
|
139
139
|
const handler = (i, emoji) => (event) => {
|
|
140
140
|
const arrowLeftKey = event.key === "ArrowLeft" || event.keyCode === 37;
|
|
@@ -167,7 +167,7 @@ class ShortNameEmoji extends Module {
|
|
|
167
167
|
makeElement(
|
|
168
168
|
"button",
|
|
169
169
|
{ type: "button" },
|
|
170
|
-
makeElement("span", { className:
|
|
170
|
+
makeElement("span", { className: `button-emoji ap ap-${emoji.name}`, innerHTML: emoji.code_decimal }),
|
|
171
171
|
makeElement("span", { className: "unmatched" }, emoji.shortname)
|
|
172
172
|
)
|
|
173
173
|
);
|
|
@@ -192,7 +192,7 @@ class ShortNameEmoji extends Module {
|
|
|
192
192
|
const windowHeight = window.innerHeight;
|
|
193
193
|
const editorPos = this.quill.container.getBoundingClientRect().top;
|
|
194
194
|
if (editorPos > windowHeight / 2 && this.container.offsetHeight > 0) {
|
|
195
|
-
this.container.style.top =
|
|
195
|
+
this.container.style.top = `-${this.container.offsetHeight}px`;
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
buttons[0].classList.add("emoji-active");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emoji.cjs.js","sources":["../../../../src/emoji/modules/emoji.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport emojiList from '../emoji-list'\r\n\r\nconst Module = Quill.imports['core/module']\r\n\r\n// @dynamic\r\nclass ShortNameEmoji extends Module {\r\n static DEFAULTS: {\r\n emojiList: any[]\r\n fuse: {\r\n shouldSort: boolean\r\n threshold: number\r\n location: number\r\n distance: number\r\n maxPatternLength: number\r\n minMatchCharLength: number\r\n keys: string[]\r\n }\r\n }\r\n\r\n emojiList: any\r\n quill: any\r\n fuse: any\r\n onOpen: any\r\n onClose: any\r\n container: HTMLUListElement\r\n onSelectionChange: any\r\n onTextChange: any\r\n open: boolean\r\n atIndex: any\r\n focusedButton: any\r\n isWhiteSpace: (ch: any) => boolean\r\n query: any\r\n buttons: any\r\n options: any\r\n constructor(quill, options) {\r\n super(quill, options)\r\n\r\n this.emojiList = options.emojiList\r\n\r\n this.quill = quill\r\n this.onClose = options.onClose\r\n this.onOpen = options.onOpen\r\n this.container = document.createElement('ul')\r\n this.container.classList.add('emoji_completions')\r\n this.quill.container.appendChild(this.container)\r\n this.container.style.position = 'absolute'\r\n this.container.style.display = 'none'\r\n\r\n this.onSelectionChange = this.maybeUnfocus.bind(this)\r\n this.onTextChange = this.update.bind(this)\r\n\r\n this.open = false\r\n this.atIndex = null\r\n this.focusedButton = null\r\n\r\n this.isWhiteSpace = function (ch) {\r\n let whiteSpace = false\r\n if (/\\s/.test(ch)) {\r\n whiteSpace = true\r\n }\r\n return whiteSpace\r\n }\r\n\r\n quill.keyboard.addBinding({\r\n // TODO: Once Quill supports using event.key change this to \":\"\r\n key: 186, // \":\" instead of 190 in Safari. Since it's the same key it doesn't matter if we register both.\r\n shiftKey: true,\r\n }, this.triggerPicker.bind(this))\r\n\r\n quill.keyboard.addBinding({\r\n // gecko based browsers (firefox) use 59 as the keycode for semicolon,\r\n // which makes a colon character when combined with shift\r\n key: 59,\r\n shiftKey: true,\r\n }, this.triggerPicker.bind(this))\r\n\r\n quill.keyboard.addBinding({\r\n key: 39, // ArrowRight\r\n collapsed: true,\r\n }, this.handleArrow.bind(this))\r\n\r\n quill.keyboard.addBinding({\r\n key: 40, // ArrowRight\r\n collapsed: true,\r\n }, this.handleArrow.bind(this))\r\n // TODO: Add keybindings for Enter (13) and Tab (9) directly on the quill editor\r\n }\r\n\r\n triggerPicker(range, _context) {\r\n if (this.open) return true\r\n if (range.length > 0) {\r\n this.quill.deleteText(range.index, range.length, Quill.sources.USER)\r\n }\r\n\r\n this.quill.insertText(range.index, ':', 'emoji-shortname', Quill.sources.USER)\r\n const atSignBounds = this.quill.getBounds(range.index)\r\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\r\n\r\n this.atIndex = range.index\r\n\r\n const paletteMaxPos = atSignBounds.left + 250\r\n if (paletteMaxPos > this.quill.container.offsetWidth) {\r\n this.container.style.left = (atSignBounds.left - 250) + 'px'\r\n }\r\n else {\r\n this.container.style.left = atSignBounds.left + 'px'\r\n }\r\n\r\n this.container.style.top = atSignBounds.top + atSignBounds.height + 'px'\r\n this.open = true\r\n\r\n this.quill.on('text-change', this.onTextChange)\r\n this.quill.once('selection-change', this.onSelectionChange)\r\n if (this.onOpen) {\r\n this.onOpen()\r\n }\r\n }\r\n\r\n handleArrow() {\r\n if (!this.open) return true\r\n this.buttons[0].classList.remove('emoji-active')\r\n this.buttons[0].focus()\r\n if (this.buttons.length > 1) {\r\n this.buttons[1].focus()\r\n }\r\n }\r\n\r\n update(event) {\r\n const sel = this.quill.getSelection().index\r\n if (this.atIndex >= sel) { // Deleted the at character\r\n return this.close(null)\r\n }\r\n this.query = this.quill.getText(this.atIndex + 1, sel - this.atIndex - 1)\r\n\r\n try {\r\n if (this.isWhiteSpace(this.query)) {\r\n this.close(null)\r\n return\r\n }\r\n }\r\n catch (_e) {\r\n throw new Error('Close failed')\r\n }\r\n\r\n this.query = this.query.trim()\r\n\r\n let emojis: any = this.emojiList\r\n emojis.sort(function (a: any, b: any) {\r\n return a.emoji_order - b.emoji_order\r\n })\r\n\r\n if (this.query.length < this.options.fuse.minMatchCharLength || emojis.length === 0) {\r\n this.container.style.display = 'none'\r\n return\r\n }\r\n if (emojis.length > 15) { // return only 15\r\n emojis = emojis.slice(0, 15)\r\n }\r\n this.renderCompletions(emojis, event)\r\n }\r\n\r\n maybeUnfocus() {\r\n if (this.container.querySelector('*:focus')) return\r\n this.close(null)\r\n }\r\n\r\n renderCompletions(emojis, evt) {\r\n try {\r\n if (evt) {\r\n if (evt.key === 'Enter' || evt.keyCode === 13) {\r\n this.close(emojis[0], 1)\r\n this.container.style.display = 'none'\r\n return\r\n }\r\n else if (evt.key === 'Tab' || evt.keyCode === 9) {\r\n this.quill.disable()\r\n this.buttons[0].classList.remove('emoji-active')\r\n this.buttons[1].focus()\r\n return\r\n }\r\n }\r\n if (evt) return\r\n }\r\n catch (_e) {\r\n throw new Error('Render failed')\r\n }\r\n\r\n while (this.container.firstChild) {\r\n this.container.removeChild(this.container.firstChild)\r\n }\r\n const buttons = Array(emojis.length)\r\n this.buttons = buttons\r\n\r\n const handler = (i, emoji) => (event) => {\r\n const arrowLeftKey = event.key === 'ArrowLeft' || event.keyCode === 37\r\n const arrowUpKey = event.key === 'ArrowUp' || event.keyCode === 38\r\n const arrowRightKey = event.key === 'ArrowRight' || event.keyCode === 39\r\n const arrowDownKey = event.key === 'ArrowDown' || event.keyCode === 40\r\n if (arrowRightKey || arrowDownKey) {\r\n event.preventDefault()\r\n buttons[Math.min(buttons.length - 1, i + 1)].focus()\r\n }\r\n else if (event.key === 'Tab' || event.keyCode === 9) {\r\n event.preventDefault()\r\n if ((i + 1) === buttons.length) {\r\n buttons[0].focus()\r\n return\r\n }\r\n buttons[Math.min(buttons.length - 1, i + 1)].focus()\r\n }\r\n else if (arrowLeftKey || arrowUpKey) {\r\n event.preventDefault()\r\n buttons[Math.max(0, i - 1)].focus()\r\n }\r\n else if (event.key === 'Enter' || event.keyCode === 13\r\n || event.key === ' ' || event.keyCode === 32\r\n || event.key === 'Tab' || event.keyCode === 9) {\r\n event.preventDefault()\r\n this.quill.enable()\r\n this.close(emoji)\r\n }\r\n }\r\n\r\n emojis.forEach((emoji, i) => {\r\n const li = makeElement(\r\n 'li', {},\r\n makeElement(\r\n 'button', { type: 'button' },\r\n makeElement('span', { className: 'button-emoji ap ap-' + emoji.name, innerHTML: emoji.code_decimal }),\r\n makeElement('span', { className: 'unmatched' }, emoji.shortname),\r\n ),\r\n )\r\n this.container.appendChild(li)\r\n buttons[i] = li.firstChild\r\n // Events will be GC-ed with button on each re-render:\r\n buttons[i].addEventListener('keydown', handler(i, emoji))\r\n buttons[i].addEventListener('mousedown', () => this.close(emoji))\r\n buttons[i].addEventListener('focus', () => {\r\n this.focusedButton = i\r\n })\r\n buttons[i].addEventListener('unfocus', () => {\r\n this.focusedButton = null\r\n })\r\n })\r\n\r\n this.container.style.display = 'block'\r\n // emoji palette on top\r\n if (this.quill.container.classList.contains('top-emoji')) {\r\n const x = this.container.querySelectorAll('li')\r\n let i\r\n for (i = 0; i < x.length; i++) {\r\n x[i].style.display = 'block'\r\n }\r\n\r\n const windowHeight = window.innerHeight\r\n const editorPos = this.quill.container.getBoundingClientRect().top\r\n if (editorPos > windowHeight / 2 && this.container.offsetHeight > 0) {\r\n this.container.style.top = '-' + this.container.offsetHeight + 'px'\r\n }\r\n }\r\n\r\n buttons[0].classList.add('emoji-active')\r\n }\r\n\r\n close(value, trailingDelete = 0) {\r\n this.quill.enable()\r\n this.container.style.display = 'none'\r\n while (this.container.firstChild) {\r\n this.container.removeChild(this.container.firstChild)\r\n }\r\n this.quill.off('selection-change', this.onSelectionChange)\r\n this.quill.off('text-change', this.onTextChange)\r\n if (value) {\r\n this.quill.deleteText(this.atIndex, this.query.length + 1 + trailingDelete, Quill.sources.USER)\r\n this.quill.insertEmbed(this.atIndex, 'emoji', value, Quill.sources.USER)\r\n setTimeout(() => this.quill.setSelection(this.atIndex + 1), 0)\r\n }\r\n this.quill.focus()\r\n this.open = false\r\n if (this.onClose) {\r\n this.onClose(value)\r\n }\r\n }\r\n}\r\n\r\nShortNameEmoji.DEFAULTS = {\r\n emojiList: emojiList,\r\n fuse: {\r\n shouldSort: true,\r\n threshold: 0.1,\r\n location: 0,\r\n distance: 100,\r\n maxPatternLength: 32,\r\n minMatchCharLength: 1,\r\n keys: [\r\n 'shortname',\r\n ],\r\n },\r\n}\r\n\r\nfunction makeElement(tag, attrs, ...children) {\r\n const elem = document.createElement(tag)\r\n Object.keys(attrs).forEach((key) => {\r\n elem[key] = attrs[key]\r\n })\r\n children.forEach((child) => {\r\n if (typeof child === 'string') {\r\n child = document.createTextNode(child)\r\n }\r\n elem.appendChild(child)\r\n })\r\n return elem\r\n}\r\n\r\nexport default ShortNameEmoji\r\n"],"names":["emojiList"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"emoji.cjs.js","sources":["../../../../src/emoji/modules/emoji.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport emojiList from '../emoji-list'\r\n\r\nconst Module = Quill.imports['core/module']\r\n\r\n// @dynamic\r\nclass ShortNameEmoji extends Module {\r\n static DEFAULTS: {\r\n emojiList: any[]\r\n fuse: {\r\n shouldSort: boolean\r\n threshold: number\r\n location: number\r\n distance: number\r\n maxPatternLength: number\r\n minMatchCharLength: number\r\n keys: string[]\r\n }\r\n }\r\n\r\n emojiList: any\r\n quill: any\r\n fuse: any\r\n onOpen: any\r\n onClose: any\r\n container: HTMLUListElement\r\n onSelectionChange: any\r\n onTextChange: any\r\n open: boolean\r\n atIndex: any\r\n focusedButton: any\r\n isWhiteSpace: (ch: any) => boolean\r\n query: any\r\n buttons: any\r\n options: any\r\n constructor(quill, options) {\r\n super(quill, options)\r\n\r\n this.emojiList = options.emojiList\r\n\r\n this.quill = quill\r\n this.onClose = options.onClose\r\n this.onOpen = options.onOpen\r\n this.container = document.createElement('ul')\r\n this.container.classList.add('emoji_completions')\r\n this.quill.container.appendChild(this.container)\r\n this.container.style.position = 'absolute'\r\n this.container.style.display = 'none'\r\n\r\n this.onSelectionChange = this.maybeUnfocus.bind(this)\r\n this.onTextChange = this.update.bind(this)\r\n\r\n this.open = false\r\n this.atIndex = null\r\n this.focusedButton = null\r\n\r\n this.isWhiteSpace = function (ch) {\r\n let whiteSpace = false\r\n if (/\\s/.test(ch)) {\r\n whiteSpace = true\r\n }\r\n return whiteSpace\r\n }\r\n\r\n quill.keyboard.addBinding({\r\n // TODO: Once Quill supports using event.key change this to \":\"\r\n key: 186, // \":\" instead of 190 in Safari. Since it's the same key it doesn't matter if we register both.\r\n shiftKey: true,\r\n }, this.triggerPicker.bind(this))\r\n\r\n quill.keyboard.addBinding({\r\n // gecko based browsers (firefox) use 59 as the keycode for semicolon,\r\n // which makes a colon character when combined with shift\r\n key: 59,\r\n shiftKey: true,\r\n }, this.triggerPicker.bind(this))\r\n\r\n quill.keyboard.addBinding({\r\n key: 39, // ArrowRight\r\n collapsed: true,\r\n }, this.handleArrow.bind(this))\r\n\r\n quill.keyboard.addBinding({\r\n key: 40, // ArrowRight\r\n collapsed: true,\r\n }, this.handleArrow.bind(this))\r\n // TODO: Add keybindings for Enter (13) and Tab (9) directly on the quill editor\r\n }\r\n\r\n triggerPicker(range, _context) {\r\n if (this.open) return true\r\n if (range.length > 0) {\r\n this.quill.deleteText(range.index, range.length, Quill.sources.USER)\r\n }\r\n\r\n this.quill.insertText(range.index, ':', 'emoji-shortname', Quill.sources.USER)\r\n const atSignBounds = this.quill.getBounds(range.index)\r\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\r\n\r\n this.atIndex = range.index\r\n\r\n const paletteMaxPos = atSignBounds.left + 250\r\n if (paletteMaxPos > this.quill.container.offsetWidth) {\r\n this.container.style.left = `${atSignBounds.left - 250}px`\r\n }\r\n else {\r\n this.container.style.left = `${atSignBounds.left}px`\r\n }\r\n\r\n this.container.style.top = `${atSignBounds.top + atSignBounds.height}px`\r\n this.open = true\r\n\r\n this.quill.on('text-change', this.onTextChange)\r\n this.quill.once('selection-change', this.onSelectionChange)\r\n if (this.onOpen) {\r\n this.onOpen()\r\n }\r\n }\r\n\r\n handleArrow() {\r\n if (!this.open) return true\r\n this.buttons[0].classList.remove('emoji-active')\r\n this.buttons[0].focus()\r\n if (this.buttons.length > 1) {\r\n this.buttons[1].focus()\r\n }\r\n }\r\n\r\n update(event) {\r\n const sel = this.quill.getSelection().index\r\n if (this.atIndex >= sel) { // Deleted the at character\r\n return this.close(null)\r\n }\r\n this.query = this.quill.getText(this.atIndex + 1, sel - this.atIndex - 1)\r\n\r\n try {\r\n if (this.isWhiteSpace(this.query)) {\r\n this.close(null)\r\n return\r\n }\r\n }\r\n catch (_e) {\r\n throw new Error('Close failed')\r\n }\r\n\r\n this.query = this.query.trim()\r\n\r\n let emojis: any = this.emojiList\r\n emojis.sort((a: any, b: any) => {\r\n return a.emoji_order - b.emoji_order\r\n })\r\n\r\n if (this.query.length < this.options.fuse.minMatchCharLength || emojis.length === 0) {\r\n this.container.style.display = 'none'\r\n return\r\n }\r\n if (emojis.length > 15) { // return only 15\r\n emojis = emojis.slice(0, 15)\r\n }\r\n this.renderCompletions(emojis, event)\r\n }\r\n\r\n maybeUnfocus() {\r\n if (this.container.querySelector('*:focus')) return\r\n this.close(null)\r\n }\r\n\r\n renderCompletions(emojis, evt) {\r\n try {\r\n if (evt) {\r\n if (evt.key === 'Enter' || evt.keyCode === 13) {\r\n this.close(emojis[0], 1)\r\n this.container.style.display = 'none'\r\n return\r\n }\r\n else if (evt.key === 'Tab' || evt.keyCode === 9) {\r\n this.quill.disable()\r\n this.buttons[0].classList.remove('emoji-active')\r\n this.buttons[1].focus()\r\n return\r\n }\r\n }\r\n if (evt) return\r\n }\r\n catch (_e) {\r\n throw new Error('Render failed')\r\n }\r\n\r\n while (this.container.firstChild) {\r\n this.container.removeChild(this.container.firstChild)\r\n }\r\n const buttons = Array.from({ length: emojis.length })\r\n this.buttons = buttons\r\n\r\n const handler = (i, emoji) => (event) => {\r\n const arrowLeftKey = event.key === 'ArrowLeft' || event.keyCode === 37\r\n const arrowUpKey = event.key === 'ArrowUp' || event.keyCode === 38\r\n const arrowRightKey = event.key === 'ArrowRight' || event.keyCode === 39\r\n const arrowDownKey = event.key === 'ArrowDown' || event.keyCode === 40\r\n if (arrowRightKey || arrowDownKey) {\r\n event.preventDefault()\r\n buttons[Math.min(buttons.length - 1, i + 1)].focus()\r\n }\r\n else if (event.key === 'Tab' || event.keyCode === 9) {\r\n event.preventDefault()\r\n if ((i + 1) === buttons.length) {\r\n buttons[0].focus()\r\n return\r\n }\r\n buttons[Math.min(buttons.length - 1, i + 1)].focus()\r\n }\r\n else if (arrowLeftKey || arrowUpKey) {\r\n event.preventDefault()\r\n buttons[Math.max(0, i - 1)].focus()\r\n }\r\n else if (event.key === 'Enter' || event.keyCode === 13\r\n || event.key === ' ' || event.keyCode === 32\r\n || event.key === 'Tab' || event.keyCode === 9) {\r\n event.preventDefault()\r\n this.quill.enable()\r\n this.close(emoji)\r\n }\r\n }\r\n\r\n emojis.forEach((emoji, i) => {\r\n const li = makeElement(\r\n 'li',\r\n {},\r\n makeElement(\r\n 'button',\r\n { type: 'button' },\r\n makeElement('span', { className: `button-emoji ap ap-${emoji.name}`, innerHTML: emoji.code_decimal }),\r\n makeElement('span', { className: 'unmatched' }, emoji.shortname),\r\n ),\r\n )\r\n this.container.appendChild(li)\r\n buttons[i] = li.firstChild\r\n // Events will be GC-ed with button on each re-render:\r\n buttons[i].addEventListener('keydown', handler(i, emoji))\r\n buttons[i].addEventListener('mousedown', () => this.close(emoji))\r\n buttons[i].addEventListener('focus', () => {\r\n this.focusedButton = i\r\n })\r\n buttons[i].addEventListener('unfocus', () => {\r\n this.focusedButton = null\r\n })\r\n })\r\n\r\n this.container.style.display = 'block'\r\n // emoji palette on top\r\n if (this.quill.container.classList.contains('top-emoji')) {\r\n const x = this.container.querySelectorAll('li')\r\n let i\r\n for (i = 0; i < x.length; i++) {\r\n x[i].style.display = 'block'\r\n }\r\n\r\n const windowHeight = window.innerHeight\r\n const editorPos = this.quill.container.getBoundingClientRect().top\r\n if (editorPos > windowHeight / 2 && this.container.offsetHeight > 0) {\r\n this.container.style.top = `-${this.container.offsetHeight}px`\r\n }\r\n }\r\n\r\n buttons[0].classList.add('emoji-active')\r\n }\r\n\r\n close(value, trailingDelete = 0) {\r\n this.quill.enable()\r\n this.container.style.display = 'none'\r\n while (this.container.firstChild) {\r\n this.container.removeChild(this.container.firstChild)\r\n }\r\n this.quill.off('selection-change', this.onSelectionChange)\r\n this.quill.off('text-change', this.onTextChange)\r\n if (value) {\r\n this.quill.deleteText(this.atIndex, this.query.length + 1 + trailingDelete, Quill.sources.USER)\r\n this.quill.insertEmbed(this.atIndex, 'emoji', value, Quill.sources.USER)\r\n setTimeout(() => this.quill.setSelection(this.atIndex + 1), 0)\r\n }\r\n this.quill.focus()\r\n this.open = false\r\n if (this.onClose) {\r\n this.onClose(value)\r\n }\r\n }\r\n}\r\n\r\nShortNameEmoji.DEFAULTS = {\r\n emojiList,\r\n fuse: {\r\n shouldSort: true,\r\n threshold: 0.1,\r\n location: 0,\r\n distance: 100,\r\n maxPatternLength: 32,\r\n minMatchCharLength: 1,\r\n keys: [\r\n 'shortname',\r\n ],\r\n },\r\n}\r\n\r\nfunction makeElement(tag, attrs, ...children) {\r\n const elem = document.createElement(tag)\r\n Object.keys(attrs).forEach((key) => {\r\n elem[key] = attrs[key]\r\n })\r\n children.forEach((child) => {\r\n if (typeof child === 'string') {\r\n child = document.createTextNode(child)\r\n }\r\n elem.appendChild(child)\r\n })\r\n return elem\r\n}\r\n\r\nexport default ShortNameEmoji\r\n"],"names":["emojiList"],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ class ToolbarEmoji extends Module {
|
|
|
23
23
|
checkPalatteExist() {
|
|
24
24
|
const quill = this.quill;
|
|
25
25
|
fnCheckDialogOpen(quill);
|
|
26
|
-
this.quill.on("text-change",
|
|
26
|
+
this.quill.on("text-change", (_delta, _oldDelta, source) => {
|
|
27
27
|
if (source === "user") {
|
|
28
28
|
fnClose();
|
|
29
29
|
fnUpdateRange(quill);
|
|
@@ -58,11 +58,11 @@ function fnShowEmojiPalatte(quill) {
|
|
|
58
58
|
const containerRect = quill.container.getBoundingClientRect();
|
|
59
59
|
const paletteMaxPos = atSignBounds.left + 250;
|
|
60
60
|
eleEmojiArea.id = "emoji-palette";
|
|
61
|
-
eleEmojiArea.style.top = 10 + atSignBounds.top + atSignBounds.height + containerRect.top
|
|
61
|
+
eleEmojiArea.style.top = `${10 + atSignBounds.top + atSignBounds.height + containerRect.top}px`;
|
|
62
62
|
if (paletteMaxPos > quill.container.offsetWidth) {
|
|
63
|
-
eleEmojiArea.style.left = atSignBounds.left + containerRect.left - 250
|
|
63
|
+
eleEmojiArea.style.left = `${atSignBounds.left + containerRect.left - 250}px`;
|
|
64
64
|
} else {
|
|
65
|
-
eleEmojiArea.style.left = atSignBounds.left + containerRect.left
|
|
65
|
+
eleEmojiArea.style.left = `${atSignBounds.left + containerRect.left}px`;
|
|
66
66
|
}
|
|
67
67
|
const tabToolbar = document.createElement("div");
|
|
68
68
|
tabToolbar.id = "tab-toolbar";
|
|
@@ -90,16 +90,16 @@ function fnShowEmojiPalatte(quill) {
|
|
|
90
90
|
} else {
|
|
91
91
|
document.getElementById("emoji-close-div").style.display = "block";
|
|
92
92
|
}
|
|
93
|
-
emojiType.forEach(
|
|
93
|
+
emojiType.forEach((emojiTypeItem) => {
|
|
94
94
|
const tabElement = document.createElement("li");
|
|
95
95
|
tabElement.classList.add("emoji-tab");
|
|
96
|
-
tabElement.classList.add(
|
|
96
|
+
tabElement.classList.add(`filter-${emojiTypeItem.name}`);
|
|
97
97
|
const tabValue = emojiTypeItem.content;
|
|
98
98
|
tabElement.innerHTML = tabValue;
|
|
99
99
|
tabElement.dataset.filter = emojiTypeItem.type;
|
|
100
100
|
tabElementHolder.appendChild(tabElement);
|
|
101
|
-
const emojiFilter = document.querySelector(
|
|
102
|
-
emojiFilter.addEventListener("click",
|
|
101
|
+
const emojiFilter = document.querySelector(`.filter-${emojiTypeItem.name}`);
|
|
102
|
+
emojiFilter.addEventListener("click", () => {
|
|
103
103
|
const tab = document.querySelector(".emoji-tab.active");
|
|
104
104
|
if (tab) {
|
|
105
105
|
tab.classList.remove("active");
|
|
@@ -116,25 +116,25 @@ function fnEmojiPanelInit(panel, quill) {
|
|
|
116
116
|
}
|
|
117
117
|
function fnEmojiElementsToPanel(_type, panel, quill) {
|
|
118
118
|
const result = emojiList.default;
|
|
119
|
-
result.sort(
|
|
119
|
+
result.sort((a, b) => {
|
|
120
120
|
return a.emoji_order - b.emoji_order;
|
|
121
121
|
});
|
|
122
122
|
quill.focus();
|
|
123
123
|
const range = fnUpdateRange(quill);
|
|
124
|
-
result.forEach(
|
|
124
|
+
result.forEach((emoji) => {
|
|
125
125
|
const span = document.createElement("span");
|
|
126
126
|
const t = document.createTextNode(emoji.shortname);
|
|
127
127
|
span.appendChild(t);
|
|
128
128
|
span.classList.add("bem");
|
|
129
|
-
span.classList.add(
|
|
129
|
+
span.classList.add(`bem-${emoji.name}`);
|
|
130
130
|
span.classList.add("ap");
|
|
131
|
-
span.classList.add(
|
|
131
|
+
span.classList.add(`ap-${emoji.name}`);
|
|
132
132
|
const output = String(String(emoji.code_decimal));
|
|
133
|
-
span.innerHTML = output
|
|
133
|
+
span.innerHTML = `${output} `;
|
|
134
134
|
panel.appendChild(span);
|
|
135
|
-
const customButton = document.querySelector(
|
|
135
|
+
const customButton = document.querySelector(`.bem-${emoji.name}`);
|
|
136
136
|
if (customButton) {
|
|
137
|
-
customButton.addEventListener("click",
|
|
137
|
+
customButton.addEventListener("click", () => {
|
|
138
138
|
quill.insertEmbed(range.index, "emoji", emoji, Quill.sources.USER);
|
|
139
139
|
setTimeout(() => quill.setSelection(range.index + 1), 0);
|
|
140
140
|
fnClose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar-emoji.cjs.js","sources":["../../../../src/emoji/modules/toolbar-emoji.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { EMOJI_SPRITE as emojiSprite } from '../../config/base64-image'\r\nimport emojiList from '../emoji-list'\r\n\r\nconst Module = Quill.imports['core/module']\r\n\r\nclass ToolbarEmoji extends Module {\r\n quill: any\r\n toolbar: any\r\n constructor(quill, options) {\r\n super(quill, options)\r\n\r\n this.quill = quill\r\n this.toolbar = quill.getModule('toolbar')\r\n if (typeof this.toolbar !== 'undefined') {\r\n this.toolbar.addHandler('emoji', this.checkPalatteExist)\r\n }\r\n\r\n // 在emoji模块加载时判断并插入emoji精灵图样式,防止重复插入\r\n let emojiStyle = document.querySelector('style#devui-emoji-sprite')\r\n if (!emojiStyle) {\r\n emojiStyle = document.createElement('style')\r\n emojiStyle.setAttribute('id', 'devui-emoji-sprite')\r\n emojiStyle.innerHTML = `.ap{background-image:url(${emojiSprite})}`\r\n document.head.appendChild(emojiStyle)\r\n }\r\n }\r\n\r\n checkPalatteExist() {\r\n const quill = this.quill\r\n fnCheckDialogOpen(quill)\r\n this.quill.on('text-change', function (_delta, _oldDelta, source) {\r\n if (source === 'user') {\r\n fnClose()\r\n fnUpdateRange(quill)\r\n }\r\n })\r\n }\r\n}\r\n\r\nfunction fnClose() {\r\n const eleEmojiPlate = document.getElementById('emoji-palette')\r\n document.getElementById('emoji-close-div').style.display = 'none'\r\n if (eleEmojiPlate) {\r\n eleEmojiPlate.remove()\r\n }\r\n}\r\n\r\nfunction fnCheckDialogOpen(quill) {\r\n const elementExists = document.getElementById('emoji-palette')\r\n if (elementExists) {\r\n elementExists.remove()\r\n }\r\n else {\r\n fnShowEmojiPalatte(quill)\r\n }\r\n}\r\n\r\nfunction fnUpdateRange(quill) {\r\n const range = quill.getSelection()\r\n return range\r\n}\r\n\r\nfunction fnShowEmojiPalatte(quill) {\r\n const eleEmojiArea = document.createElement('div')\r\n const range = quill.getSelection()\r\n const atSignBounds = quill.getBounds(range.index)\r\n\r\n quill.container.appendChild(eleEmojiArea)\r\n const containerRect = quill.container.getBoundingClientRect()\r\n const paletteMaxPos = atSignBounds.left + 250 // palette max width is 250\r\n eleEmojiArea.id = 'emoji-palette'\r\n eleEmojiArea.style.top = 10 + atSignBounds.top + atSignBounds.height + containerRect.top + 'px'\r\n if (paletteMaxPos > quill.container.offsetWidth) {\r\n eleEmojiArea.style.left = (atSignBounds.left + containerRect.left - 250) + 'px'\r\n }\r\n else {\r\n eleEmojiArea.style.left = atSignBounds.left + containerRect.left + 'px'\r\n }\r\n\r\n const tabToolbar = document.createElement('div')\r\n tabToolbar.id = 'tab-toolbar'\r\n eleEmojiArea.appendChild(tabToolbar)\r\n\r\n // panel\r\n const panel = document.createElement('div')\r\n panel.id = 'tab-panel'\r\n eleEmojiArea.appendChild(panel)\r\n\r\n const emojiType = [\r\n { type: 'p', name: 'people', content: '<div class=\"i-people\"></div>' },\r\n { type: 'n', name: 'nature', content: '<div class=\"i-nature\"></div>' },\r\n { type: 'd', name: 'food', content: '<div class=\"i-food\"></div>' },\r\n { type: 's', name: 'symbols', content: '<div class=\"i-symbols\"></div>' },\r\n { type: 'a', name: 'activity', content: '<div class=\"i-activity\"></div>' },\r\n { type: 't', name: 'travel', content: '<div class=\"i-travel\"></div>' },\r\n { type: 'o', name: 'objects', content: '<div class=\"i-objects\"></div>' },\r\n { type: 'f', name: 'flags', content: '<div class=\"i-flags\"></div>' },\r\n ]\r\n\r\n const tabElementHolder = document.createElement('ul')\r\n tabToolbar.appendChild(tabElementHolder)\r\n\r\n if (document.getElementById('emoji-close-div') === null) {\r\n const closeDiv = document.createElement('div')\r\n closeDiv.id = 'emoji-close-div'\r\n closeDiv.addEventListener('click', fnClose, false)\r\n document.getElementsByTagName('body')[0].appendChild(closeDiv)\r\n }\r\n else {\r\n document.getElementById('emoji-close-div').style.display = 'block'\r\n }\r\n\r\n emojiType.forEach(function (emojiTypeItem) {\r\n // add tab bar\r\n const tabElement = document.createElement('li')\r\n tabElement.classList.add('emoji-tab')\r\n tabElement.classList.add('filter-' + emojiTypeItem.name)\r\n const tabValue = emojiTypeItem.content\r\n tabElement.innerHTML = tabValue\r\n tabElement.dataset.filter = emojiTypeItem.type\r\n tabElementHolder.appendChild(tabElement)\r\n\r\n const emojiFilter = document.querySelector('.filter-' + emojiTypeItem.name)\r\n emojiFilter.addEventListener('click', function () {\r\n const tab = document.querySelector('.emoji-tab.active')\r\n if (tab) {\r\n tab.classList.remove('active')\r\n }\r\n emojiFilter.classList.toggle('active')\r\n fnUpdateEmojiContainer(emojiFilter, panel, quill)\r\n })\r\n })\r\n fnEmojiPanelInit(panel, quill)\r\n}\r\n\r\nfunction fnEmojiPanelInit(panel, quill) {\r\n fnEmojiElementsToPanel('p', panel, quill)\r\n document.querySelector('.filter-people').classList.add('active')\r\n}\r\n\r\nfunction fnEmojiElementsToPanel(_type, panel, quill) {\r\n const result = emojiList\r\n result.sort(function (a: any, b: any) {\r\n return a.emoji_order - b.emoji_order\r\n })\r\n\r\n quill.focus()\r\n const range = fnUpdateRange(quill)\r\n\r\n result.forEach(function (emoji: any) {\r\n const span = document.createElement('span')\r\n const t = document.createTextNode(emoji.shortname)\r\n span.appendChild(t)\r\n span.classList.add('bem')\r\n span.classList.add('bem-' + emoji.name)\r\n span.classList.add('ap')\r\n span.classList.add('ap-' + emoji.name)\r\n const output = String(String(emoji.code_decimal))\r\n span.innerHTML = output + ' '\r\n panel.appendChild(span)\r\n\r\n const customButton = document.querySelector('.bem-' + emoji.name)\r\n if (customButton) {\r\n customButton.addEventListener('click', function () {\r\n quill.insertEmbed(range.index, 'emoji', emoji, Quill.sources.USER)\r\n setTimeout(() => quill.setSelection(range.index + 1), 0)\r\n fnClose()\r\n })\r\n }\r\n })\r\n}\r\n\r\nfunction fnUpdateEmojiContainer(emojiFilter, panel, quill) {\r\n while (panel.firstChild) {\r\n panel.removeChild(panel.firstChild)\r\n }\r\n const type = emojiFilter.dataset.filter\r\n fnEmojiElementsToPanel(type, panel, quill)\r\n}\r\n\r\nexport default ToolbarEmoji\r\n"],"names":["emojiSprite","emojiList"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toolbar-emoji.cjs.js","sources":["../../../../src/emoji/modules/toolbar-emoji.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { EMOJI_SPRITE as emojiSprite } from '../../config/base64-image'\r\nimport emojiList from '../emoji-list'\r\n\r\nconst Module = Quill.imports['core/module']\r\n\r\nclass ToolbarEmoji extends Module {\r\n quill: any\r\n toolbar: any\r\n constructor(quill, options) {\r\n super(quill, options)\r\n\r\n this.quill = quill\r\n this.toolbar = quill.getModule('toolbar')\r\n if (typeof this.toolbar !== 'undefined') {\r\n this.toolbar.addHandler('emoji', this.checkPalatteExist)\r\n }\r\n\r\n // 在emoji模块加载时判断并插入emoji精灵图样式,防止重复插入\r\n let emojiStyle = document.querySelector('style#devui-emoji-sprite')\r\n if (!emojiStyle) {\r\n emojiStyle = document.createElement('style')\r\n emojiStyle.setAttribute('id', 'devui-emoji-sprite')\r\n emojiStyle.innerHTML = `.ap{background-image:url(${emojiSprite})}`\r\n document.head.appendChild(emojiStyle)\r\n }\r\n }\r\n\r\n checkPalatteExist() {\r\n const quill = this.quill\r\n fnCheckDialogOpen(quill)\r\n this.quill.on('text-change', (_delta, _oldDelta, source) => {\r\n if (source === 'user') {\r\n fnClose()\r\n fnUpdateRange(quill)\r\n }\r\n })\r\n }\r\n}\r\n\r\nfunction fnClose() {\r\n const eleEmojiPlate = document.getElementById('emoji-palette')\r\n document.getElementById('emoji-close-div').style.display = 'none'\r\n if (eleEmojiPlate) {\r\n eleEmojiPlate.remove()\r\n }\r\n}\r\n\r\nfunction fnCheckDialogOpen(quill) {\r\n const elementExists = document.getElementById('emoji-palette')\r\n if (elementExists) {\r\n elementExists.remove()\r\n }\r\n else {\r\n fnShowEmojiPalatte(quill)\r\n }\r\n}\r\n\r\nfunction fnUpdateRange(quill) {\r\n const range = quill.getSelection()\r\n return range\r\n}\r\n\r\nfunction fnShowEmojiPalatte(quill) {\r\n const eleEmojiArea = document.createElement('div')\r\n const range = quill.getSelection()\r\n const atSignBounds = quill.getBounds(range.index)\r\n\r\n quill.container.appendChild(eleEmojiArea)\r\n const containerRect = quill.container.getBoundingClientRect()\r\n const paletteMaxPos = atSignBounds.left + 250 // palette max width is 250\r\n eleEmojiArea.id = 'emoji-palette'\r\n eleEmojiArea.style.top = `${10 + atSignBounds.top + atSignBounds.height + containerRect.top}px`\r\n if (paletteMaxPos > quill.container.offsetWidth) {\r\n eleEmojiArea.style.left = `${atSignBounds.left + containerRect.left - 250}px`\r\n }\r\n else {\r\n eleEmojiArea.style.left = `${atSignBounds.left + containerRect.left}px`\r\n }\r\n\r\n const tabToolbar = document.createElement('div')\r\n tabToolbar.id = 'tab-toolbar'\r\n eleEmojiArea.appendChild(tabToolbar)\r\n\r\n // panel\r\n const panel = document.createElement('div')\r\n panel.id = 'tab-panel'\r\n eleEmojiArea.appendChild(panel)\r\n\r\n const emojiType = [\r\n { type: 'p', name: 'people', content: '<div class=\"i-people\"></div>' },\r\n { type: 'n', name: 'nature', content: '<div class=\"i-nature\"></div>' },\r\n { type: 'd', name: 'food', content: '<div class=\"i-food\"></div>' },\r\n { type: 's', name: 'symbols', content: '<div class=\"i-symbols\"></div>' },\r\n { type: 'a', name: 'activity', content: '<div class=\"i-activity\"></div>' },\r\n { type: 't', name: 'travel', content: '<div class=\"i-travel\"></div>' },\r\n { type: 'o', name: 'objects', content: '<div class=\"i-objects\"></div>' },\r\n { type: 'f', name: 'flags', content: '<div class=\"i-flags\"></div>' },\r\n ]\r\n\r\n const tabElementHolder = document.createElement('ul')\r\n tabToolbar.appendChild(tabElementHolder)\r\n\r\n if (document.getElementById('emoji-close-div') === null) {\r\n const closeDiv = document.createElement('div')\r\n closeDiv.id = 'emoji-close-div'\r\n closeDiv.addEventListener('click', fnClose, false)\r\n document.getElementsByTagName('body')[0].appendChild(closeDiv)\r\n }\r\n else {\r\n document.getElementById('emoji-close-div').style.display = 'block'\r\n }\r\n\r\n emojiType.forEach((emojiTypeItem) => {\r\n // add tab bar\r\n const tabElement = document.createElement('li')\r\n tabElement.classList.add('emoji-tab')\r\n tabElement.classList.add(`filter-${emojiTypeItem.name}`)\r\n const tabValue = emojiTypeItem.content\r\n tabElement.innerHTML = tabValue\r\n tabElement.dataset.filter = emojiTypeItem.type\r\n tabElementHolder.appendChild(tabElement)\r\n\r\n const emojiFilter = document.querySelector(`.filter-${emojiTypeItem.name}`)\r\n emojiFilter.addEventListener('click', () => {\r\n const tab = document.querySelector('.emoji-tab.active')\r\n if (tab) {\r\n tab.classList.remove('active')\r\n }\r\n emojiFilter.classList.toggle('active')\r\n fnUpdateEmojiContainer(emojiFilter, panel, quill)\r\n })\r\n })\r\n fnEmojiPanelInit(panel, quill)\r\n}\r\n\r\nfunction fnEmojiPanelInit(panel, quill) {\r\n fnEmojiElementsToPanel('p', panel, quill)\r\n document.querySelector('.filter-people').classList.add('active')\r\n}\r\n\r\nfunction fnEmojiElementsToPanel(_type, panel, quill) {\r\n const result = emojiList\r\n result.sort((a: any, b: any) => {\r\n return a.emoji_order - b.emoji_order\r\n })\r\n\r\n quill.focus()\r\n const range = fnUpdateRange(quill)\r\n\r\n result.forEach((emoji: any) => {\r\n const span = document.createElement('span')\r\n const t = document.createTextNode(emoji.shortname)\r\n span.appendChild(t)\r\n span.classList.add('bem')\r\n span.classList.add(`bem-${emoji.name}`)\r\n span.classList.add('ap')\r\n span.classList.add(`ap-${emoji.name}`)\r\n const output = String(String(emoji.code_decimal))\r\n span.innerHTML = `${output} `\r\n panel.appendChild(span)\r\n\r\n const customButton = document.querySelector(`.bem-${emoji.name}`)\r\n if (customButton) {\r\n customButton.addEventListener('click', () => {\r\n quill.insertEmbed(range.index, 'emoji', emoji, Quill.sources.USER)\r\n setTimeout(() => quill.setSelection(range.index + 1), 0)\r\n fnClose()\r\n })\r\n }\r\n })\r\n}\r\n\r\nfunction fnUpdateEmojiContainer(emojiFilter, panel, quill) {\r\n while (panel.firstChild) {\r\n panel.removeChild(panel.firstChild)\r\n }\r\n const type = emojiFilter.dataset.filter\r\n fnEmojiElementsToPanel(type, panel, quill)\r\n}\r\n\r\nexport default ToolbarEmoji\r\n"],"names":["emojiSprite","emojiList"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const Quill = require("quill");
|
|
4
|
+
const selection = require("quill/core/selection");
|
|
4
5
|
const method = require("../../utils/method.cjs.js");
|
|
5
6
|
const file = require("../formats/file.cjs.js");
|
|
6
|
-
const
|
|
7
|
-
const Delta = Quill.imports["delta"];
|
|
7
|
+
const Delta = Quill.imports.delta;
|
|
8
8
|
class FileBar {
|
|
9
9
|
constructor(quill, target) {
|
|
10
10
|
this.quill = quill;
|
|
@@ -116,7 +116,7 @@ class FileBar {
|
|
|
116
116
|
const day = method.unshiftString(`${date.getDate()}`, 2, "0");
|
|
117
117
|
const hour = method.unshiftString(`${date.getHours()}`, 2, "0");
|
|
118
118
|
const minute = method.unshiftString(`${date.getMinutes()}`, 2, "0");
|
|
119
|
-
return isNaN(year) ? "--" : `${year}/${month}/${day} ${hour}:${minute}`;
|
|
119
|
+
return Number.isNaN(year) ? "--" : `${year}/${month}/${day} ${hour}:${minute}`;
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
exports.default = FileBar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-bar.cjs.js","sources":["../../../../src/file/modules/file-bar.ts"],"sourcesContent":["import Quill from 'quill'\r\n// devui-internal api: utils\\public-api.ts\r\n\r\nimport { unshiftString } from '../../utils/method'\r\nimport File from '../formats/file'\r\nconst Delta = Quill.imports
|
|
1
|
+
{"version":3,"file":"file-bar.cjs.js","sources":["../../../../src/file/modules/file-bar.ts"],"sourcesContent":["import Quill from 'quill'\r\n// devui-internal api: utils\\public-api.ts\r\n\r\nimport { Range } from 'quill/core/selection'\r\nimport { unshiftString } from '../../utils/method'\r\nimport File from '../formats/file'\r\n\r\nconst Delta = Quill.imports.delta\r\n\r\nexport default class FileBar {\r\n quill: any\r\n file: any\r\n domNode: HTMLElement\r\n fileRange: any\r\n template: string\r\n\r\n constructor(quill, target) {\r\n this.quill = quill\r\n this.file = target\r\n const fileBlot = Quill.find(target)\r\n const index = this.quill.getIndex(fileBlot)\r\n const [fileItem, offset] = this.quill.scroll.descendant(File, index)\r\n const length = fileItem && fileItem.length()\r\n this.fileRange = new Range(index - offset, length)\r\n\r\n const timestamp = Number(this.file.dataset.lastModified)\r\n const _lastModifiedDate = this.formatDate(timestamp)\r\n this.template = [\r\n // `<a class=\"ql-last-modified-date\" href=\"${this.file.href}\" target=\"_blank\">${this.file.href}</a>`,\r\n // '<span class=\"ql-split\"></span>',\r\n // `<a class=\"ql-file-preview\"><i class=\"icon-preview\"></i></a>`,\r\n `<a class=\"ql-file-download\"><i class=\"icon-download\"></i></a>`,\r\n '<a class=\"ql-file-delete\"><i class=\"icon-delete\"></i></a>',\r\n ].join('')\r\n\r\n this.createFileBar()\r\n }\r\n\r\n createFileBar() {\r\n this.domNode = document.createElement('div')\r\n this.domNode.className = 'ql-file-bar'\r\n this.domNode.innerHTML = this.template\r\n // 查看文件\r\n const filePreview = this.domNode.querySelector('a.ql-file-preview')\r\n if (filePreview) {\r\n filePreview.addEventListener('click', (event) => {\r\n this.operateFile(event, 'view')\r\n })\r\n }\r\n // 下载文件\r\n const fileDownload = this.domNode.querySelector('a.ql-file-download')\r\n if (fileDownload) {\r\n fileDownload.addEventListener('click', (event) => {\r\n this.operateFile(event, 'download')\r\n })\r\n }\r\n // 删除文件\r\n const fileDelete = this.domNode.querySelector('a.ql-file-delete')\r\n if (fileDelete) {\r\n fileDelete.addEventListener('click', (event) => {\r\n this.operateFile(event, 'delete')\r\n const delta = new Delta()\r\n .retain(this.fileRange.index)\r\n .delete(this.fileRange.length)\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(this.fileRange.index)\r\n })\r\n }\r\n\r\n this.setPosition()\r\n this.quill.root.parentNode.appendChild(this.domNode)\r\n }\r\n\r\n destroy() {\r\n if (this.domNode) {\r\n this.domNode.remove()\r\n this.domNode = null\r\n this.file = null\r\n }\r\n }\r\n\r\n operateFile(event, operate) {\r\n event.preventDefault()\r\n const fileId = this.file.dataset.id || ''\r\n const fileDownloadUrl = this.file.href\r\n if (fileId) {\r\n this.quill.emitter.emit('file-change', {\r\n operation: operate,\r\n data: { fileId, fileDownloadUrl },\r\n })\r\n }\r\n if (operate === 'download') {\r\n const a = document.createElement('a')\r\n a.href = fileDownloadUrl\r\n a.target = '_blank'\r\n a.id = 'exppub'\r\n document.body.appendChild(a)\r\n const alink = document.getElementById('exppub')\r\n alink.click()\r\n alink.parentNode.removeChild(a)\r\n }\r\n this.destroy()\r\n }\r\n\r\n setPosition() {\r\n if (this.domNode && this.file) {\r\n const parent = this.quill.root.parentNode\r\n const child = this.file.querySelector('span')\r\n const containerRect = parent.getBoundingClientRect()\r\n const fileRect = child.getBoundingClientRect()\r\n this.css(this.domNode, {\r\n left: `${fileRect.left - containerRect.left}px`,\r\n top: `${fileRect.top - containerRect.top + 10}px`,\r\n })\r\n }\r\n }\r\n\r\n css(domNode, rules) {\r\n if (typeof rules === 'object') {\r\n for (const prop in rules) {\r\n if (prop) {\r\n if (Array.isArray(rules[prop])) {\r\n // 兼容IE11浏览器\r\n rules[prop].forEach((val) => {\r\n domNode.style[prop] = val\r\n })\r\n }\r\n else {\r\n domNode.style[prop] = rules[prop]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n formatDate(timestamp) {\r\n const date = new Date(timestamp)\r\n const year = date.getFullYear()\r\n // TODO\r\n const month = unshiftString(`${date.getMonth() + 1}`, 2, '0')\r\n const day = unshiftString(`${date.getDate()}`, 2, '0')\r\n const hour = unshiftString(`${date.getHours()}`, 2, '0')\r\n const minute = unshiftString(`${date.getMinutes()}`, 2, '0')\r\n return Number.isNaN(year) ? '--' : `${year}/${month}/${day} ${hour}:${minute}`\r\n }\r\n}\r\n"],"names":["File","Range","unshiftString"],"mappings":"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"}
|