Monday, December 8, 2025
33 changes · 19.0
Resolved issues and error corrections
This update resolves an issue where the server logger was experiencing excessive queue buildup. The change reverts a recent adjustment to the logging interval, restoring it to a more stable setting. This ensures smoother data transmission and prevents potential performance slowdowns in the IoT driver.
Original PR description
Based on this review of https://github.com/odoo/odoo/pull/238740 this pr reverts the flush interval to 0.5s introduced in https://github.com/odoo/odoo/pull/238648 to avoid queue saturation. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238912
This update resolves a technical issue that prevented the printed receipt tour from functioning correctly after installing the `l10n_se_pos` module for Swedish POS systems. The fix corrects a programming error, ensuring the receipt tour operates as intended and improving the user experience.
Original PR description
in this commit: - Fixed TypeError: this.get_order is not a function raised during the `test_printed_receipt_tour` in POS after installing or `l10n_se_pos`. runbot-233248 Forward-Port-Of: odoo/enterprise#101016 Forward-Port-Of: odoo/enterprise#97355
This update resolves a minor visual glitch in the Email Marketing app where a section briefly appeared and disappeared when switching between email templates. The fix ensures the snippet menu is initially folded, providing a smoother and more consistent user experience when creating campaigns. This improves the overall usability of the Email Marketing functionality.
Original PR description
**Steps to reproduce:** - Go to the Email Marketing app - Create a new campaign and select the "Plain Text" Mail body for the template - Change between Mail body and Settings tabs - On Mail body tab, the right-hand building block section appears briefly (1 second) and then disappears **Issue:** Default state of the snippet menu has `snippetsMenuFolded` set to False before being inserted. **Fix:** As described in the comment just after the insert: ``` // Hide the snippetsMenu at first, other code will handle // if it should be shown or not. ``` So the fix ensure the menu is folded by default (not sure as to why the state was changed after inserting, so maybe it's expected). opw-5130191 Forward-Port-Of: odoo/odoo#238766
This update resolves an issue where saving changes to course descriptions in the website editor would trigger an error. The fix modifies a template to ensure the correct HTML attributes are included, preventing the error and allowing users to successfully save their changes. This ensures a stable and functional website experience.
Original PR description
Steps to reproduce: --------------------------- 1. Install the `website_slides` module. 2. Navigate to the Courses page on the website. 3. Open the Website Editor. 4. Modify the short description of…
Steps to reproduce:
---------------------------
1. Install the `website_slides` module.
2. Navigate to the Courses page on the website.
3. Open the Website Editor.
4. Modify the short description of any course.
5. Click the Save button.
Observation:
---------------------------
A traceback is raised:
```
File '/data/build/odoo/addons/website/models/ir_ui_view.py', line 514, in save_embedded_field
Model = self.env[el.get('data-oe-model')]
```
Issue:
---------------------------
In the template
https://github.com/odoo/odoo/blob/9333df06e15134df92efed765cf95db38c0dfede/addons/website_slides/views/website_slides_templates_homepage.xml#L375 the short description is rendered inside a `<small>` tag. When parsed by `lxml`, the `<small>` tag is converted to a self-closing element and the text becomes wrapped in a new `<p>` inside an additional `<div>`.
```
b'<div><small class='o_line_clamp' data-oe-xpath='/t[1]/a[1]/div[2]/div[1]/small[1]'
data-oe-model='slide.channel' data-oe-id='1' data-oe-field='description_short'
data-oe-type='html' data-oe-expression='channel.description_short'
data-oe-sanitize='allow_form' spellcheck='false'/><p>Learn the basics of gardening! th new</p></div>'
```
This wrapper `<div>` does not contain the required `data-oe-model` attribute, causing `save_embedded_field` to fail.
Solution:
---------------------------
Replace the `<small>` tag with a `<div>` tag, adding the `small` class to preserve styling. This prevents lxml from producing a self-closing tag and ensures the attributes remain on the correct element.
opw-5273079This update resolves a testing error related to employee leave balances in the EG payroll module. Previously, tests incorrectly checked allocations for 2025, causing failures when calculating balances for 2026. The fix incorporates a 'freeze_time' setting across all relevant tests to ensure accurate calculations and prevent incorrect balance resets.
Original PR description
Before this commit, the test `test_get_annual_remaining_leaves_with_allocation` was checking the balance of an employee with an allocation for 2025. As no freeze_time was set, the test would fail in 2026 as the allocation would be invalid and the employee balance would fallback to 0. Same issue for the test `test_get_annual_remaining_leaves_after_leave_taken` The PR https://github.com/odoo/enterprise/pull/98223 was targetting the wrong test and thus, the error was not fixed. This commit merges all 3 tests in one using freeze_time runbot error 231559 Forward-Port-Of: odoo/enterprise#101458
This update fixes an issue where the keyboard would unexpectedly appear on mobile date fields, causing a poor user experience. Now, the keyboard doesn't open automatically, and the cursor is hidden on small screens, resulting in a smoother and more intuitive date selection process.
Original PR description
Before this commit:
- The cursor was shown inside the date/datetime input field on mobile,
which triggered the keyboard unnecessarily and degraded the user
experience.
Steps to reproduce:
1. Add a form snippet.
2. Add a Date/Datetime field.
3. Click on the Date field.
- The virtual keyboard appears and the datepicker popover may be
clipped or partially hidden.
After this commit:
- The virtual keyboard is now prevented from opening on date/datetime
inputs, and the text cursor within these fields is also hidden.
task-[4745714](https://www.odoo.com/odoo/project/974/tasks/4745714)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238771
Forward-Port-Of: odoo/odoo#212053This update fixes a minor issue on the Odoo portal where an empty filter menu appeared when no data was available on mobile devices. The change ensures a cleaner, more user-friendly experience by hiding the offcanvas filter section when there's no data to display. This improves usability and reduces visual clutter.
Original PR description
This PR prevents the offcanvas containing filters/sort buttons to be displayed in there is no data in the view, preventing to show an empty menu on screen. task-5072304 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enables administrators to modify the work entries associated with payslips that have been reversed or refunded. Previously, these entries were immutable. This change improves operational efficiency by allowing for corrections to be made directly within the system through a user-friendly interface.
Original PR description
-Originally, work entries for validated payslips cannot be modified. -This task allows for the modification of the work entries for the reverted payslips. -State of work entries can be modified manually through list view + form view on gear icons Task-id: #5380821
This update simplifies the appointment calendar by showing only one period (day, week, month, quarter, or year) at a time, instead of three. This change reduces visual clutter and provides users with a clearer view of their appointments. It addresses a previous issue with overwhelming information.
Original PR description
This PR displays one period of the requested scale (day, week, month, quarter and year) in the calendar instead of three. It avoids displaying unwanted periods and overwhelming users with information. Task-5022091 Forward-Port-Of: odoo/enterprise#98796
This update resolves an issue where a warning banner appeared during SEPA batch payments if a linked employee lacked an address. The change ensures the system correctly generates XML reports using the employee's address, even when the primary partner lacks address information. This improves the reliability of batch payment processing.
Original PR description
…oyee has an address Doing batch payment for sepa payment would generate a warning banner if the partner has no address ( city and country ) However in reality ( already working ) the xml report will be generated with the linked employee address in the case of absence of the partner address thus it should not show a warning. The change removes the warning in this case. task: 5266346 Forward-Port-Of: odoo/enterprise#99928
This update resolves an issue where newly created documents in the l10n_uy_edi module weren't correctly calculating certain fields. The fix ensures that these fields are properly assigned when a new document record is first created, preventing calculation errors. This improves the accuracy of edi document generation.
Original PR description
The PR https://github.com/odoo/odoo/pull/209587 adds a check for onchange calls on a newly created record. Since in that case `move_id` is not set on `l10n_uy.document`, the compute method fails to assign values. This commit adds a pre-assigned fallback for this specific case. Runbot error: https://runbot.odoo.com/odoo/error/234425 Forward-Port-Of: odoo/enterprise#101060
This update resolves an issue where opening GIF pickers within knowledge article comments would cause Odoo to crash. The fix adjusts how the GIF picker identifies action placement, ensuring it correctly recognizes buttons within 'extra actions' like those found in standard chat interfaces. This improves stability and usability for knowledge article commenting.
Original PR description
Before this commit, opening gif picker in a comment of a knowledge article would lead to crash. This happens because composer uses chatter visual, and pickers in composer picks either the quick or more node element as anchor of picker, depending on whether the action is in the quick or more action. In the case of knowledge article, the buttons are placed in extra actions like in chatter. However the picker placement was not taking into account this place, thus it fails to find action placement. This commit fixes the issue by adding support of extra actions as anchor for composer picker. Task-5163888
This update improves the time off dashboard by displaying the remaining unspent amount of overtime hours instead of the total overtime. This provides a clearer picture of an employee's available time off and avoids confusion regarding already used hours.
Original PR description
Instead of showing total overtime on the timeoff dashboard, show the unspent amount. Task-5261777
This update resolves a technical issue where the Chatter widget in the bank reconciliation module would display an error if a statement line wasn't selected when opening the chat. Making the 'statementLine' property optional eliminates this error and ensures the Chatter widget functions correctly.
Original PR description
The aim of this commit is putting the bank reco widget chatter's props "statementLine" as optional. Since we saved the last state of chatter (open/close), it might happen that we are opening the chatter without a statement line selected. This leads to an error in debug where the props statementLine of our custom chatter is not filled and leads to a traceback. By putting the props as optional, we are removing the error. no task id
This update simplifies the display of payment references in the bank reconciliation view. Previously, excessively long payment references were automatically expanded, now users must manually unfold the line to view the complete reference. This change improves the user experience and reduces potential visual clutter.
Original PR description
This commit removes the expand text feature available on payment reference field in the bank reconciliation. Before this commit, a payment reference too long to be fully displayed in the bank reconciliation view could be expanded to have the full payment ref. Now, the user has to unfold the line to get the full payment ref. no task id
This update corrects a technical issue preventing users from successfully revoking trusted devices through the security settings. The problem stemmed from a typo in the system's dynamic content, which blocked the removal of trusted devices. This ensures users can properly manage their 2FA security.
Original PR description
After public widgets have been rewritten as Interactions [1], there were 2 typos in `dynamicContent` that led to the wrong behavior. Because of that, we couldn't revoke a trusted device, or all of them. Steps to see the issue, - Turn the 2FA on - Add a trusted device, for example, by checking `Don't ask again on this device` when prompted to enter the authentication code while logging in. - Go to /my/security - Try to revoke a trusted device, either just by clicking on the trash icon button, or the 'Revoke all' button. => Nothing happens. [1]: https://github.com/odoo/odoo/commit/22e777c046521f3f89b62caa5876680beb7f5aba Forward-Port-Of: odoo/odoo#238830
This update ensures that Indian payroll localization settings are only displayed for companies located in India. Previously, all companies could see these settings, which has now been corrected to improve accuracy and compliance for Indian payroll operations. This change was made to align with local regulations.
Original PR description
Before: - Indian payroll localization setting was visible to all company. After: - Indian payroll localization settings will be visible to only Indian company. Steps to reproduce: - Install l10n_in_hr_payroll > Go to non Indian company > Payroll setting visible to all company. Task: 5383944
This update simplifies the creation of sign templates by automatically assigning them to the standard 'Sign' folder. Previously, users had to manually select the folder for each new template, which is now handled automatically. This streamlines the process and reduces the potential for errors.
Original PR description
Assign a default document folder to sign templates so that each newly created template automatically points to the default "Sign" folder. task-5023107 Forward-Port-Of: odoo/enterprise#92624
This update fixes an issue where product images on the website were incorrectly defaulting to the first product variant's image instead of the product's main image. The change ensures that the correct product image is displayed by default, improving the visual presentation of products on the website and enhancing the customer experience. This was a simple fix to a template logic error.
Original PR description
Steps to reproduce: =================== 1- Add a product & product variants 2- Add different photos for product & product variants 3- visit website shop -> observe that the product image is set to…
Steps to reproduce: =================== 1- Add a product & product variants 2- Add different photos for product & product variants 3- visit website shop -> observe that the product image is set to the image of the first product variant Cause: ====== The `product_tile` template defined a variable `variant` that defaulted to the first available variant if no specific variant was selected. The condition https://github.com/odoo/odoo/blob/bf83a4efefedae61e06a6b29ad82e647fd673ce2/addons/website_sale/views/product_tile_templates.xml#L62 subsequently used this default variant's image, bypassing the intended fallback to the product template's image. Solution: ========= Update the condition to check `product_variant` instead of `variant`. `product_variant` is only set when a specific variant is explicitly selected. This ensures the product template image is displayed by default, and the variant image is only shown when specifically requested. opw-5362624 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a bug that prevented the resume section from generating correctly when an employee lacked a version record. The change adds a safeguard to prevent errors during resume generation, ensuring all employees' resumes can be created smoothly. This improves the reliability of the HR resume feature.
Original PR description
Due to some issues with migration, some employee might not have a version, which would result in breaking the code of generating the resume lines. This commit adds an extra level of protection for those case. Task-5336589 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update addresses a stability issue in Odoo's mail functionality, specifically related to how it checks for changes within web pages. By adding short pauses during these checks, the system is now more reliable in detecting updates, particularly those not immediately reflected in the DOM. This prevents test failures and ensures consistent performance.
Original PR description
Backport of https://github.com/odoo/odoo/pull/234508 Before this commit, contains had 3 seconds timeout to make a final runOnce. Some tests could be longer than necessary due to: - change not observed by DOM mutation, e.g. `:focus` in selector - some selectors are sometimes not properly observed by mutation somehow, like discuss badges. This commit adds 100ms ticks to re-check selector, and the 3 seconds timeout now happens with calling the ticks 30 times.
This update fixes a problem where users without specific permissions were unable to view overtime attendance records. The change adjusts security rights to grant access, ensuring all users can properly access and manage overtime attendance data. This improves usability and prevents data access restrictions.
Original PR description
## Issue - Getting access error when the user having no special access rights tries to access the attendance record. ## Steps to reproduce 1. Log in as user (a user with no special access rights) 2. Open the Attendances app, and click on a record with overtime attendance 3. You get an Access error wizard, upon closing will show the attendance wizard of that record, without extra hours captured on it. ## Solution - Fixed security rights to access attendance records when you do not have any special access rights. task-5366484 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where emojis at the end of HTML emails weren't being properly formatted. The fix adjusts the code to correctly identify and transform emojis within HTML content, ensuring they display correctly for all users. This improves the overall email experience and prevents visual errors.
Original PR description
Currently, emojis are not transformed when they are at the end of the HTML composer content. This is due to the regex used in the `formatEmojisInHtml` function, which does not account for HTML boundaries properly. task-5357675 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where users without the necessary permissions to upload documents within a project couldn't successfully upload. The fix checks user rights before allowing uploads, preventing errors and ensuring proper functionality for all users with the correct access levels. This improves the reliability of document sharing within projects.
Original PR description
Step To Reproduce: - install Project - login with admin and open any Project settings, say Project 1. - create a upload document activity for 'marc demo' - ensure marc demo has 'User' access for…
Step To Reproduce: - install Project - login with admin and open any Project settings, say Project 1. - create a upload document activity for 'marc demo' - ensure marc demo has 'User' access for project - login with marc demo - open same project (kanban card -> view) - upload a document for the created activity Observation: - Traceback ``` TypeError: Cannot destructure property 'id' of '(intermediate value)' as it is undefined at Activity.onFileUploaded ``` Cause: - upload request to `/mail/attachment/upload` , calls `mail_attachment_upload` which then tries to access thread for 'write' mode, 'project.project ' model . - as marc demo does not have write access to this model, no thread is returned - so `NotFound()` is raised https://github.com/odoo/odoo/blob/322c6d0468bf79e9d29e1375c49aa13d4a7b7a67/addons/mail/controllers/attachment.py#L48-L55 Fix: - we check if selected user has appropriate rights or not for upload activity opw-5160132 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238533 Forward-Port-Of: odoo/odoo#234936
This update resolves an issue preventing users from creating quotation templates using products set up in the parent company of a multi-company setup. Previously, this was allowed in standard sales orders, but not quotation templates. The change ensures consistency and simplifies the process for users managing products across multiple branches.
Original PR description
### Issue In this issue, having multi-company setup, we cannot make a quotation template with a product from the parent company. While this is allowed in sale order. #### To reproduce: 1- Create a product and in the product form, set the the company field to the parent company. 2- Create a quotation template and set the company field to the child branch. 3- In the quotation template, add a line and use the created product from the parent company. 4- Saving the form will raise an error. Talked with PO about the issue and he agreed that the quotation template should allow product from the parent company. This is already the flow in the quotation itself. opw-5177590 Forward-Port-Of: odoo/odoo#237732
This update resolves an issue where notifications triggered by the Data Cleaning app would incorrectly open a chat window and fail to send messages. The fix ensures notifications are correctly routed to the user's discuss inbox, improving the user experience when identifying duplicate records.
Original PR description
**Steps to reproduce:** - Install `Data Cleaning` app - Activate notification in Odoo in the admin user profile - Create a few duplicate contacts - Go the the "Data Merge: Find Duplicate Records"…
**Steps to reproduce:**
- Install `Data Cleaning` app
- Activate notification in Odoo in the admin user profile
- Create a few duplicate contacts
- Go the the "Data Merge: Find Duplicate Records" scheduled action
- Run the action manually
- You should see new notifications telling you that they found potential duplicates
- In the top right MessaginMenu click on the notification, it opens a chatter
- Try to send a message in the chat window
- Traceback : `AttributeError: 'data_merge.model' object has no attribute '_get_thread_with_access'`
**Issue:**
The model doesn't inherit `mail.thread` so it uses `self.env['mail.thread']` directly to send notification:
```
self.env['mail.thread'].sudo().message_notify(
...
model=self._name,
notify_author=True,
partner_ids=partner_ids,
res_id=self.id,
)
```
But when sending the information with the `model` and `res_id` parameters the newly created `Store` uses `self.add("mail.thread", {"id": data.id, "model": data._name, **values})` and the message is assigned to a non-existing thread in the frontend.
**Fix:**
Explicitly check if the message is a `user_notification` and redirect the user to the discuss inbox if it's the case by reapplyng part of https://github.com/odoo/odoo/commit/b3be992c57dc5e412a127d05fc50b059814523aa
opw-5101510
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238563
Forward-Port-Of: odoo/odoo#234737This update fixes an issue where toggling a block element on product pages caused a page reload. By explicitly setting the button type to 'button', the change now seamlessly updates the product page without requiring a new load, resulting in a smoother user experience. This resolves a minor usability concern.
Original PR description
**Context** If you add a toggle block element in the ecommerce description of a product in your backend, it will be rendered inside a `<form />` element on your website's product page. **Before this commit** The button controlling the toggling of this element does not have an explicit "type" attribute set. This has the effect that these buttons will act as "submit" buttons for the form element on the website, causing a page reload. https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/button#type **After this commit** Explicitly set the "type" attribute to be "button" so that toggling a block doesn't reload the user's website. opw-5369171 Forward-Port-Of: odoo/odoo#238892
This update corrects an issue where shipping labels for FedEx deliveries weren't including the company name entered during checkout. The fix ensures that the correct company name is used on the shipping label, improving order accuracy and customer experience. This was caused by a misunderstanding of how contact information is handled in the ecommerce system.
Original PR description
Steps to reproduce: - install ecommerce (i.e. website_sale) and delivery_fedex_rest - setup demo payment + fedex delivery method (including publishing it) - open the db while not logged in (i.e. in private browsing) - add something in the ecommerce page to cart + checkout > checkout - type in random contact info INCLUDING "Company Name" - continue checkout > select FEDEX as delivery method > pay now - go to Sales App > Sale orders > open the SO generated by ecommerce - open delivery + validate Expected result: - Shipping label with the name + company name from the ecommerce form Actual result: - company name is missing Issue is due to a company not being generated by ecommerce. Instead a string field is filled in (which is not visible when creating a contact directly via the contacts app). Code has been adapted to consider this use case. opw-5119089 Forward-Port-Of: odoo/enterprise#101376
A recent test failure related to task scheduling time zones has been fixed. The issue stemmed from incorrectly calculating task durations based on resource time zones instead of UTC. This change ensures accurate task planning and scheduling across different time zones.
Original PR description
The test `test_plan_task_in_calendar` failed with a one-hour difference in `planned_date_begin`. The error occurred because the work intervals were computed using the resource's timezone (`Europe/Brussels`) instead of `UTC`, leading to a shifted planned date. Setting the resource timezone to `UTC` ensures consistent interval computation and resolves the test failure. [RB-227059](https://runbot.odoo.com/odoo/error/227059) Forward-Port-Of: odoo/enterprise#100580
This update resolves a minor formatting issue in Odoo's email composer. Specifically, it ensures a space is automatically added after mentions within email messages, improving readability and preventing potential display problems. This change ensures emails are formatted correctly for recipients.
Original PR description
This commit fixes an issue where there was no space inserted after a mention in the HTML composer. task-5354233 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that the terms 'Night' and 'Nights' are properly translatable within the Odoo Sale Renting module. The team took a pragmatic approach, delaying full translation for these specific terms to monitor for potential inconsistencies with website language settings. This ensures accurate localization for users in different languages.
Original PR description
Not sure why the existing `SINGULAR_LABELS` is lazy translated whereas the not single units (i.e. `self._fields['unit']._description_selection(self.env))[self.unit]`) is not, so we assume that in this case it's fine to not lazy translate both "Night" and "Nights" and see if a bug pops up later on (maybe via mismatching website language?) opw-5392109
This update ensures that all B2C invoices in the Saudi Arabia localization (l10n_sa) module now correctly display 'Simplified Tax Invoice' as the invoice title. Previously, this requirement was only applied to phase 2 ZATCA invoices. This change aligns with regulatory requirements and improves invoice consistency.
Original PR description
For B2C invoices, the invoice's title must be "Simplified Tax Invoice". This was only applied to phase 2 ZATCA in "l10n_sa_edi". This change makes sure to apply the same requirement for phase 1 invoices. Task-5322118 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237505
This update fixes an issue where Vimeo video settings (loop and hide controls) weren't being applied after saving a website page. The problem stemmed from unnecessary escaping of URL parameters, which was preventing Vimeo from correctly interpreting the video settings. This change removes the escaping, ensuring settings are applied as intended.
Original PR description
When setting options like "Loop" or "Hide Player Controls" on an embedded Vimeo video, these settings were not applied on the final page after saving. Steps to reproduce: =================== - Go to…
When setting options like "Loop" or "Hide Player Controls" on an embedded Vimeo video, these settings were not applied on the final page after saving. Steps to reproduce: =================== - Go to the Website editor. - Drag and drop a "Media List" or similar snippet. - Double-click the video placeholder to open the media dialog. - In the "Video" tab, paste a Vimeo URL. - Enable "Loop" and/or "Hide Player Controls". - Save the page. -> Observe that the video does not loop and the controls are still visible. Cause: ====== When rebuilding the iframe, `generateVideoIframe` was processing the video's `src` URL through using `escape()` function. This function is designed to prevent XSS by converting characters like `&` into their HTML entity equivalent, `&`. However, Vimeo video URLs use the `&` character to separate query parameters (e.g., `?loop=1&controls=0`). The `escape()` function was converting this URL to `?loop=1&controls=0`. but `setAttribute` already handles URL values safely. so Vimeo player will receive url containing &amp;. This broke the URL's structure. The Vimeo player received a malformed URL, could not parse the parameters correctly, and therefore ignored the options for looping and controls. escape was used before cause The original code was adding the iframe using `.html(...)` see commit: https://github.com/odoo-dev/odoo/commit/8749410b1033ddec1207ce1db42d1889a0d2ea33 side note 1: before saving the vimeo video works because we render it without the double escaping of & (as will be the case for saved video if this PR is applied) side note 2: the issue of double escaping also apply to youtube, but it seems to be ok with superfluous & in URL while in vimeo: https://player.vimeo.com/video/1138854841?autoplay=1&muted=1&autopause=0&controls=0&loop=1 has the video that doesn't loop, is not muted (so doesn't auto play in an iframe on most browser) and show controls https://player.vimeo.com/video/1138854841?autoplay=1&muted=1&autopause=0&controls=0&loop=1: all option works Solution: ========= The unnecessary `escape()` call has been removed. since the video should be only added using media dialog and the `setAttribute(...)` will escape it by default opw-5225261 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238040 Forward-Port-Of: odoo/odoo#236677