From ed5d29f4b3c57235594931d33dde7cccaf7cd58b Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 25 May 2006 14:25:04 -0400
Subject: [PATCH] Finalized GoogieSpell integration

---
 program/localization/de_DE/messages.inc |    9 ++++
 program/steps/mail/compose.inc          |   30 +++++++++++---
 program/localization/de_CH/messages.inc |   10 +++++
 skins/default/mail.css                  |    4 +-
 skins/default/googiespell.css           |    7 +++
 program/localization/de_CH/labels.inc   |    4 ++
 config/main.inc.php.dist                |    4 ++
 program/localization/de_DE/labels.inc   |    4 ++
 program/localization/en_US/messages.inc |    5 ++
 program/localization/en_US/labels.inc   |    4 ++
 program/js/googiespell.js               |   12 +++++
 skins/default/templates/compose.html    |    1 
 program/js/app.js                       |   11 +++++
 13 files changed, 94 insertions(+), 11 deletions(-)

diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index 2a0635c..1224215 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -141,6 +141,10 @@
 // false causes deleted messages to be permanantly removed if there is no Trash folder
 $rcmail_config['flag_for_deletion'] = TRUE;
 
+// Make use of the built-in spell checker. It is based on GoogieSpell
+// which means that the message content will be sent to Google in order to check spelling
+$rcmail_config['enable_spellcheck'] = TRUE;
+
 // path to a text file which will be added to each sent message
 // paths are relative to the RoundCube root folder
 $rcmail_config['generic_message_footer'] = '';
diff --git a/program/js/app.js b/program/js/app.js
index ae6b00f..98a30d3 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -142,7 +142,11 @@
           }  
 
         if (this.env.action=='compose')
+          {
           this.enable_command('add-attachment', 'send-attachment', 'send', true);
+          if (this.env.spellcheck)
+            this.enable_command('spellcheck', true);
+          }
           
         if (this.env.messagecount)
           this.enable_command('select-all', 'select-none', 'sort', 'expunge', true);
@@ -875,7 +879,12 @@
           parent.location.href = url;
         else
           location.href = url;
-        break;    
+        break;
+        
+      case 'spellcheck':
+        if (this.env.spellcheck && this.env.spellcheck.spellCheck)
+          this.env.spellcheck.spellCheck(this.env.spellcheck.check_link);
+        break;
 
       case 'send':
         if (!this.gui_objects.messageform)
