From a172f39ff75da0aee00bbfb993c356d0aeba1df0 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Wed, 11 Mar 2015 14:35:07 -0400 Subject: [PATCH] Fix bug where TinyMCE area height was too small on slow network connection (#1490310) --- program/js/editor.js | 61 ++++++++++++++++-------------- 1 files changed, 33 insertions(+), 28 deletions(-) diff --git a/program/js/editor.js b/program/js/editor.js index 829373a..296a161 100644 --- a/program/js/editor.js +++ b/program/js/editor.js @@ -39,7 +39,7 @@ abs_url = location.href.replace(/[?#].*$/, '').replace(/\/$/, ''), conf = { selector: '#' + ($('#' + id).is('.mce_editor') ? id : 'fake-editor-id'), - cache_suffix: 's=4010700', + cache_suffix: 's=4010900', theme: 'modern', language: config.lang, content_css: rcmail.assets_path('program/js/tinymce/roundcube/content.css'), @@ -63,6 +63,15 @@ if (config.spellcheck_observer) { this.spellchecker.spelling_state_observer = this.spellcheck_observer = config.spellcheck_observer; } + } + + // secure spellchecker requests with Roundcube token + // Note: must be registered only once (#1490311) + if (!tinymce.registered_request_token) { + tinymce.registered_request_token = true; + tinymce.util.XHR.on('beforeSend', function(e) { + e.xhr.setRequestHeader('X-Roundcube-Request', rcmail.env.request_token); + }); } // minimal editor @@ -107,10 +116,6 @@ ed.on('keypress', function() { rcmail.compose_type_activity++; }); - // secure spellchecker requests with Roundcube token - tinymce.util.XHR.on('beforeSend', function(e) { - e.xhr.setRequestHeader('X-Roundcube-Request', rcmail.env.request_token); - }); }; // textarea identifier @@ -127,6 +132,15 @@ if (rcmail.env.action != 'compose') { return; + } + + var area = $('#' + this.id), + height = $('div.mce-toolbar-grp:first', area.parent()).height(); + + // the editor might be still not fully loaded, making the editing area + // inaccessible, wait and try again (#1490310) + if (height > 200 || height > area.height()) { + return setTimeout(function () { ref.init_callback(event); }, 300); } var css = {}, @@ -149,21 +163,16 @@ // Focus previously focused element if (fe && fe.id != this.id) { - // use setTimeout() for IE9 (#1488541) - window.setTimeout(function() { - window.focus(); // for WebKit (#1486674) - fe.focus(); - rcmail.env.compose_focus_elem = null; - }, 10); + window.focus(); // for WebKit (#1486674) + fe.focus(); + rcmail.env.compose_focus_elem = null; } } - window.setTimeout(function() { - // set tabIndex and set focus to element that was focused before - ref.tabindex(fe && fe.id == ref.id); - // Trigger resize (needed for proper editor resizing in some browsers) - $(window).resize(); - }, 100); + // set tabIndex and set focus to element that was focused before + ref.tabindex(fe && fe.id == ref.id); + // Trigger resize (needed for proper editor resizing in some browsers) + $(window).resize(); }; // set tabIndex on tinymce editor @@ -235,17 +244,13 @@ input.val(data); tinymce.execCommand('mceAddEditor', false, ref.id); - setTimeout(function() { - if (ref.editor) { - var body = $(ref.editor.getBody()); - if (rcmail.env.default_font) - body.css('font-family', rcmail.env.default_font); - // #1486593 - ref.tabindex(true); - // put cursor on start of the compose body - ref.editor.selection.setCursorLocation(body.children().first().get(0)); - } - }, 500); + if (ref.editor) { + var body = $(ref.editor.getBody()); + // #1486593 + ref.tabindex(true); + // put cursor on start of the compose body + ref.editor.selection.setCursorLocation(body.children().first().get(0)); + } }; // convert to html -- Gitblit v1.9.1