diff options
Diffstat (limited to 'program')
-rw-r--r-- | program/include/rcube_imap.php | 17 | ||||
-rwxr-xr-x | program/include/rcube_template.php | 4 | ||||
-rw-r--r-- | program/js/app.js | 58 | ||||
-rw-r--r-- | program/js/common.js | 26 | ||||
-rw-r--r-- | program/localization/en_GB/labels.inc | 2 | ||||
-rw-r--r-- | program/localization/en_US/labels.inc | 2 | ||||
-rw-r--r-- | program/steps/mail/func.inc | 10 | ||||
-rw-r--r-- | program/steps/mail/headers.inc | 39 |
8 files changed, 140 insertions, 18 deletions
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index 8a7ad2c9b..1b5ec1670 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -1371,6 +1371,23 @@ class rcube_imap return $body; } + + + /** + * Returns the message headers as string + * + * @param int Message UID + * @return string Message headers string + */ + function &get_raw_headers($uid) + { + if (!($msg_id = $this->_uid2id($uid))) + return FALSE; + + $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $msg_id, NULL); + + return $headers; + } /** diff --git a/program/include/rcube_template.php b/program/include/rcube_template.php index 9f94194c4..1b61770c0 100755 --- a/program/include/rcube_template.php +++ b/program/include/rcube_template.php @@ -320,9 +320,9 @@ class rcube_template extends rcube_html_page // add debug console if ($this->config['debug_level'] & 8) { - $this->add_footer('<div style="position:absolute;top:5px;left:5px;width:400px;padding:0.2em;background:white;opacity:0.8;z-index:9000"> + $this->add_footer('<div style="position:absolute;top:5px;left:5px;width:405px;padding:2px;background:white;opacity:0.8;filter:alpha(opacity=80);z-index:9000"> <a href="#toggle" onclick="con=document.getElementById(\'dbgconsole\');con.style.display=(con.style.display==\'none\'?\'block\':\'none\');return false">console</a> - <form action="/" name="debugform"><textarea name="console" id="dbgconsole" rows="20" cols="40" wrap="off" style="display:none;width:400px;border:none;font-size:x-small"></textarea></form></div>' + <form action="/" name="debugform" style="display:inline"><textarea name="console" id="dbgconsole" rows="20" cols="40" wrap="off" style="display:none;width:400px;border:none;font-size:x-small"></textarea></form></div>' ); } $output = $this->parse_with_globals($output); diff --git a/program/js/app.js b/program/js/app.js index 36072e384..b724287ef 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -159,7 +159,7 @@ function rcube_webmail() if (this.env.action=='show' || this.env.action=='preview') { - this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource', 'print', 'load-attachment', true); + this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource', 'print', 'load-attachment', 'load-headers', true); if (this.env.next_uid) { this.enable_command('nextmessage', true); @@ -510,7 +510,6 @@ function rcube_webmail() return false; } - // process command switch (command) { @@ -554,6 +553,11 @@ function rcube_webmail() break; + case 'load-headers': + this.load_headers(obj); + break; + + case 'sort': // get the type of sorting var a_sort = props.split('_'); @@ -3654,6 +3658,54 @@ function rcube_webmail() } + // display fetched raw headers + this.set_headers = function(content) + { + if (this.gui_objects.all_headers_row && this.gui_objects.all_headers_box && content) + { + var box = this.gui_objects.all_headers_box; + box.innerHTML = content; + box.style.display = 'block'; + + if (this.env.framed && parent.rcmail) + parent.rcmail.set_busy(false); + else + this.set_busy(false); + } + }; + + // display all-headers row and fetch raw message headers + this.load_headers = function(elem) + { + if (!this.gui_objects.all_headers_row || !this.gui_objects.all_headers_box || !this.env.uid) + return; + + this.set_classname(elem, 'show-headers', false); + this.set_classname(elem, 'hide-headers', true); + this.gui_objects.all_headers_row.style.display = bw.ie ? 'block' : 'table-row'; + elem.onclick = function() { rcmail.hide_headers(elem); } + + // fetch headers only once + if (!this.gui_objects.all_headers_box.innerHTML) + { + this.set_busy(true, 'loading'); + this.http_post('headers', '_uid='+this.env.uid); + } + } + + + // hide all-headers row + this.hide_headers = function(elem) + { + if (!this.gui_objects.all_headers_row || !this.gui_objects.all_headers_box) + return; + + this.set_classname(elem, 'hide-headers', false); + this.set_classname(elem, 'show-headers', true); + this.gui_objects.all_headers_row.style.display = 'none'; + elem.onclick = function() { rcmail.load_headers(elem); } + } + /********************************************************/ /********* remote request methods *********/ @@ -3760,7 +3812,7 @@ function rcube_webmail() } if (request_obj.__lock) - this.set_busy(false); + this.set_busy(false); console.log(request_obj.get_text()); diff --git a/program/js/common.js b/program/js/common.js index 209ce1070..063657f89 100644 --- a/program/js/common.js +++ b/program/js/common.js @@ -253,23 +253,28 @@ function rcube_layer(id, attributes) var obj; obj = document.createElement('DIV'); + with(obj) { id = this.name; with(style) { - position = 'absolute'; + position = 'absolute'; visibility = (vis) ? (vis==2) ? 'inherit' : 'visible' : 'hidden'; left = l+'px'; top = t+'px'; - if(w) width = w+'px'; - if(h) height = h+'px'; + if (w) + width = w.toString().match(/\%$/) ? w : w+'px'; + if (h) + height = h.toString().match(/\%$/) ? h : h+'px'; if(z) zIndex = z; - } + } } - - if(parent) parent.appendChild(obj); - else document.body.appendChild(obj); + + if (parent) + parent.appendChild(obj); + else + document.body.appendChild(obj); this.elm = obj; }; @@ -496,7 +501,7 @@ function rcube_find_object(id, d) // return the absolute position of an object within the document -function rcube_get_object_pos(obj) +function rcube_get_object_pos(obj, relative) { if(typeof(obj)=='string') obj = rcube_find_object(obj); @@ -506,7 +511,7 @@ function rcube_get_object_pos(obj) var iX = (bw.layers) ? obj.x : obj.offsetLeft; var iY = (bw.layers) ? obj.y : obj.offsetTop; - if(bw.ie || bw.mz) + if(!relative && (bw.ie || bw.mz)) { var elm = obj.offsetParent; while(elm && elm!=null) @@ -598,8 +603,9 @@ function rcube_console() this.log = function(msg) { box = rcube_find_object('console'); + if (box) - if (msg[msg.length-1]=='\n') + if (msg.charAt(msg.length-1)=='\n') box.value += msg+'--------------------------------------\n'; else box.value += msg+'\n--------------------------------------\n'; diff --git a/program/localization/en_GB/labels.inc b/program/localization/en_GB/labels.inc index 75ffea521..82d06b090 100644 --- a/program/localization/en_GB/labels.inc +++ b/program/localization/en_GB/labels.inc @@ -128,7 +128,7 @@ $labels['quicksearch'] = 'Quick search'; $labels['resetsearch'] = 'Reset search'; $labels['compose'] = 'Compose a message'; $labels['savemessage'] = 'Save this draft'; -$labels['sendmessage'] = 'Send the message now'; +$labels['sendmessage'] = 'Send now'; $labels['addattachment'] = 'Attach a file'; $labels['charset'] = 'Charset'; $labels['editortype'] = 'Editor type'; diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index 565cdc47a..6b503ff4c 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -164,7 +164,7 @@ $labels['resetsearch'] = 'Reset search'; // message compose $labels['compose'] = 'Compose a message'; $labels['savemessage'] = 'Save this draft'; -$labels['sendmessage'] = 'Send the message now'; +$labels['sendmessage'] = 'Send now'; $labels['addattachment'] = 'Attach a file'; $labels['charset'] = 'Charset'; $labels['editortype'] = 'Editor type'; diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 54abb24fe..7de78a1ef 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -740,7 +740,7 @@ function rcmail_message_headers($attrib, $headers=NULL) // show these headers $standard_headers = array('subject', 'from', 'organization', 'to', 'cc', 'bcc', 'replyto', 'date'); - + foreach ($standard_headers as $hkey) { if (!$headers[$hkey]) @@ -771,6 +771,14 @@ function rcmail_message_headers($attrib, $headers=NULL) $header_count++; } + // all headers division + $out .= "\n".'<tr><td colspan="2" class="more-headers show-headers" + onclick="return '.JS_OBJECT_NAME.'.command(\'load-headers\', \'\', this)"></td></tr>'; + $out .= "\n".'<tr id="all-headers"><td colspan="2" class="all"><div id="headers-source"></div></td></tr>'; + + $OUTPUT->add_gui_object('all_headers_row', 'all-headers'); + $OUTPUT->add_gui_object('all_headers_box', 'headers-source'); + $out .= "\n</table>\n\n"; return $header_count ? $out : ''; diff --git a/program/steps/mail/headers.inc b/program/steps/mail/headers.inc new file mode 100644 index 000000000..653fb9647 --- /dev/null +++ b/program/steps/mail/headers.inc @@ -0,0 +1,39 @@ +<?php +/* + +-----------------------------------------------------------------------+ + | program/steps/mail/headers.inc | + | | + | This file is part of the RoundCube Webmail client | + | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Licensed under the GNU GPL | + | | + | PURPOSE: | + | Fetch message headers in raw format for display | + | | + +-----------------------------------------------------------------------+ + | Author: Aleksander Machniak <alec@alec.pl> | + +-----------------------------------------------------------------------+ + + $Id: mark.inc 1580 2008-06-30 09:36:18Z alec $ + +*/ + +if ($uid = get_input_value('_uid', RCUBE_INPUT_POST)) +{ + $source = $IMAP->get_raw_headers($uid); + + if ($source) + { + $source = htmlspecialchars(trim($source)); + $source = preg_replace('/\t/', ' ', $source); + $source = preg_replace('/^([a-z0-9_:-]+)/im', '<font class="bold">'.'\1'.'</font>', $source); + $source = preg_replace('/\r?\n/', '<br />', $source); + + $OUTPUT->command('set_headers', $source); + $OUTPUT->send(); + } +} + +exit; + +?> |