Commit Graph
63 Commits
Author SHA1 Message Date
Aaron Bohy b558cb7996 [FIX] web: qweb old inheritance mechanism
Before this commit, defining a extension of a template by using the
combination of directives 't-name' and 't-extend' ignored potential
extensions that could have been defined beforehand.

For instance, let's assume the following templates.
```xml
<t t-name="a">
    <div><span>1</span></div>
</t>
<t t-extend="a">
    <t t-jquery="span" t-operation="replace">
        <span>2</span>
    </t>
</t>
<t t-name="b" t-extend="a">
    <t t-jquery="div" t-operation="append">
        <span>b</span>
    </t>
</t>
```
Rendering template "b" displayed "1b" whereas we would expect "2b".

Moreover, when the extended template is itself an extension of
another template:
```xml
<t t-name="a">
    <div><span>a</span></div>
</t>
<t t-name="b" t-extend="a">
    <t t-jquery="div" t-operation="append">
        <span>b</span>
    </t>
</t>
<t t-name="c" t-extend="b">
    <t t-jquery="div" t-operation="append">
        <span>c</span>
    </t>
</t>
```
Rendering template "a" displayed "a", template "b" displayed "ab",
but template "c" displayed "ac", whereas we would expect "abc".

With this commit, other extensions done to a template are kept when
a new extension is defined. It relies on the templates order, and
takes into account all extensions that have *already* been defined.
This is exactly how the new qweb inheritance mechanism (using
't-inherit' and 't-inherit-mode') behaves.

closes odoo/odoo#54315

Signed-off-by: Lucas Perais (lpe) <lpe@odoo.com>
2020-07-10 11:53:23 +00:00
Lucas Perais (lpe) 9256492f10 [FIX] qweb2: ignore comments between branching directives
Have a template of that form:
```xml
<t t-if=""/>
<!-- Comment -->
<t t-elif=""/>
```

Before this commit, both python and JS crashed because any type of node
between branching directive was forbidden

After this commit, Comments are just ignored and removed, while actual
template nodes are still forbidden between branching directives
There is no crash anymore

closes odoo/odoo#45899

Signed-off-by: Lucas Perais (lpe) <lpe@odoo.com>
2020-02-24 15:32:19 +00:00
Christophe Simonis c50d7d6bc5 [MERGE] forward port branch 12.0 up to 82c4393fd0 2019-03-19 15:14:23 +01:00
Christophe Simonis bd63913326 [MERGE] forward port branch saas-11.3 up to 4e39328a76 2019-03-18 20:03:24 +01:00
Christophe Simonis 2940ee6b35 [MERGE] forward port branch saas-15 up to c6353942ff 2019-03-18 14:17:54 +01:00
Denis Vermylen 791a38a655 [FIX] web: qweb2: allow null values in a foreach iteration
Before this commit iteration in a t-foreach containing null or
undefined values crashed because they have no attributes.

closes odoo/odoo#31828

Signed-off-by: Fabien Meghazi <amigrave@users.noreply.github.com>
2019-03-12 16:15:39 +00:00
Martin Trigaux 2087fb5aa9 [FIX] web: support full attribute syntax
Only the syntax
<t t-operation="attributes">
    <attribute name="foo">bar</attribute>
</t>

was currently supported for attributes while the syntax

<t t-operation="attributes">
    <attribute name="foo" value="bar" />
</t>

Is also correct and supported server side.

