| | |
| | | this.sections_list.addEventListener('select', function(o){ p.section_select(o); }); |
| | | this.sections_list.init(); |
| | | this.sections_list.focus(); |
| | | this.sections_list.select('general'); // open first section by default |
| | | this.sections_list.select_first(); // open first section by default |
| | | } |
| | | else if (this.gui_objects.subscriptionlist) |
| | | this.init_subscription_list(); |
| | |
| | | var input_to = $("[name='_to']"); |
| | | var input_subject = $("input[name='_subject']"); |
| | | var input_message = $("[name='_message']").get(0); |
| | | var html_mode = $("input[name='_is_html']").val() == '1'; |
| | | |
| | | // init live search events |
| | | this.init_address_input_events(input_to); |
| | | this.init_address_input_events($("[name='_cc']")); |
| | | this.init_address_input_events($("[name='_bcc']")); |
| | | |
| | | if (!html_mode) |
| | | this.set_caret_pos(input_message, this.env.top_posting ? 0 : $(input_message).val().length); |
| | | |
| | | // add signature according to selected identity |
| | | if (input_from.attr('type') == 'select-one' && $("input[name='_draft_saveid']").val() == '' |
| | | && $("input[name='_is_html']").val() != '1') { // if we have HTML editor, signature is added in callback |
| | | && !html_mode) { // if we have HTML editor, signature is added in callback |
| | | this.change_identity(input_from[0]); |
| | | } |
| | | else if (!html_mode) |
| | | this.set_caret_pos(input_message, this.env.top_posting ? 0 : $(input_message).val().length); |
| | | |
| | | if (input_to.val() == '') |
| | | input_to.focus(); |
| | | else if (input_subject.val() == '') |
| | | input_subject.focus(); |
| | | else if (input_message) |
| | | else if (input_message && !html_mode) |
| | | input_message.focus(); |
| | | |
| | | // get summary of all field values |
| | |
| | | |
| | | case 'remove-attachment': |
| | | this.remove_attachment(props); |
| | | break; |
| | | |
| | | case 'insert-sig': |
| | | this.change_identity($("[name='_from']")[0], true); |
| | | break; |
| | | |
| | | case 'reply-all': |
| | |
| | | // also send search request to get the right messages |
| | | if (this.env.search_request) |
| | | add_url += '&_search='+this.env.search_request; |
| | | |
| | | |
| | | // set page=1 if changeing to another mailbox |
| | | if (!page) |
| | | if (!page && this.env.mailbox != mbox) |
| | | { |
| | | page = 1; |
| | | this.env.current_page = page; |
| | | this.show_contentframe(false); |
| | | } |
| | | |
| | | |
| | | if (mbox != this.env.mailbox || (mbox == this.env.mailbox && !page && !sort)) |
| | | add_url += '&_refresh=1'; |
| | | |
| | |
| | | return false; |
| | | } |
| | | |
| | | // check if all files has been uploaded |
| | | for (var key in this.env.attachments) { |
| | | if (typeof this.env.attachments[key] == 'object' && !this.env.attachments[key].complete) { |
| | | alert(this.get_label('notuploadedwarning')); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | // display localized warning for missing subject |
| | | if (input_subject.val() == '') |
| | | { |
| | |
| | | str += editor.getContent(); |
| | | else |
| | | str += $("[name='_message']").val(); |
| | | |
| | | |
| | | if (this.env.attachments) |
| | | for (var upload_id in this.env.attachments) |
| | | str += upload_id; |
| | | |
| | | if (save) |
| | | this.cmp_hash = str; |
| | | |
| | | |
| | | return str; |
| | | }; |
| | | |
| | | this.change_identity = function(obj) |
| | | { |
| | | this.change_identity = function(obj, show_sig) |
| | | { |
| | | if (!obj || !obj.options) |
| | | return false; |
| | | |
| | | if (!show_sig) |
| | | show_sig = this.env.show_sig; |
| | | |
| | | var id = obj.options[obj.selectedIndex].value; |
| | | var input_message = $("[name='_message']"); |
| | | var message = input_message.val(); |
| | | var is_html = ($("input[name='_is_html']").val() == '1'); |
| | | var sig, p, len; |
| | | var sig, cursor_pos, p = -1; |
| | | |
| | | if (!this.env.identity) |
| | | this.env.identity = id |
| | | |
| | | if (!is_html) |
| | | { |
| | | // enable manual signature insert |
| | | if (this.env.signatures && this.env.signatures[id]) |
| | | this.enable_command('insert-sig', true); |
| | | else |
| | | this.enable_command('insert-sig', false); |
| | | |
| | | if (!is_html) { |
| | | // remove the 'old' signature |
| | | if (this.env.identity && this.env.signatures && this.env.signatures[this.env.identity]) |
| | | { |
| | | if (this.env.signatures[this.env.identity]['is_html']) |
| | | sig = this.env.signatures[this.env.identity]['plain_text']; |
| | | else |
| | | sig = this.env.signatures[this.env.identity]['text']; |
| | | if (show_sig && this.env.identity && this.env.signatures && this.env.signatures[this.env.identity]) { |
| | | sig = this.env.signatures[this.env.identity].is_html ? this.env.signatures[this.env.identity].plain_text : this.env.signatures[this.env.identity].text; |
| | | |
| | | if (sig.indexOf('-- ')!=0) |
| | | if (sig.indexOf('-- ') != 0) |
| | | sig = '-- \n'+sig; |
| | | |
| | | p = message.lastIndexOf(sig); |
| | | if (p>=0) |
| | | message = message.substring(0, p-1) + message.substring(p+sig.length, message.length); |
| | | } |
| | | |
| | | message = message.replace(/[\r\n]+$/, ''); |
| | | len = message.length; |
| | | p = this.env.sig_above ? message.indexOf(sig) : message.lastIndexOf(sig); |
| | | if (p >= 0) |
| | | message = message.substring(0, p) + message.substring(p+sig.length, message.length); |
| | | } |
| | | |
| | | // add the new signature string |
| | | if (this.env.signatures && this.env.signatures[id]) |
| | | { |
| | | sig = this.env.signatures[id]['text']; |
| | | if (this.env.signatures[id]['is_html']) |
| | | { |
| | | sig = this.env.signatures[id]['plain_text']; |
| | | } |
| | | if (sig.indexOf('-- ')!=0) |
| | | if (show_sig && this.env.signatures && this.env.signatures[id]) { |
| | | sig = this.env.signatures[id]['is_html'] ? this.env.signatures[id]['plain_text'] : this.env.signatures[id]['text']; |
| | | if (sig.indexOf('-- ') != 0) |
| | | sig = '-- \n'+sig; |
| | | message += '\n\n'+sig; |
| | | if (len) len += 1; |
| | | |
| | | if (this.env.sig_above) { |
| | | if (p >= 0) { // in place of removed signature |
| | | message = message.substring(0, p) + sig + message.substring(p, message.length); |
| | | cursor_pos = p - 1; |
| | | } |
| | | else if (pos = this.get_caret_pos(input_message.get(0))) { // at cursor position |
| | | message = message.substring(0, pos) + '\n' + sig + '\n\n' + message.substring(pos, message.length); |
| | | cursor_pos = pos; |
| | | } |
| | | else { // on top |
| | | cursor_pos = 0; |
| | | message = '\n\n' + sig + '\n\n' + message.replace(/^[\r\n]+/, ''); |
| | | } |
| | | } |
| | | else { |
| | | message = message.replace(/[\r\n]+$/, ''); |
| | | cursor_pos = !this.env.top_posting && message.length ? message.length+1 : 0; |
| | | message += '\n\n' + sig; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | else |
| | | cursor_pos = this.env.top_posting ? 0 : message.length; |
| | | |
| | | input_message.val(message); |
| | | |
| | | // move cursor before the signature |
| | | this.set_caret_pos(input_message.get(0), cursor_pos); |
| | | } |
| | | else if (is_html && show_sig && this.env.signatures) { // html |
| | | var editor = tinyMCE.get(this.env.composebody); |
| | | var sigElem = editor.dom.get('_rc_sig'); |
| | | |
| | | if (this.env.signatures) |
| | | { |
| | | // Append the signature as a div within the body |
| | | var sigElem = editor.dom.get('_rc_sig'); |
| | | var newsig = ''; |
| | | var htmlsig = true; |
| | | |
| | | if (!sigElem) |
| | | { |
| | | // add empty line before signature on IE |
| | | if (bw.ie) |
| | | editor.getBody().appendChild(editor.getDoc().createElement('br')); |
| | | |
| | | sigElem = editor.getDoc().createElement('div'); |
| | | sigElem.setAttribute('id', '_rc_sig'); |
| | | editor.getBody().appendChild(sigElem); |
| | | // Append the signature as a div within the body |
| | | if (!sigElem) { |
| | | var body = editor.getBody(); |
| | | var doc = editor.getDoc(); |
| | | |
| | | sigElem = doc.createElement('div'); |
| | | sigElem.setAttribute('id', '_rc_sig'); |
| | | |
| | | if (this.env.sig_above) { |
| | | // if no existing sig and top posting then insert at caret pos |
| | | editor.getWin().focus(); // correct focus in IE |
| | | |
| | | var node = editor.selection.getNode(); |
| | | if (node.nodeName == 'BODY') { |
| | | // no real focus, insert at start |
| | | body.insertBefore(sigElem, body.firstChild); |
| | | body.insertBefore(doc.createElement('br'), body.firstChild); |
| | | } |
| | | |
| | | if (this.env.signatures[id]) |
| | | { |
| | | newsig = this.env.signatures[id]['text']; |
| | | htmlsig = this.env.signatures[id]['is_html']; |
| | | |
| | | if (newsig) { |
| | | if (htmlsig && this.env.signatures[id]['plain_text'].indexOf('-- ')!=0) |
| | | newsig = '<p>-- </p>' + newsig; |
| | | else if (!htmlsig && newsig.indexOf('-- ')!=0) |
| | | newsig = '-- \n' + newsig; |
| | | else { |
| | | body.insertBefore(sigElem, node.nextSibling); |
| | | body.insertBefore(doc.createElement('br'), node.nextSibling); |
| | | } |
| | | } |
| | | else { |
| | | if (bw.ie) // add empty line before signature on IE |
| | | body.appendChild(doc.createElement('br')); |
| | | |
| | | if (htmlsig) |
| | | sigElem.innerHTML = newsig; |
| | | else |
| | | sigElem.innerHTML = '<pre>' + newsig + '</pre>'; |
| | | body.appendChild(sigElem); |
| | | } |
| | | } |
| | | |
| | | input_message.val(message); |
| | | if (this.env.signatures[id]) { |
| | | if (this.env.signatures[id].is_html) { |
| | | sig = this.env.signatures[id].text; |
| | | if (this.env.signatures[id].plain_text.indexOf('-- ') != 0) |
| | | sig = '-- <br />' + sig; |
| | | } |
| | | else { |
| | | sig = this.env.signatures[id].text; |
| | | if (sig.indexOf('-- ') != 0) |
| | | sig = '-- \n' + sig; |
| | | sig = '<pre>' + sig + '</pre>'; |
| | | } |
| | | |
| | | // move cursor before the signature |
| | | if (!is_html) |
| | | this.set_caret_pos(input_message.get(0), len); |
| | | sigElem.innerHTML = sig; |
| | | } |
| | | } |
| | | |
| | | this.env.identity = id; |
| | | return true; |
| | | }; |
| | | }; |
| | | |
| | | this.show_attachment_form = function(a) |
| | | { |
| | |
| | | document.body.appendChild(frame); |
| | | } |
| | | |
| | | // handle upload errors, parsing iframe content in onload |
| | | var fr = document.getElementsByName(frame_name)[0]; |
| | | $(fr).bind('load', {ts:ts}, function(e) { |
| | | var content = ''; |
| | | try { |
| | | if (this.contentDocument) { |
| | | var d = this.contentDocument; |
| | | } else if (this.contentWindow) { |
| | | var d = this.contentWindow.document; |
| | | } |
| | | content = d.childNodes[0].innerHTML; |
| | | } catch (e) {} |
| | | |
| | | if (!String(content).match(/add2attachment/) && (!bw.opera || (rcmail.env.uploadframe && rcmail.env.uploadframe == e.data.ts))) { |
| | | rcmail.display_message(rcmail.get_label('fileuploaderror'), 'error'); |
| | | rcmail.remove_from_attachment_list(e.data.ts); |
| | | } |
| | | // Opera hack: handle double onload |
| | | if (bw.opera) |
| | | rcmail.env.uploadframe = e.data.ts; |
| | | }); |
| | | |
| | | form.target = frame_name; |
| | | form.action = this.env.comm_path+'&_action=upload'; |
| | | form.action = this.env.comm_path+'&_action=upload&_uploadid='+ts; |
| | | form.setAttribute('enctype', 'multipart/form-data'); |
| | | form.submit(); |
| | | |
| | | // hide upload form |
| | | this.show_attachment_form(false); |
| | | // display upload indicator and cancel button |
| | | var content = this.get_label('uploading'); |
| | | if (this.env.loadingicon) |
| | | content = '<img src="'+this.env.loadingicon+'" alt="" />'+content; |
| | | if (this.env.cancelicon) |
| | | content = '<a title="'+this.get_label('cancel')+'" onclick="return rcmail.cancel_attachment_upload(\''+ts+'\', \''+frame_name+'\');" href="#cancelupload"><img src="'+this.env.cancelicon+'" alt="" /></a>'+content; |
| | | this.add2attachment_list(ts, { name:'', html:content, complete:false }); |
| | | } |
| | | |
| | | // set reference to the form object |
| | |
| | | |
| | | // add file name to attachment list |
| | | // called from upload page |
| | | this.add2attachment_list = function(name, content) |
| | | { |
| | | this.add2attachment_list = function(name, att, upload_id) |
| | | { |
| | | if (!this.gui_objects.attachmentlist) |
| | | return false; |
| | | |
| | | $('<li>').attr('id', name).html(content).appendTo(this.gui_objects.attachmentlist); |
| | | |
| | | var li = $('<li>').attr('id', name).html(att.html); |
| | | var indicator; |
| | | |
| | | // replace indicator's li |
| | | if (upload_id && (indicator = document.getElementById(upload_id))) { |
| | | li.replaceAll(indicator); |
| | | } |
| | | else { // add new li |
| | | li.appendTo(this.gui_objects.attachmentlist); |
| | | } |
| | | |
| | | if (upload_id && this.env.attachments[upload_id]) |
| | | delete this.env.attachments[upload_id]; |
| | | |
| | | this.env.attachments[name] = att; |
| | | |
| | | return true; |
| | | }; |
| | | }; |
| | | |
| | | this.remove_from_attachment_list = function(name) |
| | | { |
| | | { |
| | | if (this.env.attachments[name]) |
| | | delete this.env.attachments[name]; |
| | | |
| | | if (!this.gui_objects.attachmentlist) |
| | | return false; |
| | | |
| | |
| | | for (i=0;i<list.length;i++) |
| | | if (list[i].id == name) |
| | | this.gui_objects.attachmentlist.removeChild(list[i]); |
| | | }; |
| | | }; |
| | | |
| | | this.remove_attachment = function(name) |
| | | { |
| | | if (name) |
| | | if (name && this.env.attachments[name]) |
| | | this.http_post('remove-attachment', '_file='+urlencode(name)); |
| | | |
| | | return true; |
| | | }; |
| | | |
| | | this.cancel_attachment_upload = function(name, frame_name) |
| | | { |
| | | if (!name || !frame_name) |
| | | return false; |
| | | |
| | | this.remove_from_attachment_list(name); |
| | | $("iframe[name='"+frame_name+"']").remove(); |
| | | return false; |
| | | }; |
| | | |
| | | // send remote request to add a new contact |
| | |
| | | var addurl = ''; |
| | | if (this.message_list) { |
| | | this.message_list.clear(); |
| | | if (this.env.search_mods) { |
| | | if (this.env.search_mods) { |
| | | var head_arr = new Array(); |
| | | for (var n in this.env.search_mods) |
| | | head_arr.push(n); |
| | | addurl += '&_headers='+head_arr.join(','); |
| | | head_arr.push(n); |
| | | addurl += '&_headers='+head_arr.join(','); |
| | | } |
| | | } else if (this.contact_list) { |
| | | this.contact_list.clear(true); |
| | |
| | | add_url = '&_framed=1'; |
| | | target = window.frames[this.env.contentframe]; |
| | | } |
| | | |
| | | target.location.href = this.env.comm_path+'&_action=edit-prefs&_section='+id+add_url; |
| | | } |
| | | |
| | |
| | | // replace content of quota display |
| | | this.set_quota = function(content) |
| | | { |
| | | if (content && this.gui_objects.quotadisplay) |
| | | $(this.gui_objects.quotadisplay).html(content); |
| | | if (content && this.gui_objects.quotadisplay) { |
| | | if (typeof(content) == 'object') |
| | | this.percent_indicator(this.gui_objects.quotadisplay, content); |
| | | else |
| | | $(this.gui_objects.quotadisplay).html(content); |
| | | } |
| | | }; |
| | | |
| | | // update the mailboxlist |
| | |
| | | elem.onclick = function() { rcmail.load_headers(elem); } |
| | | } |
| | | |
| | | // percent (quota) indicator |
| | | this.percent_indicator = function(obj, data) |
| | | { |
| | | if (!data || !obj) |
| | | return false; |
| | | |
| | | var limit_high = 80; |
| | | var limit_mid = 55; |
| | | var width = data.width ? data.width : this.env.indicator_width ? this.env.indicator_width : 100; |
| | | var height = data.height ? data.height : this.env.indicator_height ? this.env.indicator_height : 14; |
| | | var quota = data.percent ? Math.abs(parseInt(data.percent)) : 0; |
| | | var quota_width = parseInt(quota / 100 * width); |
| | | var pos = $(obj).position(); |
| | | |
| | | this.env.indicator_width = width; |
| | | this.env.indicator_height = height; |
| | | |
| | | // overlimit |
| | | if (quota_width > width) { |
| | | quota_width = width; |
| | | quota = 100; |
| | | } |
| | | |
| | | // main div |
| | | var main = $('<div>'); |
| | | main.css({position: 'absolute', top: pos.top, left: pos.left, |
| | | width: width + 'px', height: height + 'px', zIndex: 100, lineHeight: height + 'px'}) |
| | | .attr('title', data.title).addClass('quota_text').html(quota + '%'); |
| | | // used bar |
| | | var bar1 = $('<div>'); |
| | | bar1.css({position: 'absolute', top: pos.top + 1, left: pos.left + 1, |
| | | width: quota_width + 'px', height: height + 'px', zIndex: 99}); |
| | | // background |
| | | var bar2 = $('<div>'); |
| | | bar2.css({position: 'absolute', top: pos.top + 1, left: pos.left + 1, |
| | | width: width + 'px', height: height + 'px', zIndex: 98}) |
| | | .addClass('quota_bg'); |
| | | |
| | | if (quota >= limit_high) { |
| | | main.addClass(' quota_text_high'); |
| | | bar1.addClass('quota_high'); |
| | | } |
| | | else if(quota >= limit_mid) { |
| | | main.addClass(' quota_text_mid'); |
| | | bar1.addClass('quota_mid'); |
| | | } |
| | | else { |
| | | main.addClass(' quota_text_normal'); |
| | | bar1.addClass('quota_low'); |
| | | } |
| | | |
| | | // replace quota image |
| | | obj.innerHTML = ''; |
| | | $(obj).append(bar1).append(bar2).append(main); |
| | | } |
| | | |
| | | /********************************************************/ |
| | | /********* html to text conversion functions *********/ |
| | |
| | | var url = this.env.comm_path + '&_action=' + action + '&' + querystring |
| | | |
| | | // send request |
| | | console.log('HTTP POST: ' + url); |
| | | console.log('HTTP GET: ' + url); |
| | | jQuery.get(url, { _unlock:(lock?1:0) }, function(data){ ref.http_response(data); }, 'json'); |
| | | }; |
| | | |
| | |
| | | rcube_webmail.prototype.addEventListener = rcube_event_engine.prototype.addEventListener; |
| | | rcube_webmail.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener; |
| | | rcube_webmail.prototype.triggerEvent = rcube_event_engine.prototype.triggerEvent; |
| | | |