@procore/text-editor 1.1.0 → 1.2.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/.jest/ckeditorMock.js +1 -0
- package/.jest/setupTests.js +1 -2
- package/CHANGELOG.md +9 -0
- package/README.md +15 -0
- package/dist/TextEditor/CKTextEditor.js +7 -3
- package/dist/TextEditor/CKTextEditor.js.map +1 -1
- package/dist/TextEditor/TextEditor.styles.js +6 -6
- package/dist/TextEditor/TextEditor.styles.js.map +1 -1
- package/dist/TextEditor/TextEditor.types.d.ts +28 -8
- package/dist/TextEditor/TextEditor.types.js.map +1 -1
- package/dist/TextEditor/TinyMCETextEditor.js +2 -1
- package/dist/TextEditor/TinyMCETextEditor.js.map +1 -1
- package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.d.ts +6 -0
- package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.js +114 -14
- package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.js.map +1 -1
- package/dist/TextEditor/utils/config.js +3 -3
- package/dist/TextEditor/utils/config.js.map +1 -1
- package/dist/TextEditor/utils/richTextEditorHandlers.d.ts +4 -1
- package/dist/TextEditor/utils/richTextEditorHandlers.js +79 -21
- package/dist/TextEditor/utils/richTextEditorHandlers.js.map +1 -1
- package/dist/TextEditorOutput/TextEditorOutput.styles.js +2 -2
- package/dist/TextEditorOutput/TextEditorOutput.styles.js.map +1 -1
- package/dist/_typedoc/TextEditor/TextEditor.types.json +323 -49
- package/dist/_typedoc/TextEditor/TextEditorProvider.types.json +2 -2
- package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +3 -3
- package/dist/_typedoc/deprecations.json +1 -1
- package/dist/locales/en.json +1 -0
- package/package.json +7 -7
|
@@ -250,16 +250,77 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
250
250
|
this.configureProstoreFileIdConversion();
|
|
251
251
|
this.configureUploadAdapter(imageUpload);
|
|
252
252
|
this.configureUnsupportedFileDrop(imageUpload);
|
|
253
|
+
this.configurePastedImageFileOverExternalHtml(imageUpload);
|
|
253
254
|
this.configurePastedImageLimit(imageUpload);
|
|
254
255
|
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* "Copy Image" puts both the image bytes and HTML with the external URL on
|
|
259
|
+
* the clipboard. CKEditor prefers the HTML, but the backend strips external
|
|
260
|
+
* image URLs — so upload the bytes instead.
|
|
261
|
+
*/
|
|
262
|
+
}, {
|
|
263
|
+
key: "configurePastedImageFileOverExternalHtml",
|
|
264
|
+
value: function configurePastedImageFileOverExternalHtml(imageUpload) {
|
|
265
|
+
var _this2 = this;
|
|
266
|
+
this.listenTo(this.editor.editing.view.document, 'clipboardInput', function (evt, data) {
|
|
267
|
+
var dataTransfer = data.dataTransfer;
|
|
268
|
+
var files = Array.from(dataTransfer.files);
|
|
269
|
+
var imageFiles = files.filter(function (file) {
|
|
270
|
+
return file.type.startsWith('image/');
|
|
271
|
+
});
|
|
272
|
+
var html = dataTransfer.getData('text/html');
|
|
273
|
+
var isImageOnlyPaste = Boolean(html) && isImageOnlyHtml(html);
|
|
274
|
+
var clipboardHasImageBytes = imageFiles.length > 0;
|
|
275
|
+
if (!isImageOnlyPaste) {
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// The clipboard carries only an image URL, no bytes to upload (e.g.
|
|
280
|
+
// "Copy Image" on an SVG). Show an error for clearly unsupported
|
|
281
|
+
// extensions; otherwise let the default clipboard flow handle it.
|
|
282
|
+
if (!clipboardHasImageBytes) {
|
|
283
|
+
var unsupportedExtension = unsupportedPastedImageExtension(html);
|
|
284
|
+
if (unsupportedExtension) {
|
|
285
|
+
var _imageUpload$onError;
|
|
286
|
+
evt.stop();
|
|
287
|
+
(_imageUpload$onError = imageUpload.onError) === null || _imageUpload$onError === void 0 || _imageUpload$onError.call(imageUpload, imageUpload.i18n.t('textEditor.imageUpload.unsupportedType', {
|
|
288
|
+
type: "".concat(unsupportedExtension, " ")
|
|
289
|
+
}));
|
|
290
|
+
}
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
evt.stop();
|
|
294
|
+
|
|
295
|
+
// Unsupported types already got a toast from the unsupported-file
|
|
296
|
+
// drop handler, which runs before this listener.
|
|
297
|
+
var tooLargeFile = imageFiles.find(function (file) {
|
|
298
|
+
return DEFAULT_ALLOWED_MIME_TYPES.has(file.type) && file.size > MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES;
|
|
299
|
+
});
|
|
300
|
+
if (tooLargeFile) {
|
|
301
|
+
var _imageUpload$onError2;
|
|
302
|
+
(_imageUpload$onError2 = imageUpload.onError) === null || _imageUpload$onError2 === void 0 || _imageUpload$onError2.call(imageUpload, imageUpload.i18n.t('textEditor.imageUpload.fileTooLarge'));
|
|
303
|
+
}
|
|
304
|
+
var uploadableFiles = imageFiles.filter(function (file) {
|
|
305
|
+
return DEFAULT_ALLOWED_MIME_TYPES.has(file.type) && file.size <= MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES;
|
|
306
|
+
});
|
|
307
|
+
if (uploadableFiles.length > 0) {
|
|
308
|
+
_this2.editor.execute('uploadImage', {
|
|
309
|
+
file: uploadableFiles
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
}, {
|
|
313
|
+
priority: 'high'
|
|
314
|
+
});
|
|
315
|
+
}
|
|
255
316
|
}, {
|
|
256
317
|
key: "configureUploadAdapter",
|
|
257
318
|
value: function configureUploadAdapter(imageUpload) {
|
|
258
|
-
var
|
|
319
|
+
var _this3 = this;
|
|
259
320
|
var fileRepository = this.editor.plugins.get(FileRepository);
|
|
260
321
|
fileRepository.createUploadAdapter = function (loader) {
|
|
261
322
|
return new ProcoreImageUploadAdapter(loader, imageUpload, function () {
|
|
262
|
-
return
|
|
323
|
+
return _this3.currentEmbeddedImageCountOrUndefined();
|
|
263
324
|
});
|
|
264
325
|
};
|
|
265
326
|
var imageUploadEditing = this.editor.plugins.get(ImageUploadEditing);
|
|
@@ -270,7 +331,7 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
270
331
|
return;
|
|
271
332
|
}
|
|
272
333
|
var prostoreFileId = String(data.prostoreFileId);
|
|
273
|
-
|
|
334
|
+
_this3.editor.model.change(function (writer) {
|
|
274
335
|
writer.setAttribute('prostoreFileId', prostoreFileId, imageElement);
|
|
275
336
|
});
|
|
276
337
|
});
|
|
@@ -278,11 +339,11 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
278
339
|
}, {
|
|
279
340
|
key: "configureProstoreFileIdConversion",
|
|
280
341
|
value: function configureProstoreFileIdConversion() {
|
|
281
|
-
var
|
|
342
|
+
var _this4 = this;
|
|
282
343
|
var imageModelNames = ['imageBlock', 'imageInline'];
|
|
283
344
|
imageModelNames.forEach(function (imageModelName) {
|
|
284
|
-
if (
|
|
285
|
-
|
|
345
|
+
if (_this4.canExtendSchemaElement(imageModelName)) {
|
|
346
|
+
_this4.editor.model.schema.extend(imageModelName, {
|
|
286
347
|
allowAttributes: ['prostoreFileId']
|
|
287
348
|
});
|
|
288
349
|
}
|
|
@@ -314,18 +375,18 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
314
375
|
}, {
|
|
315
376
|
key: "configurePastedImageLimit",
|
|
316
377
|
value: function configurePastedImageLimit(imageUpload) {
|
|
317
|
-
var
|
|
378
|
+
var _this5 = this;
|
|
318
379
|
var clipboardPipeline = this.editor.plugins.get(ClipboardPipeline);
|
|
319
380
|
clipboardPipeline.on('inputTransformation', function (event, data) {
|
|
320
|
-
var currentImageCount =
|
|
381
|
+
var currentImageCount = _this5.currentEmbeddedImageCountOrUndefined();
|
|
321
382
|
if (currentImageCount === undefined) {
|
|
322
383
|
return;
|
|
323
384
|
}
|
|
324
385
|
var pastedImageCount = countImages(data.content);
|
|
325
386
|
if (exceedsImageLimit(currentImageCount, pastedImageCount)) {
|
|
326
|
-
var _event$stop, _imageUpload$
|
|
387
|
+
var _event$stop, _imageUpload$onError3;
|
|
327
388
|
(_event$stop = event.stop) === null || _event$stop === void 0 || _event$stop.call(event);
|
|
328
|
-
(_imageUpload$
|
|
389
|
+
(_imageUpload$onError3 = imageUpload.onError) === null || _imageUpload$onError3 === void 0 || _imageUpload$onError3.call(imageUpload, imageUpload.i18n.t('textEditor.imageUpload.imageLimit', {
|
|
329
390
|
count: MAX_RICH_TEXT_IMAGES
|
|
330
391
|
}));
|
|
331
392
|
}
|
|
@@ -335,7 +396,7 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
335
396
|
key: "configureUnsupportedFileDrop",
|
|
336
397
|
value: function configureUnsupportedFileDrop(imageUpload) {
|
|
337
398
|
this.listenTo(this.editor.editing.view.document, 'clipboardInput', function (event, data) {
|
|
338
|
-
var _imageUpload$
|
|
399
|
+
var _imageUpload$onError4;
|
|
339
400
|
var files = data.dataTransfer.files;
|
|
340
401
|
if (files.length === 0) {
|
|
341
402
|
return;
|
|
@@ -346,7 +407,7 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
346
407
|
if (!unsupportedFile) {
|
|
347
408
|
return;
|
|
348
409
|
}
|
|
349
|
-
(_imageUpload$
|
|
410
|
+
(_imageUpload$onError4 = imageUpload.onError) === null || _imageUpload$onError4 === void 0 || _imageUpload$onError4.call(imageUpload, imageUpload.i18n.t('textEditor.imageUpload.unsupportedType', {
|
|
350
411
|
type: _fileTypeLabel(unsupportedFile)
|
|
351
412
|
}));
|
|
352
413
|
if (files.every(function (file) {
|
|
@@ -367,10 +428,10 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
367
428
|
}, {
|
|
368
429
|
key: "currentEmbeddedImageCountOrUndefined",
|
|
369
430
|
value: function currentEmbeddedImageCountOrUndefined() {
|
|
370
|
-
var
|
|
431
|
+
var _this6 = this;
|
|
371
432
|
try {
|
|
372
433
|
return this.editor.model.document.getRootNames().reduce(function (total, rootName) {
|
|
373
|
-
var root =
|
|
434
|
+
var root = _this6.editor.model.document.getRoot(rootName);
|
|
374
435
|
return root ? total + countModelImages(root) : total;
|
|
375
436
|
}, 0);
|
|
376
437
|
} catch (_error) {
|
|
@@ -389,6 +450,45 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
389
450
|
}
|
|
390
451
|
}]);
|
|
391
452
|
}(Plugin);
|
|
453
|
+
|
|
454
|
+
// "Copy Image" shape: an image with no meaningful text. Rich pastes mixing
|
|
455
|
+
// text and images keep the default clipboard handling.
|
|
456
|
+
function isImageOnlyHtml(html) {
|
|
457
|
+
var _doc$body$textContent;
|
|
458
|
+
var doc = new DOMParser().parseFromString(html, 'text/html');
|
|
459
|
+
return doc.body.querySelector('img') !== null && !((_doc$body$textContent = doc.body.textContent) !== null && _doc$body$textContent !== void 0 && _doc$body$textContent.trim());
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
// Uppercase extension (e.g. "SVG") when every pasted image URL clearly has an
|
|
463
|
+
// unsupported extension; undefined when supported, unknown, or inline data.
|
|
464
|
+
function unsupportedPastedImageExtension(html) {
|
|
465
|
+
var doc = new DOMParser().parseFromString(html, 'text/html');
|
|
466
|
+
var extensions = Array.from(doc.body.querySelectorAll('img')).map(function (img) {
|
|
467
|
+
var _img$getAttribute;
|
|
468
|
+
return imageUrlExtension((_img$getAttribute = img.getAttribute('src')) !== null && _img$getAttribute !== void 0 ? _img$getAttribute : '');
|
|
469
|
+
});
|
|
470
|
+
return extensions.every(isUnsupportedImageExtension) ? extensions[0] : undefined;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
// "https://site.com/logo.svg?w=64" -> "SVG"; undefined for inline data or
|
|
474
|
+
// URLs without a file extension.
|
|
475
|
+
function imageUrlExtension(src) {
|
|
476
|
+
var _path$split$pop;
|
|
477
|
+
if (src.startsWith('data:') || src.startsWith('blob:')) {
|
|
478
|
+
return undefined;
|
|
479
|
+
}
|
|
480
|
+
var path = src.split(/[?#]/)[0];
|
|
481
|
+
var fileName = (_path$split$pop = path.split('/').pop()) !== null && _path$split$pop !== void 0 ? _path$split$pop : '';
|
|
482
|
+
return fileExtensionLabel(fileName);
|
|
483
|
+
}
|
|
484
|
+
function isUnsupportedImageExtension(extension) {
|
|
485
|
+
if (!extension) {
|
|
486
|
+
return false;
|
|
487
|
+
}
|
|
488
|
+
var lower = extension.toLowerCase();
|
|
489
|
+
var mimeType = "image/".concat(lower === 'jpg' ? 'jpeg' : lower);
|
|
490
|
+
return !DEFAULT_ALLOWED_MIME_TYPES.has(mimeType);
|
|
491
|
+
}
|
|
392
492
|
function countImages(node) {
|
|
393
493
|
if (!node.is('element') && !node.is('documentFragment')) {
|
|
394
494
|
return 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcoreImageUploadPlugin.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_classCallCheck","_defineProperties","_toPropertyKey","key","_createClass","_toPrimitive","_typeof","toPrimitive","String","Number","ClipboardPipeline","FileRepository","ImageUploadEditing","Plugin","DEFAULT_ALLOWED_MIME_TYPES","IMAGE_TYPE_LABELS","MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES","MAX_RICH_TEXT_IMAGES","PDF_UNSUPPORTED_MIME_TYPES","RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE","canonicalizeTextEditorImageUrl","REPORTED_UPLOAD_ERROR","exceedsImageLimit","currentImageCount","newImageCount","undefined","ProcoreImageUploadAdapter","loader","imageUpload","getEmbeddedImageCount","_upload","_callee","file","result","_t","_context","abortController","AbortController","fail","i18n","validateFile","warnPdfUnsupportedFile","validateReadableImage","validateImageCount","uploadFile","signal","aborted","toCkEditorResponse","toSilentUploadError","upload","abort","_this$abortController","_this$abortUpload","abortUpload","has","type","fileTypeLabel","size","_this$imageUpload$onW","_this$imageUpload","onWarning","_validateReadableImage","_callee2","url","image","_t2","_context2","URL","createObjectURL","Image","reject","onload","onerror","Error","src","revokeObjectURL","_x","_this$getEmbeddedImag","embeddedImageCount","count","prostoreFileId","test","defaultUrl","urls","response","width","height","get","_this","onProgress","uploaded","total","uploadTotal","message","_this$imageUpload$onE","_this$imageUpload2","onError","error","ProcoreImageUploadPlugin","_Plugin","_callSuper","_inherits","init","editor","config","configureProstoreFileIdConversion","configureUploadAdapter","configureUnsupportedFileDrop","configurePastedImageLimit","_this2","fileRepository","plugins","createUploadAdapter","currentEmbeddedImageCountOrUndefined","imageUploadEditing","on","_event","_ref","data","imageElement","model","change","writer","setAttribute","_this3","imageModelNames","forEach","imageModelName","canExtendSchemaElement","schema","extend","allowAttributes","conversion","attributeToAttribute","view","name","_this4","clipboardPipeline","event","pastedImageCount","countImages","content","_event$stop","_imageUpload$onError","stop","listenTo","editing","document","_imageUpload$onError2","files","dataTransfer","unsupportedFile","find","every","priority","isRegistered","_this5","getRootNames","reduce","rootName","root","getRoot","countModelImages","_error","node","is","imageCount","_i","_Array$from","Array","from","getChildren","child","isImageModelElement","_i2","_Array$from2","item","_IMAGE_TYPE_LABELS$fi","fileType","fileExtensionLabel","concat","fileName","extension","split","pop","toUpperCase"],"sources":["../../../../src/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.ts"],"sourcesContent":["import type {\n ClipboardInputTransformationData,\n EventInfo,\n ImageUploadCompleteData,\n ModelElement,\n ModelItem,\n UploadAdapter,\n ViewDocumentClipboardInputEvent,\n ViewDocumentFragment,\n ViewNode,\n} from 'ckeditor5'\nimport {\n ClipboardPipeline,\n FileRepository,\n ImageUploadEditing,\n Plugin,\n} from 'ckeditor5'\n\nimport type {\n TextEditorImageUploadHandlers,\n TextEditorImageUploadResult,\n} from '../../TextEditor.types'\nimport {\n DEFAULT_ALLOWED_MIME_TYPES,\n IMAGE_TYPE_LABELS,\n MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES,\n MAX_RICH_TEXT_IMAGES,\n PDF_UNSUPPORTED_MIME_TYPES,\n RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n} from '../../utils/imageAttributes'\nimport { canonicalizeTextEditorImageUrl } from '../../utils/imageUrls'\n\nconst REPORTED_UPLOAD_ERROR = ''\n\nconst exceedsImageLimit = (currentImageCount: number, newImageCount = 0) =>\n currentImageCount + newImageCount > MAX_RICH_TEXT_IMAGES\n\ninterface UploadLoader {\n file: Promise<File | null>\n uploaded?: number\n uploadTotal?: number | null\n}\n\ntype ClipboardCallback = (\n event: EventInfo<'inputTransformation', unknown>,\n data: ClipboardInputTransformationData\n) => void\n\ntype CkEditorUploadResponse = {\n urls: {\n default: string\n }\n prostoreFileId: number | string\n width?: number\n height?: number\n}\n\nexport class ProcoreImageUploadAdapter implements UploadAdapter {\n private abortController?: AbortController\n private abortUpload?: () => void\n\n constructor(\n private readonly loader: UploadLoader,\n private readonly imageUpload: TextEditorImageUploadHandlers,\n private readonly getEmbeddedImageCount?: () => number | undefined\n ) {}\n\n async upload(): Promise<CkEditorUploadResponse> {\n this.abortController = new AbortController()\n\n try {\n const file = await this.loader.file\n\n if (!file) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.noFile'))\n }\n\n this.validateFile(file)\n this.warnPdfUnsupportedFile(file)\n await this.validateReadableImage(file)\n this.validateImageCount()\n\n const result = await this.uploadFile(file)\n\n if (this.abortController.signal.aborted) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.aborted'))\n }\n\n return this.toCkEditorResponse(result)\n } catch (error) {\n throw this.toSilentUploadError(error)\n }\n }\n\n abort() {\n this.abortController?.abort()\n this.abortUpload?.()\n }\n\n private validateFile(file: File) {\n if (!DEFAULT_ALLOWED_MIME_TYPES.has(file.type)) {\n throw this.fail(\n this.i18n.t('textEditor.imageUpload.unsupportedType', {\n type: this.fileTypeLabel(file),\n })\n )\n }\n\n if (file.size > MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.fileTooLarge'))\n }\n }\n\n private warnPdfUnsupportedFile(file: File) {\n if (!PDF_UNSUPPORTED_MIME_TYPES.has(file.type)) {\n return\n }\n\n this.imageUpload.onWarning?.(\n this.i18n.t('textEditor.imageUpload.pdfUnsupportedType', {\n type: this.fileTypeLabel(file),\n })\n )\n }\n\n private async validateReadableImage(file: File) {\n const url = URL.createObjectURL(file)\n\n try {\n const image = new Image()\n\n await new Promise<void>((resolve, reject) => {\n image.onload = () => resolve()\n image.onerror = () => reject(new Error())\n image.src = url\n })\n } catch (_error) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.unreadable'))\n } finally {\n URL.revokeObjectURL(url)\n }\n }\n\n private validateImageCount() {\n const embeddedImageCount = this.getEmbeddedImageCount?.()\n\n if (\n embeddedImageCount !== undefined &&\n exceedsImageLimit(embeddedImageCount)\n ) {\n throw this.fail(\n this.i18n.t('textEditor.imageUpload.imageLimit', {\n count: MAX_RICH_TEXT_IMAGES,\n })\n )\n }\n }\n\n private toCkEditorResponse(\n result: TextEditorImageUploadResult\n ): CkEditorUploadResponse {\n if (\n !result.prostoreFileId ||\n !/^[\\w-]+$/.test(String(result.prostoreFileId))\n ) {\n throw this.fail(\n this.i18n.t('textEditor.imageUpload.invalidProstoreFileId')\n )\n }\n\n const defaultUrl = canonicalizeTextEditorImageUrl(result.urls.default)\n\n if (!defaultUrl) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.invalidImageUrl'))\n }\n\n const response: CkEditorUploadResponse = {\n urls: {\n default: defaultUrl,\n },\n prostoreFileId: result.prostoreFileId,\n width: result.width,\n height: result.height,\n }\n\n return response\n }\n\n private get i18n() {\n return this.imageUpload.i18n\n }\n\n private fileTypeLabel(file: File) {\n return fileTypeLabel(file)\n }\n\n private uploadFile(file: File) {\n return new Promise<TextEditorImageUploadResult>((resolve, reject) => {\n this.abortUpload = () =>\n reject(this.fail(this.i18n.t('textEditor.imageUpload.aborted')))\n\n this.imageUpload\n .upload(\n file,\n { signal: this.abortController!.signal },\n {\n onProgress: (uploaded, total) => {\n this.loader.uploaded = uploaded\n\n if (total !== undefined) {\n this.loader.uploadTotal = total\n }\n },\n }\n )\n .then(resolve)\n .catch(reject)\n })\n }\n\n private fail(message: string) {\n this.imageUpload.onError?.(message)\n\n return REPORTED_UPLOAD_ERROR\n }\n\n private toSilentUploadError(error: unknown) {\n if (error === REPORTED_UPLOAD_ERROR) {\n return error\n }\n\n if (error instanceof Error && error.message) {\n return this.fail(error.message)\n }\n\n return this.fail(this.i18n.t('textEditor.imageUpload.failed'))\n }\n}\n\nexport class ProcoreImageUploadPlugin extends Plugin {\n static get pluginName() {\n return 'ProcoreImageUploadPlugin'\n }\n\n static get requires() {\n return [FileRepository, ImageUploadEditing]\n }\n\n init() {\n const imageUpload = this.editor.config.get('procoreImageUpload') as\n | TextEditorImageUploadHandlers\n | undefined\n\n if (!imageUpload) {\n return\n }\n\n this.configureProstoreFileIdConversion()\n this.configureUploadAdapter(imageUpload)\n this.configureUnsupportedFileDrop(imageUpload)\n this.configurePastedImageLimit(imageUpload)\n }\n\n private configureUploadAdapter(imageUpload: TextEditorImageUploadHandlers) {\n const fileRepository = this.editor.plugins.get(FileRepository)\n\n fileRepository.createUploadAdapter = (loader) =>\n new ProcoreImageUploadAdapter(loader, imageUpload, () =>\n this.currentEmbeddedImageCountOrUndefined()\n )\n\n const imageUploadEditing = this.editor.plugins.get(ImageUploadEditing)\n\n imageUploadEditing.on(\n 'uploadComplete',\n (_event, { data, imageElement }: ImageUploadCompleteData) => {\n if (!imageElement || !data?.prostoreFileId) {\n return\n }\n\n const prostoreFileId = String(data.prostoreFileId)\n\n this.editor.model.change((writer) => {\n writer.setAttribute('prostoreFileId', prostoreFileId, imageElement)\n })\n }\n )\n }\n\n private configureProstoreFileIdConversion() {\n const imageModelNames = ['imageBlock', 'imageInline']\n\n imageModelNames.forEach((imageModelName) => {\n if (this.canExtendSchemaElement(imageModelName)) {\n this.editor.model.schema.extend(imageModelName, {\n allowAttributes: ['prostoreFileId'],\n })\n }\n })\n\n this.editor.conversion.for('upcast').attributeToAttribute({\n view: {\n name: 'figure',\n key: RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n },\n model: 'prostoreFileId',\n })\n\n this.editor.conversion.for('upcast').attributeToAttribute({\n view: {\n name: 'img',\n key: RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n },\n model: 'prostoreFileId',\n })\n\n this.editor.conversion.for('downcast').attributeToAttribute({\n model: 'prostoreFileId',\n view: (value: unknown) => ({\n key: RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n value: String(value),\n }),\n })\n }\n\n private configurePastedImageLimit(\n imageUpload: TextEditorImageUploadHandlers\n ) {\n const clipboardPipeline = this.editor.plugins.get(ClipboardPipeline)\n\n clipboardPipeline.on('inputTransformation', (event, data) => {\n const currentImageCount = this.currentEmbeddedImageCountOrUndefined()\n\n if (currentImageCount === undefined) {\n return\n }\n\n const pastedImageCount = countImages(data.content)\n\n if (exceedsImageLimit(currentImageCount, pastedImageCount)) {\n event.stop?.()\n imageUpload.onError?.(\n imageUpload.i18n.t('textEditor.imageUpload.imageLimit', {\n count: MAX_RICH_TEXT_IMAGES,\n })\n )\n }\n })\n }\n\n private configureUnsupportedFileDrop(\n imageUpload: TextEditorImageUploadHandlers\n ) {\n this.listenTo(\n this.editor.editing.view.document,\n 'clipboardInput',\n (event, data: ViewDocumentClipboardInputEvent['args'][0]) => {\n const files = data.dataTransfer.files\n\n if (files.length === 0) {\n return\n }\n\n const unsupportedFile = files.find(\n (file) => !DEFAULT_ALLOWED_MIME_TYPES.has(file.type)\n )\n\n if (!unsupportedFile) {\n return\n }\n\n imageUpload.onError?.(\n imageUpload.i18n.t('textEditor.imageUpload.unsupportedType', {\n type: fileTypeLabel(unsupportedFile),\n })\n )\n\n if (files.every((file) => !DEFAULT_ALLOWED_MIME_TYPES.has(file.type))) {\n event.stop()\n }\n },\n { priority: 'high' }\n )\n }\n\n private canExtendSchemaElement(imageModelName: string) {\n const { schema } = this.editor.model\n\n return typeof schema.isRegistered === 'function'\n ? schema.isRegistered(imageModelName)\n : true\n }\n\n private currentEmbeddedImageCountOrUndefined() {\n try {\n return this.editor.model.document\n .getRootNames()\n .reduce((total, rootName) => {\n const root = this.editor.model.document.getRoot(rootName)\n\n return root ? total + countModelImages(root) : total\n }, 0)\n } catch (_error) {\n return undefined\n }\n }\n}\n\nfunction countImages(node: ViewNode | ViewDocumentFragment): number {\n if (!node.is('element') && !node.is('documentFragment')) {\n return 0\n }\n\n let imageCount = 0\n\n for (const child of Array.from(node.getChildren())) {\n if (child.is('element', 'img')) {\n imageCount += 1\n continue\n }\n\n imageCount += countImages(child)\n }\n\n return imageCount\n}\n\nfunction countModelImages(node: ModelElement): number {\n let imageCount = isImageModelElement(node) ? 1 : 0\n\n for (const child of Array.from(node.getChildren())) {\n if (child.is('element')) {\n imageCount += countModelImages(child)\n }\n }\n\n return imageCount\n}\n\nfunction isImageModelElement(item: ModelItem): item is ModelElement {\n return item.is('element', 'imageBlock') || item.is('element', 'imageInline')\n}\n\nfunction fileTypeLabel(file: File) {\n const fileType = IMAGE_TYPE_LABELS[file.type] ?? fileExtensionLabel(file.name)\n\n return fileType ? `${fileType} ` : ''\n}\n\nfunction fileExtensionLabel(fileName: string) {\n const extension = fileName.split('.').pop()\n\n if (!extension || extension === fileName) {\n return undefined\n }\n\n return extension.toUpperCase()\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ProcoreImageUploadPlugin.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_classCallCheck","_defineProperties","_toPropertyKey","key","_createClass","_toPrimitive","_typeof","toPrimitive","String","Number","ClipboardPipeline","FileRepository","ImageUploadEditing","Plugin","DEFAULT_ALLOWED_MIME_TYPES","IMAGE_TYPE_LABELS","MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES","MAX_RICH_TEXT_IMAGES","PDF_UNSUPPORTED_MIME_TYPES","RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE","canonicalizeTextEditorImageUrl","REPORTED_UPLOAD_ERROR","exceedsImageLimit","currentImageCount","newImageCount","undefined","ProcoreImageUploadAdapter","loader","imageUpload","getEmbeddedImageCount","_upload","_callee","file","result","_t","_context","abortController","AbortController","fail","i18n","validateFile","warnPdfUnsupportedFile","validateReadableImage","validateImageCount","uploadFile","signal","aborted","toCkEditorResponse","toSilentUploadError","upload","abort","_this$abortController","_this$abortUpload","abortUpload","has","type","fileTypeLabel","size","_this$imageUpload$onW","_this$imageUpload","onWarning","_validateReadableImage","_callee2","url","image","_t2","_context2","URL","createObjectURL","Image","reject","onload","onerror","Error","src","revokeObjectURL","_x","_this$getEmbeddedImag","embeddedImageCount","count","prostoreFileId","test","defaultUrl","urls","response","width","height","get","_this","onProgress","uploaded","total","uploadTotal","message","_this$imageUpload$onE","_this$imageUpload2","onError","error","ProcoreImageUploadPlugin","_Plugin","_callSuper","_inherits","init","editor","config","configureProstoreFileIdConversion","configureUploadAdapter","configureUnsupportedFileDrop","configurePastedImageFileOverExternalHtml","configurePastedImageLimit","_this2","listenTo","editing","view","document","evt","data","dataTransfer","files","Array","from","imageFiles","filter","startsWith","html","getData","isImageOnlyPaste","Boolean","isImageOnlyHtml","clipboardHasImageBytes","unsupportedExtension","unsupportedPastedImageExtension","_imageUpload$onError","stop","concat","tooLargeFile","find","_imageUpload$onError2","uploadableFiles","execute","priority","_this3","fileRepository","plugins","createUploadAdapter","currentEmbeddedImageCountOrUndefined","imageUploadEditing","on","_event","_ref","imageElement","model","change","writer","setAttribute","_this4","imageModelNames","forEach","imageModelName","canExtendSchemaElement","schema","extend","allowAttributes","conversion","attributeToAttribute","name","_this5","clipboardPipeline","event","pastedImageCount","countImages","content","_event$stop","_imageUpload$onError3","_imageUpload$onError4","unsupportedFile","every","isRegistered","_this6","getRootNames","reduce","rootName","root","getRoot","countModelImages","_error","_doc$body$textContent","doc","DOMParser","parseFromString","body","querySelector","textContent","trim","extensions","querySelectorAll","map","img","_img$getAttribute","imageUrlExtension","getAttribute","isUnsupportedImageExtension","_path$split$pop","path","split","fileName","pop","fileExtensionLabel","extension","lower","toLowerCase","mimeType","node","is","imageCount","_i","_Array$from","getChildren","child","isImageModelElement","_i2","_Array$from2","item","_IMAGE_TYPE_LABELS$fi","fileType","toUpperCase"],"sources":["../../../../src/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.ts"],"sourcesContent":["import type {\n ClipboardInputTransformationData,\n EventInfo,\n ImageUploadCompleteData,\n ModelElement,\n ModelItem,\n UploadAdapter,\n ViewDocumentClipboardInputEvent,\n ViewDocumentFragment,\n ViewNode,\n} from 'ckeditor5'\nimport {\n ClipboardPipeline,\n FileRepository,\n ImageUploadEditing,\n Plugin,\n} from 'ckeditor5'\n\nimport type {\n TextEditorImageUploadHandlers,\n TextEditorImageUploadResult,\n} from '../../TextEditor.types'\nimport {\n DEFAULT_ALLOWED_MIME_TYPES,\n IMAGE_TYPE_LABELS,\n MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES,\n MAX_RICH_TEXT_IMAGES,\n PDF_UNSUPPORTED_MIME_TYPES,\n RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n} from '../../utils/imageAttributes'\nimport { canonicalizeTextEditorImageUrl } from '../../utils/imageUrls'\n\nconst REPORTED_UPLOAD_ERROR = ''\n\nconst exceedsImageLimit = (currentImageCount: number, newImageCount = 0) =>\n currentImageCount + newImageCount > MAX_RICH_TEXT_IMAGES\n\ninterface UploadLoader {\n file: Promise<File | null>\n uploaded?: number\n uploadTotal?: number | null\n}\n\ntype ClipboardCallback = (\n event: EventInfo<'inputTransformation', unknown>,\n data: ClipboardInputTransformationData\n) => void\n\ntype CkEditorUploadResponse = {\n urls: {\n default: string\n }\n prostoreFileId: number | string\n width?: number\n height?: number\n}\n\nexport class ProcoreImageUploadAdapter implements UploadAdapter {\n private abortController?: AbortController\n private abortUpload?: () => void\n\n constructor(\n private readonly loader: UploadLoader,\n private readonly imageUpload: TextEditorImageUploadHandlers,\n private readonly getEmbeddedImageCount?: () => number | undefined\n ) {}\n\n async upload(): Promise<CkEditorUploadResponse> {\n this.abortController = new AbortController()\n\n try {\n const file = await this.loader.file\n\n if (!file) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.noFile'))\n }\n\n this.validateFile(file)\n this.warnPdfUnsupportedFile(file)\n await this.validateReadableImage(file)\n this.validateImageCount()\n\n const result = await this.uploadFile(file)\n\n if (this.abortController.signal.aborted) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.aborted'))\n }\n\n return this.toCkEditorResponse(result)\n } catch (error) {\n throw this.toSilentUploadError(error)\n }\n }\n\n abort() {\n this.abortController?.abort()\n this.abortUpload?.()\n }\n\n private validateFile(file: File) {\n if (!DEFAULT_ALLOWED_MIME_TYPES.has(file.type)) {\n throw this.fail(\n this.i18n.t('textEditor.imageUpload.unsupportedType', {\n type: this.fileTypeLabel(file),\n })\n )\n }\n\n if (file.size > MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.fileTooLarge'))\n }\n }\n\n private warnPdfUnsupportedFile(file: File) {\n if (!PDF_UNSUPPORTED_MIME_TYPES.has(file.type)) {\n return\n }\n\n this.imageUpload.onWarning?.(\n this.i18n.t('textEditor.imageUpload.pdfUnsupportedType', {\n type: this.fileTypeLabel(file),\n })\n )\n }\n\n private async validateReadableImage(file: File) {\n const url = URL.createObjectURL(file)\n\n try {\n const image = new Image()\n\n await new Promise<void>((resolve, reject) => {\n image.onload = () => resolve()\n image.onerror = () => reject(new Error())\n image.src = url\n })\n } catch (_error) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.unreadable'))\n } finally {\n URL.revokeObjectURL(url)\n }\n }\n\n private validateImageCount() {\n const embeddedImageCount = this.getEmbeddedImageCount?.()\n\n if (\n embeddedImageCount !== undefined &&\n exceedsImageLimit(embeddedImageCount)\n ) {\n throw this.fail(\n this.i18n.t('textEditor.imageUpload.imageLimit', {\n count: MAX_RICH_TEXT_IMAGES,\n })\n )\n }\n }\n\n private toCkEditorResponse(\n result: TextEditorImageUploadResult\n ): CkEditorUploadResponse {\n if (\n !result.prostoreFileId ||\n !/^[\\w-]+$/.test(String(result.prostoreFileId))\n ) {\n throw this.fail(\n this.i18n.t('textEditor.imageUpload.invalidProstoreFileId')\n )\n }\n\n const defaultUrl = canonicalizeTextEditorImageUrl(result.urls.default)\n\n if (!defaultUrl) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.invalidImageUrl'))\n }\n\n const response: CkEditorUploadResponse = {\n urls: {\n default: defaultUrl,\n },\n prostoreFileId: result.prostoreFileId,\n width: result.width,\n height: result.height,\n }\n\n return response\n }\n\n private get i18n() {\n return this.imageUpload.i18n\n }\n\n private fileTypeLabel(file: File) {\n return fileTypeLabel(file)\n }\n\n private uploadFile(file: File) {\n return new Promise<TextEditorImageUploadResult>((resolve, reject) => {\n this.abortUpload = () =>\n reject(this.fail(this.i18n.t('textEditor.imageUpload.aborted')))\n\n this.imageUpload\n .upload(\n file,\n { signal: this.abortController!.signal },\n {\n onProgress: (uploaded, total) => {\n this.loader.uploaded = uploaded\n\n if (total !== undefined) {\n this.loader.uploadTotal = total\n }\n },\n }\n )\n .then(resolve)\n .catch(reject)\n })\n }\n\n private fail(message: string) {\n this.imageUpload.onError?.(message)\n\n return REPORTED_UPLOAD_ERROR\n }\n\n private toSilentUploadError(error: unknown) {\n if (error === REPORTED_UPLOAD_ERROR) {\n return error\n }\n\n if (error instanceof Error && error.message) {\n return this.fail(error.message)\n }\n\n return this.fail(this.i18n.t('textEditor.imageUpload.failed'))\n }\n}\n\nexport class ProcoreImageUploadPlugin extends Plugin {\n static get pluginName() {\n return 'ProcoreImageUploadPlugin'\n }\n\n static get requires() {\n return [FileRepository, ImageUploadEditing]\n }\n\n init() {\n const imageUpload = this.editor.config.get('procoreImageUpload') as\n | TextEditorImageUploadHandlers\n | undefined\n\n if (!imageUpload) {\n return\n }\n\n this.configureProstoreFileIdConversion()\n this.configureUploadAdapter(imageUpload)\n this.configureUnsupportedFileDrop(imageUpload)\n this.configurePastedImageFileOverExternalHtml(imageUpload)\n this.configurePastedImageLimit(imageUpload)\n }\n\n /**\n * \"Copy Image\" puts both the image bytes and HTML with the external URL on\n * the clipboard. CKEditor prefers the HTML, but the backend strips external\n * image URLs — so upload the bytes instead.\n */\n private configurePastedImageFileOverExternalHtml(\n imageUpload: TextEditorImageUploadHandlers\n ) {\n this.listenTo(\n this.editor.editing.view.document,\n 'clipboardInput',\n (evt, data: ViewDocumentClipboardInputEvent['args'][0]) => {\n const dataTransfer = data.dataTransfer\n const files = Array.from(dataTransfer.files)\n const imageFiles = files.filter((file) =>\n file.type.startsWith('image/')\n )\n const html = dataTransfer.getData('text/html')\n const isImageOnlyPaste = Boolean(html) && isImageOnlyHtml(html)\n const clipboardHasImageBytes = imageFiles.length > 0\n\n if (!isImageOnlyPaste) {\n return\n }\n\n // The clipboard carries only an image URL, no bytes to upload (e.g.\n // \"Copy Image\" on an SVG). Show an error for clearly unsupported\n // extensions; otherwise let the default clipboard flow handle it.\n if (!clipboardHasImageBytes) {\n const unsupportedExtension = unsupportedPastedImageExtension(html)\n\n if (unsupportedExtension) {\n evt.stop()\n imageUpload.onError?.(\n imageUpload.i18n.t('textEditor.imageUpload.unsupportedType', {\n type: `${unsupportedExtension} `,\n })\n )\n }\n\n return\n }\n\n evt.stop()\n\n // Unsupported types already got a toast from the unsupported-file\n // drop handler, which runs before this listener.\n const tooLargeFile = imageFiles.find(\n (file) =>\n DEFAULT_ALLOWED_MIME_TYPES.has(file.type) &&\n file.size > MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES\n )\n\n if (tooLargeFile) {\n imageUpload.onError?.(\n imageUpload.i18n.t('textEditor.imageUpload.fileTooLarge')\n )\n }\n\n const uploadableFiles = imageFiles.filter(\n (file) =>\n DEFAULT_ALLOWED_MIME_TYPES.has(file.type) &&\n file.size <= MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES\n )\n\n if (uploadableFiles.length > 0) {\n this.editor.execute('uploadImage', { file: uploadableFiles })\n }\n },\n { priority: 'high' }\n )\n }\n\n private configureUploadAdapter(imageUpload: TextEditorImageUploadHandlers) {\n const fileRepository = this.editor.plugins.get(FileRepository)\n\n fileRepository.createUploadAdapter = (loader) =>\n new ProcoreImageUploadAdapter(loader, imageUpload, () =>\n this.currentEmbeddedImageCountOrUndefined()\n )\n\n const imageUploadEditing = this.editor.plugins.get(ImageUploadEditing)\n\n imageUploadEditing.on(\n 'uploadComplete',\n (_event, { data, imageElement }: ImageUploadCompleteData) => {\n if (!imageElement || !data?.prostoreFileId) {\n return\n }\n\n const prostoreFileId = String(data.prostoreFileId)\n\n this.editor.model.change((writer) => {\n writer.setAttribute('prostoreFileId', prostoreFileId, imageElement)\n })\n }\n )\n }\n\n private configureProstoreFileIdConversion() {\n const imageModelNames = ['imageBlock', 'imageInline']\n\n imageModelNames.forEach((imageModelName) => {\n if (this.canExtendSchemaElement(imageModelName)) {\n this.editor.model.schema.extend(imageModelName, {\n allowAttributes: ['prostoreFileId'],\n })\n }\n })\n\n this.editor.conversion.for('upcast').attributeToAttribute({\n view: {\n name: 'figure',\n key: RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n },\n model: 'prostoreFileId',\n })\n\n this.editor.conversion.for('upcast').attributeToAttribute({\n view: {\n name: 'img',\n key: RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n },\n model: 'prostoreFileId',\n })\n\n this.editor.conversion.for('downcast').attributeToAttribute({\n model: 'prostoreFileId',\n view: (value: unknown) => ({\n key: RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n value: String(value),\n }),\n })\n }\n\n private configurePastedImageLimit(\n imageUpload: TextEditorImageUploadHandlers\n ) {\n const clipboardPipeline = this.editor.plugins.get(ClipboardPipeline)\n\n clipboardPipeline.on('inputTransformation', (event, data) => {\n const currentImageCount = this.currentEmbeddedImageCountOrUndefined()\n\n if (currentImageCount === undefined) {\n return\n }\n\n const pastedImageCount = countImages(data.content)\n\n if (exceedsImageLimit(currentImageCount, pastedImageCount)) {\n event.stop?.()\n imageUpload.onError?.(\n imageUpload.i18n.t('textEditor.imageUpload.imageLimit', {\n count: MAX_RICH_TEXT_IMAGES,\n })\n )\n }\n })\n }\n\n private configureUnsupportedFileDrop(\n imageUpload: TextEditorImageUploadHandlers\n ) {\n this.listenTo(\n this.editor.editing.view.document,\n 'clipboardInput',\n (event, data: ViewDocumentClipboardInputEvent['args'][0]) => {\n const files = data.dataTransfer.files\n\n if (files.length === 0) {\n return\n }\n\n const unsupportedFile = files.find(\n (file) => !DEFAULT_ALLOWED_MIME_TYPES.has(file.type)\n )\n\n if (!unsupportedFile) {\n return\n }\n\n imageUpload.onError?.(\n imageUpload.i18n.t('textEditor.imageUpload.unsupportedType', {\n type: fileTypeLabel(unsupportedFile),\n })\n )\n\n if (files.every((file) => !DEFAULT_ALLOWED_MIME_TYPES.has(file.type))) {\n event.stop()\n }\n },\n { priority: 'high' }\n )\n }\n\n private canExtendSchemaElement(imageModelName: string) {\n const { schema } = this.editor.model\n\n return typeof schema.isRegistered === 'function'\n ? schema.isRegistered(imageModelName)\n : true\n }\n\n private currentEmbeddedImageCountOrUndefined() {\n try {\n return this.editor.model.document\n .getRootNames()\n .reduce((total, rootName) => {\n const root = this.editor.model.document.getRoot(rootName)\n\n return root ? total + countModelImages(root) : total\n }, 0)\n } catch (_error) {\n return undefined\n }\n }\n}\n\n// \"Copy Image\" shape: an image with no meaningful text. Rich pastes mixing\n// text and images keep the default clipboard handling.\nfunction isImageOnlyHtml(html: string) {\n const doc = new DOMParser().parseFromString(html, 'text/html')\n\n return doc.body.querySelector('img') !== null && !doc.body.textContent?.trim()\n}\n\n// Uppercase extension (e.g. \"SVG\") when every pasted image URL clearly has an\n// unsupported extension; undefined when supported, unknown, or inline data.\nfunction unsupportedPastedImageExtension(html: string) {\n const doc = new DOMParser().parseFromString(html, 'text/html')\n const extensions = Array.from(doc.body.querySelectorAll('img')).map((img) =>\n imageUrlExtension(img.getAttribute('src') ?? '')\n )\n\n return extensions.every(isUnsupportedImageExtension)\n ? extensions[0]\n : undefined\n}\n\n// \"https://site.com/logo.svg?w=64\" -> \"SVG\"; undefined for inline data or\n// URLs without a file extension.\nfunction imageUrlExtension(src: string) {\n if (src.startsWith('data:') || src.startsWith('blob:')) {\n return undefined\n }\n\n const path = src.split(/[?#]/)[0]\n const fileName = path.split('/').pop() ?? ''\n\n return fileExtensionLabel(fileName)\n}\n\nfunction isUnsupportedImageExtension(extension: string | undefined) {\n if (!extension) {\n return false\n }\n\n const lower = extension.toLowerCase()\n const mimeType = `image/${lower === 'jpg' ? 'jpeg' : lower}`\n\n return !DEFAULT_ALLOWED_MIME_TYPES.has(mimeType)\n}\n\nfunction countImages(node: ViewNode | ViewDocumentFragment): number {\n if (!node.is('element') && !node.is('documentFragment')) {\n return 0\n }\n\n let imageCount = 0\n\n for (const child of Array.from(node.getChildren())) {\n if (child.is('element', 'img')) {\n imageCount += 1\n continue\n }\n\n imageCount += countImages(child)\n }\n\n return imageCount\n}\n\nfunction countModelImages(node: ModelElement): number {\n let imageCount = isImageModelElement(node) ? 1 : 0\n\n for (const child of Array.from(node.getChildren())) {\n if (child.is('element')) {\n imageCount += countModelImages(child)\n }\n }\n\n return imageCount\n}\n\nfunction isImageModelElement(item: ModelItem): item is ModelElement {\n return item.is('element', 'imageBlock') || item.is('element', 'imageInline')\n}\n\nfunction fileTypeLabel(file: File) {\n const fileType = IMAGE_TYPE_LABELS[file.type] ?? fileExtensionLabel(file.name)\n\n return fileType ? `${fileType} ` : ''\n}\n\nfunction fileExtensionLabel(fileName: string) {\n const extension = fileName.split('.').pop()\n\n if (!extension || extension === fileName) {\n return undefined\n }\n\n return extension.toUpperCase()\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Alignment, Autoformat, AutoLink, BlockQuote, Bold, Clipboard, CodeBlock, Essentials, FontBackgroundColor, FontColor, FontSize, GeneralHtmlSupport, Heading, HorizontalLine, Image, ImageCaption, ImageInsert, ImageResize, ImageTextAlternative, ImageToolbar, ImageUpload, Indent, IndentBlock, Italic, Link, List, ListProperties, Paragraph, PasteFromOffice, RemoveFormat, SpecialCharacters, SpecialCharactersEssentials, Strikethrough, Subscript, Superscript, Table, TableCaption, TableCellProperties, TableColumnResize, TableProperties, TableToolbar, Underline } from 'ckeditor5';
|
|
1
|
+
import { Alignment, Autoformat, AutoLink, BlockQuote, Bold, Clipboard, CodeBlock, Essentials, FontBackgroundColor, FontColor, FontSize, GeneralHtmlSupport, Heading, HorizontalLine, Image, ImageCaption, ImageInsert, ImageResize, ImageStyle, ImageTextAlternative, ImageToolbar, ImageUpload, Indent, IndentBlock, Italic, Link, List, ListProperties, Paragraph, PasteFromOffice, RemoveFormat, SpecialCharacters, SpecialCharactersEssentials, Strikethrough, Subscript, Superscript, Table, TableCaption, TableCellProperties, TableColumnResize, TableProperties, TableToolbar, Underline } from 'ckeditor5';
|
|
2
2
|
import { MultiLevelList } from 'ckeditor5-premium-features';
|
|
3
3
|
import { CK_EDITOR_LICENSE_KEY } from '../license_key';
|
|
4
4
|
import { CutPlugin } from '../plugins/CutPlugin';
|
|
@@ -158,7 +158,7 @@ export var getDefaultConfig = function getDefaultConfig() {
|
|
|
158
158
|
if (options.imageUpload) {
|
|
159
159
|
var _config$plugins;
|
|
160
160
|
toolbar.splice(toolbar.indexOf('link'), 0, 'insertImage');
|
|
161
|
-
(_config$plugins = config.plugins) === null || _config$plugins === void 0 || _config$plugins.push(Image, ImageCaption, ImageInsert, ImageResize, ImageTextAlternative, ImageToolbar, ImageUpload, ProcoreImageUploadPlugin);
|
|
161
|
+
(_config$plugins = config.plugins) === null || _config$plugins === void 0 || _config$plugins.push(Image, ImageCaption, ImageInsert, ImageResize, ImageStyle, ImageTextAlternative, ImageToolbar, ImageUpload, ProcoreImageUploadPlugin);
|
|
162
162
|
config.image = {
|
|
163
163
|
insert: {
|
|
164
164
|
integrations: ['upload']
|
|
@@ -167,7 +167,7 @@ export var getDefaultConfig = function getDefaultConfig() {
|
|
|
167
167
|
types: ['avif', 'gif', 'jpeg', 'png', 'webp']
|
|
168
168
|
},
|
|
169
169
|
resizeUnit: '%',
|
|
170
|
-
toolbar: ['toggleImageCaption', 'imageTextAlternative', '|', 'resizeImage:25', 'resizeImage:50', 'resizeImage:75', 'resizeImage:original']
|
|
170
|
+
toolbar: ['imageStyle:inline', 'imageStyle:wrapText', 'imageStyle:breakText', '|', 'toggleImageCaption', 'imageTextAlternative', '|', 'resizeImage:25', 'resizeImage:50', 'resizeImage:75', 'resizeImage:original']
|
|
171
171
|
};
|
|
172
172
|
config.procoreImageUpload = options.imageUpload;
|
|
173
173
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":["Alignment","Autoformat","AutoLink","BlockQuote","Bold","Clipboard","CodeBlock","Essentials","FontBackgroundColor","FontColor","FontSize","GeneralHtmlSupport","Heading","HorizontalLine","Image","ImageCaption","ImageInsert","ImageResize","ImageTextAlternative","ImageToolbar","ImageUpload","Indent","IndentBlock","Italic","Link","List","ListProperties","Paragraph","PasteFromOffice","RemoveFormat","SpecialCharacters","SpecialCharactersEssentials","Strikethrough","Subscript","Superscript","Table","TableCaption","TableCellProperties","TableColumnResize","TableProperties","TableToolbar","Underline","MultiLevelList","CK_EDITOR_LICENSE_KEY","CutPlugin","IndentPaddingToMarginPlugin","NormalizeTableWidthPlugin","PasteAsTextPlugin","PastePlugin","ProcoreImageUploadPlugin","TabSpacesPlugin","getEditorTranslation","getValidEditorLocale","TEXT_COLOR_PALETTE","color","getDefaultConfig","locale","arguments","length","undefined","options","toolbar","config","licenseKey","language","translations","plugins","fontSize","title","model","supportAllValues","fontColor","colors","fontBackgroundColor","indentBlock","offset","unit","htmlSupport","allow","name","styles","link","defaultProtocol","decorators","openInNewTab","mode","label","defaultValue","attributes","target","rel","list","properties","useAttribute","startIndex","reversed","table","contentToolbar","tableProperties","borderColors","backgroundColors","tableCellProperties","imageUpload","_config$plugins","splice","indexOf","push","image","insert","integrations","upload","types","resizeUnit","procoreImageUpload","addButtonDataAttributes","editor","applyAttributes","toolbarElement","ui","view","element","toolbarChildren","Array","from","querySelectorAll","moreDropdownButtons","allToolbarElements","concat","toolbarItems","get","elementIndex","forEach","itemName","classList","contains","setAttribute","observer","MutationObserver","observe","childList","subtree","on","disconnect"],"sources":["../../../src/TextEditor/utils/config.ts"],"sourcesContent":["import type { ClassicEditor, EditorConfig } from 'ckeditor5'\nimport {\n Alignment,\n Autoformat,\n AutoLink,\n BlockQuote,\n Bold,\n Clipboard,\n CodeBlock,\n Essentials,\n FontBackgroundColor,\n FontColor,\n FontSize,\n GeneralHtmlSupport,\n Heading,\n HorizontalLine,\n Image,\n ImageCaption,\n ImageInsert,\n ImageResize,\n ImageTextAlternative,\n ImageToolbar,\n ImageUpload,\n Indent,\n IndentBlock,\n Italic,\n Link,\n List,\n ListProperties,\n Paragraph,\n PasteFromOffice,\n RemoveFormat,\n SpecialCharacters,\n SpecialCharactersEssentials,\n Strikethrough,\n Subscript,\n Superscript,\n Table,\n TableCaption,\n TableCellProperties,\n TableColumnResize,\n TableProperties,\n TableToolbar,\n Underline,\n} from 'ckeditor5'\nimport { MultiLevelList } from 'ckeditor5-premium-features'\n\nimport { CK_EDITOR_LICENSE_KEY } from '../license_key'\nimport { CutPlugin } from '../plugins/CutPlugin'\nimport { IndentPaddingToMarginPlugin } from '../plugins/IndentPaddingToMarginPlugin'\nimport { NormalizeTableWidthPlugin } from '../plugins/NormalizeTableWidthPlugin'\nimport { PasteAsTextPlugin } from '../plugins/PasteAsTextPlugin'\nimport { PastePlugin } from '../plugins/PastePlugin'\nimport { ProcoreImageUploadPlugin } from '../plugins/ProcoreImageUploadPlugin'\nimport { TabSpacesPlugin } from '../plugins/TabSpacesPlugin'\nimport type { TextEditorImageUploadHandlers } from '../TextEditor.types'\nimport { getEditorTranslation, getValidEditorLocale } from './locale'\n\ninterface TextEditorConfigOptions {\n imageUpload?: TextEditorImageUploadHandlers\n}\n\ntype ProcoreEditorConfig = EditorConfig & {\n procoreImageUpload?: TextEditorImageUploadHandlers\n}\n\nconst TEXT_COLOR_PALETTE = [\n { color: '#BFEDD2' },\n { color: '#FBEEB8' },\n { color: '#F8CAC6' },\n { color: '#ECCAFA' },\n { color: '#C2E0F4' },\n { color: '#2DC26B' },\n { color: '#F1C40F' },\n { color: '#E03E2D' },\n { color: '#B96AD9' },\n { color: '#3598DB' },\n { color: '#169179' },\n { color: '#E67E23' },\n { color: '#BA372A' },\n { color: '#843FA1' },\n { color: '#236FA1' },\n { color: '#ECF0F1' },\n { color: '#CED4D9' },\n { color: '#95A5A6' },\n { color: '#7E8C8D' },\n { color: '#34495E' },\n { color: '#000000' },\n { color: '#FFFFFF' },\n]\n\nexport const getDefaultConfig = (\n locale: string = 'en',\n options: TextEditorConfigOptions = {}\n): EditorConfig => {\n const toolbar = [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n '|',\n 'alignment:left',\n 'alignment:center',\n 'alignment:right',\n '|',\n 'bulletedList',\n 'numberedList',\n 'multiLevelList',\n '|',\n 'outdent',\n 'indent',\n '|',\n 'cut',\n 'paste',\n 'pasteAsText',\n '|',\n 'fontSize',\n '|',\n 'fontColor',\n 'fontBackgroundColor',\n '|',\n 'insertTable',\n 'link',\n '|',\n 'blockquote',\n 'heading',\n '|',\n 'horizontalLine',\n 'removeFormat',\n 'specialCharacters',\n 'subscript',\n 'superscript',\n 'codeblock',\n '|',\n 'undo',\n 'redo',\n ]\n\n const config: ProcoreEditorConfig = {\n licenseKey: CK_EDITOR_LICENSE_KEY,\n language: getValidEditorLocale(locale),\n translations: [getEditorTranslation(locale)],\n plugins: [\n Alignment,\n AutoLink,\n Bold,\n Clipboard,\n Essentials,\n FontBackgroundColor,\n FontColor,\n FontSize,\n GeneralHtmlSupport,\n Indent,\n IndentBlock,\n Italic,\n Link,\n List,\n ListProperties,\n MultiLevelList,\n Paragraph,\n PasteFromOffice,\n Strikethrough,\n Table,\n TableCaption,\n TableCellProperties,\n TableColumnResize,\n TableProperties,\n TableToolbar,\n Underline,\n CutPlugin,\n PastePlugin,\n PasteAsTextPlugin,\n IndentPaddingToMarginPlugin,\n NormalizeTableWidthPlugin,\n BlockQuote,\n Heading,\n Autoformat,\n SpecialCharacters,\n SpecialCharactersEssentials,\n Subscript,\n Superscript,\n HorizontalLine,\n RemoveFormat,\n CodeBlock,\n TabSpacesPlugin, // TODO - delete\n ],\n toolbar,\n fontSize: {\n options: [\n { title: '8pt', model: '8px' },\n { title: '10pt', model: '10px' },\n { title: '12pt', model: '12px' },\n { title: '14pt', model: '14px' },\n { title: '18pt', model: '18px' },\n { title: '24pt', model: '24px' },\n { title: '36pt', model: '36px' },\n ],\n supportAllValues: true,\n },\n fontColor: {\n colors: TEXT_COLOR_PALETTE,\n },\n fontBackgroundColor: {\n colors: TEXT_COLOR_PALETTE,\n },\n indentBlock: {\n offset: 40,\n unit: 'px',\n },\n htmlSupport: {\n allow: [\n {\n name: 'p',\n styles: {\n 'margin-left': true,\n },\n },\n ],\n },\n link: {\n // Add a protocol to links typed without one (e.g. \"www.google.com\"),\n // so they are not treated as relative URLs.\n defaultProtocol: 'https://',\n decorators: {\n // Manual decorator renders an \"Open in a new tab\" switch in the link\n // form, letting the user choose new tab vs. same window per link.\n openInNewTab: {\n mode: 'manual',\n // The label doubles as CKEditor's own translation key (resolved by\n // editor.locale.t, not Procore I18n). Every locale this editor\n // supports (en, fr, es, de, ja, pl, pt, th, zh) already ships a\n // CKEditor translation for \"Open in a new tab\" (loaded in locale.ts),\n // so it is localized automatically and no Procore i18n entry is\n // needed. Do not replace with I18n.t(...): that would bypass\n // CKEditor's translator and duplicate existing translations.\n label: 'Open in a new tab',\n defaultValue: false, // unchecked by default => opens in same window\n attributes: {\n target: '_blank',\n rel: 'noopener noreferrer',\n },\n },\n },\n },\n list: {\n properties: {\n styles: {\n useAttribute: false,\n },\n startIndex: true,\n reversed: true,\n },\n },\n table: {\n contentToolbar: [\n 'tableColumn',\n 'tableRow',\n 'mergeTableCells',\n 'tableProperties',\n 'tableCellProperties',\n ],\n tableProperties: {\n borderColors: TEXT_COLOR_PALETTE,\n backgroundColors: TEXT_COLOR_PALETTE,\n },\n tableCellProperties: {\n borderColors: TEXT_COLOR_PALETTE,\n backgroundColors: TEXT_COLOR_PALETTE,\n },\n },\n }\n\n if (options.imageUpload) {\n toolbar.splice(toolbar.indexOf('link'), 0, 'insertImage')\n config.plugins?.push(\n Image,\n ImageCaption,\n ImageInsert,\n ImageResize,\n ImageTextAlternative,\n ImageToolbar,\n ImageUpload,\n ProcoreImageUploadPlugin\n )\n config.image = {\n insert: {\n integrations: ['upload'],\n },\n upload: {\n types: ['avif', 'gif', 'jpeg', 'png', 'webp'],\n },\n resizeUnit: '%',\n toolbar: [\n 'toggleImageCaption',\n 'imageTextAlternative',\n '|',\n 'resizeImage:25',\n 'resizeImage:50',\n 'resizeImage:75',\n 'resizeImage:original',\n ],\n }\n config.procoreImageUpload = options.imageUpload\n }\n\n return config\n}\n\n// Add stable data attributes to toolbar buttons for the styling (or testing) purposes\nexport const addButtonDataAttributes = (editor: ClassicEditor) => {\n const applyAttributes = () => {\n const toolbarElement = editor.ui.view.toolbar.element\n if (!toolbarElement) {\n return\n }\n\n // Get buttons in the main toolbar\n const toolbarChildren = Array.from(\n toolbarElement.querySelectorAll('.ck-toolbar__items > *')\n )\n\n // Get buttons hidden in \"more\" dropdown\n const moreDropdownButtons = Array.from(\n toolbarElement.querySelectorAll('.ck-dropdown__panel .ck-list .ck-button')\n )\n\n const allToolbarElements = [...toolbarChildren, ...moreDropdownButtons]\n\n // Create mapping based on toolbar configuration order\n const toolbarItems = (editor.config.get('toolbar') || []) as string[]\n let elementIndex = 0\n\n toolbarItems.forEach((itemName) => {\n const element = allToolbarElements[elementIndex]\n if (\n itemName !== '|' &&\n element &&\n !element.classList.contains('ck-toolbar__separator')\n ) {\n // Use the toolbar item name as the stable identifier\n element.setAttribute('data-cke-command', itemName)\n }\n elementIndex++\n })\n }\n\n // Apply attributes initially\n applyAttributes()\n\n // Re-apply when dropdown menus are opened (buttons get created dynamically)\n const toolbarElement = editor.ui.view.toolbar.element\n if (toolbarElement) {\n const observer = new MutationObserver(() => {\n applyAttributes()\n })\n observer.observe(toolbarElement, {\n childList: true,\n subtree: true,\n })\n editor.on('destroy', () => {\n observer.disconnect()\n })\n }\n}\n"],"mappings":"AACA,SACEA,SAAS,EACTC,UAAU,EACVC,QAAQ,EACRC,UAAU,EACVC,IAAI,EACJC,SAAS,EACTC,SAAS,EACTC,UAAU,EACVC,mBAAmB,EACnBC,SAAS,EACTC,QAAQ,EACRC,kBAAkB,EAClBC,OAAO,EACPC,cAAc,EACdC,KAAK,EACLC,YAAY,EACZC,WAAW,EACXC,WAAW,EACXC,oBAAoB,EACpBC,YAAY,EACZC,WAAW,EACXC,MAAM,EACNC,WAAW,EACXC,MAAM,EACNC,IAAI,EACJC,IAAI,EACJC,cAAc,EACdC,SAAS,EACTC,eAAe,EACfC,YAAY,EACZC,iBAAiB,EACjBC,2BAA2B,EAC3BC,aAAa,EACbC,SAAS,EACTC,WAAW,EACXC,KAAK,EACLC,YAAY,EACZC,mBAAmB,EACnBC,iBAAiB,EACjBC,eAAe,EACfC,YAAY,EACZC,SAAS,QACJ,WAAW;AAClB,SAASC,cAAc,QAAQ,4BAA4B;AAE3D,SAASC,qBAAqB,QAAQ,gBAAgB;AACtD,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,2BAA2B,QAAQ,wCAAwC;AACpF,SAASC,yBAAyB,QAAQ,sCAAsC;AAChF,SAASC,iBAAiB,QAAQ,8BAA8B;AAChE,SAASC,WAAW,QAAQ,wBAAwB;AACpD,SAASC,wBAAwB,QAAQ,qCAAqC;AAC9E,SAASC,eAAe,QAAQ,4BAA4B;AAE5D,SAASC,oBAAoB,EAAEC,oBAAoB,QAAQ,UAAU;AAUrE,IAAMC,kBAAkB,GAAG,CACzB;EAAEC,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,EACpB;EAAEA,KAAK,EAAE;AAAU,CAAC,CACrB;AAED,OAAO,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAA,EAGV;EAAA,IAFjBC,MAAc,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EAAA,IACrBG,OAAgC,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAErC,IAAMI,OAAO,GAAG,CACd,MAAM,EACN,QAAQ,EACR,WAAW,EACX,eAAe,EACf,GAAG,EACH,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,GAAG,EACH,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,GAAG,EACH,SAAS,EACT,QAAQ,EACR,GAAG,EACH,KAAK,EACL,OAAO,EACP,aAAa,EACb,GAAG,EACH,UAAU,EACV,GAAG,EACH,WAAW,EACX,qBAAqB,EACrB,GAAG,EACH,aAAa,EACb,MAAM,EACN,GAAG,EACH,YAAY,EACZ,SAAS,EACT,GAAG,EACH,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,WAAW,EACX,GAAG,EACH,MAAM,EACN,MAAM,CACP;EAED,IAAMC,MAA2B,GAAG;IAClCC,UAAU,EAAEpB,qBAAqB;IACjCqB,QAAQ,EAAEZ,oBAAoB,CAACI,MAAM,CAAC;IACtCS,YAAY,EAAE,CAACd,oBAAoB,CAACK,MAAM,CAAC,CAAC;IAC5CU,OAAO,EAAE,CACPlE,SAAS,EACTE,QAAQ,EACRE,IAAI,EACJC,SAAS,EACTE,UAAU,EACVC,mBAAmB,EACnBC,SAAS,EACTC,QAAQ,EACRC,kBAAkB,EAClBU,MAAM,EACNC,WAAW,EACXC,MAAM,EACNC,IAAI,EACJC,IAAI,EACJC,cAAc,EACdgB,cAAc,EACdf,SAAS,EACTC,eAAe,EACfI,aAAa,EACbG,KAAK,EACLC,YAAY,EACZC,mBAAmB,EACnBC,iBAAiB,EACjBC,eAAe,EACfC,YAAY,EACZC,SAAS,EACTG,SAAS,EACTI,WAAW,EACXD,iBAAiB,EACjBF,2BAA2B,EAC3BC,yBAAyB,EACzB3C,UAAU,EACVS,OAAO,EACPX,UAAU,EACV6B,iBAAiB,EACjBC,2BAA2B,EAC3BE,SAAS,EACTC,WAAW,EACXrB,cAAc,EACdgB,YAAY,EACZvB,SAAS,EACT4C,eAAe,CAAE;IAAA,CAClB;IACDW,OAAO,EAAPA,OAAO;IACPM,QAAQ,EAAE;MACRP,OAAO,EAAE,CACP;QAAEQ,KAAK,EAAE,KAAK;QAAEC,KAAK,EAAE;MAAM,CAAC,EAC9B;QAAED,KAAK,EAAE,MAAM;QAAEC,KAAK,EAAE;MAAO,CAAC,EAChC;QAAED,KAAK,EAAE,MAAM;QAAEC,KAAK,EAAE;MAAO,CAAC,EAChC;QAAED,KAAK,EAAE,MAAM;QAAEC,KAAK,EAAE;MAAO,CAAC,EAChC;QAAED,KAAK,EAAE,MAAM;QAAEC,KAAK,EAAE;MAAO,CAAC,EAChC;QAAED,KAAK,EAAE,MAAM;QAAEC,KAAK,EAAE;MAAO,CAAC,EAChC;QAAED,KAAK,EAAE,MAAM;QAAEC,KAAK,EAAE;MAAO,CAAC,CACjC;MACDC,gBAAgB,EAAE;IACpB,CAAC;IACDC,SAAS,EAAE;MACTC,MAAM,EAAEnB;IACV,CAAC;IACDoB,mBAAmB,EAAE;MACnBD,MAAM,EAAEnB;IACV,CAAC;IACDqB,WAAW,EAAE;MACXC,MAAM,EAAE,EAAE;MACVC,IAAI,EAAE;IACR,CAAC;IACDC,WAAW,EAAE;MACXC,KAAK,EAAE,CACL;QACEC,IAAI,EAAE,GAAG;QACTC,MAAM,EAAE;UACN,aAAa,EAAE;QACjB;MACF,CAAC;IAEL,CAAC;IACDC,IAAI,EAAE;MACJ;MACA;MACAC,eAAe,EAAE,UAAU;MAC3BC,UAAU,EAAE;QACV;QACA;QACAC,YAAY,EAAE;UACZC,IAAI,EAAE,QAAQ;UACd;UACA;UACA;UACA;UACA;UACA;UACA;UACAC,KAAK,EAAE,mBAAmB;UAC1BC,YAAY,EAAE,KAAK;UAAE;UACrBC,UAAU,EAAE;YACVC,MAAM,EAAE,QAAQ;YAChBC,GAAG,EAAE;UACP;QACF;MACF;IACF,CAAC;IACDC,IAAI,EAAE;MACJC,UAAU,EAAE;QACVZ,MAAM,EAAE;UACNa,YAAY,EAAE;QAChB,CAAC;QACDC,UAAU,EAAE,IAAI;QAChBC,QAAQ,EAAE;MACZ;IACF,CAAC;IACDC,KAAK,EAAE;MACLC,cAAc,EAAE,CACd,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,CACtB;MACDC,eAAe,EAAE;QACfC,YAAY,EAAE9C,kBAAkB;QAChC+C,gBAAgB,EAAE/C;MACpB,CAAC;MACDgD,mBAAmB,EAAE;QACnBF,YAAY,EAAE9C,kBAAkB;QAChC+C,gBAAgB,EAAE/C;MACpB;IACF;EACF,CAAC;EAED,IAAIO,OAAO,CAAC0C,WAAW,EAAE;IAAA,IAAAC,eAAA;IACvB1C,OAAO,CAAC2C,MAAM,CAAC3C,OAAO,CAAC4C,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC;IACzD,CAAAF,eAAA,GAAAzC,MAAM,CAACI,OAAO,cAAAqC,eAAA,eAAdA,eAAA,CAAgBG,IAAI,CAClB5F,KAAK,EACLC,YAAY,EACZC,WAAW,EACXC,WAAW,EACXC,oBAAoB,EACpBC,YAAY,EACZC,WAAW,EACX6B,wBACF,CAAC;IACDa,MAAM,CAAC6C,KAAK,GAAG;MACbC,MAAM,EAAE;QACNC,YAAY,EAAE,CAAC,QAAQ;MACzB,CAAC;MACDC,MAAM,EAAE;QACNC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;MAC9C,CAAC;MACDC,UAAU,EAAE,GAAG;MACfnD,OAAO,EAAE,CACP,oBAAoB,EACpB,sBAAsB,EACtB,GAAG,EACH,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB;IAE1B,CAAC;IACDC,MAAM,CAACmD,kBAAkB,GAAGrD,OAAO,CAAC0C,WAAW;EACjD;EAEA,OAAOxC,MAAM;AACf,CAAC;;AAED;AACA,OAAO,IAAMoD,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAAIC,MAAqB,EAAK;EAChE,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAA,EAAS;IAC5B,IAAMC,cAAc,GAAGF,MAAM,CAACG,EAAE,CAACC,IAAI,CAAC1D,OAAO,CAAC2D,OAAO;IACrD,IAAI,CAACH,cAAc,EAAE;MACnB;IACF;;IAEA;IACA,IAAMI,eAAe,GAAGC,KAAK,CAACC,IAAI,CAChCN,cAAc,CAACO,gBAAgB,CAAC,wBAAwB,CAC1D,CAAC;;IAED;IACA,IAAMC,mBAAmB,GAAGH,KAAK,CAACC,IAAI,CACpCN,cAAc,CAACO,gBAAgB,CAAC,yCAAyC,CAC3E,CAAC;IAED,IAAME,kBAAkB,MAAAC,MAAA,CAAON,eAAe,EAAKI,mBAAmB,CAAC;;IAEvE;IACA,IAAMG,YAAY,GAAIb,MAAM,CAACrD,MAAM,CAACmE,GAAG,CAAC,SAAS,CAAC,IAAI,EAAe;IACrE,IAAIC,YAAY,GAAG,CAAC;IAEpBF,YAAY,CAACG,OAAO,CAAC,UAACC,QAAQ,EAAK;MACjC,IAAMZ,OAAO,GAAGM,kBAAkB,CAACI,YAAY,CAAC;MAChD,IACEE,QAAQ,KAAK,GAAG,IAChBZ,OAAO,IACP,CAACA,OAAO,CAACa,SAAS,CAACC,QAAQ,CAAC,uBAAuB,CAAC,EACpD;QACA;QACAd,OAAO,CAACe,YAAY,CAAC,kBAAkB,EAAEH,QAAQ,CAAC;MACpD;MACAF,YAAY,EAAE;IAChB,CAAC,CAAC;EACJ,CAAC;;EAED;EACAd,eAAe,CAAC,CAAC;;EAEjB;EACA,IAAMC,cAAc,GAAGF,MAAM,CAACG,EAAE,CAACC,IAAI,CAAC1D,OAAO,CAAC2D,OAAO;EACrD,IAAIH,cAAc,EAAE;IAClB,IAAMmB,QAAQ,GAAG,IAAIC,gBAAgB,CAAC,YAAM;MAC1CrB,eAAe,CAAC,CAAC;IACnB,CAAC,CAAC;IACFoB,QAAQ,CAACE,OAAO,CAACrB,cAAc,EAAE;MAC/BsB,SAAS,EAAE,IAAI;MACfC,OAAO,EAAE;IACX,CAAC,CAAC;IACFzB,MAAM,CAAC0B,EAAE,CAAC,SAAS,EAAE,YAAM;MACzBL,QAAQ,CAACM,UAAU,CAAC,CAAC;IACvB,CAAC,CAAC;EACJ;AACF,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"config.js","names":["Alignment","Autoformat","AutoLink","BlockQuote","Bold","Clipboard","CodeBlock","Essentials","FontBackgroundColor","FontColor","FontSize","GeneralHtmlSupport","Heading","HorizontalLine","Image","ImageCaption","ImageInsert","ImageResize","ImageStyle","ImageTextAlternative","ImageToolbar","ImageUpload","Indent","IndentBlock","Italic","Link","List","ListProperties","Paragraph","PasteFromOffice","RemoveFormat","SpecialCharacters","SpecialCharactersEssentials","Strikethrough","Subscript","Superscript","Table","TableCaption","TableCellProperties","TableColumnResize","TableProperties","TableToolbar","Underline","MultiLevelList","CK_EDITOR_LICENSE_KEY","CutPlugin","IndentPaddingToMarginPlugin","NormalizeTableWidthPlugin","PasteAsTextPlugin","PastePlugin","ProcoreImageUploadPlugin","TabSpacesPlugin","getEditorTranslation","getValidEditorLocale","TEXT_COLOR_PALETTE","color","getDefaultConfig","locale","arguments","length","undefined","options","toolbar","config","licenseKey","language","translations","plugins","fontSize","title","model","supportAllValues","fontColor","colors","fontBackgroundColor","indentBlock","offset","unit","htmlSupport","allow","name","styles","link","defaultProtocol","decorators","openInNewTab","mode","label","defaultValue","attributes","target","rel","list","properties","useAttribute","startIndex","reversed","table","contentToolbar","tableProperties","borderColors","backgroundColors","tableCellProperties","imageUpload","_config$plugins","splice","indexOf","push","image","insert","integrations","upload","types","resizeUnit","procoreImageUpload","addButtonDataAttributes","editor","applyAttributes","toolbarElement","ui","view","element","toolbarChildren","Array","from","querySelectorAll","moreDropdownButtons","allToolbarElements","concat","toolbarItems","get","elementIndex","forEach","itemName","classList","contains","setAttribute","observer","MutationObserver","observe","childList","subtree","on","disconnect"],"sources":["../../../src/TextEditor/utils/config.ts"],"sourcesContent":["import type { ClassicEditor, EditorConfig } from 'ckeditor5'\nimport {\n Alignment,\n Autoformat,\n AutoLink,\n BlockQuote,\n Bold,\n Clipboard,\n CodeBlock,\n Essentials,\n FontBackgroundColor,\n FontColor,\n FontSize,\n GeneralHtmlSupport,\n Heading,\n HorizontalLine,\n Image,\n ImageCaption,\n ImageInsert,\n ImageResize,\n ImageStyle,\n ImageTextAlternative,\n ImageToolbar,\n ImageUpload,\n Indent,\n IndentBlock,\n Italic,\n Link,\n List,\n ListProperties,\n Paragraph,\n PasteFromOffice,\n RemoveFormat,\n SpecialCharacters,\n SpecialCharactersEssentials,\n Strikethrough,\n Subscript,\n Superscript,\n Table,\n TableCaption,\n TableCellProperties,\n TableColumnResize,\n TableProperties,\n TableToolbar,\n Underline,\n} from 'ckeditor5'\nimport { MultiLevelList } from 'ckeditor5-premium-features'\n\nimport { CK_EDITOR_LICENSE_KEY } from '../license_key'\nimport { CutPlugin } from '../plugins/CutPlugin'\nimport { IndentPaddingToMarginPlugin } from '../plugins/IndentPaddingToMarginPlugin'\nimport { NormalizeTableWidthPlugin } from '../plugins/NormalizeTableWidthPlugin'\nimport { PasteAsTextPlugin } from '../plugins/PasteAsTextPlugin'\nimport { PastePlugin } from '../plugins/PastePlugin'\nimport { ProcoreImageUploadPlugin } from '../plugins/ProcoreImageUploadPlugin'\nimport { TabSpacesPlugin } from '../plugins/TabSpacesPlugin'\nimport type { TextEditorImageUploadHandlers } from '../TextEditor.types'\nimport { getEditorTranslation, getValidEditorLocale } from './locale'\n\ninterface TextEditorConfigOptions {\n imageUpload?: TextEditorImageUploadHandlers\n}\n\ntype ProcoreEditorConfig = EditorConfig & {\n procoreImageUpload?: TextEditorImageUploadHandlers\n}\n\nconst TEXT_COLOR_PALETTE = [\n { color: '#BFEDD2' },\n { color: '#FBEEB8' },\n { color: '#F8CAC6' },\n { color: '#ECCAFA' },\n { color: '#C2E0F4' },\n { color: '#2DC26B' },\n { color: '#F1C40F' },\n { color: '#E03E2D' },\n { color: '#B96AD9' },\n { color: '#3598DB' },\n { color: '#169179' },\n { color: '#E67E23' },\n { color: '#BA372A' },\n { color: '#843FA1' },\n { color: '#236FA1' },\n { color: '#ECF0F1' },\n { color: '#CED4D9' },\n { color: '#95A5A6' },\n { color: '#7E8C8D' },\n { color: '#34495E' },\n { color: '#000000' },\n { color: '#FFFFFF' },\n]\n\nexport const getDefaultConfig = (\n locale: string = 'en',\n options: TextEditorConfigOptions = {}\n): EditorConfig => {\n const toolbar = [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n '|',\n 'alignment:left',\n 'alignment:center',\n 'alignment:right',\n '|',\n 'bulletedList',\n 'numberedList',\n 'multiLevelList',\n '|',\n 'outdent',\n 'indent',\n '|',\n 'cut',\n 'paste',\n 'pasteAsText',\n '|',\n 'fontSize',\n '|',\n 'fontColor',\n 'fontBackgroundColor',\n '|',\n 'insertTable',\n 'link',\n '|',\n 'blockquote',\n 'heading',\n '|',\n 'horizontalLine',\n 'removeFormat',\n 'specialCharacters',\n 'subscript',\n 'superscript',\n 'codeblock',\n '|',\n 'undo',\n 'redo',\n ]\n\n const config: ProcoreEditorConfig = {\n licenseKey: CK_EDITOR_LICENSE_KEY,\n language: getValidEditorLocale(locale),\n translations: [getEditorTranslation(locale)],\n plugins: [\n Alignment,\n AutoLink,\n Bold,\n Clipboard,\n Essentials,\n FontBackgroundColor,\n FontColor,\n FontSize,\n GeneralHtmlSupport,\n Indent,\n IndentBlock,\n Italic,\n Link,\n List,\n ListProperties,\n MultiLevelList,\n Paragraph,\n PasteFromOffice,\n Strikethrough,\n Table,\n TableCaption,\n TableCellProperties,\n TableColumnResize,\n TableProperties,\n TableToolbar,\n Underline,\n CutPlugin,\n PastePlugin,\n PasteAsTextPlugin,\n IndentPaddingToMarginPlugin,\n NormalizeTableWidthPlugin,\n BlockQuote,\n Heading,\n Autoformat,\n SpecialCharacters,\n SpecialCharactersEssentials,\n Subscript,\n Superscript,\n HorizontalLine,\n RemoveFormat,\n CodeBlock,\n TabSpacesPlugin, // TODO - delete\n ],\n toolbar,\n fontSize: {\n options: [\n { title: '8pt', model: '8px' },\n { title: '10pt', model: '10px' },\n { title: '12pt', model: '12px' },\n { title: '14pt', model: '14px' },\n { title: '18pt', model: '18px' },\n { title: '24pt', model: '24px' },\n { title: '36pt', model: '36px' },\n ],\n supportAllValues: true,\n },\n fontColor: {\n colors: TEXT_COLOR_PALETTE,\n },\n fontBackgroundColor: {\n colors: TEXT_COLOR_PALETTE,\n },\n indentBlock: {\n offset: 40,\n unit: 'px',\n },\n htmlSupport: {\n allow: [\n {\n name: 'p',\n styles: {\n 'margin-left': true,\n },\n },\n ],\n },\n link: {\n // Add a protocol to links typed without one (e.g. \"www.google.com\"),\n // so they are not treated as relative URLs.\n defaultProtocol: 'https://',\n decorators: {\n // Manual decorator renders an \"Open in a new tab\" switch in the link\n // form, letting the user choose new tab vs. same window per link.\n openInNewTab: {\n mode: 'manual',\n // The label doubles as CKEditor's own translation key (resolved by\n // editor.locale.t, not Procore I18n). Every locale this editor\n // supports (en, fr, es, de, ja, pl, pt, th, zh) already ships a\n // CKEditor translation for \"Open in a new tab\" (loaded in locale.ts),\n // so it is localized automatically and no Procore i18n entry is\n // needed. Do not replace with I18n.t(...): that would bypass\n // CKEditor's translator and duplicate existing translations.\n label: 'Open in a new tab',\n defaultValue: false, // unchecked by default => opens in same window\n attributes: {\n target: '_blank',\n rel: 'noopener noreferrer',\n },\n },\n },\n },\n list: {\n properties: {\n styles: {\n useAttribute: false,\n },\n startIndex: true,\n reversed: true,\n },\n },\n table: {\n contentToolbar: [\n 'tableColumn',\n 'tableRow',\n 'mergeTableCells',\n 'tableProperties',\n 'tableCellProperties',\n ],\n tableProperties: {\n borderColors: TEXT_COLOR_PALETTE,\n backgroundColors: TEXT_COLOR_PALETTE,\n },\n tableCellProperties: {\n borderColors: TEXT_COLOR_PALETTE,\n backgroundColors: TEXT_COLOR_PALETTE,\n },\n },\n }\n\n if (options.imageUpload) {\n toolbar.splice(toolbar.indexOf('link'), 0, 'insertImage')\n config.plugins?.push(\n Image,\n ImageCaption,\n ImageInsert,\n ImageResize,\n ImageStyle,\n ImageTextAlternative,\n ImageToolbar,\n ImageUpload,\n ProcoreImageUploadPlugin\n )\n config.image = {\n insert: {\n integrations: ['upload'],\n },\n upload: {\n types: ['avif', 'gif', 'jpeg', 'png', 'webp'],\n },\n resizeUnit: '%',\n toolbar: [\n 'imageStyle:inline',\n 'imageStyle:wrapText',\n 'imageStyle:breakText',\n '|',\n 'toggleImageCaption',\n 'imageTextAlternative',\n '|',\n 'resizeImage:25',\n 'resizeImage:50',\n 'resizeImage:75',\n 'resizeImage:original',\n ],\n }\n config.procoreImageUpload = options.imageUpload\n }\n\n return config\n}\n\n// Add stable data attributes to toolbar buttons for the styling (or testing) purposes\nexport const addButtonDataAttributes = (editor: ClassicEditor) => {\n const applyAttributes = () => {\n const toolbarElement = editor.ui.view.toolbar.element\n if (!toolbarElement) {\n return\n }\n\n // Get buttons in the main toolbar\n const toolbarChildren = Array.from(\n toolbarElement.querySelectorAll('.ck-toolbar__items > *')\n )\n\n // Get buttons hidden in \"more\" dropdown\n const moreDropdownButtons = Array.from(\n toolbarElement.querySelectorAll('.ck-dropdown__panel .ck-list .ck-button')\n )\n\n const allToolbarElements = [...toolbarChildren, ...moreDropdownButtons]\n\n // Create mapping based on toolbar configuration order\n const toolbarItems = (editor.config.get('toolbar') || []) as string[]\n let elementIndex = 0\n\n toolbarItems.forEach((itemName) => {\n const element = allToolbarElements[elementIndex]\n if (\n itemName !== '|' &&\n element &&\n !element.classList.contains('ck-toolbar__separator')\n ) {\n // Use the toolbar item name as the stable identifier\n element.setAttribute('data-cke-command', itemName)\n }\n elementIndex++\n })\n }\n\n // Apply attributes initially\n applyAttributes()\n\n // Re-apply when dropdown menus are opened (buttons get created dynamically)\n const toolbarElement = editor.ui.view.toolbar.element\n if (toolbarElement) {\n const observer = new MutationObserver(() => {\n applyAttributes()\n })\n observer.observe(toolbarElement, {\n childList: true,\n subtree: true,\n })\n editor.on('destroy', () => {\n observer.disconnect()\n })\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import type { I18njs } from '@procore/core-i18n-js';
|
|
1
2
|
import type { TextEditorImageUploadHandlers } from '../TextEditor.types';
|
|
3
|
+
type TextEditorI18n = Pick<I18njs, 't'>;
|
|
2
4
|
type RichTextEditorHandlerOptions = {
|
|
3
5
|
companyId: number | string;
|
|
4
6
|
projectId?: number | string;
|
|
5
7
|
toolName: string;
|
|
8
|
+
i18n: TextEditorI18n;
|
|
6
9
|
fetcher?: typeof fetch;
|
|
7
10
|
};
|
|
8
|
-
export declare const richTextEditorUploadHandler: ({ companyId, projectId, toolName, fetcher, }: RichTextEditorHandlerOptions) => TextEditorImageUploadHandlers["upload"];
|
|
11
|
+
export declare const richTextEditorUploadHandler: ({ companyId, projectId, toolName, i18n, fetcher, }: RichTextEditorHandlerOptions) => TextEditorImageUploadHandlers["upload"];
|
|
9
12
|
export {};
|