roosterjs 9.56.0 → 9.58.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/README.md +8 -0
- package/dist/rooster-adapter-amd-min.js +1 -1
- package/dist/rooster-adapter-amd-min.js.map +1 -1
- package/dist/rooster-adapter-amd.js +90 -6
- package/dist/rooster-adapter-amd.js.map +1 -1
- package/dist/rooster-adapter-min.js +1 -1
- package/dist/rooster-adapter-min.js.map +1 -1
- package/dist/rooster-adapter.js +90 -6
- package/dist/rooster-adapter.js.map +1 -1
- package/dist/rooster-amd-min.js +1 -1
- package/dist/rooster-amd-min.js.map +1 -1
- package/dist/rooster-amd.d.ts +66 -6
- package/dist/rooster-amd.js +703 -234
- package/dist/rooster-amd.js.map +1 -1
- package/dist/rooster-min.js +1 -1
- package/dist/rooster-min.js.map +1 -1
- package/dist/rooster-react-amd-min.js +1 -1
- package/dist/rooster-react-amd-min.js.map +1 -1
- package/dist/rooster-react-amd.d.ts +1 -1
- package/dist/rooster-react-amd.js +145 -62
- package/dist/rooster-react-amd.js.map +1 -1
- package/dist/rooster-react-min.js +1 -1
- package/dist/rooster-react-min.js.map +1 -1
- package/dist/rooster-react.d.ts +1 -1
- package/dist/rooster-react.js +143 -60
- package/dist/rooster-react.js.map +1 -1
- package/dist/rooster.d.ts +66 -6
- package/dist/rooster.js +703 -234
- package/dist/rooster.js.map +1 -1
- package/package.json +7 -7
package/dist/rooster-amd.js
CHANGED
|
@@ -1246,12 +1246,13 @@ module.exports = {
|
|
|
1246
1246
|
/* MIT license */
|
|
1247
1247
|
var colorNames = __webpack_require__(/*! color-name */ "./node_modules/color-name/index.js");
|
|
1248
1248
|
var swizzle = __webpack_require__(/*! simple-swizzle */ "./node_modules/simple-swizzle/index.js");
|
|
1249
|
+
var hasOwnProperty = Object.hasOwnProperty;
|
|
1249
1250
|
|
|
1250
|
-
var reverseNames =
|
|
1251
|
+
var reverseNames = Object.create(null);
|
|
1251
1252
|
|
|
1252
1253
|
// create a list of reverse color names
|
|
1253
1254
|
for (var name in colorNames) {
|
|
1254
|
-
if (
|
|
1255
|
+
if (hasOwnProperty.call(colorNames, name)) {
|
|
1255
1256
|
reverseNames[colorNames[name]] = name;
|
|
1256
1257
|
}
|
|
1257
1258
|
}
|
|
@@ -1294,9 +1295,9 @@ cs.get.rgb = function (string) {
|
|
|
1294
1295
|
|
|
1295
1296
|
var abbr = /^#([a-f0-9]{3,4})$/i;
|
|
1296
1297
|
var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;
|
|
1297
|
-
var rgba = /^rgba?\(\s*([+-]?\d+)\s
|
|
1298
|
-
var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s
|
|
1299
|
-
var keyword =
|
|
1298
|
+
var rgba = /^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/;
|
|
1299
|
+
var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/;
|
|
1300
|
+
var keyword = /^(\w+)$/;
|
|
1300
1301
|
|
|
1301
1302
|
var rgb = [0, 0, 0, 1];
|
|
1302
1303
|
var match;
|
|
@@ -1333,7 +1334,11 @@ cs.get.rgb = function (string) {
|
|
|
1333
1334
|
}
|
|
1334
1335
|
|
|
1335
1336
|
if (match[4]) {
|
|
1336
|
-
|
|
1337
|
+
if (match[5]) {
|
|
1338
|
+
rgb[3] = parseFloat(match[4]) * 0.01;
|
|
1339
|
+
} else {
|
|
1340
|
+
rgb[3] = parseFloat(match[4]);
|
|
1341
|
+
}
|
|
1337
1342
|
}
|
|
1338
1343
|
} else if (match = string.match(per)) {
|
|
1339
1344
|
for (i = 0; i < 3; i++) {
|
|
@@ -1341,19 +1346,22 @@ cs.get.rgb = function (string) {
|
|
|
1341
1346
|
}
|
|
1342
1347
|
|
|
1343
1348
|
if (match[4]) {
|
|
1344
|
-
|
|
1349
|
+
if (match[5]) {
|
|
1350
|
+
rgb[3] = parseFloat(match[4]) * 0.01;
|
|
1351
|
+
} else {
|
|
1352
|
+
rgb[3] = parseFloat(match[4]);
|
|
1353
|
+
}
|
|
1345
1354
|
}
|
|
1346
1355
|
} else if (match = string.match(keyword)) {
|
|
1347
1356
|
if (match[1] === 'transparent') {
|
|
1348
1357
|
return [0, 0, 0, 0];
|
|
1349
1358
|
}
|
|
1350
1359
|
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
if (!rgb) {
|
|
1360
|
+
if (!hasOwnProperty.call(colorNames, match[1])) {
|
|
1354
1361
|
return null;
|
|
1355
1362
|
}
|
|
1356
1363
|
|
|
1364
|
+
rgb = colorNames[match[1]];
|
|
1357
1365
|
rgb[3] = 1;
|
|
1358
1366
|
|
|
1359
1367
|
return rgb;
|
|
@@ -1374,12 +1382,12 @@ cs.get.hsl = function (string) {
|
|
|
1374
1382
|
return null;
|
|
1375
1383
|
}
|
|
1376
1384
|
|
|
1377
|
-
var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s
|
|
1385
|
+
var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/;
|
|
1378
1386
|
var match = string.match(hsl);
|
|
1379
1387
|
|
|
1380
1388
|
if (match) {
|
|
1381
1389
|
var alpha = parseFloat(match[4]);
|
|
1382
|
-
var h = (parseFloat(match[1]) + 360) % 360;
|
|
1390
|
+
var h = ((parseFloat(match[1]) % 360) + 360) % 360;
|
|
1383
1391
|
var s = clamp(parseFloat(match[2]), 0, 100);
|
|
1384
1392
|
var l = clamp(parseFloat(match[3]), 0, 100);
|
|
1385
1393
|
var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);
|
|
@@ -1395,7 +1403,7 @@ cs.get.hwb = function (string) {
|
|
|
1395
1403
|
return null;
|
|
1396
1404
|
}
|
|
1397
1405
|
|
|
1398
|
-
var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d
|
|
1406
|
+
var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/;
|
|
1399
1407
|
var match = string.match(hwb);
|
|
1400
1408
|
|
|
1401
1409
|
if (match) {
|
|
@@ -1474,7 +1482,7 @@ function clamp(num, min, max) {
|
|
|
1474
1482
|
}
|
|
1475
1483
|
|
|
1476
1484
|
function hexDouble(num) {
|
|
1477
|
-
var str = num.toString(16).toUpperCase();
|
|
1485
|
+
var str = Math.round(num).toString(16).toUpperCase();
|
|
1478
1486
|
return (str.length < 2) ? '0' + str : str;
|
|
1479
1487
|
}
|
|
1480
1488
|
|
|
@@ -2042,6 +2050,7 @@ swizzle.wrap = function (fn) {
|
|
|
2042
2050
|
"use strict";
|
|
2043
2051
|
__webpack_require__.r(__webpack_exports__);
|
|
2044
2052
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
2053
|
+
/* harmony export */ __addDisposableResource: () => (/* binding */ __addDisposableResource),
|
|
2045
2054
|
/* harmony export */ __assign: () => (/* binding */ __assign),
|
|
2046
2055
|
/* harmony export */ __asyncDelegator: () => (/* binding */ __asyncDelegator),
|
|
2047
2056
|
/* harmony export */ __asyncGenerator: () => (/* binding */ __asyncGenerator),
|
|
@@ -2053,6 +2062,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2053
2062
|
/* harmony export */ __classPrivateFieldSet: () => (/* binding */ __classPrivateFieldSet),
|
|
2054
2063
|
/* harmony export */ __createBinding: () => (/* binding */ __createBinding),
|
|
2055
2064
|
/* harmony export */ __decorate: () => (/* binding */ __decorate),
|
|
2065
|
+
/* harmony export */ __disposeResources: () => (/* binding */ __disposeResources),
|
|
2056
2066
|
/* harmony export */ __esDecorate: () => (/* binding */ __esDecorate),
|
|
2057
2067
|
/* harmony export */ __exportStar: () => (/* binding */ __exportStar),
|
|
2058
2068
|
/* harmony export */ __extends: () => (/* binding */ __extends),
|
|
@@ -2065,6 +2075,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2065
2075
|
/* harmony export */ __propKey: () => (/* binding */ __propKey),
|
|
2066
2076
|
/* harmony export */ __read: () => (/* binding */ __read),
|
|
2067
2077
|
/* harmony export */ __rest: () => (/* binding */ __rest),
|
|
2078
|
+
/* harmony export */ __rewriteRelativeImportExtension: () => (/* binding */ __rewriteRelativeImportExtension),
|
|
2068
2079
|
/* harmony export */ __runInitializers: () => (/* binding */ __runInitializers),
|
|
2069
2080
|
/* harmony export */ __setFunctionName: () => (/* binding */ __setFunctionName),
|
|
2070
2081
|
/* harmony export */ __spread: () => (/* binding */ __spread),
|
|
@@ -2087,7 +2098,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
2087
2098
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
2088
2099
|
PERFORMANCE OF THIS SOFTWARE.
|
|
2089
2100
|
***************************************************************************** */
|
|
2090
|
-
/* global Reflect, Promise */
|
|
2101
|
+
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
|
|
2091
2102
|
|
|
2092
2103
|
var extendStatics = function(d, b) {
|
|
2093
2104
|
extendStatics = Object.setPrototypeOf ||
|
|
@@ -2198,8 +2209,8 @@ function __awaiter(thisArg, _arguments, P, generator) {
|
|
|
2198
2209
|
}
|
|
2199
2210
|
|
|
2200
2211
|
function __generator(thisArg, body) {
|
|
2201
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
2202
|
-
return g =
|
|
2212
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
2213
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
2203
2214
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
2204
2215
|
function step(op) {
|
|
2205
2216
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -2303,8 +2314,9 @@ function __await(v) {
|
|
|
2303
2314
|
function __asyncGenerator(thisArg, _arguments, generator) {
|
|
2304
2315
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
2305
2316
|
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
2306
|
-
return i =
|
|
2307
|
-
function
|
|
2317
|
+
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
2318
|
+
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
|
|
2319
|
+
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
|
|
2308
2320
|
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
2309
2321
|
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
2310
2322
|
function fulfill(value) { resume("next", value); }
|
|
@@ -2337,10 +2349,19 @@ var __setModuleDefault = Object.create ? (function(o, v) {
|
|
|
2337
2349
|
o["default"] = v;
|
|
2338
2350
|
};
|
|
2339
2351
|
|
|
2352
|
+
var ownKeys = function(o) {
|
|
2353
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
2354
|
+
var ar = [];
|
|
2355
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
2356
|
+
return ar;
|
|
2357
|
+
};
|
|
2358
|
+
return ownKeys(o);
|
|
2359
|
+
};
|
|
2360
|
+
|
|
2340
2361
|
function __importStar(mod) {
|
|
2341
2362
|
if (mod && mod.__esModule) return mod;
|
|
2342
2363
|
var result = {};
|
|
2343
|
-
if (mod != null) for (var k
|
|
2364
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
2344
2365
|
__setModuleDefault(result, mod);
|
|
2345
2366
|
return result;
|
|
2346
2367
|
}
|
|
@@ -2367,12 +2388,79 @@ function __classPrivateFieldIn(state, receiver) {
|
|
|
2367
2388
|
return typeof state === "function" ? receiver === state : state.has(receiver);
|
|
2368
2389
|
}
|
|
2369
2390
|
|
|
2391
|
+
function __addDisposableResource(env, value, async) {
|
|
2392
|
+
if (value !== null && value !== void 0) {
|
|
2393
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
2394
|
+
var dispose, inner;
|
|
2395
|
+
if (async) {
|
|
2396
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
2397
|
+
dispose = value[Symbol.asyncDispose];
|
|
2398
|
+
}
|
|
2399
|
+
if (dispose === void 0) {
|
|
2400
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
2401
|
+
dispose = value[Symbol.dispose];
|
|
2402
|
+
if (async) inner = dispose;
|
|
2403
|
+
}
|
|
2404
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
2405
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
2406
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
2407
|
+
}
|
|
2408
|
+
else if (async) {
|
|
2409
|
+
env.stack.push({ async: true });
|
|
2410
|
+
}
|
|
2411
|
+
return value;
|
|
2412
|
+
}
|
|
2413
|
+
|
|
2414
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
2415
|
+
var e = new Error(message);
|
|
2416
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
2417
|
+
};
|
|
2418
|
+
|
|
2419
|
+
function __disposeResources(env) {
|
|
2420
|
+
function fail(e) {
|
|
2421
|
+
env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
2422
|
+
env.hasError = true;
|
|
2423
|
+
}
|
|
2424
|
+
var r, s = 0;
|
|
2425
|
+
function next() {
|
|
2426
|
+
while (r = env.stack.pop()) {
|
|
2427
|
+
try {
|
|
2428
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
2429
|
+
if (r.dispose) {
|
|
2430
|
+
var result = r.dispose.call(r.value);
|
|
2431
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
2432
|
+
}
|
|
2433
|
+
else s |= 1;
|
|
2434
|
+
}
|
|
2435
|
+
catch (e) {
|
|
2436
|
+
fail(e);
|
|
2437
|
+
}
|
|
2438
|
+
}
|
|
2439
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
2440
|
+
if (env.hasError) throw env.error;
|
|
2441
|
+
}
|
|
2442
|
+
return next();
|
|
2443
|
+
}
|
|
2444
|
+
|
|
2445
|
+
function __rewriteRelativeImportExtension(path, preserveJsx) {
|
|
2446
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
2447
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
2448
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
2449
|
+
});
|
|
2450
|
+
}
|
|
2451
|
+
return path;
|
|
2452
|
+
}
|
|
2453
|
+
|
|
2370
2454
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
|
|
2371
2455
|
__extends,
|
|
2372
2456
|
__assign,
|
|
2373
2457
|
__rest,
|
|
2374
2458
|
__decorate,
|
|
2375
2459
|
__param,
|
|
2460
|
+
__esDecorate,
|
|
2461
|
+
__runInitializers,
|
|
2462
|
+
__propKey,
|
|
2463
|
+
__setFunctionName,
|
|
2376
2464
|
__metadata,
|
|
2377
2465
|
__awaiter,
|
|
2378
2466
|
__generator,
|
|
@@ -2393,6 +2481,9 @@ function __classPrivateFieldIn(state, receiver) {
|
|
|
2393
2481
|
__classPrivateFieldGet,
|
|
2394
2482
|
__classPrivateFieldSet,
|
|
2395
2483
|
__classPrivateFieldIn,
|
|
2484
|
+
__addDisposableResource,
|
|
2485
|
+
__disposeResources,
|
|
2486
|
+
__rewriteRelativeImportExtension,
|
|
2396
2487
|
});
|
|
2397
2488
|
|
|
2398
2489
|
|
|
@@ -8544,9 +8635,9 @@ var DefaultSanitizingOption = {
|
|
|
8544
8635
|
/**
|
|
8545
8636
|
* @internal
|
|
8546
8637
|
*/
|
|
8547
|
-
function createDomToModelContextForSanitizing(document, defaultFormat, defaultOption, additionalSanitizingOption, domHelper) {
|
|
8638
|
+
function createDomToModelContextForSanitizing(document, defaultFormat, defaultOption, additionalSanitizingOption, domHelper, experimentalFeatures) {
|
|
8548
8639
|
var sanitizingOption = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, DefaultSanitizingOption), additionalSanitizingOption);
|
|
8549
|
-
return (0, roosterjs_content_model_dom_1.createDomToModelContext)((0, tslib_1.__assign)((0, tslib_1.__assign)({ defaultFormat: defaultFormat }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(document)), { experimentalFeatures: [], editorViewWidth: domHelper === null || domHelper === void 0 ? void 0 : domHelper.getClientWidth() }), defaultOption, {
|
|
8640
|
+
return (0, roosterjs_content_model_dom_1.createDomToModelContext)((0, tslib_1.__assign)((0, tslib_1.__assign)({ defaultFormat: defaultFormat }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(document)), { experimentalFeatures: experimentalFeatures !== null && experimentalFeatures !== void 0 ? experimentalFeatures : [], editorViewWidth: domHelper === null || domHelper === void 0 ? void 0 : domHelper.getClientWidth() }), defaultOption, {
|
|
8550
8641
|
processorOverride: {
|
|
8551
8642
|
'#text': pasteTextProcessor_1.pasteTextProcessor,
|
|
8552
8643
|
entity: (0, pasteEntityProcessor_1.createPasteEntityProcessor)(sanitizingOption),
|
|
@@ -9233,95 +9324,6 @@ function removeCommentsFromHtml(html, marker, endId, startId) {
|
|
|
9233
9324
|
}
|
|
9234
9325
|
|
|
9235
9326
|
|
|
9236
|
-
/***/ },
|
|
9237
|
-
|
|
9238
|
-
/***/ "./packages/roosterjs-content-model-core/lib/command/paste/createPasteFragment.ts"
|
|
9239
|
-
/*!****************************************************************************************!*\
|
|
9240
|
-
!*** ./packages/roosterjs-content-model-core/lib/command/paste/createPasteFragment.ts ***!
|
|
9241
|
-
\****************************************************************************************/
|
|
9242
|
-
(__unused_webpack_module, exports, __webpack_require__) {
|
|
9243
|
-
|
|
9244
|
-
"use strict";
|
|
9245
|
-
|
|
9246
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
9247
|
-
exports.createPasteFragment = void 0;
|
|
9248
|
-
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
9249
|
-
var NBSP_HTML = '\u00A0';
|
|
9250
|
-
var ENSP_HTML = '\u2002';
|
|
9251
|
-
var TAB_SPACES = 6;
|
|
9252
|
-
/**
|
|
9253
|
-
* @internal
|
|
9254
|
-
*/
|
|
9255
|
-
function createPasteFragment(document, clipboardData, pasteType, root) {
|
|
9256
|
-
if (!clipboardData.text && pasteType === 'asPlainText' && root) {
|
|
9257
|
-
clipboardData.text = root.textContent || clipboardData.text;
|
|
9258
|
-
}
|
|
9259
|
-
var imageDataUri = clipboardData.imageDataUri, text = clipboardData.text;
|
|
9260
|
-
var fragment = document.createDocumentFragment();
|
|
9261
|
-
if ((pasteType == 'asImage' && imageDataUri) ||
|
|
9262
|
-
(pasteType != 'asPlainText' && !text && imageDataUri)) {
|
|
9263
|
-
// Paste image
|
|
9264
|
-
var img = document.createElement('img');
|
|
9265
|
-
img.style.maxWidth = '100%';
|
|
9266
|
-
img.src = imageDataUri;
|
|
9267
|
-
fragment.appendChild(img);
|
|
9268
|
-
}
|
|
9269
|
-
else if (pasteType != 'asPlainText' && root) {
|
|
9270
|
-
(0, roosterjs_content_model_dom_1.moveChildNodes)(fragment, root);
|
|
9271
|
-
}
|
|
9272
|
-
else if (text) {
|
|
9273
|
-
text.split('\n').forEach(function (line, index, lines) {
|
|
9274
|
-
line = line
|
|
9275
|
-
.replace(/^ /g, NBSP_HTML)
|
|
9276
|
-
.replace(/ $/g, NBSP_HTML)
|
|
9277
|
-
.replace(/\r/g, '')
|
|
9278
|
-
.replace(/ {2}/g, ' ' + NBSP_HTML);
|
|
9279
|
-
if (line.includes('\t')) {
|
|
9280
|
-
line = transformTabCharacters(line);
|
|
9281
|
-
}
|
|
9282
|
-
var textNode = document.createTextNode(line);
|
|
9283
|
-
// There are 3 scenarios:
|
|
9284
|
-
// 1. Single line: Paste as it is
|
|
9285
|
-
// 2. Two lines: Add <br> between the lines
|
|
9286
|
-
// 3. 3 or More lines, For first and last line, paste as it is. For middle lines, wrap with DIV, and add BR if it is empty line
|
|
9287
|
-
if (lines.length == 2 && index == 0) {
|
|
9288
|
-
// 1 of 2 lines scenario, add BR
|
|
9289
|
-
fragment.appendChild(textNode);
|
|
9290
|
-
fragment.appendChild(document.createElement('br'));
|
|
9291
|
-
}
|
|
9292
|
-
else if (index > 0 && index < lines.length - 1) {
|
|
9293
|
-
// Middle line of >=3 lines scenario, wrap with DIV
|
|
9294
|
-
fragment.appendChild((0, roosterjs_content_model_dom_1.wrap)(document, line == '' ? document.createElement('br') : textNode, 'div'));
|
|
9295
|
-
}
|
|
9296
|
-
else {
|
|
9297
|
-
// All others, paste as it is
|
|
9298
|
-
fragment.appendChild(textNode);
|
|
9299
|
-
}
|
|
9300
|
-
});
|
|
9301
|
-
}
|
|
9302
|
-
return fragment;
|
|
9303
|
-
}
|
|
9304
|
-
exports.createPasteFragment = createPasteFragment;
|
|
9305
|
-
/**
|
|
9306
|
-
* Transform \t characters into EN SPACE characters
|
|
9307
|
-
* @param input string NOT containing \n characters
|
|
9308
|
-
* @example t("\thello", 2) => "    hello"
|
|
9309
|
-
*/
|
|
9310
|
-
function transformTabCharacters(input, initialOffset) {
|
|
9311
|
-
if (initialOffset === void 0) { initialOffset = 0; }
|
|
9312
|
-
var line = input;
|
|
9313
|
-
var tIndex;
|
|
9314
|
-
while ((tIndex = line.indexOf('\t')) != -1) {
|
|
9315
|
-
var lineBefore = line.slice(0, tIndex);
|
|
9316
|
-
var lineAfter = line.slice(tIndex + 1);
|
|
9317
|
-
var tabCount = TAB_SPACES - ((lineBefore.length + initialOffset) % TAB_SPACES);
|
|
9318
|
-
var tabStr = Array(tabCount).fill(ENSP_HTML).join('');
|
|
9319
|
-
line = lineBefore + tabStr + lineAfter;
|
|
9320
|
-
}
|
|
9321
|
-
return line;
|
|
9322
|
-
}
|
|
9323
|
-
|
|
9324
|
-
|
|
9325
9327
|
/***/ },
|
|
9326
9328
|
|
|
9327
9329
|
/***/ "./packages/roosterjs-content-model-core/lib/command/paste/generatePasteOptionFromPlugins.ts"
|
|
@@ -9388,13 +9390,15 @@ var BlackColor = 'rgb(0,0,0)';
|
|
|
9388
9390
|
*/
|
|
9389
9391
|
function mergePasteContent(editor, eventResult, isFirstPaste) {
|
|
9390
9392
|
var fragment = eventResult.fragment, domToModelOption = eventResult.domToModelOption, customizedMerge = eventResult.customizedMerge, pasteType = eventResult.pasteType, clipboardData = eventResult.clipboardData, containsBlockElements = eventResult.containsBlockElements;
|
|
9393
|
+
var isImageOnly = isImageOnlyFragment(fragment);
|
|
9394
|
+
var shouldScrollCaretIntoView = !isImageOnly;
|
|
9391
9395
|
editor.formatContentModel(function (model, context) {
|
|
9392
9396
|
if (!isFirstPaste && clipboardData.modelBeforePaste) {
|
|
9393
9397
|
var clonedModel = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(clipboardData.modelBeforePaste);
|
|
9394
9398
|
model.blocks = clonedModel.blocks;
|
|
9395
9399
|
}
|
|
9396
|
-
var domToModelContext = (0, createDomToModelContextForSanitizing_1.createDomToModelContextForSanitizing)(editor.getDocument(), undefined /*defaultFormat*/, editor.getEnvironment().domToModelSettings.customized, domToModelOption, editor.getDOMHelper());
|
|
9397
|
-
domToModelContext.segmentFormat = getSegmentFormatForPaste(model, pasteType);
|
|
9400
|
+
var domToModelContext = (0, createDomToModelContextForSanitizing_1.createDomToModelContextForSanitizing)(editor.getDocument(), undefined /*defaultFormat*/, editor.getEnvironment().domToModelSettings.customized, domToModelOption, editor.getDOMHelper(), editor.getExperimentalFeatures());
|
|
9401
|
+
domToModelContext.segmentFormat = getSegmentFormatForPaste(model, pasteType, isImageOnly);
|
|
9398
9402
|
var pasteModel = (0, roosterjs_content_model_dom_1.domToContentModel)(fragment, domToModelContext);
|
|
9399
9403
|
var mergeOption = {
|
|
9400
9404
|
mergeFormat: pasteType == 'mergeFormat' ? 'keepSourceEmphasisFormat' : 'none',
|
|
@@ -9413,19 +9417,21 @@ function mergePasteContent(editor, eventResult, isFirstPaste) {
|
|
|
9413
9417
|
}, {
|
|
9414
9418
|
changeSource: roosterjs_content_model_dom_1.ChangeSource.Paste,
|
|
9415
9419
|
getChangeData: function () { return clipboardData; },
|
|
9416
|
-
scrollCaretIntoView:
|
|
9420
|
+
scrollCaretIntoView: shouldScrollCaretIntoView,
|
|
9417
9421
|
apiName: 'paste',
|
|
9418
9422
|
});
|
|
9419
9423
|
}
|
|
9420
9424
|
exports.mergePasteContent = mergePasteContent;
|
|
9421
|
-
function getSegmentFormatForPaste(model, pasteType) {
|
|
9425
|
+
function getSegmentFormatForPaste(model, pasteType, isImageOnly) {
|
|
9422
9426
|
var selectedSegment = (0, roosterjs_content_model_dom_1.getSelectedSegments)(model, true /*includeFormatHolder*/)[0];
|
|
9423
9427
|
if (selectedSegment) {
|
|
9424
9428
|
var result = (0, roosterjs_content_model_dom_1.getSegmentTextFormat)(selectedSegment);
|
|
9425
|
-
if (pasteType == 'normal') {
|
|
9429
|
+
if (pasteType == 'normal' && !isImageOnly) {
|
|
9426
9430
|
// When using normal paste (Keep source formatting) set the default text color to black when creating the
|
|
9427
9431
|
// Model from the clipboard content, so the elements that do not contain any text color in their style
|
|
9428
9432
|
// Are set to black. Otherwise, These segments would get the selected segments format or the default text set in the content.
|
|
9433
|
+
// Skip this when pasting an image only, since there is no text to apply the default color to, and forcing
|
|
9434
|
+
// black here would incorrectly become the pending format used for text typed right after the pasted image.
|
|
9429
9435
|
result.textColor = BlackColor;
|
|
9430
9436
|
}
|
|
9431
9437
|
return result;
|
|
@@ -9454,6 +9460,13 @@ function getLastSegmentFormat(pasteModel) {
|
|
|
9454
9460
|
}
|
|
9455
9461
|
return {};
|
|
9456
9462
|
}
|
|
9463
|
+
function isImageOnlyFragment(pasteFragment) {
|
|
9464
|
+
var _a;
|
|
9465
|
+
var images = pasteFragment.querySelectorAll('img');
|
|
9466
|
+
return (images.length === 1 &&
|
|
9467
|
+
pasteFragment.childNodes.length === 1 &&
|
|
9468
|
+
((_a = pasteFragment.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === '');
|
|
9469
|
+
}
|
|
9457
9470
|
|
|
9458
9471
|
|
|
9459
9472
|
/***/ },
|
|
@@ -9471,7 +9484,6 @@ exports.paste = void 0;
|
|
|
9471
9484
|
var cleanHtmlComments_1 = __webpack_require__(/*! ./cleanHtmlComments */ "./packages/roosterjs-content-model-core/lib/command/paste/cleanHtmlComments.ts");
|
|
9472
9485
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
9473
9486
|
var convertInlineCss_1 = __webpack_require__(/*! ../createModelFromHtml/convertInlineCss */ "./packages/roosterjs-content-model-core/lib/command/createModelFromHtml/convertInlineCss.ts");
|
|
9474
|
-
var createPasteFragment_1 = __webpack_require__(/*! ./createPasteFragment */ "./packages/roosterjs-content-model-core/lib/command/paste/createPasteFragment.ts");
|
|
9475
9487
|
var generatePasteOptionFromPlugins_1 = __webpack_require__(/*! ./generatePasteOptionFromPlugins */ "./packages/roosterjs-content-model-core/lib/command/paste/generatePasteOptionFromPlugins.ts");
|
|
9476
9488
|
var mergePasteContent_1 = __webpack_require__(/*! ./mergePasteContent */ "./packages/roosterjs-content-model-core/lib/command/paste/mergePasteContent.ts");
|
|
9477
9489
|
var retrieveHtmlInfo_1 = __webpack_require__(/*! ./retrieveHtmlInfo */ "./packages/roosterjs-content-model-core/lib/command/paste/retrieveHtmlInfo.ts");
|
|
@@ -9499,13 +9511,13 @@ function paste(editor, clipboardData, pasteTypeOrGetter) {
|
|
|
9499
9511
|
clipboardData.rawHtml = (0, cleanHtmlComments_1.cleanHtmlComments)(clipboardData.rawHtml);
|
|
9500
9512
|
}
|
|
9501
9513
|
var doc = createDOMFromHtml(clipboardData.rawHtml, domCreator);
|
|
9502
|
-
var pasteType = typeof pasteTypeOrGetter == 'function'
|
|
9503
|
-
? pasteTypeOrGetter(doc, clipboardData)
|
|
9504
|
-
: pasteTypeOrGetter;
|
|
9505
9514
|
// 2. Handle HTML from clipboard
|
|
9506
9515
|
var htmlFromClipboard = (0, retrieveHtmlInfo_1.retrieveHtmlInfo)(doc, clipboardData);
|
|
9516
|
+
var pasteType = typeof pasteTypeOrGetter == 'function'
|
|
9517
|
+
? pasteTypeOrGetter(doc, clipboardData, editor.getEnvironment(), htmlFromClipboard.metadata)
|
|
9518
|
+
: pasteTypeOrGetter;
|
|
9507
9519
|
// 3. Create target fragment
|
|
9508
|
-
var sourceFragment = (0,
|
|
9520
|
+
var sourceFragment = (0, roosterjs_content_model_dom_1.createPasteFragment)(editor.getDocument(), clipboardData, pasteType, (_a = (clipboardData.rawHtml == clipboardData.html
|
|
9509
9521
|
? doc
|
|
9510
9522
|
: createDOMFromHtml(clipboardData.html, domCreator))) === null || _a === void 0 ? void 0 : _a.body);
|
|
9511
9523
|
// 4. Trigger BeforePaste event to allow plugins modify the fragment
|
|
@@ -10288,7 +10300,7 @@ var formatContentModel = function (core, formatter, options, domToModelOptions)
|
|
|
10288
10300
|
try {
|
|
10289
10301
|
handleImages(core, context);
|
|
10290
10302
|
selection =
|
|
10291
|
-
(_a = core.api.setContentModel(core, model, hasFocus ? undefined : { ignoreSelection: true }, // If editor did not have focus before format, do not set focus after format
|
|
10303
|
+
(_a = core.api.setContentModel(core, model, hasFocus && !(options === null || options === void 0 ? void 0 : options.skipDOMSelection) ? undefined : { ignoreSelection: true }, // If editor did not have focus before format, do not set focus after format
|
|
10292
10304
|
onNodeCreated)) !== null && _a !== void 0 ? _a : undefined;
|
|
10293
10305
|
handlePendingFormat(core, context, selection);
|
|
10294
10306
|
if (scroll && ((selection === null || selection === void 0 ? void 0 : selection.type) == 'range' || (selection === null || selection === void 0 ? void 0 : selection.type) == 'image')) {
|
|
@@ -11147,10 +11159,13 @@ function setRangeSelection(core, element, collapse) {
|
|
|
11147
11159
|
"use strict";
|
|
11148
11160
|
|
|
11149
11161
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
11150
|
-
exports.setTableCellsStyle = exports.removeTableCellsStyle = void 0;
|
|
11162
|
+
exports.setTableCellsStyle = exports.removeTableCellsStyle = exports.DOM_SELECTION_CSS_KEY = void 0;
|
|
11151
11163
|
var ensureUniqueId_1 = __webpack_require__(/*! ../setEditorStyle/ensureUniqueId */ "./packages/roosterjs-content-model-core/lib/coreApi/setEditorStyle/ensureUniqueId.ts");
|
|
11152
11164
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
11153
|
-
|
|
11165
|
+
/**
|
|
11166
|
+
* @internal
|
|
11167
|
+
*/
|
|
11168
|
+
exports.DOM_SELECTION_CSS_KEY = '_DOMSelection';
|
|
11154
11169
|
var TABLE_ID = 'table';
|
|
11155
11170
|
/**
|
|
11156
11171
|
* @internal
|
|
@@ -11158,7 +11173,7 @@ var TABLE_ID = 'table';
|
|
|
11158
11173
|
* @param core The EditorCore object
|
|
11159
11174
|
*/
|
|
11160
11175
|
function removeTableCellsStyle(core) {
|
|
11161
|
-
core.api.setEditorStyle(core, DOM_SELECTION_CSS_KEY, '');
|
|
11176
|
+
core.api.setEditorStyle(core, exports.DOM_SELECTION_CSS_KEY, '');
|
|
11162
11177
|
}
|
|
11163
11178
|
exports.removeTableCellsStyle = removeTableCellsStyle;
|
|
11164
11179
|
/**
|
|
@@ -11183,7 +11198,7 @@ function setTableCellsStyle(core, table, parsedTable, firstCell, lastCell) {
|
|
|
11183
11198
|
lastCell.col == ((_b = (_a = parsedTable[lastCell.row]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - 1
|
|
11184
11199
|
? [tableSelector, tableSelector + " *"]
|
|
11185
11200
|
: buildTableSelectors(parsedTable, tableSelector, table, firstCell, lastCell);
|
|
11186
|
-
core.api.setEditorStyle(core, DOM_SELECTION_CSS_KEY, "background-color:" + tableSelectionColor + "!important;", tableSelectors);
|
|
11201
|
+
core.api.setEditorStyle(core, exports.DOM_SELECTION_CSS_KEY, "background-color:" + tableSelectionColor + "!important;", tableSelectors);
|
|
11187
11202
|
}
|
|
11188
11203
|
exports.setTableCellsStyle = setTableCellsStyle;
|
|
11189
11204
|
/**
|
|
@@ -11242,16 +11257,19 @@ function buildTableSelectors(parsedTable, tableSelector, table, firstCell, lastC
|
|
|
11242
11257
|
"use strict";
|
|
11243
11258
|
|
|
11244
11259
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
11245
|
-
exports.toggleCaret = void 0;
|
|
11260
|
+
exports.toggleCaret = exports.HIDE_CURSOR_CSS_KEY = void 0;
|
|
11246
11261
|
var CARET_CSS_RULE = 'caret-color: transparent';
|
|
11247
|
-
|
|
11262
|
+
/**
|
|
11263
|
+
* @internal
|
|
11264
|
+
*/
|
|
11265
|
+
exports.HIDE_CURSOR_CSS_KEY = '_DOMSelectionHideCursor';
|
|
11248
11266
|
/**
|
|
11249
11267
|
* @internal Show/Hide caret in editor
|
|
11250
11268
|
* @param core The editor core
|
|
11251
11269
|
* @param isHiding True to hide caret, false to show caret
|
|
11252
11270
|
*/
|
|
11253
11271
|
function toggleCaret(core, isHiding) {
|
|
11254
|
-
core.api.setEditorStyle(core, HIDE_CURSOR_CSS_KEY, isHiding ? CARET_CSS_RULE : null);
|
|
11272
|
+
core.api.setEditorStyle(core, exports.HIDE_CURSOR_CSS_KEY, isHiding ? CARET_CSS_RULE : null);
|
|
11255
11273
|
}
|
|
11256
11274
|
exports.toggleCaret = toggleCaret;
|
|
11257
11275
|
|
|
@@ -14483,6 +14501,8 @@ var findTableCellElement_1 = __webpack_require__(/*! ../../coreApi/setDOMSelecti
|
|
|
14483
14501
|
var isSingleImageInSelection_1 = __webpack_require__(/*! ./isSingleImageInSelection */ "./packages/roosterjs-content-model-core/lib/corePlugin/selection/isSingleImageInSelection.ts");
|
|
14484
14502
|
var normalizePos_1 = __webpack_require__(/*! ./normalizePos */ "./packages/roosterjs-content-model-core/lib/corePlugin/selection/normalizePos.ts");
|
|
14485
14503
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
14504
|
+
var setTableCellsStyle_1 = __webpack_require__(/*! ../../coreApi/setDOMSelection/setTableCellsStyle */ "./packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/setTableCellsStyle.ts");
|
|
14505
|
+
var toggleCaret_1 = __webpack_require__(/*! ../../coreApi/setDOMSelection/toggleCaret */ "./packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/toggleCaret.ts");
|
|
14486
14506
|
var MouseLeftButton = 0;
|
|
14487
14507
|
var MouseRightButton = 2;
|
|
14488
14508
|
var Up = 'ArrowUp';
|
|
@@ -14490,6 +14510,7 @@ var Down = 'ArrowDown';
|
|
|
14490
14510
|
var Left = 'ArrowLeft';
|
|
14491
14511
|
var Right = 'ArrowRight';
|
|
14492
14512
|
var Tab = 'Tab';
|
|
14513
|
+
var F10 = 'F10';
|
|
14493
14514
|
/**
|
|
14494
14515
|
* @internal
|
|
14495
14516
|
*/
|
|
@@ -14506,8 +14527,8 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14506
14527
|
this.disposer = null;
|
|
14507
14528
|
this.logicalRootDisposer = null;
|
|
14508
14529
|
this.isSafari = false;
|
|
14509
|
-
this.isMac = false;
|
|
14510
14530
|
this.scrollTopCache = 0;
|
|
14531
|
+
this.isInsideSelection = false;
|
|
14511
14532
|
this.onMouseMove = function (event) {
|
|
14512
14533
|
var _a, _b, _c;
|
|
14513
14534
|
if (_this.editor && _this.state.tableSelection) {
|
|
@@ -14558,7 +14579,7 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14558
14579
|
// MacOS will not create a mouseUp event if contextMenu event is not prevent defaulted.
|
|
14559
14580
|
// Make sure we capture image target even if image is wrapped
|
|
14560
14581
|
this.getContainedTargetImage = function (event, previousSelection) {
|
|
14561
|
-
if (!
|
|
14582
|
+
if (!previousSelection || previousSelection.type !== 'image') {
|
|
14562
14583
|
return null;
|
|
14563
14584
|
}
|
|
14564
14585
|
var target = event.target;
|
|
@@ -14598,11 +14619,11 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14598
14619
|
if (((_a = _this.editor) === null || _a === void 0 ? void 0 : _a.hasFocus()) && !_this.editor.isInShadowEdit()) {
|
|
14599
14620
|
var newSelection = _this.editor.getDOMSelection();
|
|
14600
14621
|
var domHelper = _this.editor.getDOMHelper();
|
|
14601
|
-
//If
|
|
14622
|
+
// If an image selection changed to a wider range due to a keyboard event, we should update the selection
|
|
14602
14623
|
var range = domHelper.getSelectionRange();
|
|
14603
14624
|
if (range) {
|
|
14604
14625
|
var image = (0, isSingleImageInSelection_1.isSingleImageInSelection)(range);
|
|
14605
|
-
if ((newSelection === null || newSelection === void 0 ? void 0 : newSelection.type) == 'image' && !image) {
|
|
14626
|
+
if ((newSelection === null || newSelection === void 0 ? void 0 : newSelection.type) == 'image' && !image && !range.collapsed) {
|
|
14606
14627
|
var sel = (_b = _this.editor.getDocument().defaultView) === null || _b === void 0 ? void 0 : _b.getSelection();
|
|
14607
14628
|
var isReverted = sel
|
|
14608
14629
|
? sel.focusNode != range.endContainer || sel.focusOffset != range.endOffset
|
|
@@ -14661,7 +14682,6 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14661
14682
|
var env = this.editor.getEnvironment();
|
|
14662
14683
|
var document = this.editor.getDocument();
|
|
14663
14684
|
this.isSafari = !!env.isSafari;
|
|
14664
|
-
this.isMac = !!env.isMac;
|
|
14665
14685
|
document.addEventListener('selectionchange', this.onSelectionChange);
|
|
14666
14686
|
if (this.isSafari) {
|
|
14667
14687
|
this.disposer = this.editor.attachDomEvent({
|
|
@@ -14708,6 +14728,10 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14708
14728
|
this.onKeyDown(this.editor, event.rawEvent);
|
|
14709
14729
|
break;
|
|
14710
14730
|
case 'contentChanged':
|
|
14731
|
+
if (event.source == roosterjs_content_model_dom_1.ChangeSource.Drop && this.isInsideSelection) {
|
|
14732
|
+
this.setDOMSelection(null /* DOMSelection */, null /* tableSelection */);
|
|
14733
|
+
this.isInsideSelection = false;
|
|
14734
|
+
}
|
|
14711
14735
|
this.state.tableSelection = null;
|
|
14712
14736
|
break;
|
|
14713
14737
|
case 'scroll':
|
|
@@ -14755,14 +14779,22 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14755
14779
|
return;
|
|
14756
14780
|
}
|
|
14757
14781
|
// Table selection
|
|
14782
|
+
var target = rawEvent.target;
|
|
14783
|
+
var tableSelection = target
|
|
14784
|
+
? this.parseTableSelection(target, target, editor.getDOMHelper())
|
|
14785
|
+
: null;
|
|
14786
|
+
if ((selection === null || selection === void 0 ? void 0 : selection.type) == 'table' &&
|
|
14787
|
+
tableSelection &&
|
|
14788
|
+
this.isInsideTableSelection(selection, tableSelection) &&
|
|
14789
|
+
rawEvent.detail == 1) {
|
|
14790
|
+
this.isInsideSelection = true;
|
|
14791
|
+
this.setTableDragSelection(editor, rawEvent);
|
|
14792
|
+
return;
|
|
14793
|
+
}
|
|
14758
14794
|
if ((selection === null || selection === void 0 ? void 0 : selection.type) == 'table' && rawEvent.button == MouseLeftButton) {
|
|
14759
14795
|
this.setDOMSelection(null /*domSelection*/, null /*tableSelection*/);
|
|
14760
14796
|
}
|
|
14761
|
-
|
|
14762
|
-
var target = rawEvent.target;
|
|
14763
|
-
if (target &&
|
|
14764
|
-
rawEvent.button == MouseLeftButton &&
|
|
14765
|
-
(tableSelection = this.parseTableSelection(target, target, editor.getDOMHelper()))) {
|
|
14797
|
+
if (target && rawEvent.button == MouseLeftButton && tableSelection) {
|
|
14766
14798
|
this.state.tableSelection = tableSelection;
|
|
14767
14799
|
if (rawEvent.detail >= 3) {
|
|
14768
14800
|
var lastCo = (0, findCoordinate_1.findCoordinate)(tableSelection.parsedTable, rawEvent.target, editor.getDOMHelper());
|
|
@@ -14782,6 +14814,10 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14782
14814
|
}
|
|
14783
14815
|
};
|
|
14784
14816
|
SelectionPlugin.prototype.onMouseUp = function () {
|
|
14817
|
+
if (this.isInsideSelection) {
|
|
14818
|
+
this.setDOMSelection(null /*domSelection*/, null /*tableSelection*/);
|
|
14819
|
+
this.isInsideSelection = false;
|
|
14820
|
+
}
|
|
14785
14821
|
this.detachMouseEvent();
|
|
14786
14822
|
};
|
|
14787
14823
|
SelectionPlugin.prototype.onKeyDown = function (editor, rawEvent) {
|
|
@@ -14814,6 +14850,7 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14814
14850
|
}
|
|
14815
14851
|
break;
|
|
14816
14852
|
case 'range':
|
|
14853
|
+
var image = void 0;
|
|
14817
14854
|
if (key == Up || key == Down || key == Left || key == Right || key == Tab) {
|
|
14818
14855
|
var start = selection.range.startContainer;
|
|
14819
14856
|
this.state.tableSelection = this.parseTableSelection(start, start, editor.getDOMHelper());
|
|
@@ -14829,6 +14866,14 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14829
14866
|
}
|
|
14830
14867
|
}
|
|
14831
14868
|
}
|
|
14869
|
+
else if (key == F10 &&
|
|
14870
|
+
rawEvent.shiftKey &&
|
|
14871
|
+
(image = (0, isSingleImageInSelection_1.isSingleImageInSelection)(selection.range))) {
|
|
14872
|
+
this.setDOMSelection({
|
|
14873
|
+
type: 'image',
|
|
14874
|
+
image: image,
|
|
14875
|
+
}, null /* tableSelection */);
|
|
14876
|
+
}
|
|
14832
14877
|
break;
|
|
14833
14878
|
case 'table':
|
|
14834
14879
|
// After a content change event is handled tableSelection state is reset to null
|
|
@@ -14967,6 +15012,30 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14967
15012
|
}
|
|
14968
15013
|
}
|
|
14969
15014
|
};
|
|
15015
|
+
SelectionPlugin.prototype.isInsideTableSelection = function (prevSelection, tableSelection) {
|
|
15016
|
+
var selectedCell = tableSelection.firstCo;
|
|
15017
|
+
return (selectedCell.row >= prevSelection.firstRow &&
|
|
15018
|
+
selectedCell.row <= prevSelection.lastRow &&
|
|
15019
|
+
selectedCell.col >= prevSelection.firstColumn &&
|
|
15020
|
+
selectedCell.col <= prevSelection.lastColumn);
|
|
15021
|
+
};
|
|
15022
|
+
SelectionPlugin.prototype.setTableDragSelection = function (editor, rawEvent) {
|
|
15023
|
+
var doc = editor.getDocument();
|
|
15024
|
+
var cell = editor
|
|
15025
|
+
.getDOMHelper()
|
|
15026
|
+
.findClosestElementAncestor(rawEvent.target, 'td,th');
|
|
15027
|
+
if (cell) {
|
|
15028
|
+
// Hide the table cell selection styles (grey cell background applied by
|
|
15029
|
+
// setDOMSelection) and the native selection highlight so that only the
|
|
15030
|
+
// dragged content is visible while dragging. Also restore the caret which
|
|
15031
|
+
// is hidden while a table selection is active.
|
|
15032
|
+
editor.setEditorStyle(setTableCellsStyle_1.DOM_SELECTION_CSS_KEY, null /*cssRule*/);
|
|
15033
|
+
editor.setEditorStyle(toggleCaret_1.HIDE_CURSOR_CSS_KEY, null /*cssRule*/);
|
|
15034
|
+
var range = doc.createRange();
|
|
15035
|
+
range.selectNodeContents(cell);
|
|
15036
|
+
editor.getDOMHelper().setSelectionRange(range);
|
|
15037
|
+
}
|
|
15038
|
+
};
|
|
14970
15039
|
SelectionPlugin.prototype.getTextOffset = function (editor, range, td, isKeyUp) {
|
|
14971
15040
|
var doc = editor.getDocument();
|
|
14972
15041
|
var cursorRect = range
|
|
@@ -15972,6 +16041,13 @@ var Editor = /** @class */ (function () {
|
|
|
15972
16041
|
Editor.prototype.isExperimentalFeatureEnabled = function (featureName) {
|
|
15973
16042
|
return this.getCore().experimentalFeatures.indexOf(featureName) >= 0;
|
|
15974
16043
|
};
|
|
16044
|
+
/**
|
|
16045
|
+
* Get all experimental features enabled in this editor
|
|
16046
|
+
* @returns An array of experimental feature names
|
|
16047
|
+
* */
|
|
16048
|
+
Editor.prototype.getExperimentalFeatures = function () {
|
|
16049
|
+
return this.getCore().experimentalFeatures;
|
|
16050
|
+
};
|
|
15975
16051
|
/**
|
|
15976
16052
|
* @returns the current EditorCore object
|
|
15977
16053
|
* @throws a standard Error if there's no core object
|
|
@@ -17203,6 +17279,10 @@ exports.ChangeSource = {
|
|
|
17203
17279
|
* Content changed by paste
|
|
17204
17280
|
*/
|
|
17205
17281
|
Paste: 'Paste',
|
|
17282
|
+
/**
|
|
17283
|
+
* Content changed by auto markdown conversion
|
|
17284
|
+
*/
|
|
17285
|
+
AutoMarkdownConversion: 'AutoMarkdownConversion',
|
|
17206
17286
|
/**
|
|
17207
17287
|
* Content changed by setContent API
|
|
17208
17288
|
*/
|
|
@@ -17244,6 +17324,10 @@ exports.ChangeSource = {
|
|
|
17244
17324
|
* Content changed by replace
|
|
17245
17325
|
*/
|
|
17246
17326
|
Replace: 'Replace',
|
|
17327
|
+
/**
|
|
17328
|
+
* Content changed by dragging content out the editor
|
|
17329
|
+
*/
|
|
17330
|
+
DragOutOfEditor: 'DragOutOfEditor',
|
|
17247
17331
|
};
|
|
17248
17332
|
|
|
17249
17333
|
|
|
@@ -17732,6 +17816,7 @@ exports.defaultProcessorMap = {
|
|
|
17732
17816
|
h5: headingProcessor_1.headingProcessor,
|
|
17733
17817
|
h6: headingProcessor_1.headingProcessor,
|
|
17734
17818
|
hr: hrProcessor_1.hrProcessor,
|
|
17819
|
+
label: knownElementProcessor_1.knownElementProcessor,
|
|
17735
17820
|
li: listItemProcessor_1.listItemProcessor,
|
|
17736
17821
|
ol: listProcessor_1.listProcessor,
|
|
17737
17822
|
p: pProcessor_1.pProcessor,
|
|
@@ -19755,6 +19840,53 @@ function cacheGetEventData(event, key, getter) {
|
|
|
19755
19840
|
exports.cacheGetEventData = cacheGetEventData;
|
|
19756
19841
|
|
|
19757
19842
|
|
|
19843
|
+
/***/ },
|
|
19844
|
+
|
|
19845
|
+
/***/ "./packages/roosterjs-content-model-dom/lib/domUtils/event/createPasteFragment.ts"
|
|
19846
|
+
/*!****************************************************************************************!*\
|
|
19847
|
+
!*** ./packages/roosterjs-content-model-dom/lib/domUtils/event/createPasteFragment.ts ***!
|
|
19848
|
+
\****************************************************************************************/
|
|
19849
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
19850
|
+
|
|
19851
|
+
"use strict";
|
|
19852
|
+
|
|
19853
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
19854
|
+
exports.createPasteFragment = void 0;
|
|
19855
|
+
var moveChildNodes_1 = __webpack_require__(/*! ../moveChildNodes */ "./packages/roosterjs-content-model-dom/lib/domUtils/moveChildNodes.ts");
|
|
19856
|
+
var textToFragment_1 = __webpack_require__(/*! ../textToFragment */ "./packages/roosterjs-content-model-dom/lib/domUtils/textToFragment.ts");
|
|
19857
|
+
/**
|
|
19858
|
+
* Create a document fragment from clipboard content using the specified paste type
|
|
19859
|
+
* @param document The document used to create the fragment
|
|
19860
|
+
* @param clipboardData The clipboard data to convert
|
|
19861
|
+
* @param pasteType The paste type that determines which clipboard content to use
|
|
19862
|
+
* @param root The optional root element containing the parsed HTML content
|
|
19863
|
+
* @returns A document fragment containing the content to paste
|
|
19864
|
+
*/
|
|
19865
|
+
function createPasteFragment(document, clipboardData, pasteType, root) {
|
|
19866
|
+
if (!clipboardData.text && pasteType === 'asPlainText' && root) {
|
|
19867
|
+
clipboardData.text = root.textContent || clipboardData.text;
|
|
19868
|
+
}
|
|
19869
|
+
var imageDataUri = clipboardData.imageDataUri, text = clipboardData.text;
|
|
19870
|
+
var fragment = document.createDocumentFragment();
|
|
19871
|
+
if ((pasteType == 'asImage' && imageDataUri) ||
|
|
19872
|
+
(pasteType != 'asPlainText' && !text && imageDataUri)) {
|
|
19873
|
+
// Paste image
|
|
19874
|
+
var img = document.createElement('img');
|
|
19875
|
+
img.style.maxWidth = '100%';
|
|
19876
|
+
img.src = imageDataUri;
|
|
19877
|
+
fragment.appendChild(img);
|
|
19878
|
+
}
|
|
19879
|
+
else if (pasteType != 'asPlainText' && root) {
|
|
19880
|
+
(0, moveChildNodes_1.moveChildNodes)(fragment, root);
|
|
19881
|
+
}
|
|
19882
|
+
else if (text) {
|
|
19883
|
+
return (0, textToFragment_1.textToFragment)(text, document);
|
|
19884
|
+
}
|
|
19885
|
+
return fragment;
|
|
19886
|
+
}
|
|
19887
|
+
exports.createPasteFragment = createPasteFragment;
|
|
19888
|
+
|
|
19889
|
+
|
|
19758
19890
|
/***/ },
|
|
19759
19891
|
|
|
19760
19892
|
/***/ "./packages/roosterjs-content-model-dom/lib/domUtils/event/eventUtils.ts"
|
|
@@ -19931,14 +20063,14 @@ function getNodePositionFromEvent(doc, domHelper, x, y) {
|
|
|
19931
20063
|
// Firefox, Chrome, Edge, Safari, Opera
|
|
19932
20064
|
var pos = doc.caretPositionFromPoint(x, y);
|
|
19933
20065
|
if (pos && domHelper.isNodeInEditor(pos.offsetNode)) {
|
|
19934
|
-
return
|
|
20066
|
+
return normalizePosition(pos.offsetNode, pos.offset);
|
|
19935
20067
|
}
|
|
19936
20068
|
}
|
|
19937
20069
|
if (doc.caretRangeFromPoint) {
|
|
19938
20070
|
// Safari
|
|
19939
20071
|
var range = doc.caretRangeFromPoint(x, y);
|
|
19940
20072
|
if (range && domHelper.isNodeInEditor(range.startContainer)) {
|
|
19941
|
-
return
|
|
20073
|
+
return normalizePosition(range.startContainer, range.startOffset);
|
|
19942
20074
|
}
|
|
19943
20075
|
}
|
|
19944
20076
|
if (doc.elementFromPoint) {
|
|
@@ -19951,6 +20083,14 @@ function getNodePositionFromEvent(doc, domHelper, x, y) {
|
|
|
19951
20083
|
return null;
|
|
19952
20084
|
}
|
|
19953
20085
|
exports.getNodePositionFromEvent = getNodePositionFromEvent;
|
|
20086
|
+
function normalizePosition(node, offset) {
|
|
20087
|
+
var _a;
|
|
20088
|
+
// Safari hit-testing in tableMoverTest returns offset 1 after the lone BR of an empty block.
|
|
20089
|
+
var normalizedOffset = offset == 1 && node.childNodes.length == 1 && ((_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.nodeName) == 'BR'
|
|
20090
|
+
? 0
|
|
20091
|
+
: offset;
|
|
20092
|
+
return { node: node, offset: normalizedOffset };
|
|
20093
|
+
}
|
|
19954
20094
|
|
|
19955
20095
|
|
|
19956
20096
|
/***/ },
|
|
@@ -21253,6 +21393,78 @@ function parseTableCells(table) {
|
|
|
21253
21393
|
exports.parseTableCells = parseTableCells;
|
|
21254
21394
|
|
|
21255
21395
|
|
|
21396
|
+
/***/ },
|
|
21397
|
+
|
|
21398
|
+
/***/ "./packages/roosterjs-content-model-dom/lib/domUtils/textToFragment.ts"
|
|
21399
|
+
/*!*****************************************************************************!*\
|
|
21400
|
+
!*** ./packages/roosterjs-content-model-dom/lib/domUtils/textToFragment.ts ***!
|
|
21401
|
+
\*****************************************************************************/
|
|
21402
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
21403
|
+
|
|
21404
|
+
"use strict";
|
|
21405
|
+
|
|
21406
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
21407
|
+
exports.textToFragment = void 0;
|
|
21408
|
+
var wrap_1 = __webpack_require__(/*! ./wrap */ "./packages/roosterjs-content-model-dom/lib/domUtils/wrap.ts");
|
|
21409
|
+
var NBSP_HTML = '\u00A0';
|
|
21410
|
+
var ENSP_HTML = '\u2002';
|
|
21411
|
+
var TAB_SPACES = 6;
|
|
21412
|
+
/**
|
|
21413
|
+
* @internal
|
|
21414
|
+
*/
|
|
21415
|
+
function textToFragment(text, doc) {
|
|
21416
|
+
var fragment = doc.createDocumentFragment();
|
|
21417
|
+
text.split('\n').forEach(function (line, index, lines) {
|
|
21418
|
+
line = line
|
|
21419
|
+
.replace(/^ /g, NBSP_HTML)
|
|
21420
|
+
.replace(/ $/g, NBSP_HTML)
|
|
21421
|
+
.replace(/\r/g, '')
|
|
21422
|
+
.replace(/ {2}/g, ' ' + NBSP_HTML);
|
|
21423
|
+
if (line.includes('\t')) {
|
|
21424
|
+
line = transformTabCharacters(line);
|
|
21425
|
+
}
|
|
21426
|
+
var textNode = doc.createTextNode(line);
|
|
21427
|
+
// There are 3 scenarios:
|
|
21428
|
+
// 1. Single line: Paste as it is
|
|
21429
|
+
// 2. Two lines: Add <br> between the lines
|
|
21430
|
+
// 3. 3 or More lines, For first and last line, paste as it is. For middle lines, wrap with DIV, and add BR if it is empty line
|
|
21431
|
+
if (lines.length == 2 && index == 0) {
|
|
21432
|
+
// 1 of 2 lines scenario, add BR
|
|
21433
|
+
fragment.appendChild(textNode);
|
|
21434
|
+
fragment.appendChild(doc.createElement('br'));
|
|
21435
|
+
}
|
|
21436
|
+
else if (index > 0 && index < lines.length - 1) {
|
|
21437
|
+
// Middle line of >=3 lines scenario, wrap with DIV
|
|
21438
|
+
fragment.appendChild((0, wrap_1.wrap)(doc, line == '' ? doc.createElement('br') : textNode, 'div'));
|
|
21439
|
+
}
|
|
21440
|
+
else {
|
|
21441
|
+
// All others, paste as it is
|
|
21442
|
+
fragment.appendChild(textNode);
|
|
21443
|
+
}
|
|
21444
|
+
});
|
|
21445
|
+
return fragment;
|
|
21446
|
+
}
|
|
21447
|
+
exports.textToFragment = textToFragment;
|
|
21448
|
+
/**
|
|
21449
|
+
* Transform \t characters into EN SPACE characters
|
|
21450
|
+
* @param input string NOT containing \n characters
|
|
21451
|
+
* @example t("\thello", 2) => "    hello"
|
|
21452
|
+
*/
|
|
21453
|
+
function transformTabCharacters(input, initialOffset) {
|
|
21454
|
+
if (initialOffset === void 0) { initialOffset = 0; }
|
|
21455
|
+
var line = input;
|
|
21456
|
+
var tIndex;
|
|
21457
|
+
while ((tIndex = line.indexOf('\t')) != -1) {
|
|
21458
|
+
var lineBefore = line.slice(0, tIndex);
|
|
21459
|
+
var lineAfter = line.slice(tIndex + 1);
|
|
21460
|
+
var tabCount = TAB_SPACES - ((lineBefore.length + initialOffset) % TAB_SPACES);
|
|
21461
|
+
var tabStr = Array(tabCount).fill(ENSP_HTML).join('');
|
|
21462
|
+
line = lineBefore + tabStr + lineAfter;
|
|
21463
|
+
}
|
|
21464
|
+
return line;
|
|
21465
|
+
}
|
|
21466
|
+
|
|
21467
|
+
|
|
21256
21468
|
/***/ },
|
|
21257
21469
|
|
|
21258
21470
|
/***/ "./packages/roosterjs-content-model-dom/lib/domUtils/toArray.ts"
|
|
@@ -23838,8 +24050,8 @@ exports.shouldSetValue = shouldSetValue;
|
|
|
23838
24050
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
23839
24051
|
exports.createImage = exports.createText = exports.createTableCell = exports.createTable = exports.createSelectionMarker = exports.createParagraph = exports.createFormatContainer = exports.createListItem = exports.createBr = exports.isLinkUndeletable = exports.setLinkUndeletable = exports.scrollRectIntoView = exports.normalizeRect = exports.isWhiteSpacePreserved = exports.reuseCachedElement = exports.findClosestBlockEntityContainer = exports.isBlockEntityContainer = exports.isEntityDelimiter = exports.addDelimiters = exports.generateEntityClassNames = exports.parseEntityFormat = exports.getAllEntityWrappers = exports.findClosestEntityWrapper = exports.isEntityElement = exports.unwrap = exports.wrap = exports.wrapAllChildNodes = exports.moveChildNodes = exports.toArray = exports.getSafeIdSelector = exports.getObjectKeys = exports.isElementOfType = exports.isNodeOfType = exports.hasMetadata = exports.getMetadata = exports.updateMetadata = exports.buildSelectionMarker = exports.isBlockElement = exports.areSameFormats = exports.parseFormat = exports.getRegularSelectionOffsets = exports.formatContainerProcessor = exports.tableProcessor = exports.entityProcessor = exports.processChildNode = exports.handleRegularSelection = exports.childProcessor = exports.contentModelToText = exports.contentModelToDom = exports.domToContentModel = void 0;
|
|
23840
24052
|
exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addData = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = exports.createEmptyModel = exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = exports.createParagraphDecorator = exports.createContentModelDocument = void 0;
|
|
23841
|
-
exports.
|
|
23842
|
-
exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = void 0;
|
|
24053
|
+
exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModelForPaste = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.createPasteFragment = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.retrieveDocumentMetadata = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.getNodePositionFromEvent = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = exports.trimModelForSelection = void 0;
|
|
24054
|
+
exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = exports.getSegmentTextFormat = void 0;
|
|
23843
24055
|
var domToContentModel_1 = __webpack_require__(/*! ./domToModel/domToContentModel */ "./packages/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts");
|
|
23844
24056
|
Object.defineProperty(exports, "domToContentModel", ({ enumerable: true, get: function () { return domToContentModel_1.domToContentModel; } }));
|
|
23845
24057
|
var contentModelToDom_1 = __webpack_require__(/*! ./modelToDom/contentModelToDom */ "./packages/roosterjs-content-model-dom/lib/modelToDom/contentModelToDom.ts");
|
|
@@ -24039,6 +24251,8 @@ var normalizeFontFamily_1 = __webpack_require__(/*! ./domUtils/style/normalizeFo
|
|
|
24039
24251
|
Object.defineProperty(exports, "normalizeFontFamily", ({ enumerable: true, get: function () { return normalizeFontFamily_1.normalizeFontFamily; } }));
|
|
24040
24252
|
var extractClipboardItems_1 = __webpack_require__(/*! ./domUtils/event/extractClipboardItems */ "./packages/roosterjs-content-model-dom/lib/domUtils/event/extractClipboardItems.ts");
|
|
24041
24253
|
Object.defineProperty(exports, "extractClipboardItems", ({ enumerable: true, get: function () { return extractClipboardItems_1.extractClipboardItems; } }));
|
|
24254
|
+
var createPasteFragment_1 = __webpack_require__(/*! ./domUtils/event/createPasteFragment */ "./packages/roosterjs-content-model-dom/lib/domUtils/event/createPasteFragment.ts");
|
|
24255
|
+
Object.defineProperty(exports, "createPasteFragment", ({ enumerable: true, get: function () { return createPasteFragment_1.createPasteFragment; } }));
|
|
24042
24256
|
var cacheGetEventData_1 = __webpack_require__(/*! ./domUtils/event/cacheGetEventData */ "./packages/roosterjs-content-model-dom/lib/domUtils/event/cacheGetEventData.ts");
|
|
24043
24257
|
Object.defineProperty(exports, "cacheGetEventData", ({ enumerable: true, get: function () { return cacheGetEventData_1.cacheGetEventData; } }));
|
|
24044
24258
|
var paragraphMarker_1 = __webpack_require__(/*! ./domUtils/hiddenProperties/paragraphMarker */ "./packages/roosterjs-content-model-dom/lib/domUtils/hiddenProperties/paragraphMarker.ts");
|
|
@@ -26882,6 +27096,7 @@ var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.m
|
|
|
26882
27096
|
var addBlock_1 = __webpack_require__(/*! ../common/addBlock */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/addBlock.ts");
|
|
26883
27097
|
var addSegment_1 = __webpack_require__(/*! ../common/addSegment */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/addSegment.ts");
|
|
26884
27098
|
var applyTableFormat_1 = __webpack_require__(/*! ./applyTableFormat */ "./packages/roosterjs-content-model-dom/lib/modelApi/editing/applyTableFormat.ts");
|
|
27099
|
+
var createBr_1 = __webpack_require__(/*! ../creators/createBr */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createBr.ts");
|
|
26885
27100
|
var createListItem_1 = __webpack_require__(/*! ../creators/createListItem */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createListItem.ts");
|
|
26886
27101
|
var createParagraph_1 = __webpack_require__(/*! ../creators/createParagraph */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createParagraph.ts");
|
|
26887
27102
|
var createSelectionMarker_1 = __webpack_require__(/*! ../creators/createSelectionMarker */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createSelectionMarker.ts");
|
|
@@ -26904,11 +27119,14 @@ var KeysOfSegmentFormat = (0, getObjectKeys_1.getObjectKeys)(EmptySegmentFormat_
|
|
|
26904
27119
|
* @returns Insert point after merge, or null if there is no insert point
|
|
26905
27120
|
*/
|
|
26906
27121
|
function mergeModel(target, source, context, options) {
|
|
26907
|
-
var _a;
|
|
27122
|
+
var _a, _b;
|
|
26908
27123
|
var insertPosition = (_a = options === null || options === void 0 ? void 0 : options.insertPosition) !== null && _a !== void 0 ? _a : (0, deleteSelection_1.deleteSelection)(target, [], context).insertPoint;
|
|
26909
|
-
var
|
|
27124
|
+
var _c = options || {}, addParagraphAfterMergedContent = _c.addParagraphAfterMergedContent, mergeFormat = _c.mergeFormat, mergeParagraphAfterList = _c.mergeParagraphAfterList, mergeTable = _c.mergeTable;
|
|
27125
|
+
if (mergeParagraphAfterList && insertPosition && ((_b = source.blocks[0]) === null || _b === void 0 ? void 0 : _b.blockType) == 'Paragraph') {
|
|
27126
|
+
moveParagraphAfterListIntoList(insertPosition);
|
|
27127
|
+
}
|
|
26910
27128
|
if (addParagraphAfterMergedContent && !mergeTable) {
|
|
26911
|
-
var
|
|
27129
|
+
var _d = insertPosition || {}, paragraph = _d.paragraph, marker = _d.marker;
|
|
26912
27130
|
var newPara = (0, createParagraph_1.createParagraph)(false /* isImplicit */, paragraph === null || paragraph === void 0 ? void 0 : paragraph.format, marker === null || marker === void 0 ? void 0 : marker.format);
|
|
26913
27131
|
(0, addBlock_1.addBlock)(source, newPara);
|
|
26914
27132
|
}
|
|
@@ -26956,6 +27174,22 @@ function mergeModel(target, source, context, options) {
|
|
|
26956
27174
|
return insertPosition;
|
|
26957
27175
|
}
|
|
26958
27176
|
exports.mergeModel = mergeModel;
|
|
27177
|
+
function moveParagraphAfterListIntoList(insertPosition) {
|
|
27178
|
+
var paragraph = insertPosition.paragraph, path = insertPosition.path;
|
|
27179
|
+
var parent = path[0];
|
|
27180
|
+
var paragraphIndex = parent.blocks.indexOf(paragraph);
|
|
27181
|
+
var previousBlock = parent.blocks[paragraphIndex - 1];
|
|
27182
|
+
if (paragraph.segments.every(function (segment) { return segment.segmentType == 'SelectionMarker' || segment.segmentType == 'Br'; }) &&
|
|
27183
|
+
(previousBlock === null || previousBlock === void 0 ? void 0 : previousBlock.blockType) == 'BlockGroup' &&
|
|
27184
|
+
previousBlock.blockGroupType == 'ListItem') {
|
|
27185
|
+
var newListItem = (0, createListItem_1.createListItem)(previousBlock.levels, previousBlock.formatHolder.format);
|
|
27186
|
+
var paragraphAfterList = (0, createParagraph_1.createParagraph)(false, paragraph.format);
|
|
27187
|
+
(0, addBlock_1.addBlock)(newListItem, paragraph);
|
|
27188
|
+
paragraphAfterList.segments.push((0, createBr_1.createBr)());
|
|
27189
|
+
(0, mutate_1.mutateBlock)(parent).blocks.splice(paragraphIndex, 1, newListItem, paragraphAfterList);
|
|
27190
|
+
path.unshift(newListItem);
|
|
27191
|
+
}
|
|
27192
|
+
}
|
|
26959
27193
|
function mergeParagraph(markerPosition, newPara, mergeToCurrentParagraph, context, option) {
|
|
26960
27194
|
var paragraph = markerPosition.paragraph, marker = markerPosition.marker;
|
|
26961
27195
|
var newParagraph = mergeToCurrentParagraph
|
|
@@ -27012,6 +27246,11 @@ function mergeTables(markerPosition, newTable, source) {
|
|
|
27012
27246
|
var newTableRowCount = newTable.rows.length;
|
|
27013
27247
|
var lastTargetColIndex = getTargetColIndex(table, rowIndex, colIndex, newTableColCount);
|
|
27014
27248
|
var extraColsNeeded = lastTargetColIndex - table.rows[0].cells.length;
|
|
27249
|
+
newTable.rows.forEach(function (row) {
|
|
27250
|
+
row.cells.forEach(function (cell) {
|
|
27251
|
+
cell.spanAbove = false;
|
|
27252
|
+
});
|
|
27253
|
+
});
|
|
27015
27254
|
if (extraColsNeeded > 0) {
|
|
27016
27255
|
var currentColCount = table.rows[0].cells.length;
|
|
27017
27256
|
for (var col = 0; col < extraColsNeeded; col++) {
|
|
@@ -31043,9 +31282,9 @@ var MarkdownBlockGroupType = {
|
|
|
31043
31282
|
/**
|
|
31044
31283
|
* @internal
|
|
31045
31284
|
*/
|
|
31046
|
-
function createBlockGroupFromMarkdown(text, patternName, options, group) {
|
|
31285
|
+
function createBlockGroupFromMarkdown(text, patternName, options, group, list) {
|
|
31047
31286
|
if (MarkdownBlockGroupType[patternName] === 'ListItem') {
|
|
31048
|
-
return (0, createListFromMarkdown_1.createListFromMarkdown)(text, patternName === 'ordered_list' ? 'OL' : 'UL', options);
|
|
31287
|
+
return (0, createListFromMarkdown_1.createListFromMarkdown)(text, patternName === 'ordered_list' ? 'OL' : 'UL', options, list);
|
|
31049
31288
|
}
|
|
31050
31289
|
else {
|
|
31051
31290
|
return (0, createBlockQuoteFromMarkdown_1.createBlockQuoteFromMarkdown)(text, options, group);
|
|
@@ -31133,12 +31372,13 @@ var createParagraphFromMarkdown_1 = __webpack_require__(/*! ./createParagraphFro
|
|
|
31133
31372
|
/**
|
|
31134
31373
|
* @internal
|
|
31135
31374
|
*/
|
|
31136
|
-
function createListFromMarkdown(text, listType, options) {
|
|
31375
|
+
function createListFromMarkdown(text, listType, options, list) {
|
|
31137
31376
|
var marker = text.trim().split(' ')[0];
|
|
31138
31377
|
var isDummy = isDummyListItem(marker);
|
|
31378
|
+
var startNumber = listType === 'OL' && !list ? parseInt(marker, 10) : undefined;
|
|
31139
31379
|
var itemText = isDummy ? text : text.trim().substring(marker.length);
|
|
31140
31380
|
var paragraph = (0, createParagraphFromMarkdown_1.createParagraphFromMarkdown)(itemText.trim(), options);
|
|
31141
|
-
var levels = createLevels(text, listType, isDummy, options);
|
|
31381
|
+
var levels = createLevels(text, listType, isDummy, options, startNumber);
|
|
31142
31382
|
var listModel = (0, roosterjs_content_model_dom_1.createListItem)(levels);
|
|
31143
31383
|
if (options.direction) {
|
|
31144
31384
|
listModel.format.direction = options.direction;
|
|
@@ -31147,8 +31387,11 @@ function createListFromMarkdown(text, listType, options) {
|
|
|
31147
31387
|
return listModel;
|
|
31148
31388
|
}
|
|
31149
31389
|
exports.createListFromMarkdown = createListFromMarkdown;
|
|
31150
|
-
function createLevels(text, listType, isDummy, options) {
|
|
31390
|
+
function createLevels(text, listType, isDummy, options, startNumberOverride) {
|
|
31151
31391
|
var level = (0, roosterjs_content_model_dom_1.createListLevel)(listType, options.direction ? { direction: options.direction } : undefined);
|
|
31392
|
+
if (startNumberOverride) {
|
|
31393
|
+
level.format.startNumberOverride = startNumberOverride;
|
|
31394
|
+
}
|
|
31152
31395
|
if (isDummy) {
|
|
31153
31396
|
level.format.displayForDummyItem = 'block';
|
|
31154
31397
|
}
|
|
@@ -31437,7 +31680,7 @@ function addMarkdownBlockToModel(model, blockType, markdown, patternName, markdo
|
|
|
31437
31680
|
model.blocks.push(divider);
|
|
31438
31681
|
break;
|
|
31439
31682
|
case 'BlockGroup':
|
|
31440
|
-
var blockGroup = (0, createBlockGroupFromMarkdown_1.createBlockGroupFromMarkdown)(markdown, patternName, options, markdownContext.lastQuote);
|
|
31683
|
+
var blockGroup = (0, createBlockGroupFromMarkdown_1.createBlockGroupFromMarkdown)(markdown, patternName, options, markdownContext.lastQuote, markdownContext.lastList);
|
|
31441
31684
|
if (!markdownContext.lastQuote) {
|
|
31442
31685
|
model.blocks.push(blockGroup);
|
|
31443
31686
|
}
|
|
@@ -32280,7 +32523,11 @@ var MarkdownPastePlugin = /** @class */ (function () {
|
|
|
32280
32523
|
(0, isPastedContentMarkdown_1.isPastedContentMarkdown)(this.editor, clipboardData) &&
|
|
32281
32524
|
clipboardData.modelBeforePaste) {
|
|
32282
32525
|
var modelBeforePaste_1 = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(clipboardData.modelBeforePaste);
|
|
32283
|
-
(0, roosterjs_content_model_dom_1.mergeModel)(modelBeforePaste_1, (0, convertMarkdownToContentModel_1.convertMarkdownToContentModel)(clipboardData.text, {
|
|
32526
|
+
(0, roosterjs_content_model_dom_1.mergeModel)(modelBeforePaste_1, (0, convertMarkdownToContentModel_1.convertMarkdownToContentModel)(clipboardData.text, {
|
|
32527
|
+
emptyLine: 'merge',
|
|
32528
|
+
}), undefined /*context*/, {
|
|
32529
|
+
mergeFormat: 'preferTarget',
|
|
32530
|
+
});
|
|
32284
32531
|
if (this.options.undoConversion) {
|
|
32285
32532
|
this.editor.takeSnapshot();
|
|
32286
32533
|
}
|
|
@@ -32289,6 +32536,7 @@ var MarkdownPastePlugin = /** @class */ (function () {
|
|
|
32289
32536
|
return true;
|
|
32290
32537
|
}, {
|
|
32291
32538
|
apiName: 'MarkdownConversion',
|
|
32539
|
+
changeSource: roosterjs_content_model_dom_1.ChangeSource.AutoMarkdownConversion,
|
|
32292
32540
|
scrollCaretIntoView: true,
|
|
32293
32541
|
});
|
|
32294
32542
|
}
|
|
@@ -32333,7 +32581,7 @@ var BlockPatterns = [
|
|
|
32333
32581
|
/^\s*>\s.+/,
|
|
32334
32582
|
/^\s*[\*\-\+]\s.+/,
|
|
32335
32583
|
/^\s*\d+\.\s.+/,
|
|
32336
|
-
|
|
32584
|
+
/^---$/,
|
|
32337
32585
|
/^\s*\|.*\|\s*$/, // table row: "| a | b |"
|
|
32338
32586
|
];
|
|
32339
32587
|
// Inline markdown patterns. The text contains markdown if any of these match anywhere.
|
|
@@ -33870,10 +34118,14 @@ exports.CustomReplacePlugin = CustomReplacePlugin;
|
|
|
33870
34118
|
|
|
33871
34119
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
33872
34120
|
exports.DragAndDropPlugin = void 0;
|
|
33873
|
-
var
|
|
34121
|
+
var handleDroppedExternalContent_1 = __webpack_require__(/*! ./utils/handleDroppedExternalContent */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedExternalContent.ts");
|
|
34122
|
+
var handleDroppedInternalContent_1 = __webpack_require__(/*! ./utils/handleDroppedInternalContent */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedInternalContent.ts");
|
|
34123
|
+
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
34124
|
+
var reorderList_1 = __webpack_require__(/*! ./utils/reorderList */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/reorderList.ts");
|
|
33874
34125
|
var DefaultOptions = {
|
|
33875
34126
|
forbiddenElements: ['iframe'],
|
|
33876
34127
|
};
|
|
34128
|
+
var DeleteByDragInputType = 'deleteByDrag';
|
|
33877
34129
|
/**
|
|
33878
34130
|
* DragAndDrop plugin, handles ContentChanged event when change source is "Drop"
|
|
33879
34131
|
* to sanitize dropped content, similar to how PastePlugin sanitizes pasted content.
|
|
@@ -33887,7 +34139,7 @@ var DragAndDropPlugin = /** @class */ (function () {
|
|
|
33887
34139
|
var _a;
|
|
33888
34140
|
this.editor = null;
|
|
33889
34141
|
this.forbiddenElements = [];
|
|
33890
|
-
this.
|
|
34142
|
+
this.internalDrag = false;
|
|
33891
34143
|
this.disposer = null;
|
|
33892
34144
|
this.forbiddenElements = (_a = options.forbiddenElements) !== null && _a !== void 0 ? _a : [];
|
|
33893
34145
|
}
|
|
@@ -33908,8 +34160,21 @@ var DragAndDropPlugin = /** @class */ (function () {
|
|
|
33908
34160
|
this.editor = editor;
|
|
33909
34161
|
this.disposer = editor.attachDomEvent({
|
|
33910
34162
|
dragstart: {
|
|
33911
|
-
beforeDispatch: function (
|
|
33912
|
-
_this.
|
|
34163
|
+
beforeDispatch: function (ev) {
|
|
34164
|
+
_this.internalDrag = true;
|
|
34165
|
+
if (_this.editor &&
|
|
34166
|
+
_this.editor.isExperimentalFeatureEnabled('HandleDropInternalContent')) {
|
|
34167
|
+
_this.adjustDraggingCursor(_this.editor, ev);
|
|
34168
|
+
}
|
|
34169
|
+
},
|
|
34170
|
+
},
|
|
34171
|
+
beforeinput: {
|
|
34172
|
+
beforeDispatch: function (event) {
|
|
34173
|
+
var ev = event;
|
|
34174
|
+
if (_this.internalDrag) {
|
|
34175
|
+
_this.handleDragOutOfTheEditor(editor, ev);
|
|
34176
|
+
_this.internalDrag = false;
|
|
34177
|
+
}
|
|
33913
34178
|
},
|
|
33914
34179
|
},
|
|
33915
34180
|
});
|
|
@@ -33925,8 +34190,8 @@ var DragAndDropPlugin = /** @class */ (function () {
|
|
|
33925
34190
|
this.disposer();
|
|
33926
34191
|
this.disposer = null;
|
|
33927
34192
|
}
|
|
33928
|
-
this.isInternalDragging = false;
|
|
33929
34193
|
this.forbiddenElements = [];
|
|
34194
|
+
this.internalDrag = false;
|
|
33930
34195
|
};
|
|
33931
34196
|
/**
|
|
33932
34197
|
* Core method for a plugin. Once an event happens in editor, editor will call this
|
|
@@ -33935,19 +34200,41 @@ var DragAndDropPlugin = /** @class */ (function () {
|
|
|
33935
34200
|
* @param event The event to handle:
|
|
33936
34201
|
*/
|
|
33937
34202
|
DragAndDropPlugin.prototype.onPluginEvent = function (event) {
|
|
33938
|
-
var _a;
|
|
33939
34203
|
if (this.editor && event.eventType == 'beforeDrop') {
|
|
33940
|
-
|
|
33941
|
-
|
|
34204
|
+
var dropEvent = event.rawEvent;
|
|
34205
|
+
if (this.internalDrag &&
|
|
34206
|
+
this.editor.isExperimentalFeatureEnabled('HandleDropInternalContent')) {
|
|
34207
|
+
(0, handleDroppedInternalContent_1.handleDroppedInternalContent)(this.editor, dropEvent);
|
|
33942
34208
|
}
|
|
33943
|
-
else {
|
|
33944
|
-
|
|
33945
|
-
var html = (_a = dropEvent.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData('text/html');
|
|
33946
|
-
if (html) {
|
|
33947
|
-
(0, handleDroppedContent_1.handleDroppedContent)(this.editor, dropEvent, html, this.forbiddenElements);
|
|
33948
|
-
}
|
|
34209
|
+
else if (!this.internalDrag) {
|
|
34210
|
+
(0, handleDroppedExternalContent_1.handleDroppedExternalContent)(this.editor, dropEvent, this.forbiddenElements);
|
|
33949
34211
|
}
|
|
33950
|
-
|
|
34212
|
+
this.internalDrag = false;
|
|
34213
|
+
}
|
|
34214
|
+
};
|
|
34215
|
+
DragAndDropPlugin.prototype.adjustDraggingCursor = function (editor, dragEvent) {
|
|
34216
|
+
var _a, _b;
|
|
34217
|
+
var selection = editor.getDOMSelection();
|
|
34218
|
+
if ((selection === null || selection === void 0 ? void 0 : selection.type) == 'table') {
|
|
34219
|
+
var doc = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.getDocument();
|
|
34220
|
+
if (doc && dragEvent.dataTransfer) {
|
|
34221
|
+
var ghost_1 = doc.createElement('span');
|
|
34222
|
+
ghost_1.textContent = '|';
|
|
34223
|
+
doc.body.appendChild(ghost_1);
|
|
34224
|
+
dragEvent.dataTransfer.setDragImage(ghost_1, 0, 0);
|
|
34225
|
+
(_b = doc.defaultView) === null || _b === void 0 ? void 0 : _b.requestAnimationFrame(function () { return ghost_1.remove(); });
|
|
34226
|
+
}
|
|
34227
|
+
}
|
|
34228
|
+
};
|
|
34229
|
+
DragAndDropPlugin.prototype.handleDragOutOfTheEditor = function (editor, inputEvent) {
|
|
34230
|
+
if (inputEvent.inputType == DeleteByDragInputType) {
|
|
34231
|
+
inputEvent.preventDefault();
|
|
34232
|
+
editor.formatContentModel(function (model, context) {
|
|
34233
|
+
(0, roosterjs_content_model_dom_1.deleteSelection)(model, [reorderList_1.reorderList], context);
|
|
34234
|
+
return true;
|
|
34235
|
+
}, {
|
|
34236
|
+
changeSource: roosterjs_content_model_dom_1.ChangeSource.DragOutOfEditor,
|
|
34237
|
+
});
|
|
33951
34238
|
}
|
|
33952
34239
|
};
|
|
33953
34240
|
return DragAndDropPlugin;
|
|
@@ -34001,47 +34288,186 @@ exports.cleanForbiddenElements = cleanForbiddenElements;
|
|
|
34001
34288
|
|
|
34002
34289
|
/***/ },
|
|
34003
34290
|
|
|
34004
|
-
/***/ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/
|
|
34005
|
-
|
|
34006
|
-
!*** ./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/
|
|
34007
|
-
|
|
34291
|
+
/***/ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedExternalContent.ts"
|
|
34292
|
+
/*!********************************************************************************************************!*\
|
|
34293
|
+
!*** ./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedExternalContent.ts ***!
|
|
34294
|
+
\********************************************************************************************************/
|
|
34008
34295
|
(__unused_webpack_module, exports, __webpack_require__) {
|
|
34009
34296
|
|
|
34010
34297
|
"use strict";
|
|
34011
34298
|
|
|
34012
34299
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
34013
|
-
exports.
|
|
34300
|
+
exports.handleDroppedExternalContent = void 0;
|
|
34301
|
+
var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
|
|
34014
34302
|
var cleanForbiddenElements_1 = __webpack_require__(/*! ./cleanForbiddenElements */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/cleanForbiddenElements.ts");
|
|
34015
34303
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
34016
34304
|
/**
|
|
34017
34305
|
* @internal
|
|
34018
34306
|
* Handle dropped HTML content by inserting it at the drop position
|
|
34019
34307
|
*/
|
|
34020
|
-
function
|
|
34308
|
+
function handleDroppedExternalContent(editor, event, forbiddenElements) {
|
|
34309
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
34310
|
+
var items, doc, domPosition, droppedModel_1, range;
|
|
34311
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
34312
|
+
switch (_a.label) {
|
|
34313
|
+
case 0:
|
|
34314
|
+
items = getSupportedItems(event.dataTransfer);
|
|
34315
|
+
if (items.length == 0) {
|
|
34316
|
+
return [2 /*return*/];
|
|
34317
|
+
}
|
|
34318
|
+
doc = editor.getDocument();
|
|
34319
|
+
domPosition = (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(doc, editor.getDOMHelper(), event.x, event.y);
|
|
34320
|
+
if (!domPosition) return [3 /*break*/, 2];
|
|
34321
|
+
event.preventDefault();
|
|
34322
|
+
event.stopPropagation();
|
|
34323
|
+
return [4 /*yield*/, getDroppedModel(editor, items, forbiddenElements)];
|
|
34324
|
+
case 1:
|
|
34325
|
+
droppedModel_1 = _a.sent();
|
|
34326
|
+
if (!droppedModel_1) {
|
|
34327
|
+
return [2 /*return*/];
|
|
34328
|
+
}
|
|
34329
|
+
range = doc.createRange();
|
|
34330
|
+
range.setStart(domPosition.node, domPosition.offset);
|
|
34331
|
+
range.collapse(true);
|
|
34332
|
+
editor.formatContentModel(function (model, context) {
|
|
34333
|
+
(0, roosterjs_content_model_dom_1.mergeModel)(model, droppedModel_1, context, {
|
|
34334
|
+
mergeParagraphAfterList: true,
|
|
34335
|
+
});
|
|
34336
|
+
return true;
|
|
34337
|
+
}, {
|
|
34338
|
+
selectionOverride: {
|
|
34339
|
+
type: 'range',
|
|
34340
|
+
range: range,
|
|
34341
|
+
isReverted: false,
|
|
34342
|
+
},
|
|
34343
|
+
});
|
|
34344
|
+
_a.label = 2;
|
|
34345
|
+
case 2: return [2 /*return*/];
|
|
34346
|
+
}
|
|
34347
|
+
});
|
|
34348
|
+
});
|
|
34349
|
+
}
|
|
34350
|
+
exports.handleDroppedExternalContent = handleDroppedExternalContent;
|
|
34351
|
+
function getDroppedModel(editor, items, forbiddenElements) {
|
|
34352
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
34353
|
+
var clipboardData, domCreator, doc, fragment;
|
|
34354
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
34355
|
+
switch (_a.label) {
|
|
34356
|
+
case 0: return [4 /*yield*/, (0, roosterjs_content_model_dom_1.extractClipboardItems)(items, undefined)];
|
|
34357
|
+
case 1:
|
|
34358
|
+
clipboardData = _a.sent();
|
|
34359
|
+
domCreator = editor.getDOMCreator();
|
|
34360
|
+
doc = clipboardData.rawHtml ? domCreator.htmlToDOM(clipboardData.rawHtml) : null;
|
|
34361
|
+
if (doc) {
|
|
34362
|
+
(0, cleanForbiddenElements_1.cleanForbiddenElements)(doc, forbiddenElements);
|
|
34363
|
+
}
|
|
34364
|
+
fragment = (0, roosterjs_content_model_dom_1.createPasteFragment)(editor.getDocument(), clipboardData, 'normal', doc === null || doc === void 0 ? void 0 : doc.body);
|
|
34365
|
+
return [2 /*return*/, (0, roosterjs_content_model_dom_1.domToContentModel)(fragment, (0, roosterjs_content_model_dom_1.createDomToModelContext)())];
|
|
34366
|
+
}
|
|
34367
|
+
});
|
|
34368
|
+
});
|
|
34369
|
+
}
|
|
34370
|
+
function getSupportedItems(dataTransfer) {
|
|
34371
|
+
var _a;
|
|
34372
|
+
var result = [];
|
|
34373
|
+
for (var i = 0; i < ((_a = dataTransfer === null || dataTransfer === void 0 ? void 0 : dataTransfer.items.length) !== null && _a !== void 0 ? _a : 0); i++) {
|
|
34374
|
+
var item = dataTransfer.items[i];
|
|
34375
|
+
if ((item.kind == 'string' &&
|
|
34376
|
+
(item.type == 'text/html' ||
|
|
34377
|
+
item.type == 'text/plain' ||
|
|
34378
|
+
item.type == 'text/uri-list')) ||
|
|
34379
|
+
(item.kind == 'file' && item.type.indexOf('image/') == 0)) {
|
|
34380
|
+
result.push(item);
|
|
34381
|
+
}
|
|
34382
|
+
}
|
|
34383
|
+
return result;
|
|
34384
|
+
}
|
|
34385
|
+
|
|
34386
|
+
|
|
34387
|
+
/***/ },
|
|
34388
|
+
|
|
34389
|
+
/***/ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedInternalContent.ts"
|
|
34390
|
+
/*!********************************************************************************************************!*\
|
|
34391
|
+
!*** ./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedInternalContent.ts ***!
|
|
34392
|
+
\********************************************************************************************************/
|
|
34393
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
34394
|
+
|
|
34395
|
+
"use strict";
|
|
34396
|
+
|
|
34397
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
34398
|
+
exports.handleDroppedInternalContent = void 0;
|
|
34399
|
+
var roosterjs_content_model_api_1 = __webpack_require__(/*! roosterjs-content-model-api */ "./packages/roosterjs-content-model-api/lib/index.ts");
|
|
34400
|
+
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
34401
|
+
var reorderList_1 = __webpack_require__(/*! ./reorderList */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/reorderList.ts");
|
|
34402
|
+
/**
|
|
34403
|
+
* @internal
|
|
34404
|
+
* Handle dropped internal HTML content by inserting it at the drop position
|
|
34405
|
+
*/
|
|
34406
|
+
function handleDroppedInternalContent(editor, event) {
|
|
34021
34407
|
var doc = editor.getDocument();
|
|
34022
34408
|
var domPosition = (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(doc, editor.getDOMHelper(), event.x, event.y);
|
|
34023
|
-
|
|
34409
|
+
var selection = editor.getDOMSelection();
|
|
34410
|
+
if (domPosition && selection) {
|
|
34024
34411
|
event.preventDefault();
|
|
34025
34412
|
event.stopPropagation();
|
|
34026
|
-
|
|
34027
|
-
|
|
34028
|
-
|
|
34029
|
-
|
|
34030
|
-
|
|
34031
|
-
|
|
34032
|
-
|
|
34033
|
-
|
|
34034
|
-
|
|
34035
|
-
|
|
34036
|
-
|
|
34037
|
-
|
|
34038
|
-
|
|
34039
|
-
|
|
34040
|
-
|
|
34413
|
+
(0, roosterjs_content_model_api_1.formatInsertPointWithContentModel)(editor, domPosition, function (model, context, insertPoint) {
|
|
34414
|
+
if (insertPoint) {
|
|
34415
|
+
var cloneModel = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(model);
|
|
34416
|
+
(0, roosterjs_content_model_dom_1.trimModelForSelection)(cloneModel, selection);
|
|
34417
|
+
if (!event.ctrlKey && !event.metaKey) {
|
|
34418
|
+
if ((0, roosterjs_content_model_dom_1.deleteSelection)(model, [reorderList_1.reorderList], context).deleteResult == 'range') {
|
|
34419
|
+
(0, roosterjs_content_model_dom_1.normalizeContentModel)(model);
|
|
34420
|
+
}
|
|
34421
|
+
}
|
|
34422
|
+
var startMarker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(insertPoint.marker.format);
|
|
34423
|
+
var startParagraph = (0, roosterjs_content_model_dom_1.mutateBlock)(insertPoint.paragraph);
|
|
34424
|
+
var startIndex = startParagraph.segments.indexOf(insertPoint.marker);
|
|
34425
|
+
startParagraph.segments.splice(startIndex, 0, startMarker);
|
|
34426
|
+
var newInsertPoint = (0, roosterjs_content_model_dom_1.mergeModel)(model, cloneModel, context, {
|
|
34427
|
+
insertPosition: insertPoint,
|
|
34428
|
+
mergeParagraphAfterList: true,
|
|
34429
|
+
});
|
|
34430
|
+
if (newInsertPoint) {
|
|
34431
|
+
(0, roosterjs_content_model_dom_1.setSelection)(model, startMarker, newInsertPoint.marker);
|
|
34432
|
+
}
|
|
34433
|
+
}
|
|
34041
34434
|
});
|
|
34042
34435
|
}
|
|
34043
34436
|
}
|
|
34044
|
-
exports.
|
|
34437
|
+
exports.handleDroppedInternalContent = handleDroppedInternalContent;
|
|
34438
|
+
|
|
34439
|
+
|
|
34440
|
+
/***/ },
|
|
34441
|
+
|
|
34442
|
+
/***/ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/reorderList.ts"
|
|
34443
|
+
/*!***************************************************************************************!*\
|
|
34444
|
+
!*** ./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/reorderList.ts ***!
|
|
34445
|
+
\***************************************************************************************/
|
|
34446
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
34447
|
+
|
|
34448
|
+
"use strict";
|
|
34449
|
+
|
|
34450
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
34451
|
+
exports.reorderList = void 0;
|
|
34452
|
+
var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
|
|
34453
|
+
var getListItemFromInsertPoint_1 = __webpack_require__(/*! ../../edit/utils/getListItemFromInsertPoint */ "./packages/roosterjs-content-model-plugins/lib/edit/utils/getListItemFromInsertPoint.ts");
|
|
34454
|
+
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
34455
|
+
/**
|
|
34456
|
+
* @internal
|
|
34457
|
+
*/
|
|
34458
|
+
var reorderList = function (context) {
|
|
34459
|
+
if (context.deleteResult != 'range') {
|
|
34460
|
+
return;
|
|
34461
|
+
}
|
|
34462
|
+
var paragraph = context.insertPoint.paragraph;
|
|
34463
|
+
var listItemAndParent = (0, getListItemFromInsertPoint_1.getListItemFromInsertPoint)(context.insertPoint);
|
|
34464
|
+
if (listItemAndParent) {
|
|
34465
|
+
var _a = (0, tslib_1.__read)(listItemAndParent, 1), item = _a[0];
|
|
34466
|
+
var mutableList = (0, roosterjs_content_model_dom_1.mutateBlock)(item);
|
|
34467
|
+
mutableList.blocks.splice(mutableList.blocks.indexOf(paragraph), mutableList.blocks.length);
|
|
34468
|
+
}
|
|
34469
|
+
};
|
|
34470
|
+
exports.reorderList = reorderList;
|
|
34045
34471
|
|
|
34046
34472
|
|
|
34047
34473
|
/***/ },
|
|
@@ -34327,6 +34753,9 @@ var deleteAllSegmentBefore = function (context) {
|
|
|
34327
34753
|
context.deleteResult = 'range';
|
|
34328
34754
|
}
|
|
34329
34755
|
}
|
|
34756
|
+
if (mutableParagraph.segments.length == 1 && mutableParagraph.segments[0] == marker) {
|
|
34757
|
+
mutableParagraph.segments.push((0, roosterjs_content_model_dom_1.createBr)(marker.format));
|
|
34758
|
+
}
|
|
34330
34759
|
};
|
|
34331
34760
|
exports.deleteAllSegmentBefore = deleteAllSegmentBefore;
|
|
34332
34761
|
|
|
@@ -34542,6 +34971,7 @@ var insertNewLine = function (quote, parent, quoteIndex, paragraph) {
|
|
|
34542
34971
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
34543
34972
|
exports.deleteList = void 0;
|
|
34544
34973
|
var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
|
|
34974
|
+
var getListItemFromInsertPoint_1 = __webpack_require__(/*! ../utils/getListItemFromInsertPoint */ "./packages/roosterjs-content-model-plugins/lib/edit/utils/getListItemFromInsertPoint.ts");
|
|
34545
34975
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
34546
34976
|
/**
|
|
34547
34977
|
* @internal
|
|
@@ -34551,18 +34981,14 @@ var deleteList = function (context) {
|
|
|
34551
34981
|
if (context.deleteResult != 'notDeleted') {
|
|
34552
34982
|
return;
|
|
34553
34983
|
}
|
|
34554
|
-
var
|
|
34555
|
-
var
|
|
34556
|
-
|
|
34557
|
-
|
|
34558
|
-
if ((item === null || item === void 0 ? void 0 : item.blockGroupType) == 'ListItem' &&
|
|
34559
|
-
item.levels.length > 0 &&
|
|
34560
|
-
paragraph.segments[0] == marker &&
|
|
34561
|
-
parent) {
|
|
34984
|
+
var paragraph = context.insertPoint.paragraph;
|
|
34985
|
+
var listItemAndParent = (0, getListItemFromInsertPoint_1.getListItemFromInsertPoint)(context.insertPoint);
|
|
34986
|
+
if (listItemAndParent) {
|
|
34987
|
+
var _c = (0, tslib_1.__read)(listItemAndParent, 2), item = _c[0], parent_1 = _c[1];
|
|
34562
34988
|
var mutableList = (0, roosterjs_content_model_dom_1.mutateBlock)(item);
|
|
34563
34989
|
var lastLevel = mutableList.levels[mutableList.levels.length - 1];
|
|
34564
|
-
var listItemIndex =
|
|
34565
|
-
var previousItem =
|
|
34990
|
+
var listItemIndex = parent_1.blocks.indexOf(item);
|
|
34991
|
+
var previousItem = parent_1.blocks[listItemIndex - 1];
|
|
34566
34992
|
// 1. If the last level is dummy, just remove it (legacy behavior)
|
|
34567
34993
|
// 2. If focus is at the beginning of list item and previous block is a list item with the same level count,
|
|
34568
34994
|
// merge current list item into previous one
|
|
@@ -34578,7 +35004,7 @@ var deleteList = function (context) {
|
|
|
34578
35004
|
previousItem.levels.length == mutableList.levels.length) {
|
|
34579
35005
|
var mutablePreviousItem = (0, roosterjs_content_model_dom_1.mutateBlock)(previousItem);
|
|
34580
35006
|
(_a = mutablePreviousItem.blocks).push.apply(_a, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(mutableList.blocks), false));
|
|
34581
|
-
(0, roosterjs_content_model_dom_1.mutateBlock)(
|
|
35007
|
+
(0, roosterjs_content_model_dom_1.mutateBlock)(parent_1).blocks.splice(listItemIndex, 1);
|
|
34582
35008
|
context.deleteResult = 'range';
|
|
34583
35009
|
}
|
|
34584
35010
|
else {
|
|
@@ -34586,10 +35012,10 @@ var deleteList = function (context) {
|
|
|
34586
35012
|
if (mutableList.levels.length > 1) {
|
|
34587
35013
|
var newListItem = (0, roosterjs_content_model_dom_1.createListItem)(mutableList.levels.slice(0, -1), mutableList.formatHolder.format);
|
|
34588
35014
|
newListItem.blocks = removedBlocks.map(function (block) { return (0, roosterjs_content_model_dom_1.mutateBlock)(block); });
|
|
34589
|
-
(0, roosterjs_content_model_dom_1.mutateBlock)(
|
|
35015
|
+
(0, roosterjs_content_model_dom_1.mutateBlock)(parent_1).blocks.splice(listItemIndex + 1, 0, newListItem);
|
|
34590
35016
|
}
|
|
34591
35017
|
else {
|
|
34592
|
-
(_b = (0, roosterjs_content_model_dom_1.mutateBlock)(
|
|
35018
|
+
(_b = (0, roosterjs_content_model_dom_1.mutateBlock)(parent_1).blocks).splice.apply(_b, (0, tslib_1.__spreadArray)([listItemIndex + 1, 0], (0, tslib_1.__read)(removedBlocks), false));
|
|
34593
35019
|
}
|
|
34594
35020
|
context.deleteResult = 'range';
|
|
34595
35021
|
}
|
|
@@ -35054,6 +35480,11 @@ var handleEnterOnParagraph = function (formatsToPreserveOnMerge) { return functi
|
|
|
35054
35480
|
context.deleteResult = 'range';
|
|
35055
35481
|
context.lastParagraph = newPara;
|
|
35056
35482
|
context.insertPoint.paragraph = newPara;
|
|
35483
|
+
if (context.formatContext) {
|
|
35484
|
+
context.formatContext.announceData = {
|
|
35485
|
+
defaultStrings: 'newLineInserted',
|
|
35486
|
+
};
|
|
35487
|
+
}
|
|
35057
35488
|
}
|
|
35058
35489
|
}; };
|
|
35059
35490
|
exports.handleEnterOnParagraph = handleEnterOnParagraph;
|
|
@@ -35758,6 +36189,37 @@ function getLeafSiblingBlock(path, block, isNext) {
|
|
|
35758
36189
|
exports.getLeafSiblingBlock = getLeafSiblingBlock;
|
|
35759
36190
|
|
|
35760
36191
|
|
|
36192
|
+
/***/ },
|
|
36193
|
+
|
|
36194
|
+
/***/ "./packages/roosterjs-content-model-plugins/lib/edit/utils/getListItemFromInsertPoint.ts"
|
|
36195
|
+
/*!***********************************************************************************************!*\
|
|
36196
|
+
!*** ./packages/roosterjs-content-model-plugins/lib/edit/utils/getListItemFromInsertPoint.ts ***!
|
|
36197
|
+
\***********************************************************************************************/
|
|
36198
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
36199
|
+
|
|
36200
|
+
"use strict";
|
|
36201
|
+
|
|
36202
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
36203
|
+
exports.getListItemFromInsertPoint = void 0;
|
|
36204
|
+
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
36205
|
+
/**
|
|
36206
|
+
* @internal
|
|
36207
|
+
*/
|
|
36208
|
+
function getListItemFromInsertPoint(insertPoint) {
|
|
36209
|
+
var paragraph = insertPoint.paragraph, marker = insertPoint.marker, path = insertPoint.path;
|
|
36210
|
+
var index = (0, roosterjs_content_model_dom_1.getClosestAncestorBlockGroupIndex)(path, ['ListItem'], ['TableCell', 'FormatContainer']);
|
|
36211
|
+
var item = path[index];
|
|
36212
|
+
var parent = path[index + 1];
|
|
36213
|
+
return (item === null || item === void 0 ? void 0 : item.blockGroupType) == 'ListItem' &&
|
|
36214
|
+
item.levels.length > 0 &&
|
|
36215
|
+
paragraph.segments[0] == marker &&
|
|
36216
|
+
parent
|
|
36217
|
+
? [item, parent]
|
|
36218
|
+
: null;
|
|
36219
|
+
}
|
|
36220
|
+
exports.getListItemFromInsertPoint = getListItemFromInsertPoint;
|
|
36221
|
+
|
|
36222
|
+
|
|
35761
36223
|
/***/ },
|
|
35762
36224
|
|
|
35763
36225
|
/***/ "./packages/roosterjs-content-model-plugins/lib/edit/utils/preserveParagraphFormat.ts"
|
|
@@ -37115,7 +37577,7 @@ var ImageEditPlugin = /** @class */ (function () {
|
|
|
37115
37577
|
if (event.rawEvent.key == 'Enter' && this.isCropMode) {
|
|
37116
37578
|
event.rawEvent.preventDefault();
|
|
37117
37579
|
}
|
|
37118
|
-
this.applyFormatWithContentModel(editor, this.isCropMode,
|
|
37580
|
+
this.applyFormatWithContentModel(editor, this.isCropMode, false /** should selectImage */, false /* isApiOperation */);
|
|
37119
37581
|
}
|
|
37120
37582
|
}
|
|
37121
37583
|
};
|
|
@@ -37155,6 +37617,28 @@ var ImageEditPlugin = /** @class */ (function () {
|
|
|
37155
37617
|
var editingImageModel;
|
|
37156
37618
|
var selection = editor.getDOMSelection();
|
|
37157
37619
|
var isRTL = false;
|
|
37620
|
+
var formatContentModelOptions = {
|
|
37621
|
+
onNodeCreated: function (model, node) {
|
|
37622
|
+
var _a;
|
|
37623
|
+
if (!isApiOperation &&
|
|
37624
|
+
editingImageModel &&
|
|
37625
|
+
editingImageModel == model &&
|
|
37626
|
+
editingImageModel.format.imageState == findEditingImage_1.EDITING_MARKER &&
|
|
37627
|
+
(0, roosterjs_content_model_dom_1.isNodeOfType)(node, 'ELEMENT_NODE') &&
|
|
37628
|
+
(0, roosterjs_content_model_dom_1.isElementOfType)(node, 'img')) {
|
|
37629
|
+
if (_this.isCropMode) {
|
|
37630
|
+
_this.startCropMode(editor, node, isRTL);
|
|
37631
|
+
}
|
|
37632
|
+
else {
|
|
37633
|
+
(_a = editor.getDocument().defaultView) === null || _a === void 0 ? void 0 : _a.requestAnimationFrame(function () {
|
|
37634
|
+
_this.startRotateAndResize(editor, node, isRTL);
|
|
37635
|
+
});
|
|
37636
|
+
}
|
|
37637
|
+
}
|
|
37638
|
+
},
|
|
37639
|
+
apiName: IMAGE_EDIT_FORMAT_EVENT,
|
|
37640
|
+
skipDOMSelection: false,
|
|
37641
|
+
};
|
|
37158
37642
|
editor.formatContentModel(function (model, context) {
|
|
37159
37643
|
var editingImage = (0, getSelectedImage_1.getSelectedImage)(model);
|
|
37160
37644
|
var previousSelectedImage = isApiOperation
|
|
@@ -37213,28 +37697,12 @@ var ImageEditPlugin = /** @class */ (function () {
|
|
|
37213
37697
|
_this.imageEditInfo = (0, updateImageEditInfo_1.updateImageEditInfo)(image, selection.image);
|
|
37214
37698
|
image.format.imageState = 'isEditing';
|
|
37215
37699
|
});
|
|
37700
|
+
formatContentModelOptions.skipDOMSelection = !isCropMode;
|
|
37216
37701
|
result = true;
|
|
37217
37702
|
}
|
|
37218
37703
|
}
|
|
37219
37704
|
return result;
|
|
37220
|
-
}, {
|
|
37221
|
-
onNodeCreated: function (model, node) {
|
|
37222
|
-
if (!isApiOperation &&
|
|
37223
|
-
editingImageModel &&
|
|
37224
|
-
editingImageModel == model &&
|
|
37225
|
-
editingImageModel.format.imageState == findEditingImage_1.EDITING_MARKER &&
|
|
37226
|
-
(0, roosterjs_content_model_dom_1.isNodeOfType)(node, 'ELEMENT_NODE') &&
|
|
37227
|
-
(0, roosterjs_content_model_dom_1.isElementOfType)(node, 'img')) {
|
|
37228
|
-
if (isCropMode) {
|
|
37229
|
-
_this.startCropMode(editor, node, isRTL);
|
|
37230
|
-
}
|
|
37231
|
-
else {
|
|
37232
|
-
_this.startRotateAndResize(editor, node, isRTL);
|
|
37233
|
-
}
|
|
37234
|
-
}
|
|
37235
|
-
},
|
|
37236
|
-
apiName: IMAGE_EDIT_FORMAT_EVENT,
|
|
37237
|
-
}, {
|
|
37705
|
+
}, formatContentModelOptions, {
|
|
37238
37706
|
tryGetFromCache: true,
|
|
37239
37707
|
});
|
|
37240
37708
|
};
|
|
@@ -38220,7 +38688,6 @@ var createImageCropper_1 = __webpack_require__(/*! ../Cropper/createImageCropper
|
|
|
38220
38688
|
var createImageResizer_1 = __webpack_require__(/*! ../Resizer/createImageResizer */ "./packages/roosterjs-content-model-plugins/lib/imageEdit/Resizer/createImageResizer.ts");
|
|
38221
38689
|
var createImageRotator_1 = __webpack_require__(/*! ../Rotator/createImageRotator */ "./packages/roosterjs-content-model-plugins/lib/imageEdit/Rotator/createImageRotator.ts");
|
|
38222
38690
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
38223
|
-
var IMAGE_EDIT_SHADOW_ROOT = 'ImageEditShadowRoot';
|
|
38224
38691
|
/**
|
|
38225
38692
|
* @internal
|
|
38226
38693
|
*/
|
|
@@ -38253,15 +38720,8 @@ var createShadowSpan = function (wrapper, imageSpan, imageWidth, imageHeight) {
|
|
|
38253
38720
|
var shadowRoot = imageSpan.attachShadow({
|
|
38254
38721
|
mode: 'open',
|
|
38255
38722
|
});
|
|
38256
|
-
imageSpan.id = IMAGE_EDIT_SHADOW_ROOT;
|
|
38257
|
-
// Pin the shadow host to the original image's box so that wrapping the image does not grow the
|
|
38258
|
-
// surrounding line box. Without this, the taller edit wrapper enlarges the line and the browser
|
|
38259
|
-
// scrolls the selection back into view, making the editor jump. The wrapper and handles still
|
|
38260
|
-
// overflow the host visually because overflow is left visible.
|
|
38261
38723
|
if (imageWidth > 0 && imageHeight > 0) {
|
|
38262
38724
|
imageSpan.style.display = 'inline-block';
|
|
38263
|
-
imageSpan.style.width = imageWidth + "px";
|
|
38264
|
-
imageSpan.style.height = imageHeight + "px";
|
|
38265
38725
|
imageSpan.style.verticalAlign = 'bottom';
|
|
38266
38726
|
imageSpan.style.overflow = 'visible';
|
|
38267
38727
|
}
|
|
@@ -38935,7 +39395,7 @@ function getSelectedImageMetadata(editor, image) {
|
|
|
38935
39395
|
(0, roosterjs_content_model_dom_1.mutateSegment)(selectedImage.paragraph, selectedImage === null || selectedImage === void 0 ? void 0 : selectedImage.image, function (modelImage) {
|
|
38936
39396
|
imageMetadata = updateImageEditInfo(modelImage, image);
|
|
38937
39397
|
});
|
|
38938
|
-
return
|
|
39398
|
+
return false;
|
|
38939
39399
|
}
|
|
38940
39400
|
return false;
|
|
38941
39401
|
});
|
|
@@ -39745,6 +40205,7 @@ var BulletSelector = '* > span > span[style*=mso-special-format]';
|
|
|
39745
40205
|
var MsOfficeSpecialFormat = 'mso-special-format';
|
|
39746
40206
|
var CssStyleKey = 'style';
|
|
39747
40207
|
var MsoSpecialFormatRegex = /mso-special-format:\s*([^;]*)/;
|
|
40208
|
+
var TableElementTags = new Set(['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR', 'TD', 'TH']);
|
|
39748
40209
|
var clearListItemStyles = function (format) {
|
|
39749
40210
|
delete format.textAlign;
|
|
39750
40211
|
delete format.marginLeft;
|
|
@@ -39771,7 +40232,9 @@ function processPastedContentFromPowerPoint(event, domCreator) {
|
|
|
39771
40232
|
if (style.includes(MsOfficeSpecialFormat) && context.listFormat.levels.length > 0) {
|
|
39772
40233
|
return;
|
|
39773
40234
|
}
|
|
39774
|
-
var bulletElement = element.
|
|
40235
|
+
var bulletElement = !TableElementTags.has(element.tagName)
|
|
40236
|
+
? element.querySelector(BulletSelector)
|
|
40237
|
+
: null;
|
|
39775
40238
|
if (bulletElement) {
|
|
39776
40239
|
var _c = extractPowerPointListInfo(element, bulletElement), depth = _c.depth, unorderedBulletType = _c.unorderedBulletType, orderedBulletType = _c.orderedBulletType, startNumberOverrideOrBullet_1 = _c.startNumberOverrideOrBullet, isOrderedList = _c.isOrderedList, isNewList_1 = _c.isNewList;
|
|
39777
40240
|
// Setup the listformat with the metadata extracted from the bullet element
|
|
@@ -39792,6 +40255,12 @@ function processPastedContentFromPowerPoint(event, domCreator) {
|
|
|
39792
40255
|
}
|
|
39793
40256
|
clearListItemStyles(listItem.levels[listItem.levels.length - 1].format);
|
|
39794
40257
|
clearListItemStyles(listItem.format);
|
|
40258
|
+
// When the list is inside a table cell, remove the font size from the
|
|
40259
|
+
// list marker so it does not inherit the list's font size. Otherwise a
|
|
40260
|
+
// large marker may be rendered outside of the table cell.
|
|
40261
|
+
if (element.closest('td,th')) {
|
|
40262
|
+
delete listItem.formatHolder.format.fontSize;
|
|
40263
|
+
}
|
|
39795
40264
|
});
|
|
39796
40265
|
}
|
|
39797
40266
|
else {
|