3 commits - plugins/calendar plugins/libcalendaring plugins/tasklist

Thomas Brüderli bruederli at kolabsys.com
Wed Jan 21 10:30:51 CET 2015


 plugins/calendar/calendar_ui.js                          |    4 -
 plugins/calendar/skins/classic/templates/attachment.html |    2 
 plugins/calendar/skins/larry/calendar.css                |   56 ++++++++-------
 plugins/calendar/skins/larry/templates/attachment.html   |   54 +++++++++++---
 plugins/libcalendaring/libcalendaring.js                 |   14 +++
 plugins/libcalendaring/libcalendaring.php                |   19 ++++-
 plugins/tasklist/skins/larry/tasklist.css                |   56 +++++++++++++--
 plugins/tasklist/skins/larry/templates/attachment.html   |   55 +++++++++++---
 8 files changed, 205 insertions(+), 55 deletions(-)

New commits:
commit afa4133177ce369736237029d742890f162360ed
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Wed Jan 21 10:29:50 2015 +0100

    Align the event/task attachment viewer with the attachment view from mail view

diff --git a/plugins/calendar/skins/classic/templates/attachment.html b/plugins/calendar/skins/classic/templates/attachment.html
index 34d4da6..d060c0d 100644
--- a/plugins/calendar/skins/classic/templates/attachment.html
+++ b/plugins/calendar/skins/classic/templates/attachment.html
@@ -9,7 +9,7 @@
 <roundcube:include file="/includes/header.html" />
 
 <div id="partheader">
-<roundcube:object name="plugin.attachmentcontrols" cellpadding="2" cellspacing="0" />
+<roundcube:object name="plugin.attachmentcontrols" cellpadding="2" cellspacing="0" downloadlink="true" />
 
 <div style="position:absolute; top:2px; right:0; width:12em; text-align:right">
   [<a href="#close" class="closelink" onclick="self.close()"><roundcube:label name="close" /></a>]
diff --git a/plugins/calendar/skins/larry/calendar.css b/plugins/calendar/skins/larry/calendar.css
index b38b312..052860c 100644
--- a/plugins/calendar/skins/larry/calendar.css
+++ b/plugins/calendar/skins/larry/calendar.css
@@ -34,10 +34,6 @@ body.calendarmain #mainscreen {
 	}
 }
 
-body.calendar.attachmentwin #mainscreen {
-	top: 32px;
-}
-
 #calendarsidebar {
 	position: absolute;
 	top: 0;
@@ -568,15 +564,21 @@ a.miniColors-trigger {
 	margin-top: -3px;
 }
 
-#attachmentcontainer {
+.calendar.attachmentwin #attachmenttoolbar {
+	position: relative;
+	top: -6px;
+	height: 40px;
+}
+
+.calendar.attachmentwin #attachmentcontainer {
 	position: absolute;
-	top: 60px;
-	left: 0px;
-	right: 0px;
-	bottom: 0px;
+	top: 0;
+	left: 232px;
+	right: 0;
+	bottom: 0;
 }
 
-#attachmentframe {
+.calendar.attachmentwin #attachmentframe {
 	width: 100%;
 	height: 100%;
 	border: 0;
@@ -584,29 +586,33 @@ a.miniColors-trigger {
 	border-radius: 4px;
 }
 
-#partheader {
-	position: relative;
-	padding: 3px 0;
-	background: #f9f9f9;
-	background: -moz-linear-gradient(top, #fff 0%, #e9e9e9 100%);
-	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fff), color-stop(100%,#e9e9e9));
-	background: -o-linear-gradient(top, #fff 0%, #e9e9e9 100%);
-	background: -ms-linear-gradient(top, #fff 0%, #e9e9e9 100%);
-	background: linear-gradient(top, #fff 0%, #e9e9e9 100%);
+.calendar.attachmentwin #partheader {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 220px;
+	bottom: 0;
+}
+
+.calendar.attachmentwin #partheader table {
+	table-layout: fixed;
+	overflow: hidden;
 }
 
-#partheader table td {
+.calendar.attachmentwin #partheader table td {
 	color: #666;
-	padding: 2px 8px;
+	padding: 4px 6px;
+	text-overflow: ellipsis;
+	overflow: hidden;
 }
 
-#partheader table td.header {
+.calendar.attachmentwin #partheader table td.header {
 	font-weight: bold;
 }
 
