From 0344b168276f80189e2254c75a762aff5b517b6b Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Sun, 22 May 2016 06:32:57 -0400 Subject: [PATCH] Fix priority icon(s) position --- program/js/common.js | 72 ++++++++++++++++++++++++++++++----- 1 files changed, 61 insertions(+), 11 deletions(-) diff --git a/program/js/common.js b/program/js/common.js index 2c699d0..158f8cc 100644 --- a/program/js/common.js +++ b/program/js/common.js @@ -448,7 +448,7 @@ ], icann_addr = 'mailtest\\x40('+icann_domains.join('|')+')', word = '('+atom+'|'+quoted_string+')', - delim = '[,;\s\n]', + delim = '[,;\\s\\n]', local_part = word+'(\\x2e'+word+')*', addr_spec = '(('+local_part+'\\x40'+domain+')|('+icann_addr+'))', reg1 = inline ? new RegExp('(^|<|'+delim+')'+addr_spec+'($|>|'+delim+')', 'i') : new RegExp('^'+addr_spec+'$', 'i'); @@ -683,11 +683,60 @@ }; -// This code was written by Tyler Akins and has been placed in the -// public domain. It would be nice if you left this header intact. // Base64 code from Tyler Akins -- http://rumkin.com var Base64 = (function () { var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + // private method for UTF-8 encoding + var utf8_encode = function(string) { + string = string.replace(/\r\n/g, "\n"); + var utftext = ''; + + for (var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } + else if(c > 127 && c < 2048) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } + else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + } + + return utftext; + }; + + // private method for UTF-8 decoding + var utf8_decode = function (utftext) { + var i = 0, string = '', c = c2 = c3 = 0; + + while (i < utftext.length) { + c = utftext.charCodeAt(i); + if (c < 128) { + string += String.fromCharCode(c); + i++; + } + else if (c > 191 && c < 224) { + c2 = utftext.charCodeAt(i + 1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } + else { + c2 = utftext.charCodeAt(i + 1); + c3 = utftext.charCodeAt(i + 2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + } + + return string; + }; var obj = { /** @@ -695,8 +744,10 @@ * @param {String} input The string to encode in base64. */ encode: function (input) { + // encode UTF8 as btoa() may fail on some characters + input = utf8_encode(input); + if (typeof(window.btoa) === 'function') { - // it may fail on unicode characters, the fallback can handle them try { return btoa(input); } @@ -705,7 +756,7 @@ var chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0, output = '', len = input.length; - do { + while (i < len) { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); @@ -723,7 +774,7 @@ output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4); - } while (i < len); + } return output; }, @@ -734,9 +785,8 @@ */ decode: function (input) { if (typeof(window.atob) === 'function') { - // it may fail on unicode characters, the fallback can handle them try { - return atob(input); + return utf8_decode(atob(input)); } catch (e) {}; } @@ -747,7 +797,7 @@ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); len = input.length; - do { + while (i < len) { enc1 = keyStr.indexOf(input.charAt(i++)); enc2 = keyStr.indexOf(input.charAt(i++)); enc3 = keyStr.indexOf(input.charAt(i++)); @@ -763,9 +813,9 @@ output = output + String.fromCharCode(chr2); if (enc4 != 64) output = output + String.fromCharCode(chr3); - } while (i < len); + } - return output; + return utf8_decode(output); } }; -- Gitblit v1.9.1