summaryrefslogtreecommitdiff
path: root/addons/mail/static
diff options
context:
space:
mode:
authormgh-odoo <mgh@odoo.com>2018-10-29 08:42:59 +0000
committermgh-odoo <mgh@odoo.com>2019-01-10 12:31:53 +0000
commit9ee9724a10fc5e835d8d42da0e9e83fe687848d8 (patch)
tree362c7afc5f90e1c90746df80835355793e55733f /addons/mail/static
parent80f3eb27f7a0ad0390eca6ac9b7bd03df71c4ec2 (diff)
[Generic] unaccent search
- added unaccent search on POS customer/partner and product - moved unaccent from "mail.utils" to "web.utils" - added more character to make function accurate We might use str.normalize(from ES6) but the problem is str.normalize method can not consider some double characters i.e. accented character when normalized it returns 2 normal characters and normalize method returns single character, so here custom unaccent method is used to normalize the string What we can improve here: We can use str.normalize method and check if string is still have unaccented charaters that we can call our unaccent method but this unaccent method is also working and performing well closes odoo/odoo#27671
Diffstat (limited to 'addons/mail/static')
-rw-r--r--addons/mail/static/src/js/composers/basic_composer.js10
-rw-r--r--addons/mail/static/src/js/services/mail_manager.js3
-rw-r--r--addons/mail/static/src/js/utils.js20
3 files changed, 7 insertions, 26 deletions
diff --git a/addons/mail/static/src/js/composers/basic_composer.js b/addons/mail/static/src/js/composers/basic_composer.js
index 09c521ad795..03ffd1c7a30 100644
--- a/addons/mail/static/src/js/composers/basic_composer.js
+++ b/addons/mail/static/src/js/composers/basic_composer.js
@@ -4,7 +4,7 @@ odoo.define('mail.composer.Basic', function (require) {
var emojis = require('mail.emojis');
var MentionManager = require('mail.composer.MentionManager');
var DocumentViewer = require('mail.DocumentViewer');
-var mailUtils = require('mail.utils');
+var utils = require('web.utils');
var config = require('web.config');
var core = require('web.core');
@@ -306,7 +306,7 @@ var BasicComposer = Widget.extend({
clearTimeout(this._cannedTimeout);
this._cannedTimeout = setTimeout(function () {
var cannedResponses = self.call('mail_service', 'getCannedResponses');
- var matches = fuzzy.filter(mailUtils.unaccent(search), _.pluck(cannedResponses, 'source'));
+ var matches = fuzzy.filter(utils.unaccent(search), _.pluck(cannedResponses, 'source'));
var indexes = _.pluck(matches.slice(0, self.options.mentionFetchLimit), 'index');
def.resolve(_.map(indexes, function (index) {
return cannedResponses[index];
@@ -320,7 +320,7 @@ var BasicComposer = Widget.extend({
* @returns {Array}
*/
_mentionGetCommands: function (search) {
- var searchRegexp = new RegExp(_.str.escapeRegExp(mailUtils.unaccent(search)), 'i');
+ var searchRegexp = new RegExp(_.str.escapeRegExp(utils.unaccent(search)), 'i');
return _.filter(this._mentionCommands, function (command) {
return searchRegexp.test(command.name);
}).slice(0, this.options.mentionFetchLimit);
@@ -349,12 +349,12 @@ var BasicComposer = Widget.extend({
// filter prefetched partners with the given search string
var suggestions = [];
var limit = self.options.mentionFetchLimit;
- var searchRegexp = new RegExp(_.str.escapeRegExp(mailUtils.unaccent(search)), 'i');
+ var searchRegexp = new RegExp(_.str.escapeRegExp(utils.unaccent(search)), 'i');
_.each(prefetchedPartners, function (partners) {
if (limit > 0) {
var filteredPartners = _.filter(partners, function (partner) {
return partner.email && searchRegexp.test(partner.email) ||
- partner.name && searchRegexp.test(mailUtils.unaccent(partner.name));
+ partner.name && searchRegexp.test(utils.unaccent(partner.name));
});
if (filteredPartners.length) {
suggestions.push(filteredPartners.slice(0, limit));
diff --git a/addons/mail/static/src/js/services/mail_manager.js b/addons/mail/static/src/js/services/mail_manager.js
index 062b3208066..777df1df4a6 100644
--- a/addons/mail/static/src/js/services/mail_manager.js
+++ b/addons/mail/static/src/js/services/mail_manager.js
@@ -33,6 +33,7 @@ var MailFailure = require('mail.model.MailFailure');
var Message = require('mail.model.Message');
var MultiUserChannel = require('mail.model.MultiUserChannel');
var mailUtils = require('mail.utils');
+var utils = require('web.utils');
var Bus = require('web.Bus');
var config = require('web.config');
@@ -1094,7 +1095,7 @@ var MailManager = AbstractService.extend({
*/
_searchPartnerPrefetch: function (searchVal, limit) {
var values = [];
- var searchRegexp = new RegExp(_.str.escapeRegExp(mailUtils.unaccent(searchVal)), 'i');
+ var searchRegexp = new RegExp(_.str.escapeRegExp(utils.unaccent(searchVal)), 'i');
_.each(this._mentionPartnerSuggestions, function (partners) {
if (values.length < limit) {
values = values.concat(_.filter(partners, function (partner) {
diff --git a/addons/mail/static/src/js/utils.js b/addons/mail/static/src/js/utils.js
index 4749ba11b20..cc18df64b18 100644
--- a/addons/mail/static/src/js/utils.js
+++ b/addons/mail/static/src/js/utils.js
@@ -84,25 +84,6 @@ function getTextToHTML(text) {
.replace(/[\n\r]/g,'<br/>');
}
-var accentedLettersMapping = {
- 'a': '[àáâãäå]',
- 'ae': 'æ',
- 'c': 'ç',
- 'e': '[èéêë]',
- 'i': '[ìíîï]',
- 'n': 'ñ',
- 'o': '[òóôõö]',
- 'oe': 'œ',
- 'u': '[ùúûűü]',
- 'y': '[ýÿ]',
-};
-function unaccent(str) {
- _.each(accentedLettersMapping, function (value, key) {
- str = str.replace(new RegExp(value, 'g'), key);
- });
- return str;
-}
-
function timeFromNow(date) {
if (moment().diff(date, 'seconds') < 45) {
return _t("now");
@@ -119,7 +100,6 @@ return {
parseEmail: parseEmail,
stripHTML: stripHTML,
timeFromNow: timeFromNow,
- unaccent: unaccent,
};
});