-#partheader table td.title a {
-	color: #666;
-	text-decoration: none;
+.calendar.attachmentwin #partheader table td.title {
+	width: 60px;
+	padding-right: 0;
 }
 
 #edit-attachments {
diff --git a/plugins/calendar/skins/larry/templates/attachment.html b/plugins/calendar/skins/larry/templates/attachment.html
index a3cc254..17fccc5 100644
--- a/plugins/calendar/skins/larry/templates/attachment.html
+++ b/plugins/calendar/skins/larry/templates/attachment.html
@@ -7,26 +7,58 @@
 <body class="extwin calendar attachmentwin">
 
 <div id="header">
-	<div id="topnav">
-		<div class="topright">
-			<a href="#close" class="closelink" onclick="self.close()"><roundcube:label name="close" /></a>
-		</div>
+<div id="topline" role="banner" aria-labelledby="aria-label-topnav">
+	<div class="topleft">
+		<roundcube:container name="topline-left" id="topline-left" />
 	</div>
-
-	<br style="clear:both" />
+	<roundcube:container name="topline-center" id="topline-center" />
+	<div class="topright">
+		<roundcube:container name="topline-right" id="topline-right" />
+		<roundcube:button name="close" type="link" label="close" class="closelink" onclick="self.close()" />
+	</div>
+</div>
 </div>
 
 <div id="mainscreen">
-	<div id="partheader" class="uibox">
-	<roundcube:object name="plugin.attachmentcontrols" class="headers-table" />
+
+<h1 class="voice"><roundcube:label name="attachment" />: <roundcube:var name="env:filename" /></h1>
+
+<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
+<div id="attachmenttoolbar" class="toolbar fullwidth" role="toolbar" aria-labelledby="aria-label-toolbar">
+	<roundcube:button command="download-attachment" type="link" class="button download disabled" classAct="button download" classSel="button download pressed" label="download" title="download" />
+	<roundcube:button command="print-attachment" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" title="print" />
+	<roundcube:container name="toolbar" id="messagetoolbar" />
+</div>
+
+<div id="mainscreencontent">
+
+	<div id="partheader" class="uibox listbox" role="contentinfo" aria-labelledby="aria-label-contentinfo">
+		<h2 class="boxtitle" id="aria-label-contentinfo"><roundcube:label name="properties" /></h2>
+		<div class="scroller">
+			<roundcube:object name="plugin.attachmentcontrols" class="listing" />
+		</div>
 	</div>
 
-	<div id="attachmentcontainer" class="uibox">
-	<roundcube:object name="plugin.attachmentframe" id="attachmentframe" class="header-table" style="width:100%" />
+	<div id="attachmentcontainer" class="uibox" role="main" aria-labelledby="aria-label-messagepart">
+		<h2 id="aria-label-messagepart" class="voice"><roundcube:label name="arialabelattachmentpreview" /></h2>
+		<div class="iframebox">
+		<roundcube:object name="plugin.attachmentframe" id="attachmentframe" frameborder="0" title="arialabelattachmentpreview" />
+		</div>
 	</div>
 
 </div>
 
+</div>
+
+<script type="text/javascript">
+
+$(document).ready(function() {
+	if (window.rcube_splitter) {
+		new rcube_splitter({ id:'mailpartsplitterv', p1:'#partheader', p2:'#attachmentcontainer',
+			orientation:'v', relative:true, start:226, min:150, size:12}).init();
+	}
+});
+
+</script>
 </body>
 </html>
-
diff --git a/plugins/libcalendaring/libcalendaring.js b/plugins/libcalendaring/libcalendaring.js
index f8f2a55..a959b9a 100644
--- a/plugins/libcalendaring/libcalendaring.js
+++ b/plugins/libcalendaring/libcalendaring.js
@@ -1140,4 +1140,18 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
   $('.rsvp-buttons').on('click', 'a.reply-comment-toggle', function(e){
     $(this).hide().parent().find('textarea').show().focus();
   });
+
+  if (rcmail.env.action == 'get-attachment' && rcmail.gui_objects['attachmentframe']) {
+    rcmail.register_command('print-attachment', function() {
+      var frame = rcmail.get_frame_window(rcmail.gui_objects['attachmentframe'].id);
+      if (frame) frame.print();
+    }, true);
+  }
+
+  if (rcmail.env.action == 'get-attachment' && rcmail.env.attachment_download_url) {
+    rcmail.register_command('download-attachment', function() {
+      rcmail.location_href(rcmail.env.attachment_download_url, window);
+    }, true);
+  }
+
 });
