adrien.didenot
8 years ago
5 changed files with 54 additions and 35 deletions
-
11web_search_with_and/README.rst
-
4web_search_with_and/__manifest__.py
-
16web_search_with_and/data/data.xml
-
BINweb_search_with_and/static/description/icon.png
-
56web_search_with_and/static/src/js/search.js
@ -1,10 +1,10 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
# © 2015 Andrius Preimantas <andrius@versada.lt> |
|
||||
|
# Copyright 2015 Andrius Preimantas <andrius@versada.lt> |
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
{ |
{ |
||||
'name': "Use AND conditions on omnibar search", |
'name': "Use AND conditions on omnibar search", |
||||
'version': '8.0.1.0.0', |
|
||||
|
'version': '10.0.1.0.0', |
||||
'author': 'Versada UAB, Odoo Community Association (OCA)', |
'author': 'Versada UAB, Odoo Community Association (OCA)', |
||||
'license': 'AGPL-3', |
'license': 'AGPL-3', |
||||
'category': 'web', |
'category': 'web', |
@ -1,10 +1,8 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
<?xml version="1.0" encoding="utf-8"?> |
||||
<openerp> |
|
||||
<data> |
|
||||
<template id="assets_backend" name="web_view_editor assets" inherit_id="web.assets_backend"> |
|
||||
<xpath expr="." position="inside"> |
|
||||
<script type="text/javascript" src="/web_search_with_and/static/src/js/search.js"/> |
|
||||
</xpath> |
|
||||
</template> |
|
||||
</data> |
|
||||
</openerp> |
|
||||
|
<odoo> |
||||
|
<template id="assets_backend" name="web_view_editor assets" inherit_id="web.assets_backend"> |
||||
|
<xpath expr="." position="inside"> |
||||
|
<script type="text/javascript" src="/web_search_with_and/static/src/js/search.js"/> |
||||
|
</xpath> |
||||
|
</template> |
||||
|
</odoo> |
After Width: 128 | Height: 128 | Size: 9.2 KiB |
@ -1,43 +1,55 @@ |
|||||
openerp.web_search_with_and = function (instance) { |
|
||||
|
odoo.define('web_search_with_and', function (require) { |
||||
|
"use strict"; |
||||
|
|
||||
instance.web.SearchView = instance.web.SearchView.extend({ |
|
||||
|
var SearchView = require('web.SearchView'); |
||||
|
var Backbone = window.Backbone; |
||||
|
|
||||
|
SearchView.include({ |
||||
|
// Override the base method to detect a 'shift' event
|
||||
select_completion: function (e, ui) { |
select_completion: function (e, ui) { |
||||
var self = this; |
|
||||
if (e.shiftKey) { |
|
||||
|
if (e.shiftKey |
||||
|
&& ui.item.facet.values |
||||
|
&& ui.item.facet.values.length |
||||
|
&& String(ui.item.facet.values[0].value).trim() !== "") { |
||||
|
// In case of an 'AND' search a new facet is added regarding of the previous facets
|
||||
e.preventDefault(); |
e.preventDefault(); |
||||
|
|
||||
var input_index = _(this.input_subviews).indexOf( |
|
||||
this.subviewForRoot( |
|
||||
this.$('div.oe_searchview_input:focus')[0])); |
|
||||
this.query.add(ui.item.facet, {at: input_index / 2, shiftKey: true}); |
|
||||
|
this.query.add(ui.item.facet, {shiftKey: true}); |
||||
} else { |
} else { |
||||
this._super(e, ui); |
|
||||
|
|
||||
|
return this._super.apply(this, arguments); |
||||
} |
} |
||||
}, |
|
||||
|
} |
||||
}); |
}); |
||||
|
|
||||
instance.web.search.SearchQuery = instance.web.search.SearchQuery.extend({ |
|
||||
|
SearchView.SearchQuery.prototype = SearchView.SearchQuery.extend({ |
||||
|
// Override the odoo method to (conditionally) add a search facet even if a existing
|
||||
|
// facet for the same field/category already exists.
|
||||
|
// The prototype is used to override the 'add' function in order to execute the
|
||||
|
// following code before the Odoo native override (trick)
|
||||
add: function (values, options) { |
add: function (values, options) { |
||||
|
|
||||
options = options || {}; |
options = options || {}; |
||||
|
if (options.shiftKey) { |
||||
|
|
||||
if (!values) { |
|
||||
values = []; |
|
||||
} else if (!(values instanceof Array)) { |
|
||||
values = [values]; |
|
||||
} |
|
||||
|
if (!values) { |
||||
|
values = []; |
||||
|
} |
||||
|
else if (!(values instanceof Array)) { |
||||
|
values = [values]; |
||||
|
} |
||||
|
|
||||
if (options.shiftKey) { |
|
||||
delete options.shiftKey; |
delete options.shiftKey; |
||||
_(values).each(function (value) { |
_(values).each(function (value) { |
||||
var model = this._prepareModel(value, options); |
var model = this._prepareModel(value, options); |
||||
Backbone.Collection.prototype.add.call(this, model, options); |
Backbone.Collection.prototype.add.call(this, model, options); |
||||
}, this); |
}, this); |
||||
|
|
||||
return this; |
return this; |
||||
} |
} |
||||
else { |
else { |
||||
return this.constructor.__super__.add.apply(this, arguments); |
|
||||
|
return this.constructor.__super__.add.call(this, values, options); |
||||
} |
} |
||||
}, |
|
||||
}); |
|
||||
}; |
|
||||
|
} |
||||
|
}).prototype; |
||||
|
|
||||
|
}); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue