diff options
Diffstat (limited to 'addons/mail/static/src/js/utils.js')
| -rw-r--r-- | addons/mail/static/src/js/utils.js | 64 |
1 files changed, 38 insertions, 26 deletions
diff --git a/addons/mail/static/src/js/utils.js b/addons/mail/static/src/js/utils.js index 16507035982..4749ba11b20 100644 --- a/addons/mail/static/src/js/utils.js +++ b/addons/mail/static/src/js/utils.js @@ -1,24 +1,28 @@ odoo.define('mail.utils', function (require) { "use strict"; -function parse_and_transform(html_string, transform_function) { - var open_token = "OPEN" + Date.now(); - var string = html_string.replace(/</g, open_token); +var core = require('web.core'); + +var _t = core._t; + +function parseAndTransform(htmlString, transformFunction) { + var openToken = "OPEN" + Date.now(); + var string = htmlString.replace(/</g, openToken); var children = $('<div>').html(string).contents(); - return _parse_and_transform(children, transform_function) - .replace(new RegExp(open_token, "g"), "<"); + return _parseAndTransform(children, transformFunction) + .replace(new RegExp(openToken, "g"), "<"); } -function _parse_and_transform(nodes, transform_function) { +function _parseAndTransform(nodes, transformFunction) { return _.map(nodes, function (node) { - return transform_function(node, function () { - return _parse_and_transform(node.childNodes, transform_function); + return transformFunction(node, function () { + return _parseAndTransform(node.childNodes, transformFunction); }); }).join(""); } // Suggested URL Javascript regex of http://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url // Adapted to make http(s):// not required if (and only if) www. is given. So `should.notmatch` does not match. -var url_regexp = /\b(?:https?:\/\/\d{1,3}(?:\.\d{1,3}){3}|(?:https?:\/\/|(?:www\.))[-a-z0-9@:%._\+~#=]{2,256}\.[a-z]{2,13})\b(?:[-a-z0-9@:%_\+.~#?&'$//=]*)/gi; +var urlRegexp = /\b(?:https?:\/\/\d{1,3}(?:\.\d{1,3}){3}|(?:https?:\/\/|(?:www\.))[-a-z0-9@:%._+~#=]{2,256}\.[a-z]{2,13})\b(?:[-a-z0-9@:%_+.~#?&'$//=]*)/gi; function linkify(text, attrs) { attrs = attrs || {}; if (attrs.target === undefined) { @@ -27,28 +31,28 @@ function linkify(text, attrs) { attrs = _.map(attrs, function (value, key) { return key + '="' + _.escape(value) + '"'; }).join(' '); - return text.replace(url_regexp, function (url) { + return text.replace(urlRegexp, function (url) { var href = (!/^https?:\/\//i.test(url)) ? "http://" + url : url; return '<a ' + attrs + ' href="' + href + '">' + url + '</a>'; }); } -function add_link (node, transform_children) { +function addLink(node, transformChildren) { if (node.nodeType === 3) { // text node return linkify(node.data); } if (node.tagName === "A") return node.outerHTML; - node.innerHTML = transform_children(); + node.innerHTML = transformChildren(); return node.outerHTML; } -function strip_html (node, transform_children) { +function stripHTML(node, transformChildren) { if (node.nodeType === 3) return node.data; // text node if (node.tagName === "BR") return "\n"; - return transform_children(); + return transformChildren(); } -function inline (node, transform_children) { +function inline(node, transform_children) { if (node.nodeType === 3) return node.data; if (node.nodeType === 8) return ""; if (node.tagName === "BR") return " "; @@ -58,7 +62,7 @@ function inline (node, transform_children) { } // Parses text to find email: Tagada <address@mail.fr> -> [Tagada, address@mail.fr] or False -function parse_email (text) { +function parseEmail(text) { if (text){ var result = text.match(/(.*)<(.*@.*)>/); if (result) { @@ -74,13 +78,13 @@ function parse_email (text) { // Replaces textarea text into html text (add <p>, <a>) // TDE note : should be done server-side, in Python -> use mail.compose.message ? -function get_text2html (text) { +function getTextToHTML(text) { return text .replace(/((?:https?|ftp):\/\/[\S]+)/g,'<a href="$1">$1</a> ') .replace(/[\n\r]/g,'<br/>'); } -var accented_letters_mapping = { +var accentedLettersMapping = { 'a': '[àáâãäå]', 'ae': 'æ', 'c': 'ç', @@ -92,21 +96,29 @@ var accented_letters_mapping = { 'u': '[ùúûűü]', 'y': '[ýÿ]', }; -function unaccent (str) { - _.each(accented_letters_mapping, function (value, key) { +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"); + } + return date.fromNow(); +} + return { - parse_and_transform: parse_and_transform, - add_link: add_link, - linkify: linkify, - strip_html: strip_html, + addLink: addLink, + getTextToHTML: getTextToHTML, inline: inline, - parse_email: parse_email, - get_text2html: get_text2html, + linkify: linkify, + parseAndTransform: parseAndTransform, + parseEmail: parseEmail, + stripHTML: stripHTML, + timeFromNow: timeFromNow, unaccent: unaccent, }; |
