diff options
| author | Lucas Perais (lpe) <lpe@odoo.com> | 2019-10-30 13:05:51 +0000 |
|---|---|---|
| committer | fw-bot <otis@odoo.com> | 2019-10-31 11:07:12 +0000 |
| commit | 18765dde73331c659d087362a1a2e2eb1d3227bb (patch) | |
| tree | 272582db941406b05818319ce9489814333a569f /addons/web/static/src | |
| parent | d11ba1454a5cda4705526715bc027522bfd90d95 (diff) | |
[FIX] web: dropdown in modal in RTL mode
Be in Right to left
Open a m2o search more, to get onto the list modal
toggle the filters menu
Before this commit, the filters dropdown was almost invisble
and too much on the right anyway
This was because the RTL was not taken into account
After this commit, we anchor the dropdown on the right
(both as in good and as in side) side of its trigger button
Also, when modifying the dropdown, by developping the Custom Filter
we force the repositioning of the dropdown, to take those new elements
into account
It is expected though that after this commit, in RTL, the
dropdown in a modal that has a scrollbar (which is on the left)
will be slightly pushed to the right. It is usable and visible though
Some kind of plumbing using $el.data('offset', fn) from popper.js
is possible, but has been deemed not robust enough
Docs
https://getbootstrap.com/docs/4.0/components/dropdowns/#methods
OPW 2088934
X-original-commit: 105b4affd65ea23e1aa65b53f4595c174c9984ef
Diffstat (limited to 'addons/web/static/src')
5 files changed, 40 insertions, 5 deletions
diff --git a/addons/web/static/src/js/views/control_panel/search/add_new_favorite_menu.js b/addons/web/static/src/js/views/control_panel/search/add_new_favorite_menu.js index 07c80d38c29..6897b596471 100644 --- a/addons/web/static/src/js/views/control_panel/search/add_new_favorite_menu.js +++ b/addons/web/static/src/js/views/control_panel/search/add_new_favorite_menu.js @@ -108,6 +108,7 @@ var AddNewFavoriteMenu = Widget.extend({ _toggleMenu: function () { this.isOpen = !this.isOpen; this._render(); + this.trigger_up('favorite_submenu_toggled'); }, //-------------------------------------------------------------------------- diff --git a/addons/web/static/src/js/views/control_panel/search/favorite_menu.js b/addons/web/static/src/js/views/control_panel/search/favorite_menu.js index 0a536820735..b2dc25d9327 100644 --- a/addons/web/static/src/js/views/control_panel/search/favorite_menu.js +++ b/addons/web/static/src/js/views/control_panel/search/favorite_menu.js @@ -10,6 +10,9 @@ var favorites_submenus_registry = require('web.favorites_submenus_registry'); var _t = core._t; var FavoriteMenu = DropdownMenu.extend({ + custom_events: _.extend({}, DropdownMenu.prototype.custom_events, { + favorite_submenu_toggled: '_onSubMenuToggled', + }), /** * @override * @param {Object} action @@ -38,7 +41,7 @@ var FavoriteMenu = DropdownMenu.extend({ favorites: this.items, action: this.action, }; - this.$menu = this.$('.o_dropdown_menu'); + var superProm = this._super.apply(this, arguments); this.$menu.addClass('o_favorites_menu'); this.subMenus = []; favorites_submenus_registry.values().forEach(function (SubMenu) { @@ -46,6 +49,7 @@ var FavoriteMenu = DropdownMenu.extend({ subMenu.appendTo(self.$menu); self.subMenus.push(subMenu); }); + return superProm; }, //-------------------------------------------------------------------------- @@ -84,6 +88,21 @@ var FavoriteMenu = DropdownMenu.extend({ this._closeSubMenus(); }, /** + * Reacts to a submenu being toggled + * + * When a submenu is toggled, it has changed the position + * and size of the Favorite's dropdown. This method + * repositions the current dropdown + * + * @private + * @param {OdooEvent} ev + * + */ + _onSubMenuToggled: function (ev) { + ev.stopPropagation(); + this.$dropdownReference.dropdown('update'); + }, + /** * @override * @private * @param {MouseEvent} event diff --git a/addons/web/static/src/js/views/control_panel/search/filter_menu.js b/addons/web/static/src/js/views/control_panel/search/filter_menu.js index d7f7a1c9950..1c81701a8e0 100644 --- a/addons/web/static/src/js/views/control_panel/search/filter_menu.js +++ b/addons/web/static/src/js/views/control_panel/search/filter_menu.js @@ -52,10 +52,10 @@ var FilterMenu = DropdownMenu.extend({ * @override */ start: function () { - this.$menu = this.$('.o_dropdown_menu'); + var superProm = this._super.apply(this, arguments); this.$menu.addClass('o_filters_menu'); this._renderGeneratorMenu(); - return this._super.apply(this, arguments); + return superProm; }, //-------------------------------------------------------------------------- @@ -108,6 +108,7 @@ var FilterMenu = DropdownMenu.extend({ if (this.generatorMenuIsOpen && !this.propositions.length) { this._appendProposition(); } + this.$dropdownReference.dropdown('update'); }, /** * Hide and display the submenu which allows adding custom filters. diff --git a/addons/web/static/src/js/views/control_panel/search/groupby_menu.js b/addons/web/static/src/js/views/control_panel/search/groupby_menu.js index 348e2e8fced..17c158dde87 100644 --- a/addons/web/static/src/js/views/control_panel/search/groupby_menu.js +++ b/addons/web/static/src/js/views/control_panel/search/groupby_menu.js @@ -76,10 +76,10 @@ var GroupByMenu = DropdownMenu.extend({ * @override */ start: function () { - this.$menu = this.$('.o_dropdown_menu'); + var superProm = this._super.apply(this, arguments); this.$menu.addClass('o_group_by_menu'); this._renderGeneratorMenu(); - return this._super.apply(this, arguments); + return superProm; }, //-------------------------------------------------------------------------- @@ -135,6 +135,7 @@ var GroupByMenu = DropdownMenu.extend({ this.$menu.append($generatorMenu); this.$addCustomGroup = this.$menu.find('.o_add_custom_group'); this.$groupSelector = this.$menu.find('.o_group_selector'); + this.$dropdownReference.dropdown('update'); }, /** * @private diff --git a/addons/web/static/src/js/widgets/dropdown_menu.js b/addons/web/static/src/js/widgets/dropdown_menu.js index 11873718576..d8663731c67 100644 --- a/addons/web/static/src/js/widgets/dropdown_menu.js +++ b/addons/web/static/src/js/widgets/dropdown_menu.js @@ -6,6 +6,8 @@ var Widget = require('web.Widget'); var QWeb = core.qweb; +var _t = core._t; + var DropdownMenu = Widget.extend({ template: 'web.DropdownMenu', @@ -37,7 +39,18 @@ var DropdownMenu = Widget.extend({ this.items = items; this.openItems = {}; }, + /** + * @override + */ + start: function () { + this.$menu = this.$('.o_dropdown_menu'); + this.$dropdownReference = this.$('.o_dropdown_toggler_btn'); + if (_t.database.parameters.direction === 'rtl') { + this.$menu.addClass('dropdown-menu-right'); + } + return this._super.apply(this, arguments); + }, //-------------------------------------------------------------------------- // Public |
