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