Robin Elfrink wrote:
> 1. Internet Explorer has a problem with width and height. I tried to set
> the 'expression' css attributes from JavaScript but IE gave errors. Can
> anybody help me to do this from JavaScript:
>
> width:
> expression((parseInt(document.documentElement.clientWidth)-240)+'px');
> height:
> expression((parseInt(document.documentElement.clientHeight)-125)+'px');
>
> [125 should be replaced with 125 plus mailcontframe.offsetHeight]
This is still a problem. Internet Explorer 7 does the right thing,
though. It may have something to do with top and bottom being set both.
Internet Explorer is bad, bad, bad.
> 2. Clicking on an attachment within the preview pane does nothing. I
> have not yet taken time to investigate this.
Fixed, the 'load-attachment' command had to be enabled.
> 3. I probably should scroll the preview pane to the top when inserting
> new content.
Fixed.
> 4. The selected message in the message list should be scrolled in to
> view. I think I saw something in the DOM docs about that.
Fixed.
Other changes:
- The preview option is user-configurable, instead of global.
- 'preview' hook moved to 'this.select_row' instead of 'single click',
so 'cursor key down' etc. work as well.
- The preview window is scrolled up if a different message is inserted.
- The selected row is scolled into viewable space after selection.
If somebody can help me fix the problem with positioning in Internet
Explorer, I will post the complete patch to the Trac system so whoever
has the powers can include it in SVN if wanted.
Robin
Index: program/include/main.inc
===================================================================
--- program/include/main.inc (revision 335)
+++ program/include/main.inc (working copy)
@@ -1170,6 +1170,7 @@
'charsetselector' => 'rcmail_charset_selector',
'searchform' => 'rcmail_search_form',
'receiptcheckbox' => 'rcmail_receipt_checkbox',
+ 'preview' => 'rcmail_message_preview',
// ADDRESS BOOK
'addresslist' => 'rcmail_contacts_list',
Index: program/localization/nl_NL/labels.inc
===================================================================
--- program/localization/nl_NL/labels.inc (revision 335)
+++ program/localization/nl_NL/labels.inc (working copy)
@@ -202,6 +202,7 @@
$labels['pagesize'] = 'Rijen per pagina';
$labels['signature'] = 'Onderschrift';
$labels['dstactive'] = 'Zomertijd';
+$labels['preview'] = 'Voorbeeldvenster';
$labels['folder'] = 'Map';
$labels['folders'] = 'Mappen';
Index: program/localization/en_US/labels.inc
===================================================================
--- program/localization/en_US/labels.inc (revision 335)
+++ program/localization/en_US/labels.inc (working copy)
@@ -201,6 +201,7 @@
$labels['pagesize'] = 'Rows per page';
$labels['signature'] = 'Signature';
$labels['dstactive'] = 'Daylight savings';
+$labels['preview'] = 'Preview message';
$labels['folder'] = 'Folder';
$labels['folders'] = 'Folders';
Index: program/js/app.js
===================================================================
--- program/js/app.js (revision 335)
+++ program/js/app.js (working copy)
@@ -126,7 +126,7 @@
}
// enable mail commands
- this.enable_command('list', 'checkmail', 'compose', 'add-contact',
'search', 'reset-search', true);
+ this.enable_command('list', 'checkmail', 'compose', 'add-contact',
'search', 'reset-search', 'load-attachment', true);
if (this.env.action=='show')
{
@@ -758,6 +758,7 @@
var input_pagesize = rcube_find_object('_pagesize');
var input_name = rcube_find_object('_name');
var input_email = rcube_find_object('_email');
+ var input_preview = rcube_find_object('_preview');
// user prefs
if (input_pagesize && isNaN(input_pagesize.value))
@@ -1438,6 +1439,8 @@
this.last_selected = id;
this.set_classname(this.list_rows[id].obj, 'focused', true);
+ if (this.env.preview)
+ this.show_preview(id);
};
this.shift_select = function(id, control) {
@@ -1502,6 +1505,31 @@
return true;
};
+
+
+ // when user clicks on a row
+ this.show_preview = function(id, safe)
+ {
+ var add_url = '';
+ var target = window;
+ var contentframe = rcube_find_object('mailcontframe');
+ var previewpane = rcube_find_object('previewpane');
+
+ if (id && contentframe && previewpane)
+ {
+ rcmail.set_busy(true, 'loading');
+ if (previewpane.style.display=='none')
+ {
+ contentframe.style.height = (contentframe.offsetHeight/2) + 'px';
+ previewpane.style.top =
(contentframe.offsetTop+contentframe.offsetHeight) + 'px';
+ previewpane.style.display = 'block';
+ var message = rcube_find_object('rcmrow' + id);
+ message.scrollIntoView();
+ }
+ var url = '_action=preview&_uid='+id;
+ rcmail.http_request('preview', url, true);
+ }
+ };
// when user doble-clicks on a row
@@ -3569,6 +3597,12 @@
case 'expunge':
this.enable_command('select-all', 'select-none', 'expunge',
this.env.messagecount ? true : false);
break;
+
+ case 'preview':
+ var previewpane = rcube_find_object('previewpane');
+ previewpane.innerHTML = request_obj.get_text();
+ previewpane.scrollTop = 0;
+ break;
}
request_obj.reset();
Index: program/steps/settings/func.inc
===================================================================
--- program/steps/settings/func.inc (revision 335)
+++ program/steps/settings/func.inc (working copy)
@@ -49,7 +49,8 @@
$a_show_cols = array('language' => array('type' => 'text'),
'pagesize' => array('type' => 'text'),
'timezone' => array('type' => 'text'),
- 'prettydate' => array('type' => 'text'));
+ 'prettydate' => array('type' => 'text'),
+ 'preview' => array('type' => 'text'));
// show language selection
$a_lang = rcube_list_languages();
@@ -144,7 +145,16 @@
rep_specialchars_output(rcube_label('prettydate')),
$input_prettydate->show($CONFIG['prettydate']?1:0));
+ // show preview window selection
+ $field_id = 'rcmfd_preview';
+ $input_preview = new checkbox(array('name' => '_preview', 'id' => $field_id,
'value' => 1));
+ $out .= sprintf("<tr><td class=\"title\"><label
for=\"%s\">%s</label></td><td>%s</td></tr>\n",
+ $field_id,
+ rep_specialchars_output(rcube_label('preview')),
+ $input_preview->show($CONFIG['preview']?1:0));
+
+
$out .= "\n</table>$form_end";
return $out;
@@ -219,4 +229,4 @@
}
-?>
\ No newline at end of file
+?>
Index: program/steps/settings/save_prefs.inc
===================================================================
--- program/steps/settings/save_prefs.inc (revision 335)
+++ program/steps/settings/save_prefs.inc (working copy)
@@ -28,6 +28,7 @@
$a_user_prefs['dst_active'] = isset($_POST['_dst_active']) ? TRUE : FALSE;
$a_user_prefs['pagesize'] = is_numeric($_POST['_pagesize']) ?
(int)$_POST['_pagesize'] : $CONFIG['pagesize'];
$a_user_prefs['prefer_html'] = isset($_POST['_prefer_html']) ? TRUE : FALSE;
+$a_user_prefs['preview'] = isset($_POST['_preview']) ? TRUE : FALSE;
// MM: Date format toggle (Pretty / Standard)
$a_user_prefs['prettydate'] = isset($_POST['_pretty_date']) ? TRUE : FALSE;
@@ -48,4 +49,4 @@
// overwrite action variable
$OUTPUT->add_script(sprintf("\n%s.set_env('action', '%s');", $JS_OBJECT_NAME,
$_action));
-?>
\ No newline at end of file
+?>
Index: program/steps/mail/show.inc
===================================================================
--- program/steps/mail/show.inc (revision 335)
+++ program/steps/mail/show.inc (working copy)
@@ -171,6 +171,8 @@
if ($_action=='print')
parse_template('printmessage');
+else if ($_action=='preview')
+ parse_template('previewmessage');
else
parse_template('message');
-?>
\ No newline at end of file
+?>
Index: program/steps/mail/func.inc
===================================================================
--- program/steps/mail/func.inc (revision 335)
+++ program/steps/mail/func.inc (working copy)
@@ -480,6 +480,7 @@
$javascript .= sprintf("%s.set_env('pagecount', %d);\n", $JS_OBJECT_NAME,
ceil($message_count/$IMAP->page_size));
$javascript .= sprintf("%s.set_env('sort_col', '%s');\n", $JS_OBJECT_NAME,
$sort_col);
$javascript .= sprintf("%s.set_env('sort_order', '%s');\n", $JS_OBJECT_NAME,
$sort_order);
+ $javascript .= sprintf("%s.set_env('preview', '%s');\n", $JS_OBJECT_NAME,
$CONFIG['preview']);
if ($attrib['messageicon'])
$javascript .= sprintf("%s.set_env('messageicon', '%s%s');\n",
$JS_OBJECT_NAME, $skin_path, $attrib['messageicon']);
Index: skins/default/mail.css
===================================================================
--- skins/default/mail.css (revision 335)
+++ skins/default/mail.css (working copy)
@@ -120,7 +120,23 @@
height:
expression((parseInt(document.documentElement.clientHeight)-125)+'px');
}
+#previewpane
+{
+ position: absolute;
+ display: none;
+ top: 85px;
+ left: 200px;
+ right: 40px;
+ bottom: 40px;
+ border: 1px solid #999999;
+ border-top: none;
+ background-color: #F9F9F9;
+ overflow: auto;
+ /* css hack for IE */
+ width: expression((parseInt(document.documentElement.clientWidth)-240)+'px');
+}
+
#messagepartframe
{
border: 1px solid #999999;
Index: skins/default/templates/mail.html
===================================================================
--- skins/default/templates/mail.html (revision 335)
+++ skins/default/templates/mail.html (working copy)
@@ -52,6 +52,8 @@
attachmentIcon="/images/icons/attachment.png" />
</div>
+<div id="previewpane" style="display: none;"></div>
+
<div id="listcontrols">
<roundcube:label name="select" />:
<roundcube:button command="select-all" label="all" classAct="active" />
Index: skins/default/templates/previewmessage.html
===================================================================
--- skins/default/templates/previewmessage.html (revision 0)
+++ skins/default/templates/previewmessage.html (revision 0)
@@ -0,0 +1,4 @@
+<roundcube:object name="messageHeaders" class="headers-table" cellspacing="0"
cellpadding="2" addicon="/images/icons/plus.gif" summary="Message headers" />
+<roundcube:object name="messageAttachments" id="attachment-list" />
+<roundcube:object name="blockedObjects" id="remote-objects-message" />
+<roundcube:object name="messageBody" id="messagebody" showImages="true" />
Index: index.php
===================================================================
--- index.php (revision 335)
+++ index.php (working copy)
@@ -241,7 +241,7 @@
{
include_once('program/steps/mail/func.inc');
- if ($_action=='show' || $_action=='print')
+ if ($_action=='show' || $_action=='print' || $_action=='preview')
include('program/steps/mail/show.inc');
if ($_action=='get')