diff options
| author | Mathieu Duckerts-Antoine <dam@odoo.com> | 2018-05-14 12:30:31 +0200 |
|---|---|---|
| committer | Géry Debongnie <ged@odoo.com> | 2018-06-12 09:22:04 +0200 |
| commit | 7bf5dd687be3919f6add10b1ac59a9cdee824632 (patch) | |
| tree | 7bdb3fda8c6a08adce469ecf8b4ed3569e77d904 /addons/web/static/src/js | |
| parent | e476c0f15f3b3785b9b180ae740a4a8f87e8d6dd (diff) | |
[REF] web: split search_menus in separate files
Diffstat (limited to 'addons/web/static/src/js')
| -rw-r--r-- | addons/web/static/src/js/views/search/favorites_menu.js (renamed from addons/web/static/src/js/chrome/search_menus.js) | 186 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/search/filter_menu.js | 103 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/search/filters_menu.js | 105 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/search/groupby_menu.js | 79 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/search/search_filters.js (renamed from addons/web/static/src/js/chrome/search_filters.js) | 0 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/search/search_inputs.js (renamed from addons/web/static/src/js/chrome/search_inputs.js) | 0 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/search/search_view.js (renamed from addons/web/static/src/js/chrome/search_view.js) | 0 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/search/search_view_mobile.js (renamed from addons/web/static/src/js/chrome/search_view_mobile.js) | 0 |
8 files changed, 287 insertions, 186 deletions
diff --git a/addons/web/static/src/js/chrome/search_menus.js b/addons/web/static/src/js/views/search/favorites_menu.js index a6548b051f4..f0962e6177e 100644 --- a/addons/web/static/src/js/chrome/search_menus.js +++ b/addons/web/static/src/js/views/search/favorites_menu.js @@ -303,189 +303,3 @@ return Widget.extend({ }); }); - -odoo.define('web.FilterMenu', function (require) { -"use strict"; - -var config = require('web.config'); -var search_filters = require('web.search_filters'); -var search_inputs = require('web.search_inputs'); -var Widget = require('web.Widget'); - -return Widget.extend({ - template: 'SearchView.FilterMenu', - events: { - 'click .o_add_filter': function (event) { - event.preventDefault(); - this.toggle_custom_filter_menu(); - }, - 'click li': function (event) { - event.preventDefault(); - event.stopImmediatePropagation(); - }, - 'hidden.bs.dropdown': function () { - this.toggle_custom_filter_menu(false); - }, - 'click .o_add_condition': 'append_proposition', - 'click .o_apply_filter': 'commit_search', - 'keyup .o_searchview_extended_prop_value': function (ev) { - if (ev.which === $.ui.keyCode.ENTER) { - this.commit_search(); - } - }, - }, - init: function (parent, filters, fields) { - this._super(parent); - this.isMobile = config.device.isMobile; - this.filters = filters || []; - this.searchview = parent; - this.propositions = []; - this.custom_filters_open = false; - this.fields = _.pick(fields, function (field, name) { - return field.selectable !== false && name !== 'id'; - }); - this.fields.id = { string: 'ID', type: 'id', searchable: true }; - }, - start: function () { - var self = this; - this.$menu = this.$('.o_filters_menu'); - this.$add_filter = this.$('.o_add_filter'); - this.$apply_filter = this.$('.o_apply_filter'); - this.$add_filter_menu = this.$('.o_add_filter_menu'); - _.each(this.filters, function (group) { - if (group.is_visible()) { - group.insertBefore(self.$add_filter); - $('<li class="divider">').insertBefore(self.$add_filter); - } - }); - }, - toggle_custom_filter_menu: function (is_open) { - var self = this; - this.custom_filters_open = !_.isUndefined(is_open) ? is_open : !this.custom_filters_open; - var def; - if (this.custom_filters_open && !this.propositions.length) { - def = this.append_proposition(); - } - $.when(def).then(function () { - self.$add_filter - .toggleClass('o_closed_menu', !self.custom_filters_open) - .toggleClass('o_open_menu', self.custom_filters_open); - self.$add_filter_menu.toggle(self.custom_filters_open); - self.$('.o_filter_condition').toggle(self.custom_filters_open); - }); - }, - append_proposition: function () { - var prop = new search_filters.ExtendedSearchProposition(this, this.fields); - this.propositions.push(prop); - this.$apply_filter.prop('disabled', false); - return prop.insertBefore(this.$add_filter_menu); - }, - remove_proposition: function (prop) { - this.propositions = _.without(this.propositions, prop); - if (!this.propositions.length) { - this.$apply_filter.prop('disabled', true); - } - prop.destroy(); - }, - commit_search: function () { - var filters = _.invoke(this.propositions, 'get_filter'), - filters_widgets = _.map(filters, function (filter) { - return new search_inputs.Filter(filter, this); - }), - filter_group = new search_inputs.FilterGroup(filters_widgets, this.searchview), - facets = filters_widgets.map(function (filter) { - return filter_group.make_facet([filter_group.make_value(filter)]); - }); - filter_group.insertBefore(this.$add_filter); - $('<li class="divider">').insertBefore(this.$add_filter); - this.searchview.query.add(facets, {silent: true}); - this.searchview.query.trigger('reset'); - - _.invoke(this.propositions, 'destroy'); - this.propositions = []; - this.append_proposition(); - this.toggle_custom_filter_menu(false); - }, -}); - -}); - -odoo.define('web.GroupByMenu', function (require) { -"use strict"; - -var config = require('web.config'); -var core = require('web.core'); -var search_inputs = require('web.search_inputs'); -var Widget = require('web.Widget'); - -var QWeb = core.qweb; - -return Widget.extend({ - template: 'SearchView.GroupByMenu', - events: { - 'click li': function (event) { - event.stopImmediatePropagation(); - }, - 'hidden.bs.dropdown': function () { - this.toggle_add_menu(false); - }, - 'click .o_add_custom_group a': function (event) { - event.preventDefault(); - this.toggle_add_menu(); - }, - }, - init: function (parent, groups, fields) { - var self = this; - this._super(parent); - this.searchview = parent; - this.isMobile = config.device.isMobile; - this.groups = groups || []; - this.groupableFields = []; - var groupable_types = ['many2one', 'char', 'boolean', 'selection', 'date', 'datetime']; - _.each(fields, function (field, name) { - if (field.sortable && _.contains(groupable_types, field.type)) { - self.groupableFields.push(_.extend({}, field, {name: name})); - } - }); - self.groupableFields = _.sortBy(this.groupableFields, 'string'); - }, - start: function () { - var self = this; - this.$menu = this.$('.o_group_by_menu'); - var divider = this.$menu.find('.divider'); - _.invoke(this.groups, 'insertBefore', divider); - if (this.groups.length) { - divider.show(); - } - this.$add_group = this.$menu.find('.o_add_custom_group'); - this.$menu.append(QWeb.render('GroupByMenuSelector', this)); - this.$add_group_menu = this.$('.o_add_group'); - this.$group_selector = this.$('.o_group_selector'); - this.$('.o_select_group').click(function () { - self.toggle_add_menu(false); - var field = self.$group_selector.find(':selected').data('name'); - self.add_groupby_to_menu(field); - }); - }, - toggle_add_menu: function (is_open) { - this.$add_group - .toggleClass('o_closed_menu', !(_.isUndefined(is_open)) ? !is_open : undefined) - .toggleClass('o_open_menu', is_open); - this.$add_group_menu.toggle(is_open); - if (this.$add_group.hasClass('o_open_menu')) { - this.$group_selector.focus(); - } - }, - add_groupby_to_menu: function (field_name) { - var filter = new search_inputs.Filter({attrs:{ - context:"{'group_by':'" + field_name + "''}", - name: _.find(this.groupableFields, {name: field_name}).string, - }}, this.searchview); - var group = new search_inputs.FilterGroup([filter], this.searchview), - divider = this.$('.divider').show(); - group.insertBefore(divider); - group.toggle(filter); - }, -}); - -}); diff --git a/addons/web/static/src/js/views/search/filter_menu.js b/addons/web/static/src/js/views/search/filter_menu.js new file mode 100644 index 00000000000..61a5f2fafc8 --- /dev/null +++ b/addons/web/static/src/js/views/search/filter_menu.js @@ -0,0 +1,103 @@ +odoo.define('web.FilterMenu', function (require) { +"use strict"; + +var search_filters = require('web.search_filters'); +var search_inputs = require('web.search_inputs'); +var Widget = require('web.Widget'); + +return Widget.extend({ + template: 'SearchView.FilterMenu', + events: { + 'click .o_add_filter': function (event) { + event.preventDefault(); + this.toggle_custom_filter_menu(); + }, + 'click li': function (event) { + event.preventDefault(); + event.stopImmediatePropagation(); + }, + 'hidden.bs.dropdown': function () { + this.toggle_custom_filter_menu(false); + }, + 'click .o_add_condition': 'append_proposition', + 'click .o_apply_filter': 'commit_search', + 'keyup .o_searchview_extended_prop_value': function (ev) { + if (ev.which === $.ui.keyCode.ENTER) { + this.commit_search(); + } + }, + }, + init: function (parent, filters, fields) { + this._super(parent); + this.filters = filters || []; + this.searchview = parent; + this.propositions = []; + this.custom_filters_open = false; + this.fields = _.pick(fields, function (field, name) { + return field.selectable !== false && name !== 'id'; + }); + this.fields.id = { string: 'ID', type: 'id', searchable: true }; + }, + start: function () { + var self = this; + this.$menu = this.$('.o_filters_menu'); + this.$add_filter = this.$('.o_add_filter'); + this.$apply_filter = this.$('.o_apply_filter'); + this.$add_filter_menu = this.$('.o_add_filter_menu'); + _.each(this.filters, function (group) { + if (group.is_visible()) { + group.insertBefore(self.$add_filter); + $('<li class="divider">').insertBefore(self.$add_filter); + } + }); + }, + toggle_custom_filter_menu: function (is_open) { + var self = this; + this.custom_filters_open = !_.isUndefined(is_open) ? is_open : !this.custom_filters_open; + var def; + if (this.custom_filters_open && !this.propositions.length) { + def = this.append_proposition(); + } + $.when(def).then(function () { + self.$add_filter + .toggleClass('o_closed_menu', !self.custom_filters_open) + .toggleClass('o_open_menu', self.custom_filters_open); + self.$add_filter_menu.toggle(self.custom_filters_open); + self.$('.o_filter_condition').toggle(self.custom_filters_open); + }); + }, + append_proposition: function () { + var prop = new search_filters.ExtendedSearchProposition(this, this.fields); + this.propositions.push(prop); + this.$apply_filter.prop('disabled', false); + return prop.insertBefore(this.$add_filter_menu); + }, + remove_proposition: function (prop) { + this.propositions = _.without(this.propositions, prop); + if (!this.propositions.length) { + this.$apply_filter.prop('disabled', true); + } + prop.destroy(); + }, + commit_search: function () { + var filters = _.invoke(this.propositions, 'get_filter'), + filters_widgets = _.map(filters, function (filter) { + return new search_inputs.Filter(filter, this); + }), + filter_group = new search_inputs.FilterGroup(filters_widgets, this.searchview), + facets = filters_widgets.map(function (filter) { + return filter_group.make_facet([filter_group.make_value(filter)]); + }); + filter_group.insertBefore(this.$add_filter); + $('<li class="divider">').insertBefore(this.$add_filter); + this.searchview.query.add(facets, {silent: true}); + this.searchview.query.trigger('reset'); + + _.invoke(this.propositions, 'destroy'); + this.propositions = []; + this.append_proposition(); + this.toggle_custom_filter_menu(false); + }, +}); + +}); diff --git a/addons/web/static/src/js/views/search/filters_menu.js b/addons/web/static/src/js/views/search/filters_menu.js new file mode 100644 index 00000000000..6305e635082 --- /dev/null +++ b/addons/web/static/src/js/views/search/filters_menu.js @@ -0,0 +1,105 @@ +odoo.define('web.FilterMenu', function (require) { +"use strict"; + +var config = require('web.config'); +var search_filters = require('web.search_filters'); +var search_inputs = require('web.search_inputs'); +var Widget = require('web.Widget'); + +return Widget.extend({ + template: 'SearchView.FilterMenu', + events: { + 'click .o_add_filter': function (event) { + event.preventDefault(); + this.toggle_custom_filter_menu(); + }, + 'click li': function (event) { + event.preventDefault(); + event.stopImmediatePropagation(); + }, + 'hidden.bs.dropdown': function () { + this.toggle_custom_filter_menu(false); + }, + 'click .o_add_condition': 'append_proposition', + 'click .o_apply_filter': 'commit_search', + 'keyup .o_searchview_extended_prop_value': function (ev) { + if (ev.which === $.ui.keyCode.ENTER) { + this.commit_search(); + } + }, + }, + init: function (parent, filters, fields) { + this._super(parent); + this.isMobile = config.device.isMobile; + this.filters = filters || []; + this.searchview = parent; + this.propositions = []; + this.custom_filters_open = false; + this.fields = _.pick(fields, function (field, name) { + return field.selectable !== false && name !== 'id'; + }); + this.fields.id = { string: 'ID', type: 'id', searchable: true }; + }, + start: function () { + var self = this; + this.$menu = this.$('.o_filters_menu'); + this.$add_filter = this.$('.o_add_filter'); + this.$apply_filter = this.$('.o_apply_filter'); + this.$add_filter_menu = this.$('.o_add_filter_menu'); + _.each(this.filters, function (group) { + if (group.is_visible()) { + group.insertBefore(self.$add_filter); + $('<li class="divider">').insertBefore(self.$add_filter); + } + }); + }, + toggle_custom_filter_menu: function (is_open) { + var self = this; + this.custom_filters_open = !_.isUndefined(is_open) ? is_open : !this.custom_filters_open; + var def; + if (this.custom_filters_open && !this.propositions.length) { + def = this.append_proposition(); + } + $.when(def).then(function () { + self.$add_filter + .toggleClass('o_closed_menu', !self.custom_filters_open) + .toggleClass('o_open_menu', self.custom_filters_open); + self.$add_filter_menu.toggle(self.custom_filters_open); + self.$('.o_filter_condition').toggle(self.custom_filters_open); + }); + }, + append_proposition: function () { + var prop = new search_filters.ExtendedSearchProposition(this, this.fields); + this.propositions.push(prop); + this.$apply_filter.prop('disabled', false); + return prop.insertBefore(this.$add_filter_menu); + }, + remove_proposition: function (prop) { + this.propositions = _.without(this.propositions, prop); + if (!this.propositions.length) { + this.$apply_filter.prop('disabled', true); + } + prop.destroy(); + }, + commit_search: function () { + var filters = _.invoke(this.propositions, 'get_filter'), + filters_widgets = _.map(filters, function (filter) { + return new search_inputs.Filter(filter, this); + }), + filter_group = new search_inputs.FilterGroup(filters_widgets, this.searchview), + facets = filters_widgets.map(function (filter) { + return filter_group.make_facet([filter_group.make_value(filter)]); + }); + filter_group.insertBefore(this.$add_filter); + $('<li class="divider">').insertBefore(this.$add_filter); + this.searchview.query.add(facets, {silent: true}); + this.searchview.query.trigger('reset'); + + _.invoke(this.propositions, 'destroy'); + this.propositions = []; + this.append_proposition(); + this.toggle_custom_filter_menu(false); + }, +}); + +}); diff --git a/addons/web/static/src/js/views/search/groupby_menu.js b/addons/web/static/src/js/views/search/groupby_menu.js new file mode 100644 index 00000000000..9fe6951efc2 --- /dev/null +++ b/addons/web/static/src/js/views/search/groupby_menu.js @@ -0,0 +1,79 @@ +odoo.define('web.GroupByMenu', function (require) { +"use strict"; + +var config = require('web.config'); +var core = require('web.core'); +var search_inputs = require('web.search_inputs'); +var Widget = require('web.Widget'); + +var QWeb = core.qweb; + +return Widget.extend({ + template: 'SearchView.GroupByMenu', + events: { + 'click li': function (event) { + event.stopImmediatePropagation(); + }, + 'hidden.bs.dropdown': function () { + this.toggle_add_menu(false); + }, + 'click .o_add_custom_group a': function (event) { + event.preventDefault(); + this.toggle_add_menu(); + }, + }, + init: function (parent, groups, fields) { + var self = this; + this._super(parent); + this.searchview = parent; + this.isMobile = config.device.isMobile; + this.groups = groups || []; + this.groupableFields = []; + var groupable_types = ['many2one', 'char', 'boolean', 'selection', 'date', 'datetime']; + _.each(fields, function (field, name) { + if (field.sortable && _.contains(groupable_types, field.type)) { + self.groupableFields.push(_.extend({}, field, {name: name})); + } + }); + self.groupableFields = _.sortBy(this.groupableFields, 'string'); + }, + start: function () { + var self = this; + this.$menu = this.$('.o_group_by_menu'); + var divider = this.$menu.find('.divider'); + _.invoke(this.groups, 'insertBefore', divider); + if (this.groups.length) { + divider.show(); + } + this.$add_group = this.$menu.find('.o_add_custom_group'); + this.$menu.append(QWeb.render('GroupByMenuSelector', this)); + this.$add_group_menu = this.$('.o_add_group'); + this.$group_selector = this.$('.o_group_selector'); + this.$('.o_select_group').click(function () { + self.toggle_add_menu(false); + var field = self.$group_selector.find(':selected').data('name'); + self.add_groupby_to_menu(field); + }); + }, + toggle_add_menu: function (is_open) { + this.$add_group + .toggleClass('o_closed_menu', !(_.isUndefined(is_open)) ? !is_open : undefined) + .toggleClass('o_open_menu', is_open); + this.$add_group_menu.toggle(is_open); + if (this.$add_group.hasClass('o_open_menu')) { + this.$group_selector.focus(); + } + }, + add_groupby_to_menu: function (field_name) { + var filter = new search_inputs.Filter({attrs:{ + context:"{'group_by':'" + field_name + "''}", + name: _.find(this.groupableFields, {name: field_name}).string, + }}, this.searchview); + var group = new search_inputs.FilterGroup([filter], this.searchview), + divider = this.$('.divider').show(); + group.insertBefore(divider); + group.toggle(filter); + }, +}); + +});
\ No newline at end of file diff --git a/addons/web/static/src/js/chrome/search_filters.js b/addons/web/static/src/js/views/search/search_filters.js index 582af7e70ef..582af7e70ef 100644 --- a/addons/web/static/src/js/chrome/search_filters.js +++ b/addons/web/static/src/js/views/search/search_filters.js diff --git a/addons/web/static/src/js/chrome/search_inputs.js b/addons/web/static/src/js/views/search/search_inputs.js index d937a6e246e..d937a6e246e 100644 --- a/addons/web/static/src/js/chrome/search_inputs.js +++ b/addons/web/static/src/js/views/search/search_inputs.js diff --git a/addons/web/static/src/js/chrome/search_view.js b/addons/web/static/src/js/views/search/search_view.js index 8fc3cd73a2b..8fc3cd73a2b 100644 --- a/addons/web/static/src/js/chrome/search_view.js +++ b/addons/web/static/src/js/views/search/search_view.js diff --git a/addons/web/static/src/js/chrome/search_view_mobile.js b/addons/web/static/src/js/views/search/search_view_mobile.js index 852a65c0a37..852a65c0a37 100644 --- a/addons/web/static/src/js/chrome/search_view_mobile.js +++ b/addons/web/static/src/js/views/search/search_view_mobile.js |
