From 1568d25eb06648d7963fa4fffa06e519b5af2eae Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 18 May 2012 17:23:42 +0200 Subject: [PATCH] [ADD] marking of currently selected filters in the drawer Visually hints to users currently manipulating the drawer that a given filter is currently selected. bzr revid: xmo@openerp.com-20120518152342-xmqhwlml0bsgodhq --- addons/web/static/src/css/base.css | 5 +++- addons/web/static/src/css/base.sass | 6 ++++- addons/web/static/src/js/search.js | 36 +++++++++++++++++++++++++---- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 5dcc1f3b8a9..37b4de1dd32 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -1341,12 +1341,15 @@ } .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_filters li { list-style: none; - padding: 3px 6px; + padding: 3px 6px 3px 18px; height: 14px; line-height: 14px; color: inherit; cursor: pointer; } +.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_filters li.oe_selected { + background: url(/web/static/src/img/icons/gtk-apply.png) left center no-repeat; +} .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_filters li:hover { background-color: #f0f0fa; } diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index ecade4ff30e..67e2399069b 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -1094,15 +1094,19 @@ $colour4: #8a89ba li list-style: none - padding: 3px 6px + padding: 3px 6px 3px 18px height: 14px line-height: 14px color: inherit cursor: pointer + &.oe_selected + background: url(/web/static/src/img/icons/gtk-apply.png) left center no-repeat + // after oe_selected so background color is not overridden &:hover background-color: $hover-background + .oe_searchview_custom form display: none diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 2532dead00d..91423b5c53e 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -644,8 +644,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea // load defaults var defaults_fetched = $.when.apply(null, _(this.inputs).invoke( 'facet_for_defaults', this.defaults)).then(function () { - self.query.reset(_(arguments).compact(), {silent: true}); - self.renderFacets(); + self.query.reset(_(arguments).compact(), {preventSearch: true}); }); return $.when(drawer_started, defaults_fetched) @@ -800,7 +799,10 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea * * @param e jQuery event object coming from the "Search" button */ - do_search: function () { + do_search: function (_query, options) { + if (options && options.preventSearch) { + return; + } var search = this.build_search_data(); if (!_.isEmpty(search.errors)) { this.on_invalid(search.errors); @@ -1009,11 +1011,34 @@ instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends in } this._super(view); this.filters = filters; + this.view.query.on('add remove change reset', this.proxy('search_change')); }, start: function () { this.$element.on('click', 'li', this.proxy('toggle_filter')); return $.when(null); }, + /** + * Handles change of the search query: any of the group's filter which is + * in the search query should be visually checked in the drawer + */ + search_change: function () { + var self = this; + var $filters = this.$element.find('> li').removeClass('oe_selected'); + var facet = this.view.query.find(_.bind(this.match_facet, this)); + if (!facet) { return; } + facet.values.each(function (v) { + var i = _(self.filters).indexOf(v.get('value')); + if (i === -1) { return; } + $filters.eq(i).addClass('oe_selected'); + }); + }, + /** + * Matches the group to a facet, in order to find if the group is + * represented in the current search query + */ + match_facet: function (facet) { + return facet.get('field') === this; + }, make_facet: function (values) { return { category: _t("Filter"), @@ -1130,7 +1155,7 @@ instance.web.search.GroupbyGroup = instance.web.search.FilterGroup.extend({ this._super(filters, view); // Not flanders: facet unicity is handled through the // (category, field) pair of facet attributes. This is all well and - // good for regular filter groups where a group matche a facet, but for + // good for regular filter groups where a group matches a facet, but for // groupby we want a single facet. So cheat: add an attribute on the // view which proxies to the first GroupbyGroup, so it can be used // for every GroupbyGroup and still provides the various methods needed @@ -1144,6 +1169,9 @@ instance.web.search.GroupbyGroup = instance.web.search.FilterGroup.extend({ } } }, + match_facet: function (facet) { + return facet.get('field') === this.getParent()._s_groupby; + }, make_facet: function (values) { return { category: _t("GroupBy"),