Using value instead of the node content is needed to avoid translating the node
while it is parsed by babel to extract translatable content
2019-01-30 15:23:50 +00:00
Christophe Matthieu 8f7fdb0d99 [FIX] web: fix JavaScript qweb and activate tests
Fix the issue of the t-esc display the content before the tag.
Activate qweb qunit test (same test for the JavaScript and python)
Use the same behavior as python: keep attributes order, and display content
as default value when the variable is falsy.
2018-08-13 17:09:28 +02:00
kujiu 9de1bc0eef [IMP] Improve compatibility with screen readers (accessibility) (#24574)
Today, Odoo is really tricky to use without seeing the screen, it must be improved to be usable.

This PR forbid to use labels without a "for" attribute, add some title, rule and aria attributes in HTML. With that, Odoo will be fully usable with a screen reader.


* [IMP] Labels must have a for attribute. Improve accessibility.
* [IMP] Better error message when trying to read a missing cached value
* [FIX] Add some aria-label and title attributes for screen readers.
* [FIX] Template name is not included in the error message in case of SyntaxError in QWeb
* [FIX] Improve the Tour failed at step error message to be more explicit.
* [IMP] Add aria-labels
* [FIX] Add missing aria-label on failing test
* [IMP] aria-hidden means hidden. Fix all bad aria-hidden and hide aria-hidden for all.
* [IMP] Color names on kanban views and many2many tags
* [IMP] Add some checks on views for accessibility.
* [IMP] Add `alt` attribute on `img` tags.
* [IMP] Add aria-label and title on non-described icons
* [IMP] Add button role to widgets with btn class
* [IMP] Translate aria and formatted attributes.
* [IMP] Remove wrong aria-labelledby
* [IMP] Add menu role on dropdowns
* [IMP] Buttons must be focusable
* [IMP] Add aria attributes on progress bars
* [IMP] Improve accessibility of basic widgets
* [IMP] Change main layout to more semantic tags
* [IMP] Add menuitem role when missing
* [IMP] Remove wrong role='presentation'
* [IMP] Improve accessibility of tab panels
* [IMP] Add aria-invalid on invalid fields
* [IMP] Add aria-sort on ordered columns
* [IMP] Add role on alerts
* [IMP] Use dialog role, header, main and footer tags for modals
* [IMP] Add labels on o_status
* [IMP] Improve accessibility of kanban view with feeds and articles
* [IMP] Add alerts in case of new messages
* [IMP] Add widget, navigation or img role to aria-labelled items
2018-06-22 21:22:21 +02:00
Adrien Dieudonne 599f6a762e [FIX] web: qweb: load template with non-http xhr
Since we are able to lazy load Qweb templates, there was
an issue to generate Awesome Timesheet iOS native app with
Cordova properly. It seems that under Cordova, iOS always
returns 0 for the status on a xml http request object.

The problem is that native applications are requesting
a local file from something that isn't a webserver.

The local file is delivered with no http headers that means no
"200 OK" header and no "404 Not Found" errors.

In this case, the request is still be completing as intended even
if the status code used by browsers is 0.

For more info, see:
https://developer.mozilla.org/fr/docs/Web/API/XMLHttpRequest
https://bugzilla.mozilla.org/show_bug.cgi?id=331610
2018-03-05 14:06:23 +01:00
Xavier Morel 7f6d32d5e0 Revert "[FIX] qwebjs: add tests to test suite" 2017-10-10 15:39:39 +02:00
Xavier Morel 6e646bc8bd [FIX] web: make qwebjs tests pass again
A bunch of features had been added to the qweb test files and qwebjs
did not pass them as features were either implemented differently or
not implemented at all:

* Fixed wonky and not cross-impl tests
  - added ``not`` word replacemenet to qwebjs as I wasn't sure how to
    handle that one cross-impl
* fixed t-esc/t-raw to render content *inside* the host node e.g.
  span@t-esc should render as <span>{contents of esc}</span>
* added fallback to body content if t-esc/t-raw yields an empty result
* process t-att in order with t-att-* and t-attf-* rather than before
  them both
* suppress attribute generation entirely in case of falsy value
2017-10-10 14:25:19 +02:00
Christophe Matthieu 27ff895dfd [IMP] web: extend qweb to allow dynamic templates in t-call
Before this change the t-call can use only receive a literal as parameters:
<t t-call="template.name17" />
This call render the template 'template.name17' with the current context.

Now, we can defined an expression with braces (same syntax that t-attf):
<t t-call="template.name{{ 10 + 7 }}" />
This call render the template 'template.name17' with the current context.

This change allows for greater flexibility for applications using qweb.
(The performance due to this change is unchanged during rendering time.)
2017-05-04 17:19:25 +02:00
Christophe Simonis 814c550913 [MERGE] forward port branch saas-11 up to a0ff1f2ad8 2017-04-21 14:34:11 +02:00
Christophe Simonis 8de514f805 [MERGE] forward port branch saas-6 up to b084ffd7f1 2017-04-21 14:07:02 +02:00
Nicolas Lempereur 716ceede16 [FIX] web_enterprise: kanban_state_selection ie
On IE (from 9.0 up to at least IE EDGE 14) we have this behavior
for the method serializeToString of XMLSerializer:

> (new XMLSerializer()).serializeToString($('<b>"</b>')[0])
  '<b xmlns="http://www.w3.org/1999/xhtml">"</b>'
> (new XMLSerializer()).serializeToString($('<b>"</b>')[0].firstChild)
  '&quot;'

Whilst browser such as chromium or firefox have:

> (new XMLSerializer()).serializeToString($('<b>"</b>')[0])
  '<b xmlns="http://www.w3.org/1999/xhtml">"</b>'
> (new XMLSerializer()).serializeToString($('<b>"</b>')[0].firstChild)
  '"'

Hence for IE9 and over, if in a `<t t-extend/>` a `t-jquery`
sub-directive (without `t-operation`) is available, we can have
broken javascript if a " is transformed into an &quot; at a unfortunate
location.

This commit favour node.data over XMLSerializer serializeToString to
avoid the possibility of this issue when a text node is processed.

opw-727283
2017-04-20 17:08:17 +02:00
Denis Ledoux cde8668034 [FIX] web: IE <= 11.0 doesn't support ChildNode.remove
IE 11.0 doesn't support `Childnode.remove`:
http://caniuse.com/#feat=childnode-remove

As a workaround, we use `Node.removeChild`,
which is more widely supported.

opw-710617
2017-03-06 18:21:06 +01:00
Fabien Meghazi 38ec6d7522 [FIX] qweb2.js: fix erratic object type detection in foreach (Fixes #15655)
Could not add a test as the qweb js testsuite is broken and it's xml
test files have been modified in order to test qweb.py specific cases.
2017-02-28 13:00:54 +01:00
Fabien Meghazi 75f60f6941 [ADD] web: Add extra condition branching (t-elif, t-else)
A new preprocess method is added to the template engine in order to do
preprocessing/sanitization of the templates before compilation.
This method can be overloaded in order to add new features such as
translation, ...
2016-09-09 18:03:08 +02:00
Géry Debongnie 06e583e1fd [FIX] web: change qweb to work around phantomjs bug
This commit does not actually fix qweb2.js, but it works around a
phantomjs bug.  The problem with phantomjs is that in some situations,
the xmlhttprequests are dropped with a status 0.  It is most likely
related to the issue:

    https://github.com/ariya/phantomjs/issues/11195

In our testing framework, it seems to appear when requests sent before
the 'load' event of phantomjs are received after, and also when those
requests are listened with the onreadystatechange handler.

The bug does not appear if we use addEventListener with the 'load' event (at
least, not for a few builds)

This commit does not worsen qweb, and it is also a small improvement in
style (in my opinion).
2016-01-26 14:22:56 +01:00
Richard Mathot c9c08adbd0 [FIX] qweb2.js: improve debugging 2016-01-05 09:27:51 +01:00
Christophe Matthieu 8f1bb1f72b [IMP] qweb2.js: display with console.debug the error message and the template name when the qweb try to compute a wrong template 2015-06-11 17:11:21 +02:00
Jeremy Kersten 4a698da8b3 [IMP] qweb: Allow to propagate value to variables outside the loop.
If the variable was existing outside the context of the ``foreach``,
the value is copied at the end of the foreach into the global context.

Fix #4461 - Q74531 - Q71486 - Q71675
2015-01-30 14:26:48 +01:00
Jeremy Kersten b2c0b4e9ed [IMP] qweb: Allow to propagate value to variables outside the loop.
If the variable was existing outside the context of the ``foreach``,
the value is copied at the end of the foreach into the global context.

Fix #4461 - Q74531 - Q71486 - Q71675
2015-01-30 14:09:02 +01:00
Fabien Meghazi 75dfa9a356 [ADD] QWeb2: add support for operation='attributes' in a t-extend
Same syntax as server's position='attributes' on view inheritance
2014-10-16 10:25:57 +02:00
Xavier Morel b9fdb93bec [FIX] implementation of t-call's 0-index in qweb-js
Had expected regularity, had not noticed the Python version is really an
ignoble hack where the string "0" (exactly) is interpreted in a specific
manner when used in t-raw and format strings, *and nowhere else*.

Had special-cased the expression everywhere which broke e.g.
<t-set="xxx" t-value="0"/>. Reproduce Python behavior more closely,
and strongly consider swapping out both for something different e.g.
[[content]] or something like that, which doesn't cause problems in
Python but doesn't have to be so specially cased either.
2014-10-14 16:20:29 +02:00
Xavier Morel d5e3d121e3 [ADD] qweb: call directive's body
* __content__ can't be used in Python implementation because safe_eval, so use
  ``0`` from Python implementation instead
* remove postfix from t-call tests because due to implementation details all
  whitespace crap following a t-name is added to rendered template in Python
  impl, and don't want to normalize whitespace.
2014-10-06 19:13:45 +02:00
Xavier Morel 494dcbd0e3 [IMP] qweb doc, tests
* document qweb based (mostly) on JS version
* convert JS qweb tests to (mostly) language-independent XML so they can be
  used for JS and Python implementations
* add some more tests (e.g. precedence between t-value and body in t-set)
* remove ``t-import``
* fix parity in foreach(dict) (and rename some variables to make array and
  object versions more similar)
2014-10-06 19:13:43 +02:00
Xavier Morel bed6b01c53 [ADD] qweb-js: escf, rawf for parity with Python version 2014-10-06 19:13:42 +02:00
Xavier Morel 4fb49a67f3 [ADD] qweb-js: jinja-style interpolation pattern 2014-10-06 19:13:41 +02:00
Xavier Morel 35f5fb46e7 [IMP] qweb-js: reimplement string interpolation compilation as a single pass 2014-10-06 19:13:40 +02:00
Xavier Morel 9fe71a5d18 [IMP] update qweb-js tests
* latest qunit
* template loading (handle async)
* add format tests
2014-10-06 19:13:40 +02:00
Fabien Meghazi 4373f85773 [FIX] Do not self close empty elements that are not html void elements
bzr revid: fme@openerp.com-20140507121413-o7jqhexbm1wmitt6
2014-05-07 14:14:13 +02:00
Fabien Meghazi 84a840a38c [REM] Removed useless QWeb t-escf and t-rawf
bzr revid: fme@openerp.com-20140115182018-d7q3e6elm6uqh0ox
2014-01-15 19:20:18 +01:00
Fabien Meghazi 3ddeaee79c [MERGE] upstream
bzr revid: fme@openerp.com-20130814164422-l0h0ueue0fwk94uu
bzr revid: chm@openerp.com-20130828165815-a901l9gx66lj0pj1
bzr revid: fme@openerp.com-20130924125103-65bngr3rnm6k7u3a
2013-09-24 14:51:03 +02:00
niv-openerp 3210d02d8f [REVERT] reverted 3812 because it's an incorrect way to upgrade an external dependency of OpenERP
bzr revid: nicolas.vanhoren@openerp.com-20130819092940-9vqh5036p7rf2azv
2013-08-19 11:29:40 +02:00
Fabien Meghazi 81e028b791 [ADD] QWeb: add async api (backward compatible)
bzr revid: fme@openerp.com-20130814164322-cny24d0i6tg4ftvn
2013-08-14 18:43:22 +02:00
niv-openerp c8142aa421 Updated qweb
bzr revid: nicolas.vanhoren@openerp.com-20130731141139-7ssepci9vxnp9hpf
2013-07-31 16:11:39 +02:00
Fabien Meghazi 173a8b9d4d [FIX] QWeb: purge compiled template when template is added
bzr revid: fme@openerp.com-20121206132115-6fyedomrrchrxc43
2012-12-06 14:21:15 +01:00
Christophe Simonis 56ee9f011b [FIX] qweb: <t t-log> action was generating invalid code
bzr revid: chs@openerp.com-20121121155001-7gwb3w3mxqevxibm
2012-11-21 16:50:01 +01:00
Fabien Meghazi 8a7ccd3c76 [ADD] Add 'window' in QWeb reserved words
bzr revid: fme@openerp.com-20120925141558-zlj6f328oya3z5oy
2012-09-25 16:15:58 +02:00
Fabien Meghazi f2b5d602bc [ADD] QWeb2: added 'void' reserved keyword
bzr revid: fme@openerp.com-20120521114038-tz48ac3cgg8zjmti
2012-05-21 13:40:38 +02:00
Fabien Meghazi f12e598b59 [FIX] QWeb2: Array-like character access in String is not supported in IE<8
bzr revid: fme@openerp.com-20120213144234-dtdw5e8ho4x85frj
2012-02-13 15:42:34 +01:00
Fabien Meghazi ce65bc3ac3 [IMP] Add QWeb preprocess_node callback. Translate @label, @title and @alt attributes in web client
bzr revid: fme@openerp.com-20120207132901-ifwnfj6c4mp451tl
2012-02-07 14:29:01 +01:00
Fabien Meghazi 8abe9402e2 [REM] QWeb: removed xpath support
bzr revid: fme@openerp.com-20120201132217-h2i9a3g082i9ui9y
2012-02-01 14:22:17 +01:00
Fabien Meghazi ab447a4f13 [FIX] Use childnodes and not the whole extend node
bzr revid: fme@openerp.com-20120201124822-xo1msj0ou09o73uh
2012-02-01 13:48:22 +01:00
Fabien Meghazi 0839b0e4ee [FIX] QWeb template inheritance done right
bzr revid: fme@openerp.com-20120201122926-poh3q2157ra9tzjd
2012-02-01 13:29:26 +01:00
Xavier Morel a4a8e0eee1 [IMP] avoid losing error message when DOM parser fails to initialize in MSIE
bzr revid: xmo@openerp.com-20120125160949-5pr4h7aquohykdn2
2012-01-25 17:09:49 +01:00
Xavier Morel 00af91057f [FIX] Internet Explorer can't CDATA in HTML documents, convert XML CDATA sections into TEXT html sections
bzr revid: xmo@openerp.com-20120118112451-f7sbhzalhl2vapmc
2012-01-18 12:24:51 +01:00
Xavier Morel 80cc9c990f [FIX] XML serialization for MSIE8 (not by much, but now it kinda works again)
bzr revid: xmo@openerp.com-20120118105751-2jnwcilwc5p6kgth
2012-01-18 11:57:51 +01:00