quill-table-up 3.2.2 → 3.3.1
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/LICENSE +21 -21
- package/dist/index.d.ts +18 -7
- package/dist/index.js +14 -14
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +9 -9
- package/dist/index.umd.js.map +1 -1
- package/package.json +20 -19
- package/src/__tests__/e2e/table-blots.test.ts +5 -2
- package/src/__tests__/e2e/table-keyboard-handler.test.ts +32 -24
- package/src/__tests__/e2e/table-menu.test.ts +38 -0
- package/src/__tests__/e2e/table-resize.test.ts +4 -2
- package/src/__tests__/e2e/table-scrollbar.test.ts +2 -2
- package/src/__tests__/e2e/table-selection.test.ts +48 -0
- package/src/__tests__/unit/table-cell-merge.test.ts +5 -5
- package/src/__tests__/unit/table-contenteditable.test.ts +222 -0
- package/src/__tests__/unit/table-redo-undo.test.ts +1 -1
- package/src/__tests__/unit/table-remove.test.ts +3 -3
- package/src/__tests__/unit/utils.ts +2 -2
- package/src/formats/table-cell-format.ts +2 -2
- package/src/formats/table-cell-inner-format.ts +1 -1
- package/src/formats/table-col-format.ts +3 -0
- package/src/formats/table-row-format.ts +1 -1
- package/src/modules/table-align.ts +1 -0
- package/src/modules/table-dom-selector.ts +18 -3
- package/src/modules/table-menu/table-menu-common.ts +1 -0
- package/src/modules/table-menu/table-menu-contextmenu.ts +2 -3
- package/src/modules/table-menu/table-menu-select.ts +4 -2
- package/src/modules/table-resize/table-resize-box.ts +1 -0
- package/src/modules/table-resize/table-resize-line.ts +2 -1
- package/src/modules/table-resize/table-resize-scale.ts +2 -1
- package/src/modules/table-scrollbar.ts +1 -0
- package/src/modules/table-selection.ts +5 -3
- package/src/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/src/table-up.ts +44 -2
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "quill-table-up",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "3.
|
|
5
|
-
"packageManager": "pnpm@10.
|
|
4
|
+
"version": "3.3.1",
|
|
5
|
+
"packageManager": "pnpm@10.28.2",
|
|
6
6
|
"description": "A table module for quill2.x",
|
|
7
7
|
"author": "zzxming",
|
|
8
8
|
"license": "MIT",
|
|
@@ -41,12 +41,12 @@
|
|
|
41
41
|
"quill": "^2.0.3"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@floating-ui/dom": "^1.7.
|
|
44
|
+
"@floating-ui/dom": "^1.7.5"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@babel/preset-env": "^7.
|
|
48
|
-
"@oxc-project/runtime": "^0.
|
|
49
|
-
"@playwright/test": "^1.
|
|
47
|
+
"@babel/preset-env": "^7.29.0",
|
|
48
|
+
"@oxc-project/runtime": "^0.112.0",
|
|
49
|
+
"@playwright/test": "^1.58.2",
|
|
50
50
|
"@prettier/plugin-xml": "^3.4.2",
|
|
51
51
|
"@rollup/plugin-babel": "^6.1.0",
|
|
52
52
|
"@rollup/plugin-typescript": "^12.3.0",
|
|
@@ -54,29 +54,30 @@
|
|
|
54
54
|
"@types/gulp-clean-css": "^4.3.4",
|
|
55
55
|
"@types/gulp-less": "^0.0.36",
|
|
56
56
|
"@types/gulp-postcss": "^8.0.6",
|
|
57
|
-
"@types/node": "^
|
|
57
|
+
"@types/node": "^25.2.1",
|
|
58
58
|
"@types/postcss-pxtorem": "^6.1.0",
|
|
59
59
|
"@types/ws": "^8.18.1",
|
|
60
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
61
|
-
"@typescript-eslint/parser": "^8.
|
|
62
|
-
"@vitest/coverage-v8": "^4.0.
|
|
63
|
-
"@vitest/ui": "^4.0.
|
|
64
|
-
"@zzxming/eslint-config": "0.6.
|
|
65
|
-
"autoprefixer": "^10.4.
|
|
66
|
-
"eslint": "^
|
|
60
|
+
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
|
61
|
+
"@typescript-eslint/parser": "^8.54.0",
|
|
62
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
63
|
+
"@vitest/ui": "^4.0.18",
|
|
64
|
+
"@zzxming/eslint-config": "0.6.3",
|
|
65
|
+
"autoprefixer": "^10.4.24",
|
|
66
|
+
"eslint": "^10.0.0",
|
|
67
67
|
"gulp": "^5.0.1",
|
|
68
68
|
"gulp-clean-css": "^4.3.0",
|
|
69
69
|
"gulp-less": "^5.0.0",
|
|
70
70
|
"gulp-postcss": "^10.0.0",
|
|
71
|
-
"jsdom": "^
|
|
71
|
+
"jsdom": "^28.0.0",
|
|
72
|
+
"open": "^11.0.0",
|
|
72
73
|
"parchment": "^3.0.0",
|
|
73
74
|
"postcss-pxtorem": "^6.1.0",
|
|
74
75
|
"resize-observer-polyfill": "^1.5.1",
|
|
75
|
-
"tsdown": "^0.
|
|
76
|
+
"tsdown": "^0.20.3",
|
|
76
77
|
"tslib": "^2.8.1",
|
|
77
|
-
"tsx": "^4.
|
|
78
|
+
"tsx": "^4.21.0",
|
|
78
79
|
"typescript": "~5.9.3",
|
|
79
|
-
"vitest": "^4.0.
|
|
80
|
-
"ws": "^8.
|
|
80
|
+
"vitest": "^4.0.18",
|
|
81
|
+
"ws": "^8.19.0"
|
|
81
82
|
}
|
|
82
83
|
}
|
|
@@ -56,9 +56,11 @@ extendTest.describe('test table tools should hide after table removed', () => {
|
|
|
56
56
|
editorPage.index = 0;
|
|
57
57
|
await createTableBySelect(page, 'container1', 3, 3);
|
|
58
58
|
await page.locator('#container1 .ql-editor .ql-table td').nth(0).click();
|
|
59
|
+
await page.locator('#container1 .ql-editor .ql-table td').nth(0).click({ button: 'right' });
|
|
59
60
|
await page.waitForTimeout(1000);
|
|
60
61
|
await expect(page.locator('#container1 .table-up-toolbox .table-up-selection')).toBeVisible();
|
|
61
62
|
await expect(page.locator('#container1 .table-up-toolbox .table-up-align')).toBeAttached();
|
|
63
|
+
await expect(page.locator('#container1 .table-up-menu')).toBeAttached();
|
|
62
64
|
await expect(page.locator('#container1 .table-up-toolbox .table-up-scrollbar__container')).toBeAttached();
|
|
63
65
|
await expect(page.locator('#container1 .table-up-toolbox .table-up-resize-line__col')).toBeAttached();
|
|
64
66
|
await expect(page.locator('#container1 .table-up-toolbox .table-up-resize-line__row')).toBeAttached();
|
|
@@ -67,6 +69,7 @@ extendTest.describe('test table tools should hide after table removed', () => {
|
|
|
67
69
|
await page.waitForTimeout(1000);
|
|
68
70
|
await expect(page.locator('#container1 .table-up-toolbox .table-up-selection')).not.toBeVisible();
|
|
69
71
|
await expect(page.locator('#container1 .table-up-toolbox .table-up-align')).not.toBeVisible();
|
|
72
|
+
await expect(page.locator('#container1 .table-up-menu')).not.toBeVisible();
|
|
70
73
|
await expect(page.locator('#container1 .table-up-toolbox .table-up-scrollbar__container')).not.toBeVisible();
|
|
71
74
|
await expect(page.locator('#container1 .table-up-toolbox .table-up-scrollbar__container .table-up-scrollbar.is-vertical')).not.toBeAttached();
|
|
72
75
|
await expect(page.locator('#container1 .table-up-toolbox .table-up-scrollbar__container .table-up-scrollbar.is-horizontal')).not.toBeAttached();
|
|
@@ -82,15 +85,15 @@ extendTest.describe('test table tools should hide after table removed', () => {
|
|
|
82
85
|
await page.waitForTimeout(1000);
|
|
83
86
|
await expect(page.locator('#container2 .table-up-toolbox .table-up-selection')).toBeVisible();
|
|
84
87
|
await expect(page.locator('#container2 .table-up-toolbox .table-up-align')).toBeAttached();
|
|
85
|
-
await expect(page.locator('#container2 .table-up-
|
|
88
|
+
await expect(page.locator('#container2 .table-up-menu')).toBeAttached();
|
|
86
89
|
await expect(page.locator('#container2 .table-up-toolbox .table-up-scrollbar__container')).toBeAttached();
|
|
87
90
|
await expect(page.locator('#container2 .table-up-toolbox .table-up-resize-box')).toBeAttached();
|
|
88
91
|
await expect(page.locator('#container2 .table-up-toolbox .table-up-scale')).toBeAttached();
|
|
89
92
|
await editorPage.setContents([{ insert: 'replace' }]);
|
|
90
93
|
await page.waitForTimeout(1000);
|
|
91
94
|
await expect(page.locator('#container2 .table-up-toolbox .table-up-selection')).not.toBeVisible();
|
|
92
|
-
await expect(page.locator('#container2 .table-up-toolbox .table-up-menu')).not.toBeVisible();
|
|
93
95
|
await expect(page.locator('#container2 .table-up-toolbox .table-up-align')).not.toBeVisible();
|
|
96
|
+
await expect(page.locator('#container2 .table-up-menu')).not.toBeVisible();
|
|
94
97
|
await expect(page.locator('#container2 .table-up-toolbox .table-up-scrollbar__container')).not.toBeVisible();
|
|
95
98
|
await expect(page.locator('#container1 .table-up-toolbox .table-up-scrollbar__container .table-up-scrollbar.is-vertical')).not.toBeAttached();
|
|
96
99
|
await expect(page.locator('#container1 .table-up-toolbox .table-up-scrollbar__container .table-up-scrollbar.is-horizontal')).not.toBeAttached();
|
|
@@ -439,9 +439,10 @@ extendTest.describe('TableSelection keyboard handler', () => {
|
|
|
439
439
|
const newCell1Bound = (await page.locator('#container1 .ql-table-wrapper td').nth(0).boundingBox())!;
|
|
440
440
|
expect(newCell1Bound).not.toBeNull();
|
|
441
441
|
await page.locator('#container1 .ql-table-wrapper td').nth(0).click();
|
|
442
|
-
page.mouse.move(newCell1Bound.x + newCell1Bound.width * 0.5, newCell1Bound.y + newCell1Bound.height * 0.5);
|
|
443
|
-
page.mouse.down();
|
|
444
|
-
page.mouse.move(newCell1Bound.x + newCell1Bound.width * 1.5, newCell1Bound.y + newCell1Bound.height * 1.5);
|
|
442
|
+
await page.mouse.move(newCell1Bound.x + newCell1Bound.width * 0.5, newCell1Bound.y + newCell1Bound.height * 0.5);
|
|
443
|
+
await page.mouse.down();
|
|
444
|
+
await page.mouse.move(newCell1Bound.x + newCell1Bound.width * 1.5, newCell1Bound.y + newCell1Bound.height * 1.5);
|
|
445
|
+
await page.mouse.up();
|
|
445
446
|
|
|
446
447
|
await editorPage.blur();
|
|
447
448
|
await pasteHTML(page, '<div class="ql-table-wrapper" data-table-id="1" contenteditable="false"><table class="ql-table" data-table-id="1" cellpadding="0" cellspacing="0" style="margin-right: auto; width: 200px;"><colgroup data-table-id="1" contenteditable="false"><col width="100px" data-table-id="1" data-col-id="1"><col width="100px" data-table-id="1" data-col-id="2"></colgroup><tbody data-table-id="1"><tr class="ql-table-row" data-table-id="1" data-row-id="1" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="1" data-row-id="1" data-col-id="1" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="1" data-row-id="1" data-col-id="1" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>1</p></div></td><td class="ql-table-cell" data-table-id="1" data-row-id="1" data-col-id="2" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="1" data-row-id="1" data-col-id="2" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>2</p></div></td></tr><tr class="ql-table-row" data-table-id="1" data-row-id="2" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="1" data-row-id="2" data-col-id="1" data-wrap-tag="tbody" rowspan="1" colspan="2"><div class="ql-table-cell-inner" data-table-id="1" data-row-id="2" data-col-id="1" data-rowspan="1" data-colspan="2" data-tag="td" data-wrap-tag="tbody"><p>4</p><p>5</p></div></td></tr></tbody></table></div>', { browserName });
|
|
@@ -461,9 +462,10 @@ extendTest.describe('TableSelection keyboard handler', () => {
|
|
|
461
462
|
const newCell1Bound = (await page.locator('#container1 .ql-table-wrapper td').nth(0).boundingBox())!;
|
|
462
463
|
expect(newCell1Bound).not.toBeNull();
|
|
463
464
|
await page.locator('#container1 .ql-table-wrapper td').nth(0).click();
|
|
464
|
-
page.mouse.move(newCell1Bound.x + newCell1Bound.width * 0.5, newCell1Bound.y + newCell1Bound.height * 0.5);
|
|
465
|
-
page.mouse.down();
|
|
466
|
-
page.mouse.move(newCell1Bound.x + newCell1Bound.width * 2.5, newCell1Bound.y + newCell1Bound.height * 1.5);
|
|
465
|
+
await page.mouse.move(newCell1Bound.x + newCell1Bound.width * 0.5, newCell1Bound.y + newCell1Bound.height * 0.5);
|
|
466
|
+
await page.mouse.down();
|
|
467
|
+
await page.mouse.move(newCell1Bound.x + newCell1Bound.width * 2.5, newCell1Bound.y + newCell1Bound.height * 1.5);
|
|
468
|
+
await page.mouse.up();
|
|
467
469
|
|
|
468
470
|
await editorPage.blur();
|
|
469
471
|
await pasteHTML(page, '<div class="ql-table-wrapper" data-table-id="1" contenteditable="false"><table class="ql-table" data-table-id="1" cellpadding="0" cellspacing="0" style="margin-right: auto; width: 240px;"><colgroup data-table-id="1" contenteditable="false"><col width="80px" data-table-id="1" data-col-id="1"><col width="80px" data-table-id="1" data-col-id="2"><col width="80px" data-table-id="1" data-col-id="3"></colgroup><tbody data-table-id="1"><tr class="ql-table-row" data-table-id="1" data-row-id="1" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="1" data-row-id="1" data-col-id="1" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="1" data-row-id="1" data-col-id="1" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>1</p></div></td><td class="ql-table-cell" data-table-id="1" data-row-id="1" data-col-id="2" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="1" data-row-id="1" data-col-id="2" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>2</p></div></td><td class="ql-table-cell" data-table-id="1" data-row-id="1" data-col-id="3" data-wrap-tag="tbody" rowspan="2" colspan="1"><div class="ql-table-cell-inner" data-table-id="1" data-row-id="1" data-col-id="3" data-rowspan="2" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>3</p><p>8</p></div></td></tr><tr class="ql-table-row" data-table-id="1" data-row-id="2" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="1" data-row-id="2" data-col-id="1" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="1" data-row-id="2" data-col-id="1" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>6</p></div></td><td class="ql-table-cell" data-table-id="1" data-row-id="2" data-col-id="2" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="1" data-row-id="2" data-col-id="2" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>7</p></div></td></tr></tbody></table></div>', { browserName });
|
|
@@ -485,9 +487,10 @@ extendTest.describe('TableSelection keyboard handler', () => {
|
|
|
485
487
|
const newCell1Bound = (await page.locator('#container1 .ql-table-wrapper td').nth(0).boundingBox())!;
|
|
486
488
|
expect(newCell1Bound).not.toBeNull();
|
|
487
489
|
await page.locator('#container1 .ql-table-wrapper td').nth(0).click();
|
|
488
|
-
page.mouse.move(newCell1Bound.x + newCell1Bound.width * 0.5, newCell1Bound.y + newCell1Bound.height * 0.5);
|
|
489
|
-
page.mouse.down();
|
|
490
|
-
page.mouse.move(newCell1Bound.x + newCell1Bound.width * 2.5, newCell1Bound.y + newCell1Bound.height * 1.5);
|
|
490
|
+
await page.mouse.move(newCell1Bound.x + newCell1Bound.width * 0.5, newCell1Bound.y + newCell1Bound.height * 0.5);
|
|
491
|
+
await page.mouse.down();
|
|
492
|
+
await page.mouse.move(newCell1Bound.x + newCell1Bound.width * 2.5, newCell1Bound.y + newCell1Bound.height * 1.5);
|
|
493
|
+
await page.mouse.up();
|
|
491
494
|
|
|
492
495
|
await editorPage.blur();
|
|
493
496
|
await pasteHTML(page, '<div class="ql-table-wrapper" data-table-id="1" contenteditable="false"><table class="ql-table" data-table-id="1" cellpadding="0" cellspacing="0" style="margin-right: auto; width: 363px;"><colgroup data-table-id="1" contenteditable="false"><col width="121px" data-table-id="1" data-col-id="1"><col width="121px" data-table-id="1" data-col-id="2"><col width="121px" data-table-id="1" data-col-id="3"></colgroup><tbody data-table-id="1"><tr class="ql-table-row" data-table-id="1" data-row-id="2" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="1" data-row-id="2" data-col-id="1" data-wrap-tag="tbody" rowspan="1" colspan="2"><div class="ql-table-cell-inner" data-table-id="1" data-row-id="2" data-col-id="1" data-rowspan="1" data-colspan="2" data-tag="td" data-wrap-tag="tbody"><p>4</p><p>5</p></div></td><td class="ql-table-cell" data-table-id="1" data-row-id="2" data-col-id="3" data-wrap-tag="tbody" rowspan="2" colspan="1"><div class="ql-table-cell-inner" data-table-id="1" data-row-id="2" data-col-id="3" data-rowspan="2" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>6</p><p>9</p></div></td></tr><tr class="ql-table-row" data-table-id="1" data-row-id="3" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="1" data-row-id="3" data-col-id="1" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="1" data-row-id="3" data-col-id="1" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>7</p></div></td><td class="ql-table-cell" data-table-id="1" data-row-id="3" data-col-id="2" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="1" data-row-id="3" data-col-id="2" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>8</p></div></td></tr></tbody></table></div>', { browserName });
|
|
@@ -509,9 +512,10 @@ extendTest.describe('TableSelection keyboard handler', () => {
|
|
|
509
512
|
const newCell1Bound = (await page.locator('#container1 .ql-table-wrapper td').nth(0).boundingBox())!;
|
|
510
513
|
expect(newCell1Bound).not.toBeNull();
|
|
511
514
|
await page.locator('#container1 .ql-table-wrapper td').nth(0).click();
|
|
512
|
-
page.mouse.move(newCell1Bound.x + newCell1Bound.width * 0.5, newCell1Bound.y + newCell1Bound.height * 0.5);
|
|
513
|
-
page.mouse.down();
|
|
514
|
-
page.mouse.move(newCell1Bound.x + newCell1Bound.width * 4.5, newCell1Bound.y + newCell1Bound.height * 2.5);
|
|
515
|
+
await page.mouse.move(newCell1Bound.x + newCell1Bound.width * 0.5, newCell1Bound.y + newCell1Bound.height * 0.5);
|
|
516
|
+
await page.mouse.down();
|
|
517
|
+
await page.mouse.move(newCell1Bound.x + newCell1Bound.width * 4.5, newCell1Bound.y + newCell1Bound.height * 2.5);
|
|
518
|
+
await page.mouse.up();
|
|
515
519
|
await editorPage.blur();
|
|
516
520
|
await pasteHTML(page, '<div class="ql-table-wrapper" data-table-id="j89168rvqrd" contenteditable="false"><table class="ql-table" data-table-id="j89168rvqrd" cellpadding="0" cellspacing="0" style="margin-right: auto; width: 730px;"><colgroup data-table-id="j89168rvqrd" contenteditable="false"><col width="146px" data-table-id="j89168rvqrd" data-col-id="i3bpg2i2oy"><col width="146px" data-table-id="j89168rvqrd" data-col-id="lpwv9bfkdxe"><col width="146px" data-table-id="j89168rvqrd" data-col-id="9oopcw7mbfq"><col width="146px" data-table-id="j89168rvqrd" data-col-id="ejdvsjml25"><col width="146px" data-table-id="j89168rvqrd" data-col-id="nialr8ceyks"></colgroup><tbody data-table-id="j89168rvqrd"><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="m8wb3vitcit" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="m8wb3vitcit" data-col-id="i3bpg2i2oy" data-wrap-tag="tbody" rowspan="3" colspan="5" data-empty-row="["v4r34a160is","n73z32w0t9l"]"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="m8wb3vitcit" data-col-id="i3bpg2i2oy" data-rowspan="3" data-colspan="5" data-tag="td" data-wrap-tag="tbody" data-empty-row="["v4r34a160is","n73z32w0t9l"]"><p></p></div></td></tr><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="v4r34a160is" data-wrap-tag="tbody"></tr><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="n73z32w0t9l" data-wrap-tag="tbody"></tr></tbody></table></div>', { browserName });
|
|
517
521
|
const cell1 = page.locator('#container1 .ql-table-wrapper td').nth(0);
|
|
@@ -523,9 +527,10 @@ extendTest.describe('TableSelection keyboard handler', () => {
|
|
|
523
527
|
const newCell2Bound = (await page.locator('#container1 .ql-table-wrapper td').nth(0).boundingBox())!;
|
|
524
528
|
expect(newCell2Bound).not.toBeNull();
|
|
525
529
|
await page.locator('#container1 .ql-table-wrapper td').nth(0).click();
|
|
526
|
-
page.mouse.move(newCell2Bound.x + newCell2Bound.width * 0.5, newCell2Bound.y + newCell2Bound.height * 0.5);
|
|
527
|
-
page.mouse.down();
|
|
528
|
-
page.mouse.move(newCell2Bound.x + newCell2Bound.width * 4.5, newCell2Bound.y + newCell2Bound.height * 3.5);
|
|
530
|
+
await page.mouse.move(newCell2Bound.x + newCell2Bound.width * 0.5, newCell2Bound.y + newCell2Bound.height * 0.5);
|
|
531
|
+
await page.mouse.down();
|
|
532
|
+
await page.mouse.move(newCell2Bound.x + newCell2Bound.width * 4.5, newCell2Bound.y + newCell2Bound.height * 3.5);
|
|
533
|
+
await page.mouse.up();
|
|
529
534
|
await editorPage.blur();
|
|
530
535
|
await pasteHTML(page, '<div class="ql-table-wrapper" data-table-id="j89168rvqrd" contenteditable="false"><table class="ql-table" data-table-id="j89168rvqrd" cellpadding="0" cellspacing="0" style="margin-right: auto; width: 730px;"><colgroup data-table-id="j89168rvqrd" contenteditable="false"><col width="146px" data-table-id="j89168rvqrd" data-col-id="i3bpg2i2oy"><col width="146px" data-table-id="j89168rvqrd" data-col-id="lpwv9bfkdxe"><col width="146px" data-table-id="j89168rvqrd" data-col-id="9oopcw7mbfq"><col width="146px" data-table-id="j89168rvqrd" data-col-id="ejdvsjml25"><col width="146px" data-table-id="j89168rvqrd" data-col-id="nialr8ceyks"></colgroup><tbody data-table-id="j89168rvqrd"><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="m8wb3vitcit" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="m8wb3vitcit" data-col-id="i3bpg2i2oy" data-wrap-tag="tbody" rowspan="3" colspan="5" data-empty-row="["v4r34a160is","n73z32w0t9l"]" style="height: 49px;"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="m8wb3vitcit" data-col-id="i3bpg2i2oy" data-rowspan="3" data-colspan="5" data-tag="td" data-wrap-tag="tbody" data-empty-row="["v4r34a160is","n73z32w0t9l"]" data-style="height: 49px;"><p></p></div></td></tr><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="v4r34a160is" data-wrap-tag="tbody"></tr><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="n73z32w0t9l" data-wrap-tag="tbody"></tr><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="i3bpg2i2oy" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="i3bpg2i2oy" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p></p></div></td><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="lpwv9bfkdxe" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="lpwv9bfkdxe" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p></p></div></td><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="9oopcw7mbfq" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="9oopcw7mbfq" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p></p></div></td><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="ejdvsjml25" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="ejdvsjml25" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p></p></div></td><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="nialr8ceyks" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="nialr8ceyks" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p></p></div></td></tr></tbody></table></div>', { browserName });
|
|
531
536
|
const cell2 = page.locator('#container1 .ql-table-wrapper td').nth(0);
|
|
@@ -541,9 +546,10 @@ extendTest.describe('TableSelection keyboard handler', () => {
|
|
|
541
546
|
const newCell1Bound = (await page.locator('#container5 .ql-table-wrapper td').nth(0).boundingBox())!;
|
|
542
547
|
expect(newCell1Bound).not.toBeNull();
|
|
543
548
|
await page.locator('#container5 .ql-table-wrapper td').nth(0).click();
|
|
544
|
-
page.mouse.move(newCell1Bound.x + newCell1Bound.width * 0.5, newCell1Bound.y + newCell1Bound.height * 0.5);
|
|
545
|
-
page.mouse.down();
|
|
546
|
-
page.mouse.move(newCell1Bound.x + newCell1Bound.width * 4.5, newCell1Bound.y + newCell1Bound.height * 2.5);
|
|
549
|
+
await page.mouse.move(newCell1Bound.x + newCell1Bound.width * 0.5, newCell1Bound.y + newCell1Bound.height * 0.5);
|
|
550
|
+
await page.mouse.down();
|
|
551
|
+
await page.mouse.move(newCell1Bound.x + newCell1Bound.width * 4.5, newCell1Bound.y + newCell1Bound.height * 2.5);
|
|
552
|
+
await page.mouse.up();
|
|
547
553
|
await editorPage.blur();
|
|
548
554
|
await pasteHTML(page, '<div class="ql-table-wrapper" data-table-id="j89168rvqrd" contenteditable="false"><table class="ql-table" data-table-id="j89168rvqrd" cellpadding="0" cellspacing="0" style="margin-right: auto; width: 730px;"><colgroup data-table-id="j89168rvqrd" contenteditable="false"><col width="146px" data-table-id="j89168rvqrd" data-col-id="i3bpg2i2oy"><col width="146px" data-table-id="j89168rvqrd" data-col-id="lpwv9bfkdxe"><col width="146px" data-table-id="j89168rvqrd" data-col-id="9oopcw7mbfq"><col width="146px" data-table-id="j89168rvqrd" data-col-id="ejdvsjml25"><col width="146px" data-table-id="j89168rvqrd" data-col-id="nialr8ceyks"></colgroup><tbody data-table-id="j89168rvqrd"><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="m8wb3vitcit" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="m8wb3vitcit" data-col-id="i3bpg2i2oy" data-wrap-tag="tbody" rowspan="3" colspan="5" data-empty-row="["v4r34a160is","n73z32w0t9l"]"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="m8wb3vitcit" data-col-id="i3bpg2i2oy" data-rowspan="3" data-colspan="5" data-tag="td" data-wrap-tag="tbody" data-empty-row="["v4r34a160is","n73z32w0t9l"]"><p></p></div></td></tr><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="v4r34a160is" data-wrap-tag="tbody"></tr><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="n73z32w0t9l" data-wrap-tag="tbody"></tr></tbody></table></div>', { browserName });
|
|
549
555
|
const cell1 = page.locator('#container5 .ql-table-wrapper td').nth(0);
|
|
@@ -564,9 +570,10 @@ extendTest.describe('TableSelection keyboard handler', () => {
|
|
|
564
570
|
const newCell2Bound = (await page.locator('#container5 .ql-table-wrapper td').nth(0).boundingBox())!;
|
|
565
571
|
expect(newCell2Bound).not.toBeNull();
|
|
566
572
|
await page.locator('#container5 .ql-table-wrapper td').nth(0).click();
|
|
567
|
-
page.mouse.move(newCell2Bound.x + newCell2Bound.width * 0.5, newCell2Bound.y + newCell2Bound.height * 0.5);
|
|
568
|
-
page.mouse.down();
|
|
569
|
-
page.mouse.move(newCell2Bound.x + newCell2Bound.width * 4.5, newCell2Bound.y + newCell2Bound.height * 3.5);
|
|
573
|
+
await page.mouse.move(newCell2Bound.x + newCell2Bound.width * 0.5, newCell2Bound.y + newCell2Bound.height * 0.5);
|
|
574
|
+
await page.mouse.down();
|
|
575
|
+
await page.mouse.move(newCell2Bound.x + newCell2Bound.width * 4.5, newCell2Bound.y + newCell2Bound.height * 3.5);
|
|
576
|
+
await page.mouse.up();
|
|
570
577
|
await editorPage.blur();
|
|
571
578
|
await pasteHTML(page, '<div class="ql-table-wrapper" data-table-id="j89168rvqrd" contenteditable="false"><table class="ql-table" data-table-id="j89168rvqrd" cellpadding="0" cellspacing="0" style="margin-right: auto; width: 730px;"><colgroup data-table-id="j89168rvqrd" contenteditable="false"><col width="146px" data-table-id="j89168rvqrd" data-col-id="i3bpg2i2oy"><col width="146px" data-table-id="j89168rvqrd" data-col-id="lpwv9bfkdxe"><col width="146px" data-table-id="j89168rvqrd" data-col-id="9oopcw7mbfq"><col width="146px" data-table-id="j89168rvqrd" data-col-id="ejdvsjml25"><col width="146px" data-table-id="j89168rvqrd" data-col-id="nialr8ceyks"></colgroup><tbody data-table-id="j89168rvqrd"><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="m8wb3vitcit" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="m8wb3vitcit" data-col-id="i3bpg2i2oy" data-wrap-tag="tbody" rowspan="3" colspan="5" data-empty-row="["v4r34a160is","n73z32w0t9l"]" style="height: 49px;"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="m8wb3vitcit" data-col-id="i3bpg2i2oy" data-rowspan="3" data-colspan="5" data-tag="td" data-wrap-tag="tbody" data-empty-row="["v4r34a160is","n73z32w0t9l"]" data-style="height: 49px;"><p></p></div></td></tr><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="v4r34a160is" data-wrap-tag="tbody"></tr><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="n73z32w0t9l" data-wrap-tag="tbody"></tr><tr class="ql-table-row" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="i3bpg2i2oy" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="i3bpg2i2oy" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p></p></div></td><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="lpwv9bfkdxe" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="lpwv9bfkdxe" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p></p></div></td><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="9oopcw7mbfq" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="9oopcw7mbfq" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p></p></div></td><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="ejdvsjml25" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="ejdvsjml25" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p></p></div></td><td class="ql-table-cell" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="nialr8ceyks" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="j89168rvqrd" data-row-id="rfiuu54tyn" data-col-id="nialr8ceyks" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p></p></div></td></tr></tbody></table></div>', { browserName });
|
|
572
579
|
const cell2 = page.locator('#container5 .ql-table-wrapper td').nth(0);
|
|
@@ -591,9 +598,10 @@ extendTest.describe('TableSelection keyboard handler', () => {
|
|
|
591
598
|
const newCell1Bound = (await page.locator('#container5 .ql-table-wrapper td').nth(0).boundingBox())!;
|
|
592
599
|
expect(newCell1Bound).not.toBeNull();
|
|
593
600
|
await page.locator('#container5 .ql-table-wrapper td').nth(0).click();
|
|
594
|
-
page.mouse.move(newCell1Bound.x + newCell1Bound.width * 0.5, newCell1Bound.y + newCell1Bound.height * 0.5);
|
|
595
|
-
page.mouse.down();
|
|
596
|
-
page.mouse.move(newCell1Bound.x + newCell1Bound.width * 2.5, newCell1Bound.y + newCell1Bound.height * 1.5);
|
|
601
|
+
await page.mouse.move(newCell1Bound.x + newCell1Bound.width * 0.5, newCell1Bound.y + newCell1Bound.height * 0.5);
|
|
602
|
+
await page.mouse.down();
|
|
603
|
+
await page.mouse.move(newCell1Bound.x + newCell1Bound.width * 2.5, newCell1Bound.y + newCell1Bound.height * 1.5);
|
|
604
|
+
await page.mouse.up();
|
|
597
605
|
await editorPage.blur();
|
|
598
606
|
await pasteHTML(page, `<div class="ql-table-wrapper" data-table-id="bein21b5pui" contenteditable="false"><table class="ql-table" data-table-id="bein21b5pui" cellpadding="0" cellspacing="0" style="margin-right: auto; width: 444px;"><colgroup data-table-id="bein21b5pui" contenteditable="false"><col width="142px" data-table-id="bein21b5pui" data-col-id="481dzooan6g"><col width="159px" data-table-id="bein21b5pui" data-col-id="hz2gh55d0ib"><col width="143px" data-table-id="bein21b5pui" data-col-id="feqmvzorecq"></colgroup><tbody data-table-id="bein21b5pui"><tr class="ql-table-row" data-table-id="bein21b5pui" data-row-id="ge4p39olq3t" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="bein21b5pui" data-row-id="ge4p39olq3t" data-col-id="481dzooan6g" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="bein21b5pui" data-row-id="ge4p39olq3t" data-col-id="481dzooan6g" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>1</p></div></td><td class="ql-table-cell" data-table-id="bein21b5pui" data-row-id="ge4p39olq3t" data-col-id="hz2gh55d0ib" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="bein21b5pui" data-row-id="ge4p39olq3t" data-col-id="hz2gh55d0ib" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>2<strong>123</strong>4</p><pre data-language="plain">www
|
|
599
607
|
</pre></div></td><td class="ql-table-cell" data-table-id="bein21b5pui" data-row-id="ge4p39olq3t" data-col-id="feqmvzorecq" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="bein21b5pui" data-row-id="ge4p39olq3t" data-col-id="feqmvzorecq" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><h1>3</h1></div></td></tr><tr class="ql-table-row" data-table-id="bein21b5pui" data-row-id="nvid3wj1n3" data-wrap-tag="tbody"><td class="ql-table-cell" data-table-id="bein21b5pui" data-row-id="nvid3wj1n3" data-col-id="481dzooan6g" data-wrap-tag="tbody" rowspan="1" colspan="2"><div class="ql-table-cell-inner" data-table-id="bein21b5pui" data-row-id="nvid3wj1n3" data-col-id="481dzooan6g" data-rowspan="1" data-colspan="2" data-tag="td" data-wrap-tag="tbody"><ol><li>4</li><li>5</li></ol><p></p></div></td><td class="ql-table-cell" data-table-id="bein21b5pui" data-row-id="nvid3wj1n3" data-col-id="feqmvzorecq" data-wrap-tag="tbody" rowspan="1" colspan="1"><div class="ql-table-cell-inner" data-table-id="bein21b5pui" data-row-id="nvid3wj1n3" data-col-id="feqmvzorecq" data-rowspan="1" data-colspan="1" data-tag="td" data-wrap-tag="tbody"><p>6</p></div></td></tr></tbody></table></div>`, { browserName });
|
|
@@ -170,3 +170,41 @@ extendTest('table width switch should work', async ({ page }) => {
|
|
|
170
170
|
await page.locator('.table-up-menu.is-contextmenu .table-up-menu__item').filter({ hasText: 'Switch table width' }).first().click();
|
|
171
171
|
expect(await page.locator('#editor1 .ql-editor .ql-table col:not([data-full])').count()).toBe(4);
|
|
172
172
|
});
|
|
173
|
+
|
|
174
|
+
test.describe('contextmenu behavior', () => {
|
|
175
|
+
extendTest('should show custom menu when cell is selected', async ({ page }) => {
|
|
176
|
+
await createTableBySelect(page, 'container1', 3, 3);
|
|
177
|
+
|
|
178
|
+
const cell = page.locator('#editor1 .ql-editor .ql-table td').nth(0);
|
|
179
|
+
await cell.click();
|
|
180
|
+
await expect(page.locator('#container1 .table-up-toolbox .table-up-selection .table-up-selection__line')).toBeVisible();
|
|
181
|
+
|
|
182
|
+
await cell.click({ button: 'right' });
|
|
183
|
+
await expect(page.locator('.table-up-menu.is-contextmenu')).toBeVisible();
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
extendTest('should not show custom menu when right-click on table without selection', async ({ page }) => {
|
|
187
|
+
await createTableBySelect(page, 'container1', 3, 3);
|
|
188
|
+
|
|
189
|
+
const cell = page.locator('#editor1 .ql-editor .ql-table td').nth(0);
|
|
190
|
+
|
|
191
|
+
// Deselect by clicking elsewhere
|
|
192
|
+
await page.locator('#editor1 .ql-editor > p').first().click();
|
|
193
|
+
await expect(page.locator('#container1 .table-up-toolbox .table-up-selection .table-up-selection__line')).not.toBeVisible();
|
|
194
|
+
|
|
195
|
+
// Right-click on table without selection
|
|
196
|
+
await cell.click({ button: 'right' });
|
|
197
|
+
await expect(page.locator('.table-up-menu.is-contextmenu')).not.toBeVisible();
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
extendTest('should not show custom menu when right-click outside table', async ({ page }) => {
|
|
201
|
+
await createTableBySelect(page, 'container1', 3, 3);
|
|
202
|
+
|
|
203
|
+
const editorParagraph = page.locator('#editor1 .ql-editor > p').first();
|
|
204
|
+
await editorParagraph.click();
|
|
205
|
+
|
|
206
|
+
const paragraphBox = (await editorParagraph.boundingBox())!;
|
|
207
|
+
await page.mouse.click(paragraphBox.x + 10, paragraphBox.y + 10, { button: 'right' });
|
|
208
|
+
await expect(page.locator('.table-up-menu.is-contextmenu')).not.toBeVisible();
|
|
209
|
+
});
|
|
210
|
+
});
|
|
@@ -166,7 +166,7 @@ extendTest('TableResize on full width should not outer 100%', async ({ page, edi
|
|
|
166
166
|
for (let i = 0; i < colCount; i++) {
|
|
167
167
|
width += Number.parseFloat((await cols.nth(i).getAttribute('width'))!);
|
|
168
168
|
}
|
|
169
|
-
expect(width).toBeCloseTo(100,
|
|
169
|
+
expect(width).toBeCloseTo(100, 2);
|
|
170
170
|
});
|
|
171
171
|
|
|
172
172
|
extendTest.describe('TableResizeScale functional', () => {
|
|
@@ -282,8 +282,10 @@ extendTest.describe('TableResizeScale functional', () => {
|
|
|
282
282
|
await page.locator('#editor1 .ql-table-wrapper').evaluate((el) => {
|
|
283
283
|
el.scrollLeft = el.scrollWidth;
|
|
284
284
|
});
|
|
285
|
+
// Wait for scroll to complete
|
|
286
|
+
await page.waitForTimeout(100);
|
|
285
287
|
const scrollBlockBounding = (await block.boundingBox())!;
|
|
286
|
-
expect(scrollBlockBounding.x + scrollBlockBounding.width).toBeLessThanOrEqual(scaleWrapperBounding.x + scaleWrapperBounding.width);
|
|
288
|
+
expect(scrollBlockBounding.x + scrollBlockBounding.width).toBeLessThanOrEqual(scaleWrapperBounding.x + scaleWrapperBounding.width + 1); // Add 1px tolerance for floating point precision
|
|
287
289
|
});
|
|
288
290
|
});
|
|
289
291
|
|
|
@@ -99,12 +99,12 @@ extendTest('test TableScrollbar should not effect selection', async ({ page, edi
|
|
|
99
99
|
await page.mouse.move(bound.x + bound.width / 2, bound.y + bound.height / 2);
|
|
100
100
|
await page.mouse.down();
|
|
101
101
|
expect(await page.evaluate(() => {
|
|
102
|
-
return document.onselectstart
|
|
102
|
+
return document.onselectstart?.(new Event('selectstart')) === false;
|
|
103
103
|
})).toBe(true);
|
|
104
104
|
|
|
105
105
|
await page.mouse.up();
|
|
106
106
|
expect(await page.evaluate(() => {
|
|
107
|
-
return !document.onselectstart || (document.onselectstart
|
|
107
|
+
return !document.onselectstart || (document.onselectstart?.(new Event('selectstart')) === true);
|
|
108
108
|
})).toBe(true);
|
|
109
109
|
});
|
|
110
110
|
|
|
@@ -425,6 +425,54 @@ extendTest('TableSelection should not update when input composition', async ({ p
|
|
|
425
425
|
expect(composingBounding).toEqual(bounding);
|
|
426
426
|
});
|
|
427
427
|
|
|
428
|
+
extendTest('TableSelection should allow text selection when editor is not editable', async ({ page, editorPage }) => {
|
|
429
|
+
editorPage.index = 0;
|
|
430
|
+
await editorPage.setContents([
|
|
431
|
+
{ insert: '\n' },
|
|
432
|
+
{ insert: { 'table-up-col': { tableId: '1', colId: '1', full: false, width: 150 } } },
|
|
433
|
+
{ insert: { 'table-up-col': { tableId: '1', colId: '2', full: false, width: 150 } } },
|
|
434
|
+
{ insert: 'Hello World' },
|
|
435
|
+
{ attributes: { 'table-up-cell-inner': { tableId: '1', rowId: '1', colId: '1', rowspan: 1, colspan: 1 } }, insert: '\n' },
|
|
436
|
+
{ insert: 'Test Content' },
|
|
437
|
+
{ attributes: { 'table-up-cell-inner': { tableId: '1', rowId: '1', colId: '2', rowspan: 1, colspan: 1 } }, insert: '\n' },
|
|
438
|
+
{ insert: '\n' },
|
|
439
|
+
]);
|
|
440
|
+
await page.waitForTimeout(500);
|
|
441
|
+
|
|
442
|
+
// Disable editor (set contenteditable to false)
|
|
443
|
+
await editorPage.enable(false);
|
|
444
|
+
await page.waitForTimeout(100);
|
|
445
|
+
|
|
446
|
+
// Verify editor is not editable
|
|
447
|
+
const isEditable = await page.locator('#editor1 .ql-editor').getAttribute('contenteditable');
|
|
448
|
+
expect(isEditable).toBe('false');
|
|
449
|
+
|
|
450
|
+
// Get two cells with text content
|
|
451
|
+
const cell0 = page.locator('#editor1 .ql-editor td').nth(0);
|
|
452
|
+
const cell1 = page.locator('#editor1 .ql-editor td').nth(1);
|
|
453
|
+
const cell0Bounding = (await cell0.boundingBox())!;
|
|
454
|
+
const cell1Bounding = (await cell1.boundingBox())!;
|
|
455
|
+
expect(cell0Bounding).not.toBeNull();
|
|
456
|
+
expect(cell1Bounding).not.toBeNull();
|
|
457
|
+
|
|
458
|
+
// Perform text selection by dragging from first cell to second cell
|
|
459
|
+
await page.mouse.move(cell0Bounding.x + 5, cell0Bounding.y + cell0Bounding.height / 2);
|
|
460
|
+
await page.mouse.down();
|
|
461
|
+
await page.mouse.move(cell1Bounding.x + 5, cell1Bounding.y + cell1Bounding.height * 2);
|
|
462
|
+
await page.mouse.up();
|
|
463
|
+
|
|
464
|
+
// Verify that text can be selected across cells (native selection should work)
|
|
465
|
+
const selectedText = await page.evaluate(() => {
|
|
466
|
+
const selection = window.getSelection();
|
|
467
|
+
return selection?.toString() || '';
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
// Should be able to select text content across multiple cells in non-editable mode
|
|
471
|
+
expect(selectedText.length).toBeGreaterThan(0);
|
|
472
|
+
expect(selectedText).toContain('Hello');
|
|
473
|
+
expect(selectedText).toContain('Test');
|
|
474
|
+
});
|
|
475
|
+
|
|
428
476
|
extendTest.describe('TableSelection should work correct when wrapper scroll', () => {
|
|
429
477
|
extendTest('TableSelection in quill root scroll', async ({ page, editorPage }) => {
|
|
430
478
|
editorPage.index = 0;
|
|
@@ -28,7 +28,7 @@ describe('merge and split cell', () => {
|
|
|
28
28
|
<div>
|
|
29
29
|
<table cellpadding="0" cellspacing="0" data-full="true">
|
|
30
30
|
<colgroup data-full="true">
|
|
31
|
-
${new Array(3).fill(0).map(() => `<col width="
|
|
31
|
+
${new Array(3).fill(0).map(() => `<col width="33.3333%" data-full="true" />`).join('\n')}
|
|
32
32
|
</colgroup>
|
|
33
33
|
<tbody>
|
|
34
34
|
<tr>
|
|
@@ -113,9 +113,9 @@ describe('merge and split cell', () => {
|
|
|
113
113
|
<div>
|
|
114
114
|
<table cellpadding="0" cellspacing="0" data-full="true">
|
|
115
115
|
<colgroup data-full="true">
|
|
116
|
-
${new Array(4).fill(0).map(() => `<col width="
|
|
117
|
-
<col width="
|
|
118
|
-
<col width="
|
|
116
|
+
${new Array(4).fill(0).map(() => `<col width="14.2857%" data-full="true" />`).join('\n')}
|
|
117
|
+
<col width="28.5714%" data-full="true" />
|
|
118
|
+
<col width="14.2857%" data-full="true" />
|
|
119
119
|
</colgroup>
|
|
120
120
|
<tbody>
|
|
121
121
|
<tr>
|
|
@@ -178,7 +178,7 @@ describe('merge and split cell', () => {
|
|
|
178
178
|
<div>
|
|
179
179
|
<table cellpadding="0" cellspacing="0" data-full="true">
|
|
180
180
|
<colgroup data-full="true">
|
|
181
|
-
${new Array(3).fill(0).map(() => `<col width="
|
|
181
|
+
${new Array(3).fill(0).map(() => `<col width="33.3333%" data-full="true" />`).join('\n')}
|
|
182
182
|
</colgroup>
|
|
183
183
|
<tbody>
|
|
184
184
|
<tr>
|