diff options
-rw-r--r-- | config/main.inc.php.dist | 4 | ||||
-rw-r--r-- | program/js/app.js | 11 | ||||
-rwxr-xr-x | program/js/googiespell.js | 12 | ||||
-rw-r--r-- | program/localization/de_CH/labels.inc | 4 | ||||
-rw-r--r-- | program/localization/de_CH/messages.inc | 10 | ||||
-rw-r--r-- | program/localization/de_DE/labels.inc | 4 | ||||
-rw-r--r-- | program/localization/de_DE/messages.inc | 9 | ||||
-rw-r--r-- | program/localization/en_US/labels.inc | 4 | ||||
-rw-r--r-- | program/localization/en_US/messages.inc | 5 | ||||
-rw-r--r-- | program/steps/mail/compose.inc | 30 | ||||
-rwxr-xr-x | skins/default/googiespell.css | 7 | ||||
-rw-r--r-- | skins/default/mail.css | 4 | ||||
-rw-r--r-- | skins/default/templates/compose.html | 1 |
13 files changed, 94 insertions, 11 deletions
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist index 2a0635c74..1224215ec 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -141,6 +141,10 @@ $rcmail_config['read_when_deleted'] = TRUE; // 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 ae6b00f6a..98a30d330 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -142,7 +142,11 @@ function rcube_webmail() } 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 @@ function rcube_webmail() 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 25f9526cd..f318e192c 100755 --- a/program/js/googiespell.js +++ b/program/js/googiespell.js @@ -1035,16 +1035,24 @@ GoogieSpell.getEventElm = function(e) { } 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 @@ GoogieSpell.prototype.checkSpellingState = function() { 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 c7baf0b43..fa3a727fe 100644 --- a/program/localization/de_CH/labels.inc +++ b/program/localization/de_CH/labels.inc @@ -125,6 +125,10 @@ $labels['addattachment'] = 'Datei anfügen'; $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 1e5f0e560..db9670d0b 100644 --- a/program/localization/de_CH/messages.inc +++ b/program/localization/de_CH/messages.inc @@ -86,5 +86,15 @@ $messages['nocontactsreturned'] = 'Es wurden keine Kontakte gefunden'; $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 7e7f5de22..ce36168b5 100644 --- a/program/localization/de_DE/labels.inc +++ b/program/localization/de_DE/labels.inc @@ -126,6 +126,10 @@ $labels['addattachment'] = 'Datei anfügen'; $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 5646e4244..4a6409c32 100644 --- a/program/localization/de_DE/messages.inc +++ b/program/localization/de_DE/messages.inc @@ -88,5 +88,14 @@ $messages['nocontactsreturned'] = 'Es wurden keine Kontakte gefunden'; $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 afb6c8709..ba6d3d53c 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -125,6 +125,10 @@ $labels['addattachment'] = 'Attach a file'; $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 820d1b54e..f12dc40f4 100644 --- a/program/localization/en_US/messages.inc +++ b/program/localization/en_US/messages.inc @@ -94,4 +94,9 @@ $messages['searchnomatch'] = 'Search returned no matches'; $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 1f9618d5b..139af6556 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -297,7 +297,7 @@ function rcmail_compose_header_from($attrib) 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 @@ function rcmail_compose_body($attrib) $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 46ac0b0aa..5738338be 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 5b4ee3aea..3bdbf6d16 100644 --- a/skins/default/mail.css +++ b/skins/default/mail.css @@ -674,14 +674,14 @@ div.message-part pre #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 e827a024a..e2f41a007 100644 --- a/skins/default/templates/compose.html +++ b/skins/default/templates/compose.html @@ -34,6 +34,7 @@ function rcmail_toggle_display(id) <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"> |