897c47a5ac6b45e0b25ed2e0c35582adb947ecbe
Prior to this fix, elements with background images were converted to images via the html2canvas library. This made them work in Outlook at the cost of several tradeoffs: - the process was slow and asynchronous - there could be no interactivity (links, buttons, etc.) in the converted element - responsive behavior was wonky: if only a slice of the image was shown when it was converted (due to background-size cover behavior), the rest was lost so if more width was needed in mobile, we would be zooming on that slice, making it sometimes irrelevant and pixelated This replaces all that with a conversion to VML, which is a vector format supported by Outlook. This conversion is done only for Outlook, which means that all other clients are getting the original background element again. There is a way to keep the background-size cover behavior in VML, using the "aspect" attribute with value "atleast" but this only works on v-fill elements and sadly putting the image on a v-fill element bugs in Windows Mail (which is the default mail client on Windows 10 and 11) and this client can't be singled out of mso conditionals. To get around this issue, since this is only for desktop clients, we assume the width of the screen to be large and mimick the cover behavior by cropping the image to the target size. This allows us to put the image on the v-image element and have proper rendering in Outlook and Windows Mail on desktop. Note: When retrieving the image by URL in Python in order to crop it, we need to ensure we have an absolute path. This is done - perhaps seemingly naively - by checking if the URL contains '//'. Here's the reasoning behind that choice. To check if a URL is absolute, we could use `urllib.parse.urlparse` and check if it has a scheme but that would lead to `www.odoo.com/path` being considered relative (and thus we'd add a host to the URL even though there's already one). Instead, we could check it it has a netloc but that would lead to the same issue since the documentation of `urlparse` says: > Following the syntax specifications in [RFC 1808](https://datatracker.ietf.org/doc/html/rfc1808.html), urlparse recognizes a netloc only if it is properly introduced by ‘//’. Still, it would be more technically correct since `//some/path` would be considered absolute (which it should be since it resolves to `<current_scheme>//some/path`). Base on that documentation, it seems that simply checking if the URL contains '//' is pretty much equivalent to checking if it has a scheme, with the double advantage that it's simpler and that it works for `//some/path` as well. However, note that it doesn't solve the issue of `www.odoo.com/path`. In summary, here are the results with the current method: ``` http://www.odoo.com/path -> http://www.google.com/path // OK some/path -> http://localhost:8069/some/path // OK /some/path -> http://localhost:8069/some/path // OK //some/path -> //some/path // OK www.odoo.com/path -> http://localhost:8069/www.google.com/path // WRONG ``` X-original-commit: 9561ba31917024825705c876442139405e7a7957 Part-of: odoo/odoo#124465
…
…
Odoo
Odoo is a suite of web based open source business apps.
The main Odoo Apps include an Open Source CRM, Website Builder, eCommerce, Warehouse Management, Project Management, Billing & Accounting, Point of Sale, Human Resources, Marketing, Manufacturing, ...
Odoo Apps can be used as stand-alone applications, but they also integrate seamlessly so you get a full-featured Open Source ERP when you install several Apps.
Getting started with Odoo
For a standard installation please follow the Setup instructions from the documentation.
To learn the software, we recommend the Odoo eLearning, or Scale-up, the business game. Developers can start with the developer tutorials
Languages
Python
49.6%
JavaScript
47.8%
SCSS
2%
CSS
0.3%
HTML
0.2%