From 340546c975bca94526a3e16039895a6d0600828b Mon Sep 17 00:00:00 2001 From: alecpl Date: Tue, 31 May 2011 07:38:56 +0000 Subject: - 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 file changed, 46 insertions(+), 37 deletions(-) (limited to 'program/js/googiespell.js') diff --git a/program/js/googiespell.js b/program/js/googiespell.js index d6aea48ba..c1b04cadd 100644 --- a/program/js/googiespell.js +++ b/program/js/googiespell.js @@ -203,11 +203,48 @@ this.createXMLReq = function (text) { }; 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.spellCheck = function(ignore) { $(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(//) != 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 @@ this.parseResult = function(r_text) { return results; }; +this.processData = function(data) +{ + this.results = this.parseResult(data); + if (this.results.length) { + this.showErrorsInIframe(); + this.resumeEditingState(); + } +}; ////// // Error menu functions -- cgit v1.2.3