diff --git a/plugins/libcalendaring/libcalendaring.php b/plugins/libcalendaring/libcalendaring.php
index 49ef40a..0384ba0 100644
--- a/plugins/libcalendaring/libcalendaring.php
+++ b/plugins/libcalendaring/libcalendaring.php
@@ -1217,6 +1217,8 @@ class libcalendaring extends rcube_plugin
 
         $attrib['src'] = './?' . str_replace('_frame=', ($ctype_primary == 'text' ? '_show=' : '_preload='), $_SERVER['QUERY_STRING']);
 
+        $this->rc->output->add_gui_object('attachmentframe', $attrib['id']);
+
         return html::iframe($attrib);
     }
 
@@ -1225,12 +1227,23 @@ class libcalendaring extends rcube_plugin
      */
     public function attachment_header($attrib = array())
     {
-        $table = new html_table(array('cols' => 3));
+        $rcmail = rcmail::get_instance();
+        $dl_link = strtolower($attrib['downloadlink']) == 'true';
+        $dl_url = $this->rc->url(array('_frame' => null, '_download' => 1) + $_GET);
+
+        $table = new html_table(array('cols' => $dl_link ? 3 : 2));
 
         if (!empty($this->attachment['name'])) {
             $table->add('title', Q($this->rc->gettext('filename')));
             $table->add('header', Q($this->attachment['name']));
-            $table->add('download-link', html::a('?'.str_replace('_frame=', '_download=', $_SERVER['QUERY_STRING']), Q($this->rc->gettext('download'))));
+            if ($dl_link) {
+                $table->add('download-link', html::a($dl_url, Q($this->rc->gettext('download'))));
+            }
+        }
+
+        if (!empty($this->attachment['mimetype'])) {
+            $table->add('title', Q($this->rc->gettext('type')));
+            $table->add('header', Q($this->attachment['mimetype']));
         }
 
         if (!empty($this->attachment['size'])) {
@@ -1238,6 +1251,8 @@ class libcalendaring extends rcube_plugin
             $table->add('header', Q(show_bytes($this->attachment['size'])));
         }
 
+        $this->rc->output->set_env('attachment_download_url', $dl_url);
+
         return $table->show($attrib);
     }
 
diff --git a/plugins/tasklist/skins/larry/tasklist.css b/plugins/tasklist/skins/larry/tasklist.css
index 2aaf44b..b47e496 100644
--- a/plugins/tasklist/skins/larry/tasklist.css
+++ b/plugins/tasklist/skins/larry/tasklist.css
@@ -30,10 +30,6 @@ ul.toolbarmenu li span.icon.taskadd,
 	display: none;
 }
 
-body.tasklist.attachmentwin #mainscreen {
-	top: 32px;
-}
-
 .tasklistview #mainscreen {
 	min-width: 1000px !important;
 	min-height: 520px !important;
@@ -1393,6 +1389,58 @@ div.messagetasklinks .messagetaskref input.complete {
 }
 
 
+.tasklist.attachmentwin #attachmenttoolbar {
+	position: relative;
+	top: -6px;
+	height: 40px;
+}
+
+.tasklist.attachmentwin #attachmentcontainer {
+	position: absolute;
+	top: 0;
+	left: 232px;
+	right: 0;
+	bottom: 0;
+}
+
+.tasklist.attachmentwin #attachmentframe {
+	width: 100%;
+	height: 100%;
+	border: 0;
+	background-color: #fff;
+	border-radius: 4px;
+}
+
+.tasklist.attachmentwin #partheader {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 220px;
+	bottom: 0;
+}
+
+.tasklist.attachmentwin #partheader table {
+	table-layout: fixed;
+	overflow: hidden;
+}
+
+.tasklist.attachmentwin #partheader table td {
+	color: #666;
+	padding: 4px 6px;
+	text-overflow: ellipsis;
+	overflow: hidden;
+}
+
+.tasklist.attachmentwin #partheader table td.header {
+	font-weight: bold;
+}
+
+.tasklist.attachmentwin #partheader table td.title {
+	width: 60px;
+	padding-right: 0;
+}
+
+
 /** Special hacks for IE7 **/
 /** They need to be in this file to also affect the task-create dialog embedded in mail view **/
 
