summaryrefslogtreecommitdiff
path: root/addons/website/static/src/js/widgets/theme.js
AgeCommit message (Collapse)Author
2019-08-06[MERGE] forward port branch saas-12.2 up to 9e74730a26bChristophe Simonis
2019-08-06[MERGE] forward port branch 12.0 up to ff9ddfdacc9Christophe Simonis
2019-08-05[FIX] website: prevent multi checked options in the same groupqsm-odoo
In the customize theme modal, if one option enabled views which were a subset of the views which are enabled by another option, both options would be checked on modal opening if all the related views were active. This is the case for the "choose an image" and the "choose a pattern" options: the first one enables a view which adds an image on the body and the second one enables the same view but also another which enables the fact that the image must be repeated. This commit solves the issue by always selecting the option enabling the most views among the checked options in a same set. opw-1958395 closes odoo/odoo#35465 Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2019-03-15[FIX] website: restore broken promises in websiteqsm-odoo
Since the switch to jQuery 3, Odoo uses native promises in its JS. Some mistakes were made in the website app during conversion from old jQuery deferred to native promises. - `this` -> `self` when wrapping in a promise - `.always(fct)` -> `.then(fct).guardedCatch(fct)` - a function returned sometimes a jQuery deferred, sometimes a native promise. This made the caller fail when using `always` or fail when using `guardedCatch` closes odoo/odoo#31887 Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2019-03-06[REF] website: adapt code after jQuery updateVincent Schippefilt
Part of task 1896658 Co-authored-by: Aaron Bohy <aab@odoo.com> Co-authored-by: Christophe Matthieu <chm@odoo.com> Co-authored-by: Mathieu Duckerts-Antoine <dam@odoo.com> Co-authored-by: David Monjoie <dmo@odoo.com> Co-authored-by: Martin Geubelle <mge@odoo.com> Co-authored-by: svs-odoo <svs@odoo.com> Co-authored-by: Vincent Schippefilt <vsc@odoo.com>
2019-02-08[IMP] website: allow negative dependencies in theme customize dialogqsm-odoo
Options and option sets can declare a data-depends attribute to specify which options need to be enabled for them to be displayed. With this commit, we allow specifying which options need to be *disabled* for the same purpose (we can now do that by prefixing the options IDs with '!'). PR https://github.com/odoo/odoo/pull/29624 task-1904244
2019-02-08[IMP] website, *: optimize scss customizationsqsm-odoo
* web_editor This commit's goal is to optimize the delay to make a scss customization thanks to the website customize dialog. Before this commit, the JS code took advantage of existing web_editor routes but this was far from efficient as this was done: 1) PY: Load all scss files used in the page 2) JS: Find the one we want to customize and adapt the scss content 3) PY: Create the scss customization with the new content (So two RPC (including one very slow) and content building in javascript) After this commit, this is done: 1) PY: Load the scss file being customized, adapt its content according to the new values and save the customization (So the whole logic is in python, requiring only one small RPC) This commit also take the opportunity to review the web_editor ace editor loading code (the logic is shared with website customizations). PR https://github.com/odoo/odoo/pull/29624 task-1904244
2019-02-08[IMP] website, *: add new logo sizing optionqsm-odoo
* portal, web This commit introduces the first of many-to-come non-color website user values: the logo height. Now, the user can choose it in the customize dialog. PR https://github.com/odoo/odoo/pull/29624 task-1904244
2019-02-08[IMP] website: allow customize option to be conditionally visibleqsm-odoo
Before this commit, in the theme customize modal, only lists were able to be visible under the condition of a subset of options being enabled. Now options can too. PR https://github.com/odoo/odoo/pull/29624 task-1904244
2019-02-08[IMP] website: review customize loadingqsm-odoo
Before this commit, the loading was shown during colorpicker choice or body image choice too, which makes no sense. This commit also make a new loading visual which is less intrusive and flicker less. PR https://github.com/odoo/odoo/pull/29624 task-1904244
2019-02-08[REF] website: unify the theme customize dialog color optionsqsm-odoo
Before this commit, color options in the theme customize were treated as big exception in the system. The whole color panel XML was defined client-side and used custom design. Now, all colors are defined as options in the "server-side" template, allowing for more customizations and better maintenance. This commit also makes the color saving system generic to allow for more new options in the future (like customizing the logo height or the font size, which is the next task). PR https://github.com/odoo/odoo/pull/29624 task-1904244
2019-02-08[IMP] website: improve theme customize dialogqsm-odoo
- Make the controller part more readable and more efficient (O(1) ORM operations instead of O(n)) and remove deprecated code. - Add the possibility to have a toggle standalone option. This is used as soon as an `<opt/>` is alone in its container (note that now, the container can be any tag and will be ignored during rendering). - If an option has no specified 'string' to attach to it, the name of the first view it toggles will be used. PR https://github.com/odoo/odoo/pull/29624 task-1904244
2019-02-26[REF] website, *: stop using 'animation' confusing nameqsm-odoo
* web, website_blog, website_sale, website_twitter Before this PR, all website widgets were named 'Animation'. Now that they are 'Public Widgets', we can at last stop using the confusing 'animation' name. Part of https://github.com/odoo/odoo/pull/29442 task-1932066
2019-02-05[IMP] website, *: improve CSS edition usability + add JS editionAndrea Ulliana
* web_editor Currently, when an user wants to edit the css of its website, he has access to lots of files and, in debug mode, to even more files. While the feature is nice for people who know what they are doing, a lambda person can easily break its website by changing the wrong files. Also, nothing warns the user that the files that are edited will never receive updates anymore (unless if they are reset). The goal is to prevent those behavior while still allowing the add custom css. Another goal is to be able to *add* custom javascript. Custom files created for the user: SCSS: user_custom_rules.scss, user_custom_bootstrap_overridden.scss JS: user_custom_javascript.js See https://github.com/odoo/odoo/pull/29999 task-1919350
2019-01-29[IMP] qweb: stop requiring t-name-flagged sub-nodeXavier Morel
QWeb's rendering currently *requires* that when loading a document instead of rendering the document itself it will render a sub-node with a properly labeled t-name. If a view is invoked by id, ir.qweb will look for a child with a t-name and fix up that t-name such that the base qweb object will find and render it. This feature mostly exists for JS compatibility (because a single document can contain multiple cross-linkable templates, and it was useful for cross-implementation tests though I'm not sue they're even checked anymore), and the <template> tag kinda took care of it, however with a more proper qweb view it becomes more of a liability / pain in the ass. Note: turns out there are bits of javascript which read server templates (???) and need to be altered to correctly handle the lack of <templates> wrapping.
2019-01-21[FIX] website, *: restore media dialog usesqsm-odoo
* web_editor, website_blog Following the new editor's merge at https://github.com/odoo/odoo/pull/29775, the media dialog was refactored but the code which used it outside of the editor was not adapted at all. Also, the selected image was not saved correctly anymore, making the media dialog useless outside the editor in the current implementation. - Adapted SEO image uploading and body image background choice which were not working anymore - Adapted blog cover choice and gallery snippet which were strangely still working even though there were sending wrong parameters during media dialog initialization closes odoo/odoo#30416
2019-01-18[FIX] website: restore choosing opacity in website colorsqsm-odoo
Following the new editor's merge at https://github.com/odoo/odoo/pull/29775, the colorpicker still allowed to choose an opacity for website colors but this was ignored when saving. Somehow lost the website part of https://github.com/odoo/odoo/commit/5ba0216b746a16b4609bc9c147fcacad109e969a closes odoo/odoo#30370
2019-01-18[FIX] website: restore customize dialog openingqsm-odoo
Following the new editor's merge at https://github.com/odoo/odoo/pull/29775, the customize theme dialog was not opening anymore. This was due because, somehow, the editor's merge changed the theme dialog code for no reason. closes odoo/odoo#30365
2019-01-17[IMP] web_editor,*: Refactoring the wysiwyg editor and 'html' fieldChristophe Matthieu
* Creating a new structure by transforming all the plugins in the library using the odoo inheritance system. Plugins are easier to implement with the AbstractPlugin to add Odoo behaviors. * From now on, the methods of the library (in this case Summernote) can no longer be called by other modules or files. Only the wysiwyg widgets can access it, to simplify the updating process. The wysiwyg object serves as an interface. * Depending on the options the snippets will be loaded or not, the editor will be in an iframe or not... all of this is transparent from the outside. * Regarding iframes, all controllers related to editing have been removed: the new API no longer needs them. This speeds up loading, eases testing and removes complexity for the same features. PUBLIC FEATURES There are several public methods on the Wysiwyg class: * Wysiwyg.prepare (WidgetParent): returns a deferred resolved when the library (xml, lazy, assets...) is loaded. * Wysiwyg.getRange (DOM): returns the range (selection in the dom) * Wysiwyg.setRange (startNode, startOffset, endNode, endOffset): creates a range (selection in the dom) * Wysiwyg.setRangeFromNode (DOM, options) that creates a range from an element (option available to select all, start or end) A jQuery selector was added: :o_editable, which indicates whether the current element is editable. That is, if it is contained in a tag with the attribute 'contentEditable = "true"' or in a tag with the class o_editable. Several methods are also present: * focusIn: makes a focus and places the cursor at the beginning of the element * focusInEnd: makes a focus and places the cursor at the end of the element * selectContent: makes a focus and selects the content HTML FIELD The HTML field can receive different options: * style-inline: {boolean} transforms a class into an inline style when saving and vice versa when reading. * no-attachment: {boolean} prevents the use of attachments (in media dialog) * cssEdit: {xml_id} to use a template containing the css to loaded in an iframe when editing * cssReadonly: {xml_id} to use a template containing the css to load into an iframe when viewing in readonly * snippets: {xml_id} snippets template (can be used with or without cssEdit) * wrapper: {template} qweb static template (containing a tag: id = "wrapper") that will include the content during editing (removed on save) MASS MAILING A widget was created for mass mailing. There are now two fields: body_html and body_arch. body_arch contains the code with the class without conversion into inline style, useful when editing and one with the inline style that is visible in readonly mode and sent by email. Advantage: no spreading errors, able to update css/theme, able to do more changes when converting to inline style so that a maximum of mail clients have an impeccable rendering. Co-authored-by: Antoine Guenet <age@odoo.com>
2019-01-16[IMP] website: improve onboarding flowAnshuman Sharma
- Improve the website tour (typo, tip positions, etc) and added new steps to publish a new page - Make close button of 'Mobile Preview' more visible - Fix the overflow for long menu names in menu editor dialog - Change the menu string from 'Affix Top Menu' to 'Fixed Top Menu' - Change theme customization dialog's title to 'Customize Theme' from 'Customize this theme' - Improve strings for Google Analytics task-1895287 closes odoo/odoo#28199
2018-11-06[MERGE] forward port branch 12.0 up to dd70c684268Christophe Simonis
2018-10-26[REF] website: review theme dialog engineqsm-odoo
Refactor the code to remove useless parts, simplify behaviors and allow more customizations in future tasks. closes odoo/odoo#28167
2018-11-02[FIX] website: review action start on page loadingqsm-odoo
This commit fixes a bug introduced with https://github.com/odoo/odoo/pull/28251: When opening the ace editor on page load thanks to the #ace-view-editor URL hash, a JS error occurred preventing the editor to open. This was due to the way actions were executed on page loading: - Menu elements are initialized and can handle actions - On initialization, the ace menu tried to launch the editor - First, it asked that all widgets are closed (see mentioned PR) - The website handled that action demand by asking everyone to close their widget - The 'new content' menu tried... and failed as referenced a variable which would only have been created in the start method. Conclusion: before handling actions, all action-capable widgets should be started. This is what this commit does: when receiving an action demand, we first wait for the action handler to be fully started. This implied another change: before, many menus were waiting for the result of an action to notify that their start method is finished... this would cause a deadlock in the new system so those were removed, this did not make much sense anyway (if the result of that starting action has to be known, a dedicated event/method should handle that). closes odoo/odoo#28364
2018-10-01[FIX] web, *: support opacity in colorpicker dialogAndrea Ulliana
* web_editor, website Add an opacity slider and an opacity input to control opacity over the chosen color. task-1887571 Closes https://github.com/odoo/odoo/pull/27289
2018-09-30[REF] website, *: add automatic context for call_kw rpcqsm-odoo
* web_editor, website_blog, website_crm_partner_assign, website_links, website_livechat, website_mail_channel, website_mass_mailing, website_slides Calling a model's method thanks to an RPC will now always send the web_editor context automatically, making sure the method gets the website_id all the time, removing the need to guess the current website (now the get_current_website method uses the context website_id if any). Note: other routes already have the website_id via request.env.context if they correctly set website=True (this commit also adds website=True for scss files customization routes).
2018-09-26[FIX] website: better allow color extensions in the futureqsm-odoo
2018-09-26[FIX] website: remove "Ok" button of theme customize dialogqsm-odoo
2018-09-18[FIX] website: restore color palette generationqsm-odoo
Commit https://github.com/odoo/odoo/commit/77402a4efc4c8b3fbb146dbef57dfbebae709017 modified the color palettes to use alpha, beta instead of primary and secondary in the color selection. Something was forgotten: changing the first (alpha) color did not regenerate the whole palette anymore.
2018-09-13[FIX] website: make theme customization modal multi-fasterqsm-odoo
Since the recent fixes on multi website, the customization modal is restored but is a lot slower the first time we use it (around 20sec to save an option on my machine). This was because when we change an option, all the others options are sent to the server to be (re-)saved and, on the first time, the multi-website system has to duplicate them all to make them website-specific. Now, we only enable/disable views which are modified by the user.
2018-09-03[FIX] website: review website customize dialogqsm-odoo
Make some changes which are needed for theme migration. - Theme colors as user colors fallback only (not hard choice) - Review option dependency system
2018-08-30[REF] web_editor, *: review color theming systemqsm-odoo
* web, website - Introduce gray color palettes (needed for themes migration) - Synchronize BS4 color maps with individual variables (see comments about this in the code). - Review alpha/primary, beta/secondary matching: Before this commit, we decided that the common way to define a color palette was defining primary, secondary, gamma, delta and epsilon. alpha and beta were then forced to primary and secondary without other possibility. The new system makes more sense: 1) define alpha, beta, gamma, delta and epsilon 2) primary and secondary will automatically be set to your alpha and beta (allowing to style the default UI with BS4-independant variables) 3) if you are not happy with (2), you can define primary / secondary in your color palette so that they are not automatically set to alpha / beta This commit also changes what classes the editor uses. Background colors and text colors will now use alpha/beta/gamma/delta/epsilon (not primary and secondary anymore). For buttons, all the possibilities are suggested but color duplicates are hidden (so if your primary and alpha are equal, only one button color is suggested).
2018-08-13[FIX] website: improve/fix menu, copy on unlink, clone page, unique_path, ↵Jeremy Kersten
sale_report, ... Fix bug from the initial poc of JOV Fix menu creation - creating a menu would create a 'container' menu in the DB (.create is call without website_id) then writing on it would copy (if condition to cow) the menu with a website_id leaving the first one as a menu container unused. - website_menu should always have a website_id we dont want to support the multiwebsite system that allow to have generic/specific menu unlink/write is useless now since we always have a website_id Make unique_path website dependent, 2 distinct website can have a page with same name Make Sale report multiwebsite compliant Make website_id on sale_order / account.invoice as a related stored from partner_id. Co-authored-by: Derie Romain <rde@odoo.com> Co-authored-by: Kersten Jérémy <jke@odoo.com>
2018-08-10[IMP] *: make customize dialog generic and improve optionsqsm-odoo
* web, web_editor, website, website_theme_install, portal, theme_default, theme_bootswatch The purpose of this task is to make the customize dialog as generic as possible, that is theme-independant: 1) The design is now totally generic (Odoo visuals) 2) The XML definition is form-view like. This allows themes to extend the dialog without any risk of breaking the style and also allows to not care about lots of technical details. 3) New options have been included. Those were themes options that are now generic and which themes can simply adapt without touching the customize modal (navbar colors, footer color, navbar layout, fonts, body background, ...). The color palette can now also be customized with user colors. Using sass functionnalities, color palettes and fonts integration is now a lot better. Thanks to @qha-odoo for the original design. task-31677
2018-08-10[REF] website: review customize dialog JSqsm-odoo
2017-08-16[REF] web_editor, website, *: complete refactoringqsm-odoo
* mass_mailing, payment, point_of_sale, portal, survey, web, web_tour, website_blog, website_crm_partner_assign, website_event, website_event_questions, website_form, website_forum, website_gengo, website_hr_recruitment, website_links, website_mail, website_mail_channel, website_mass_mailing, website_quote, website_sale, website_sale_options, website_slides, website_twitter This commit reviews the whole "JS side" of the web_editor and website apps. This is a first step to be able to improve them with new and better functionnalities; this commit is not supposed to change any visual behavior. The main goal was to achieve a structure similar to the backend one. Now, the frontend side also has a root widget (like the WebClient) and all other widgets are attached to it one way or another. This allows the benefits of using the 'trigger_up' functionnality for example. As RPC are now mainly done with the `this._rpc` functionnality (being possible thanks to the parent hierarchy), the frontend will also be possible to test thanks to QUnit in a future update (besides the "text" editor side which still requires a refactoring to be able to do that). --- Here are some of the changes: (-) conventions and documentation The code has been updated to follow JS conventions and a lot of code has been commented (around +2000 lines of comment). This also means that lots of functions have been renamed to use camelCase or simply to make their name understandable. See https://github.com/odoo/odoo/wiki/Javascript-coding-guidelines. (-) deprecated: web_editor.base The "web_editor.base" module has been split and does not force the modules which require it to wait for DOM ready anymore. This was indeed slowing loading times, but also prevented to use some modules in some contexts (see the LESS editor use in web_studio which is the subject of another task). Now the "editor context" can be got thanks to the "web_editor.context" JS module with its "get" function. The "web_editor.base" module should probably not be used anymore (see its code and recent updates). (-) new: web.dom_ready If a JS module should wait for the DOM to be ready to be executed, a new JS module has been created: "web.dom_ready". This should always be used in a module which only want to instantiate stuff. Do not extend (or worst, include) classes after DOM ready. (-) website.website The "website.website" module has been split. "website.website" does not return anything useful anymore, it just initialize some miscellaneous stuff, without waiting for the DOM to be ready. You might want to check "website.utils", "website.content.compatibility" or `WebsiteRoot`. Also `website.form` has been deleted (use `this._rpc`), so has been `website.error`. `website.prompt` will be removed in a future update to be replaced by `Dialog.prompt`. (-) widgets are great Many classes which were not widgets are now widgets. This allows them to use the 'events', the 'xmlDependencies' and the 'this._rpc' features for example. Here are some of the main ones: - Snippet options: these were classes with a `$el` for the menu element and `$target` for the customized element. This is still the case but following standard `Widget` structure (one exception: using `this.$(...)` searches in the `$target` as before this update). - Snippet animations: instead of class instances with a `$target` element which can be `start` and `stop`, these are now standard widgets which can be `start` and `destroy`. `this.$target` is an alias to `this.$el` for ease of compatibility. - Snippet editors: instead of class instances in charge of an editor overlay, these are now widgets. Each "child" snippet editor is properly attached as a "child", which allows editors to communicate and to be properly destroyed. (-) root widgets and website navbar The frontend is different of the backend. In the backend, the page has an empty <body/> element and all the components are instantiated from parent to children (i.e. the `WebClient` is instantiated and is in charge of instantiating the `ControlPanel`, etc). The frontend cannot work like that on page loadings as they are way more frequent than in the backend and we do not want them to flicker. A frontend page is loaded as a <body/> element which already contains the website navbar and its menus and the whole content page. JS code has to be "attached" to these existing elements. This is possible thanks to the `RootWidget` instances and the specialized `WebsiteRoot`, `IframeRoot` and `WebsiteNavbar` (see code for details). (-) lazy loading No more (or at least a lot less) XML/JS has to be loaded on page loading, thanks to the use of the `Widget.xmlDependencies` feature. XML which have to be lazy loaded is loaded only on related Widget instantiation if necessary, which allows to execute a lot of JS code before the DOM is ready and to start many widgets on DOM ready (not later). A visual benefit of this is clicking on the 'edit' button as soon as it is possible: before this commit, this was sometimes not doing anything as event handlers were not binded yet. Still a possible exception: loading the session and locales. This may be asynchronous stuff which is still required before widget instantiations but this will be the subject of another task. (-) deprecated code and code location More than reviewing code and organizing it, many apparent dead code was removed. More importantly, mislocated code was put in the right app. This is the case for snippet animations which is a concept for website apps but was defined in the web_editor app, or some translation concepts which were part of website but should have been part of web_editor. --- There are probably more things to say about this commit but I will let the comments speak for those.
2017-08-16[MOV] web_editor, website: reorganize filesqsm-odoo