From 2ef5409b5e12aaae243fb8e14a63b79ab98d6d76 Mon Sep 17 00:00:00 2001 From: Ruslan Farkhutdinov Date: Mon, 16 Feb 2026 16:03:36 +0200 Subject: [PATCH 1/3] HTMLEditor: Fix nested numbered list counter resetting (T1320286) --- .../scss/widgets/base/_htmlEditor.scss | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/devextreme-scss/scss/widgets/base/_htmlEditor.scss b/packages/devextreme-scss/scss/widgets/base/_htmlEditor.scss index bb4d980eca6a..01654a19b914 100644 --- a/packages/devextreme-scss/scss/widgets/base/_htmlEditor.scss +++ b/packages/devextreme-scss/scss/widgets/base/_htmlEditor.scss @@ -24,6 +24,14 @@ $transparent-border: 1px solid transparent; @return list-#{$counter}; } +@function add-counter-set($counter, $start: 1) { + @if $counter > $start { + @return add-counter-set($counter - 1, $start) + " " + list-#{$counter} + " 0"; + } + + @return list-#{$counter} + " 0"; +} + @mixin if-less-then-max-indent($value) { @if $value < $max-indent { li.ql-indent-#{$value} { @@ -196,7 +204,11 @@ $transparent-border: 1px solid transparent; padding: 2px 5px; } - ol, + ol { + padding-inline-start: 1.5em; + counter-reset: add-counter-reset($max-indent); + } + ul { padding-inline-start: 1.5em; } @@ -240,7 +252,6 @@ $transparent-border: 1px solid transparent; } li[data-list="ordered"] { - counter-reset: add-counter-reset($max-indent); counter-increment: list-0; &::before { @@ -248,6 +259,10 @@ $transparent-border: 1px solid transparent; } } + li[data-list="ordered"]:not([class*="ql-indent"]) { + counter-set: add-counter-set($max-indent); + } + @include add-counter($max-indent); @include add-indent-styles($max-indent); From 781fb257c916d395c035bd14dcc3165d2822578d Mon Sep 17 00:00:00 2001 From: Ruslan Farkhutdinov Date: Mon, 16 Feb 2026 17:17:56 +0200 Subject: [PATCH 2/3] HTMLEditor: Add screenshot test (T1320286) --- .../tests/editors/htmlEditor/list.ts | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/e2e/testcafe-devextreme/tests/editors/htmlEditor/list.ts b/e2e/testcafe-devextreme/tests/editors/htmlEditor/list.ts index 1964c715d4b0..c1682ea1d083 100644 --- a/e2e/testcafe-devextreme/tests/editors/htmlEditor/list.ts +++ b/e2e/testcafe-devextreme/tests/editors/htmlEditor/list.ts @@ -24,6 +24,24 @@ const orderedListMarkup = ` `; +const orderedListWithTextMarkup = ` +

Text

+
    +
  1. Text +
      +
    1. 1
    2. +
    3. 2
    4. +
    +
  2. +
  3. Text +
      +
    1. 1
    2. +
    3. 2
    4. +
    +
  4. +
+`; + fixture`HtmlEditor - lists` .page(url(__dirname, '../../container-extended.html')); @@ -42,3 +60,19 @@ test('ordered list numbering sequence should reset for each list item (T1220554) value: orderedListMarkup, }); }); + +test('should reset nested ordered list counters when preceded by text (T1320286)', async (t) => { + const { takeScreenshot, compareResults } = createScreenshotsComparer(t); + + await testScreenshot(t, takeScreenshot, 'htmleditor-ordered-list-text-appearance.png', { element: '#container' }); + + await t + .expect(compareResults.isValid()) + .ok(compareResults.errorMessages()); +}).before(async () => { + await createWidget('dxHtmlEditor', { + height: 200, + width: 200, + value: orderedListWithTextMarkup, + }); +}); From 07d3c8c12ca93415dd15ba942cf19ac3e1932894 Mon Sep 17 00:00:00 2001 From: Ruslan Farkhutdinov Date: Mon, 16 Feb 2026 17:57:31 +0200 Subject: [PATCH 3/3] HTMLEditor: Update etalon --- ...-list-text-appearance (fluent.blue.light).png | Bin 0 -> 4140 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 e2e/testcafe-devextreme/tests/editors/htmlEditor/etalons/htmleditor-ordered-list-text-appearance (fluent.blue.light).png diff --git a/e2e/testcafe-devextreme/tests/editors/htmlEditor/etalons/htmleditor-ordered-list-text-appearance (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/editors/htmlEditor/etalons/htmleditor-ordered-list-text-appearance (fluent.blue.light).png new file mode 100644 index 0000000000000000000000000000000000000000..e6107b6a84a86ccdc13a24432af6c935f69826f8 GIT binary patch literal 4140 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 MHh_T3^`TGy0eJ@1GXMYp literal 0 HcmV?d00001