diff --git a/plugins/tasklist/skins/larry/templates/attachment.html b/plugins/tasklist/skins/larry/templates/attachment.html
index c07f854..68d4dd9 100644
--- a/plugins/tasklist/skins/larry/templates/attachment.html
+++ b/plugins/tasklist/skins/larry/templates/attachment.html
@@ -7,26 +7,59 @@
 <body class="extwin tasklist attachmentwin">
 
 <div id="header">
-	<div id="topnav">
-		<div class="topright">
-			<a href="#close" class="closelink" onclick="self.close()"><roundcube:label name="close" /></a>
-		</div>
+<div id="topline" role="banner" aria-labelledby="aria-label-topnav">
+	<div class="topleft">
+		<roundcube:container name="topline-left" id="topline-left" />
+	</div>
+	<roundcube:container name="topline-center" id="topline-center" />
+	<div class="topright">
+		<roundcube:container name="topline-right" id="topline-right" />
+		<roundcube:button name="close" type="link" label="close" class="closelink" onclick="self.close()" />
 	</div>
-
-	<br style="clear:both" />
+</div>
 </div>
 
 <div id="mainscreen">
-	<div id="partheader" class="uibox">
-	<roundcube:object name="plugin.attachmentcontrols" class="headers-table" />
+
+<h1 class="voice"><roundcube:label name="attachment" />: <roundcube:var name="env:filename" /></h1>
+
+<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
+<div id="attachmenttoolbar" class="toolbar fullwidth" role="toolbar" aria-labelledby="aria-label-toolbar">
+	<roundcube:button command="download-attachment" type="link" class="button download disabled" classAct="button download" classSel="button download pressed" label="download" title="download" />
+	<roundcube:button command="print-attachment" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" title="print" />
+	<roundcube:container name="toolbar" id="messagetoolbar" />
+</div>
+
+<div id="mainscreencontent">
+
+	<div id="partheader" class="uibox listbox" role="contentinfo" aria-labelledby="aria-label-contentinfo">
+		<h2 class="boxtitle" id="aria-label-contentinfo"><roundcube:label name="properties" /></h2>
+		<div class="scroller">
+			<roundcube:object name="plugin.attachmentcontrols" class="listing" />
+		</div>
 	</div>
 
-	<div id="attachmentcontainer" class="uibox">
-	<roundcube:object name="plugin.attachmentframe" id="attachmentframe" class="header-table" style="width:100%" />
+	<div id="attachmentcontainer" class="uibox" role="main" aria-labelledby="aria-label-messagepart">
+		<h2 id="aria-label-messagepart" class="voice"><roundcube:label name="arialabelattachmentpreview" /></h2>
+		<div class="iframebox">
+		<roundcube:object name="plugin.attachmentframe" id="attachmentframe" frameborder="0" title="arialabelattachmentpreview" />
+		</div>
 	</div>
 
 </div>
 
+</div>
+
+<script type="text/javascript">
+
+$(document).ready(function() {
+	if (window.rcube_splitter) {
+		new rcube_splitter({ id:'mailpartsplitterv', p1:'#partheader', p2:'#attachmentcontainer',
+			orientation:'v', relative:true, start:226, min:150, size:12}).init();
+	}
+});
+
+</script>
+
 </body>
 </html>
-


commit 7b9d36b039b6be57bdef8631dc38470bb57f44ba
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Wed Jan 21 10:08:14 2015 +0100

    Force download of attachment (#4291)

diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js
index 345599b..ade2240 100644
--- a/plugins/calendar/calendar_ui.js
+++ b/plugins/calendar/calendar_ui.js
@@ -323,6 +323,7 @@ function rcube_calendar_ui(settings)
       }
 
       query._frame = null;
+      query._download = 1;
       rcmail.goto_url('get-attachment', query, false);
     };
 


commit dd8d3cc06e0f71b84ee487105c3bf6e632ceb782
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Wed Jan 21 09:13:18 2015 +0100

    Fix attachment download url (#4291)

diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js
index 45a537f..345599b 100644
--- a/plugins/calendar/calendar_ui.js
+++ b/plugins/calendar/calendar_ui.js
@@ -322,7 +322,8 @@ function rcube_calendar_ui(settings)
         }
       }
 
-      rcmail.goto_url('get-attachment', qstring+'&_download=1', false);
+      query._frame = null;
+      rcmail.goto_url('get-attachment', query, false);
     };
 
     // build event attachments list




More information about the commits mailing list