diff --git a/program/js/googiespell.js b/program/js/googiespell.js
index 25f9526..f318e19 100755
--- a/program/js/googiespell.js
+++ b/program/js/googiespell.js
@@ -1035,16 +1035,24 @@
 }
 
 GoogieSpell.prototype.removeIndicator = function(elm) {
-  AJS.removeElement(this.indicator);
+  // modified by roundcube
+  if (window.rcube_webmail_client)
+    rcube_webmail_client.set_busy(false);
+  //AJS.removeElement(this.indicator);
 }
 
 GoogieSpell.prototype.appendIndicator = function(elm) {
+  // modified by roundcube
+  if (window.rcube_webmail_client)
+    rcube_webmail_client.set_busy(true, 'checking');
+/*
   var img = AJS.IMG({'src': this.img_dir + 'indicator.gif', 'style': 'margin-right: 5px;'});
   img.style.width = "16px";
   img.style.height = "16px";
   this.indicator = img;
   img.style.textDecoration = "none";
   AJS.insertBefore(img, elm);
+  */
 }
 
 /****
@@ -1239,6 +1247,8 @@
     me.spellCheck(span_chck);
   }
   AJS.appendChildNodes(this.spell_container, span_chck, " ", this.switch_lan_pic);
+  // modified by roundcube
+  this.check_link = span_chck;
 }
 
 GoogieSpell.prototype.setLanguages = function(lang_dict) {
diff --git a/program/localization/de_CH/labels.inc b/program/localization/de_CH/labels.inc
index c7baf0b..fa3a727 100644
--- a/program/localization/de_CH/labels.inc
+++ b/program/localization/de_CH/labels.inc
@@ -125,6 +125,10 @@
 $labels['charset']  = 'Zeichensatz';
 $labels['returnreceipt'] = 'Empfangsbestätigung';
 
+$labels['checkspelling'] = 'Rechtschreibung prüfen';
+$labels['resumeediting'] = 'Bearbeitung fortzetzen';
+$labels['revertto'] = 'Zurück zu';
+
 $labels['attachments'] = 'Anhänge';
 $labels['upload'] = 'Hochladen';
 $labels['close']  = 'Schliessen';
diff --git a/program/localization/de_CH/messages.inc b/program/localization/de_CH/messages.inc
index 1e5f0e5..db9670d 100644
--- a/program/localization/de_CH/messages.inc
+++ b/program/localization/de_CH/messages.inc
@@ -86,5 +86,15 @@
 
 $messages['nosearchname'] = 'Bitte geben Sie einen Namen oder eine E-Mail-Adresse ein';
 
+$messages['searchsuccessful'] = '$nr Nachrichten gefunden';
+
+$messages['searchnomatch'] = 'Keine Treffer';
+
+$messages['searching'] = 'Suche...';
+
+$messages['checking'] = 'Prüfe...';
+
+$messages['nospellerrors'] = 'Keine Rechtschreibfehler gefunden';
+
 
 ?>
\ No newline at end of file
diff --git a/program/localization/de_DE/labels.inc b/program/localization/de_DE/labels.inc
index 7e7f5de..ce36168 100644
--- a/program/localization/de_DE/labels.inc
+++ b/program/localization/de_DE/labels.inc
@@ -126,6 +126,10 @@
 $labels['charset']  = 'Zeichensatz';
 $labels['returnreceipt'] = 'Empfangsbestätigung';
 
+$labels['checkspelling'] = 'Rechtschreibung prüfen';
+$labels['resumeediting'] = 'Bearbeitung fortzetzen';
+$labels['revertto'] = 'Zurück zu';
+
 $labels['attachments'] = 'Anhänge';
 $labels['upload'] = 'Hochladen';
 $labels['close']  = 'Schließen';
diff --git a/program/localization/de_DE/messages.inc b/program/localization/de_DE/messages.inc
index 5646e42..4a6409c 100644
--- a/program/localization/de_DE/messages.inc
+++ b/program/localization/de_DE/messages.inc
@@ -88,5 +88,14 @@
 
 $messages['nosearchname'] = 'Bitte geben Sie einen Namen oder eine E-Mail-Adresse ein';
 
+$messages['searchsuccessful'] = '$nr Nachrichten gefunden';
+
+$messages['searchnomatch'] = 'Keine Treffer';
+
+$messages['searching'] = 'Suche...';
+
+$messages['checking'] = 'Prüfe...';
+
+$messages['nospellerrors'] = 'Keine Rechtschreibfehler gefunden';
 
 ?>
\ No newline at end of file
diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc
index afb6c87..ba6d3d5 100644
--- a/program/localization/en_US/labels.inc
+++ b/program/localization/en_US/labels.inc
@@ -125,6 +125,10 @@
 $labels['charset']  = 'Charset';
 $labels['returnreceipt'] = 'Return receipt';
 
+$labels['checkspelling'] = 'Check spelling';
+$labels['resumeediting'] = 'Resume editing';
+$labels['revertto'] = 'Revert to';
+
 $labels['attachments'] = 'Attachments';
 $labels['upload'] = 'Upload';
 $labels['close']  = 'Close';
diff --git a/program/localization/en_US/messages.inc b/program/localization/en_US/messages.inc
index 820d1b5..f12dc40 100644
--- a/program/localization/en_US/messages.inc
+++ b/program/localization/en_US/messages.inc
@@ -94,4 +94,9 @@
 
 $messages['searching'] = 'Searching...';
 
+$messages['checking'] = 'Checking...';
+
+$messages['nospellerrors'] = 'No spelling errors found';
+
+
 ?>
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 1f9618d..139af65 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -297,7 +297,7 @@
 
 function rcmail_compose_body($attrib)
   {
-  global $CONFIG, $OUTPUT, $REPLY_MESSAGE, $FORWARD_MESSAGE;
+  global $CONFIG, $OUTPUT, $REPLY_MESSAGE, $FORWARD_MESSAGE, $JS_OBJECT_NAME;
   
   list($form_start, $form_end) = get_form_tags($attrib);
   unset($attrib['form']);
@@ -335,12 +335,28 @@
   $out .= $form_end ? "\n$form_end" : '';
   
   // include GoogieSpell
-  $OUTPUT->include_script('googiespell.js');
-  
-  $OUTPUT->add_script(sprintf("var googie1 = new GoogieSpell('\$__skin_path/images/googiespell/','%s&_action=spell&lang=');\n".
-                              "googie1.decorateTextarea('%s');",
-                              $GLOBALS['COMM_PATH'],
-                              $attrib['id']), 'foot');
+  if (!empty($CONFIG['enable_spellcheck']))
+    {
+    $OUTPUT->include_script('googiespell.js');
+    $OUTPUT->add_script(sprintf("var googie = new GoogieSpell('\$__skin_path/images/googiespell/','%s&_action=spell&lang=');\n".
+                                "googie.lang_chck_spell = \"%s\";\n".
+                                "googie.lang_rsm_edt = \"%s\";\n".
+                                "googie.lang_close = \"%s\";\n".
+                                "googie.lang_revert = \"%s\";\n".
+                                "googie.lang_no_error_found = \"%s\";\n".
+                                "googie.decorateTextarea('%s');\n".
+                                "%s.set_env('spellcheck', googie);",
+                                $GLOBALS['COMM_PATH'],
+                                rep_specialchars_output(rcube_label('checkspelling')),
+                                rep_specialchars_output(rcube_label('resumeediting')),
+                                rep_specialchars_output(rcube_label('close')),
+                                rep_specialchars_output(rcube_label('revertto')),
+                                rep_specialchars_output(rcube_label('nospellerrors')),
+                                $attrib['id'],
+                                $JS_OBJECT_NAME), 'foot');
+
+    rcube_add_label('checking');
+    }
   
   return $out;
   }
diff --git a/skins/default/googiespell.css b/skins/default/googiespell.css
index 46ac0b0..5738338 100755
--- a/skins/default/googiespell.css
+++ b/skins/default/googiespell.css
@@ -43,10 +43,16 @@
 }
 
 .googie_list_close {
+  font-size: 11px;
   color: #b91414;
 }
 
+.googie_list_onhover .googie_list_close {
+  color: #FFFFFF;
+}
+
 .googie_list_revert {
+  font-size: 11px;
   color: #b91479;
 }
 
@@ -73,6 +79,7 @@
 
 .googie_check_spelling_ok {
   color: green;
+  font-size: 11px;
   text-decoration: underline;
   cursor: pointer;
 }
diff --git a/skins/default/mail.css b/skins/default/mail.css
index 5b4ee3a..3bdbf6d 100644
--- a/skins/default/mail.css
+++ b/skins/default/mail.css
@@ -674,14 +674,14 @@
 #priority-selector
 {
   position: absolute;
-  left: 180px;
+  left: 220px;
   top: 10px;
 }
 
 #receipt-selector
 {
   position: absolute;
-  left: 350px;
+  left: 390px;
   top: 10px;
 }
 
diff --git a/skins/default/templates/compose.html b/skins/default/templates/compose.html
index e827a02..e2f41a0 100644
--- a/skins/default/templates/compose.html
+++ b/skins/default/templates/compose.html
@@ -34,6 +34,7 @@
 <roundcube:button command="list" image="/images/buttons/back_act.png" width="32" height="32" title="backtolist" />
 <roundcube:button command="send" imageAct="/images/buttons/send_act.png" imagePas="/images/buttons/send_pas.png" width="32" height="32" title="sendmessage" />
 <!--<roundcube:button command="contacts" imageAct="/images/buttons/contacts_act.png" imagePas="/images/buttons/contacts_pas.png" width="32" height="32" title="addressbook" />-->
+<roundcube:button command="spellcheck" imageAct="/images/buttons/spellcheck_act.png" imagePas="/images/buttons/spellcheck_pas.png" width="32" height="32" title="checkspelling" />
 <roundcube:button command="add-attachment" imageAct="/images/buttons/attach_act.png" imagePas="/images/buttons/attach_pas.png" width="32" height="32" title="addattachment" />
 
 <div id="priority-selector">

--
Gitblit v1.9.1