adrien.didenot
8 years ago
5 changed files with 54 additions and 35 deletions
-
13web_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 -*- |
|||
# © 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). |
|||
|
|||
{ |
|||
'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)', |
|||
'license': 'AGPL-3', |
|||
'category': 'web', |
@ -1,10 +1,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) { |
|||
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(); |
|||
|
|||
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 { |
|||
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) { |
|||
|
|||
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; |
|||
_(values).each(function (value) { |
|||
var model = this._prepareModel(value, options); |
|||
Backbone.Collection.prototype.add.call(this, model, options); |
|||
}, this); |
|||
|
|||
return this; |
|||
} |
|||
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