From 2c200021fdf9b5d1c73e39e7c46e7db1e4152e91 Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Mon, 15 Nov 2010 04:26:24 -0500 Subject: [PATCH] - Fix focused elements aren't unfocused when clicking on the list (#1487123) --- program/js/googiespell.js | 103 +++++++++++++++++++++++++++++---------------------- 1 files changed, 58 insertions(+), 45 deletions(-) diff --git a/program/js/googiespell.js b/program/js/googiespell.js index 51acb73..428d7f0 100644 --- a/program/js/googiespell.js +++ b/program/js/googiespell.js @@ -52,7 +52,7 @@ this.show_spell_img = false; // roundcube mod. this.decoration = true; - this.use_close_btn = true; + this.use_close_btn = false; this.edit_layer_dbl_click = true; this.report_ta_not_found = true; @@ -82,9 +82,10 @@ // Set document's onclick to hide the language and error menu $(document).bind('click', function(e) { - if($(e.target).attr('googie_action_btn') != '1' && ref.isLangWindowShown()) + var target = $(e.target); + if(target.attr('googie_action_btn') != '1' && ref.isLangWindowShown()) ref.hideLangWindow(); - if($(e.target).attr('googie_action_btn') != '1' && ref.isErrorWindowShown()) + if(target.attr('googie_action_btn') != '1' && ref.isErrorWindowShown()) ref.hideErrorWindow(); }); @@ -111,9 +112,8 @@ this.checkSpellingState(); } - else - if (this.report_ta_not_found) - alert('Text area not found'); + else if (this.report_ta_not_found) + alert('Text area not found'); }; ////// @@ -317,7 +317,7 @@ ///// this.createErrorWindow = function() { this.error_window = document.createElement('div'); - $(this.error_window).addClass('googie_window').attr('googie_action_btn', '1'); + $(this.error_window).addClass('googie_window popupmenu').attr('googie_action_btn', '1'); }; this.isErrorWindowShown = function() { @@ -325,8 +325,8 @@ }; this.hideErrorWindow = function() { - $(this.error_window).css('visibility', 'hidden'); - $(this.error_window_iframe).css('visibility', 'hidden'); + $(this.error_window).hide(); + $(this.error_window_iframe).hide(); }; this.updateOrginalText = function(offset, old_value, new_value, id) { @@ -393,11 +393,7 @@ table = document.createElement('table'), list = document.createElement('tbody'); - pos.top -= this.edit_layer.scrollTop; - - $(this.error_window).css({'visibility': 'visible', - 'top': (pos.top+20)+'px', 'left': (pos.left)+'px'}).html(''); - + $(this.error_window).html(''); $(table).addClass('googie_list').attr('googie_action_btn', '1'); // Check if we should use custom menu builder, if not we use the default @@ -541,6 +537,16 @@ table.appendChild(list); this.error_window.appendChild(table); + // calculate and set position + var height = $(this.error_window).height(), + width = $(this.error_window).width(), + pageheight = $(document).height(), + pagewidth = $(document).width(), + top = pos.top + height + 20 < pageheight ? pos.top + 20 : pos.top - height, + left = pos.left + width < pagewidth ? pos.left : pos.left - width; + + $(this.error_window).css({'top': top+'px', 'left': left+'px'}).show(); + // Dummy for IE - dropdown bug fix if ($.browser.msie) { if (!this.error_window_iframe) { @@ -549,9 +555,10 @@ this.error_window_iframe = iframe; } - $(this.error_window_iframe).css({'visibility': 'visible', - 'top': this.error_window.offsetTop, 'left': this.error_window.offsetLeft, - 'width': this.error_window.offsetWidth, 'height': this.error_window.offsetHeight}); + $(this.error_window_iframe) + .css({'top': this.error_window.offsetTop, 'left': this.error_window.offsetLeft, + 'width': this.error_window.offsetWidth, 'height': this.error_window.offsetHeight}) + .show(); } }; @@ -561,7 +568,8 @@ ////// this.createEditLayer = function(width, height) { this.edit_layer = document.createElement('div'); - $(this.edit_layer).addClass('googie_edit_layer').width(width-10).height(height); + $(this.edit_layer).addClass('googie_edit_layer').attr('id', 'googie_edit_layer') + .width('auto').height(height); if (this.text_area.nodeName.toLowerCase() != 'input' || $(this.text_area).val() == '') { $(this.edit_layer).css('overflow', 'auto').height(height-4); @@ -570,8 +578,9 @@ } var ref = this; + if (this.edit_layer_dbl_click) { - $(this.edit_layer).bind('click', function(e) { + $(this.edit_layer).dblclick(function(e) { if (e.target.className != 'googie_link' && !ref.isErrorWindowShown()) { ref.resumeEditing(); var fn1 = function() { @@ -621,7 +630,7 @@ }; $(elm).html(text).addClass('googie_link').bind('click', d) - .attr({'googie_action_btn' : '1', 'g_id' : id, 'is_corrected' : false}); + .attr({'googie_action_btn' : '1', 'g_id' : id, 'is_corrected' : false}); return elm; }; @@ -701,8 +710,8 @@ ////// this.createLangWindow = function() { this.language_window = document.createElement('div'); - $(this.language_window).addClass('googie_window') - .width(100).attr('googie_action_btn', '1'); + $(this.language_window).addClass('googie_window popupmenu') + .width(100).attr('googie_action_btn', '1'); // Build up the result list var table = document.createElement('table'), @@ -759,12 +768,33 @@ }; this.isLangWindowShown = function() { - return $(this.language_window).is(':hidden'); + return $(this.language_window).is(':visible'); }; this.hideLangWindow = function() { - $(this.language_window).css('visibility', 'hidden'); + $(this.language_window).hide(); $(this.switch_lan_pic).removeClass().addClass('googie_lang_3d_on'); +}; + +this.showLangWindow = function(elm) { + if (this.show_menu_observer) + this.show_menu_observer(this); + + this.createLangWindow(); + $('body').append(this.language_window); + + var pos = $(elm).offset(), + height = $(elm).height(), + width = $(elm).width(), + h = $(this.language_window).height(), + pageheight = $(document).height(), + left = this.change_lang_pic_placement == 'right' ? + pos.left - 100 + width : pos.left + width, + top = pos.top + h < pageheight ? pos.top + height : pos.top - h - 4; + + $(this.language_window).css({'top' : top+'px','left' : left+'px'}).show(); + + this.highlightCurSel(); }; this.deHighlightCurSel = function() { @@ -776,30 +806,13 @@ GOOGIE_CUR_LANG = GOOGIE_DEFAULT_LANG; for (var i=0; i < this.lang_elms.length; i++) { if ($(this.lang_elms[i]).attr('googieId') == GOOGIE_CUR_LANG) { - this.lang_elms[i].className = "googie_list_selected"; + this.lang_elms[i].className = 'googie_list_selected'; this.lang_cur_elm = this.lang_elms[i]; } else { - this.lang_elms[i].className = "googie_list_onout"; + this.lang_elms[i].className = 'googie_list_onout'; } } -}; - -this.showLangWindow = function(elm) { - if (this.show_menu_observer) - this.show_menu_observer(this); - - this.createLangWindow(); - $('body').append(this.language_window); - - var pos = $(elm).offset(), - top = pos.top + $(elm).height(), - left = this.change_lang_pic_placement == 'right' ? - pos.left - 100 + $(elm).width() : pos.left + $(elm).width(); - - $(this.language_window).css({'visibility': 'visible', 'top' : top+'px','left' : left+'px'}); - - this.highlightCurSel(); }; this.createChangeLangPic = function() { @@ -964,13 +977,13 @@ //$(this.indicator).remove(); // roundcube mod. if (window.rcmail) - rcmail.set_busy(false); + rcmail.set_busy(false, null, this.rc_msg_id); }; this.appendIndicator = function(elm) { // modified by roundcube if (window.rcmail) - rcmail.set_busy(true, 'checking'); + this.rc_msg_id = rcmail.set_busy(true, 'checking'); /* this.indicator = document.createElement('img'); $(this.indicator).attr('src', this.img_dir + 'indicator.gif') -- Gitblit v1.9.1