diff -urN ../roundcubemail-1.5.1.orig/skins/elastic/styles/styles-fixes.css ./skins/elastic/styles/styles-fixes.css --- ../roundcubemail-1.5.1.orig/skins/elastic/styles/styles-fixes.css 1970-01-01 03:00:00.000000000 +0300 +++ ./skins/elastic/styles/styles-fixes.css 2021-12-02 23:37:05.605732000 +0200 @@ -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.5.1.orig/skins/elastic/templates/includes/layout.html ./skins/elastic/templates/includes/layout.html --- ../roundcubemail-1.5.1.orig/skins/elastic/templates/includes/layout.html 2021-11-22 23:12:11.000000000 +0200 +++ ./skins/elastic/templates/includes/layout.html 2021-12-02 23:37:05.605988000 +0200 @@ -39,6 +39,7 @@ } catch (e) { } + action-"> diff -urN ../roundcubemail-1.5.1.orig/skins/elastic/ui.js ./skins/elastic/ui.js --- ../roundcubemail-1.5.1.orig/skins/elastic/ui.js 2021-11-22 23:12:11.000000000 +0200 +++ ./skins/elastic/ui.js 2021-12-02 23:37:05.608283000 +0200 @@ -760,8 +760,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); + } + } + } + /** * Initializes light/dark mode */ @@ -4087,6 +4206,46 @@ $('
') .addClass(inverted ? 'inverted' : null) .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.5.1.orig/skins/elastic/ui.min.js ./skins/elastic/ui.min.js --- ../roundcubemail-1.5.1.orig/skins/elastic/ui.min.js 2021-11-22 23:12:11.000000000 +0200 +++ ./skins/elastic/ui.min.js 2021-12-02 23:37:38.754798000 +0200 @@ -1,13 +1 @@ -/** - * Roundcube webmail functions for the Elastic skin - * - * Copyright (c) The Roundcube Dev Team - * - * The contents are subject to the Creative Commons Attribution-ShareAlike - * License. It is allowed to copy, distribute, transmit and to adapt the work - * by keeping credits to the original autors in the README file. - * See http://creativecommons.org/licenses/by-sa/3.0/ for details. - * - * @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt CC0-1.0 - */ -"use strict";function rcube_elastic_ui(){var a,n,t,i,o,s,r,e,l,c,d,u,p,m,h,f,v=this,g="normal",b="light",_=!1,k=!1,w=rcmail.is_framed(),x={config:{standard_windows:rcmail.env.standard_windows,message_extwin:rcmail.env.message_extwin,compose_extwin:rcmail.env.compose_extwin,help_open_extwin:rcmail.env.help_open_extwin},checkboxes:0,small_screen_config:{standard_windows:!0,message_extwin:!1,compose_extwin:!1,help_open_extwin:!1}},C={},y=[],E=[],T={menu:$("#layout-menu"),sidebar:$("#layout-sidebar"),list:$("#layout-list"),content:$("#layout-content")},L={menu:$("a.task-menu-button"),back_sidebar:$("a.back-sidebar-button"),back_list:$("a.back-list-button"),back_content:$("a.back-content-button")};function j(t,e,a,n){var i=!0,o=$(""),s=t.attr("id")||(new Date).getTime(),r=s+"-clone",l=t[0].className+(a?" "+a:"");return e?(a=t.data("popup"))&&(o.data({popup:a,"toggle-button":t.data("toggle-button")}),G(o[0]),i=!1,rcmail.register_menu_button(o[0],a)):(l=l.replace("btn-primary","primary").replace(/(btn[a-z-]*|button|disabled)/g,"").trim(),l+=" button"+(n?"":" disabled")),o.attr({id:r,href:"#",class:l}).append($('').text(t.text())),i&&o.on("click",function(e){t.click()}),w&&!e?(o.data("target",t),E.push($.extend({button_id:r},z(t[0].id)))):(s=s,r=r,l=l.replace(" disabled",""),(s=z(s))&&rcmail.register_button(s.command,r,s.data.type,l,s.data.sel)),o}function z(e){var t,a,n;for(n in rcmail.buttons)for(t=0;t").attr({class:"button selection disabled",role:"button",title:rcmail.gettext("select")}).on("click",function(){UI.toggle_list_selection(this,o.attr("id"))}).append($('').text(rcmail.gettext("select"))),a.is(".menu")?(i.prependTo(a).wrap('
  • '),T.content&&(n=j(i,!0,"hidden-big hidden-large"),$('
  • ').append(n).appendTo("#toolbar-menu"),i=i.add(n))):(n=o.data("list-select-replace"))?$(n).replaceWith(i):(i.appendTo(a).addClass("icon"),e.is("#layout-sidebar")||i.addClass("toolbar-button"))),rcmail.addEventListener("listupdate",function(e){e.list&&e.list==rcmail[s]&&(e.rowcount?i.addClass("active").removeClass("disabled").attr("tabindex",0):i.removeClass("active").addClass("disabled").attr("tabindex",-1))})),_&&rcmail[s]&&("function"==typeof rcmail[s].draggable?rcmail[s].draggable("destroy"):"boolean"==typeof rcmail[s].draggable&&(rcmail[s].draggable=!1),rcmail[s].dblclick_time=0)}),window.MutationObserver&&$("[data-label-msg]").filter("ul,table").each(function(){var n=$('