@procore/text-editor 1.0.1 → 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 +3 -0
- package/.jest/ckeditorUtilsMock.js +14 -0
- package/.jest/setupTests.js +1 -2
- package/CHANGELOG.md +24 -0
- package/README.md +15 -0
- package/dist/DebouncedTextEditor/DebouncedTextEditor.js +1 -1
- package/dist/DebouncedTextEditor/DebouncedTextEditor.js.map +1 -1
- package/dist/DebouncedTextEditor/index.js.map +1 -1
- package/dist/TextEditor/CKTextEditor.js +12 -8
- package/dist/TextEditor/CKTextEditor.js.map +1 -1
- package/dist/TextEditor/EditorError.js.map +1 -1
- package/dist/TextEditor/Providers/FeatureFlagProvider.js.map +1 -1
- package/dist/TextEditor/StickyToolbar/index.js.map +1 -1
- package/dist/TextEditor/StickyToolbar/useStickyToolbar.js.map +1 -1
- package/dist/TextEditor/StickyToolbar/useStickyToolbar.types.js.map +1 -1
- package/dist/TextEditor/TextEditor.js.map +1 -1
- package/dist/TextEditor/TextEditor.styles.d.ts +7 -8
- package/dist/TextEditor/TextEditor.styles.js +6 -6
- package/dist/TextEditor/TextEditor.styles.js.map +1 -1
- package/dist/TextEditor/TextEditor.types.d.ts +29 -9
- package/dist/TextEditor/TextEditor.types.js.map +1 -1
- package/dist/TextEditor/TextEditorI18nProvider.js.map +1 -1
- package/dist/TextEditor/TextEditorProvider.js.map +1 -1
- package/dist/TextEditor/TextEditorProvider.types.d.ts +1 -1
- package/dist/TextEditor/TextEditorProvider.types.js.map +1 -1
- package/dist/TextEditor/TinyMCETextEditor.js +2 -1
- package/dist/TextEditor/TinyMCETextEditor.js.map +1 -1
- package/dist/TextEditor/index.d.ts +1 -1
- package/dist/TextEditor/index.js +0 -1
- package/dist/TextEditor/index.js.map +1 -1
- package/dist/TextEditor/license_key.js.map +1 -1
- package/dist/TextEditor/plugins/CutPlugin/CutCommand.js +21 -29
- package/dist/TextEditor/plugins/CutPlugin/CutCommand.js.map +1 -1
- package/dist/TextEditor/plugins/CutPlugin/CutPlugin.js +2 -2
- package/dist/TextEditor/plugins/CutPlugin/CutPlugin.js.map +1 -1
- package/dist/TextEditor/plugins/CutPlugin/index.js.map +1 -1
- package/dist/TextEditor/plugins/IndentPaddingToMarginPlugin/IndentPaddingToMarginPlugin.js.map +1 -1
- package/dist/TextEditor/plugins/IndentPaddingToMarginPlugin/index.js.map +1 -1
- package/dist/TextEditor/plugins/NormalizeTableWidthPlugin/NormalizeTableWidthPlugin.js.map +1 -1
- package/dist/TextEditor/plugins/NormalizeTableWidthPlugin/index.js.map +1 -1
- package/dist/TextEditor/plugins/PasteAsTextPlugin/PasteAsTextCommand.js +20 -28
- package/dist/TextEditor/plugins/PasteAsTextPlugin/PasteAsTextCommand.js.map +1 -1
- package/dist/TextEditor/plugins/PasteAsTextPlugin/PasteAsTextPlugin.js +2 -2
- package/dist/TextEditor/plugins/PasteAsTextPlugin/PasteAsTextPlugin.js.map +1 -1
- package/dist/TextEditor/plugins/PasteAsTextPlugin/index.js.map +1 -1
- package/dist/TextEditor/plugins/PastePlugin/PasteCommand.js +54 -62
- package/dist/TextEditor/plugins/PastePlugin/PasteCommand.js.map +1 -1
- package/dist/TextEditor/plugins/PastePlugin/PastePlugin.js +2 -2
- package/dist/TextEditor/plugins/PastePlugin/PastePlugin.js.map +1 -1
- package/dist/TextEditor/plugins/PastePlugin/index.js.map +1 -1
- package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.d.ts +7 -1
- package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.js +162 -71
- package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.js.map +1 -1
- package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/index.js.map +1 -1
- package/dist/TextEditor/plugins/TabSpacesPlugin/TabSpacesPlugin.js.map +1 -1
- package/dist/TextEditor/plugins/TabSpacesPlugin/index.js.map +1 -1
- package/dist/TextEditor/textEditorTheming/icons.js.map +1 -1
- package/dist/TextEditor/textEditorTheming/index.js.map +1 -1
- package/dist/TextEditor/textEditorTheming/textEditorTheming.styles.d.ts +0 -1
- package/dist/TextEditor/textEditorTheming/textEditorTheming.styles.js.map +1 -1
- package/dist/TextEditor/useCKEditorCss.js.map +1 -1
- package/dist/TextEditor/useCKEditorFocusScope.js.map +1 -1
- package/dist/TextEditor/useTabAsNavigation.js.map +1 -1
- package/dist/TextEditor/utils/config.js +30 -5
- package/dist/TextEditor/utils/config.js.map +1 -1
- package/dist/TextEditor/utils/imageAttributes.js.map +1 -1
- package/dist/TextEditor/utils/imageUrls.js.map +1 -1
- package/dist/TextEditor/utils/index.js.map +1 -1
- package/dist/TextEditor/utils/locale.js +12 -1
- package/dist/TextEditor/utils/locale.js.map +1 -1
- package/dist/TextEditor/utils/richTextEditorHandlers.d.ts +5 -2
- package/dist/TextEditor/utils/richTextEditorHandlers.js +138 -99
- package/dist/TextEditor/utils/richTextEditorHandlers.js.map +1 -1
- package/dist/TextEditorOutput/TextEditorOutput.js.map +1 -1
- package/dist/TextEditorOutput/TextEditorOutput.styles.d.ts +0 -1
- package/dist/TextEditorOutput/TextEditorOutput.styles.js +2 -2
- package/dist/TextEditorOutput/TextEditorOutput.styles.js.map +1 -1
- package/dist/TextEditorOutput/TextEditorOutput.types.d.ts +0 -1
- package/dist/TextEditorOutput/TextEditorOutput.types.js.map +1 -1
- package/dist/TextEditorOutput/TextEditorOutput.utils.js +1 -1
- package/dist/TextEditorOutput/TextEditorOutput.utils.js.map +1 -1
- package/dist/TextEditorOutput/index.js.map +1 -1
- package/dist/_storyHelpers/constants.js.map +1 -1
- package/dist/_typedoc/TextEditor/TextEditor.types.json +432 -158
- package/dist/_typedoc/TextEditor/TextEditorProvider.types.json +4 -4
- package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +9 -9
- package/dist/_typedoc/deprecations.json +1 -1
- package/dist/_utils/propsTypedoc.d.ts +3 -3
- package/dist/_utils/propsTypedoc.js +1 -3
- package/dist/_utils/propsTypedoc.js.map +1 -1
- package/dist/ckeditor5-premium-features.d.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/locales/en.json +1 -0
- package/dist/stories/util.js.map +1 -1
- package/dist/utils/debounce.js +1 -1
- package/dist/utils/debounce.js.map +1 -1
- package/jestConfig.js +0 -2
- package/package.json +49 -47
- package/.jest/translationMock.js +0 -12
|
@@ -6,15 +6,8 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
|
|
|
6
6
|
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
|
|
7
7
|
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
|
|
8
8
|
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
9
|
-
function _regeneratorRuntime() { "use strict"; var r = _regenerator(), e = r.m(_regeneratorRuntime), t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { "throw": 1, "return": 2, "break": 3, "continue": 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, "catch": function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, _regeneratorValues(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (_regeneratorRuntime = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && o.reverse()); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new _OverloadYield(r, e); }, AsyncIterator: _regeneratorAsyncIterator, async: function async(r, e, t, o, u) { return (n(e) ? _regeneratorAsyncGen : _regeneratorAsync)(a(r), e, t, o, u); }, keys: _regeneratorKeys, values: _regeneratorValues }; })(); }
|
|
10
|
-
function _regeneratorValues(e) { if (null != e) { var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + " is not iterable"); }
|
|
11
|
-
function _regeneratorKeys(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; }
|
|
12
|
-
function _regeneratorAsync(n, e, r, t, o) { var a = _regeneratorAsyncGen(n, e, r, t, o); return a.next().then(function (n) { return n.done ? n.value : a.next(); }); }
|
|
13
|
-
function _regeneratorAsyncGen(r, e, t, o, n) { return new _regeneratorAsyncIterator(_regenerator().w(r, e, t, o), n || Promise); }
|
|
14
|
-
function _regeneratorAsyncIterator(t, e) { function n(r, o, i, f) { try { var c = t[r](o), u = c.value; return u instanceof _OverloadYield ? e.resolve(u.v).then(function (t) { n("next", t, i, f); }, function (t) { n("throw", t, i, f); }) : e.resolve(u).then(function (t) { c.value = t, i(c); }, function (t) { return n("throw", t, i, f); }); } catch (t) { f(t); } } var r; this.next || (_regeneratorDefine2(_regeneratorAsyncIterator.prototype), _regeneratorDefine2(_regeneratorAsyncIterator.prototype, "function" == typeof Symbol && Symbol.asyncIterator || "@asyncIterator", function () { return this; })), _regeneratorDefine2(this, "_invoke", function (t, o, i) { function f() { return new e(function (e, r) { n(t, i, e, r); }); } return r = r ? r.then(f, f) : f(); }, !0); }
|
|
15
9
|
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
16
|
-
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) {
|
|
17
|
-
function _OverloadYield(e, d) { this.v = e, this.k = d; }
|
|
10
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
18
11
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
19
12
|
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
20
13
|
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
@@ -40,49 +33,48 @@ export var ProcoreImageUploadAdapter = /*#__PURE__*/function () {
|
|
|
40
33
|
return _createClass(ProcoreImageUploadAdapter, [{
|
|
41
34
|
key: "upload",
|
|
42
35
|
value: function () {
|
|
43
|
-
var _upload = _asyncToGenerator(
|
|
44
|
-
var file, result;
|
|
45
|
-
return
|
|
46
|
-
while (1) switch (_context.
|
|
36
|
+
var _upload = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
37
|
+
var file, result, _t;
|
|
38
|
+
return _regenerator().w(function (_context) {
|
|
39
|
+
while (1) switch (_context.p = _context.n) {
|
|
47
40
|
case 0:
|
|
48
41
|
this.abortController = new AbortController();
|
|
49
|
-
_context.
|
|
50
|
-
_context.
|
|
42
|
+
_context.p = 1;
|
|
43
|
+
_context.n = 2;
|
|
51
44
|
return this.loader.file;
|
|
52
|
-
case
|
|
53
|
-
file = _context.
|
|
45
|
+
case 2:
|
|
46
|
+
file = _context.v;
|
|
54
47
|
if (file) {
|
|
55
|
-
_context.
|
|
48
|
+
_context.n = 3;
|
|
56
49
|
break;
|
|
57
50
|
}
|
|
58
51
|
throw this.fail(this.i18n.t('textEditor.imageUpload.noFile'));
|
|
59
|
-
case
|
|
52
|
+
case 3:
|
|
60
53
|
this.validateFile(file);
|
|
61
54
|
this.warnPdfUnsupportedFile(file);
|
|
62
|
-
_context.
|
|
55
|
+
_context.n = 4;
|
|
63
56
|
return this.validateReadableImage(file);
|
|
64
|
-
case
|
|
57
|
+
case 4:
|
|
65
58
|
this.validateImageCount();
|
|
66
|
-
_context.
|
|
59
|
+
_context.n = 5;
|
|
67
60
|
return this.uploadFile(file);
|
|
68
|
-
case
|
|
69
|
-
result = _context.
|
|
61
|
+
case 5:
|
|
62
|
+
result = _context.v;
|
|
70
63
|
if (!this.abortController.signal.aborted) {
|
|
71
|
-
_context.
|
|
64
|
+
_context.n = 6;
|
|
72
65
|
break;
|
|
73
66
|
}
|
|
74
67
|
throw this.fail(this.i18n.t('textEditor.imageUpload.aborted'));
|
|
75
|
-
case
|
|
76
|
-
return _context.
|
|
77
|
-
case
|
|
78
|
-
_context.
|
|
79
|
-
|
|
80
|
-
throw this.toSilentUploadError(
|
|
81
|
-
case
|
|
82
|
-
|
|
83
|
-
return _context.stop();
|
|
68
|
+
case 6:
|
|
69
|
+
return _context.a(2, this.toCkEditorResponse(result));
|
|
70
|
+
case 7:
|
|
71
|
+
_context.p = 7;
|
|
72
|
+
_t = _context.v;
|
|
73
|
+
throw this.toSilentUploadError(_t);
|
|
74
|
+
case 8:
|
|
75
|
+
return _context.a(2);
|
|
84
76
|
}
|
|
85
|
-
}, _callee, this, [[1,
|
|
77
|
+
}, _callee, this, [[1, 7]]);
|
|
86
78
|
}));
|
|
87
79
|
function upload() {
|
|
88
80
|
return _upload.apply(this, arguments);
|
|
@@ -93,8 +85,8 @@ export var ProcoreImageUploadAdapter = /*#__PURE__*/function () {
|
|
|
93
85
|
key: "abort",
|
|
94
86
|
value: function abort() {
|
|
95
87
|
var _this$abortController, _this$abortUpload;
|
|
96
|
-
(_this$abortController = this.abortController) === null || _this$abortController === void 0
|
|
97
|
-
(_this$abortUpload = this.abortUpload) === null || _this$abortUpload === void 0
|
|
88
|
+
(_this$abortController = this.abortController) === null || _this$abortController === void 0 || _this$abortController.abort();
|
|
89
|
+
(_this$abortUpload = this.abortUpload) === null || _this$abortUpload === void 0 || _this$abortUpload.call(this);
|
|
98
90
|
}
|
|
99
91
|
}, {
|
|
100
92
|
key: "validateFile",
|
|
@@ -115,22 +107,22 @@ export var ProcoreImageUploadAdapter = /*#__PURE__*/function () {
|
|
|
115
107
|
if (!PDF_UNSUPPORTED_MIME_TYPES.has(file.type)) {
|
|
116
108
|
return;
|
|
117
109
|
}
|
|
118
|
-
(_this$imageUpload$onW = (_this$imageUpload = this.imageUpload).onWarning) === null || _this$imageUpload$onW === void 0
|
|
110
|
+
(_this$imageUpload$onW = (_this$imageUpload = this.imageUpload).onWarning) === null || _this$imageUpload$onW === void 0 || _this$imageUpload$onW.call(_this$imageUpload, this.i18n.t('textEditor.imageUpload.pdfUnsupportedType', {
|
|
119
111
|
type: this.fileTypeLabel(file)
|
|
120
112
|
}));
|
|
121
113
|
}
|
|
122
114
|
}, {
|
|
123
115
|
key: "validateReadableImage",
|
|
124
116
|
value: function () {
|
|
125
|
-
var _validateReadableImage = _asyncToGenerator(
|
|
126
|
-
var url, image;
|
|
127
|
-
return
|
|
128
|
-
while (1) switch (_context2.
|
|
117
|
+
var _validateReadableImage = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(file) {
|
|
118
|
+
var url, image, _t2;
|
|
119
|
+
return _regenerator().w(function (_context2) {
|
|
120
|
+
while (1) switch (_context2.p = _context2.n) {
|
|
129
121
|
case 0:
|
|
130
122
|
url = URL.createObjectURL(file);
|
|
131
|
-
_context2.
|
|
123
|
+
_context2.p = 1;
|
|
132
124
|
image = new Image();
|
|
133
|
-
_context2.
|
|
125
|
+
_context2.n = 2;
|
|
134
126
|
return new Promise(function (resolve, reject) {
|
|
135
127
|
image.onload = function () {
|
|
136
128
|
return resolve();
|
|
@@ -140,22 +132,21 @@ export var ProcoreImageUploadAdapter = /*#__PURE__*/function () {
|
|
|
140
132
|
};
|
|
141
133
|
image.src = url;
|
|
142
134
|
});
|
|
143
|
-
case
|
|
144
|
-
_context2.
|
|
135
|
+
case 2:
|
|
136
|
+
_context2.n = 4;
|
|
145
137
|
break;
|
|
146
|
-
case
|
|
147
|
-
_context2.
|
|
148
|
-
|
|
138
|
+
case 3:
|
|
139
|
+
_context2.p = 3;
|
|
140
|
+
_t2 = _context2.v;
|
|
149
141
|
throw this.fail(this.i18n.t('textEditor.imageUpload.unreadable'));
|
|
150
|
-
case
|
|
151
|
-
_context2.
|
|
142
|
+
case 4:
|
|
143
|
+
_context2.p = 4;
|
|
152
144
|
URL.revokeObjectURL(url);
|
|
153
|
-
return _context2.
|
|
154
|
-
case
|
|
155
|
-
|
|
156
|
-
return _context2.stop();
|
|
145
|
+
return _context2.f(4);
|
|
146
|
+
case 5:
|
|
147
|
+
return _context2.a(2);
|
|
157
148
|
}
|
|
158
|
-
}, _callee2, this, [[1,
|
|
149
|
+
}, _callee2, this, [[1, 3, 4, 5]]);
|
|
159
150
|
}));
|
|
160
151
|
function validateReadableImage(_x) {
|
|
161
152
|
return _validateReadableImage.apply(this, arguments);
|
|
@@ -227,7 +218,7 @@ export var ProcoreImageUploadAdapter = /*#__PURE__*/function () {
|
|
|
227
218
|
key: "fail",
|
|
228
219
|
value: function fail(message) {
|
|
229
220
|
var _this$imageUpload$onE, _this$imageUpload2;
|
|
230
|
-
(_this$imageUpload$onE = (_this$imageUpload2 = this.imageUpload).onError) === null || _this$imageUpload$onE === void 0
|
|
221
|
+
(_this$imageUpload$onE = (_this$imageUpload2 = this.imageUpload).onError) === null || _this$imageUpload$onE === void 0 || _this$imageUpload$onE.call(_this$imageUpload2, message);
|
|
231
222
|
return REPORTED_UPLOAD_ERROR;
|
|
232
223
|
}
|
|
233
224
|
}, {
|
|
@@ -259,16 +250,77 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
259
250
|
this.configureProstoreFileIdConversion();
|
|
260
251
|
this.configureUploadAdapter(imageUpload);
|
|
261
252
|
this.configureUnsupportedFileDrop(imageUpload);
|
|
253
|
+
this.configurePastedImageFileOverExternalHtml(imageUpload);
|
|
262
254
|
this.configurePastedImageLimit(imageUpload);
|
|
263
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
|
+
}
|
|
264
316
|
}, {
|
|
265
317
|
key: "configureUploadAdapter",
|
|
266
318
|
value: function configureUploadAdapter(imageUpload) {
|
|
267
|
-
var
|
|
319
|
+
var _this3 = this;
|
|
268
320
|
var fileRepository = this.editor.plugins.get(FileRepository);
|
|
269
321
|
fileRepository.createUploadAdapter = function (loader) {
|
|
270
322
|
return new ProcoreImageUploadAdapter(loader, imageUpload, function () {
|
|
271
|
-
return
|
|
323
|
+
return _this3.currentEmbeddedImageCountOrUndefined();
|
|
272
324
|
});
|
|
273
325
|
};
|
|
274
326
|
var imageUploadEditing = this.editor.plugins.get(ImageUploadEditing);
|
|
@@ -279,7 +331,7 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
279
331
|
return;
|
|
280
332
|
}
|
|
281
333
|
var prostoreFileId = String(data.prostoreFileId);
|
|
282
|
-
|
|
334
|
+
_this3.editor.model.change(function (writer) {
|
|
283
335
|
writer.setAttribute('prostoreFileId', prostoreFileId, imageElement);
|
|
284
336
|
});
|
|
285
337
|
});
|
|
@@ -287,11 +339,11 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
287
339
|
}, {
|
|
288
340
|
key: "configureProstoreFileIdConversion",
|
|
289
341
|
value: function configureProstoreFileIdConversion() {
|
|
290
|
-
var
|
|
342
|
+
var _this4 = this;
|
|
291
343
|
var imageModelNames = ['imageBlock', 'imageInline'];
|
|
292
344
|
imageModelNames.forEach(function (imageModelName) {
|
|
293
|
-
if (
|
|
294
|
-
|
|
345
|
+
if (_this4.canExtendSchemaElement(imageModelName)) {
|
|
346
|
+
_this4.editor.model.schema.extend(imageModelName, {
|
|
295
347
|
allowAttributes: ['prostoreFileId']
|
|
296
348
|
});
|
|
297
349
|
}
|
|
@@ -323,18 +375,18 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
323
375
|
}, {
|
|
324
376
|
key: "configurePastedImageLimit",
|
|
325
377
|
value: function configurePastedImageLimit(imageUpload) {
|
|
326
|
-
var
|
|
378
|
+
var _this5 = this;
|
|
327
379
|
var clipboardPipeline = this.editor.plugins.get(ClipboardPipeline);
|
|
328
380
|
clipboardPipeline.on('inputTransformation', function (event, data) {
|
|
329
|
-
var currentImageCount =
|
|
381
|
+
var currentImageCount = _this5.currentEmbeddedImageCountOrUndefined();
|
|
330
382
|
if (currentImageCount === undefined) {
|
|
331
383
|
return;
|
|
332
384
|
}
|
|
333
385
|
var pastedImageCount = countImages(data.content);
|
|
334
386
|
if (exceedsImageLimit(currentImageCount, pastedImageCount)) {
|
|
335
|
-
var _event$stop, _imageUpload$
|
|
336
|
-
(_event$stop = event.stop) === null || _event$stop === void 0
|
|
337
|
-
(_imageUpload$
|
|
387
|
+
var _event$stop, _imageUpload$onError3;
|
|
388
|
+
(_event$stop = event.stop) === null || _event$stop === void 0 || _event$stop.call(event);
|
|
389
|
+
(_imageUpload$onError3 = imageUpload.onError) === null || _imageUpload$onError3 === void 0 || _imageUpload$onError3.call(imageUpload, imageUpload.i18n.t('textEditor.imageUpload.imageLimit', {
|
|
338
390
|
count: MAX_RICH_TEXT_IMAGES
|
|
339
391
|
}));
|
|
340
392
|
}
|
|
@@ -344,7 +396,7 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
344
396
|
key: "configureUnsupportedFileDrop",
|
|
345
397
|
value: function configureUnsupportedFileDrop(imageUpload) {
|
|
346
398
|
this.listenTo(this.editor.editing.view.document, 'clipboardInput', function (event, data) {
|
|
347
|
-
var _imageUpload$
|
|
399
|
+
var _imageUpload$onError4;
|
|
348
400
|
var files = data.dataTransfer.files;
|
|
349
401
|
if (files.length === 0) {
|
|
350
402
|
return;
|
|
@@ -355,7 +407,7 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
355
407
|
if (!unsupportedFile) {
|
|
356
408
|
return;
|
|
357
409
|
}
|
|
358
|
-
(_imageUpload$
|
|
410
|
+
(_imageUpload$onError4 = imageUpload.onError) === null || _imageUpload$onError4 === void 0 || _imageUpload$onError4.call(imageUpload, imageUpload.i18n.t('textEditor.imageUpload.unsupportedType', {
|
|
359
411
|
type: _fileTypeLabel(unsupportedFile)
|
|
360
412
|
}));
|
|
361
413
|
if (files.every(function (file) {
|
|
@@ -376,10 +428,10 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
376
428
|
}, {
|
|
377
429
|
key: "currentEmbeddedImageCountOrUndefined",
|
|
378
430
|
value: function currentEmbeddedImageCountOrUndefined() {
|
|
379
|
-
var
|
|
431
|
+
var _this6 = this;
|
|
380
432
|
try {
|
|
381
433
|
return this.editor.model.document.getRootNames().reduce(function (total, rootName) {
|
|
382
|
-
var root =
|
|
434
|
+
var root = _this6.editor.model.document.getRoot(rootName);
|
|
383
435
|
return root ? total + countModelImages(root) : total;
|
|
384
436
|
}, 0);
|
|
385
437
|
} catch (_error) {
|
|
@@ -398,6 +450,45 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
398
450
|
}
|
|
399
451
|
}]);
|
|
400
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
|
+
}
|
|
401
492
|
function countImages(node) {
|
|
402
493
|
if (!node.is('element') && !node.is('documentFragment')) {
|
|
403
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","enumerable","configurable","writable","_invoke","_OverloadYield","k","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","_regeneratorRuntime","mark","_callee","file","result","wrap","_callee$","_context","prev","next","abortController","AbortController","sent","fail","i18n","validateFile","warnPdfUnsupportedFile","validateReadableImage","validateImageCount","uploadFile","signal","aborted","abrupt","toCkEditorResponse","t0","toSilentUploadError","stop","upload","abort","_this$abortController","_this$abortUpload","abortUpload","has","type","fileTypeLabel","size","_this$imageUpload$onW","_this$imageUpload","onWarning","_validateReadableImage","_callee2","url","image","_callee2$","_context2","URL","createObjectURL","Image","reject","onload","onerror","Error","src","revokeObjectURL","finish","_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","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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"}
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["ProcoreImageUploadAdapter","ProcoreImageUploadPlugin"],"sources":["../../../../src/TextEditor/plugins/ProcoreImageUploadPlugin/index.ts"],"sourcesContent":["export {\n ProcoreImageUploadAdapter,\n ProcoreImageUploadPlugin,\n} from './ProcoreImageUploadPlugin'\n"],"mappings":"AAAA,SACEA,yBAAyB,EACzBC,wBAAwB,QACnB,4BAA4B"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["ProcoreImageUploadAdapter","ProcoreImageUploadPlugin"],"sources":["../../../../src/TextEditor/plugins/ProcoreImageUploadPlugin/index.ts"],"sourcesContent":["export {\n ProcoreImageUploadAdapter,\n ProcoreImageUploadPlugin,\n} from './ProcoreImageUploadPlugin'\n"],"mappings":"AAAA,SACEA,yBAAyB,EACzBC,wBAAwB,QACnB,4BAA4B","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabSpacesPlugin.js","names":["Plugin","toWidget","viewToModelPositionOutsideModelElement","Widget","TabSpacesPlugin","_Plugin","_classCallCheck","_callSuper","arguments","_inherits","_createClass","key","value","init","editor","model","doc","document","schema","register","allowWhere","isInline","isObject","editing","mapper","on","viewElement","hasClass","conversion","elementToElement","view","modelItem","_ref","viewWriter","writer","span","createContainerElement","contenteditable","insert","createPositionAt","createText","label","_ref2","name","classes","keystrokes","set","evtData","cancel","change","tab","createElement","insertContent","selection","get"],"sources":["../../../../src/TextEditor/plugins/TabSpacesPlugin/TabSpacesPlugin.ts"],"sourcesContent":["import type { Editor } from 'ckeditor5'\nimport {\n Plugin,\n toWidget,\n viewToModelPositionOutsideModelElement,\n Widget,\n} from 'ckeditor5'\n\n// TODO - delete\nexport class TabSpacesPlugin extends Plugin {\n static get requires() {\n return [Widget]\n }\n\n static get pluginName() {\n return 'TabSpacesPlugin'\n }\n\n init(): void {\n const editor = this.editor as Editor\n const model = editor.model\n const doc = model.document\n\n model.schema.register('tab', {\n allowWhere: '$text',\n isInline: true,\n isObject: true,\n })\n\n editor.editing.mapper.on(\n 'viewToModelPosition',\n viewToModelPositionOutsideModelElement(model, (viewElement) =>\n viewElement.hasClass('ck-tab')\n )\n )\n\n editor.conversion.for('editingDowncast').elementToElement({\n model: 'tab',\n view: (modelItem, { writer: viewWriter }) => {\n const span = viewWriter.createContainerElement('span', {\n class: 'ck-tab',\n contenteditable: 'false',\n })\n viewWriter.insert(\n viewWriter.createPositionAt(span, 0),\n viewWriter.createText('\\u00A0\\u00A0\\u00A0')\n )\n\n return toWidget(span, viewWriter, { label: 'tab spaces' })\n },\n })\n\n editor.conversion.for('dataDowncast').elementToElement({\n model: 'tab',\n view: (modelItem, { writer: viewWriter }) => {\n const span = viewWriter.createContainerElement('span', {\n class: 'ck-tab',\n })\n viewWriter.insert(\n viewWriter.createPositionAt(span, 0),\n viewWriter.createText('\\u00A0\\u00A0\\u00A0')\n )\n return span\n },\n })\n\n editor.conversion.for('upcast').elementToElement({\n view: {\n name: 'span',\n classes: 'ck-tab',\n },\n model: 'tab',\n })\n\n editor.keystrokes.set('Tab', (evtData, cancel) => {\n model.change((writer) => {\n const tab = writer.createElement('tab')\n model.insertContent(tab, doc.selection)\n })\n cancel()\n })\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TabSpacesPlugin.js","names":["Plugin","toWidget","viewToModelPositionOutsideModelElement","Widget","TabSpacesPlugin","_Plugin","_classCallCheck","_callSuper","arguments","_inherits","_createClass","key","value","init","editor","model","doc","document","schema","register","allowWhere","isInline","isObject","editing","mapper","on","viewElement","hasClass","conversion","elementToElement","view","modelItem","_ref","viewWriter","writer","span","createContainerElement","contenteditable","insert","createPositionAt","createText","label","_ref2","name","classes","keystrokes","set","evtData","cancel","change","tab","createElement","insertContent","selection","get"],"sources":["../../../../src/TextEditor/plugins/TabSpacesPlugin/TabSpacesPlugin.ts"],"sourcesContent":["import type { Editor } from 'ckeditor5'\nimport {\n Plugin,\n toWidget,\n viewToModelPositionOutsideModelElement,\n Widget,\n} from 'ckeditor5'\n\n// TODO - delete\nexport class TabSpacesPlugin extends Plugin {\n static get requires() {\n return [Widget]\n }\n\n static get pluginName() {\n return 'TabSpacesPlugin'\n }\n\n init(): void {\n const editor = this.editor as Editor\n const model = editor.model\n const doc = model.document\n\n model.schema.register('tab', {\n allowWhere: '$text',\n isInline: true,\n isObject: true,\n })\n\n editor.editing.mapper.on(\n 'viewToModelPosition',\n viewToModelPositionOutsideModelElement(model, (viewElement) =>\n viewElement.hasClass('ck-tab')\n )\n )\n\n editor.conversion.for('editingDowncast').elementToElement({\n model: 'tab',\n view: (modelItem, { writer: viewWriter }) => {\n const span = viewWriter.createContainerElement('span', {\n class: 'ck-tab',\n contenteditable: 'false',\n })\n viewWriter.insert(\n viewWriter.createPositionAt(span, 0),\n viewWriter.createText('\\u00A0\\u00A0\\u00A0')\n )\n\n return toWidget(span, viewWriter, { label: 'tab spaces' })\n },\n })\n\n editor.conversion.for('dataDowncast').elementToElement({\n model: 'tab',\n view: (modelItem, { writer: viewWriter }) => {\n const span = viewWriter.createContainerElement('span', {\n class: 'ck-tab',\n })\n viewWriter.insert(\n viewWriter.createPositionAt(span, 0),\n viewWriter.createText('\\u00A0\\u00A0\\u00A0')\n )\n return span\n },\n })\n\n editor.conversion.for('upcast').elementToElement({\n view: {\n name: 'span',\n classes: 'ck-tab',\n },\n model: 'tab',\n })\n\n editor.keystrokes.set('Tab', (evtData, cancel) => {\n model.change((writer) => {\n const tab = writer.createElement('tab')\n model.insertContent(tab, doc.selection)\n })\n cancel()\n })\n }\n}\n"],"mappings":"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","ignoreList":[]}
|