summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/core/utils.js
AgeCommit message (Collapse)Author
2021-05-28[IMP] web: add findWhere utilsBruno Boi
closes odoo/odoo#70936 Taskid: 2412172 Related: odoo/enterprise#18366 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
2020-07-23[IMP] web: Model: extensions registryJulien Mougenot
Refactoring of the Model class of `model.js` to support multiple extensions. The purpose is to build a model having the appropriate modules for a given situation. For instance, we don't need the control panel model if we don't have a control panel to start with. Some logic of the control panel model (which was until now the "main" search model) has been given to another model extension named "Search Model Extension" which will synchronize the informations of all models providing search data (domain, context, etc.). The model instantiated in the actions/views is now an instance of the "Action Model" (which directly extends the Model) and is meant to replace the view model in the long term. It might however need some improvements to hold such a role (partial interface rendering, etc.). Part of task 2228968 Co-authored-by: Julien Mougenot <jum@odoo.com> Co-authored-by: Mathieu Duckerts-Antoine <dam@odoo.com>
2020-06-22[IMP] web: utils: add groupBy functionJulien Mougenot
This commit introduces a new utility function: 'groupBy'. It is similar in API and result as the underscore method of the same name. X-original-commit: 834a1967161dc537cb2d5543314a062dbac08f9c
2020-05-05[IMP] web: add sortBy to core.utilsJulien Mougenot
Add a "sortBy" helper to core utils. This function takes an array and an optional criterion as arguments and returns a new array sorted according to the given criterion.
2020-04-16[REF] web,mail: use patchMixin and patch instead of utils.patchMichael Mattiello (mcm)
This commit replaces the use of utils.patch by the new class patcher and makes the renderers that are converted to owl patchable. closes odoo/odoo#47700 Related: odoo/enterprise#9551 Signed-off-by: Géry Debongnie (ged) <ged@openerp.com>
2020-04-16[IMP] web: add es6 class patcherMichael Mattiello (mcm)
This commit implements a new way to monkey-patch ES6 classes (for instance, Owl Components). Usage ----- odoo.module('module.BaseClass', function (require) { const patchMixin = require('web.patchMixin'); // Define your class as usual class BaseClass { constructor() { this.foo = 'foo'; } bar() { console.log(this.foo); } } // but export it like this to have a "patchable" version return patchMixin(BaseClass); }); odoo.module('module.Patch', function (require) { // imports the "patchable" version const BaseClass = require('module.BaseClass'); BaseClass.patch('key', T => class extends T { constructor() { super(); this.foo = 'patched foo'; } bar() { super.bar(); console.log('patched bar()'); } } ); }); odoo.module('module.instance', function (require) { // imports the "patchable" version const BaseClass = require('module.BaseClass'); const obj = new BaseClass(); obj.bar(); // if module.patch is loaded before this module the patch // will be apply and calling obj.bar() will log: // patched foo // patched bar() // You can unpatch a patchable class BaseClass.unpatch('key'); });
2020-03-31[REF] web: add missing features of abstract fieldMichael Mattiello (mcm)
This commit adds missing features of AbstractField written in owl. task id: 2193996
2020-03-16[FIX] web: rounding errorNicolas Martinelli
In JavaScript, the following computation introduces numerical errors: ``` Math.pow(10, -4) = 0.00009999999999999999 Math.pow(10, -5) = 0.000009999999999999999 ``` In the context of `round_decimals`, such errors propagate to `round_precision`, ultimately leading to inconsistencies between Python and JS (see #47300 for detailed use case). Instead of computing `Math.pow(10, decimals)`, we parse the scientific notation to prevent such inaccuracies. We also introduce tests in line with the Python tests. opw-2205092 closes odoo/odoo#47694 X-original-commit: cb471897bfa08d1fee6a9f49e90d9c120e1733fc Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
2020-03-13[IMP] web,*: Enhance test helpersJulien Mougenot
1. Test utils helpers adapted to properly instantiate the new Owl control panel 2. New file 'test_utils_control_panel' to create a control panel and use helpers 3. New helper: createComponent (creates a generic component, see jsdoc) 4. Use of the new helpers in the current tests (more in sibling commits) 5. Helper 'addMockEnvironment' is now asynchronous 6. Owl config mode set to 'dev' in test suite (props validation) Part of task 2196029 Co-authored-by: Mathieu Duckerts-Antoine <dam@odoo.com>
2020-03-13[REV] web: allow patching gettersJoseph Caburnay
This reverts commit d6b854306cae245343a7acb9edc4178d245a49fe. The reverted commit introduced issues in patching class methods. Introducing getters in the patch function is not actually compatible with the original method patching. Test for patch method is also introduced to guard patch from future invalid modification that happened. A more robust way of patching classes is now being developed. closes odoo/odoo#47557 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
2020-03-06[IMP] web: allow patching gettersJoseph Caburnay
Previous implementation of patch (web.utils) only allows patching methods. This commit allows patching getters as well. closes odoo/odoo#47047 Signed-off-by: Géry Debongnie (ged) <ged@openerp.com>
2020-02-28[FIX] web: review domain for assets attachementqsm-odoo
Make the domain to match assets attachment more robust to avoid deleting wrong files. closes odoo/odoo#46523 X-original-commit: c92d63fa5baf09cb0969fcf4fbd5c28407af58ae Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2020-01-21[FIX] web: utils: fix typos in patch and unpatchAaron Bohy
The use of 'this' to call other utils adds a restriction on the way utils are called from the outside: utils.patch(...); // works fine const patch = utils.patch; patch(...); // doesn't work
2020-01-06[FIX] web: human readability of negative numbers.Arnaud Joset
Before this commit, negative numbers are never rendered as human readable (e.g. 34000 -> 34k). closes odoo/odoo#42789 Taskid: 2160790 X-original-commit: b51877c4c4c9d8cd873dd0205954fd807d62ee01 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
2019-12-12[FIX] web: utils: patch: restore _superAaron Bohy
Before this rev., this._super wasn't correctly reset after being called. It means that it was sometimes wrongly set, for instance in the following scenario: utils.patch(SomeComponent, { x: function () { this.y(); this._super(...arguments); // this._super was still y }, y: function () { this._super(...arguments); }, }); closes odoo/odoo#41691 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
2019-12-09[ADD] web: add owl 1.0.0-beta1 to odooGéry Debongnie
With this commit, we properly introduce the Owl library into our beloved codebase. More information on the Owl library can be found in the project repository: https://github.com/odoo/owl/ Co-authored-by: Aaron Bohy <aab@odoo.com> Co-authored-by: Julien Mougenot <jum@odoo.com> Co-authored-by: Mathieu Duckerts-Antoine <dam@odoo.com>
2019-08-21[MERGE] forward port branch saas-12.4 up to f26de445e55Christophe Simonis
2019-08-20[MERGE] forward port branch saas-12.3 up to 6f55fd65da8Christophe Simonis
2019-08-19[MERGE] forward port branch 12.0 up to 32039b2ab44Christophe Simonis
2019-08-07[FIX] tools: epsilon magnitudeNicolas Martinelli
The following rounding is incorrect: ``` >>> float_round(6.6 * 0.175, precision_digits=2) 1.15 ``` Indeed, 6.6 * 0.175 = 1.155 ≈ 1.16. In this specific case, the `epsilon` computed is not sufficient. A precision of 53 gives: normalized_value = 115.49999999999997 epsilon = 1.2823075934420547e-14 => new normalized_value = 115.49999999999999 Bad luck, this is just not enough to tip the value in the right direction. However, a precision of 52 is sufficient: normalized_value = 115.49999999999997 epsilon = 2.5646151868841094e-14 => new normalized_value = 115.5 The value of 53 was chosen from the `binary64` number format precision. In case of Python, the corresponding machine epsilon is 2^-52 [1]. Therefore, using 52 instead of 53 does make sense. It is worth noting that the value of the machine epsilon 2^-52 = 2.2204460492503131e-16, which is still 2 orders of magnitude below our dynamic estimation. [1] https://en.wikipedia.org/wiki/Machine_epsilon [2] `numpy.finfo(float).eps = 2.2204460492503131e-16` opw-2047368 closes odoo/odoo#35521 Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
2019-08-07[IMP] *: fix typos in commentsmreficent
closes odoo/odoo#35404 Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2019-07-30[IMP] web_editor, *: remove assets from documentsfja-odoo
* web "Document" tab in "Select a media" Dialog was displaying all the assets files. Now all files containing "assets_" are excluded from the "Document" tab. This is similar to the regenerateAssets function in debug_manager that deletes assets based on this criteria. For consistency the Assets Domain is now a utils.js function Part of https://github.com/odoo/odoo/pull/33195 task-1945874
2019-07-25[FIX] web: translatable size of binary fieldsLucas Perais (lpe)
Before this commit, the string containing all size units for binary fields was comma separated. The problem with this is that comma got also translated into the language's specific comma-like, whereas in this case it is obviously a technical separator which shouldn't be translated After this commit, we separate unit size with pipes (|), hoping that this character - is easy to find on any keyboard - has no language specific equivalent OPW 2041975 closes odoo/odoo#35183 Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2019-07-17[IMP] account, portal, web, website: move chatter below invoicePratima Gupta
No more modal because it's not visible and less handy. Use same behavior as sales order portal. Adapt the invoice style to properly adapt and align with the chatter block. Part of task-37264 closes odoo/odoo#34360 Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com> Co-authored-by: Pratima Gupta <pgu@odoo.com> Co-authored-by: Sébastien Theys <seb@odoo.com>
2019-05-21[IMP] web, *: add utils to get dataURL (base64) from file/blobSébastien Theys
* = partner_autocomplete, point_of_sale, web_editor, website_forum, website_slides This can be used for example to preview an image from a file input field. It can also be used to send the base64 content of the input by RPC instead of having to rely on form submit as POST with multipart/form-data. Technically wrap FileReader.readAsDataURL in a Promise. This will also be used in task-1930726 PR: #33508 Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2019-02-22[MERGE] forward port branch saas-12.1 up to 0f4abc5c228Christophe Simonis
2019-02-21[MERGE] forward port branch 12.0 up to 84143a34b31Christophe Simonis
2019-02-15[FIX] web: remove human_number limitationsMathieu Duckerts-Antoine
The formatting of very big numbers (like 1.0045e+22) was not handled adequately by the function 'human_number' in web.utils. For those numbers, it seems more appropriate to use the scientific format. The only difference introduced here is the following. Beyond a magnitude of e+21, we represent the numbers by themselves but we keep the number of decimals provided as parameter (or zero by default) and we remove useless zero decimals like in the other cases. For instance, 1.0045e+22 is replaced by 1e+22 instead of 1.00e+22 if ask 2 decimals of precision (and by 1.005e+22 for 3 decimals). We have also fixed a small bug occuring in the previous version of the function: the symbol 'E' was never used. So by the past the above number would have be represented as 10045000P and, even worse, 1.01e+45 by 1.012e+28P. closes odoo/odoo#31140
2019-02-01[FIX] web: unaccent default params fixedmgh-odoo
purpose of this commit is to remove default parameter of "casesensitive", because default parameter is ES6's feature. it's not supported in IE9. closes odoo/odoo#30751
2019-01-10[Generic] unaccent searchmgh-odoo
- added unaccent search on POS customer/partner and product - moved unaccent from "mail.utils" to "web.utils" - added more character to make function accurate We might use str.normalize(from ES6) but the problem is str.normalize method can not consider some double characters i.e. accented character when normalized it returns 2 normal characters and normalize method returns single character, so here custom unaccent method is used to normalize the string What we can improve here: We can use str.normalize method and check if string is still have unaccented charaters that we can call our unaccent method but this unaccent method is also working and performing well closes odoo/odoo#27671
2018-10-25[REF] web: remove useless codeGéry Debongnie
The utility function xml_to_json, which is mainly used by the views to parse their arch (from string to xml tree) had a peculiar behaviour: it tried to process some attributes as json. If by chance, these attributes are valid json, then they are replaced by their parsed value. It is difficult to say why it could be useful. Maybe this was done to prevent using pyeval many times later on. But if that is the case, it should be done by the view code and not the utility function (the view can precompute all attributes once). Also, this behaviour is annoying for code later in the chain, which needs to check if what it gets is an object or a string. With this change, attributes are always returned as string (at this point). closes odoo/odoo#28133
2018-08-13[IMP] web: float_factor and float_toggle widgetsjem-odoo
This commit provides new js widgets for list, kanban and form views on float field. 1/ 'float_factor' displays the normal float field, but takes a conversion factor as option. The displays value is the normal one multiplied by the factor. You can use the widget like <field name="my_float_field" widget="float_factor" option="{'factor': 2}"/> 2/ 'float_toggle' displays a button (in edit mode) looping on a range of given value at each click. A conversion factor is optional (default will be 1) to display a converted value, but sent to non converted one to the server. You can use the widget like <field name="my_float" widget="float_toggle" option="{'range': [0, 0.5, 1], 'factor': 2}"/> 'range' and 'factor' are put in the options. In simple read mode, the widget display the value as a traditionnal text (like a normal char field). This commit provides tests and documentation for those 2 widgets. Task #39079
2018-07-06[REF] web: move some code from pyeval to lib py_extrasGéry Debongnie
Some functions that were in web.pyeval were actually "odoo independant". To make them easier to manage/understand, this commit move them in the library py.js, as an extra file.
2018-03-08[MERGE] forward port branch 11.0 up to fcb48b72415Christophe Simonis
2018-03-08[FIX] web: 'image_small' field not displayed for non-latin translationstrue-datura
Before this commit, images in kanban view of the Contact app were not displayed on non-latin languages, such as Russian. This was caused by the is_bin_size helper that wrongly assumes that a certain string is not a binary size, although it is (e.g. 64.2 Кб). This commit fixes the issue by including such strings as valid binary sizes. Bug found and fixed by @true-datura Test by @alexkuhn closes #23526 closes #22519
2018-02-21[MERGE] forward port branch 11.0 up to dbb713c2f83Christophe Simonis
2018-02-21[MERGE] forward port branch saas-16 up to 49f85485571Christophe Simonis
2018-02-21[MERGE] forward port branch saas-15 up to 085ff2f9c46Christophe Simonis
2018-01-12[MERGE] forward port branch 11.0 up to 3b80a059ff4Christophe Simonis
2018-01-12[MERGE] forward port branch saas-16 up to 3b7bf3a4b8bChristophe Simonis
2018-01-12[MERGE] forward port branch saas-15 up to 8962b8ecc2aChristophe Simonis
2018-01-12[FIX] web: contexts on field widgets + enforce bin_size for binaryAlexandre Kühn
Field widgets now have a key 'context' that let them extend the context of the dataPoint (e.g. list). In particular, widgets on binary fields enforce the contextual item {bin_size: True}, so that the server gives the size of the binary field as its value, instead of its content. This change on binary fields reduces network load when accessing a view with binary fields.
2018-01-12[FIX] web: binaryfile field in list viewsAlexandre Kühn
Revert partially 255e8ca3d92e3a77d7c2a145677623518bc2f978 Removed widget 'download_link', as it was a sub-version of widget 'binary': it did the exact same thing (representation of binary fields by means of a download link) in a much better-looking way (download icon + filename as text of the download link, instead of just a download link with text "Download"). Also, the values of binary fields might be already a human-readable binsize (e.g. 2.52 MBs), instead of its plain textual string representation in base64: The contextual parameter 'bin_size', when set to true, does not download the data of binary fields. As a consequence, the server provides the sizes of the binary, instead of their value.
2018-01-10[MERGE] forward port branch 11.0 up to ff0abd214c8Christophe Simonis
2018-01-05[FIX] web: add a stableSort method for sorting x2mChristophe Matthieu
Issue: create 60 lines in ordered x2many with the same value (0) for the order field and make a change ; the displayed records will be switched. The problem appears because the sorting function is not stable and the records with the same values can change place (hence change page), which is quite disturbing for the user.
2017-10-27[IMP] web: new utils function traversePath (#20521)alexkuhn
Enhanced version of the traverse function in utils, so that it also builds the paths to any tree element. There is a function visit in /enterprise/web_enterprise/static/src/js/app_switcher.js that has almost the same purpose as traverse in /odoo/addons/web/static/src/js/utility.js. It seems more appropriate to move visit to utility.js. Also, in order to keep good performance of traverse, it might be better to add an additional 'enhanced' version of traverse instead of making changes on traverse. Hence the newly added function traversePath.
2017-09-25[FIX] web: review kanban column progressbar designqsm-odoo
Now: - Animations do not trigger on first rendering - Fix a bug where 5k was considered smaller than 9 (since 5 < 9) - Properly animate number when it crosses over multiple thousands levels - Always preserve at least 3 digits when switching to a thousands level and never show a decimal (4500000 is represented as 4500k, not 4.5M) - Monetary symbol is not bold (and is better integrated) - Add thousands separators for > 3 digits numbers
2017-09-18[FIX] *: fix a bunch of incorrectly documented docstringXavier Morel
Fix a bunch of ill-documented/incomplete/incorrect method docs Without this, the automatic doc generation does not work.
2017-04-11[REF] web: change internal representation of fields and view meta datasChristophe Matthieu
* Data manager load_view returns a viewInfo object * ViewInfo contains: the arch, fields and fieldsInfo objects, and some extra informations * The fields come from the server and are frozen, without any view attributes (depend of the model). * The fieldsInfo contains every view attributes and informations.
2017-04-11[REF] web, *: redesign all JS viewsGéry Debongnie
This commit introduce a full redesign of all JS views. We started basically from scratch. The goal was to unify all the various views under a common framework, to make them testable, to make then usable in different conditions (in studio, or in the frontend), and to make our lives easier. Some important points are: - we introduced new coding guidelines (camelCase, 80 chars width, ...) - we have a brand new testing framework (still QUnit based) - kanban view moved to the web addon - calendar view (formerly web_calender) moved to web as well - the tree view was removed - all new code should be documented We hope that this code is the start of a new era for the Odoo web client, we want to have a high quality codebase, well documented, well tested, well designed. Work done by the framework team: mostly aab, ged, chm, dmo, qsm