Skip to content

Conversation

@fw-bot
Copy link
Collaborator

@fw-bot fw-bot commented Oct 31, 2025

The recent use of the property "plaintext-only" came with a change of
behaviour in the composers, specifically in Firefox.

How to reproduce in FF:

  • write a single character in a grid composer
  • delete the character

-> a new line is inserted

Apparently, when setting the attribute contentEditable to
plaintext-only, deleting the single character does not delete the span
that encapsulates it if the latter has a class attribute. This couples
with a recent refactoring of the content editable helper to handle new
line characters and the empty composer is not detected as such

What happens currently?

Consider the composer content after inputing the letter 'W':

<p>
  <span class="">
    w
  </span>
</p>

The cursor is set just after the letter W.

In a chromium-based browser, hitting the Delete key yeilds the
following result:

<p>
  <span>
    <br>
  </span>
</p>

The letter is replaced by <br> which could be interpreted as a
newline, except that in this situation, we do not want a newline to
appear as we meerly deleted the single character of the composer, so
we do not want new characters.

Also, we introduced some logic to fight this side-effect when we
introduced the support of newlines of pasted content (#6467)

However, it turns out that in firefox, hitting Delete will yield this
result

<p>
  <span class="">
    <br>
  </span>
</p>

The class attribute is not cleared up! And unfortunately, the logic that
counteracts the presence of the unwelcome <br> would test against the
exact form seen in a chromium-based browser, so it did not work on
Firefox.

This commit extends the check to work on both Firefox-based and
Chromium-based browsers.

Note that other leads were investigated and it seems that if we stopped
using paragraphs to represent new lines, this issue with the <br>
doesn't seem to occur. An improvement (and good cleanup) could be
achieved by dropping that paragraph strategy and rely on spans and br
characters.

Task: 5082601

Task: 5082601

Description:

description of this task, what is implemented and why it is implemented that way.

Task: 5082601

review checklist

  • feature is organized in plugin, or UI components
  • support of duplicate sheet (deep copy)
  • in model/core: ranges are Range object, and can be adapted (adaptRanges)
  • in model/UI: ranges are strings (to show the user)
  • undo-able commands (uses this.history.update)
  • multiuser-able commands (has inverse commands and transformations where needed)
  • new/updated/removed commands are documented
  • exportable in excel
  • translations (_t("qmsdf %s", abc))
  • unit tested
  • clean commented code
  • track breaking changes
  • doc is rebuild (npm run doc)
  • status is correct in Odoo

Forward-Port-Of: #7331

The recent use of the property "plaintext-only" came with a change of
behaviour in the composers, specifically in Firefox.

How to reproduce in FF:
- write a single character in a grid composer
- delete the character

-> a new line is inserted

Apparently, when setting the attribute `contentEditable` to
`plaintext-only`, deleting the single character does not delete the span
that encapsulates it if the latter has a class attribute. This couples
with a recent refactoring of the content editable helper to handle new
line characters and the empty composer is not detected as such

What happens currently?

Consider the composer content after inputing the letter 'W':

```html
<p>
  <span class="">
    w
  </span>
</p>
```

The cursor is set just after the letter W.

In a chromium-based browser, hitting the `Delete` key yeilds the
following result:

```html
<p>
  <span>
    <br>
  </span>
</p>
```

The letter is replaced by `<br>` which could be interpreted as a
newline, except that in this situation, we do not want a newline to
appear as we meerly deleted the single character of the composer, so
we do not want new characters.

Also, we introduced some logic to fight this side-effect when we
introduced the support of newlines of pasted content (#6467)

However, it turns out that in firefox, hitting `Delete` will yield this
result

```html
<p>
  <span class="">
    <br>
  </span>
</p>
```
The class attribute is not cleared up! And unfortunately, the logic that
counteracts the presence of the unwelcome `<br>` would test against the
exact form seen in a chromium-based browser, so it did not work on
Firefox.

This commit extends the check to work on both Firefox-based and
Chromium-based browsers.

Note that other leads were investigated and it seems that if we stopped
using paragraphs to represent new lines, this issue with the `<br>`
doesn't seem to occur. An improvement (and good cleanup) could be
achieved by dropping that paragraph strategy and rely on spans and br
characters.

Task: 5082601
X-original-commit: 828ee0b
@robodoo
Copy link
Collaborator

robodoo commented Oct 31, 2025

Pull request status dashboard

@fw-bot
Copy link
Collaborator Author

fw-bot commented Oct 31, 2025

This PR targets 19.0 and is part of the forward-port chain. Further PRs will be created up to master.

More info at https://github.com/odoo/odoo/wiki/Mergebot#forward-port

@robodoo robodoo closed this in ab1bc93 Oct 31, 2025
@fw-bot fw-bot deleted the 19.0-saas-18.4-fix-contenteditable-plaintext-only-behaviour-rar-470422-fw branch November 7, 2025 17:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants