| | |
| | | convert_urls: false, // #1486944 |
| | | image_description: false, |
| | | paste_webkit_style: "color font-size font-family", |
| | | paste_data_images: true |
| | | paste_data_images: true, |
| | | browser_spellcheck: true |
| | | }; |
| | | |
| | | // register spellchecker for plain text editor |
| | |
| | | // minimal editor |
| | | if (config.mode == 'identity') { |
| | | $.extend(conf, { |
| | | plugins: 'autolink charmap code colorpicker hr link paste tabfocus textcolor', |
| | | plugins: 'autolink charmap code colorpicker hr image link paste tabfocus textcolor', |
| | | toolbar: 'bold italic underline alignleft aligncenter alignright alignjustify' |
| | | + ' | outdent indent charmap hr link unlink code forecolor' |
| | | + ' | fontselect fontsizeselect' |
| | | + ' | outdent indent charmap hr link unlink image code forecolor' |
| | | + ' | fontselect fontsizeselect', |
| | | file_browser_callback: function(name, url, type, win) { ref.file_browser_callback(name, url, type); }, |
| | | file_browser_callback_types: 'image' |
| | | }); |
| | | } |
| | | // full-featured editor |
| | |
| | | }); |
| | | ed.on('keypress', function() { |
| | | rcmail.compose_type_activity++; |
| | | }); |
| | | // secure spellchecker requests with Roundcube token |
| | | tinymce.util.XHR.on('beforeSend', function(e) { |
| | | e.xhr.setRequestHeader('X-Roundcube-Request', rcmail.env.request_token); |
| | | }); |
| | | }; |
| | | |
| | |
| | | var ed = this.editor; |
| | | |
| | | if (ed) { |
| | | if (ed.plugins && ed.plugins.spellchecker && this.spellcheck_active) |
| | | ed.execCommand('mceSpellCheck'); |
| | | if (ed.plugins && ed.plugins.spellchecker && this.spellcheck_active) { |
| | | ed.execCommand('mceSpellCheck', false); |
| | | this.spellcheck_observer(); |
| | | } |
| | | } |
| | | else if (ed = this.spellchecker) { |
| | | if (ed.state && ed.state != 'ready' && ed.state != 'no_error_found') |
| | |
| | | return ed.state != 'ready' && ed.state != 'no_error_found'; |
| | | }; |
| | | |
| | | // resume spellchecking, highlight provided mispellings without new ajax request |
| | | // resume spellchecking, highlight provided mispellings without a new ajax request |
| | | this.spellcheck_resume = function(data) |
| | | { |
| | | var ed = this.editor; |
| | | |
| | | if (ed) { |
| | | ed.settings.spellchecker_callback = function(name, text, done, error) { done(data); }; |
| | | ed.execCommand('mceSpellCheck'); |
| | | ed.settings.spellchecker_callback = null; |
| | | |
| | | this.spellcheck_observer(); |
| | | ed.plugins.spellchecker.markErrors(data); |
| | | } |
| | | else if (ed = this.spellchecker) { |
| | | ed.prepare(false, true); |
| | |
| | | this.hack_file_input(elem, rcmail.gui_objects.uploadform); |
| | | |
| | | // enable drag-n-drop area |
| | | if (rcmail.gui_objects.filedrop && rcmail.env.filedrop && ((window.XMLHttpRequest && XMLHttpRequest.prototype && XMLHttpRequest.prototype.sendAsBinary) || window.FormData)) { |
| | | rcmail.env.old_file_drop = rcmail.gui_objects.filedrop; |
| | | if ((window.XMLHttpRequest && XMLHttpRequest.prototype && XMLHttpRequest.prototype.sendAsBinary) || window.FormData) { |
| | | if (!rcmail.env.filedrop) { |
| | | rcmail.env.filedrop = {}; |
| | | } |
| | | if (rcmail.gui_objects.filedrop) { |
| | | rcmail.env.old_file_drop = rcmail.gui_objects.filedrop; |
| | | } |
| | | |
| | | rcmail.gui_objects.filedrop = $('#image-selector-form'); |
| | | rcmail.gui_objects.filedrop.addClass('droptarget') |
| | | .bind('dragover dragleave', function(e) { |
| | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // @todo: upload progress indicator |
| | | }; |
| | | |
| | | // close file browser window |
| | |
| | | return; |
| | | } |
| | | |
| | | if (rcmail.file_upload_id) { |
| | | rcmail.set_busy(false, null, rcmail.file_upload_id); |
| | | } |
| | | |
| | | var rx, img_src; |
| | | |
| | | switch (rcmail.env.file_browser_type) { |
| | |
| | | } |
| | | |
| | | if (rx.test(file.mimetype)) { |
| | | var href = rcmail.env.comm_path+'&_id='+rcmail.env.compose_id+'&_action=display-attachment&_file='+file_id, |
| | | var path = rcmail.env.comm_path + '&_from=' + rcmail.env.action, |
| | | action = rcmail.env.compose_id ? '&_id=' + rcmail.env.compose_id + '&_action=display-attachment' : '&_action=upload-display', |
| | | href = path + action + '&_file=' + file_id, |
| | | img = $('<img>').attr({title: file.name, src: img_src ? img_src : href + '&_thumbnail=1'}); |
| | | |
| | | return $('<li>').attr({tabindex: 0}) |
| | |
| | | this.hack_file_input = function(elem, clone_form) |
| | | { |
| | | var link = $(elem), |
| | | file = $('<input>'), |
| | | file = $('<input>').attr('name', '_file[]'), |
| | | form = $('<form>').attr({method: 'post', enctype: 'multipart/form-data'}), |
| | | offset = link.offset(); |
| | | |