From eb7e452ecd06ce035d8e9e66f33e4a3d24eab20e Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Sun, 20 Apr 2014 06:34:25 -0400 Subject: [PATCH] CS fixes --- program/js/common.js | 153 +++++++++++++++++++++------------------------------ 1 files changed, 63 insertions(+), 90 deletions(-) diff --git a/program/js/common.js b/program/js/common.js index 35f5a0f..28f79d5 100644 --- a/program/js/common.js +++ b/program/js/common.js @@ -37,58 +37,55 @@ this.vendver = n.vendorSub ? parseFloat(n.vendorSub) : 0; this.product = n.product ? n.product : ''; this.platform = String(n.platform).toLowerCase(); - this.lang = (n.language) ? n.language.substring(0,2) : - (n.browserLanguage) ? n.browserLanguage.substring(0,2) : - (n.systemLanguage) ? n.systemLanguage.substring(0,2) : 'en'; + this.lang = n.language ? n.language.substring(0,2) : + n.browserLanguage ? n.browserLanguage.substring(0,2) : + n.systemLanguage ? n.systemLanguage.substring(0,2) : 'en'; - this.win = (this.platform.indexOf('win') >= 0); - this.mac = (this.platform.indexOf('mac') >= 0); - this.linux = (this.platform.indexOf('linux') >= 0); - this.unix = (this.platform.indexOf('unix') >= 0); + this.win = this.platform.indexOf('win') >= 0; + this.mac = this.platform.indexOf('mac') >= 0; + this.linux = this.platform.indexOf('linux') >= 0; + this.unix = this.platform.indexOf('unix') >= 0; this.dom = document.getElementById ? true : false; - this.dom2 = (document.addEventListener && document.removeEventListener); + this.dom2 = document.addEventListener && document.removeEventListener; - this.ie = (document.all && !window.opera); - this.ie4 = (this.ie && !this.dom); - this.ie5 = (this.dom && this.appver.indexOf('MSIE 5')>0); - this.ie8 = (this.dom && this.appver.indexOf('MSIE 8')>0); - this.ie9 = (this.dom && this.appver.indexOf('MSIE 9')>0); - this.ie7 = (this.dom && this.appver.indexOf('MSIE 7')>0); - this.ie6 = (this.dom && !this.ie8 && !this.ie7 && this.appver.indexOf('MSIE 6')>0); + this.webkit = this.agent_lc.indexOf('applewebkit') > 0; + this.ie = (document.all && !window.opera) || (this.win && this.agent_lc.indexOf('trident/') > 0); - this.ns = ((this.ver < 5 && this.name == 'Netscape') || (this.ver >= 5 && this.vendor.indexOf('Netscape') >= 0)); - this.chrome = (this.agent_lc.indexOf('chrome') > 0); - this.safari = (!this.chrome && (this.agent_lc.indexOf('safari') > 0 || this.agent_lc.indexOf('applewebkit') > 0)); - this.konq = (this.agent_lc.indexOf('konqueror') > 0); - this.mz = (this.dom && !this.ie && !this.ns && !this.chrome && !this.safari && !this.konq && this.agent.indexOf('Mozilla') >= 0); - this.iphone = (this.safari && this.agent_lc.indexOf('iphone') > 0); - this.ipad = (this.safari && this.agent_lc.indexOf('ipad') > 0); - this.opera = window.opera ? true : false; + if (this.ie) { + this.ie7 = this.appver.indexOf('MSIE 7') > 0; + this.ie8 = this.appver.indexOf('MSIE 8') > 0; + this.ie9 = this.appver.indexOf('MSIE 9') > 0; + } + else if (window.opera) { + this.opera = true; + this.vendver = opera.version(); + } + else { + this.chrome = this.agent_lc.indexOf('chrome') > 0; + this.safari = !this.chrome && (this.webkit || this.agent_lc.indexOf('safari') > 0); + this.konq = this.agent_lc.indexOf('konqueror') > 0; + this.mz = this.dom && !this.chrome && !this.safari && !this.konq && this.agent.indexOf('Mozilla') >= 0; + this.iphone = this.safari && (this.agent_lc.indexOf('iphone') > 0 || this.agent_lc.indexOf('ipod') > 0); + this.ipad = this.safari && this.agent_lc.indexOf('ipad') > 0; + } - if (this.opera && window.RegExp) - this.vendver = (/opera(\s|\/)([0-9\.]+)/.test(this.agent_lc)) ? parseFloat(RegExp.$2) : -1; - else if (this.chrome && window.RegExp) - this.vendver = (/chrome\/([0-9\.]+)/.test(this.agent_lc)) ? parseFloat(RegExp.$1) : 0; - else if (!this.vendver && this.safari) - this.vendver = (/(safari|applewebkit)\/([0-9]+)/.test(this.agent_lc)) ? parseInt(RegExp.$2) : 0; - else if ((!this.vendver && this.mz) || this.agent.indexOf('Camino')>0) - this.vendver = (/rv:([0-9\.]+)/.test(this.agent)) ? parseFloat(RegExp.$1) : 0; - else if (this.ie && window.RegExp) - this.vendver = (/msie\s+([0-9\.]+)/.test(this.agent_lc)) ? parseFloat(RegExp.$1) : 0; - else if (this.konq && window.RegExp) - this.vendver = (/khtml\/([0-9\.]+)/.test(this.agent_lc)) ? parseFloat(RegExp.$1) : 0; + if (!this.vendver) { + // common version strings + this.vendver = /(opera|opr|khtml|chrome|safari|applewebkit|msie)(\s|\/)([0-9\.]+)/.test(this.agent_lc) ? parseFloat(RegExp.$3) : 0; + + // any other (Mozilla, Camino, IE>=11) + if (!this.vendver) + this.vendver = /rv:([0-9\.]+)/.test(this.agent) ? parseFloat(RegExp.$1) : 0; + } // get real language out of safari's user agent if (this.safari && (/;\s+([a-z]{2})-[a-z]{2}\)/.test(this.agent_lc))) this.lang = RegExp.$1; - this.mobile = this.agent_lc.match(/iphone|ipad|ipod|android|blackberry|iemobile|opera mini|opera mobi/); - this.dhtml = ((this.ie4 && this.win) || this.ie5 || this.ie6 || this.ns4 || this.mz); - this.vml = (this.win && this.ie && this.dom && !this.opera); - this.pngalpha = (this.mz || (this.opera && this.vendver >= 6) || (this.ie && this.mac && this.vendver >= 5) || - (this.ie && this.win && this.vendver >= 5.5) || this.safari); - this.opacity = (this.mz || (this.ie && this.vendver >= 5.5 && !this.opera) || (this.safari && this.vendver >= 100)); + this.tablet = /ipad|android|xoom|sch-i800|playbook|tablet|kindle/i.test(this.agent_lc); + this.mobile = /iphone|ipod|blackberry|iemobile|opera mini|opera mobi|mobile/i.test(this.agent_lc); + this.touch = this.mobile || this.tablet; this.cookies = n.cookieEnabled; // test for XMLHTTP support @@ -122,11 +119,13 @@ classname += ' iphone'; else if (this.ipad) classname += ' ipad'; - else if (this.safari || this.chrome) + else if (this.webkit) classname += ' webkit'; if (this.mobile) classname += ' mobile'; + if (this.tablet) + classname += ' tablet'; if (document.documentElement) document.documentElement.className += classname; @@ -256,13 +255,17 @@ cancel: function(evt) { var e = evt ? evt : window.event; + if (e.preventDefault) e.preventDefault(); + else + e.returnValue = false; + if (e.stopPropagation) e.stopPropagation(); e.cancelBubble = true; - e.returnValue = false; + return false; }, @@ -289,7 +292,6 @@ * * @param {String} Event name * @param {Function} Handler function - * @return Listener ID (used to remove this handler later on) */ addEventListener: function(evt, func, obj) { @@ -299,6 +301,8 @@ this._events[evt] = []; this._events[evt].push({func:func, obj:obj ? obj : window}); + + return this; // chainable }, /** @@ -326,13 +330,17 @@ triggerEvent: function(evt, e) { var ret, h; + if (e === undefined) e = this; else if (typeof e === 'object') e.event = evt; - if (this._events && this._events[evt] && !this._event_exec) { - this._event_exec = true; + if (!this._event_exec) + this._event_exec = {}; + + if (this._events && this._events[evt] && !this._event_exec[evt]) { + this._event_exec[evt] = true; for (var i=0; i < this._events[evt].length; i++) { if ((h = this._events[evt][i])) { if (typeof h.func === 'function') @@ -355,7 +363,8 @@ } } - this._event_exec = false; + delete this._event_exec[evt]; + if (e.event) { try { delete e.event; @@ -425,7 +434,7 @@ for (var key in obj) { if (obj[key] && typeof obj[key] === 'object') - out[key] = clone_object(obj[key]); + out[key] = rcube_clone_object(obj[key]); else out[key] = obj[key]; } @@ -529,36 +538,6 @@ roundcube_browser.prototype.set_cookie = setCookie; roundcube_browser.prototype.get_cookie = getCookie; -// tiny replacement for Firebox functionality -function rcube_console() -{ - this.log = function(msg) - { - var box = rcube_find_object('dbgconsole'); - - if (box) { - if (msg.charAt(msg.length-1)=='\n') - msg += '--------------------------------------\n'; - else - msg += '\n--------------------------------------\n'; - - // Konqueror doesn't allow to just change the value of hidden element - if (bw.konq) { - box.innerText += msg; - box.value = box.innerText; - } else - box.value += msg; - } - }; - - this.reset = function() - { - var box = rcube_find_object('dbgconsole'); - if (box) - box.innerText = box.value = ''; - }; -}; - var bw = new roundcube_browser(); bw.set_html_class(); @@ -588,18 +567,12 @@ return tzo; } -// Make getElementById() case-sensitive on IE -if (bw.ie) { - document._getElementById = document.getElementById; - document.getElementById = function(id) { - var i = 0, obj = document._getElementById(id); - - if (obj && obj.id != id) - while ((obj = document.all[i]) && obj.id != id) - i++; - - return obj; - } +// define String's startsWith() method for old browsers +if (!String.prototype.startsWith) { + String.prototype.startsWith = function(search, position) { + position = position || 0; + return this.slice(position, search.length) === search; + }; } // jQuery plugin to emulate HTML5 placeholder attributes on input elements -- Gitblit v1.9.1