summaryrefslogtreecommitdiff
path: root/addons/mail/static/src/js/mail_utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/mail/static/src/js/mail_utils.js')
-rw-r--r--addons/mail/static/src/js/mail_utils.js105
1 files changed, 84 insertions, 21 deletions
diff --git a/addons/mail/static/src/js/mail_utils.js b/addons/mail/static/src/js/mail_utils.js
index 656dc941a75..a18dc449d6b 100644
--- a/addons/mail/static/src/js/mail_utils.js
+++ b/addons/mail/static/src/js/mail_utils.js
@@ -5,7 +5,7 @@ odoo.define('mail.utils', function () {
* ------------------------------------------------------------
* ChatterUtils
* ------------------------------------------------------------
- *
+ *
* This class holds a few tools method for Chatter.
* Some regular expressions not used anymore, kept because I want to
* - (^|\s)@((\w|@|\.)*): @login@log.log
@@ -28,24 +28,6 @@ function parse_email(text) {
}
/**
- * Replaces some expressions
- * - :name - shortcut to an image
- */
-function do_replace_expressions(string) {
- var icon_list = ['al', 'pinky'];
- /* special shortcut: :name, try to find an icon if in list */
- var regex_login = new RegExp(/(^|\s):((\w)*)/g);
- var regex_res = regex_login.exec(string);
- while (regex_res !== null) {
- var icon_name = regex_res[2];
- if (_.include(icon_list, icon_name))
- string = string.replace(regex_res[0], regex_res[1] + '<img src="/mail/static/src/img/_' + icon_name + '.png" width="22px" height="22px" alt="' + icon_name + '"/>');
- regex_res = regex_login.exec(string);
- }
- return string;
-}
-
-/**
* Replaces textarea text into html text (add <p>, <a>)
* TDE note : should be done server-side, in Python -> use mail.compose.message ?
*/
@@ -55,7 +37,7 @@ function get_text2html(text) {
.replace(/[\n\r]/g,'<br/>');
}
-/* Returns the complete domain with "&"
+/* Returns the complete domain with "&"
* TDE note: please add some comments to explain how/why
*/
function expand_domain(domain) {
@@ -90,6 +72,8 @@ function breakword(str){
return out;
}
+
+// TODO JEM : remove me in master
function bindTooltipTo($el, value, position) {
$el.tooltip({
'title': value,
@@ -106,13 +90,92 @@ function bindTooltipTo($el, value, position) {
});
}
+
+/**
+ * ------------------------------------------------------------
+ * MailChat Utils
+ * ------------------------------------------------------------
+ */
+
+ /**
+ * Apply the given shortcode to the 'str' message.
+ * @param str : the text to substitute (html).
+ * @param shortcodes : dict where key is the shortcode, and the value is the substitution
+ */
+function shortcode_apply(str, shortcodes){
+ var re_escape = function(str){
+ return String(str).replace(/([.*+?=^!:${}()|[\]\/\\])/g, '\\$1');
+ };
+ _.each(_.keys(shortcodes), function(key){
+ str = str.replace( new RegExp("(?:^|\\s|<[a-z]*>)(" + re_escape(key) + ")(?:\\s|$|</[a-z]*>)"), ' <span class="o_mail_emoji">'+shortcodes[key]+'</span> ');
+ });
+ return str;
+}
+
+/**
+ * Transform the list of emoji (shortcode Object) into a key-array representing
+ * the substitution to apply
+ * @param {Ojbect[]} emoji_list : list of emoji object
+ * @returns {Object} mapping between the code (as key) and the substitution (as value)
+ */
+function shortcode_substitution(emoji_list){
+ var emoji_substitution = {};
+ _.each(emoji_list, function(emoji){
+ emoji_substitution[emoji.source] = emoji.substitution;
+ });
+ return emoji_substitution;
+}
+
+/**
+ * Associate a font awesome class to a attachment file type
+ * @param {string} file_type : file type to analyse
+ * @returns {string} the fa class associated
+ */
+function attachment_filetype_to_fa_class(file_type){
+ var mapping = {
+ 'text': 'fa fa-file-text-o',
+ 'document': 'fa fa-file-word-o',
+ 'audio': 'fa fa-file-audio-o',
+ 'archive': 'fa fa-file-archive-o',
+ 'disk': 'fa fa-file-archive-o',
+ 'image': 'fa fa-file-photo-o',
+ 'webimage': 'fa fa-file-photo-o',
+ 'script': 'fa fa-file-code-o',
+ 'html': 'fa fa-file-code-o',
+ 'video': 'fa fa-file-movie-o',
+ 'spreadsheet': 'fa fa-file-excel-o',
+ 'print': 'fa fa-file-pdf-o',
+ 'presentation': 'fa fa-file-powerpoint-o',
+ }
+ if(_.contains(_.keys(mapping), file_type)){
+ return mapping[file_type];
+ }
+ return 'fa fa-file-o';
+}
+
+/**
+ * Play the noise 'ting' to notify user
+ */
+function beep(session){
+ if (typeof(Audio) === "undefined") {
+ return;
+ }
+ var audio = new Audio();
+ var ext = audio.canPlayType("audio/ogg; codecs=vorbis") ? ".ogg" : ".mp3";
+ audio.src = session.url("/mail/static/src/audio/ting") + ext;
+ audio.play();
+}
+
return {
parse_email: parse_email,
- do_replace_expressions: do_replace_expressions,
get_text2html: get_text2html,
expand_domain: expand_domain,
breakword: breakword,
bindTooltipTo: bindTooltipTo,
+ shortcode_apply: shortcode_apply,
+ shortcode_substitution: shortcode_substitution,
+ attachment_filetype_to_fa_class: attachment_filetype_to_fa_class,
+ beep: beep,
};
});