From 340546c975bca94526a3e16039895a6d0600828b Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Tue, 31 May 2011 03:38:56 -0400
Subject: [PATCH] - Optimization for spellcheck_before_send: don't invoke new ajax request. While we already have mispellings, we can return them and enable spellchecker directly without querying the server again

---
 program/js/googiespell.js |   83 +++++++++++++++++++++++------------------
 1 files changed, 46 insertions(+), 37 deletions(-)

diff --git a/program/js/googiespell.js b/program/js/googiespell.js
index d6aea48..c1b04ca 100644
--- a/program/js/googiespell.js
+++ b/program/js/googiespell.js
@@ -203,11 +203,48 @@
 };
 
 this.spellCheck = function(ignore) {
+    this.prepare(ignore);
+
+    var req_text = this.escapeSpecial(this.orginal_text),
+        ref = this;
+
+    $.ajax({ type: 'POST', url: this.getUrl(),
+	data: this.createXMLReq(req_text), dataType: 'text',
+	    error: function(o) {
+            if (ref.custom_ajax_error)
+        	    ref.custom_ajax_error(ref);
+            else
+        	    alert('An error was encountered on the server. Please try again later.');
+            if (ref.main_controller) {
+        	    $(ref.spell_span).remove();
+        	    ref.removeIndicator();
+            }
+            ref.checkSpellingState();
+	    },
+        success: function(data) {
+    	    ref.processData(data);
+    	    if (!ref.results.length) {
+        	    if (!ref.custom_no_spelling_error)
+	    	        ref.flashNoSpellingErrorState();
+            	else
+                	ref.custom_no_spelling_error(ref);
+    	    }
+    	    ref.removeIndicator();
+	    }
+    });
+};
+
+
+//////
+// Spell checking functions
+/////
+this.prepare = function(ignore, no_indicator)
+{
     this.cnt_errors_fixed = 0;
     this.cnt_errors = 0;
     this.setStateChanged('checking_spell');
 
-    if (this.main_controller)
+    if (!no_indicator && this.main_controller)
         this.appendIndicator(this.spell_span);
 
     this.error_links = [];
@@ -235,44 +272,8 @@
         $(this.spell_span).unbind('click');
 
     this.orginal_text = $(this.text_area).val();
-    var req_text = this.escapeSpecial(this.orginal_text);
-    var ref = this;
-
-    $.ajax({ type: 'POST', url: this.getUrl(),
-	data: this.createXMLReq(req_text), dataType: 'text',
-	    error: function(o) {
-            if (ref.custom_ajax_error)
-        	    ref.custom_ajax_error(ref);
-            else
-        	    alert('An error was encountered on the server. Please try again later.');
-            if (ref.main_controller) {
-        	    $(ref.spell_span).remove();
-        	    ref.removeIndicator();
-            }
-            ref.checkSpellingState();
-	    },
-        success: function(data) {
-	        var r_text = data;
-    	    ref.results = ref.parseResult(r_text);
-    	    if (r_text.match(/<c.*>/) != null) {
-        	    // Before parsing be sure that errors were found
-        	    ref.showErrorsInIframe();
-        	    ref.resumeEditingState();
-    	    } else {
-        	    if (!ref.custom_no_spelling_error)
-	    	        ref.flashNoSpellingErrorState();
-            	else
-                	ref.custom_no_spelling_error(ref);
-    	    }
-    	    ref.removeIndicator();
-	    }
-    });
 };
 
-
-//////
-// Spell checking functions
-/////
 this.parseResult = function(r_text) {
     // Returns an array: result[item] -> ['attrs'], ['suggestions']
     var re_split_attr_c = /\w+="(\d+|true)"/g,
@@ -311,6 +312,14 @@
     return results;
 };
 
+this.processData = function(data)
+{
+    this.results = this.parseResult(data);
+    if (this.results.length) {
+   	    this.showErrorsInIframe();
+   	    this.resumeEditingState();
+    }
+};
 
 //////
 // Error menu functions

--
Gitblit v1.9.1