On chromium the input does not trigger a change event if the value is the same
(the same file is selected twice).
So we force the null value when the widget is cleared.
issue8513
review265681003
As the optional scrollbar of the treeview will be removed, the dropdown input
may no more be visible. So we must scroll until it is visible.
issue8509
review285581002
We must return the promise of the reload as the button promise to avoid enable
back the button before the screen is fully reloaded.
issue8488
review249661002
When a dialog (form) is validated and show the error message from the browser,
the input number must be visible.
Also we should not store on the model invalid values to get error on client
side instead of the server side.
issue8487
review255661002
The RETURN key should validate and save the current record before creating a
new one.
And UP/DOWN keys should create new record when they are at the end.
issue8485
review251761002
Those calls can be triggered by event like focus-out. So to ensure a correct
order of the flow, we must defer the processing of the result.
issue8482
review273571002
We set a minimal width on the treeview table (min-width on td has an undefined
behavior) by summing the default width of each column.
We add a fake scrollbar on top of the treeview to ensure the user will see that
there are more column to see. The fake scrollbar is a div with the same minimal
width and its parent as the scroll value synchronized with the scroll of the
treeview div.
The minimal widths are removed on extra small screen if the treeview is
responsive because the table has 100% of the width.
To have the minimal width working also on the xxx2Many view inside a form, we
must set a maximum width to the cell. As this width must be expressed in
relative size (not in pixel to support resizing), we express them as
percentage of the width of the viewport. The percentage is computed from the
percentage width already computed but also rated with all the percentage width
of the parent cell. We also remove the maximum percentage of the offcanvas
size. This does not give the exact maximal width but it is close enough to have
a correct behavior no matter the size of the screen.
issue8308
review259411002
The DOM and the tabs list are not ensured to have the same order because the
DOM is modified after the view promise is resolved.
To rely only on a single information source, we store the tab as data on the
nav li.
issue8443
review249521004
Tab.close can be called multiple times (ex: closing wizard running in a tab)
so the indexOf can return -1 if the tab has already been removed.
issue8431
review263691002
The callback can be triggered when the tab is no more current.
E.g. at the end of a wizard when the screen is reloaded and displayed, the
current record is reset which trigger the callback but the wizard may have
open a new tab meanwhile.
issue8432
review259671002
The event is already binded in the Form widget so the EditableTree widget does
not need to bind it again otherwise the callback is called twice per event.
issue8429
review255571002
We add a sequence attribute to the key definition and use it for sorting.
This attribute is filled by the field sequence if it exists (using
sequence_ordered) or by the key name.
issue8373
review275431002
We add to DomainValidationError the invalid domain and the field definition so
the client can format and append it to the description of the error.
issue8288
review255351002
The server adds to the definition of the fields, the definition of relation
fields up to specific deep level.
The clients use this relation fields definition to extend the domain parser
with those fields using a dot notation. But those "dotted fields" are not
shown in the search filter to not bloat the popup as it is dedicated to
learning.
In addition, Dict fields are also filled with relation fields coming from the
keys defined in the schema model. As the size can very large, it is possible
to deactivate this feature from the configuration.
issue8293
review259391005
The cached value should never be changed after being stored by the setter or
by a getter. So we make a copy of the value before storing it and return
another copy when returned.
issue8387
review269601002
We preload the first field of the first row if needed. This should ensure that
the following records are also loaded.
And we do not call load if the field is already loaded to avoid to create a
promise.
issue8199
review265411002
The split should depend on the height of the screen and not the width because
it does not have a scrollbar when it is too long.
issue8292
review263371002
The display must be run before the callback linked to the promise of
save_current. And save_current must return a promise with the same state as
the save promise.
Also save should not reject with the exception to avoid jQuery warning.
issue8338
review265421002