diff -urN ../roundcubemail-1.4.4.orig/skins/elastic/styles/styles-fixes.css ./skins/elastic/styles/styles-fixes.css --- ../roundcubemail-1.4.4.orig/skins/elastic/styles/styles-fixes.css 1970-01-01 03:00:00.000000000 +0300 +++ ./skins/elastic/styles/styles-fixes.css 2020-05-31 00:21:22.734980000 +0300 @@ -0,0 +1,50 @@ +body.task-settings #layout-content>.header>.header-title{display: inline;} + +#layout-content {overflow-y: hidden; overflow-x: auto;} +/* Firefox */ +/* +#layout-content {scrollbar-width: none;} +*/ +/* IE 10+ */ +/* +#layout-content {-ms-overflow-style: none;} +*/ +/* Chrome/Safari/Webkit */ +/* +#layout-content::-webkit-scrollbar {width: 0px; background: transparent;} +*/ + +.header #toolbar-menu {overflow-y: hidden; overflow-x: auto;} +.header #toolbar-menu {height: 75px;} +/* Firefox */ +/* +.header #toolbar-menu {scrollbar-width: none;} +*/ +/* IE 10+ */ +/* +.header #toolbar-menu {-ms-overflow-style: none;} +*/ +/* Chrome/Safari/Webkit */ +/* +.header #toolbar-menu::-webkit-scrollbar {width: 0px; background: transparent;} +*/ +/* Edge */ +@supports (-ms-ime-align: auto) { +.header #toolbar-menu {overflow-x: hidden;} +} + +.header #toolbar-menu { +-webkit-touch-callout: none; +-webkit-user-select: none; +-khtml-user-select: none; +-moz-user-select: none; +-o-user-select:none; +-ms-user-select: none; +user-select: none; +-webkit-user-drag: none; +-khtml-user-drag: none; +-moz-user-drag: none; +-o-user-drag: none; +-ms-user-drag: none; +user-drag: none; +} diff -urN ../roundcubemail-1.4.4.orig/skins/elastic/templates/includes/layout.html ./skins/elastic/templates/includes/layout.html --- ../roundcubemail-1.4.4.orig/skins/elastic/templates/includes/layout.html 2020-04-26 22:50:08.000000000 +0300 +++ ./skins/elastic/templates/includes/layout.html 2020-05-25 19:16:11.814351000 +0300 @@ -28,6 +28,7 @@ + action-"> diff -urN ../roundcubemail-1.4.4.orig/skins/elastic/ui.js ./skins/elastic/ui.js --- ../roundcubemail-1.4.4.orig/skins/elastic/ui.js 2020-04-26 22:50:08.000000000 +0300 +++ ./skins/elastic/ui.js 2020-05-31 01:17:39.927958000 +0300 @@ -763,8 +763,127 @@ $('input.datepicker').each(function() { func(this); }); rcmail.addEventListener('insert-edit-field', func); } + + // scroll toolbar + var toolbarmenu = document.getElementById('toolbar-menu'); + if (toolbarmenu) { + if (toolbarmenu.addEventListener) { + // scroll toolbar by mousewheel + if ('onwheel' in document) { + toolbarmenu.addEventListener('wheel', toolbarmenuOnWheel); // IE9+, Firefox17+, Chrome31+ + } else if ('onmousewheel' in document) { + toolbarmenu.addEventListener('mousewheel', toolbarmenuOnWheel); // old variant + } else { + toolbarmenu.addEventListener('MozMousePixelScroll', toolbarmenuOnWheel); // Firefox17- + } + toolbarmenu.addEventListener('scroll', toolbarmenuOnScroll, { passive: true }); // for Edge + + // scroll toolbar by drag + toolbarmenu.addEventListener('mousedown', toolbarmenuOnMouseDown); + toolbarmenu.addEventListener('mouseenter', toolbarmenuOnMouseEnter); + document.addEventListener('mousemove', toolbarmenuOnMouseMove) + document.addEventListener('mouseup', toolbarmenuOnMouseUp); + } else { + // IE8- + + // scroll toolbar by mousewheel + toolbarmenu.attachEvent('onmousewheel', toolbarmenuOnWheel); + + // scroll toolbar by drag + toolbarmenu.attachEvent('onmousedown', toolbarmenuOnMouseDown); + toolbarmenu.attachEvent('onmouseenter', toolbarmenuOnMouseEnter); + document.attachEvent('onmousemove', toolbarmenuOnMouseMove) + document.attachEvent('onmouseup', toolbarmenuOnMouseUp); + } + $(toolbarmenu).find('li a').on('dragstart', function() { return(false); }); + } }; + var tbMouseX, tbMouseClicked = false, tbMouseMoved = false, tbScrollLeft; + function toolbarmenuOnMouseDown(e) { + e = e || window.event; + var toolbarmenu = document.getElementById('toolbar-menu'); + if (toolbarmenu) { + tbMouseMoved = false; + tbMouseClicked = true; + tbMouseX = e.pageX; + tbScrollLeft = toolbarmenu.scrollLeft; + } + } + function toolbarmenuOnMouseMove(e) { + e = e || window.event; + if (tbMouseClicked) { + var toolbarmenu = document.getElementById('toolbar-menu'); + if (toolbarmenu) { + if (!tbMouseMoved && (Math.abs(tbMouseX - e.pageX) > 2)) { + tbMouseMoved = true; + $(toolbarmenu).find('li a').each(function() { + if (!$(this).hasClass('disabled')) { + $(this).data('wasDisabled', 'false').addClass('disabled'); + } + }); + } + if (toolbarmenu.scrollLeft != tbScrollLeft + tbMouseX - e.pageX) { + toolbarmenu.scrollLeft = tbScrollLeft + tbMouseX - e.pageX; + } + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + } + } + } + function toolbarEnableButtons() { + var toolbarmenu = document.getElementById('toolbar-menu'); + if (toolbarmenu) { + $(toolbarmenu).find('li a').each(function() { + if (($(this).hasClass('disabled')) && ($(this).data('wasDisabled') == 'false')) { + $(this).data('wasDisabled', 'true').removeClass('disabled').data('wasDisabled', ''); + } + }); + } + } + function toolbarmenuOnMouseUp(e) { + e = e || window.event; + if (tbMouseClicked) { + tbMouseClicked = false; + if (tbMouseMoved) { + tbMouseMoved = false; + toolbarEnableButtons(); + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + } + } + } + function toolbarmenuOnMouseEnter(e) { + e = e || window.event; + if (tbMouseClicked && e.buttons == 0) { + tbMouseClicked = false; + if (tbMouseMoved) { + tbMouseMoved = false; + toolbarEnableButtons(); + } + } + } + function toolbarmenuOnWheel(e) { + e = e || window.event; + var delta = e.deltaY || e.detail || e.wheelDelta; + if ((navigator.appVersion.toUpperCase().indexOf("TRIDENT") != -1) || (navigator.appVersion.toUpperCase().indexOf("MSIE") != -1)) delta=-delta; + if (delta >= 200 || delta <= -200) delta /= 25 + else if (delta > 100 || delta < -100) delta /= 15; + else if (delta < 10 || delta > -10) delta *= 3; + var toolbarmenu = document.getElementById('toolbar-menu'); + if (toolbarmenu) { + toolbarmenu.scrollLeft += delta; + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + } + } + function toolbarmenuOnScroll(e) { + var toolbarmenu = document.getElementById('toolbar-menu'); + if (toolbarmenu) { + if (toolbarmenu.scrollTop > 0) { + toolbarmenu.scrollTop = 0; + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + } + } + } + /** * Apply bootstrap classes to html elements */ @@ -3980,6 +4099,46 @@ $('
') .appendTo(node) + .on('touchstart', function(e) { + var ts, splitter = $(this), offset = node.position().left; + + // Makes col-resize cursor follow the touch position on dragging + // and fixes issues related to iframes + splitter.width(10000).css(reverted ? 'left' : 'right', -5000); + + // Disable selection on document while dragging + // It can happen when you move touch out of window, on top + document.body.style.userSelect = 'none'; + + // Start listening to touchmove events + $(document) + .on('touchmove.resizer', function(e) { + // Use of timeouts makes the move more smooth in Chrome + clearTimeout(ts); + ts = setTimeout(function() { + // For left-side-splitter we need the current offset + if (reverted) { + offset = node.position().left; + } + var cursor_position = rcube_event.get_touch_pos(e).x, + width = reverted ? node.width() + (offset - cursor_position) : cursor_position - offset; + + set_width(width); + }, 5); + }) + .on('touchend.resizer', function() { + // Remove registered events + $(document).off('.resizer'); + $('iframe').off('.resizer'); + document.body.style.userSelect = 'auto'; + + // Set back the splitter width to normal + splitter.width(6).css(reverted ? 'left' : 'right', -3); + + // Save the current position (width) + save_pref(key, node.width()); + }); + }) .on('mousedown', function(e) { var ts, splitter = $(this), offset = node.position().left; diff -urN ../roundcubemail-1.4.4.orig/skins/elastic/ui.min.js ./skins/elastic/ui.min.js --- ../roundcubemail-1.4.4.orig/skins/elastic/ui.min.js 2020-04-26 22:50:08.000000000 +0300 +++ ./skins/elastic/ui.min.js 2020-05-31 01:20:01.153162000 +0300 @@ -22,7 +22,117 @@ function(b){b.attachment.complete&&(U(b.item),"text/vcard"==b.attachment.mimetype&&rcmail.commands["attach-vcard"]&&a("vcard_attachments.vcardattached"))}).addEventListener("managesieve.insertrow",function(a){p(a.obj)}).addEventListener("add-recipient",function(){a("recipientsadded")});rcmail.init_pagejumper(".pagenav > input");if("mail"==rcmail.task){if("compose"==rcmail.env.action&&(rcmail.addEventListener("compose-encrypted",function(a){$("a.mode-html, button.attach").prop("disabled",a.active); $("a.attach, a.responses:not(.edit)")[a.active?"addClass":"removeClass"]("disabled")}),$("#layout-sidebar > .footer:not(.pagenav) > a.button").click(function(){$(this).is(".disabled")&&rcmail.display_message(rcmail.gettext("nocontactselected"),"warning")}),window.MutationObserver)){var b=$("#attachment-list"),c=function(){V("attach",02)){ +tbMouseMoved=true; +$(toolbarmenu).find('li a').each(function(){ +if(!$(this).hasClass('disabled')){ +$(this).data('wasDisabled','false').addClass('disabled'); +} +}); +} +if(toolbarmenu.scrollLeft!=tbScrollLeft+tbMouseX-e.pageX){ +toolbarmenu.scrollLeft=tbScrollLeft+tbMouseX-e.pageX; +} +e.preventDefault?e.preventDefault():(e.returnValue=false); +} +} +} +function toolbarEnableButtons(){ +var toolbarmenu=document.getElementById('toolbar-menu'); +if(toolbarmenu){ +$(toolbarmenu).find('li a').each(function(){ +if (($(this).hasClass('disabled'))&&($(this).data('wasDisabled')=='false')){ +$(this).data('wasDisabled','true').removeClass('disabled').data('wasDisabled',''); +} +}); +} +} +function toolbarmenuOnMouseUp(e){ +e=e||window.event; +if(tbMouseClicked){ +tbMouseClicked=false; +if(tbMouseMoved){ +tbMouseMoved=false; +toolbarEnableButtons(); +e.preventDefault?e.preventDefault():(e.returnValue=false); +} +} +} +function toolbarmenuOnMouseEnter(e){ +e=e||window.event; +if(tbMouseClicked&&e.buttons==0){ +tbMouseClicked=false; +if(tbMouseMoved){ +tbMouseMoved=false; +toolbarEnableButtons(); +} +} +} +function toolbarmenuOnWheel(e){ +e=e||window.event; +var delta=e.deltaY||e.detail||e.wheelDelta; +if((navigator.appVersion.toUpperCase().indexOf("TRIDENT")!=-1)||(navigator.appVersion.toUpperCase().indexOf("MSIE")!=-1))delta=-delta; +if(delta>=200||delta<=-200)delta/=25 +else if(delta>100||delta<-100)delta/=15; +else if(delta<10||delta>-10)delta*=3; +var toolbarmenu=document.getElementById('toolbar-menu'); +if(toolbarmenu){ +toolbarmenu.scrollLeft+=delta; +e.preventDefault?e.preventDefault():(e.returnValue=false); +} +} +function toolbarmenuOnScroll(e){ +var toolbarmenu=document.getElementById('toolbar-menu'); +if(toolbarmenu){ +if(toolbarmenu.scrollTop>0){ +toolbarmenu.scrollTop=0; +e.preventDefault?e.preventDefault():(e.returnValue=false); +} +} +} +function p(a){a||(a=document);$("input.button,button",a).not(".btn").addClass("btn").not(".btn-primary,.primary,.mainaction").addClass("btn-secondary"); $("input.button.mainaction,button.primary,button.mainaction",a).addClass("btn-primary");$("button.btn.delete,button.btn.discard",a).addClass("btn-danger");$.each(["warning","error","information","confirmation"],function(){var b=this;$(".box"+b+":not(.ui.alert)",a).each(function(){L(this,b,!0)})});if(a!=document&&1==$(".popup",a).children().length){var b=$(".popup",a).children().first();if(b.is("img"))$(".popup",a).addClass("justified");else if(b.is("label")){var c=b.find("input").detach();b=b.detach(); var d=c.attr("id");d||c.attr("id",d="dialog-input-elastic");$(".popup",a).addClass("formcontent").append($('
').append(b.attr("for",d).addClass("col-sm-2 col-form-label")).append($('
').append(c)));c.focus()}}$("input:not(.button,.no-bs,[type=button],[type=radio],[type=checkbox]),textarea",$(".propform",a)).addClass("form-control");$("[type=checkbox]",$(".propform",a)).addClass("form-check-input");$("select",a).addClass("form-control custom-select"); a!=document&&$("input:not(.button,.no-bs,[type=button],[type=radio],[type=checkbox]),textarea",a).addClass("form-control");$("table.propform",a).each(function(){var a=0,b=0,d=["sm",4,8];$(this).attr("class").match(/cols-([a-z]+)-(\d)-(\d)/)&&(d=[RegExp.$1,RegExp.$2,RegExp.$3]);$(this).find("> tbody > tr, > tr").each(function(){var c=$(this),e=["form-group","row"];var g=c.children("td");if(2==g.length){var k=g.first();g=g.last();$("label",k).addClass("col-form-label");k.addClass("col-"+d[0]+"-"+d[1]); @@ -91,9 +201,14 @@ d.parent().next()),b=!0):a=c.next("select.hidden");Aa(c);1==a.length&&(d.addClass("html-editor"),c.after(g).data("control",a).on("keydown",function(a){a.altKey&&121==a.which&&e.focus()}),b&&(a.parents("tr").first().hide(),d.prev().hide(),d.addClass("col-sm-12")))}function Aa(a){var b=parseInt($(a).css("padding-top"))+parseInt($(a).css("padding-bottom"))+2,c=21*($(a)[0].rows||5);$(a).on("input",function(a){if(!(this.scrollHeight-b<=c)){var d,g=0;$(a.target).parents().each(function(){if(0
');b={value:b,name:c+"[]"};e&&(b.size=e);$("input",d).attr(b).keydown(function(b){var d=$(this);if(13==b.which){b= d.attr("name").replace(/\[\]$/,"");var c=(new Date).getTime();d=S(a,"",b,c,e,d.parent());$("input",d).focus()}else if((8==b.which||46==b.which)&&""==d.val()&&(d=d.parent(),1').appendTo(a).on("mousedown",function(b){var g,f=$(this),h=a.position().left;f.width(1E4).css(d? +function(){a.addClass("focused")}).on("blur",function(){a.removeClass("focused")});g?g.after(d):d.appendTo(a);return d}function ha(a){var b=a.find(".scroller .listing").first().attr("id"),c=rcmail.env.task+"."+(b||rcmail.env.action+"."+a.attr("id"));b=Ba(c);var d=a.is(".sidebar-right"),e=function(b){a.css({width:Math.max(100,b),flex:"none"})};a[d?"prev":"next"]().length&&($('
').appendTo(a) +.on("touchstart",function(b){var g,f=$(this),h=a.position().left;f.width(1E4).css(d? +"left":"right",-5E3);document.body.style.userSelect="none";$(document).on("touchmove.resizer",function(b){clearTimeout(g);g=setTimeout(function(){d&&(h=a.position().left);var c=rcube_event.get_touch_pos(b).x;c=d?a.width()+(h-c):c-h;e(c)},5)}).on("touchend.resizer",function(){$(document).off(".resizer");$("iframe").off(".resizer");document.body.style.userSelect="auto";f.width(6).css(d?"left":"right",-3);var b=a.width();v[c]=b;if(!rcmail.local_storage_set_item("prefs.elastic",v)){var e=new Date;e.setYear(e.getFullYear()+ +1);rcmail.set_cookie(c,b,e)}})}) +.on("mousedown",function(b){var g,f=$(this),h=a.position().left;f.width(1E4).css(d? "left":"right",-5E3);document.body.style.userSelect="none";$(document).on("mousemove.resizer",function(b){clearTimeout(g);g=setTimeout(function(){d&&(h=a.position().left);var c=rcube_event.get_mouse_pos(b).x;c=d?a.width()+(h-c):c-h;e(c)},5)}).on("mouseup.resizer",function(){$(document).off(".resizer");$("iframe").off(".resizer");document.body.style.userSelect="auto";f.width(6).css(d?"left":"right",-3);var b=a.width();v[c]=b;if(!rcmail.local_storage_set_item("prefs.elastic",v)){var e=new Date;e.setYear(e.getFullYear()+ -1);rcmail.set_cookie(c,b,e)}})}),b&&e(b))}function Ca(a){if(!u()||!0===arguments[3])return h.open_window.apply(rcmail,arguments);a=rcmail.add_url(a,"_framed",1);a=rcmail.add_url(a,"_extwin",1);var b,c="",d={cancel_button:"close",width:768,height:768},e=$("