pxx-vue-quill 1.0.164 → 1.0.166
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/dist/vue-quill.umd.js +104 -113
- package/dist/vue-quill.umd.prod.js +2 -2
- package/package.json +1 -1
package/dist/vue-quill.umd.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Copyright (c) 2025 Pxx-Team
|
|
9
9
|
* Released under the MIT license
|
|
10
|
-
* Date: 2025-09-
|
|
10
|
+
* Date: 2025-09-17T01:53:00.683Z
|
|
11
11
|
*/
|
|
12
12
|
(function (global, factory) {
|
|
13
13
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vue')) :
|
|
@@ -20283,9 +20283,9 @@
|
|
|
20283
20283
|
};
|
|
20284
20284
|
}
|
|
20285
20285
|
|
|
20286
|
-
function
|
|
20286
|
+
function useCustomLinkClick(editor, initialHandleCustomLink) {
|
|
20287
20287
|
const quillRef = vue.ref(null);
|
|
20288
|
-
const handleCustomLinkRef = vue.ref(null);
|
|
20288
|
+
const handleCustomLinkRef = vue.ref(initialHandleCustomLink || null);
|
|
20289
20289
|
const handleLinkClick = (event) => {
|
|
20290
20290
|
if (!quillRef.value || !handleCustomLinkRef.value)
|
|
20291
20291
|
return;
|
|
@@ -20332,43 +20332,12 @@
|
|
|
20332
20332
|
const setHandleCustomLink = (fn) => {
|
|
20333
20333
|
handleCustomLinkRef.value = fn;
|
|
20334
20334
|
};
|
|
20335
|
-
const calculateSelectionPosition = (range) => {
|
|
20336
|
-
var _a;
|
|
20337
|
-
if (!quillRef.value)
|
|
20338
|
-
return { top: 0, left: 0 };
|
|
20339
|
-
const selectionRange = range || quillRef.value.getSelection();
|
|
20340
|
-
if (!selectionRange || selectionRange.length === 0)
|
|
20341
|
-
return { top: 0, left: 0 };
|
|
20342
|
-
try {
|
|
20343
|
-
const bounds = quillRef.value.getBounds(selectionRange.index, selectionRange.length);
|
|
20344
|
-
const editorElement = (_a = editor.value) === null || _a === void 0 ? void 0 : _a.querySelector('.ql-editor');
|
|
20345
|
-
const editorContainer = editorElement === null || editorElement === void 0 ? void 0 : editorElement.closest('.quill-editor-container');
|
|
20346
|
-
const editorWidth = editorContainer ? editorContainer.clientWidth : ((editorElement === null || editorElement === void 0 ? void 0 : editorElement.clientWidth) || 0);
|
|
20347
|
-
const customLinkWidth = 310;
|
|
20348
|
-
const maxLeft = editorWidth - customLinkWidth - 16;
|
|
20349
|
-
const left = Math.min(bounds.left, Math.max(0, maxLeft));
|
|
20350
|
-
const editorRect = editorElement === null || editorElement === void 0 ? void 0 : editorElement.getBoundingClientRect();
|
|
20351
|
-
const containerRect = editorContainer === null || editorContainer === void 0 ? void 0 : editorContainer.getBoundingClientRect();
|
|
20352
|
-
if (!editorRect || !containerRect) {
|
|
20353
|
-
return { top: bounds.top + bounds.height + 5, left: left };
|
|
20354
|
-
}
|
|
20355
|
-
const editorOffsetTop = editorRect.top - containerRect.top;
|
|
20356
|
-
const top = editorOffsetTop + bounds.top + bounds.height + 5;
|
|
20357
|
-
return {
|
|
20358
|
-
top: top,
|
|
20359
|
-
left: left
|
|
20360
|
-
};
|
|
20361
|
-
}
|
|
20362
|
-
catch (error) {
|
|
20363
|
-
console.warn('计算选中位置时出错:', error);
|
|
20364
|
-
return { top: 0, left: 0 };
|
|
20365
|
-
}
|
|
20366
|
-
};
|
|
20367
20335
|
return {
|
|
20336
|
+
quillRef,
|
|
20368
20337
|
setQuill,
|
|
20369
20338
|
setHandleCustomLink,
|
|
20370
|
-
|
|
20371
|
-
|
|
20339
|
+
handleLinkClick,
|
|
20340
|
+
addLinkClickListener
|
|
20372
20341
|
};
|
|
20373
20342
|
}
|
|
20374
20343
|
|
|
@@ -20376,7 +20345,6 @@
|
|
|
20376
20345
|
const clickHandlers = vue.ref([]);
|
|
20377
20346
|
const targetElement = vue.ref(null);
|
|
20378
20347
|
const handleGlobalClick = (event) => {
|
|
20379
|
-
console.log('handleGlobalClick');
|
|
20380
20348
|
clickHandlers.value.forEach(handler => {
|
|
20381
20349
|
try {
|
|
20382
20350
|
handler(event);
|
|
@@ -20425,35 +20393,6 @@
|
|
|
20425
20393
|
};
|
|
20426
20394
|
}
|
|
20427
20395
|
|
|
20428
|
-
const isIPad = () => {
|
|
20429
|
-
const ua = navigator.userAgent;
|
|
20430
|
-
const isMacOs = /(?:Macintosh)/.test(ua);
|
|
20431
|
-
return /(?:iPad|PlayBook)/.test(ua) || (isMacOs && navigator.maxTouchPoints > 1);
|
|
20432
|
-
};
|
|
20433
|
-
|
|
20434
|
-
function useIPadScene() {
|
|
20435
|
-
const isIPadBool = isIPad();
|
|
20436
|
-
const handleIPadNewline = (delta, oldContents, clearCallback) => {
|
|
20437
|
-
var _a, _b, _c, _d;
|
|
20438
|
-
let shouldClearEditor = false;
|
|
20439
|
-
const oldText = (_b = (_a = oldContents.ops) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.insert;
|
|
20440
|
-
if (!oldText || !((_d = (_c = delta === null || delta === void 0 ? void 0 : delta.ops) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.delete)) {
|
|
20441
|
-
return false;
|
|
20442
|
-
}
|
|
20443
|
-
const deleteLength = delta.ops[0].delete;
|
|
20444
|
-
const expectedDeleteLength = oldText.length - 1;
|
|
20445
|
-
const hasNewline = JSON.stringify(oldText).includes('\\n');
|
|
20446
|
-
shouldClearEditor = deleteLength === expectedDeleteLength && hasNewline;
|
|
20447
|
-
if (shouldClearEditor) {
|
|
20448
|
-
clearCallback();
|
|
20449
|
-
}
|
|
20450
|
-
};
|
|
20451
|
-
return {
|
|
20452
|
-
isIPadBool,
|
|
20453
|
-
handleIPadNewline
|
|
20454
|
-
};
|
|
20455
|
-
}
|
|
20456
|
-
|
|
20457
20396
|
const boldSVG = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="18" height="18" viewBox="0 0 18 18"><g><g style="opacity:0;"><rect x="0" y="0" width="18" height="18" rx="0" fill="#FFFFFF" fill-opacity="1"/></g><g><path d="M6.794999938146972,7.7800002288818355L9.045000038146974,7.7800002288818355Q9.855000038146972,7.7800002288818355,10.230000038146972,7.442500128881836Q10.605000038146972,7.105000028881836,10.605000038146972,6.505000128881836Q10.605000038146972,6.114999728881836,10.440000038146973,5.860000628881836Q10.275000138146972,5.6050005288818365,9.929999838146973,5.470000228881836Q9.585000038146973,5.335000028881836,9.045000038146974,5.335000028881836L7.139999938146973,5.335000028881836L7.139999938146973,3.385000228881836L9.045000038146974,3.385000228881836Q10.034999838146973,3.385000228881836,10.852499938146973,3.797500608881836Q11.670000038146974,4.2100000388818355,12.142499938146972,4.922500628881836Q12.614999738146974,5.635000228881836,12.614999738146974,6.505000128881836Q12.614999738146974,7.375000028881836,12.142499938146972,8.042500028881836Q11.670000038146974,8.710000028881836,10.860000138146972,9.070000128881837Q10.050000238146973,9.430000328881835,9.045000038146974,9.430000328881835L6.794999938146972,9.430000328881835L6.794999938146972,7.7800002288818355ZM7.139999938146973,12.550000228881835L9.329999938146972,12.550000228881835Q9.900000138146972,12.550000228881835,10.327499838146974,12.354999528881836Q10.755000138146972,12.159999828881835,10.987500238146973,11.807499928881835Q11.219999838146972,11.454999928881836,11.219999838146972,11.020000428881836Q11.219999838146972,10.600000428881836,10.987500238146973,10.232500028881836Q10.755000138146972,9.864999728881836,10.327499838146974,9.647500028881836Q9.900000138146972,9.430000328881835,9.329999938146972,9.430000328881835L6.975000038146972,9.430000328881835L6.975000038146972,7.7800002288818355L9.329999938146972,7.7800002288818355Q10.349999938146972,7.7800002288818355,11.250000038146972,8.200000328881835Q12.149999638146973,8.620000328881837,12.690000538146972,9.362500228881835Q13.229999538146973,10.104999528881836,13.229999538146973,11.034999828881837Q13.229999538146973,11.949999828881836,12.690000538146972,12.752500528881836Q12.149999638146973,13.555000228881836,11.250000038146972,14.027500228881836Q10.349999938146972,14.500000228881836,9.329999938146972,14.500000228881836L7.139999938146973,14.500000228881836L7.139999938146973,12.550000228881835ZM7.064999938146973,14.500000228881836Q6.284999968146972,14.500000228881836,5.872500058146973,14.095000228881837Q5.460000038146973,13.689999228881836,5.460000038146973,12.895000428881836L5.460000038146973,4.989999728881836Q5.460000038146973,4.195000648881836,5.872500058146973,3.789999958881836Q6.284999968146972,3.385000228881836,7.064999938146973,3.385000228881836L7.469999838146973,3.385000228881836L7.469999838146973,14.500000228881836L7.064999938146973,14.500000228881836Z" fill="#555555" fill-opacity="1"/></g></g></svg>`;
|
|
20458
20397
|
const italicSVG = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="18" height="18" viewBox="0 0 18 18"><g><g style="opacity:0;"><rect x="0" y="0" width="18" height="18" rx="0" fill="#FFFFFF" fill-opacity="1"/></g><g><path d="M8,3Q7.9015086,3,7.8049095,3.019214718Q7.7083106,3.038429435,7.6173165,3.076120459Q7.5263224,3.11381148,7.4444296,3.16853037Q7.3625371,3.2232492600000002,7.2928932,3.2928932Q7.2232492,3.36253715,7.1685302,3.4444297600000002Q7.1138113999999995,3.52632231,7.0761204,3.61731648Q7.0384293,3.70831072,7.0192146,3.80490965Q6.99999994,3.90150857,7,4Q6.99999994,4.0984913,7.0192146,4.1950902Q7.0384293,4.291689,7.0761204,4.3826833Q7.1138113999999995,4.4736774,7.1685302,4.5555699Q7.2232492,4.6374626,7.2928932,4.7071065999999995Q7.3625371,4.7767504,7.4444296,4.8314693Q7.5263224,4.8861883,7.6173165,4.9238794Q7.7083106,4.9615704,7.8049096,4.9807851Q7.9015086,4.9999999,8,5L9.137146,5L8,13L7,13Q6.90150857,13,6.80490965,13.019215Q6.70831072,13.038429,6.6173164799999995,13.07612Q6.52632231,13.113811,6.44442973,13.16853Q6.36253715,13.223249,6.2928932,13.292892Q6.22324926,13.362536,6.16853037,13.444429Q6.11381148,13.526321,6.076120459,13.617315Q6.038429435,13.708309,6.019214718,13.804909Q6,13.901508,6,14Q6,14.098491,6.019214718,14.195089Q6.038429435,14.291689,6.076120459,14.382683Q6.11381148,14.473677,6.16853037,14.555569Q6.22324926,14.637462,6.2928932,14.707106Q6.36253715,14.77675,6.44442976,14.831469Q6.52632231,14.886187,6.6173164799999995,14.923878Q6.70831072,14.961569,6.80490965,14.980784Q6.90150857,15,7,15L11,15Q11.0984912,15,11.1950898,14.980784Q11.2916889,14.961569,11.382682800000001,14.923878Q11.473677200000001,14.886187,11.5555696,14.831469Q11.6374626,14.77675,11.7071066,14.707106Q11.7767506,14.637462,11.8314691,14.555569Q11.8861876,14.473677,11.9238791,14.382683Q11.9615698,14.291689,11.9807849,14.195089Q12,14.098491,12,14Q12,13.901508,11.9807849,13.804909Q11.9615698,13.708309,11.9238791,13.617315Q11.8861876,13.526321,11.8314691,13.444428Q11.7767506,13.362536,11.7071066,13.292892Q11.6374626,13.223249,11.5555701,13.16853Q11.473677200000001,13.113811,11.382682800000001,13.07612Q11.2916889,13.038429,11.1950903,13.019215Q11.0984912,13,11,13L9.8626451,13L11,5L12,5Q12.0984907,4.9999999,12.1950893,4.9807851Q12.2916884,4.9615703,12.382682800000001,4.9238793Q12.4736767,4.8861883,12.5555696,4.8314693Q12.6374621,4.7767504,12.7071061,4.7071065999999995Q12.776750100000001,4.6374626,12.831468600000001,4.5555699Q12.8861876,4.4736774,12.9238787,4.3826833Q12.9615698,4.291689,12.9807849,4.1950902Q12.999999500000001,4.0984913,13,4Q12.999999500000001,3.90150857,12.980784400000001,3.80490965Q12.9615698,3.70831072,12.9238787,3.61731648Q12.8861876,3.52632231,12.8314691,3.44442973Q12.7767506,3.36253715,12.7071066,3.2928932Q12.6374626,3.2232492600000002,12.5555696,3.16853037Q12.4736767,3.11381148,12.382682800000001,3.076120459Q12.2916884,3.038429435,12.1950898,3.019214718Q12.0984907,3,12,3L8,3Z" fill-rule="evenodd" fill="#555555" fill-opacity="1"/></g></g></svg>`;
|
|
20459
20398
|
const underlineSVG = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="18" height="18" viewBox="0 0 18 18"><g><g style="opacity:0;"><rect x="0" y="0" width="18" height="18" rx="0" fill="#FFFFFF" fill-opacity="1"/></g><g><path d="M5.000117301940918,14.500022450683593L5.000117301940918,14.500022450683593Q5.000117301940918,14.450777450683594,5.009724660740918,14.402477450683593Q5.019332019940918,14.354177450683594,5.038177530940918,14.308679450683593Q5.057023040940918,14.263182450683594,5.084382488940918,14.222236450683594Q5.111741931940918,14.181290450683594,5.146563901940918,14.146469450683593Q5.181385871940918,14.111646450683594,5.222332181940918,14.084286450683594Q5.263278451940918,14.056927450683594,5.308775541940918,14.038082450683595Q5.354272661940918,14.019237450683594,5.402572121940918,14.009630450683593Q5.450871581940918,14.000022450683593,5.500117301940918,14.000022450683593L12.500117301940918,14.000022450683593Q12.549362201940918,14.000022450683593,12.597661501940918,14.009629450683594Q12.645960801940918,14.019237450683594,12.691457701940918,14.038082450683595Q12.736954701940917,14.056926450683594,12.777901601940918,14.084285450683593Q12.818847701940918,14.111645450683593,12.853670101940917,14.146468450683594Q12.888492101940919,14.181289450683593,12.915851601940918,14.222235450683593Q12.943210601940919,14.263181450683593,12.962056201940918,14.308679450683593Q12.980901701940919,14.354177450683594,12.990509501940917,14.402477450683593Q13.00011680194092,14.450777450683594,13.000117301940918,14.500022450683593L13.000117301940918,14.500022450683593Q13.00011680194092,14.549268450683593,12.990509001940918,14.597566450683594Q12.980901701940919,14.645866450683593,12.962056201940918,14.691363450683594Q12.943210601940919,14.736860450683594,12.915851601940918,14.777807450683595Q12.888492101940919,14.818753450683595,12.853670101940917,14.853575450683593Q12.818847701940918,14.888397450683593,12.777901601940918,14.915756450683594Q12.736954701940917,14.943115450683594,12.691457701940918,14.961960450683593Q12.645960801940918,14.980806450683593,12.597661501940918,14.990413450683594Q12.549362201940918,15.000021450683594,12.500117301940918,15.000022450683593L5.500117301940918,15.000022450683593Q5.450871581940918,15.000021450683594,5.402572121940918,14.990414450683593Q5.354272661940918,14.980806450683593,5.308775541940918,14.961960450683593Q5.263278451940918,14.943115450683594,5.222332161940918,14.915756450683594Q5.181385871940918,14.888397450683593,5.146563901940918,14.853574450683594Q5.111741931940918,14.818752450683593,5.084382488940918,14.777806450683594Q5.057023040940918,14.736860450683594,5.038177530940918,14.691363450683594Q5.019332019940918,14.645866450683593,5.009724660740918,14.597567450683593Q5.000117301940918,14.549268450683593,5.000117301940918,14.500022450683593ZM5.045039176940918,3.548906330683594Q5.045039176940918,3.1015625006835936,5.283039211940918,2.8637809706835937Q5.521039131940918,2.6259994506835938,5.969039081940918,2.6259994506835938L5.997039201940918,2.6259994506835938Q6.445039201940918,2.6259994506835938,6.6830393019409176,2.8637809706835937Q6.921039201940918,3.1015625006835936,6.921039201940918,3.548906330683594L6.921039201940918,9.010000250683593Q6.921039201940918,9.737999950683594,7.180039401940919,10.255999550683594Q7.439039201940918,10.774000150683595,7.908039101940918,11.053999950683593Q8.377039001940918,11.333999650683594,8.993039101940917,11.333999650683594Q9.609039301940918,11.333999650683594,10.085039101940918,11.060999850683594Q10.561039401940917,10.788000150683594,10.820039301940918,10.263000450683593Q11.079039101940918,9.737999950683594,11.079039101940918,9.010000250683593L11.079039101940918,3.548906330683594Q11.079039101940918,3.1015625006835936,11.317039501940918,2.8637809706835937Q11.555039401940917,2.6259994506835938,12.003039401940917,2.6259994506835938L12.031039201940917,2.6259994506835938Q12.479039201940918,2.6259994506835938,12.717039101940918,2.8637809706835937Q12.955039001940918,3.1015625006835936,12.955039001940918,3.548906330683594L12.955039001940918,9.010000250683593Q12.955039001940918,10.144000050683594,12.416039501940919,11.095999750683594Q11.877039901940918,12.048000350683594,10.967039101940918,12.600999850683595Q10.057039301940918,13.154000450683593,8.993039101940917,13.154000450683593Q7.929039001940918,13.154000450683593,7.0190392019409185,12.600999850683595Q6.109039201940918,12.048000350683594,5.577039361940918,11.095999750683594Q5.045039176940918,10.144000050683594,5.045039176940918,9.010000250683593L5.045039176940918,3.548906330683594Z" fill="#555555" fill-opacity="1"/></g></g></svg>`;
|
|
@@ -20468,6 +20407,12 @@
|
|
|
20468
20407
|
const imageSVG = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="18" height="18" viewBox="0 0 18 18"><g><g style="opacity:0;"><rect x="0" y="0" width="18" height="18" rx="0" fill="#FFFFFF" fill-opacity="1"/></g><g><path d="M1.87471507,3.83578219Q1.5,4.18540478,1.5,4.6875L1.5,14.312503Q1.50000006,14.814598,1.874716,15.16422Q2.23459671,15.5,2.73684216,15.5L15.263157,15.5Q15.765403,15.5,16.125284,15.164218Q16.499999000000003,14.814597,16.499999000000003,14.312501L16.499999000000003,4.6875Q16.499999000000003,4.18540342,16.125284999999998,3.83578214Q15.765404,3.5,15.263157,3.5L2.73684216,3.5Q2.23459646,3.5,1.87471507,3.83578219ZM2.5,14.312503L2.5,4.6875Q2.5,4.5,2.73684216,4.5L15.263157,4.5Q15.5,4.5,15.5,4.6875L15.5,14.312501Q15.5,14.5,15.263157,14.5L2.73684216,14.5Q2.5,14.5,2.5,14.312503Z" fill-rule="evenodd" fill="#555555" fill-opacity="1" style="mix-blend-mode:passthrough"/></g><g><ellipse cx="5.4375" cy="7.4375" rx="0.4375" ry="0.4375" fill-opacity="0" stroke-opacity="1" stroke="#555555" fill="none" stroke-width="1" stroke-linecap="ROUND" stroke-linejoin="round" style="mix-blend-mode:passthrough"/></g><g><path d="M5.9053998,9.924615948146972L1.7143693,12.841608238146973Q1.61364189,12.911715538146973,1.55682093,13.020492338146973Q1.5,13.129269138146974,1.5,13.251992238146972L1.50000003,14.418008338146972Q1.50000003,14.876594038146973,1.84130602,15.195924738146973Q2.16843581,15.501991738146973,2.62437022,15.501991738146973L15.375628,15.501991738146973Q15.831564,15.501991738146973,16.158693,15.195924738146973Q16.5,14.876594038146973,16.5,14.418007838146973L16.5,13.251992238146972Q16.500000999999997,13.186988838146974,16.48338,13.124146438146973Q16.466759,13.061303638146972,16.434621,13.004799838146972Q16.402485,12.948296338146973,16.356969,12.901887938146972Q16.311453,12.855479738146972,16.255583,12.822251838146972L9.8796926,9.030259398146972Q9.842938400000001,9.008400078146973,9.8030057,8.993099628146974Q9.763073,8.977799118146972,9.721121799999999,8.969501908146972Q9.6791716,8.961204618146972,9.6364217,8.960151608146973Q9.5936708,8.959098578146973,9.551362000000001,8.965320438146973Q9.5090542,8.971542238146972,9.4684162,8.984858218146973Q9.427778199999999,8.998174158146973,9.3899918,9.018197478146973Q9.352206200000001,9.038220708146973,9.3183689,9.064369648146972Q9.284532500000001,9.090518598146973,9.2556267,9.122033748146972L7.6887164,10.830422738146973L6.4904227,9.934544588146972Q6.4273362,9.887379288146972,6.3528042,9.861893948146973Q6.2782726,9.836408678146972,6.1995153,9.835072038146972Q6.1207581,9.833735408146973,6.045404,9.856676968146973Q5.9700503000000005,9.879618528146972,5.9053998,9.924615948146972ZM2.5,13.513173138146973L2.50000006,14.418008338146972Q2.50000006,14.501992238146972,2.62437022,14.501992238146972L15.375628,14.501992238146972Q15.5,14.501992238146972,15.5,14.418007838146973L15.5,13.536368338146973L9.7178593,10.097503488146973L8.1200023,11.839632738146973Q8.0888524,11.873595438146973,8.052019600000001,11.901292338146973Q8.0151863,11.928988938146972,7.9739118,11.949486538146973Q7.9326363,11.969984038146972,7.88831,11.982591638146973Q7.8439837,11.995199238146974,7.7980995,11.999492138146973Q7.7522154,12.003785338146972,7.7063198,11.999619238146973Q7.6604242,11.995453338146973,7.6160631,11.982968338146973Q7.571702,11.970483338146973,7.5303702,11.950099938146973Q7.4890385,11.929716538146973,7.4521289,11.902122038146972L6.1805682,10.951467238146973L2.5,13.513173138146973Z" fill-rule="evenodd" fill="#555555" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg>`;
|
|
20469
20408
|
const colorSVG = `<svg t="1757558810758" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9036" width="20" height="19"><path d="M170.666667 796.444444m42.666666 0l597.333334 0q42.666667 0 42.666666 42.666667l0 0q0 42.666667-42.666666 42.666667l-597.333334 0q-42.666667 0-42.666666-42.666667l0 0q0-42.666667 42.666666-42.666667Z" fill="#999999" p-id="9037" data-spm-anchor-id="a313x.manage_type_myprojects.0.i1.62d43a81huHZ4F" class="selected"></path><path d="M756.565333 676.579556q8.760889 24.689778-3.185777 43.804444t-38.229334 19.114667h-3.185778q-26.282667 0-41.813333-15.530667-15.530667-15.530667-25.884444-45.795556L489.756444 252.871111h44.600889l-154.510222 425.301333q-11.150222 30.264889-25.884444 45.795556-14.791111 15.530667-41.813334 15.530667H308.906667q-25.486222 0-37.831111-19.114667-12.344889-19.114667-3.584-43.804444l175.217777-481.052445q17.521778-46.193778 68.494223-46.193778h1.592888q50.972444 0 68.494223 46.193778l175.217777 481.052445zM643.413333 484.636444v103.537778H380.586667v-103.537778h262.826666z" fill="#555555" p-id="9038" data-spm-anchor-id="a313x.manage_type_myprojects.0.i0.62d43a81huHZ4F" class="selected"></path></svg>`;
|
|
20470
20409
|
|
|
20410
|
+
const isIPad = () => {
|
|
20411
|
+
const ua = navigator.userAgent;
|
|
20412
|
+
const isMacOs = /(?:Macintosh)/.test(ua);
|
|
20413
|
+
return /(?:iPad|PlayBook)/.test(ua) || (isMacOs && navigator.maxTouchPoints > 1);
|
|
20414
|
+
};
|
|
20415
|
+
|
|
20471
20416
|
const QuillEditor = vue.defineComponent({
|
|
20472
20417
|
name: 'QuillEditor',
|
|
20473
20418
|
inheritAttrs: false,
|
|
@@ -20480,7 +20425,7 @@
|
|
|
20480
20425
|
},
|
|
20481
20426
|
contentType: {
|
|
20482
20427
|
type: String,
|
|
20483
|
-
default: '
|
|
20428
|
+
default: 'html',
|
|
20484
20429
|
validator: (value) => {
|
|
20485
20430
|
return ['delta', 'html', 'text'].includes(value);
|
|
20486
20431
|
},
|
|
@@ -20561,9 +20506,8 @@
|
|
|
20561
20506
|
const linkPosition = vue.ref({ top: 0, left: 0 });
|
|
20562
20507
|
const savedRange = vue.ref(null);
|
|
20563
20508
|
const { addClickHandler } = useGlobalClick(props.clickTargetSelector);
|
|
20564
|
-
const { isIPadBool, handleIPadNewline } = useIPadScene();
|
|
20565
20509
|
const { setQuill, handleBlotFormatterClick, configureBlotFormatter, applyImageStyle, registerBlotFormatter, getBlotFormatterConfig } = useBlotFormatter(editor, props.enableImageResize);
|
|
20566
|
-
const { setQuill: setLinkQuill, setHandleCustomLink, addLinkClickListener
|
|
20510
|
+
const { setQuill: setLinkQuill, setHandleCustomLink, addLinkClickListener } = useCustomLinkClick(editor);
|
|
20567
20511
|
vue.onMounted(() => {
|
|
20568
20512
|
initialize();
|
|
20569
20513
|
});
|
|
@@ -20615,7 +20559,7 @@
|
|
|
20615
20559
|
icons['image'] = imageSVG;
|
|
20616
20560
|
icons.list.ordered = listOrderedSVG;
|
|
20617
20561
|
icons.list.bullet = listBulletSVG;
|
|
20618
|
-
if (
|
|
20562
|
+
if (isIPad())
|
|
20619
20563
|
(icons['color'] = colorSVG);
|
|
20620
20564
|
}
|
|
20621
20565
|
}
|
|
@@ -20688,6 +20632,8 @@
|
|
|
20688
20632
|
quill.on('text-change', handleTextChange);
|
|
20689
20633
|
quill.on('selection-change', handleSelectionChange);
|
|
20690
20634
|
quill.on('editor-change', handleEditorChange);
|
|
20635
|
+
quill.on('text-change', updateHistoryState);
|
|
20636
|
+
quill.on('selection-change', updateHistoryState);
|
|
20691
20637
|
addLinkClickListener();
|
|
20692
20638
|
const toolbarClickHandler = (event) => {
|
|
20693
20639
|
var _a;
|
|
@@ -20841,32 +20787,6 @@
|
|
|
20841
20787
|
return Object.values(delta.ops).some((v) => !v.retain || Object.keys(v).length !== 1);
|
|
20842
20788
|
};
|
|
20843
20789
|
let internalModel;
|
|
20844
|
-
const processHTMLContent = (html, quill) => {
|
|
20845
|
-
if (/^<p><br\/?>(.+?)<\/p>$/.test(html)) {
|
|
20846
|
-
const match = html.match(/^<p><br\/?>(.+?)<\/p>$/);
|
|
20847
|
-
if (match && match[1]) {
|
|
20848
|
-
const processedHtml = `<p>${match[1]}</p>`;
|
|
20849
|
-
if (quill) {
|
|
20850
|
-
quill.root.innerHTML = processedHtml;
|
|
20851
|
-
}
|
|
20852
|
-
return processedHtml;
|
|
20853
|
-
}
|
|
20854
|
-
else {
|
|
20855
|
-
return maybeClone(getContents());
|
|
20856
|
-
}
|
|
20857
|
-
}
|
|
20858
|
-
else {
|
|
20859
|
-
if (html === '' ||
|
|
20860
|
-
html === '<p><br></p>' ||
|
|
20861
|
-
html === '<p></p>' ||
|
|
20862
|
-
html === '<p><br/></p>') {
|
|
20863
|
-
return '';
|
|
20864
|
-
}
|
|
20865
|
-
else {
|
|
20866
|
-
return maybeClone(getContents());
|
|
20867
|
-
}
|
|
20868
|
-
}
|
|
20869
|
-
};
|
|
20870
20790
|
const internalModelEquals = (against) => {
|
|
20871
20791
|
if (typeof internalModel === typeof against) {
|
|
20872
20792
|
if (against === internalModel) {
|
|
@@ -20884,13 +20804,15 @@
|
|
|
20884
20804
|
return false;
|
|
20885
20805
|
};
|
|
20886
20806
|
const handleTextChange = (delta, oldContents, source) => {
|
|
20807
|
+
var _a;
|
|
20887
20808
|
if (props.contentType === 'html') {
|
|
20888
|
-
const
|
|
20889
|
-
internalModel =
|
|
20890
|
-
if (
|
|
20891
|
-
|
|
20892
|
-
|
|
20893
|
-
|
|
20809
|
+
const rawHTML = (_a = quill === null || quill === void 0 ? void 0 : quill.root.innerHTML) !== null && _a !== void 0 ? _a : '';
|
|
20810
|
+
internalModel = getHTML();
|
|
20811
|
+
if (internalModel && internalModel !== rawHTML) {
|
|
20812
|
+
vue.nextTick(() => {
|
|
20813
|
+
if (quill && quill.root.innerHTML !== internalModel && typeof internalModel === 'string') {
|
|
20814
|
+
quill.root.innerHTML = internalModel;
|
|
20815
|
+
}
|
|
20894
20816
|
});
|
|
20895
20817
|
}
|
|
20896
20818
|
}
|
|
@@ -20904,7 +20826,13 @@
|
|
|
20904
20826
|
applyImageStyle();
|
|
20905
20827
|
});
|
|
20906
20828
|
ctx.emit('textChange', { delta, oldContents, source });
|
|
20907
|
-
|
|
20829
|
+
};
|
|
20830
|
+
const observeTooltip = () => {
|
|
20831
|
+
const preview = document.querySelector('.ql-preview');
|
|
20832
|
+
if (!preview)
|
|
20833
|
+
return;
|
|
20834
|
+
preview.setAttribute('href', 'javascript:void(0)');
|
|
20835
|
+
preview.setAttribute('target', '_self');
|
|
20908
20836
|
};
|
|
20909
20837
|
const controlToolbarVisible = (visible) => {
|
|
20910
20838
|
var _a;
|
|
@@ -20917,13 +20845,13 @@
|
|
|
20917
20845
|
};
|
|
20918
20846
|
const isEditorFocus = vue.ref();
|
|
20919
20847
|
const handleSelectionChange = (range, oldRange, source) => {
|
|
20848
|
+
observeTooltip();
|
|
20920
20849
|
isEditorFocus.value = !!(quill === null || quill === void 0 ? void 0 : quill.hasFocus());
|
|
20921
20850
|
canUseLink.value = !!(range && range.length > 0);
|
|
20922
20851
|
if (isEditorFocus.value) {
|
|
20923
20852
|
controlToolbarVisible(true);
|
|
20924
20853
|
}
|
|
20925
20854
|
ctx.emit('selectionChange', { range, oldRange, source });
|
|
20926
|
-
updateHistoryState();
|
|
20927
20855
|
};
|
|
20928
20856
|
vue.watch(isEditorFocus, (focus) => {
|
|
20929
20857
|
if (focus)
|
|
@@ -20947,6 +20875,19 @@
|
|
|
20947
20875
|
source: args[3],
|
|
20948
20876
|
});
|
|
20949
20877
|
};
|
|
20878
|
+
const getEditor = () => {
|
|
20879
|
+
return editor.value;
|
|
20880
|
+
};
|
|
20881
|
+
const getToolbar = () => {
|
|
20882
|
+
var _a;
|
|
20883
|
+
return (_a = quill === null || quill === void 0 ? void 0 : quill.getModule('toolbar')) === null || _a === void 0 ? void 0 : _a.container;
|
|
20884
|
+
};
|
|
20885
|
+
const getQuill = () => {
|
|
20886
|
+
if (quill)
|
|
20887
|
+
return quill;
|
|
20888
|
+
else
|
|
20889
|
+
throw `The quill editor hasn't been instantiated`;
|
|
20890
|
+
};
|
|
20950
20891
|
const getContents = (index, length) => {
|
|
20951
20892
|
if (props.contentType === 'html') {
|
|
20952
20893
|
return getHTML();
|
|
@@ -20957,14 +20898,20 @@
|
|
|
20957
20898
|
return quill === null || quill === void 0 ? void 0 : quill.getContents(index, length);
|
|
20958
20899
|
};
|
|
20959
20900
|
const setContents = (content, source = 'api') => {
|
|
20960
|
-
var _a;
|
|
20961
20901
|
const normalizedContent = !content
|
|
20962
20902
|
? props.contentType === 'delta'
|
|
20963
20903
|
? new Delta$1()
|
|
20964
20904
|
: ''
|
|
20965
20905
|
: content;
|
|
20966
20906
|
if (props.contentType === 'html') {
|
|
20967
|
-
|
|
20907
|
+
if (!normalizedContent || normalizedContent === '') {
|
|
20908
|
+
if (quill) {
|
|
20909
|
+
quill.root.innerHTML = '';
|
|
20910
|
+
}
|
|
20911
|
+
}
|
|
20912
|
+
else {
|
|
20913
|
+
setHTML(normalizedContent);
|
|
20914
|
+
}
|
|
20968
20915
|
}
|
|
20969
20916
|
else if (props.contentType === 'text') {
|
|
20970
20917
|
setText(normalizedContent, source);
|
|
@@ -20984,22 +20931,31 @@
|
|
|
20984
20931
|
const getHTML = () => {
|
|
20985
20932
|
var _a;
|
|
20986
20933
|
let html = (_a = quill === null || quill === void 0 ? void 0 : quill.root.innerHTML) !== null && _a !== void 0 ? _a : '';
|
|
20934
|
+
if (html === '<p><br></p>' ||
|
|
20935
|
+
html === '<p></p>' ||
|
|
20936
|
+
html === '<p><br/></p>' ||
|
|
20937
|
+
html === '<p><br><br></p>') {
|
|
20938
|
+
return '';
|
|
20939
|
+
}
|
|
20987
20940
|
if (/^<p><br\/?>(.+?)<\/p>$/.test(html)) {
|
|
20988
20941
|
const match = html.match(/^<p><br\/?>(.+?)<\/p>$/);
|
|
20989
20942
|
if (match && match[1]) {
|
|
20990
20943
|
html = `<p>${match[1]}</p>`;
|
|
20991
20944
|
}
|
|
20992
20945
|
}
|
|
20993
|
-
if (html === '<p><br></p>' ||
|
|
20994
|
-
html === '<p></p>' ||
|
|
20995
|
-
html === '<p><br/></p>') {
|
|
20996
|
-
html = '';
|
|
20997
|
-
}
|
|
20998
20946
|
return html;
|
|
20999
20947
|
};
|
|
21000
20948
|
const setHTML = (html) => {
|
|
21001
|
-
if (quill)
|
|
20949
|
+
if (quill) {
|
|
21002
20950
|
quill.root.innerHTML = html;
|
|
20951
|
+
if (html && !html.includes('<br>')) {
|
|
20952
|
+
vue.nextTick(() => {
|
|
20953
|
+
if (quill && quill.root.innerHTML !== html) {
|
|
20954
|
+
quill.root.innerHTML = html;
|
|
20955
|
+
}
|
|
20956
|
+
});
|
|
20957
|
+
}
|
|
20958
|
+
}
|
|
21003
20959
|
};
|
|
21004
20960
|
const pasteHTML = (html, source = 'api') => {
|
|
21005
20961
|
const delta = quill === null || quill === void 0 ? void 0 : quill.clipboard.convert(html);
|
|
@@ -21044,6 +21000,38 @@
|
|
|
21044
21000
|
handleCustomLink(true);
|
|
21045
21001
|
}
|
|
21046
21002
|
};
|
|
21003
|
+
const calculateSelectionPosition = (range) => {
|
|
21004
|
+
var _a;
|
|
21005
|
+
if (!quill)
|
|
21006
|
+
return { top: 0, left: 0 };
|
|
21007
|
+
const selectionRange = range || quill.getSelection();
|
|
21008
|
+
if (!selectionRange || selectionRange.length === 0)
|
|
21009
|
+
return { top: 0, left: 0 };
|
|
21010
|
+
try {
|
|
21011
|
+
const bounds = quill.getBounds(selectionRange.index, selectionRange.length);
|
|
21012
|
+
const editorElement = (_a = editor.value) === null || _a === void 0 ? void 0 : _a.querySelector('.ql-editor');
|
|
21013
|
+
const editorContainer = editorElement === null || editorElement === void 0 ? void 0 : editorElement.closest('.quill-editor-container');
|
|
21014
|
+
const editorWidth = editorContainer ? editorContainer.clientWidth : ((editorElement === null || editorElement === void 0 ? void 0 : editorElement.clientWidth) || 0);
|
|
21015
|
+
const customLinkWidth = 310;
|
|
21016
|
+
const maxLeft = editorWidth - customLinkWidth - 16;
|
|
21017
|
+
const left = Math.min(bounds.left, Math.max(0, maxLeft));
|
|
21018
|
+
const editorRect = editorElement === null || editorElement === void 0 ? void 0 : editorElement.getBoundingClientRect();
|
|
21019
|
+
const containerRect = editorContainer === null || editorContainer === void 0 ? void 0 : editorContainer.getBoundingClientRect();
|
|
21020
|
+
if (!editorRect || !containerRect) {
|
|
21021
|
+
return { top: bounds.top + bounds.height + 5, left: left };
|
|
21022
|
+
}
|
|
21023
|
+
const editorOffsetTop = editorRect.top - containerRect.top;
|
|
21024
|
+
const top = editorOffsetTop + bounds.top + bounds.height + 5;
|
|
21025
|
+
return {
|
|
21026
|
+
top: top,
|
|
21027
|
+
left: left
|
|
21028
|
+
};
|
|
21029
|
+
}
|
|
21030
|
+
catch (error) {
|
|
21031
|
+
console.warn('计算选中位置时出错:', error);
|
|
21032
|
+
return { top: 0, left: 0 };
|
|
21033
|
+
}
|
|
21034
|
+
};
|
|
21047
21035
|
const handleCustomLink = (bool, linkInfo) => {
|
|
21048
21036
|
if (!quill)
|
|
21049
21037
|
return;
|
|
@@ -21136,6 +21124,9 @@
|
|
|
21136
21124
|
linkUrl,
|
|
21137
21125
|
linkText,
|
|
21138
21126
|
linkPosition,
|
|
21127
|
+
getEditor,
|
|
21128
|
+
getToolbar,
|
|
21129
|
+
getQuill,
|
|
21139
21130
|
getContents,
|
|
21140
21131
|
setContents,
|
|
21141
21132
|
getHTML,
|