From 7abfe41ab792e93b94e186f9ece4a5fd3b58a3e4 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Sun, 24 Apr 2016 05:12:38 -0400
Subject: [PATCH] Fix bug where getting HTML editor content could steal focus from other form controls (#5223)

---
 program/js/googiespell.js |   97 ++++++++++++++++++++++++++++--------------------
 1 files changed, 56 insertions(+), 41 deletions(-)

diff --git a/program/js/googiespell.js b/program/js/googiespell.js
index de58b7e..bf0eede 100644
--- a/program/js/googiespell.js
+++ b/program/js/googiespell.js
@@ -1,23 +1,36 @@
-/*
- +-----------------------------------------------------------------------+
- | Roundcube SpellCheck script                                           |
- |   jQuery'fied spell checker based on GoogieSpell 4.0                  |
- |    (which was published under GPL "version 2 or any later version")   |
- |                                                                       |
- | This file is part of the Roundcube Webmail client                     |
- | Copyright (C) 2006 Amir Salihefendic                                  |
- | Copyright (C) 2009 The Roundcube Dev Team                             |
- | Copyright (C) 2011 Kolab Systems AG                                   |
- |                                                                       |
- | Licensed under the GNU General Public License version 3 or            |
- | any later version with exceptions for skins & plugins.                |
- | See the README file for a full license statement.                     |
- |                                                                       |
- +-----------------------------------------------------------------------+
- | Authors: 4mir Salihefendic <amix@amix.dk>                             |
- |          Aleksander Machniak - <alec [at] alec.pl>                    |
- +-----------------------------------------------------------------------+
-*/
+/**
+ * Roundcube SpellCheck script
+ *
+ * jQuery'fied spell checker based on GoogieSpell 4.0
+ * (which was published under GPL "version 2 or any later version")
+ *
+ * @licstart  The following is the entire license notice for the
+ * JavaScript code in this file.
+ *
+ * Copyright (C) 2006 Amir Salihefendic
+ * Copyright (C) 2009 The Roundcube Dev Team
+ * Copyright (C) 2011 Kolab Systems AG
+ *
+ * The JavaScript code in this page is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GNU GPL) as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option)
+ * any later version.  The code is distributed WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
+ *
+ * As additional permission under GNU GPL version 3 section 7, you
+ * may distribute non-source (e.g., minimized or compacted) forms of
+ * that code without the copy of the GNU GPL normally required by
+ * section 4, provided you include this license notice and a URL
+ * through which recipients can access the Corresponding Source.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this file.
+ *
+ * @author 4mir Salihefendic <amix@amix.dk> 
+ * @author Aleksander Machniak - <alec [at] alec.pl>
+ */
 
 var GOOGIE_CUR_LANG,
     GOOGIE_DEFAULT_LANG = 'en';
@@ -93,11 +106,11 @@
     this.cnt_errors_fixed = 0;
 
     // Set document's onclick to hide the language and error menu
-    $(document).bind('click', function(e) {
+    $(document).click(function(e) {
         var target = $(e.target);
-        if(target.attr('googie_action_btn') != '1' && ref.isLangWindowShown())
+        if (target.attr('googie_action_btn') != '1' && ref.isLangWindowShown())
             ref.hideLangWindow();
-        if(target.attr('googie_action_btn') != '1' && ref.isErrorWindowShown())
+        if (target.attr('googie_action_btn') != '1' && ref.isErrorWindowShown())
             ref.hideErrorWindow();
     });
 
@@ -299,7 +312,9 @@
     this.ignore = ignore;
     this.hideLangWindow();
 
-    if ($(this.text_area).val() == '' || ignore) {
+    var area = $(this.text_area);
+
+    if (area.val() == '' || ignore) {
         if (!this.custom_no_spelling_error)
             this.flashNoSpellingErrorState();
         else
@@ -308,7 +323,7 @@
         return;
     }
 
-    this.createEditLayer(this.text_area.offsetWidth, this.text_area.offsetHeight);
+    this.createEditLayer(area.width(), area.height());
     this.createErrorWindow();
     $('body').append(this.error_window);
 
@@ -316,9 +331,9 @@
     catch (e) { }
 
     if (this.main_controller)
-        $(this.spell_span).unbind('click');
+        $(this.spell_span).off('click');
 
-    this.orginal_text = $(this.text_area).val();
+    this.orginal_text = area.val();
 };
 
 this.parseResult = function(r_text)
@@ -450,7 +465,7 @@
 this.ignoreError = function(elm, id)
 {
     // @TODO: ignore all same words
-    $(elm).removeAttr('class').css('color', '').unbind();
+    $(elm).removeAttr('class').css('color', '').off();
     this.hideErrorWindow();
 };
 
@@ -661,10 +676,10 @@
 {
     this.edit_layer = document.createElement('div');
     $(this.edit_layer).addClass('googie_edit_layer').attr('id', 'googie_edit_layer')
-        .width('auto').height(height);
+        .width(width).height(height);
 
     if (this.text_area.nodeName.toLowerCase() != 'input' || $(this.text_area).val() == '') {
-        $(this.edit_layer).css('overflow', 'auto').height(height-4);
+        $(this.edit_layer).css('overflow', 'auto');
     } else {
         $(this.edit_layer).css('overflow', 'hidden');
     }
@@ -828,7 +843,7 @@
         this.lang_elms.push(item);
 
         $(item).attr('googieId', this.langlist_codes[i])
-            .bind('click', function(e) {
+            .click(function(e) {
                 ref.deHighlightCurSel();
                 ref.setCurrentLanguage($(this).attr('googieId'));
 
@@ -839,11 +854,11 @@
                 ref.highlightCurSel();
                 ref.hideLangWindow();
             })
-            .bind('mouseover', function(e) {
+            .mouseover(function(e) {
                 if (this.className != "googie_list_selected")
                     this.className = "googie_list_onhover";
             })
-            .bind('mouseout', function(e) {
+            .mouseout(function(e) {
                 if (this.className != "googie_list_selected")
                     this.className = "googie_list_onout";
             });
@@ -926,7 +941,7 @@
 
     $(switch_lan).addClass('googie_lang_3d_on')
         .append(img)
-        .bind('click', function(e) {
+        .click(function(e) {
             var elm = this.tagName.toLowerCase() == 'img' ? this.parentNode : this;
             if($(elm).hasClass('googie_lang_3d_click')) {
                 elm.className = 'googie_lang_3d_on';
@@ -994,8 +1009,8 @@
     var ref = this;
 
         $(this.switch_lan_pic).hide();
-        $(this.spell_span).empty().unbind().append(rsm)
-            .bind('click', function() { ref.resumeEditing() })
+        $(this.spell_span).empty().off().append(rsm)
+            .click(function() { ref.resumeEditing(); })
             .removeClass().addClass('googie_resume_editing');
     }
 
@@ -1017,9 +1032,9 @@
         ref = this;
 
     if (this.custom_spellcheck_starter)
-        $(span_chck).bind('click', function(e) { ref.custom_spellcheck_starter() });
+        $(span_chck).click(function(e) { ref.custom_spellcheck_starter(); });
     else {
-        $(span_chck).bind('click', function(e) { ref.spellCheck() });
+        $(span_chck).click(function(e) { ref.spellCheck(); });
     }
 
     if (this.main_controller) {
@@ -1075,9 +1090,9 @@
         spn_btn = document.createTextNode(name);
     }
 
-    $(btn).bind('click', c_fn)
-        .bind('mouseover', this.item_onmouseover)
-        .bind('mouseout', this.item_onmouseout);
+    $(btn).click(c_fn)
+        .mouseover(this.item_onmouseover)
+        .mouseout(this.item_onmouseout);
 
     btn.appendChild(spn_btn);
     btn_row.appendChild(btn);

--
Gitblit v1.9.1