diff -urN ../roundcubemail-1.6.4.orig/program/js/common.js ./program/js/common.js --- ../roundcubemail-1.6.4.orig/program/js/common.js 2023-10-16 12:23:06.000000000 +0300 +++ ./program/js/common.js 2023-10-24 16:39:39.624937000 +0300 @@ -218,6 +218,28 @@ }, /** + * Return absolute touch position of an event + */ +get_touch_pos: function(e) +{ + if (!e) e = window.event; + var mX = (e.touches[0].pageX) ? e.touches[0].pageX : e.touches[0].clientX, + mY = (e.touches[0].pageY) ? e.touches[0].pageY : e.touches[0].clientY; + + if (document.body && document.all) { + mX += document.body.scrollLeft; + mY += document.body.scrollTop; + } + + if (e._offset) { + mX += e._offset.left; + mY += e._offset.top; + } + + return { x:mX, y:mY }; +}, + +/** * Add an object method as event listener to a certain element */ add_listener: function(p) diff -urN ../roundcubemail-1.6.4.orig/program/js/common.min.js ./program/js/common.min.js --- ../roundcubemail-1.6.4.orig/program/js/common.min.js 2023-10-16 12:23:06.000000000 +0300 +++ ./program/js/common.min.js 2023-10-24 16:39:45.037035000 +0300 @@ -1,28 +1 @@ -/** - * Roundcube common js library - * - * This file is part of the Roundcube Webmail client - * - * @licstart The following is the entire license notice for the - * JavaScript code in this file. - * - * Copyright (c) The Roundcube Dev Team - * - * The JavaScript code in this page is free software: you can - * redistribute it and/or modify it under the terms of the GNU - * General Public License (GNU GPL) as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) - * any later version. The code is distributed WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. - * - * As additional permission under GNU GPL version 3 section 7, you - * may distribute non-source (e.g., minimized or compacted) forms of - * that code without the copy of the GNU GPL normally required by - * section 4, provided you include this license notice and a URL - * through which recipients can access the Corresponding Source. - * - * @licend The above is the entire license notice - * for the JavaScript code in this file. - */ -var CONTROL_KEY=1,SHIFT_KEY=2,CONTROL_SHIFT_KEY=3;function roundcube_browser(){var e=navigator;this.agent=e.userAgent,this.agent_lc=e.userAgent.toLowerCase(),this.name=e.appName,this.vendor=e.vendor||"",this.vendver=e.vendorSub?parseFloat(e.vendorSub):0,this.product=e.product||"",this.platform=String(e.platform).toLowerCase(),this.lang=e.language?e.language.substring(0,2):e.browserLanguage?e.browserLanguage.substring(0,2):e.systemLanguage?e.systemLanguage.substring(0,2):"en",this.win=0<=this.platform.indexOf("win"),this.mac=0<=this.platform.indexOf("mac"),this.linux=0<=this.platform.indexOf("linux"),this.unix=0<=this.platform.indexOf("unix"),this.dom=!!document.getElementById,this.dom2=document.addEventListener&&document.removeEventListener,this.edge=0|"+o+")",n?"ig":"i"):new RegExp("^"+i+"$","i");return n?(o=e.match(t))?o.length:0:t.test(e)}function rcube_clone_object(e){var t,n={};for(t in e)e[t]&&"object"==typeof e[t]?n[t]=rcube_clone_object(e[t]):n[t]=e[t];return n}function urlencode(e){return window.encodeURIComponent?encodeURIComponent(e).replace("*","%2A"):escape(e).replace("+","%2B").replace("*","%2A").replace("/","%2F").replace("@","%40")}function rcube_find_object(e,t){var n,i,o,r;if(!(t=t||document).getElementById||!(o=t.getElementById(e))){if(!(o=!(o=!(o=!o&&t.getElementsByName&&(r=t.getElementsByName(e))?r[0]:o)&&t.all?t.all[e]:o)&&t.images.length?t.images[e]:o)&&t.forms.length)for(i=0;i=n.left&&e.x=n.top&&e.yn.length)&&(t=n.length),t-=e.length,n.lastIndexOf(e,t));return-1!==n&&n===t}),jQuery.last=function(e){return e&&e.length?e[e.length-1]:void 0},jQuery.fn.placeholder=function(e){return this.each(function(){$(this).prop({title:e,placeholder:e})})},function(e){if(!e)return{};function t(e){return decodeURIComponent(e.replace(s," "))}var n,i,o={},r=/([^&=]+)=?([^&]*)/g,s=/\+/g;for(e=e.replace(/\?/,"");i=r.exec(e);)n=t(i[1]),i=t(i[2]),"[]"===n.substring(n.length-2)?(o[n=n.substring(0,n.length-2)]||(o[n]=[])).push(i):o[n]=i;return o}),Base64=function(){function h(e){for(var t,n,i=0,o="",r=0;i>6|192))+String.fromCharCode(63&i|128):(t=(t+=String.fromCharCode(i>>12|224))+String.fromCharCode(i>>6&63|128))+String.fromCharCode(63&i|128)}return t}(e),"function"==typeof window.btoa)try{return btoa(e)}catch(e){}for(var t,n,i,o,r,s,u=0,a="",c=e.length;u>2,o=(3&t)<<4|(t=e.charCodeAt(u++))>>4,r=(15&t)<<2|(n=e.charCodeAt(u++))>>6,s=63&n,isNaN(t)?r=s=64:isNaN(n)&&(s=64),a=a+f.charAt(i)+f.charAt(o)+f.charAt(r)+f.charAt(s);return a},decode:function(e){if("function"==typeof window.atob)try{return h(atob(e))}catch(e){}for(var t,n,i,o,r,s,u=0,a="",c=(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"")).length;u>2,n=(3&r)<<6|(s=f.indexOf(e.charAt(u++))),a+=String.fromCharCode(i<<2|o>>4),64!=r&&(a+=String.fromCharCode(t)),64!=s&&(a+=String.fromCharCode(n));return h(a)}}}(); +var CONTROL_KEY=1;var SHIFT_KEY=2;var CONTROL_SHIFT_KEY=3;function roundcube_browser(){var n=navigator;this.agent=n.userAgent;this.agent_lc=n.userAgent.toLowerCase();this.name=n.appName;this.vendor=n.vendor?n.vendor:"";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.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.edge=this.agent_lc.indexOf(" edge/")>0||this.agent_lc.indexOf(" edg/")>0;this.webkit=!this.edge&&this.agent_lc.indexOf("applewebkit")>0;this.ie=document.all&&!window.opera||this.win&&this.agent_lc.indexOf("trident/")>0;if(window.opera){this.opera=true;this.vendver=opera.version()}else if(!this.ie&&!this.edge){this.chrome=this.agent_lc.indexOf("chrome")>0;this.opera=this.webkit&&this.agent.indexOf(" OPR/")>0;this.safari=!this.chrome&&!this.opera&&(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.opera&&this.agent.indexOf("Mozilla")>=0;this.iphone=this.safari&&(this.agent_lc.indexOf("iphone")>0||this.agent_lc.indexOf("ipod")>0||this.platform=="ipod"||this.platform=="iphone");this.ipad=this.safari&&(this.agent_lc.indexOf("ipad")>0||this.platform=="ipad")}if(!this.vendver){if(this.ie)pattern=/(msie|rv)(\s|:)([0-9\.]+)/;else if(this.edge)pattern=/(edge?)(\/)([0-9\.]+)/;else if(this.opera)pattern=/(opera|opr)(\/)([0-9\.]+)/;else if(this.konq)pattern=/(konqueror)(\/)([0-9\.]+)/;else if(this.safari)pattern=/(version)(\/)([0-9\.]+)/;else if(this.chrome)pattern=/(chrome)(\/)([0-9\.]+)/;else if(this.mz)pattern=/(firefox)(\/)([0-9\.]+)/;else pattern=/(khtml|safari|applewebkit|rv)(\s|\/|:)([0-9\.]+)/;this.vendver=pattern.test(this.agent_lc)?parseFloat(RegExp.$3):0}if(this.safari&&/;\s+([a-z]{2})-[a-z]{2}\)/.test(this.agent_lc))this.lang=RegExp.$1;this.mobile=/iphone|ipod|blackberry|iemobile|opera mini|opera mobi|mobile/i.test(this.agent_lc);this.tablet=!this.mobile&&/ipad|android|xoom|sch-i800|playbook|tablet|kindle/i.test(this.agent_lc);this.touch=this.mobile||this.tablet;this.pointer=typeof window.PointerEvent=="function";this.cookies=n.cookieEnabled;this.set_html_class=function(){var classname=" js";if(this.ie)classname+=" ms ie ie"+parseInt(this.vendver);else if(this.edge&&this.vendver>74)classname+=" chrome";else if(this.edge)classname+=" ms edge";else if(this.opera)classname+=" opera";else if(this.konq)classname+=" konqueror";else if(this.safari)classname+=" chrome";else if(this.chrome)classname+=" chrome";else if(this.mz)classname+=" mozilla";if(this.iphone)classname+=" iphone";else if(this.ipad)classname+=" ipad";else if(this.webkit)classname+=" webkit";if(this.mobile)classname+=" mobile";if(this.tablet)classname+=" tablet";if(document.documentElement)document.documentElement.className+=classname}}var rcube_event={get_target:function(e){e=e||window.event;return e&&e.target?e.target:e.srcElement||document},get_keycode:function(e){e=e||window.event;return e&&e.keyCode?e.keyCode:e&&e.which?e.which:0},get_button:function(e){e=e||window.event;return e&&e.button!==undefined?e.button:e&&e.which?e.which:0},get_modifier:function(e){var opcode=0;e=e||window.event;if(bw.mac&&e)opcode+=(e.metaKey&&CONTROL_KEY)+(e.shiftKey&&SHIFT_KEY);else if(e)opcode+=(e.ctrlKey&&CONTROL_KEY)+(e.shiftKey&&SHIFT_KEY);return opcode},get_mouse_pos:function(e){if(!e)e=window.event;var mX=e.pageX?e.pageX:e.clientX,mY=e.pageY?e.pageY:e.clientY;if(document.body&&document.all){mX+=document.body.scrollLeft;mY+=document.body.scrollTop}if(e._offset){mX+=e._offset.left;mY+=e._offset.top}return{x:mX,y:mY}},get_touch_pos:function(e){if(!e)e=window.event;var mX=e.touches[0].pageX?e.touches[0].pageX:e.touches[0].clientX,mY=e.touches[0].pageY?e.touches[0].pageY:e.touches[0].clientY;if(document.body&&document.all){mX+=document.body.scrollLeft;mY+=document.body.scrollTop}if(e._offset){mX+=e._offset.left;mY+=e._offset.top}return{x:mX,y:mY}},add_listener:function(p){if(!p.object||!p.method)return;if(!p.element)p.element=document;if(!p.object._rc_events)p.object._rc_events={};var key=p.event+"*"+p.method;if(!p.object._rc_events[key])p.object._rc_events[key]=function(e){return p.object[p.method](e)};if(p.element.addEventListener)p.element.addEventListener(p.event,p.object._rc_events[key],false);else if(p.element.attachEvent){p.element.detachEvent("on"+p.event,p.object._rc_events[key]);p.element.attachEvent("on"+p.event,p.object._rc_events[key])}else p.element["on"+p.event]=p.object._rc_events[key]},remove_listener:function(p){if(!p.element)p.element=document;var key=p.event+"*"+p.method;if(p.object&&p.object._rc_events&&p.object._rc_events[key]){if(p.element.removeEventListener)p.element.removeEventListener(p.event,p.object._rc_events[key],false);else if(p.element.detachEvent)p.element.detachEvent("on"+p.event,p.object._rc_events[key]);else p.element["on"+p.event]=null}},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;return false},is_keyboard:function(e){if(!e)return false;if(e.type)return!!e.type.match(/^key/)||e.type=="click"&&!e.clientX;return!e.pageX&&(e.pageY||0)<=0&&!e.clientX&&(e.clientY||0)<=0},keyboard_only:function(e){return rcube_event.is_keyboard(e)?true:rcube_event.cancel(e)},touchevent:function(e){return{pageX:e.pageX,pageY:e.pageY,offsetX:e.pageX-e.target.offsetLeft,offsetY:e.pageY-e.target.offsetTop,target:e.target,istouch:true}}};function rcube_event_engine(){this._events={}}rcube_event_engine.prototype={addEventListener:function(evt,func,obj){if(!this._events)this._events={};if(!this._events[evt])this._events[evt]=[];this._events[evt].push({func:func,obj:obj?obj:window});return this},removeEventListener:function(evt,func,obj){if(obj===undefined)obj=window;for(var h,i=0;this._events&&this._events[evt]&&i|"+delim+")",rx_flag):new RegExp("^"+addr_spec+"$","i");if(count){var re=input.match(rx);return re?re.length:0}return rx.test(input)}function rcube_clone_object(obj){var out={};for(var key in obj){if(obj[key]&&typeof obj[key]==="object")out[key]=rcube_clone_object(obj[key]);else out[key]=obj[key]}return out}function urlencode(str){if(window.encodeURIComponent)return encodeURIComponent(str).replace("*","%2A");return escape(str).replace("+","%2B").replace("*","%2A").replace("/","%2F").replace("@","%40")}function rcube_find_object(id,d){var n,f,obj,e;if(!d)d=document;if(d.getElementById)if(obj=d.getElementById(id))return obj;if(!obj&&d.getElementsByName&&(e=d.getElementsByName(id)))obj=e[0];if(!obj&&d.all)obj=d.all[id];if(!obj&&d.images.length)obj=d.images[id];if(!obj&&d.forms.length){for(f=0;f=pos.left&&mouse.x=pos.top&&mouse.ysubjectString.length){position=subjectString.length}position-=searchString.length;var lastIndex=subjectString.lastIndexOf(searchString,position);return lastIndex!==-1&&lastIndex===position}}jQuery.last=function(arr){return arr&&arr.length?arr[arr.length-1]:undefined};jQuery.fn.placeholder=function(text){return this.each(function(){$(this).prop({title:text,placeholder:text})})};var rcube_parse_query=function(query){if(!query)return{};var params={},e,k,v,re=/([^&=]+)=?([^&]*)/g,decodeRE=/\+/g,decode=function(str){return decodeURIComponent(str.replace(decodeRE," "))};query=query.replace(/\?/,"");while(e=re.exec(query)){k=decode(e[1]);v=decode(e[2]);if(k.substring(k.length-2)==="[]"){k=k.substring(0,k.length-2);(params[k]||(params[k]=[])).push(v)}else params[k]=v}return params};var Base64=function(){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var utf8_encode=function(string){string=string.replace(/\r\n/g,"\n");var utftext="";for(var n=0;n127&&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};var utf8_decode=function(utftext){var i=0,string="",c=0,c2=0,c3=0;while(i191&&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={encode:function(input){input=utf8_encode(input);if(typeof window.btoa==="function"){try{return btoa(input)}catch(e){}}var chr1,chr2,chr3,enc1,enc2,enc3,enc4,i=0,output="",len=input.length;while(i>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2))enc3=enc4=64;else if(isNaN(chr3))enc4=64;output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4)}return output},decode:function(input){if(typeof window.atob==="function"){try{return utf8_decode(atob(input))}catch(e){}}var chr1,chr2,chr3,enc1,enc2,enc3,enc4,len,i=0,output="";input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");len=input.length;while(i>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64)output=output+String.fromCharCode(chr2);if(enc4!=64)output=output+String.fromCharCode(chr3)}return utf8_decode(output)}};return obj}();