diff --git a/CHANGELOG b/CHANGELOG index b0c49ffa0..3d4733b4f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -15,6 +15,7 @@ CHANGELOG Roundcube Webmail - Fix so messages in threads with no root aren't displayed separately (#4999) - Fix bug where attachments with Content-Id were attached to the message on reply (#7122) - Fix identity selection on reply when both sender and recipient addresses are included in identities (#7211) +- Elastic: Fix text selection with Shift+PageUp and Shift+PageDown in plain text editor when using Chrome (#7230) RELEASE 1.4.3 ------------- diff --git a/program/js/editor.js b/program/js/editor.js index 125808e44..e05cf5725 100644 --- a/program/js/editor.js +++ b/program/js/editor.js @@ -331,7 +331,7 @@ function rcube_text_editor(config, id) if (is_sig) data = data.replace(sig_mark, "\n" + signature.text); - input.val(data).focus(); + input.val(data).focus().trigger('input'); rcmail.set_caret_pos(input.get(0), 0); }; diff --git a/skins/elastic/styles/widgets/editor.less b/skins/elastic/styles/widgets/editor.less index 5e602c13f..57e621434 100644 --- a/skins/elastic/styles/widgets/editor.less +++ b/skins/elastic/styles/widgets/editor.less @@ -898,6 +898,7 @@ html.touch .mce-grid td { font-family: monospace; width: 100% !important; padding-top: 2.5rem; + resize: none; } & > iframe { // e.g. mailvelope frame diff --git a/skins/elastic/ui.js b/skins/elastic/ui.js index 13f205025..606cfbaa2 100644 --- a/skins/elastic/ui.js +++ b/skins/elastic/ui.js @@ -3741,37 +3741,20 @@ function rcube_elastic_ui() */ function textarea_autoresize_init(textarea) { - var resize = function(e) { - clearTimeout(env.textarea_timer); - env.textarea_timer = setTimeout(function() { - var area = $(e.target), - initial_height = area.data('initial-height'), - scroll_height = area[0].scrollHeight; - - // do nothing when the area is hidden - if (!scroll_height) { - return; - } - - if (!initial_height) { - area.data('initial-height', initial_height = scroll_height); - } - - // strange effect in Chrome/Firefox when you delete a line in the textarea - // the scrollHeight is not decreased by the line height, but by 2px - // so jumps up many times in small steps, we'd rather use one big step - if (area.outerHeight() - scroll_height == 2) { - scroll_height -= 19; // 21px is the assumed line height + // FIXME: Is there a better way to get initial height of the textarea? + var min_height = ($(textarea)[0].rows || 5) * 21, + resize = function(e) { + var oldHeight = $(this).outerHeight(); + $(this).outerHeight(0); + var newHeight = Math.max(min_height, this.scrollHeight); + $(this).outerHeight(oldHeight); + + if (newHeight !== oldHeight) { + $(this).height(newHeight); } + }; - area.outerHeight(Math.max(initial_height, scroll_height)); - }, 10); - }; - - $(textarea).css('overflow-y', 'hidden').on('input', resize).trigger('input'); - - // Make sure the height is up-to-date also in time intervals - setInterval(function() { $(textarea).trigger('input'); }, 1000); + $(textarea).on('input', resize).trigger('input'); }; // Inititalizes smart list input