11 commits - plugins/calendar plugins/kolab_addressbook plugins/kolab_zpush plugins/libkolab plugins/owncloud plugins/tasklist
Thomas Brüderli
bruederli at kolabsys.com
Mon Jul 30 14:38:29 CEST 2012
dev/null |binary
plugins/calendar/calendar.php | 8
plugins/calendar/calendar_base.js | 2
plugins/calendar/calendar_ui.js | 14
plugins/calendar/lib/calendar_ui.php | 12
plugins/calendar/package.xml | 80
plugins/calendar/skins/.htaccess | 2
plugins/calendar/skins/classic/README | 5
plugins/calendar/skins/classic/calendar.css | 1268 ++++++++++
plugins/calendar/skins/classic/fullcalendar.css | 724 +++++
plugins/calendar/skins/classic/iehacks.css | 88
plugins/calendar/skins/classic/images/attendee-status.gif |binary
plugins/calendar/skins/classic/images/badge_confidential.gif |binary
plugins/calendar/skins/classic/images/badge_confidential.png |binary
plugins/calendar/skins/classic/images/badge_private.gif |binary
plugins/calendar/skins/classic/images/badge_private.png |binary
plugins/calendar/skins/classic/images/calendar-blue.png |binary
plugins/calendar/skins/classic/images/calendar.gif |binary
plugins/calendar/skins/classic/images/calendar.png |binary
plugins/calendar/skins/classic/images/calendars.gif |binary
plugins/calendar/skins/classic/images/calendars.png |binary
plugins/calendar/skins/classic/images/eventicons.gif |binary
plugins/calendar/skins/classic/images/export.png |binary
plugins/calendar/skins/classic/images/freebusy-colors.gif |binary
plugins/calendar/skins/classic/images/freebusy-colors.png |binary
plugins/calendar/skins/classic/images/invitation.png |binary
plugins/calendar/skins/classic/images/listheader.gif |binary
plugins/calendar/skins/classic/images/loading_blue.gif |binary
plugins/calendar/skins/classic/images/minicolors-all.png |binary
plugins/calendar/skins/classic/images/minicolors-handles.gif |binary
plugins/calendar/skins/classic/images/preview.png |binary
plugins/calendar/skins/classic/images/print.png |binary
plugins/calendar/skins/classic/images/spacer.gif |binary
plugins/calendar/skins/classic/images/toggle.gif |binary
plugins/calendar/skins/classic/images/toolbar.gif |binary
plugins/calendar/skins/classic/images/toolbar.png |binary
plugins/calendar/skins/classic/jquery.miniColors.css | 106
plugins/calendar/skins/classic/print.css | 208 +
plugins/calendar/skins/classic/print.iehacks.css | 25
plugins/calendar/skins/classic/templates/attachment.html | 26
plugins/calendar/skins/classic/templates/calendar.html | 201 +
plugins/calendar/skins/classic/templates/eventedit.html | 103
plugins/calendar/skins/classic/templates/freebusylegend.html | 7
plugins/calendar/skins/classic/templates/itipattend.html | 21
plugins/calendar/skins/classic/templates/kolabacl.html | 13
plugins/calendar/skins/classic/templates/kolabform.html | 7
plugins/calendar/skins/classic/templates/print.html | 28
plugins/calendar/skins/default/README | 5
plugins/calendar/skins/default/calendar.css | 1268 ----------
plugins/calendar/skins/default/fullcalendar.css | 724 -----
plugins/calendar/skins/default/iehacks.css | 88
plugins/calendar/skins/default/jquery.miniColors.css | 106
plugins/calendar/skins/default/print.css | 208 -
plugins/calendar/skins/default/print.iehacks.css | 25
plugins/calendar/skins/default/templates/attachment.html | 26
plugins/calendar/skins/default/templates/calendar.html | 201 -
plugins/calendar/skins/default/templates/eventedit.html | 103
plugins/calendar/skins/default/templates/freebusylegend.html | 7
plugins/calendar/skins/default/templates/itipattend.html | 21
plugins/calendar/skins/default/templates/kolabacl.html | 13
plugins/calendar/skins/default/templates/kolabform.html | 7
plugins/calendar/skins/default/templates/print.html | 28
plugins/kolab_addressbook/package.xml | 8
plugins/kolab_addressbook/skins/classic/kolab_addressbook.css | 35
plugins/kolab_addressbook/skins/classic/kolab_folders.gif |binary
plugins/kolab_addressbook/skins/classic/kolab_folders.png |binary
plugins/kolab_addressbook/skins/classic/templates/bookedit.html | 27
plugins/kolab_addressbook/skins/default/kolab_addressbook.css | 35
plugins/kolab_addressbook/skins/default/templates/bookedit.html | 27
plugins/kolab_zpush/package.xml | 14
plugins/kolab_zpush/skins/classic/alarm-clock.png |binary
plugins/kolab_zpush/skins/classic/config.css | 119
plugins/kolab_zpush/skins/classic/deviceactions.png |binary
plugins/kolab_zpush/skins/classic/foldertypes.png |binary
plugins/kolab_zpush/skins/classic/pointer-left.gif |binary
plugins/kolab_zpush/skins/classic/synchronize.png |binary
plugins/kolab_zpush/skins/classic/templates/config.html | 63
plugins/kolab_zpush/skins/default/config.css | 119
plugins/kolab_zpush/skins/default/templates/config.html | 63
plugins/libkolab/lib/kolab_format_task.php | 2
plugins/owncloud/owncloud.php | 7
plugins/owncloud/skins/classic/cloud.png |binary
plugins/owncloud/skins/classic/owncloud.css | 12
plugins/owncloud/skins/classic/templates/owncloud.html | 19
plugins/owncloud/skins/default/owncloud.css | 12
plugins/owncloud/skins/default/templates/owncloud.html | 19
plugins/tasklist/drivers/database/SQL/mysql.sql | 2
plugins/tasklist/drivers/database/tasklist_database_driver.php | 4
plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php | 14
plugins/tasklist/drivers/tasklist_driver.php | 4
plugins/tasklist/localization/de_CH.inc | 7
plugins/tasklist/localization/en_US.inc | 7
plugins/tasklist/skins/larry/buttons.png |binary
plugins/tasklist/skins/larry/tasklist.css | 5
plugins/tasklist/skins/larry/templates/mainview.html | 39
plugins/tasklist/skins/larry/templates/taskedit.html | 39
plugins/tasklist/tasklist.js | 135 -
plugins/tasklist/tasklist.php | 154 +
plugins/tasklist/tasklist_base.js | 94
plugins/tasklist/tasklist_ui.php | 25
100 files changed, 3609 insertions(+), 3279 deletions(-)
New commits:
commit babdbbc2142475c494ab50c78a32cbee2acb4879
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Sun Jul 29 17:37:25 2012 +0200
Icon + better text for email message menu entry
diff --git a/plugins/tasklist/localization/de_CH.inc b/plugins/tasklist/localization/de_CH.inc
index a0b7a8e..a702a70 100644
--- a/plugins/tasklist/localization/de_CH.inc
+++ b/plugins/tasklist/localization/de_CH.inc
@@ -8,6 +8,7 @@ $labels['tags'] = 'Tags';
$labels['newtask'] = 'Neue Aufgabe';
$labels['createnewtask'] = 'Neue Aufgabe eingeben (z.B. Samstag, Rasenmähen)';
+$labels['createfrommail'] = 'Als Aufgabe speichern';
$labels['mark'] = 'Markieren';
$labels['unmark'] = 'Markierung aufheben';
$labels['edit'] = 'Bearbeiten';
diff --git a/plugins/tasklist/localization/en_US.inc b/plugins/tasklist/localization/en_US.inc
index 8ade264..ccf9358 100644
--- a/plugins/tasklist/localization/en_US.inc
+++ b/plugins/tasklist/localization/en_US.inc
@@ -8,7 +8,7 @@ $labels['tags'] = 'Tags';
$labels['newtask'] = 'New Task';
$labels['createnewtask'] = 'Create new Task (e.g. Saturday, Mow the lawn)';
-$labels['createfrommail'] = 'Create new task from email';
+$labels['createfrommail'] = 'Save as task';
$labels['mark'] = 'Mark';
$labels['unmark'] = 'Unmark';
$labels['edit'] = 'Edit';
diff --git a/plugins/tasklist/skins/larry/buttons.png b/plugins/tasklist/skins/larry/buttons.png
index 909530f..954db33 100644
Binary files a/plugins/tasklist/skins/larry/buttons.png and b/plugins/tasklist/skins/larry/buttons.png differ
diff --git a/plugins/tasklist/skins/larry/tasklist.css b/plugins/tasklist/skins/larry/tasklist.css
index 4619914..ad7d05a 100644
--- a/plugins/tasklist/skins/larry/tasklist.css
+++ b/plugins/tasklist/skins/larry/tasklist.css
@@ -22,6 +22,11 @@
background-position: 0 -26px;
}
+ul.toolbarmenu li span.icon.taskadd {
+ background-image: url(buttons.png);
+ background-position: -4px -90px;
+}
+
#sidebar {
position: absolute;
top: 0;
commit 8040c271c510c68672b64b3aa1864af5f00f4116
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Sun Jul 29 17:21:28 2012 +0200
Add forgotten file for create task from email feature
diff --git a/plugins/tasklist/tasklist_base.js b/plugins/tasklist/tasklist_base.js
new file mode 100644
index 0000000..3b1673b
--- /dev/null
+++ b/plugins/tasklist/tasklist_base.js
@@ -0,0 +1,94 @@
+/**
+ * Client scripts for the Tasklist plugin
+ *
+ * @version @package_version@
+ * @author Thomas Bruederli <bruederli at kolabsys.com>
+ *
+ * Copyright (C) 2012, Kolab Systems AG <contact at kolabsys.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+function rcube_tasklist(settings)
+{
+ /* private vars */
+ var ui_loaded = false;
+ var me = this;
+
+ /* public members */
+ this.ui;
+
+ /* public methods */
+ this.create_from_mail = create_from_mail;
+ this.mail2taskdialog = mail2task_dialog;
+
+
+ /**
+ * Open a new task dialog prefilled with contents from the currently selected mail message
+ */
+ function create_from_mail()
+ {
+ var uid;
+ if ((uid = rcmail.get_single_uid())) {
+ // load calendar UI (scripts and edit dialog template)
+ if (!ui_loaded) {
+ $.when(
+ $.getScript('./plugins/tasklist/tasklist.js'),
+ $.getScript('./plugins/tasklist/jquery.tagedit.js'),
+ $.get(rcmail.url('tasks/inlineui'), function(html){ $(document.body).append(html); }, 'html')
+ ).then(function() {
+ // register attachments form
+ // rcmail.gui_object('attachmentlist', 'attachmentlist');
+
+ ui_loaded = true;
+ me.ui = new rcube_tasklist_ui(settings);
+ create_from_mail(); // start over
+ });
+ return;
+ }
+ else {
+ // get message contents for task dialog
+ var lock = rcmail.set_busy(true, 'loading');
+ rcmail.http_post('tasks/mail2task', {
+ '_mbox': rcmail.env.mailbox,
+ '_uid': uid
+ }, lock);
+ }
+ }
+ }
+
+ /**
+ * Callback function to put the given task properties into the dialog
+ */
+ function mail2task_dialog(prop)
+ {
+ this.ui.edit_task(null, 'new', prop);
+ }
+
+}
+
+/* tasklist plugin initialization (for email task) */
+window.rcmail && rcmail.env.task == 'mail' && rcmail.addEventListener('init', function(evt) {
+ var tasks = new rcube_tasklist(rcmail.env.tasklist_settings);
+
+ rcmail.register_command('tasklist-create-from-mail', function() { tasks.create_from_mail() });
+ rcmail.addEventListener('plugin.mail2taskdialog', function(p){ tasks.mail2taskdialog(p) });
+ rcmail.addEventListener('plugin.unlock_saving', function(p){ tasks.ui && tasks.ui.unlock_saving(); });
+
+ if (rcmail.env.action != 'show')
+ rcmail.env.message_commands.push('tasklist-create-from-mail');
+ else
+ rcmail.enable_command('tasklist-create-from-mail', true);
+});
+
commit fd1f107b4c0701f1f8e8e5f29b5cd8c2f5a0a84c
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Sun Jul 29 17:20:19 2012 +0200
Create Task from Email feature (#896)
diff --git a/plugins/tasklist/localization/en_US.inc b/plugins/tasklist/localization/en_US.inc
index 9c1aeef..8ade264 100644
--- a/plugins/tasklist/localization/en_US.inc
+++ b/plugins/tasklist/localization/en_US.inc
@@ -8,6 +8,7 @@ $labels['tags'] = 'Tags';
$labels['newtask'] = 'New Task';
$labels['createnewtask'] = 'Create new Task (e.g. Saturday, Mow the lawn)';
+$labels['createfrommail'] = 'Create new task from email';
$labels['mark'] = 'Mark';
$labels['unmark'] = 'Unmark';
$labels['edit'] = 'Edit';
diff --git a/plugins/tasklist/skins/larry/templates/mainview.html b/plugins/tasklist/skins/larry/templates/mainview.html
index e98db77..114b7ec 100644
--- a/plugins/tasklist/skins/larry/templates/mainview.html
+++ b/plugins/tasklist/skins/larry/templates/mainview.html
@@ -122,45 +122,7 @@
</div>
</div>
-<div id="taskedit">
- <form id="taskeditform" action="#" method="post" enctype="multipart/form-data">
- <div class="form-section">
- <label for="edit-title"><roundcube:label name="tasklist.title" /></label>
- <br />
- <input type="text" class="text" name="title" id="edit-title" size="60" tabindex="1" />
- </div>
- <div class="form-section">
- <label for="edit-description"><roundcube:label name="tasklist.description" /></label>
- <br />
- <textarea name="description" id="edit-description" class="text" rows="5" cols="60" tabindex="2"></textarea>
- </div>
- <div class="form-section">
- <label for="edit-tags"><roundcube:label name="tasklist.tags" /></label>
- <roundcube:object name="plugin.tags_editline" id="edit-tagline" class="tagedit" tabindex="3" />
- </div>
- <div class="form-section">
- <label for="edit-date"><roundcube:label name="tasklist.datetime" /></label>
- <input type="text" name="date" size="10" id="edit-date" tabindex="20" />
- <input type="text" name="time" size="6" id="edit-time" tabindex="21" />
- <a href="#nodate" style="margin-left:1em" class="edit-nodate" rel="#edit-date,#edit-time"><roundcube:label name="tasklist.nodate" /></a>
- </div>
- <div class="form-section">
- <label for="edit-startdate"><roundcube:label name="tasklist.start" /></label>
- <input type="text" name="startdate" size="10" id="edit-startdate" tabindex="23" />
- <input type="text" name="starttime" size="6" id="edit-starttime" tabindex="24" />
- <a href="#nodate" style="margin-left:1em" class="edit-nodate" rel="#edit-startdate,#edit-starttime"><roundcube:label name="tasklist.nodate" /></a>
- </div>
- <div class="form-section">
- <label for="edit-completeness"><roundcube:label name="tasklist.complete" /></label>
- <input type="text" name="title" id="edit-completeness" size="3" tabindex="25" /> %
- <div id="edit-completeness-slider"></div>
- </div>
- <div class="form-section" id="tasklist-select">
- <label for="edit-tasklist"><roundcube:label name="tasklist.list" /></label>
- <roundcube:object name="plugin.tasklist_select" id="edit-tasklist" tabindex="26" />
- </div>
- </form>
-</div>
+<roundcube:include file="/templates/taskedit.html" />
<div id="tasklistform" class="uidialog">
<roundcube:object name="plugin.tasklist_editform" />
diff --git a/plugins/tasklist/skins/larry/templates/taskedit.html b/plugins/tasklist/skins/larry/templates/taskedit.html
new file mode 100644
index 0000000..cdce896
--- /dev/null
+++ b/plugins/tasklist/skins/larry/templates/taskedit.html
@@ -0,0 +1,39 @@
+<div id="taskedit">
+ <form id="taskeditform" action="#" method="post" enctype="multipart/form-data">
+ <div class="form-section">
+ <label for="edit-title"><roundcube:label name="tasklist.title" /></label>
+ <br />
+ <input type="text" class="text" name="title" id="edit-title" size="60" tabindex="1" />
+ </div>
+ <div class="form-section">
+ <label for="edit-description"><roundcube:label name="tasklist.description" /></label>
+ <br />
+ <textarea name="description" id="edit-description" class="text" rows="5" cols="60" tabindex="2"></textarea>
+ </div>
+ <div class="form-section">
+ <label for="edit-tags"><roundcube:label name="tasklist.tags" /></label>
+ <roundcube:object name="plugin.tags_editline" id="edit-tagline" class="tagedit" tabindex="3" />
+ </div>
+ <div class="form-section">
+ <label for="edit-date"><roundcube:label name="tasklist.datetime" /></label>
+ <input type="text" name="date" size="10" id="edit-date" tabindex="20" />
+ <input type="text" name="time" size="6" id="edit-time" tabindex="21" />
+ <a href="#nodate" style="margin-left:1em" class="edit-nodate" rel="#edit-date,#edit-time"><roundcube:label name="tasklist.nodate" /></a>
+ </div>
+ <div class="form-section">
+ <label for="edit-startdate"><roundcube:label name="tasklist.start" /></label>
+ <input type="text" name="startdate" size="10" id="edit-startdate" tabindex="23" />
+ <input type="text" name="starttime" size="6" id="edit-starttime" tabindex="24" />
+ <a href="#nodate" style="margin-left:1em" class="edit-nodate" rel="#edit-startdate,#edit-starttime"><roundcube:label name="tasklist.nodate" /></a>
+ </div>
+ <div class="form-section">
+ <label for="edit-completeness"><roundcube:label name="tasklist.complete" /></label>
+ <input type="text" name="title" id="edit-completeness" size="3" tabindex="25" /> %
+ <div id="edit-completeness-slider"></div>
+ </div>
+ <div class="form-section" id="tasklist-select">
+ <label for="edit-tasklist"><roundcube:label name="tasklist.list" /></label>
+ <roundcube:object name="plugin.tasklist_select" id="edit-tasklist" tabindex="26" />
+ </div>
+ </form>
+</div>
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index c1522d0..39636d6 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -20,7 +20,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-function rcube_tasklist(settings)
+function rcube_tasklist_ui(settings)
{
/* constants */
var FILTER_MASK_ALL = 0;
@@ -58,7 +58,6 @@ function rcube_tasklist(settings)
var listdata = {};
var tags = [];
var draghelper;
- var completeness_slider;
var search_request;
var search_query;
var me = this;
@@ -91,6 +90,21 @@ function rcube_tasklist(settings)
this.reset_search = reset_search;
this.list_remove = list_remove;
this.list_edit_dialog = list_edit_dialog;
+ this.unlock_saving = unlock_saving;
+
+
+ /* basic initializations */
+
+ var completeness_slider = $('#edit-completeness-slider').slider({
+ range: 'min',
+ slide: function(e, ui){
+ var v = completeness_slider.slider('value');
+ if (v >= 98) v = 100;
+ if (v <= 2) v = 0;
+ $('#edit-completeness').val(v);
+ }
+ });
+ $('#edit-completeness').change(function(e){ completeness_slider.slider('value', parseInt(this.value)) });
/**
@@ -118,7 +132,7 @@ function rcube_tasklist(settings)
rcmail.addEventListener('plugin.insert_tasklist', insert_list);
rcmail.addEventListener('plugin.update_tasklist', update_list);
rcmail.addEventListener('plugin.reload_data', function(){ list_tasks(null); });
- rcmail.addEventListener('plugin.unlock_saving', function(p){ rcmail.set_busy(false, null, saving_lock); });
+ rcmail.addEventListener('plugin.unlock_saving', unlock_saving);
// start loading tasks
fetch_counts();
@@ -277,22 +291,11 @@ function rcube_tasklist(settings)
}
});
- completeness_slider = $('#edit-completeness-slider').slider({
- range: 'min',
- slide: function(e, ui){
- var v = completeness_slider.slider('value');
- if (v >= 98) v = 100;
- if (v <= 2) v = 0;
- $('#edit-completeness').val(v);
- }
- });
- $('#edit-completeness').change(function(e){ completeness_slider.slider('value', parseInt(this.value)) });
-
// handle global document clicks: close popup menus
$(document.body).click(clear_popups);
// extended datepicker settings
- extended_datepicker_settings = $.extend({
+ var extended_datepicker_settings = $.extend({
showButtonPanel: true,
beforeShow: function(input, inst) {
setTimeout(function(){
@@ -462,7 +465,7 @@ function rcube_tasklist(settings)
{
if (!rcmail.busy) {
saving_lock = rcmail.set_busy(true, 'tasklist.savingdata');
- rcmail.http_post('task', { action:action, t:rec, filter:filtermask });
+ rcmail.http_post('tasks/task', { action:action, t:rec, filter:filtermask });
return true;
}
@@ -470,6 +473,15 @@ function rcube_tasklist(settings)
}
/**
+ * Remove saving lock and free the UI for new input
+ */
+ function unlock_saving()
+ {
+ if (saving_lock)
+ rcmail.set_busy(false, null, saving_lock);
+ }
+
+ /**
* Render the given task into the tasks list
*/
function render_task(rec, replace)
@@ -1241,7 +1253,7 @@ jQuery.fn.sortElements = (function(){
var rctasks;
window.rcmail && rcmail.addEventListener('init', function(evt) {
- rctasks = new rcube_tasklist(rcmail.env.tasklist_settings);
+ rctasks = new rcube_tasklist_ui(rcmail.env.tasklist_settings);
// register button commands
rcmail.register_command('newtask', function(){ rctasks.edit_task(null, 'new', {}); }, true);
diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php
index 6b205e9..4247e14 100644
--- a/plugins/tasklist/tasklist.php
+++ b/plugins/tasklist/tasklist.php
@@ -81,6 +81,29 @@ class tasklist extends rcube_plugin
$this->register_action('tasklist', array($this, 'tasklist_action'));
$this->register_action('counts', array($this, 'fetch_counts'));
$this->register_action('fetch', array($this, 'fetch_tasks'));
+ $this->register_action('inlineui', array($this, 'get_inline_ui'));
+ $this->register_action('mail2task', array($this, 'mail_message2task'));
+ }
+ else if ($this->rc->task == 'mail') {
+ // TODO: register hooks to catch ical/vtodo email attachments
+ if ($this->rc->action == 'show' || $this->rc->action == 'preview') {
+ // $this->add_hook('message_load', array($this, 'mail_message_load'));
+ // $this->add_hook('template_object_messagebody', array($this, 'mail_messagebody_html'));
+ }
+
+ // add 'Create event' item to message menu
+ if ($this->api->output->type == 'html') {
+ $this->api->add_content(html::tag('li', null,
+ $this->api->output->button(array(
+ 'command' => 'tasklist-create-from-mail',
+ 'label' => 'tasklist.createfrommail',
+ 'type' => 'link',
+ 'classact' => 'icon taskaddlink active',
+ 'class' => 'icon taskaddlink',
+ 'innerclass' => 'icon taskadd',
+ ))),
+ 'messagemenu');
+ }
}
if (!$this->rc->output->ajax_call && !$this->rc->output->env['framed']) {
@@ -525,6 +548,89 @@ class tasklist extends rcube_plugin
}
+ /**
+ *
+ */
+ public function get_inline_ui()
+ {
+ foreach (array('save','cancel','savingdata') as $label)
+ $texts['tasklist.'.$label] = $this->gettext($label);
+
+ $texts['tasklist.newtask'] = $this->gettext('createfrommail');
+
+ $this->ui->init_templates();
+ echo $this->api->output->parse('tasklist.taskedit', false, false);
+ echo html::tag('script', array('type' => 'text/javascript'),
+ "rcmail.set_env('tasklists', " . json_encode($this->api->output->env['tasklists']) . ");\n".
+// "rcmail.set_env('deleteicon', '" . $this->api->output->env['deleteicon'] . "');\n".
+// "rcmail.set_env('cancelicon', '" . $this->api->output->env['cancelicon'] . "');\n".
+// "rcmail.set_env('loadingicon', '" . $this->api->output->env['loadingicon'] . "');\n".
+ "rcmail.add_label(" . json_encode($texts) . ");\n"
+ );
+ exit;
+ }
+
+
+ /******* Email related function *******/
+
+ public function mail_message2task()
+ {
+ $uid = get_input_value('_uid', RCUBE_INPUT_POST);
+ $mbox = get_input_value('_mbox', RCUBE_INPUT_POST);
+ $task = array();
+
+ // establish imap connection
+ $imap = $this->rc->get_storage();
+ $imap->set_mailbox($mbox);
+ $message = new rcube_message($uid);
+
+ if ($message->headers) {
+ $task['title'] = trim($message->subject);
+ $task['description'] = trim($message->first_text_part());
+/*
+ // copy mail attachments to event
+ if ($message->attachments) {
+ $eventid = 'cal:';
+ if (!is_array($_SESSION['event_session']) || $_SESSION['event_session']['id'] != $eventid) {
+ $_SESSION['event_session'] = array();
+ $_SESSION['event_session']['id'] = $eventid;
+ $_SESSION['event_session']['attachments'] = array();
+ }
+
+ foreach ((array)$message->attachments as $part) {
+ $attachment = array(
+ 'data' => $imap->get_message_part($uid, $part->mime_id, $part),
+ 'size' => $part->size,
+ 'name' => $part->filename,
+ 'mimetype' => $part->mimetype,
+ 'group' => $eventid,
+ );
+
+ $attachment = $this->rc->plugins->exec_hook('attachment_save', $attachment);
+
+ if ($attachment['status'] && !$attachment['abort']) {
+ $id = $attachment['id'];
+
+ // store new attachment in session
+ unset($attachment['status'], $attachment['abort'], $attachment['data']);
+ $_SESSION['event_session']['attachments'][$id] = $attachment;
+
+ $attachment['id'] = 'rcmfile' . $attachment['id']; # add prefix to consider it 'new'
+ $event['attachments'][] = $attachment;
+ }
+ }
+ }
+*/
+ $this->rc->output->command('plugin.mail2taskdialog', $task);
+ }
+ else {
+ $this->rc->output->command('display_message', $this->gettext('messageopenerror'), 'error');
+ }
+
+ $this->rc->output->send();
+ }
+
+
/******* Utility functions *******/
/**
diff --git a/plugins/tasklist/tasklist_ui.php b/plugins/tasklist/tasklist_ui.php
index a5f3520..43f79c9 100644
--- a/plugins/tasklist/tasklist_ui.php
+++ b/plugins/tasklist/tasklist_ui.php
@@ -52,6 +52,18 @@ class tasklist_ui
), 'taskbar');
$this->plugin->include_stylesheet($this->plugin->local_skin_path() . '/tasklist.css');
+ $this->plugin->include_script('tasklist_base.js');
+
+ // copy config to client
+ $defaults = $this->plugin->defaults;
+ $settings = array(
+ 'date_format' => $this->rc->config->get('date_format', $defaults['date_format']),
+ 'time_format' => $this->rc->config->get('time_format', $defaults['time_format']),
+ 'first_day' => $this->rc->config->get('calendar_first_day', $defaults['first_day']),
+ );
+
+ $this->rc->output->set_env('tasklist_settings', $settings);
+
$this->ready = true;
}
@@ -72,16 +84,6 @@ class tasklist_ui
$this->plugin->include_script('jquery.tagedit.js');
$this->plugin->include_script('tasklist.js');
-
- // copy config to client
- $defaults = $this->plugin->defaults;
- $settings = array(
- 'date_format' => $this->rc->config->get('date_format', $defaults['date_format']),
- 'time_format' => $this->rc->config->get('time_format', $defaults['time_format']),
- 'first_day' => $this->rc->config->get('calendar_first_day', $defaults['first_day']),
- );
-
- $this->rc->output->set_env('tasklist_settings', $settings);
}
/**
commit 7a8fbddf0dcd9e2525625c27d07d1d7969d4f49c
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Sun Jul 29 17:18:15 2012 +0200
Encapsulate unlock_saving callback function
diff --git a/plugins/calendar/calendar_base.js b/plugins/calendar/calendar_base.js
index 54388bd..a77af01 100644
--- a/plugins/calendar/calendar_base.js
+++ b/plugins/calendar/calendar_base.js
@@ -284,7 +284,7 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
rcmail.register_command('calendar-create-from-mail', function() { cal.create_from_mail() });
rcmail.addEventListener('plugin.mail2event_dialog', function(p){ cal.mail2event_dialog(p) });
- rcmail.addEventListener('plugin.unlock_saving', function(p){ rcmail.set_busy(false, null, cal.ui.saving_lock); });
+ rcmail.addEventListener('plugin.unlock_saving', function(p){ cal.ui.unlock_saving(); });
if (rcmail.env.action != 'show') {
rcmail.env.message_commands.push('calendar-create-from-mail');
diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js
index 4a54ca5..67339bf 100644
--- a/plugins/calendar/calendar_ui.js
+++ b/plugins/calendar/calendar_ui.js
@@ -33,7 +33,7 @@ function rcube_calendar_ui(settings)
this.selected_event = null;
this.selected_calendar = null;
this.search_request = null;
- this.saving_lock = null;
+ this.saving_lock;
/*** private vars ***/
@@ -1714,6 +1714,15 @@ function rcube_calendar_ui(settings)
/*** public methods ***/
+ /**
+ * Remove saving lock and free the UI for new input
+ */
+ this.unlock_saving = function()
+ {
+ if (me.saving_lock)
+ rcmail.set_busy(false, null, me.saving_lock);
+ };
+
// opens calendar day-view in a popup
this.fisheye_view = function(date)
{
@@ -2703,7 +2712,6 @@ function rcube_calendar_ui(settings)
/* calendar plugin initialization */
window.rcmail && rcmail.addEventListener('init', function(evt) {
-
// configure toolbar buttons
rcmail.register_command('addevent', function(){ cal.add_event(); }, true);
rcmail.register_command('print', function(){ cal.print_calendars(); }, true);
@@ -2723,7 +2731,7 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
// register callback commands
rcmail.addEventListener('plugin.display_alarms', function(alarms){ cal.display_alarms(alarms); });
rcmail.addEventListener('plugin.destroy_source', function(p){ cal.calendar_destroy_source(p.id); });
- rcmail.addEventListener('plugin.unlock_saving', function(p){ rcmail.set_busy(false, null, cal.saving_lock); });
+ rcmail.addEventListener('plugin.unlock_saving', function(p){ cal.unlock_saving(); });
rcmail.addEventListener('plugin.refresh_calendar', function(p){ cal.refresh(p); });
rcmail.addEventListener('plugin.import_success', function(p){ cal.import_success(p); });
commit e140b7852c221a43ec71913adc3fbc1dc1b338bb
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Sun Jul 29 16:50:15 2012 +0200
Redirect to classig skin
diff --git a/plugins/calendar/skins/.htaccess b/plugins/calendar/skins/.htaccess
index 740f1a9..734b6cd 100644
--- a/plugins/calendar/skins/.htaccess
+++ b/plugins/calendar/skins/.htaccess
@@ -2,4 +2,4 @@
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
-RewriteRule larry/(.*) %{REQUEST_URI}/../../default/$1 [qsappend,last]
+RewriteRule larry/(.*) %{REQUEST_URI}/../../classic/$1 [qsappend,last]
commit 12d2e8b993bffa9ee85fe4aa9066d90835e7cba1
Merge: 6385460 5720e0f
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Sun Jul 29 15:41:26 2012 +0200
Merge branch 'master' of ssh://git.kolabsys.com/git/roundcube
commit 638546023c57d0dc1a17ad78799ddd89fc14fac6
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Sun Jul 29 15:41:00 2012 +0200
Renamed old default skin folders to 'classic' in order to align with the upcoming change in Roundcube core
diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index dd33a0b..77719c7 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -459,7 +459,7 @@ class calendar extends rcube_plugin
// include color picker
$this->include_script('lib/js/jquery.miniColors.min.js');
- $this->include_stylesheet('skins/' .$this->rc->config->get('skin') . '/jquery.miniColors.css');
+ $this->include_stylesheet($this->local_skin_path() . '/jquery.miniColors.css');
$this->rc->output->set_env('mscolors', $this->driver->get_color_values());
$this->rc->output->add_script('$("input.colors").miniColors({ colorValues:rcmail.env.mscolors })', 'docready');
}
@@ -1942,9 +1942,9 @@ class calendar extends rcube_plugin
}
// Add CSS stylesheets to the page header
- $skin = $this->rc->config->get('skin');
- $this->include_stylesheet('skins/' . $skin . '/fullcalendar.css');
- $this->include_stylesheet('skins/' . $skin . '/print.css');
+ $skin_path = $this->local_skin_path();
+ $this->include_stylesheet($skin_path . '/fullcalendar.css');
+ $this->include_stylesheet($skin_path . '/print.css');
// Add JS files to the page header
$this->include_script('print.js');
diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php
index 9615cff..a063a4d 100644
--- a/plugins/calendar/lib/calendar_ui.php
+++ b/plugins/calendar/lib/calendar_ui.php
@@ -59,8 +59,8 @@ class calendar_ui
$this->cal->include_script('lib/js/fullcalendar.js');
$this->cal->include_script('calendar_base.js');
- $skin = $this->rc->config->get('skin');
- $this->cal->include_stylesheet('skins/' . $skin . '/calendar.css');
+ $skin_path = $this->cal->local_skin_path();
+ $this->cal->include_stylesheet($skin_path . '/calendar.css');
$this->ready = true;
}
@@ -99,9 +99,9 @@ class calendar_ui
*/
public function addCSS()
{
- $skin = $this->rc->config->get('skin');
- $this->cal->include_stylesheet('skins/' . $skin . '/fullcalendar.css');
- $this->cal->include_stylesheet('skins/' . $skin . '/jquery.miniColors.css');
+ $skin_path = $this->cal->local_skin_path();
+ $this->cal->include_stylesheet($skin_path . '/fullcalendar.css');
+ $this->cal->include_stylesheet($skin_path . '/jquery.miniColors.css');
}
/**
@@ -648,7 +648,7 @@ class calendar_ui
if (!$attrib['id'])
$attrib['id'] = 'rcmAttachmentList';
- $skin_path = $this->rc->config->get('skin_path');
+ $skin_path = $this->cal->local_skin_path();
if ($attrib['deleteicon']) {
$_SESSION['calendar_deleteicon'] = $skin_path . $attrib['deleteicon'];
$this->rc->output->set_env('deleteicon', $skin_path . $attrib['deleteicon']);
diff --git a/plugins/calendar/package.xml b/plugins/calendar/package.xml
index 1284430..1dc6625 100644
--- a/plugins/calendar/package.xml
+++ b/plugins/calendar/package.xml
@@ -113,46 +113,46 @@
</file>
- <file name="skins/default/calendar.css" role="data"></file>
- <file name="skins/default/fullcalendar.css" role="data"></file>
- <file name="skins/default/fullcalendar.print.css" role="data"></file>
- <file name="skins/default/iehacks.css" role="data"></file>
- <file name="skins/default/jquery.miniColors.css" role="data"></file>
- <file name="skins/default/print.css" role="data"></file>
- <file name="skins/default/print.iehacks.css" role="data"></file>
- <file name="skins/default/images/attendee-status.gif" role="data"></file>
- <file name="skins/default/images/badge_confidential.gif" role="data"></file>
- <file name="skins/default/images/badge_confidential.png" role="data"></file>
- <file name="skins/default/images/badge_private.gif" role="data"></file>
- <file name="skins/default/images/badge_private.png" role="data"></file>
- <file name="skins/default/images/calendar-blue.png" role="data"></file>
- <file name="skins/default/images/calendar.gif" role="data"></file>
- <file name="skins/default/images/calendar.png" role="data"></file>
- <file name="skins/default/images/calendars.gif" role="data"></file>
- <file name="skins/default/images/calendars.png" role="data"></file>
- <file name="skins/default/images/eventicons.gif" role="data"></file>
- <file name="skins/default/images/export.png" role="data"></file>
- <file name="skins/default/images/freebusy-colors.gif" role="data"></file>
- <file name="skins/default/images/freebusy-colors.png" role="data"></file>
- <file name="skins/default/images/invitation.png" role="data"></file>
- <file name="skins/default/images/listheader.gif" role="data"></file>
- <file name="skins/default/images/loading_blue.gif" role="data"></file>
- <file name="skins/default/images/minicolors-all.png" role="data"></file>
- <file name="skins/default/images/minicolors-handles.gif" role="data"></file>
- <file name="skins/default/images/preview.png" role="data"></file>
- <file name="skins/default/images/print.png" role="data"></file>
- <file name="skins/default/images/spacer.gif" role="data"></file>
- <file name="skins/default/images/toggle.gif" role="data"></file>
- <file name="skins/default/images/toolbar.gif" role="data"></file>
- <file name="skins/default/images/toolbar.png" role="data"></file>
- <file name="skins/default/templates/attachment.html" role="data"></file>
- <file name="skins/default/templates/calendar.html" role="data"></file>
- <file name="skins/default/templates/eventedit.html" role="data"></file>
- <file name="skins/default/templates/freebusylegend.html" role="data"></file>
- <file name="skins/default/templates/itipattend.html" role="data"></file>
- <file name="skins/default/templates/kolabacl.html" role="data"></file>
- <file name="skins/default/templates/kolabform.html" role="data"></file>
- <file name="skins/default/templates/print.html" role="data"></file>
+ <file name="skins/classic/calendar.css" role="data"></file>
+ <file name="skins/classic/fullcalendar.css" role="data"></file>
+ <file name="skins/classic/fullcalendar.print.css" role="data"></file>
+ <file name="skins/classic/iehacks.css" role="data"></file>
+ <file name="skins/classic/jquery.miniColors.css" role="data"></file>
+ <file name="skins/classic/print.css" role="data"></file>
+ <file name="skins/classic/print.iehacks.css" role="data"></file>
+ <file name="skins/classic/images/attendee-status.gif" role="data"></file>
+ <file name="skins/classic/images/badge_confidential.gif" role="data"></file>
+ <file name="skins/classic/images/badge_confidential.png" role="data"></file>
+ <file name="skins/classic/images/badge_private.gif" role="data"></file>
+ <file name="skins/classic/images/badge_private.png" role="data"></file>
+ <file name="skins/classic/images/calendar-blue.png" role="data"></file>
+ <file name="skins/classic/images/calendar.gif" role="data"></file>
+ <file name="skins/classic/images/calendar.png" role="data"></file>
+ <file name="skins/classic/images/calendars.gif" role="data"></file>
+ <file name="skins/classic/images/calendars.png" role="data"></file>
+ <file name="skins/classic/images/eventicons.gif" role="data"></file>
+ <file name="skins/classic/images/export.png" role="data"></file>
+ <file name="skins/classic/images/freebusy-colors.gif" role="data"></file>
+ <file name="skins/classic/images/freebusy-colors.png" role="data"></file>
+ <file name="skins/classic/images/invitation.png" role="data"></file>
+ <file name="skins/classic/images/listheader.gif" role="data"></file>
+ <file name="skins/classic/images/loading_blue.gif" role="data"></file>
+ <file name="skins/classic/images/minicolors-all.png" role="data"></file>
+ <file name="skins/classic/images/minicolors-handles.gif" role="data"></file>
+ <file name="skins/classic/images/preview.png" role="data"></file>
+ <file name="skins/classic/images/print.png" role="data"></file>
+ <file name="skins/classic/images/spacer.gif" role="data"></file>
+ <file name="skins/classic/images/toggle.gif" role="data"></file>
+ <file name="skins/classic/images/toolbar.gif" role="data"></file>
+ <file name="skins/classic/images/toolbar.png" role="data"></file>
+ <file name="skins/classic/templates/attachment.html" role="data"></file>
+ <file name="skins/classic/templates/calendar.html" role="data"></file>
+ <file name="skins/classic/templates/eventedit.html" role="data"></file>
+ <file name="skins/classic/templates/freebusylegend.html" role="data"></file>
+ <file name="skins/classic/templates/itipattend.html" role="data"></file>
+ <file name="skins/classic/templates/kolabacl.html" role="data"></file>
+ <file name="skins/classic/templates/kolabform.html" role="data"></file>
+ <file name="skins/classic/templates/print.html" role="data"></file>
<file name="config.inc.php.dist" role="data"></file>
<file name="LICENSE" role="data"></file>
diff --git a/plugins/calendar/skins/classic/README b/plugins/calendar/skins/classic/README
new file mode 100644
index 0000000..ccd513a
--- /dev/null
+++ b/plugins/calendar/skins/classic/README
@@ -0,0 +1,5 @@
+Icons by Fugue Icons <http://p.yusukekamiyamane.com/>
+
+Copyright (C) 2010 Yusuke Kamiyamane. All rights reserved.
+The icons are licensed under a Creative Commons Attribution
+3.0 license. <http://creativecommons.org/licenses/by/3.0/>
diff --git a/plugins/calendar/skins/classic/calendar.css b/plugins/calendar/skins/classic/calendar.css
new file mode 100644
index 0000000..21dcb1b
--- /dev/null
+++ b/plugins/calendar/skins/classic/calendar.css
@@ -0,0 +1,1268 @@
+/*** Style for Calendar plugin ***/
+
+body.calendarmain {
+ overflow: hidden;
+}
+
+#taskbar a.button-calendar {
+ background: url(images/calendar.png) 0px 1px no-repeat;
+}
+
+/* hack for IE 6/7 */
+* html #taskbar a.button-calendar {
+ background-image: url(images/calendar.gif);
+}
+
+#main {
+ position: absolute;
+ clear: both;
+ top: 90px;
+ left: 0;
+ right: 0;
+ bottom: 10px;
+}
+
+#calendarsidebar {
+ position: absolute;
+ top: 37px;
+ left: 10px;
+ bottom: 0;
+ width: 230px;
+}
+
+#datepicker {
+ width: 100%;
+}
+
+#datepicker .ui-datepicker {
+ width: 97% !important;
+ box-shadow: none;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+}
+
+#datepicker .ui-datepicker-activerange a {
+ border-color: #c33;
+ color: #a22;
+}
+
+#datepicker .ui-datepicker-activerange a.ui-state-active {
+ color: #fff;
+}
+
+#datepicker .ui-priority-secondary {
+ opacity: 0.4;
+}
+
+#datepicker td.ui-datepicker-week-col {
+ cursor: pointer;
+}
+
+#calendarsidebartoggle {
+ position: absolute;
+ left: 244px;
+ width: 8px;
+ top: 37px;
+ bottom: 0;
+ background: url(images/toggle.gif) 0 48% no-repeat transparent;
+ cursor: pointer;
+}
+
+div.sidebarclosed {
+ background-position: -8px 48% !important;
+}
+
+#calendarsidebartoggle:hover {
+ background-color: #ddd;
+}
+
+#calendar {
+ position: absolute;
+ top: 0;
+ left: 256px;
+ right: 10px;
+ bottom: 0;
+}
+
+#print {
+ width: 680px;
+}
+
+pre {
+ font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+}
+
+#calendars {
+ position: absolute;
+ top: 220px;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ background-color: #F9F9F9;
+ border: 1px solid #999999;
+ overflow: hidden;
+}
+
+#calendarslist {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+#attachmentlist li,
+#calendarslist li {
+ margin: 0;
+ padding: 1px;
+ display: block;
+ background: #fff;
+ border-bottom: 1px solid #EBEBEB;
+ white-space: nowrap;
+}
+
+#calendarslist li label {
+ display: block;
+}
+
+#calendarslist li span.handle {
+ cursor: default;
+ background: url(images/calendars.png) 0 -2px no-repeat;
+ display: inline-block;
+ width: 20px;
+}
+
+#calendarslist li input {
+ margin-right: 5px;
+}
+
+#calendarslist li.selected {
+ background-color: #ccc;
+ border-bottom: 1px solid #bbb;
+}
+
+#calendarslist li.selected span {
+ font-weight: bold;
+}
+
+#calendarslist li.readonly span.handle {
+ background-position: 0 -20px;
+}
+
+#calendarslist li.other span.handle {
+ background-position: 0 -38px;
+}
+
+#calendarslist li.other.readonly span.handle {
+ background-position: 0 -56px;
+}
+
+#calendarslist li.shared span.handle {
+ background-position: 0 -74px;
+}
+
+#calendarslist li.shared.readonly span.handle {
+ background-position: 0 -92px;
+}
+
+#calfeedurl {
+ width: 98%;
+ background: #fbfbfb;
+ padding: 4px;
+ margin-bottom: 1em;
+ resize: none;
+}
+
+#agendalist {
+ width: 100%;
+ margin: 0 auto;
+ margin-top: 60px;
+ border: 1px solid #C1DAD7;
+ display: none;
+}
+
+#agendalist table {
+ width: 100%;
+}
+
+#agendalist td,
+#agendalist th {
+ border-right: 1px solid #C1DAD7;
+ border-bottom: 1px solid #C1DAD7;
+ background: #fff;
+ padding: 6px 6px 6px 12px;
+}
+
+#agendalist tr {
+ vertical-align: top;
+}
+
+#agendalist th {
+ font-weight: bold;
+}
+
+#calendartoolbar {
+ position: absolute;
+ top: 45px;
+ left: 256px;
+ height: 35px;
+}
+
+#calendartoolbar a {
+ padding-right: 10px;
+}
+
+#calendartoolbar a.button,
+#calendartoolbar a.buttonPas {
+ display: block;
+ float: left;
+ width: 32px;
+ height: 32px;
+ padding: 0;
+ margin-right: 10px;
+ overflow: hidden;
+ background: url(images/toolbar.png) 0 0 no-repeat transparent;
+ opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
+}
+
+#calendartoolbar a.buttonPas {
+ opacity: 0.35;
+}
+
+#calendartoolbar a.addeventSel {
+ background-position: 0 -32px;
+}
+
+#calendartoolbar a.delete {
+ background-position: -32px 0;
+}
+
+#calendartoolbar a.deleteSel {
+ background-position: -32px -32px;
+}
+
+#calendartoolbar a.print {
+ background-position: -64px 0;
+}
+
+#calendartoolbar a.printSel {
+ background-position: -64px -32px;
+}
+
+#calendartoolbar a.export {
+ background-position: -128px 0;
+}
+
+#calendartoolbar a.exportSel {
+ background-position: -128px -32px;
+}
+
+#quicksearchbar {
+ right: 4px;
+}
+
+div.uidialog {
+ display: none;
+}
+
+#user {
+ position: absolute;
+ top: 10px;
+ right: 100px;
+ left: 100px;
+ text-align: center;
+}
+
+a.morelink {
+ font-size: 90%;
+ color: #C33;
+ text-decoration: none;
+}
+
+a.morelink:hover {
+ text-decoration: underline;
+}
+
+a.miniColors-trigger {
+ margin-top: -3px;
+}
+
+#attachmentcontainer {
+ position: absolute;
+ top: 80px;
+ left: 20px;
+ right: 20px;
+ bottom: 20px;
+}
+
+#attachmentframe {
+ width: 100%;
+ height: 100%;
+ border: 1px solid #999999;
+ background-color: #F9F9F9;
+}
+
+#partheader {
+ position: absolute;
+ top: 20px;
+ left: 220px;
+ right: 20px;
+ height: 40px;
+}
+
+#partheader table td {
+ padding-left: 2px;
+ padding-right: 4px;
+ vertical-align: middle;
+ font-size: 11px;
+}
+
+#partheader table td.title {
+ color: #666;
+ font-weight: bold;
+}
+
+.attachments-list ul {
+ margin: 0px;
+ padding: 0px;
+ list-style-image: none;
+ list-style-type: none;
+}
+
+.attachments-list ul li {
+ height: 18px;
+ font-size: 12px;
+ padding-top: 2px;
+ padding-right: 8px;
+ white-space: nowrap;
+}
+
+.attachments-list ul li img {
+ padding-right: 2px;
+ vertical-align: middle;
+}
+
+.attachments-list ul li a {
+ text-decoration: none;
+}
+
+.attachments-list ul li a:hover {
+ text-decoration: underline;
+}
+
+#attachmentlist {
+ margin: 0 -0.8em;
+}
+
+#attachmentlist li {
+ padding: 2px 2px 3px 0.8em;
+}
+
+#eventshow .attachments-list ul li {
+ float: left;
+}
+
+#edit-attachments-form {
+ padding-top: 1.2em;
+}
+
+#edit-attachments-form .buttons {
+ margin: 0.5em 0;
+}
+
+#event-attendees span.attendee {
+ padding-right: 18px;
+ margin-right: 0.5em;
+ background: url(images/attendee-status.gif) right 0 no-repeat;
+}
+
+#event-attendees span.attendee a.mailtolink {
+ text-decoration: none;
+ white-space: nowrap;
+}
+
+#event-attendees span.attendee a.mailtolink:hover {
+ text-decoration: underline;
+}
+
+#event-attendees span.accepted {
+ background-position: right -20px;
+}
+
+#event-attendees span.declined {
+ background-position: right -40px;
+}
+
+#event-attendees span.tentative {
+ background-position: right -60px;
+}
+
+#event-attendees span.organizer {
+ background-position: right -80px;
+}
+
+/* jQuery UI overrides */
+
+#eventshow h1 {
+ font-size: 20px;
+ margin: 0.1em 0 0.4em 0;
+}
+
+#eventshow label,
+#eventshow h5.label {
+ font-weight: normal;
+ font-size: 0.9em;
+ color: #999;
+ margin: 0 0 0.2em 0;
+}
+
+#eventshow {
+ margin: 0 -0.2em;
+}
+
+#eventshow.sensitivity-private {
+ background: url(images/badge_private.png) top right no-repeat;
+}
+
+#eventshow.sensitivity-confidential {
+ background: url(images/badge_confidential.png) top right no-repeat;
+}
+
+.sensitivity-private #event-title {
+ margin-right: 50px;
+}
+
+.sensitivity-confidential #event-title {
+ margin-right: 60px;
+}
+
+#eventshow div.event-line {
+ margin-top: 0.1em;
+ margin-bottom: 0.3em;
+}
+
+#eventedit {
+ position: relative;
+ padding: 0.5em 0.1em;
+}
+
+#eventedit input.text,
+#eventedit textarea {
+ width: 97%;
+}
+
+#eventtabs {
+ position: relative;
+ padding: 0;
+ border: 0;
+ border-radius: 0;
+}
+
+div.form-section,
+#eventshow div.event-section,
+#eventtabs div.event-section {
+ margin-top: 0.2em;
+ margin-bottom: 0.8em;
+}
+
+#eventtabs .tabsbar {
+ position: absolute;
+ top: 0;
+}
+
+#eventtabs .ui-tabs-panel {
+ padding: 1em 0.8em;
+ border: 1px solid #aaa;
+ border-width: 0 1px 1px 1px;
+}
+
+#eventtabs .ui-tabs-nav {
+ background: none;
+ padding: 0;
+ border-width: 0 0 1px 0;
+ border-radius: 0;
+}
+
+#eventtabs .border-after {
+ padding-bottom: 0.6em;
+ margin-bottom: 0.6em;
+ border-bottom: 1px solid #999;
+}
+
+#eventshow label,
+#eventedit label,
+.form-section label {
+ display: inline-block;
+ min-width: 7em;
+ padding-right: 0.5em;
+}
+
+#eventedit .formtable td.label {
+ min-width: 6em;
+}
+
+td.topalign {
+ vertical-align: top;
+}
+
+#eventedit label.weekday,
+#eventedit label.monthday {
+ min-width: 3em;
+}
+
+#eventedit label.month {
+ min-width: 5em;
+}
+
+#edit-recurrence-yearly-bymonthblock {
+ margin-left: 7.5em;
+}
+
+#eventedit .recurrence-form {
+ display: none;
+}
+
+#eventedit .formtable td {
+ padding: 0.2em 0;
+}
+
+.ui-dialog .event-update-confirm {
+ padding: 0 0.5em 0.5em 0.5em;
+}
+
+.event-dialog-message,
+.event-update-confirm .message {
+ margin-top: 0.5em;
+ padding: 0.8em;
+ background-color: #F7FDCB;
+ border: 1px solid #C2D071;
+}
+
+.event-dialog-message .message,
+.event-update-confirm .message {
+ margin-bottom: 0.5em;
+}
+
+.edit-recurring-warning .savemode {
+ padding-left: 20px;
+}
+
+.event-update-confirm .savemode {
+ padding-left: 30px;
+}
+
+.event-dialog-message span.ui-icon,
+.event-update-confirm span.ui-icon {
+ float: left;
+ margin: 0 7px 20px 0;
+}
+
+.event-dialog-message label,
+.event-update-confirm label {
+ min-width: 3em;
+ padding-right: 1em;
+}
+
+.event-update-confirm a.button {
+ margin: 0 0.5em 0 0.2em;
+ min-width: 5em;
+}
+
+#event-rsvp,
+#edit-attendees-notify {
+ margin: 0.3em 0;
+ padding: 0.5em;
+ background-color: #F7FDCB;
+ border: 1px solid #C2D071;
+}
+
+#edit-attendees-table {
+ width: 100%;
+ display: table;
+ table-layout: fixed;
+ border-collapse: collapse;
+ border: 1px solid #ccc;
+}
+
+#edit-attendees-table td {
+ padding: 3px;
+ border-bottom: 1px solid #ccc;
+}
+
+#edit-attendees-table td.role {
+ width: 8em;
+}
+
+#edit-attendees-table td.availability,
+#edit-attendees-table td.confirmstate {
+ width: 4em;
+}
+
+#edit-attendees-table td.options {
+ width: 3em;
+ text-align: right;
+ padding-right: 4px;
+}
+
+#edit-attendees-table td.name {
+ width: auto;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+#edit-attendees-table thead td {
+ background: url(images/listheader.gif) top left repeat-x #CCC;
+}
+
+#edit-attendees-form {
+ position: relative;
+ margin-top: 1em;
+}
+
+#edit-attendees-form #edit-attendee-schedule {
+ position: absolute;
+ top: 0;
+ right: 0;
+}
+
+#edit-attendees-table select.edit-attendee-role {
+ border: 0;
+ padding: 2px;
+ background: white;
+}
+
+.availability img.availabilityicon {
+ margin: 1px;
+ width: 14px;
+ height: 14px;
+ border-radius: 4px;
+ -moz-border-radius: 4px;
+}
+
+.availability img.availabilityicon.loading {
+ background: url(images/loading_blue.gif) center no-repeat;
+}
+
+#schedule-freebusy-times td.unknown,
+.availability img.availabilityicon.unknown {
+ background: #ddd;
+}
+
+#schedule-freebusy-times td.free,
+.availability img.availabilityicon.free {
+ background: #0c0;
+}
+
+#schedule-freebusy-times td.busy,
+.availability img.availabilityicon.busy {
+ background: #c00;
+}
+
+#schedule-freebusy-times td.tentative,
+.availability img.availabilityicon.tentative {
+ background: #66d;
+}
+
+#schedule-freebusy-times td.out-of-office,
+.availability img.availabilityicon.out-of-office {
+ background: #f0b400;
+}
+
+#schedule-freebusy-times td.all-busy,
+#schedule-freebusy-times td.all-tentative,
+#schedule-freebusy-times td.all-out-of-office {
+ background-image: url(images/freebusy-colors.png);
+ background-position: top right;
+ background-repeat: no-repeat;
+}
+
+#schedule-freebusy-times td.all-tentative {
+ background-position: right -40px;
+}
+
+#schedule-freebusy-times td.all-out-of-office {
+ background-position: right -80px;
+}
+
+#edit-attendees-legend {
+ margin-top: 3em;
+ margin-bottom: 0.5em;
+}
+
+#edit-attendees-legend .legend {
+ margin-right: 2em;
+ white-space: nowrap;
+}
+
+#edit-attendees-legend img.availabilityicon {
+ vertical-align: middle;
+}
+
+#edit-attendees-table tbody td.confirmstate {
+ overflow: hidden;
+ white-space: nowrap;
+ text-indent: -2000%;
+}
+
+#edit-attendees-table td.confirmstate span {
+ display: block;
+ width: 20px;
+ background: url(images/attendee-status.gif) 5px 0 no-repeat;
+}
+
+#edit-attendees-table td.confirmstate span.needs-action {
+}
+
+#edit-attendees-table td.confirmstate span.accepted {
+ background-position: 5px -20px;
+}
+
+#edit-attendees-table td.confirmstate span.declined {
+ background-position: 5px -40px;
+}
+
+#edit-attendees-table td.confirmstate span.tentative {
+ background-position: 5px -60px;
+}
+
+#attendees-freebusy-table {
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: collapse;
+ margin: 0.5em 0;
+}
+
+#attendees-freebusy-table td.attendees {
+ width: 18em;
+ border: 1px solid #ccc;
+ vertical-align: top;
+ overflow: hidden;
+}
+
+#attendees-freebusy-table td.times {
+ width: auto;
+ vertical-align: top;
+ border: 1px solid #ccc;
+}
+
+#attendees-freebusy-table div.scroll {
+ position: relative;
+ overflow: auto;
+}
+
+#attendees-freebusy-table h3.boxtitle {
+ margin: 0;
+ height: auto !important;
+ border-color: #ccc;
+}
+
+.attendees-list .attendee {
+ padding: 3px 4px 3px 1px;
+ background: url(images/attendee-status.gif) 2px -97px no-repeat;
+ white-space: nowrap;
+}
+
+.attendees-list a.attendee-role-toggle {
+ display: inline-block;
+ width: 16px;
+ margin-right: 3px;
+ cursor: pointer;
+}
+
+.attendees-list div.attendee {
+ border-top: 1px solid #ccc;
+}
+
+.attendees-list span.attendee {
+ padding-left: 20px;
+ margin-right: 2em;
+}
+
+.attendees-list .organizer {
+ background-position: 3px -77px;
+}
+
+.attendees-list .opt-participant {
+ background-position: 2px -117px;
+}
+
+.attendees-list .chair {
+ background-position: 2px -137px;
+}
+
+.attendees-list .loading {
+ background: url(images/loading_blue.gif) 1px 50% no-repeat;
+}
+
+.attendees-list .total {
+ background: none;
+ padding-left: 4px;
+ font-weight: bold;
+}
+
+.attendees-list .spacer,
+#schedule-freebusy-times tr.spacer td {
+ background: 0;
+ font-size: 50%;
+}
+
+#schedule-freebusy-times {
+ border-collapse: collapse;
+ width: 100%;
+}
+
+#schedule-freebusy-times td {
+ padding: 3px;
+ border: 1px solid #ccc;
+}
+
+#schedule-freebusy-times tr.dates th {
+ border-color: #aaa;
+ border-style: solid;
+ border-width: 0 1px 0 1px;
+ white-space: nowrap;
+}
+
+#attendees-freebusy-table div.timesheader,
+#schedule-freebusy-times tr.times td {
+ min-width: 30px;
+ font-size: 9px;
+ padding: 5px 2px 6px 2px;
+ text-align: center;
+}
+
+#schedule-freebusy-times tr.times td.allday {
+ min-width: 60px;
+}
+
+#schedule-freebusy-times tr.times td {
+ cursor: pointer;
+}
+
+#schedule-event-time {
+ position: absolute;
+ border: 2px solid #333;
+ background: #777;
+ background: rgba(60, 60, 60, 0.6);
+ opacity: 0.5;
+ border-radius: 4px;
+ cursor: move;
+ filter: alpha(opacity=40); /* IE8 */
+}
+
+#eventfreebusy .schedule-options {
+ position: relative;
+ margin-bottom: 1.5em;
+}
+
+#eventfreebusy .schedule-buttons {
+ position: absolute;
+ top: 0;
+ right: 0;
+}
+
+#eventfreebusy .schedule-find-buttons {
+ padding-bottom:0.5em;
+}
+
+#eventfreebusy .schedule-find-buttons button {
+ min-width: 9em;
+ text-align: center;
+}
+
+span.edit-alarm-set {
+ white-space: nowrap;
+}
+
+a.dropdown-link {
+ color: #CC0000;
+ font-size: 12px;
+ text-decoration: none;
+}
+
+a.dropdown-link:after {
+ content: ' â¼';
+ font-size: 11px;
+ color: #666;
+}
+
+#eventedit .ui-tabs-panel {
+ min-height: 20em;
+}
+
+.alarm-item {
+ margin: 0.4em 0 1em 0;
+}
+
+.alarm-item .event-title {
+ font-size: 14px;
+ margin: 0.1em 0 0.3em 0;
+}
+
+.alarm-item div.event-section {
+ margin-top: 0.1em;
+ margin-bottom: 0.3em;
+}
+
+.alarm-item .alarm-actions {
+ margin-top: 0.4em;
+}
+
+.alarm-item div.alarm-actions a {
+ color: #CC0000;
+ margin-right: 0.8em;
+ text-decoration: none;
+}
+
+a.alarm-action-snooze:after {
+ content: ' â¼';
+ font-size: 10px;
+ color: #666;
+}
+
+#alarm-snooze-dropdown {
+ z-index: 5000;
+}
+
+.ui-dialog-buttonset a.dropdown-link {
+ margin-right: 1em;
+}
+
+.ui-datepicker-calendar .ui-datepicker-today .ui-state-default {
+ border-color: #cccccc;
+ background: #ffffcc;
+ color: #000;
+}
+
+.ui-datepicker-calendar .ui-datepicker-week-col {
+ text-align: right;
+ padding-right: 0.5em;
+}
+
+.ui-datepicker th {
+ padding: 0.3em 0;
+ font-size: 10px;
+}
+
+.ui-datepicker td span,
+.ui-datepicker td a {
+ padding-left: 0.1em;
+}
+
+.ui-autocomplete {
+ max-height: 160px;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.ui-autocomplete .ui-menu-item {
+ white-space: nowrap;
+}
+
+* html .ui-autocomplete {
+ height: 160px;
+}
+
+span.spacer {
+ padding-left: 3em;
+}
+
+#agendaoptions {
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ height: auto;
+ z-index: 200;
+ border: 1px solid #ccc;
+ padding: 2px 5px 1px;
+ font-size: 90%;
+}
+
+#agendaoptions label {
+ color: #444;
+ text-shadow: 1px 1px #eee;
+ padding-right: 0.5em;
+}
+
+#calendar-kolabform {
+ position: relative;
+ padding-top: 24px;
+ margin: 0 -8px;
+ min-width: 660px;
+ min-height: 400px;
+}
+
+#calendar-kolabform div.tabsbar {
+ top: 0;
+ right: 2px;
+ left: 2px;
+ height: 24px;
+}
+
+#calendar-kolabform fieldset.tabbed {
+ background-color: #fff;
+ margin-top: 0;
+}
+
+#calendar-kolabform span.tablink {
+ background-color: #e8e8e9;
+ background-image: -moz-linear-gradient(center top, #f4f4f4, #e6e6e6);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0.0, #f4f4f4), color-stop(1.0, #e6e6e6));
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr=#f4f4f4, endColorstr=#e6e6e6, GradientType=0);
+ height: 24px !important;
+}
+
+#calendar-kolabform span.tablink-selected {
+ background: #fff;
+ height: 25px !important;
+}
+
+#calendar-kolabform span.tablink a,
+#calendar-kolabform span.tablink-selected a {
+ background: none;
+ border: 1px solid #AAAAAA;
+ border-top-left-radius: 2px;
+ border-top-right-radius: 2px;
+ padding: 4px 10px 0 10px;
+ margin-left: 0;
+}
+
+#calendar-kolabform table td.title {
+ font-weight: bold;
+ white-space: nowrap;
+ color: #666;
+ padding-right: 10px;
+}
+
+
+/* fullcalendar style overrides */
+
+.rcube-fc-content {
+ position: absolute !important;
+ top: 37px;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ overflow: hidden;
+}
+
+.fc-event-title {
+ font-weight: bold;
+}
+
+.fc-event-hori .fc-event-title {
+ font-weight: normal;
+ white-space: nowrap;
+}
+
+.fc-event-hori .fc-event-time {
+ white-space: nowrap;
+ font-weight: normal !important;
+ font-size: 10px;
+ padding-right: 0.6em;
+}
+
+.fc-grid .fc-event-time {
+ font-weight: normal !important;
+ padding-right: 0.3em;
+}
+
+.fc-event-cateories {
+ font-style:italic;
+}
+
+div.fc-event-location {
+ font-size: 90%;
+}
+
+.fc-more-link {
+ color: #999;
+ padding-top: 1px;
+ cursor: pointer;
+}
+
+.fc-agenda-slots td div {
+ height: 22px;
+}
+
+.fc-mon, .fc-tue, .fc-wed, .fc-thu, .fc-fri {
+ background-color: #fdfdfd;
+}
+
+.fc-widget-header {
+ background-color: #fff;
+}
+
+.fc-icon-alarms,
+.fc-icon-sensitive,
+.fc-icon-recurring {
+ display: inline-block;
+ width: 11px;
+ height: 11px;
+ background: url(images/eventicons.gif) 0 0 no-repeat;
+ margin-left: 3px;
+ line-height: 10px;
+}
+
+.fc-icon-alarms {
+ background-position: 0 -13px;
+}
+
+.fc-icon-sensitive {
+ background-position: 0 -25px;
+}
+
+.fc-list-section .fc-event {
+ cursor: pointer;
+}
+
+.fc-view-list div.fc-list-header,
+.fc-view-table td.fc-list-header,
+#edit-attendees-table thead td {
+ padding: 3px;
+ background: #dddddd;
+ background-image: -moz-linear-gradient(center top, #f4f4f4, #d2d2d2);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0.00, #f4f4f4), color-stop(1.00, #d2d2d2));
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr=#f4f4f4, endColorstr=#d2d2d2, GradientType=0);
+ font-weight: bold;
+ color: #333;
+}
+
+.fc-view-list .fc-event-skin .fc-event-content {
+ background: #F6F6F6;
+ padding: 2px;
+}
+
+.fc-view-list .fc-event-skin .fc-event-title,
+.fc-view-list .fc-event-skin .fc-event-location {
+ color: #333;
+}
+
+.fc-view-table col.fc-event-location {
+ width: 20%;
+}
+
+.fc-listappend {
+ text-align: center;
+ margin: 1em 0;
+}
+
+.fc-listappend .message {
+ padding: 0.5em;
+ margin-bottom: 0.5em;
+ font-size: 150%;
+ color: #999;
+}
+
+.fc-listappend .formlinks a {
+ font-size: 12px;
+ padding: 0 0.3em;
+}
+
+.fc-event-temp {
+ opacity: 0.4;
+ filter: alpha(opacity=40); /* IE8 */
+}
+
+/* Settings section */
+
+fieldset #calendarcategories div {
+ margin-bottom: 0.3em;
+}
+
+/* Invitation UI in mail */
+
+#messagemenu li a.calendarlink {
+ background-image: url(images/calendars.png);
+ background-position: 7px -109px;
+ background-repeat: no-repeat;
+}
+
+div.calendar-invitebox {
+ min-height: 20px;
+ margin: 5px 8px;
+ padding: 3px 6px 6px 34px;
+ border: 1px solid #C2D071;
+ background: url(images/calendar.png) 6px 5px no-repeat #F7FDCB;
+}
+
+div.calendar-invitebox td.ititle {
+ font-weight: bold;
+ padding-right: 0.5em;
+}
+
+div.calendar-invitebox td.label {
+ color: #666;
+ padding-right: 1em;
+}
+
+#event-rsvp .rsvp-buttons,
+div.calendar-invitebox .rsvp-status,
+div.calendar-invitebox .rsvp-buttons {
+ margin-top: 0.5em;
+}
+
+#event-rsvp input.button,
+div.calendar-invitebox input.button,
+div.calendar-invitebox select {
+ font-size: 11px;
+ margin-right: 0.5em;
+}
+
+div.calendar-invitebox .calendar-select {
+ font-size: 11px;
+ margin-left: 1em;
+}
+
+div.calendar-invitebox .rsvp-status.loading {
+ color: #666;
+ padding: 1px 0 2px 24px;
+ background: url(images/loading_blue.gif) top left no-repeat;
+}
+
+div.calendar-invitebox .rsvp-status.declined,
+div.calendar-invitebox .rsvp-status.tentative,
+div.calendar-invitebox .rsvp-status.accepted {
+ padding: 0 0 1px 22px;
+ background: url(images/attendee-status.gif) 2px -20px no-repeat;
+}
+
+div.calendar-invitebox .rsvp-status.declined {
+ background-position: 2px -40px;
+}
+
+div.calendar-invitebox .rsvp-status.tentative {
+ background-position: 2px -60px;
+}
+
+/* iTIP attend reply page */
+
+.calendaritipattend .centerbox {
+ width: 40em;
+ margin: 80px auto;
+ padding: 10px 10px 10px 90px;
+ border: 1px solid #ccc;
+ box-shadow: 1px 1px 24px #ccc;
+ -moz-box-shadow: 1px 1px 18px #ccc;
+ -webkit-box-shadow: #ccc 1px 1px 18px;
+ background: url(images/invitation.png) 10px 10px no-repeat #fbfbfb;
+}
+
+.calendaritipattend .calendar-invitebox {
+ background: none;
+ padding-left: 0;
+ border: 0;
+ margin: 0 0 2em 0;
+}
+
+.calendaritipattend .calendar-invitebox .rsvp-status {
+ margin-top: 2.5em;
+ font-size: 110%;
+ font-weight: bold;
+}
+
+.calendaritipattend .calendar-invitebox td.title,
+.calendaritipattend .calendar-invitebox td.ititle {
+ font-size: 120%;
+}
+
diff --git a/plugins/calendar/skins/classic/fullcalendar.css b/plugins/calendar/skins/classic/fullcalendar.css
new file mode 100644
index 0000000..17f1b37
--- /dev/null
+++ b/plugins/calendar/skins/classic/fullcalendar.css
@@ -0,0 +1,724 @@
+/*
+ * FullCalendar v1.5.3-rcube-0.7.1 Stylesheet
+ *
+ * Copyright (c) 2011 Adam Shaw
+ * Copyright (c) 2011, Kolab Systems AG
+ * Dual licensed under the MIT and GPL licenses, located in
+ * MIT-LICENSE.txt and GPL-LICENSE.txt respectively.
+ *
+ * Date: Mon Feb 13 23:00:46 2012 +0100
+ *
+ */
+
+
+.fc {
+ direction: ltr;
+ text-align: left;
+ }
+
+.fc table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ }
+
+html .fc,
+.fc table {
+ font-size: 1em;
+ }
+
+.fc td,
+.fc th {
+ padding: 0;
+ vertical-align: top;
+ }
+
+
+
+/* Header
+------------------------------------------------------------------------*/
+
+.fc-header td {
+ white-space: nowrap;
+ }
+
+.fc-header-left {
+ width: 25%;
+ text-align: left;
+ }
+
+.fc-header-center {
+ text-align: center;
+ }
+
+.fc-header-right {
+ width: 25%;
+ text-align: right;
+ }
+
+.fc-header-title {
+ display: inline-block;
+ vertical-align: top;
+ }
+
+.fc-header-title h2 {
+ margin-top: 0;
+ white-space: nowrap;
+ }
+
+.fc .fc-header-space {
+ padding-left: 10px;
+ }
+
+.fc-header .fc-button {
+ margin-bottom: 1em;
+ vertical-align: top;
+ }
+
+/* buttons edges butting together */
+
+.fc-header .fc-button {
+ margin-right: -1px;
+ }
+
+.fc-header .fc-corner-right {
+ margin-right: 1px; /* back to normal */
+ }
+
+.fc-header .ui-corner-right {
+ margin-right: 0; /* back to normal */
+ }
+
+/* button layering (for border precedence) */
+
+.fc-header .fc-state-hover,
+.fc-header .ui-state-hover {
+ z-index: 2;
+ }
+
+.fc-header .fc-state-down {
+ z-index: 3;
+ }
+
+.fc-header .fc-state-active,
+.fc-header .ui-state-active {
+ z-index: 4;
+ }
+
+
+
+/* Content
+------------------------------------------------------------------------*/
+
+.fc-content {
+ clear: both;
+ }
+
+.fc-view {
+ width: 100%; /* needed for view switching (when view is absolute) */
+ overflow: hidden;
+ }
+
+
+
+/* Cell Styles
+------------------------------------------------------------------------*/
+
+.fc-widget-header, /* <th>, usually */
+.fc-widget-content { /* <td>, usually */
+ border: 1px solid #ccc;
+ }
+
+.fc-state-highlight { /* <td> today cell */ /* TODO: add .fc-today to <th> */
+ background: #ffc;
+ }
+
+.fc-cell-overlay { /* semi-transparent rectangle while dragging */
+ background: #9cf;
+ opacity: .2;
+ filter: alpha(opacity=20); /* for IE */
+ }
+
+
+
+/* Buttons
+------------------------------------------------------------------------*/
+
+.fc-button {
+ position: relative;
+ display: inline-block;
+ cursor: pointer;
+ }
+
+.fc-state-default { /* non-theme */
+ border-style: solid;
+ border-width: 1px 0;
+ }
+
+.fc-button-inner {
+ position: relative;
+ float: left;
+ overflow: hidden;
+ }
+
+.fc-state-default .fc-button-inner { /* non-theme */
+ border-style: solid;
+ border-width: 0 1px;
+ }
+
+.fc-button-content {
+ position: relative;
+ float: left;
+ height: 1.9em;
+ line-height: 1.9em;
+ padding: 0 .6em;
+ white-space: nowrap;
+ }
+
+/* icon (for jquery ui) */
+
+.fc-button-content .fc-icon-wrap {
+ position: relative;
+ float: left;
+ top: 50%;
+ }
+
+.fc-button-content .ui-icon {
+ position: relative;
+ float: left;
+ margin-top: -50%;
+ *margin-top: 0;
+ *top: -50%;
+ }
+
+/* gloss effect */
+
+.fc-state-default .fc-button-effect {
+ position: absolute;
+ top: 50%;
+ left: 0;
+ }
+
+.fc-state-default .fc-button-effect span {
+ position: absolute;
+ top: -100px;
+ left: 0;
+ width: 500px;
+ height: 100px;
+ border-width: 100px 0 0 1px;
+ border-style: solid;
+ border-color: #fff;
+ background: #444;
+ opacity: .09;
+ filter: alpha(opacity=9);
+ }
+
+/* button states (determines colors) */
+
+.fc-state-default,
+.fc-state-default .fc-button-inner {
+ border-style: solid;
+ border-color: #ccc #bbb #aaa;
+ background: #F3F3F3;
+ color: #000;
+ }
+
+.fc-state-hover,
+.fc-state-hover .fc-button-inner {
+ border-color: #999;
+ }
+
+.fc-state-down,
+.fc-state-down .fc-button-inner {
+ border-color: #555;
+ background: #777;
+ }
+
+.fc-state-active,
+.fc-state-active .fc-button-inner {
+ border-color: #555;
+ background: #777;
+ color: #fff;
+ }
+
+.fc-state-disabled,
+.fc-state-disabled .fc-button-inner {
+ color: #999;
+ border-color: #ddd;
+ }
+
+.fc-state-disabled {
+ cursor: default;
+ }
+
+.fc-state-disabled .fc-button-effect {
+ display: none;
+ }
+
+
+
+/* Global Event Styles
+------------------------------------------------------------------------*/
+
+.fc-event {
+ border-style: solid;
+ border-width: 0;
+ font-size: .85em;
+ cursor: default;
+ }
+
+a.fc-event,
+.fc-event-draggable {
+ cursor: pointer;
+ }
+
+a.fc-event {
+ text-decoration: none;
+ }
+
+.fc-rtl .fc-event {
+ text-align: right;
+ }
+
+.fc-event-skin {
+ border-color: #36c; /* default BORDER color */
+ background-color: #36c; /* default BACKGROUND color */
+ color: #fff; /* default TEXT color */
+ }
+
+.fc-event-inner {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ border-style: solid;
+ border-width: 0;
+ overflow: hidden;
+ }
+
+.fc-event-time,
+.fc-event-title {
+ padding: 0 1px;
+ }
+
+.fc .ui-resizable-handle { /*** TODO: don't use ui-resizable anymore, change class ***/
+ display: block;
+ position: absolute;
+ z-index: 99999;
+ overflow: hidden; /* hacky spaces (IE6/7) */
+ font-size: 300%; /* */
+ line-height: 50%; /* */
+ }
+
+
+
+/* Horizontal Events
+------------------------------------------------------------------------*/
+
+.fc-event-hori {
+ border-width: 1px 0;
+ margin-bottom: 1px;
+ }
+
+/* resizable */
+
+.fc-event-hori .ui-resizable-e {
+ top: 0 !important; /* importants override pre jquery ui 1.7 styles */
+ right: -3px !important;
+ width: 7px !important;
+ height: 100% !important;
+ cursor: e-resize;
+ }
+
+.fc-event-hori .ui-resizable-w {
+ top: 0 !important;
+ left: -3px !important;
+ width: 7px !important;
+ height: 100% !important;
+ cursor: w-resize;
+ }
+
+.fc-event-hori .ui-resizable-handle {
+ _padding-bottom: 14px; /* IE6 had 0 height */
+ }
+
+
+
+/* Fake Rounded Corners (for buttons and events)
+------------------------------------------------------------*/
+
+.fc-corner-left {
+ margin-left: 1px;
+ }
+
+.fc-corner-left .fc-button-inner,
+.fc-corner-left .fc-event-inner {
+ margin-left: -1px;
+ }
+
+.fc-corner-right {
+ margin-right: 1px;
+ }
+
+.fc-corner-right .fc-button-inner,
+.fc-corner-right .fc-event-inner {
+ margin-right: -1px;
+ }
+
+.fc-corner-top {
+ margin-top: 1px;
+ }
+
+.fc-corner-top .fc-event-inner {
+ margin-top: -1px;
+ }
+
+.fc-corner-bottom {
+ margin-bottom: 1px;
+ }
+
+.fc-corner-bottom .fc-event-inner {
+ margin-bottom: -1px;
+ }
+
+
+
+/* Fake Rounded Corners SPECIFICALLY FOR EVENTS
+-----------------------------------------------------------------*/
+
+.fc-corner-left .fc-event-inner {
+ border-left-width: 1px;
+ }
+
+.fc-corner-right .fc-event-inner {
+ border-right-width: 1px;
+ }
+
+.fc-corner-top .fc-event-inner {
+ border-top-width: 1px;
+ }
+
+.fc-corner-bottom .fc-event-inner {
+ border-bottom-width: 1px;
+ }
+
+
+
+/* Reusable Separate-border Table
+------------------------------------------------------------*/
+
+table.fc-border-separate {
+ border-collapse: separate;
+ }
+
+.fc-border-separate th,
+.fc-border-separate td {
+ border-width: 1px 0 0 1px;
+ }
+
+.fc-border-separate th.fc-last,
+.fc-border-separate td.fc-last {
+ border-right-width: 1px;
+ }
+
+.fc-border-separate tr.fc-last th,
+.fc-border-separate tr.fc-last td {
+ border-bottom-width: 1px;
+ }
+
+.fc-border-separate tbody tr.fc-first td,
+.fc-border-separate tbody tr.fc-first th {
+ border-top-width: 0;
+ }
+
+
+
+/* Month View, Basic Week View, Basic Day View
+------------------------------------------------------------------------*/
+
+.fc-grid th {
+ text-align: center;
+ }
+
+.fc-grid .fc-day-number {
+ float: right;
+ padding: 0 2px;
+ }
+
+.fc-grid .fc-other-month .fc-day-number {
+ opacity: 0.3;
+ filter: alpha(opacity=30); /* for IE */
+ /* opacity with small font can sometimes look too faded
+ might want to set the 'color' property instead
+ making day-numbers bold also fixes the problem */
+ }
+
+.fc-grid .fc-day-content {
+ clear: both;
+ padding: 2px 2px 1px; /* distance between events and day edges */
+ }
+
+/* event styles */
+
+.fc-grid .fc-event-time {
+ font-weight: bold;
+ }
+
+/* right-to-left */
+
+.fc-rtl .fc-grid .fc-day-number {
+ float: left;
+ }
+
+.fc-rtl .fc-grid .fc-event-time {
+ float: right;
+ }
+
+.fc-more-link {
+ font-size: 0.85em;
+ white-space: nowrap;
+ text-decoration: none;
+ cursor: pointer;
+ padding: 1px;
+}
+
+/* Agenda Week View, Agenda Day View
+------------------------------------------------------------------------*/
+
+.fc-agenda table {
+ border-collapse: separate;
+ }
+
+.fc-agenda-days th {
+ text-align: center;
+ }
+
+.fc-agenda .fc-agenda-axis {
+ width: 50px;
+ padding: 0 4px;
+ vertical-align: middle;
+ text-align: right;
+ white-space: nowrap;
+ font-weight: normal;
+ }
+
+.fc-agenda .fc-day-content {
+ padding: 2px 2px 1px;
+ }
+
+/* make axis border take precedence */
+
+.fc-agenda-days .fc-agenda-axis {
+ border-right-width: 1px;
+ }
+
+.fc-agenda-days .fc-col0 {
+ border-left-width: 0;
+ }
+
+/* all-day area */
+
+.fc-agenda-allday th {
+ border-width: 0 1px;
+ }
+
+.fc-agenda-allday .fc-day-content {
+ min-height: 34px; /* TODO: doesnt work well in quirksmode */
+ _height: 34px;
+ }
+
+/* divider (between all-day and slots) */
+
+.fc-agenda-divider-inner {
+ height: 2px;
+ overflow: hidden;
+ }
+
+.fc-widget-header .fc-agenda-divider-inner {
+ background: #eee;
+ }
+
+/* slot rows */
+
+.fc-agenda-slots th {
+ border-width: 1px 1px 0;
+ }
+
+.fc-agenda-slots td {
+ border-width: 1px 0 0;
+ background: none;
+ }
+
+.fc-agenda-slots td div {
+ height: 20px;
+ }
+
+.fc-agenda-slots tr.fc-slot0 th,
+.fc-agenda-slots tr.fc-slot0 td {
+ border-top-width: 0;
+ }
+
+.fc-agenda-slots tr.fc-minor th,
+.fc-agenda-slots tr.fc-minor td {
+ border-top-style: dotted;
+ }
+
+.fc-agenda-slots tr.fc-minor th.ui-widget-header {
+ *border-top-style: solid; /* doesn't work with background in IE6/7 */
+ }
+
+
+
+/* Vertical Events
+------------------------------------------------------------------------*/
+
+.fc-event-vert {
+ border-width: 0 1px;
+ }
+
+.fc-event-vert .fc-event-head,
+.fc-event-vert .fc-event-content {
+ position: relative;
+ z-index: 2;
+ width: 100%;
+ overflow: hidden;
+ }
+
+.fc-event-vert .fc-event-time {
+ white-space: nowrap;
+ font-size: 10px;
+ }
+
+.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay */
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: #fff;
+ opacity: .3;
+ filter: alpha(opacity=30);
+ }
+
+.fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */
+.fc-select-helper .fc-event-bg {
+ display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */
+ }
+
+/* resizable */
+
+.fc-event-vert .ui-resizable-s {
+ bottom: 0 !important; /* importants override pre jquery ui 1.7 styles */
+ width: 100% !important;
+ height: 8px !important;
+ overflow: hidden !important;
+ line-height: 8px !important;
+ font-size: 11px !important;
+ font-family: monospace;
+ text-align: center;
+ cursor: s-resize;
+ }
+
+.fc-agenda .ui-resizable-resizing { /* TODO: better selector */
+ _overflow: hidden;
+ }
+
+.fc-timeline {
+ position: absolute;
+ width: 100%;
+ left: 0;
+ margin: 0;
+ padding: 0;
+ border: none;
+ border-top: 2px solid #3ec400;
+ z-index: 999;
+}
+
+/* List view (by bruederli at kolabsys.com)
+------------------------------------------------------------------------*/
+
+.fc-view-list,
+.fc-view-table {
+ border: 1px solid #ccc;
+ width: auto;
+}
+
+.fc-view-list .fc-list-header,
+.fc-view-table td.fc-list-header {
+ border-width: 0;
+ border-bottom-width: 1px;
+ padding: 3px 5px;
+}
+
+.fc-view-table .fc-first td.fc-list-header {
+ border-top-width: 0;
+}
+
+.fc-list-section {
+ padding: 4px 2px;
+ border-width: 0;
+ border-bottom-width: 1px;
+}
+
+.fc-view-list .fc-last {
+ border-bottom-width: 0;
+}
+
+.fc-list-section .fc-event {
+ position: relative;
+ margin: 1px 2px 3px 2px;
+}
+
+.fc-view-table tr.fc-event td {
+ padding: 2px;
+ border-bottom: 1px solid #ccc;
+}
+
+.fc-view-table tr.fc-event td.fc-event-handle {
+ padding: 3px 8px 3px 3px;
+}
+
+.fc-view-table .fc-event-handle .fc-event-skin {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+}
+
+.fc-view-table .fc-event-handle .fc-event-inner {
+ display: block;
+ width: 8px;
+ height: 10px;
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+}
+
+.fc-view-table table {
+ table-layout: fixed;
+ width: 100%;
+}
+
+.fc-view-table col.fc-event-handle {
+ width: 18px;
+}
+
+.fc-event-handle .fc-event-inner {
+ border-color: inherit;
+ background-color: inherit;
+}
+
+.fc-view-table col.fc-event-date {
+ width: 7em;
+}
+
+.fc-view-table .fc-list-day col.fc-event-date {
+ width: 1px;
+}
+
+.fc-view-table col.fc-event-time {
+ width: 8em;
+}
+
+.fc-view-table td.fc-event-date,
+.fc-view-table td.fc-event-time {
+ white-space: nowrap;
+ padding-right: 1em;
+}
+
diff --git a/plugins/calendar/skins/classic/iehacks.css b/plugins/calendar/skins/classic/iehacks.css
new file mode 100644
index 0000000..831266f
--- /dev/null
+++ b/plugins/calendar/skins/classic/iehacks.css
@@ -0,0 +1,88 @@
+/* CSS hacks for IE 6/7 */
+
+#main {
+ width: expression(Math.max(300, parseInt(document.documentElement.clientWidth)-10)+'px');
+ height: expression(Math.max(300, parseInt(document.documentElement.clientHeight)-100)+'px');
+}
+
+#sidebar,
+#sidebartoggle {
+ height: expression((parseInt(this.parentNode.offsetHeight)-37)+'px');
+}
+
+#calendar {
+ width: expression((parseInt(this.parentNode.offsetWidth)-parseInt(document.getElementById('sidebartoggle').offsetWidth)-parseInt(document.getElementById('sidebartoggle').offsetLeft)-4)+'px');
+ height: expression(parseInt(this.parentNode.offsetHeight)+'px');
+}
+
+#calendars {
+ height: expression((parseInt(this.parentNode.offsetHeight)-220)+'px');
+}
+
+#agendaoptions {
+ width: expression((parseInt(this.parentNode.offsetWidth)-12)+'px');
+}
+
+#calendartoolbar a.buttonPas {
+ filter: alpha(opacity=35);
+}
+
+html #calendartoolbar a.button,
+html #calendartoolbar a.buttonPas {
+ background-image: url(images/toolbar.gif);
+}
+
+#datepicker a.ui-priority-secondary {
+ filter: alpha(opacity=40);
+}
+
+#calendarslist li span {
+ background-image: url(images/calendars.gif);
+}
+
+#datepicker .ui-widget-header {
+ width: 102%;
+}
+
+#eventshow.sensitivity-private {
+ background-image: url(images/badge_private.gif);
+}
+
+#eventshow.sensitivity-confidential {
+ background-image: url(images/badge_confidential.gif);
+}
+
+.fc-day-content {
+ cursor: default;
+}
+
+.fc-header-title h2 {
+ font-size: 16px;
+}
+
+.fc-event-temp .fc-event-bg {
+ display: none; /* nested opacity filters while dragging don't work */
+}
+
+#schedule-event-time {
+ filter: alpha(opacity=40);
+}
+
+#eventfreebusy .schedule-buttons,
+#edit-attendees-form #edit-attendee-schedule {
+ right: 0.6em;
+}
+
+#schedule-freebusy-times td.all-busy,
+#schedule-freebusy-times td.all-tentative,
+#schedule-freebusy-times td.all-out-of-office {
+ background-image: url('images/freebusy-colors.gif');
+}
+
+#schedule-freebusy-times tr.times td.allday {
+ width: expression(Math.max(60, parseInt(this.offsetWidth))+'px');
+}
+
+.ui-dialog .ui-dialog-titlebar {
+ width: expression((parseInt(this.parentNode.offsetWidth)-26)+'px');
+}
diff --git a/plugins/calendar/skins/classic/images/attendee-status.gif b/plugins/calendar/skins/classic/images/attendee-status.gif
new file mode 100644
index 0000000..5c08aae
Binary files /dev/null and b/plugins/calendar/skins/classic/images/attendee-status.gif differ
diff --git a/plugins/calendar/skins/classic/images/badge_confidential.gif b/plugins/calendar/skins/classic/images/badge_confidential.gif
new file mode 100644
index 0000000..ce6b2a0
Binary files /dev/null and b/plugins/calendar/skins/classic/images/badge_confidential.gif differ
diff --git a/plugins/calendar/skins/classic/images/badge_confidential.png b/plugins/calendar/skins/classic/images/badge_confidential.png
new file mode 100644
index 0000000..e12e788
Binary files /dev/null and b/plugins/calendar/skins/classic/images/badge_confidential.png differ
diff --git a/plugins/calendar/skins/classic/images/badge_private.gif b/plugins/calendar/skins/classic/images/badge_private.gif
new file mode 100644
index 0000000..900ed73
Binary files /dev/null and b/plugins/calendar/skins/classic/images/badge_private.gif differ
diff --git a/plugins/calendar/skins/classic/images/badge_private.png b/plugins/calendar/skins/classic/images/badge_private.png
new file mode 100644
index 0000000..acf3207
Binary files /dev/null and b/plugins/calendar/skins/classic/images/badge_private.png differ
diff --git a/plugins/calendar/skins/classic/images/calendar-blue.png b/plugins/calendar/skins/classic/images/calendar-blue.png
new file mode 100644
index 0000000..95c9452
Binary files /dev/null and b/plugins/calendar/skins/classic/images/calendar-blue.png differ
diff --git a/plugins/calendar/skins/classic/images/calendar.gif b/plugins/calendar/skins/classic/images/calendar.gif
new file mode 100644
index 0000000..4b25de0
Binary files /dev/null and b/plugins/calendar/skins/classic/images/calendar.gif differ
diff --git a/plugins/calendar/skins/classic/images/calendar.png b/plugins/calendar/skins/classic/images/calendar.png
new file mode 100644
index 0000000..caab8a3
Binary files /dev/null and b/plugins/calendar/skins/classic/images/calendar.png differ
diff --git a/plugins/calendar/skins/classic/images/calendars.gif b/plugins/calendar/skins/classic/images/calendars.gif
new file mode 100644
index 0000000..cf12ebd
Binary files /dev/null and b/plugins/calendar/skins/classic/images/calendars.gif differ
diff --git a/plugins/calendar/skins/classic/images/calendars.png b/plugins/calendar/skins/classic/images/calendars.png
new file mode 100644
index 0000000..feb3945
Binary files /dev/null and b/plugins/calendar/skins/classic/images/calendars.png differ
diff --git a/plugins/calendar/skins/classic/images/eventicons.gif b/plugins/calendar/skins/classic/images/eventicons.gif
new file mode 100644
index 0000000..7adbdeb
Binary files /dev/null and b/plugins/calendar/skins/classic/images/eventicons.gif differ
diff --git a/plugins/calendar/skins/classic/images/export.png b/plugins/calendar/skins/classic/images/export.png
new file mode 100644
index 0000000..d02781d
Binary files /dev/null and b/plugins/calendar/skins/classic/images/export.png differ
diff --git a/plugins/calendar/skins/classic/images/freebusy-colors.gif b/plugins/calendar/skins/classic/images/freebusy-colors.gif
new file mode 100644
index 0000000..699f4b9
Binary files /dev/null and b/plugins/calendar/skins/classic/images/freebusy-colors.gif differ
diff --git a/plugins/calendar/skins/classic/images/freebusy-colors.png b/plugins/calendar/skins/classic/images/freebusy-colors.png
new file mode 100644
index 0000000..ca37cd0
Binary files /dev/null and b/plugins/calendar/skins/classic/images/freebusy-colors.png differ
diff --git a/plugins/calendar/skins/classic/images/invitation.png b/plugins/calendar/skins/classic/images/invitation.png
new file mode 100644
index 0000000..f3df83a
Binary files /dev/null and b/plugins/calendar/skins/classic/images/invitation.png differ
diff --git a/plugins/calendar/skins/classic/images/listheader.gif b/plugins/calendar/skins/classic/images/listheader.gif
new file mode 100644
index 0000000..bf77a11
Binary files /dev/null and b/plugins/calendar/skins/classic/images/listheader.gif differ
diff --git a/plugins/calendar/skins/classic/images/loading_blue.gif b/plugins/calendar/skins/classic/images/loading_blue.gif
new file mode 100644
index 0000000..2ea6b19
Binary files /dev/null and b/plugins/calendar/skins/classic/images/loading_blue.gif differ
diff --git a/plugins/calendar/skins/classic/images/minicolors-all.png b/plugins/calendar/skins/classic/images/minicolors-all.png
new file mode 100644
index 0000000..001ed88
Binary files /dev/null and b/plugins/calendar/skins/classic/images/minicolors-all.png differ
diff --git a/plugins/calendar/skins/classic/images/minicolors-handles.gif b/plugins/calendar/skins/classic/images/minicolors-handles.gif
new file mode 100644
index 0000000..9aa9f75
Binary files /dev/null and b/plugins/calendar/skins/classic/images/minicolors-handles.gif differ
diff --git a/plugins/calendar/skins/classic/images/preview.png b/plugins/calendar/skins/classic/images/preview.png
new file mode 100644
index 0000000..75f43aa
Binary files /dev/null and b/plugins/calendar/skins/classic/images/preview.png differ
diff --git a/plugins/calendar/skins/classic/images/print.png b/plugins/calendar/skins/classic/images/print.png
new file mode 100644
index 0000000..52dd67e
Binary files /dev/null and b/plugins/calendar/skins/classic/images/print.png differ
diff --git a/plugins/calendar/skins/classic/images/spacer.gif b/plugins/calendar/skins/classic/images/spacer.gif
new file mode 100644
index 0000000..c749aaf
Binary files /dev/null and b/plugins/calendar/skins/classic/images/spacer.gif differ
diff --git a/plugins/calendar/skins/classic/images/toggle.gif b/plugins/calendar/skins/classic/images/toggle.gif
new file mode 100644
index 0000000..d3be86f
Binary files /dev/null and b/plugins/calendar/skins/classic/images/toggle.gif differ
diff --git a/plugins/calendar/skins/classic/images/toolbar.gif b/plugins/calendar/skins/classic/images/toolbar.gif
new file mode 100644
index 0000000..2cf2693
Binary files /dev/null and b/plugins/calendar/skins/classic/images/toolbar.gif differ
diff --git a/plugins/calendar/skins/classic/images/toolbar.png b/plugins/calendar/skins/classic/images/toolbar.png
new file mode 100644
index 0000000..94beddb
Binary files /dev/null and b/plugins/calendar/skins/classic/images/toolbar.png differ
diff --git a/plugins/calendar/skins/classic/jquery.miniColors.css b/plugins/calendar/skins/classic/jquery.miniColors.css
new file mode 100644
index 0000000..dc7c4a7
--- /dev/null
+++ b/plugins/calendar/skins/classic/jquery.miniColors.css
@@ -0,0 +1,106 @@
+.miniColors-trigger {
+ height: 22px;
+ width: 22px;
+ background: url('images/minicolors-all.png') -170px 0 no-repeat;
+ vertical-align: middle;
+ margin: 0 .25em;
+ display: inline-block;
+ outline: none;
+}
+
+.miniColors-selector {
+ position: absolute;
+ width: 175px;
+ height: 150px;
+ background: #FFF;
+ border: solid 1px #BBB;
+ -moz-box-shadow: 0 0 6px rgba(0, 0, 0, .25);
+ -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, .25);
+ box-shadow: 0 0 6px rgba(0, 0, 0, .25);
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ padding: 5px;
+ z-index: 999999;
+}
+
+.miniColors-selector.black {
+ background: #000;
+ border-color: #000;
+}
+
+.miniColors-colors {
+ position: absolute;
+ top: 5px;
+ left: 5px;
+ width: 150px;
+ height: 150px;
+ background: url('images/minicolors-all.png') top left no-repeat;
+ cursor: crosshair;
+}
+
+.miniColors-hues {
+ position: absolute;
+ top: 5px;
+ left: 160px;
+ width: 20px;
+ height: 150px;
+ background: url('images/minicolors-all.png') -150px 0 no-repeat;
+ cursor: crosshair;
+}
+
+.miniColors-colorPicker {
+ position: absolute;
+ width: 11px;
+ height: 11px;
+ background: url('images/minicolors-all.png') -170px -28px no-repeat;
+}
+
+.miniColors-huePicker {
+ position: absolute;
+ left: -3px;
+ width: 26px;
+ height: 3px;
+ background: url('images/minicolors-all.png') -170px -24px no-repeat;
+ overflow: hidden;
+}
+
+.miniColors-presets {
+ position: absolute;
+ left: 185px;
+ top: 5px;
+ width: 60px;
+}
+
+.miniColors-colorPreset {
+ float: left;
+ width: 18px;
+ height: 15px;
+ margin: 2px;
+ border: 1px solid #333;
+ cursor: pointer;
+}
+
+.miniColors-colorPreset-active {
+ border: 2px dotted #666;
+ margin: 1px;
+}
+
+/* Hacks for IE6/7 */
+
+* html .miniColors-colors {
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='plugins/calendar/skins/default/images/minicolors-all.png', sizingMethod='crop');
+}
+
+* html .miniColors-colorPicker {
+ background: url('images/minicolors-handles.gif') 0 -28px no-repeat;
+}
+
+* html .miniColors-huePicker {
+ background: url('images/minicolors-handles.gif') 0 -24px no-repeat;
+}
+
+* html .miniColors-trigger {
+ background: url('images/minicolors-handles.gif') 0 0 no-repeat;
+}
diff --git a/plugins/calendar/skins/classic/print.css b/plugins/calendar/skins/classic/print.css
new file mode 100644
index 0000000..3c9bd71
--- /dev/null
+++ b/plugins/calendar/skins/classic/print.css
@@ -0,0 +1,208 @@
+/*** Printing styles for Calendar plugin ***/
+
+body {
+ margin: 0;
+ color: #000;
+ background: #fff;
+}
+
+body, td, th, div, p, h3, select, input, textarea {
+ font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+ font-size: 8pt;
+}
+
+#calendar {
+ position: relative;
+ top: 0;
+ left: 0;
+ height: auto;
+ margin: 5em auto 0 auto;
+ overflow: visible;
+}
+
+#calendar .fc-header-right {
+ padding-right: 0;
+}
+
+#printconfig {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ z-index: 10000;
+ padding: 0.5em;
+ background: #ebebeb;
+ border-bottom: 1px solid #999;
+ box-shadow: 0 3px 4px #ccc;
+ -moz-box-shadow: 0 3px 4px #ccc;
+ -webkit-box-shadow: 0 3px 4px #ccc;
+}
+
+#printconfig .prop {
+ padding-right: 2em;
+}
+
+#message {
+ position: absolute;
+ top: 5.5em;
+ left: 1em;
+}
+
+#message div.loading {
+ color: #666;
+ font-style: italic;
+}
+
+#calendarlist {
+ list-style-type: square;
+ margin: 2em 0;
+ padding-left: 1em;
+}
+
+#calendarlist li {
+ float: left;
+ padding-left: 0;
+ padding-right: 3em;
+ margin-left: 0;
+ font-weight: bold;
+}
+
+#calendarlist input {
+ display: none;
+}
+
+.calwidth {
+ width: 700px;
+ margin: 0 auto;
+}
+
+.rightalign {
+ float: right;
+ padding-top: 0.3em;
+}
+
+ at media print {
+ .noprint,
+ .fc-header-right span {
+ display: none;
+ }
+
+ #calendar {
+ margin-top: 0;
+ }
+}
+
+/* fullcalendar style overrides */
+
+.fc-view {
+ overflow: visible;
+}
+
+.fc-event-skin,
+.fc-event-inner .fc-event-skin {
+ color: black;
+ background-color: #fff !important;
+}
+
+.fc-event-title {
+ font-weight: bold;
+}
+
+.fc-event-hori .fc-event-title {
+ font-weight: normal;
+ white-space: nowrap;
+}
+
+.fc-event-hori .fc-event-time {
+ white-space: nowrap;
+ font-weight: normal !important;
+ font-size: 10px;
+ padding-right: 0.6em;
+}
+
+.fc-grid .fc-event-time {
+ font-weight: normal !important;
+ padding-right: 0.3em;
+}
+
+.fc-event-cateories {
+ font-style: italic;
+}
+
+div.fc-event-location {
+ font-size: 90%;
+}
+
+.fc-agenda-slots td div {
+ height: 1.4em;
+}
+
+.fc-widget-header,
+.fc-mon, .fc-tue, .fc-wed, .fc-thu, .fc-fri {
+ background-color: #fff;
+}
+
+.fc-widget-header, .fc-widget-content {
+ border-color: #ccc;
+}
+
+.fc-icon-alarms,
+.fc-icon-recurring {
+ display: inline-block;
+ width: 11px;
+ height: 11px;
+ background: url('images/eventicons.gif') 0 0 no-repeat;
+ margin-left: 3px;
+ line-height: 10px;
+}
+
+.fc-icon-alarms {
+ background-position: 0 -13px;
+}
+
+.fc-view-list, .fc-view-table {
+ border: 0;
+}
+
+.fc-view-list div.fc-list-header,
+.fc-view-table td.fc-list-header {
+ padding: 0.3em;
+ background: #fff;
+ font-weight: bold;
+ font-size: 1.2em;
+ color: #333;
+ border-color: #333;
+ border-style: solid;
+ border-width: 1px 0;
+ filter: none;
+}
+
+.fc-list-section .fc-event {
+ cursor: auto;
+}
+
+.fc-view-table tr.fc-event td,
+.fc-view-table tr.fc-event td.fc-event-handle {
+ border-color: #999;
+ padding-top: 0.5em;
+ padding-bottom: 0.5em;
+}
+
+.fc-view-table tr.fc-last td {
+ border: 0;
+}
+
+.fc-view-table tr.fc-event .fc-event-description {
+ padding-left: 2em;
+ padding-top: 0em;
+}
+
+.fc-event-vert .fc-event-description {
+ font-size: 90%;
+ font-style: italic;
+}
+
+
+.fc-view-table col.fc-event-location {
+ width: 20%;
+}
diff --git a/plugins/calendar/skins/classic/print.iehacks.css b/plugins/calendar/skins/classic/print.iehacks.css
new file mode 100644
index 0000000..986f004
--- /dev/null
+++ b/plugins/calendar/skins/classic/print.iehacks.css
@@ -0,0 +1,25 @@
+/* CSS hacks for IE 6/7 */
+
+#calendar {
+ top: 5em;
+}
+
+.calwidth {
+ width: 172mm;
+}
+
+.fc-header-title h2 {
+ font-size: 16px;
+}
+
+#calendarlist li {
+ float: none;
+ padding: 0;
+ margin-left: 1em;
+}
+
+ at media print {
+ #calendar {
+ top: 0;
+ }
+}
\ No newline at end of file
diff --git a/plugins/calendar/skins/classic/templates/attachment.html b/plugins/calendar/skins/classic/templates/attachment.html
new file mode 100644
index 0000000..34d4da6
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/attachment.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="extwin">
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="partheader">
+<roundcube:object name="plugin.attachmentcontrols" cellpadding="2" cellspacing="0" />
+
+<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>]
+</div>
+</div>
+
+
+<div id="attachmentcontainer">
+<roundcube:object name="plugin.attachmentframe" id="attachmentframe" width="100%" height="100%" />
+</div>
+
+</body>
+</html>
+
diff --git a/plugins/calendar/skins/classic/templates/calendar.html b/plugins/calendar/skins/classic/templates/calendar.html
new file mode 100644
index 0000000..a22056d
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/calendar.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="./plugins/calendar/skins/default/iehacks.css" /><![endif]-->
+</head>
+<body class="calendarmain">
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+
+<div id="main">
+ <div id="calendarsidebar">
+ <div id="datepicker"></div>
+ <div id="calendars" style="visibility:hidden">
+ <div class="boxtitle"><roundcube:label name="calendar.calendars" /></div>
+ <div class="boxlistcontent">
+ <roundcube:object name="plugin.calendar_list" id="calendarslist" />
+ </div>
+ <div class="boxfooter">
+ <roundcube:button command="calendar-create" type="link" title="calendar.createcalendar" class="buttonPas addgroup" classAct="button addgroup" content=" " />
+ <roundcube:button name="calendaroptionslink" id="calendaroptionslink" type="link" title="calendaractions" class="button groupactions" onclick="rcmail_ui.show_popup('calendaroptions');return false" content=" " />
+ </div>
+ </div>
+ </div>
+ <div id="calendarsidebartoggle"></div>
+ <div id="calendar">
+ <roundcube:object name="plugin.angenda_options" class="boxfooter" id="agendaoptions" />
+ </div>
+</div>
+
+<div id="calendaroptionsmenu" class="popupmenu">
+ <ul>
+ <li><roundcube:button command="calendar-edit" label="calendar.edit" classAct="active" /></li>
+ <li><roundcube:button command="calendar-remove" label="calendar.remove" classAct="active" /></li>
+ <li><roundcube:button command="events-import" label="calendar.importevents" classAct="active" /></li>
+ <li><roundcube:button command="calendar-showurl" label="calendar.showurl" classAct="active" /></li>
+ <roundcube:if condition="env:calendar_driver == 'kolab'" />
+ <li class="separator_above"><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li>
+ <roundcube:endif />
+ </ul>
+</div>
+
+<div id="eventshow" class="uidialog">
+ <h1 id="event-title">Event Title</h1>
+ <div class="event-section" id="event-location">Location</div>
+ <div class="event-section" id="event-date">From-To</div>
+ <div class="event-section" id="event-description">
+ <h5 class="label"><roundcube:label name="calendar.description" /></h5>
+ <div class="event-text"></div>
+ </div>
+ <div class="event-section" id="event-repeat">
+ <h5 class="label"><roundcube:label name="calendar.repeat" /></h5>
+ <div class="event-text"></div>
+ </div>
+ <div class="event-section" id="event-alarm">
+ <h5 class="label"><roundcube:label name="calendar.alarms" /></h5>
+ <div class="event-text"></div>
+ </div>
+ <div class="event-section" id="event-attendees">
+ <h5 class="label"><roundcube:label name="calendar.tabattendees" /></h5>
+ <div class="event-text"></div>
+ </div>
+ <div class="event-line" id="event-calendar">
+ <label><roundcube:label name="calendar.calendar" /></label>
+ <span class="event-text">Default</span>
+ </div>
+ <div class="event-line" id="event-category">
+ <label><roundcube:label name="calendar.category" /></label>
+ <span class="event-text"></span>
+ </div>
+ <div class="event-line" id="event-free-busy">
+ <label><roundcube:label name="calendar.freebusy" /></label>
+ <span class="event-text"></span>
+ </div>
+ <div class="event-line" id="event-priority">
+ <label><roundcube:label name="calendar.priority" /></label>
+ <span class="event-text"></span>
+ </div>
+ <div class="event-line" id="event-sensitivity">
+ <label><roundcube:label name="calendar.sensitivity" /></label>
+ <span class="event-text"></span>
+ </div>
+ <div class="event-section" id="event-attachments">
+ <label><roundcube:label name="attachments" /></label>
+ <div class="event-text attachments-list"></div>
+ </div>
+
+ <roundcube:object name="plugin.event_rsvp_buttons" id="event-rsvp" style="display:none" />
+</div>
+
+<roundcube:include file="/templates/eventedit.html" />
+
+<div id="eventfreebusy" class="uidialog">
+ <roundcube:object name="plugin.attendees_freebusy_table" id="attendees-freebusy-table" cellspacing="0" cellpadding="0" border="0" />
+
+ <div class="schedule-options">
+
+ <div class="schedule-buttons">
+ <button id="shedule-freebusy-prev" title="<roundcube:label name='previouspage' />">◄</button><button id="shedule-freebusy-next" title="<roundcube:label name='nextpage' />">►</button>
+ </div>
+ </div>
+
+ <div style="float:left; width:28em">
+ <div class="form-section">
+ <label for="schedule-startdate"><roundcube:label name="calendar.start" /></label>
+ <input type="text" name="startdate" size="10" id="schedule-startdate" disabled="true" />
+ <input type="text" name="starttime" size="6" id="schedule-starttime" disabled="true" />
+ </div>
+ <div class="form-section">
+ <label for="schedule-enddate"><roundcube:label name="calendar.end" /></label>
+ <input type="text" name="enddate" size="10" id="schedule-enddate" disabled="true" />
+ <input type="text" name="endtime" size="6" id="schedule-endtime" disabled="true" />
+ </div>
+ </div>
+ <div style="float:left">
+ <div class="schedule-find-buttons">
+ <button id="shedule-find-prev">◄ <roundcube:label name="calendar.prevslot" /></button>
+ <button id="shedule-find-next"><roundcube:label name="calendar.nextslot" /> ►</button>
+ </div>
+ <div class="schedule-options">
+ <label><input type="checkbox" id="schedule-freebusy-workinghours" value="1" /><roundcube:label name="calendar.onlyworkinghours" /></label>
+ </div>
+ </div>
+ <br style="clear:both;" />
+
+ <roundcube:include file="/templates/freebusylegend.html" />
+ <div class="attendees-list">
+ <span class="attendee organizer"><roundcube:label name="calendar.roleorganizer" /></span>
+ <span class="attendee req-participant"><roundcube:label name="calendar.rolerequired" /></span>
+ <span class="attendee opt-participant"><roundcube:label name="calendar.roleoptional" /></span>
+ <span class="attendee chair"><roundcube:label name="calendar.roleresource" /></span>
+ </div>
+</div>
+
+<div id="calendarform" class="uidialog">
+ <roundcube:label name="loading" />
+</div>
+
+<div id="eventsimport" class="uidialog">
+ <roundcube:object name="plugin.events_import_form" id="events-import-form" uploadFieldSize="30" />
+</div>
+
+<div id="calendarurlbox" class="uidialog">
+ <p><roundcube:label name="calendar.showurldescription" /></p>
+ <textarea id="calfeedurl" rows="2" readonly="readonly"></textarea>
+</div>
+
+<div id="alarm-snooze-dropdown" class="popupmenu">
+ <roundcube:object name="plugin.snooze_select" type="ul" />
+</div>
+
+<div id="calendartoolbar">
+ <roundcube:button command="addevent" type="link" class="buttonPas addevent" classAct="button addevent" classSel="button addeventSel" title="calendar.new_event" content=" " />
+ <roundcube:button command="print" type="link" class="buttonPas print" classAct="button print" classSel="button printSel" title="calendar.print" content=" " />
+ <roundcube:button command="export" type="link" class="buttonPas export" classAct="button export" classSel="button exportSel" title="calendar.export" content=" " />
+ <roundcube:container name="toolbar" id="calendartoolbar" />
+</div>
+
+<div id="quicksearchbar">
+<roundcube:button name="searchmenulink" id="searchmenulink" image="/images/icons/glass.png" />
+<roundcube:object name="plugin.searchform" id="quicksearchbox" />
+<roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" />
+</div>
+
+<roundcube:object name="plugin.calendar_css" />
+
+<script type="text/javascript">
+
+// use skin functions to handle popup-menus
+rcube_init_mail_ui();
+rcmail_ui.popups.calendaroptions = { id:'calendaroptionsmenu', above:1, obj:$('#calendaroptionsmenu') };
+
+$(document).ready(function(e){
+ // initialize sidebar toggle
+ $('#calendarsidebartoggle').click(function() {
+ var width = $(this).data('sidebarwidth');
+ var offset = $(this).data('offset');
+ var $sidebar = $('#calendarsidebar'), time = 250;
+
+ if ($sidebar.is(':visible')) {
+ $sidebar.animate({ left:'-'+(width+10)+'px' }, time, function(){ $('#calendarsidebar').hide(); });
+ $(this).animate({ left:'8px'}, time, function(){ $('#calendarsidebartoggle').addClass('sidebarclosed') });
+ $('#calendar').animate({ left:'20px'}, time, function(){ $(this).fullCalendar('render'); });
+ }
+ else {
+ $sidebar.show().animate({ left:'10px' }, time);
+ $(this).animate({ left:offset+'px'}, time, function(){ $('#calendarsidebartoggle').removeClass('sidebarclosed'); });
+ $('#calendar').animate({ left:(width+16)+'px'}, time, function(){ $(this).fullCalendar('render'); });
+ }
+ })
+ .data('offset', $('#calendarsidebartoggle').position().left)
+ .data('sidebarwidth', $('#calendarsidebar').width() + $('#calendarsidebar').position().left);
+});
+
+</script>
+
+</body>
+</html>
diff --git a/plugins/calendar/skins/classic/templates/eventedit.html b/plugins/calendar/skins/classic/templates/eventedit.html
new file mode 100644
index 0000000..3548478
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/eventedit.html
@@ -0,0 +1,103 @@
+<div id="eventedit" class="uidialog">
+ <form id="eventtabs" action="#" method="post" enctype="multipart/form-data">
+ <ul>
+ <li><a href="#event-tab-1"><roundcube:label name="calendar.tabsummary" /></a></li>
+ <li id="edit-tab-recurrence"><a href="#event-tab-2"><roundcube:label name="calendar.tabrecurrence" /></a></li>
+ <li id="edit-tab-attendees"><a href="#event-tab-3"><roundcube:label name="calendar.tabattendees" /></a></li>
+ <li id="edit-tab-attachments"><a href="#event-tab-4"><roundcube:label name="calendar.tabattachments" /></a></li>
+ </ul>
+ <!-- basic info -->
+ <div id="event-tab-1">
+ <div class="event-section">
+ <label for="edit-title"><roundcube:label name="calendar.title" /></label>
+ <br />
+ <input type="text" class="text" name="title" id="edit-title" size="40" />
+ </div>
+ <div class="event-section">
+ <label for="edit-location"><roundcube:label name="calendar.location" /></label>
+ <br />
+ <input type="text" class="text" name="location" id="edit-location" size="40" />
+ </div>
+ <div class="event-section">
+ <label for="edit-description"><roundcube:label name="calendar.description" /></label>
+ <br />
+ <textarea name="description" id="edit-description" class="text" rows="5" cols="40"></textarea>
+ </div>
+ <div class="event-section">
+ <label style="float:right;padding-right:0.5em"><input type="checkbox" name="allday" id="edit-allday" value="1" /><roundcube:label name="calendar.all-day" /></label>
+ <label for="edit-startdate"><roundcube:label name="calendar.start" /></label>
+ <input type="text" name="startdate" size="10" id="edit-startdate" />
+ <input type="text" name="starttime" size="6" id="edit-starttime" />
+ </div>
+ <div class="event-section">
+ <label for="edit-enddate"><roundcube:label name="calendar.end" /></label>
+ <input type="text" name="enddate" size="10" id="edit-enddate" />
+ <input type="text" name="endtime" size="6" id="edit-endtime" />
+ </div>
+ <div class="event-section" id="edit-alarms">
+ <label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
+ <roundcube:object name="plugin.alarm_select" />
+ </div>
+ <div class="event-section" id="calendar-select">
+ <label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
+ <roundcube:object name="plugin.calendar_select" id="edit-calendar" />
+ </div>
+ <div class="event-section">
+ <label for="edit-categories"><roundcube:label name="calendar.category" /></label>
+ <roundcube:object name="plugin.category_select" id="edit-categories" />
+ </div>
+ <div class="event-section">
+ <label for="edit-free-busy"><roundcube:label name="calendar.freebusy" /></label>
+ <roundcube:object name="plugin.freebusy_select" id="edit-free-busy" />
+ </div>
+ <div class="event-section">
+ <label for="edit-priority"><roundcube:label name="calendar.priority" /></label>
+ <roundcube:object name="plugin.priority_select" id="edit-priority" />
+ </div>
+ <div class="event-section">
+ <label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
+ <roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
+ </div>
+ </div>
+ <!-- recurrence settings -->
+ <div id="event-tab-2">
+ <div class="event-section border-after">
+ <roundcube:object name="plugin.recurrence_form" part="frequency" />
+ </div>
+ <div class="recurrence-form border-after" id="recurrence-form-daily">
+ <roundcube:object name="plugin.recurrence_form" part="daily" class="event-section" />
+ </div>
+ <div class="recurrence-form border-after" id="recurrence-form-weekly">
+ <roundcube:object name="plugin.recurrence_form" part="weekly" class="event-section" />
+ </div>
+ <div class="recurrence-form border-after" id="recurrence-form-monthly">
+ <roundcube:object name="plugin.recurrence_form" part="monthly" class="event-section" />
+ </div>
+ <div class="recurrence-form border-after" id="recurrence-form-yearly">
+ <roundcube:object name="plugin.recurrence_form" part="yearly" class="event-section" />
+ </div>
+ <div class="recurrence-form" id="recurrence-form-until">
+ <roundcube:object name="plugin.recurrence_form" part="until" class="event-section" />
+ </div>
+ </div>
+ <!-- attendees list -->
+ <div id="event-tab-3">
+ <roundcube:object name="plugin.attendees_list" id="edit-attendees-table" cellspacing="0" cellpadding="0" border="0" />
+ <roundcube:object name="plugin.attendees_form" id="edit-attendees-form" />
+ <roundcube:include file="/templates/freebusylegend.html" />
+ </div>
+ <!-- attachments list (with upload form) -->
+ <div id="event-tab-4">
+ <div id="edit-attachments" class="attachments-list">
+ <roundcube:object name="plugin.attachments_list" id="attachmentlist" deleteIcon="/images/icons/delete.png" cancelIcon="/images/icons/delete.png" loadingIcon="/images/display/loading_blue.gif" />
+ </div>
+ <div id="edit-attachments-form">
+ <roundcube:object name="plugin.attachments_form" id="calendar-attachment-form" attachmentFieldSize="30" />
+ </div>
+ </div>
+ </form>
+
+ <roundcube:object name="plugin.edit_attendees_notify" id="edit-attendees-notify" class="event-dialog-message" style="display:none" />
+ <roundcube:object name="plugin.edit_recurring_warning" class="event-dialog-message edit-recurring-warning" style="display:none" />
+ <div id="edit-localchanges-warning" class="event-dialog-message" style="display:none"><roundcube:label name="calendar.localchangeswarning" /></div>
+</div>
\ No newline at end of file
diff --git a/plugins/calendar/skins/classic/templates/freebusylegend.html b/plugins/calendar/skins/classic/templates/freebusylegend.html
new file mode 100644
index 0000000..5cc01a1
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/freebusylegend.html
@@ -0,0 +1,7 @@
+ <div id="edit-attendees-legend" class="availability">
+ <span class="legend"><img class="availabilityicon free" src="./program/blank.gif" /> <roundcube:label name="calendar.availfree" /></span>
+ <span class="legend"><img class="availabilityicon busy" src="./program/blank.gif" /> <roundcube:label name="calendar.availbusy" /></span>
+ <span class="legend"><img class="availabilityicon tentative" src="./program/blank.gif" /> <roundcube:label name="calendar.availtentative" /></span>
+ <span class="legend"><img class="availabilityicon out-of-office" src="./program/blank.gif" /> <roundcube:label name="calendar.availoutofoffice" /></span>
+ <span class="legend"><img class="availabilityicon unknown" src="./program/blank.gif" /> <roundcube:label name="calendar.availunknown" /></span>
+ </div>
diff --git a/plugins/calendar/skins/classic/templates/itipattend.html b/plugins/calendar/skins/classic/templates/itipattend.html
new file mode 100644
index 0000000..84968b5
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/itipattend.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="calendaritipattend">
+
+<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" style="margin:0 11px" />
+
+<roundcube:object name="message" id="message" />
+
+<div class="centerbox">
+ <roundcube:object name="plugin.event_inviteform" />
+ <roundcube:object name="plugin.event_invitebox" class="calendar-invitebox" />
+ <roundcube:object name="plugin.event_rsvp_buttons" type="submit" iname="rsvp" id="event-rsvp" />
+ </form>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/calendar/skins/classic/templates/kolabacl.html b/plugins/calendar/skins/classic/templates/kolabacl.html
new file mode 100644
index 0000000..668a670
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/kolabacl.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body class="iframe" style="background:#fff; margin:0">
+
+<roundcube:object name="folderacl" />
+
+</body>
+</html>
diff --git a/plugins/calendar/skins/classic/templates/kolabform.html b/plugins/calendar/skins/classic/templates/kolabform.html
new file mode 100644
index 0000000..a74481a
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/kolabform.html
@@ -0,0 +1,7 @@
+<div id="calendar-kolabform">
+ <roundcube:object name="calendarform" />
+</div>
+<script type="text/javascript">rcube_init_tabs('calendar-kolabform');</script>
+<style type="text/css">
+#calendarpropform { min-width:680px }
+</style>
\ No newline at end of file
diff --git a/plugins/calendar/skins/classic/templates/print.html b/plugins/calendar/skins/classic/templates/print.html
new file mode 100644
index 0000000..3fc85f3
--- /dev/null
+++ b/plugins/calendar/skins/classic/templates/print.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+</head>
+<body class="calendarprint">
+
+<div id="printconfig" class="noprint">
+ <div class="calwidth">
+ <a href="#close" onclick="window.close()" class="rightalign"><roundcube:label name="close" /></a>
+ <span class="prop"><input type="button" id="printme" value="<roundcube:label name='print' />" onclick="window.print()"></span>
+ <span class="prop"><label><input type="checkbox" id="propdescription" checked="checked" /> <roundcube:label name="calendar.printdescriptions" /></label></span>
+ </div>
+</div>
+
+<roundcube:object name="message" id="message" class="noprint" />
+
+<div id="calendar" class="calwidth"></div>
+
+<div class="calwidth">
+ <roundcube:object name="plugin.calendar_list" activeonly="true" id="calendarlist" />
+</div>
+
+<roundcube:object name="plugin.calendar_css" printmode="true" />
+
+<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="./plugins/calendar/skins/default/print.iehacks.css" /><![endif]-->
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/calendar/skins/default/README b/plugins/calendar/skins/default/README
deleted file mode 100644
index ccd513a..0000000
--- a/plugins/calendar/skins/default/README
+++ /dev/null
@@ -1,5 +0,0 @@
-Icons by Fugue Icons <http://p.yusukekamiyamane.com/>
-
-Copyright (C) 2010 Yusuke Kamiyamane. All rights reserved.
-The icons are licensed under a Creative Commons Attribution
-3.0 license. <http://creativecommons.org/licenses/by/3.0/>
diff --git a/plugins/calendar/skins/default/calendar.css b/plugins/calendar/skins/default/calendar.css
deleted file mode 100644
index 21dcb1b..0000000
--- a/plugins/calendar/skins/default/calendar.css
+++ /dev/null
@@ -1,1268 +0,0 @@
-/*** Style for Calendar plugin ***/
-
-body.calendarmain {
- overflow: hidden;
-}
-
-#taskbar a.button-calendar {
- background: url(images/calendar.png) 0px 1px no-repeat;
-}
-
-/* hack for IE 6/7 */
-* html #taskbar a.button-calendar {
- background-image: url(images/calendar.gif);
-}
-
-#main {
- position: absolute;
- clear: both;
- top: 90px;
- left: 0;
- right: 0;
- bottom: 10px;
-}
-
-#calendarsidebar {
- position: absolute;
- top: 37px;
- left: 10px;
- bottom: 0;
- width: 230px;
-}
-
-#datepicker {
- width: 100%;
-}
-
-#datepicker .ui-datepicker {
- width: 97% !important;
- box-shadow: none;
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
-}
-
-#datepicker .ui-datepicker-activerange a {
- border-color: #c33;
- color: #a22;
-}
-
-#datepicker .ui-datepicker-activerange a.ui-state-active {
- color: #fff;
-}
-
-#datepicker .ui-priority-secondary {
- opacity: 0.4;
-}
-
-#datepicker td.ui-datepicker-week-col {
- cursor: pointer;
-}
-
-#calendarsidebartoggle {
- position: absolute;
- left: 244px;
- width: 8px;
- top: 37px;
- bottom: 0;
- background: url(images/toggle.gif) 0 48% no-repeat transparent;
- cursor: pointer;
-}
-
-div.sidebarclosed {
- background-position: -8px 48% !important;
-}
-
-#calendarsidebartoggle:hover {
- background-color: #ddd;
-}
-
-#calendar {
- position: absolute;
- top: 0;
- left: 256px;
- right: 10px;
- bottom: 0;
-}
-
-#print {
- width: 680px;
-}
-
-pre {
- font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
-}
-
-#calendars {
- position: absolute;
- top: 220px;
- left: 0;
- bottom: 0;
- right: 0;
- background-color: #F9F9F9;
- border: 1px solid #999999;
- overflow: hidden;
-}
-
-#calendarslist {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-#attachmentlist li,
-#calendarslist li {
- margin: 0;
- padding: 1px;
- display: block;
- background: #fff;
- border-bottom: 1px solid #EBEBEB;
- white-space: nowrap;
-}
-
-#calendarslist li label {
- display: block;
-}
-
-#calendarslist li span.handle {
- cursor: default;
- background: url(images/calendars.png) 0 -2px no-repeat;
- display: inline-block;
- width: 20px;
-}
-
-#calendarslist li input {
- margin-right: 5px;
-}
-
-#calendarslist li.selected {
- background-color: #ccc;
- border-bottom: 1px solid #bbb;
-}
-
-#calendarslist li.selected span {
- font-weight: bold;
-}
-
-#calendarslist li.readonly span.handle {
- background-position: 0 -20px;
-}
-
-#calendarslist li.other span.handle {
- background-position: 0 -38px;
-}
-
-#calendarslist li.other.readonly span.handle {
- background-position: 0 -56px;
-}
-
-#calendarslist li.shared span.handle {
- background-position: 0 -74px;
-}
-
-#calendarslist li.shared.readonly span.handle {
- background-position: 0 -92px;
-}
-
-#calfeedurl {
- width: 98%;
- background: #fbfbfb;
- padding: 4px;
- margin-bottom: 1em;
- resize: none;
-}
-
-#agendalist {
- width: 100%;
- margin: 0 auto;
- margin-top: 60px;
- border: 1px solid #C1DAD7;
- display: none;
-}
-
-#agendalist table {
- width: 100%;
-}
-
-#agendalist td,
-#agendalist th {
- border-right: 1px solid #C1DAD7;
- border-bottom: 1px solid #C1DAD7;
- background: #fff;
- padding: 6px 6px 6px 12px;
-}
-
-#agendalist tr {
- vertical-align: top;
-}
-
-#agendalist th {
- font-weight: bold;
-}
-
-#calendartoolbar {
- position: absolute;
- top: 45px;
- left: 256px;
- height: 35px;
-}
-
-#calendartoolbar a {
- padding-right: 10px;
-}
-
-#calendartoolbar a.button,
-#calendartoolbar a.buttonPas {
- display: block;
- float: left;
- width: 32px;
- height: 32px;
- padding: 0;
- margin-right: 10px;
- overflow: hidden;
- background: url(images/toolbar.png) 0 0 no-repeat transparent;
- opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
-}
-
-#calendartoolbar a.buttonPas {
- opacity: 0.35;
-}
-
-#calendartoolbar a.addeventSel {
- background-position: 0 -32px;
-}
-
-#calendartoolbar a.delete {
- background-position: -32px 0;
-}
-
-#calendartoolbar a.deleteSel {
- background-position: -32px -32px;
-}
-
-#calendartoolbar a.print {
- background-position: -64px 0;
-}
-
-#calendartoolbar a.printSel {
- background-position: -64px -32px;
-}
-
-#calendartoolbar a.export {
- background-position: -128px 0;
-}
-
-#calendartoolbar a.exportSel {
- background-position: -128px -32px;
-}
-
-#quicksearchbar {
- right: 4px;
-}
-
-div.uidialog {
- display: none;
-}
-
-#user {
- position: absolute;
- top: 10px;
- right: 100px;
- left: 100px;
- text-align: center;
-}
-
-a.morelink {
- font-size: 90%;
- color: #C33;
- text-decoration: none;
-}
-
-a.morelink:hover {
- text-decoration: underline;
-}
-
-a.miniColors-trigger {
- margin-top: -3px;
-}
-
-#attachmentcontainer {
- position: absolute;
- top: 80px;
- left: 20px;
- right: 20px;
- bottom: 20px;
-}
-
-#attachmentframe {
- width: 100%;
- height: 100%;
- border: 1px solid #999999;
- background-color: #F9F9F9;
-}
-
-#partheader {
- position: absolute;
- top: 20px;
- left: 220px;
- right: 20px;
- height: 40px;
-}
-
-#partheader table td {
- padding-left: 2px;
- padding-right: 4px;
- vertical-align: middle;
- font-size: 11px;
-}
-
-#partheader table td.title {
- color: #666;
- font-weight: bold;
-}
-
-.attachments-list ul {
- margin: 0px;
- padding: 0px;
- list-style-image: none;
- list-style-type: none;
-}
-
-.attachments-list ul li {
- height: 18px;
- font-size: 12px;
- padding-top: 2px;
- padding-right: 8px;
- white-space: nowrap;
-}
-
-.attachments-list ul li img {
- padding-right: 2px;
- vertical-align: middle;
-}
-
-.attachments-list ul li a {
- text-decoration: none;
-}
-
-.attachments-list ul li a:hover {
- text-decoration: underline;
-}
-
-#attachmentlist {
- margin: 0 -0.8em;
-}
-
-#attachmentlist li {
- padding: 2px 2px 3px 0.8em;
-}
-
-#eventshow .attachments-list ul li {
- float: left;
-}
-
-#edit-attachments-form {
- padding-top: 1.2em;
-}
-
-#edit-attachments-form .buttons {
- margin: 0.5em 0;
-}
-
-#event-attendees span.attendee {
- padding-right: 18px;
- margin-right: 0.5em;
- background: url(images/attendee-status.gif) right 0 no-repeat;
-}
-
-#event-attendees span.attendee a.mailtolink {
- text-decoration: none;
- white-space: nowrap;
-}
-
-#event-attendees span.attendee a.mailtolink:hover {
- text-decoration: underline;
-}
-
-#event-attendees span.accepted {
- background-position: right -20px;
-}
-
-#event-attendees span.declined {
- background-position: right -40px;
-}
-
-#event-attendees span.tentative {
- background-position: right -60px;
-}
-
-#event-attendees span.organizer {
- background-position: right -80px;
-}
-
-/* jQuery UI overrides */
-
-#eventshow h1 {
- font-size: 20px;
- margin: 0.1em 0 0.4em 0;
-}
-
-#eventshow label,
-#eventshow h5.label {
- font-weight: normal;
- font-size: 0.9em;
- color: #999;
- margin: 0 0 0.2em 0;
-}
-
-#eventshow {
- margin: 0 -0.2em;
-}
-
-#eventshow.sensitivity-private {
- background: url(images/badge_private.png) top right no-repeat;
-}
-
-#eventshow.sensitivity-confidential {
- background: url(images/badge_confidential.png) top right no-repeat;
-}
-
-.sensitivity-private #event-title {
- margin-right: 50px;
-}
-
-.sensitivity-confidential #event-title {
- margin-right: 60px;
-}
-
-#eventshow div.event-line {
- margin-top: 0.1em;
- margin-bottom: 0.3em;
-}
-
-#eventedit {
- position: relative;
- padding: 0.5em 0.1em;
-}
-
-#eventedit input.text,
-#eventedit textarea {
- width: 97%;
-}
-
-#eventtabs {
- position: relative;
- padding: 0;
- border: 0;
- border-radius: 0;
-}
-
-div.form-section,
-#eventshow div.event-section,
-#eventtabs div.event-section {
- margin-top: 0.2em;
- margin-bottom: 0.8em;
-}
-
-#eventtabs .tabsbar {
- position: absolute;
- top: 0;
-}
-
-#eventtabs .ui-tabs-panel {
- padding: 1em 0.8em;
- border: 1px solid #aaa;
- border-width: 0 1px 1px 1px;
-}
-
-#eventtabs .ui-tabs-nav {
- background: none;
- padding: 0;
- border-width: 0 0 1px 0;
- border-radius: 0;
-}
-
-#eventtabs .border-after {
- padding-bottom: 0.6em;
- margin-bottom: 0.6em;
- border-bottom: 1px solid #999;
-}
-
-#eventshow label,
-#eventedit label,
-.form-section label {
- display: inline-block;
- min-width: 7em;
- padding-right: 0.5em;
-}
-
-#eventedit .formtable td.label {
- min-width: 6em;
-}
-
-td.topalign {
- vertical-align: top;
-}
-
-#eventedit label.weekday,
-#eventedit label.monthday {
- min-width: 3em;
-}
-
-#eventedit label.month {
- min-width: 5em;
-}
-
-#edit-recurrence-yearly-bymonthblock {
- margin-left: 7.5em;
-}
-
-#eventedit .recurrence-form {
- display: none;
-}
-
-#eventedit .formtable td {
- padding: 0.2em 0;
-}
-
-.ui-dialog .event-update-confirm {
- padding: 0 0.5em 0.5em 0.5em;
-}
-
-.event-dialog-message,
-.event-update-confirm .message {
- margin-top: 0.5em;
- padding: 0.8em;
- background-color: #F7FDCB;
- border: 1px solid #C2D071;
-}
-
-.event-dialog-message .message,
-.event-update-confirm .message {
- margin-bottom: 0.5em;
-}
-
-.edit-recurring-warning .savemode {
- padding-left: 20px;
-}
-
-.event-update-confirm .savemode {
- padding-left: 30px;
-}
-
-.event-dialog-message span.ui-icon,
-.event-update-confirm span.ui-icon {
- float: left;
- margin: 0 7px 20px 0;
-}
-
-.event-dialog-message label,
-.event-update-confirm label {
- min-width: 3em;
- padding-right: 1em;
-}
-
-.event-update-confirm a.button {
- margin: 0 0.5em 0 0.2em;
- min-width: 5em;
-}
-
-#event-rsvp,
-#edit-attendees-notify {
- margin: 0.3em 0;
- padding: 0.5em;
- background-color: #F7FDCB;
- border: 1px solid #C2D071;
-}
-
-#edit-attendees-table {
- width: 100%;
- display: table;
- table-layout: fixed;
- border-collapse: collapse;
- border: 1px solid #ccc;
-}
-
-#edit-attendees-table td {
- padding: 3px;
- border-bottom: 1px solid #ccc;
-}
-
-#edit-attendees-table td.role {
- width: 8em;
-}
-
-#edit-attendees-table td.availability,
-#edit-attendees-table td.confirmstate {
- width: 4em;
-}
-
-#edit-attendees-table td.options {
- width: 3em;
- text-align: right;
- padding-right: 4px;
-}
-
-#edit-attendees-table td.name {
- width: auto;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-#edit-attendees-table thead td {
- background: url(images/listheader.gif) top left repeat-x #CCC;
-}
-
-#edit-attendees-form {
- position: relative;
- margin-top: 1em;
-}
-
-#edit-attendees-form #edit-attendee-schedule {
- position: absolute;
- top: 0;
- right: 0;
-}
-
-#edit-attendees-table select.edit-attendee-role {
- border: 0;
- padding: 2px;
- background: white;
-}
-
-.availability img.availabilityicon {
- margin: 1px;
- width: 14px;
- height: 14px;
- border-radius: 4px;
- -moz-border-radius: 4px;
-}
-
-.availability img.availabilityicon.loading {
- background: url(images/loading_blue.gif) center no-repeat;
-}
-
-#schedule-freebusy-times td.unknown,
-.availability img.availabilityicon.unknown {
- background: #ddd;
-}
-
-#schedule-freebusy-times td.free,
-.availability img.availabilityicon.free {
- background: #0c0;
-}
-
-#schedule-freebusy-times td.busy,
-.availability img.availabilityicon.busy {
- background: #c00;
-}
-
-#schedule-freebusy-times td.tentative,
-.availability img.availabilityicon.tentative {
- background: #66d;
-}
-
-#schedule-freebusy-times td.out-of-office,
-.availability img.availabilityicon.out-of-office {
- background: #f0b400;
-}
-
-#schedule-freebusy-times td.all-busy,
-#schedule-freebusy-times td.all-tentative,
-#schedule-freebusy-times td.all-out-of-office {
- background-image: url(images/freebusy-colors.png);
- background-position: top right;
- background-repeat: no-repeat;
-}
-
-#schedule-freebusy-times td.all-tentative {
- background-position: right -40px;
-}
-
-#schedule-freebusy-times td.all-out-of-office {
- background-position: right -80px;
-}
-
-#edit-attendees-legend {
- margin-top: 3em;
- margin-bottom: 0.5em;
-}
-
-#edit-attendees-legend .legend {
- margin-right: 2em;
- white-space: nowrap;
-}
-
-#edit-attendees-legend img.availabilityicon {
- vertical-align: middle;
-}
-
-#edit-attendees-table tbody td.confirmstate {
- overflow: hidden;
- white-space: nowrap;
- text-indent: -2000%;
-}
-
-#edit-attendees-table td.confirmstate span {
- display: block;
- width: 20px;
- background: url(images/attendee-status.gif) 5px 0 no-repeat;
-}
-
-#edit-attendees-table td.confirmstate span.needs-action {
-}
-
-#edit-attendees-table td.confirmstate span.accepted {
- background-position: 5px -20px;
-}
-
-#edit-attendees-table td.confirmstate span.declined {
- background-position: 5px -40px;
-}
-
-#edit-attendees-table td.confirmstate span.tentative {
- background-position: 5px -60px;
-}
-
-#attendees-freebusy-table {
- width: 100%;
- table-layout: fixed;
- border-collapse: collapse;
- margin: 0.5em 0;
-}
-
-#attendees-freebusy-table td.attendees {
- width: 18em;
- border: 1px solid #ccc;
- vertical-align: top;
- overflow: hidden;
-}
-
-#attendees-freebusy-table td.times {
- width: auto;
- vertical-align: top;
- border: 1px solid #ccc;
-}
-
-#attendees-freebusy-table div.scroll {
- position: relative;
- overflow: auto;
-}
-
-#attendees-freebusy-table h3.boxtitle {
- margin: 0;
- height: auto !important;
- border-color: #ccc;
-}
-
-.attendees-list .attendee {
- padding: 3px 4px 3px 1px;
- background: url(images/attendee-status.gif) 2px -97px no-repeat;
- white-space: nowrap;
-}
-
-.attendees-list a.attendee-role-toggle {
- display: inline-block;
- width: 16px;
- margin-right: 3px;
- cursor: pointer;
-}
-
-.attendees-list div.attendee {
- border-top: 1px solid #ccc;
-}
-
-.attendees-list span.attendee {
- padding-left: 20px;
- margin-right: 2em;
-}
-
-.attendees-list .organizer {
- background-position: 3px -77px;
-}
-
-.attendees-list .opt-participant {
- background-position: 2px -117px;
-}
-
-.attendees-list .chair {
- background-position: 2px -137px;
-}
-
-.attendees-list .loading {
- background: url(images/loading_blue.gif) 1px 50% no-repeat;
-}
-
-.attendees-list .total {
- background: none;
- padding-left: 4px;
- font-weight: bold;
-}
-
-.attendees-list .spacer,
-#schedule-freebusy-times tr.spacer td {
- background: 0;
- font-size: 50%;
-}
-
-#schedule-freebusy-times {
- border-collapse: collapse;
- width: 100%;
-}
-
-#schedule-freebusy-times td {
- padding: 3px;
- border: 1px solid #ccc;
-}
-
-#schedule-freebusy-times tr.dates th {
- border-color: #aaa;
- border-style: solid;
- border-width: 0 1px 0 1px;
- white-space: nowrap;
-}
-
-#attendees-freebusy-table div.timesheader,
-#schedule-freebusy-times tr.times td {
- min-width: 30px;
- font-size: 9px;
- padding: 5px 2px 6px 2px;
- text-align: center;
-}
-
-#schedule-freebusy-times tr.times td.allday {
- min-width: 60px;
-}
-
-#schedule-freebusy-times tr.times td {
- cursor: pointer;
-}
-
-#schedule-event-time {
- position: absolute;
- border: 2px solid #333;
- background: #777;
- background: rgba(60, 60, 60, 0.6);
- opacity: 0.5;
- border-radius: 4px;
- cursor: move;
- filter: alpha(opacity=40); /* IE8 */
-}
-
-#eventfreebusy .schedule-options {
- position: relative;
- margin-bottom: 1.5em;
-}
-
-#eventfreebusy .schedule-buttons {
- position: absolute;
- top: 0;
- right: 0;
-}
-
-#eventfreebusy .schedule-find-buttons {
- padding-bottom:0.5em;
-}
-
-#eventfreebusy .schedule-find-buttons button {
- min-width: 9em;
- text-align: center;
-}
-
-span.edit-alarm-set {
- white-space: nowrap;
-}
-
-a.dropdown-link {
- color: #CC0000;
- font-size: 12px;
- text-decoration: none;
-}
-
-a.dropdown-link:after {
- content: ' â¼';
- font-size: 11px;
- color: #666;
-}
-
-#eventedit .ui-tabs-panel {
- min-height: 20em;
-}
-
-.alarm-item {
- margin: 0.4em 0 1em 0;
-}
-
-.alarm-item .event-title {
- font-size: 14px;
- margin: 0.1em 0 0.3em 0;
-}
-
-.alarm-item div.event-section {
- margin-top: 0.1em;
- margin-bottom: 0.3em;
-}
-
-.alarm-item .alarm-actions {
- margin-top: 0.4em;
-}
-
-.alarm-item div.alarm-actions a {
- color: #CC0000;
- margin-right: 0.8em;
- text-decoration: none;
-}
-
-a.alarm-action-snooze:after {
- content: ' â¼';
- font-size: 10px;
- color: #666;
-}
-
-#alarm-snooze-dropdown {
- z-index: 5000;
-}
-
-.ui-dialog-buttonset a.dropdown-link {
- margin-right: 1em;
-}
-
-.ui-datepicker-calendar .ui-datepicker-today .ui-state-default {
- border-color: #cccccc;
- background: #ffffcc;
- color: #000;
-}
-
-.ui-datepicker-calendar .ui-datepicker-week-col {
- text-align: right;
- padding-right: 0.5em;
-}
-
-.ui-datepicker th {
- padding: 0.3em 0;
- font-size: 10px;
-}
-
-.ui-datepicker td span,
-.ui-datepicker td a {
- padding-left: 0.1em;
-}
-
-.ui-autocomplete {
- max-height: 160px;
- overflow-y: auto;
- overflow-x: hidden;
-}
-
-.ui-autocomplete .ui-menu-item {
- white-space: nowrap;
-}
-
-* html .ui-autocomplete {
- height: 160px;
-}
-
-span.spacer {
- padding-left: 3em;
-}
-
-#agendaoptions {
- position: absolute;
- left: 0;
- right: 0;
- bottom: 0;
- height: auto;
- z-index: 200;
- border: 1px solid #ccc;
- padding: 2px 5px 1px;
- font-size: 90%;
-}
-
-#agendaoptions label {
- color: #444;
- text-shadow: 1px 1px #eee;
- padding-right: 0.5em;
-}
-
-#calendar-kolabform {
- position: relative;
- padding-top: 24px;
- margin: 0 -8px;
- min-width: 660px;
- min-height: 400px;
-}
-
-#calendar-kolabform div.tabsbar {
- top: 0;
- right: 2px;
- left: 2px;
- height: 24px;
-}
-
-#calendar-kolabform fieldset.tabbed {
- background-color: #fff;
- margin-top: 0;
-}
-
-#calendar-kolabform span.tablink {
- background-color: #e8e8e9;
- background-image: -moz-linear-gradient(center top, #f4f4f4, #e6e6e6);
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0.0, #f4f4f4), color-stop(1.0, #e6e6e6));
- filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr=#f4f4f4, endColorstr=#e6e6e6, GradientType=0);
- height: 24px !important;
-}
-
-#calendar-kolabform span.tablink-selected {
- background: #fff;
- height: 25px !important;
-}
-
-#calendar-kolabform span.tablink a,
-#calendar-kolabform span.tablink-selected a {
- background: none;
- border: 1px solid #AAAAAA;
- border-top-left-radius: 2px;
- border-top-right-radius: 2px;
- padding: 4px 10px 0 10px;
- margin-left: 0;
-}
-
-#calendar-kolabform table td.title {
- font-weight: bold;
- white-space: nowrap;
- color: #666;
- padding-right: 10px;
-}
-
-
-/* fullcalendar style overrides */
-
-.rcube-fc-content {
- position: absolute !important;
- top: 37px;
- left: 0;
- right: 0;
- bottom: 0;
- overflow: hidden;
-}
-
-.fc-event-title {
- font-weight: bold;
-}
-
-.fc-event-hori .fc-event-title {
- font-weight: normal;
- white-space: nowrap;
-}
-
-.fc-event-hori .fc-event-time {
- white-space: nowrap;
- font-weight: normal !important;
- font-size: 10px;
- padding-right: 0.6em;
-}
-
-.fc-grid .fc-event-time {
- font-weight: normal !important;
- padding-right: 0.3em;
-}
-
-.fc-event-cateories {
- font-style:italic;
-}
-
-div.fc-event-location {
- font-size: 90%;
-}
-
-.fc-more-link {
- color: #999;
- padding-top: 1px;
- cursor: pointer;
-}
-
-.fc-agenda-slots td div {
- height: 22px;
-}
-
-.fc-mon, .fc-tue, .fc-wed, .fc-thu, .fc-fri {
- background-color: #fdfdfd;
-}
-
-.fc-widget-header {
- background-color: #fff;
-}
-
-.fc-icon-alarms,
-.fc-icon-sensitive,
-.fc-icon-recurring {
- display: inline-block;
- width: 11px;
- height: 11px;
- background: url(images/eventicons.gif) 0 0 no-repeat;
- margin-left: 3px;
- line-height: 10px;
-}
-
-.fc-icon-alarms {
- background-position: 0 -13px;
-}
-
-.fc-icon-sensitive {
- background-position: 0 -25px;
-}
-
-.fc-list-section .fc-event {
- cursor: pointer;
-}
-
-.fc-view-list div.fc-list-header,
-.fc-view-table td.fc-list-header,
-#edit-attendees-table thead td {
- padding: 3px;
- background: #dddddd;
- background-image: -moz-linear-gradient(center top, #f4f4f4, #d2d2d2);
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0.00, #f4f4f4), color-stop(1.00, #d2d2d2));
- filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr=#f4f4f4, endColorstr=#d2d2d2, GradientType=0);
- font-weight: bold;
- color: #333;
-}
-
-.fc-view-list .fc-event-skin .fc-event-content {
- background: #F6F6F6;
- padding: 2px;
-}
-
-.fc-view-list .fc-event-skin .fc-event-title,
-.fc-view-list .fc-event-skin .fc-event-location {
- color: #333;
-}
-
-.fc-view-table col.fc-event-location {
- width: 20%;
-}
-
-.fc-listappend {
- text-align: center;
- margin: 1em 0;
-}
-
-.fc-listappend .message {
- padding: 0.5em;
- margin-bottom: 0.5em;
- font-size: 150%;
- color: #999;
-}
-
-.fc-listappend .formlinks a {
- font-size: 12px;
- padding: 0 0.3em;
-}
-
-.fc-event-temp {
- opacity: 0.4;
- filter: alpha(opacity=40); /* IE8 */
-}
-
-/* Settings section */
-
-fieldset #calendarcategories div {
- margin-bottom: 0.3em;
-}
-
-/* Invitation UI in mail */
-
-#messagemenu li a.calendarlink {
- background-image: url(images/calendars.png);
- background-position: 7px -109px;
- background-repeat: no-repeat;
-}
-
-div.calendar-invitebox {
- min-height: 20px;
- margin: 5px 8px;
- padding: 3px 6px 6px 34px;
- border: 1px solid #C2D071;
- background: url(images/calendar.png) 6px 5px no-repeat #F7FDCB;
-}
-
-div.calendar-invitebox td.ititle {
- font-weight: bold;
- padding-right: 0.5em;
-}
-
-div.calendar-invitebox td.label {
- color: #666;
- padding-right: 1em;
-}
-
-#event-rsvp .rsvp-buttons,
-div.calendar-invitebox .rsvp-status,
-div.calendar-invitebox .rsvp-buttons {
- margin-top: 0.5em;
-}
-
-#event-rsvp input.button,
-div.calendar-invitebox input.button,
-div.calendar-invitebox select {
- font-size: 11px;
- margin-right: 0.5em;
-}
-
-div.calendar-invitebox .calendar-select {
- font-size: 11px;
- margin-left: 1em;
-}
-
-div.calendar-invitebox .rsvp-status.loading {
- color: #666;
- padding: 1px 0 2px 24px;
- background: url(images/loading_blue.gif) top left no-repeat;
-}
-
-div.calendar-invitebox .rsvp-status.declined,
-div.calendar-invitebox .rsvp-status.tentative,
-div.calendar-invitebox .rsvp-status.accepted {
- padding: 0 0 1px 22px;
- background: url(images/attendee-status.gif) 2px -20px no-repeat;
-}
-
-div.calendar-invitebox .rsvp-status.declined {
- background-position: 2px -40px;
-}
-
-div.calendar-invitebox .rsvp-status.tentative {
- background-position: 2px -60px;
-}
-
-/* iTIP attend reply page */
-
-.calendaritipattend .centerbox {
- width: 40em;
- margin: 80px auto;
- padding: 10px 10px 10px 90px;
- border: 1px solid #ccc;
- box-shadow: 1px 1px 24px #ccc;
- -moz-box-shadow: 1px 1px 18px #ccc;
- -webkit-box-shadow: #ccc 1px 1px 18px;
- background: url(images/invitation.png) 10px 10px no-repeat #fbfbfb;
-}
-
-.calendaritipattend .calendar-invitebox {
- background: none;
- padding-left: 0;
- border: 0;
- margin: 0 0 2em 0;
-}
-
-.calendaritipattend .calendar-invitebox .rsvp-status {
- margin-top: 2.5em;
- font-size: 110%;
- font-weight: bold;
-}
-
-.calendaritipattend .calendar-invitebox td.title,
-.calendaritipattend .calendar-invitebox td.ititle {
- font-size: 120%;
-}
-
diff --git a/plugins/calendar/skins/default/fullcalendar.css b/plugins/calendar/skins/default/fullcalendar.css
deleted file mode 100644
index 17f1b37..0000000
--- a/plugins/calendar/skins/default/fullcalendar.css
+++ /dev/null
@@ -1,724 +0,0 @@
-/*
- * FullCalendar v1.5.3-rcube-0.7.1 Stylesheet
- *
- * Copyright (c) 2011 Adam Shaw
- * Copyright (c) 2011, Kolab Systems AG
- * Dual licensed under the MIT and GPL licenses, located in
- * MIT-LICENSE.txt and GPL-LICENSE.txt respectively.
- *
- * Date: Mon Feb 13 23:00:46 2012 +0100
- *
- */
-
-
-.fc {
- direction: ltr;
- text-align: left;
- }
-
-.fc table {
- border-collapse: collapse;
- border-spacing: 0;
- }
-
-html .fc,
-.fc table {
- font-size: 1em;
- }
-
-.fc td,
-.fc th {
- padding: 0;
- vertical-align: top;
- }
-
-
-
-/* Header
-------------------------------------------------------------------------*/
-
-.fc-header td {
- white-space: nowrap;
- }
-
-.fc-header-left {
- width: 25%;
- text-align: left;
- }
-
-.fc-header-center {
- text-align: center;
- }
-
-.fc-header-right {
- width: 25%;
- text-align: right;
- }
-
-.fc-header-title {
- display: inline-block;
- vertical-align: top;
- }
-
-.fc-header-title h2 {
- margin-top: 0;
- white-space: nowrap;
- }
-
-.fc .fc-header-space {
- padding-left: 10px;
- }
-
-.fc-header .fc-button {
- margin-bottom: 1em;
- vertical-align: top;
- }
-
-/* buttons edges butting together */
-
-.fc-header .fc-button {
- margin-right: -1px;
- }
-
-.fc-header .fc-corner-right {
- margin-right: 1px; /* back to normal */
- }
-
-.fc-header .ui-corner-right {
- margin-right: 0; /* back to normal */
- }
-
-/* button layering (for border precedence) */
-
-.fc-header .fc-state-hover,
-.fc-header .ui-state-hover {
- z-index: 2;
- }
-
-.fc-header .fc-state-down {
- z-index: 3;
- }
-
-.fc-header .fc-state-active,
-.fc-header .ui-state-active {
- z-index: 4;
- }
-
-
-
-/* Content
-------------------------------------------------------------------------*/
-
-.fc-content {
- clear: both;
- }
-
-.fc-view {
- width: 100%; /* needed for view switching (when view is absolute) */
- overflow: hidden;
- }
-
-
-
-/* Cell Styles
-------------------------------------------------------------------------*/
-
-.fc-widget-header, /* <th>, usually */
-.fc-widget-content { /* <td>, usually */
- border: 1px solid #ccc;
- }
-
-.fc-state-highlight { /* <td> today cell */ /* TODO: add .fc-today to <th> */
- background: #ffc;
- }
-
-.fc-cell-overlay { /* semi-transparent rectangle while dragging */
- background: #9cf;
- opacity: .2;
- filter: alpha(opacity=20); /* for IE */
- }
-
-
-
-/* Buttons
-------------------------------------------------------------------------*/
-
-.fc-button {
- position: relative;
- display: inline-block;
- cursor: pointer;
- }
-
-.fc-state-default { /* non-theme */
- border-style: solid;
- border-width: 1px 0;
- }
-
-.fc-button-inner {
- position: relative;
- float: left;
- overflow: hidden;
- }
-
-.fc-state-default .fc-button-inner { /* non-theme */
- border-style: solid;
- border-width: 0 1px;
- }
-
-.fc-button-content {
- position: relative;
- float: left;
- height: 1.9em;
- line-height: 1.9em;
- padding: 0 .6em;
- white-space: nowrap;
- }
-
-/* icon (for jquery ui) */
-
-.fc-button-content .fc-icon-wrap {
- position: relative;
- float: left;
- top: 50%;
- }
-
-.fc-button-content .ui-icon {
- position: relative;
- float: left;
- margin-top: -50%;
- *margin-top: 0;
- *top: -50%;
- }
-
-/* gloss effect */
-
-.fc-state-default .fc-button-effect {
- position: absolute;
- top: 50%;
- left: 0;
- }
-
-.fc-state-default .fc-button-effect span {
- position: absolute;
- top: -100px;
- left: 0;
- width: 500px;
- height: 100px;
- border-width: 100px 0 0 1px;
- border-style: solid;
- border-color: #fff;
- background: #444;
- opacity: .09;
- filter: alpha(opacity=9);
- }
-
-/* button states (determines colors) */
-
-.fc-state-default,
-.fc-state-default .fc-button-inner {
- border-style: solid;
- border-color: #ccc #bbb #aaa;
- background: #F3F3F3;
- color: #000;
- }
-
-.fc-state-hover,
-.fc-state-hover .fc-button-inner {
- border-color: #999;
- }
-
-.fc-state-down,
-.fc-state-down .fc-button-inner {
- border-color: #555;
- background: #777;
- }
-
-.fc-state-active,
-.fc-state-active .fc-button-inner {
- border-color: #555;
- background: #777;
- color: #fff;
- }
-
-.fc-state-disabled,
-.fc-state-disabled .fc-button-inner {
- color: #999;
- border-color: #ddd;
- }
-
-.fc-state-disabled {
- cursor: default;
- }
-
-.fc-state-disabled .fc-button-effect {
- display: none;
- }
-
-
-
-/* Global Event Styles
-------------------------------------------------------------------------*/
-
-.fc-event {
- border-style: solid;
- border-width: 0;
- font-size: .85em;
- cursor: default;
- }
-
-a.fc-event,
-.fc-event-draggable {
- cursor: pointer;
- }
-
-a.fc-event {
- text-decoration: none;
- }
-
-.fc-rtl .fc-event {
- text-align: right;
- }
-
-.fc-event-skin {
- border-color: #36c; /* default BORDER color */
- background-color: #36c; /* default BACKGROUND color */
- color: #fff; /* default TEXT color */
- }
-
-.fc-event-inner {
- position: relative;
- width: 100%;
- height: 100%;
- border-style: solid;
- border-width: 0;
- overflow: hidden;
- }
-
-.fc-event-time,
-.fc-event-title {
- padding: 0 1px;
- }
-
-.fc .ui-resizable-handle { /*** TODO: don't use ui-resizable anymore, change class ***/
- display: block;
- position: absolute;
- z-index: 99999;
- overflow: hidden; /* hacky spaces (IE6/7) */
- font-size: 300%; /* */
- line-height: 50%; /* */
- }
-
-
-
-/* Horizontal Events
-------------------------------------------------------------------------*/
-
-.fc-event-hori {
- border-width: 1px 0;
- margin-bottom: 1px;
- }
-
-/* resizable */
-
-.fc-event-hori .ui-resizable-e {
- top: 0 !important; /* importants override pre jquery ui 1.7 styles */
- right: -3px !important;
- width: 7px !important;
- height: 100% !important;
- cursor: e-resize;
- }
-
-.fc-event-hori .ui-resizable-w {
- top: 0 !important;
- left: -3px !important;
- width: 7px !important;
- height: 100% !important;
- cursor: w-resize;
- }
-
-.fc-event-hori .ui-resizable-handle {
- _padding-bottom: 14px; /* IE6 had 0 height */
- }
-
-
-
-/* Fake Rounded Corners (for buttons and events)
-------------------------------------------------------------*/
-
-.fc-corner-left {
- margin-left: 1px;
- }
-
-.fc-corner-left .fc-button-inner,
-.fc-corner-left .fc-event-inner {
- margin-left: -1px;
- }
-
-.fc-corner-right {
- margin-right: 1px;
- }
-
-.fc-corner-right .fc-button-inner,
-.fc-corner-right .fc-event-inner {
- margin-right: -1px;
- }
-
-.fc-corner-top {
- margin-top: 1px;
- }
-
-.fc-corner-top .fc-event-inner {
- margin-top: -1px;
- }
-
-.fc-corner-bottom {
- margin-bottom: 1px;
- }
-
-.fc-corner-bottom .fc-event-inner {
- margin-bottom: -1px;
- }
-
-
-
-/* Fake Rounded Corners SPECIFICALLY FOR EVENTS
------------------------------------------------------------------*/
-
-.fc-corner-left .fc-event-inner {
- border-left-width: 1px;
- }
-
-.fc-corner-right .fc-event-inner {
- border-right-width: 1px;
- }
-
-.fc-corner-top .fc-event-inner {
- border-top-width: 1px;
- }
-
-.fc-corner-bottom .fc-event-inner {
- border-bottom-width: 1px;
- }
-
-
-
-/* Reusable Separate-border Table
-------------------------------------------------------------*/
-
-table.fc-border-separate {
- border-collapse: separate;
- }
-
-.fc-border-separate th,
-.fc-border-separate td {
- border-width: 1px 0 0 1px;
- }
-
-.fc-border-separate th.fc-last,
-.fc-border-separate td.fc-last {
- border-right-width: 1px;
- }
-
-.fc-border-separate tr.fc-last th,
-.fc-border-separate tr.fc-last td {
- border-bottom-width: 1px;
- }
-
-.fc-border-separate tbody tr.fc-first td,
-.fc-border-separate tbody tr.fc-first th {
- border-top-width: 0;
- }
-
-
-
-/* Month View, Basic Week View, Basic Day View
-------------------------------------------------------------------------*/
-
-.fc-grid th {
- text-align: center;
- }
-
-.fc-grid .fc-day-number {
- float: right;
- padding: 0 2px;
- }
-
-.fc-grid .fc-other-month .fc-day-number {
- opacity: 0.3;
- filter: alpha(opacity=30); /* for IE */
- /* opacity with small font can sometimes look too faded
- might want to set the 'color' property instead
- making day-numbers bold also fixes the problem */
- }
-
-.fc-grid .fc-day-content {
- clear: both;
- padding: 2px 2px 1px; /* distance between events and day edges */
- }
-
-/* event styles */
-
-.fc-grid .fc-event-time {
- font-weight: bold;
- }
-
-/* right-to-left */
-
-.fc-rtl .fc-grid .fc-day-number {
- float: left;
- }
-
-.fc-rtl .fc-grid .fc-event-time {
- float: right;
- }
-
-.fc-more-link {
- font-size: 0.85em;
- white-space: nowrap;
- text-decoration: none;
- cursor: pointer;
- padding: 1px;
-}
-
-/* Agenda Week View, Agenda Day View
-------------------------------------------------------------------------*/
-
-.fc-agenda table {
- border-collapse: separate;
- }
-
-.fc-agenda-days th {
- text-align: center;
- }
-
-.fc-agenda .fc-agenda-axis {
- width: 50px;
- padding: 0 4px;
- vertical-align: middle;
- text-align: right;
- white-space: nowrap;
- font-weight: normal;
- }
-
-.fc-agenda .fc-day-content {
- padding: 2px 2px 1px;
- }
-
-/* make axis border take precedence */
-
-.fc-agenda-days .fc-agenda-axis {
- border-right-width: 1px;
- }
-
-.fc-agenda-days .fc-col0 {
- border-left-width: 0;
- }
-
-/* all-day area */
-
-.fc-agenda-allday th {
- border-width: 0 1px;
- }
-
-.fc-agenda-allday .fc-day-content {
- min-height: 34px; /* TODO: doesnt work well in quirksmode */
- _height: 34px;
- }
-
-/* divider (between all-day and slots) */
-
-.fc-agenda-divider-inner {
- height: 2px;
- overflow: hidden;
- }
-
-.fc-widget-header .fc-agenda-divider-inner {
- background: #eee;
- }
-
-/* slot rows */
-
-.fc-agenda-slots th {
- border-width: 1px 1px 0;
- }
-
-.fc-agenda-slots td {
- border-width: 1px 0 0;
- background: none;
- }
-
-.fc-agenda-slots td div {
- height: 20px;
- }
-
-.fc-agenda-slots tr.fc-slot0 th,
-.fc-agenda-slots tr.fc-slot0 td {
- border-top-width: 0;
- }
-
-.fc-agenda-slots tr.fc-minor th,
-.fc-agenda-slots tr.fc-minor td {
- border-top-style: dotted;
- }
-
-.fc-agenda-slots tr.fc-minor th.ui-widget-header {
- *border-top-style: solid; /* doesn't work with background in IE6/7 */
- }
-
-
-
-/* Vertical Events
-------------------------------------------------------------------------*/
-
-.fc-event-vert {
- border-width: 0 1px;
- }
-
-.fc-event-vert .fc-event-head,
-.fc-event-vert .fc-event-content {
- position: relative;
- z-index: 2;
- width: 100%;
- overflow: hidden;
- }
-
-.fc-event-vert .fc-event-time {
- white-space: nowrap;
- font-size: 10px;
- }
-
-.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay */
- position: absolute;
- z-index: 1;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: #fff;
- opacity: .3;
- filter: alpha(opacity=30);
- }
-
-.fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */
-.fc-select-helper .fc-event-bg {
- display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */
- }
-
-/* resizable */
-
-.fc-event-vert .ui-resizable-s {
- bottom: 0 !important; /* importants override pre jquery ui 1.7 styles */
- width: 100% !important;
- height: 8px !important;
- overflow: hidden !important;
- line-height: 8px !important;
- font-size: 11px !important;
- font-family: monospace;
- text-align: center;
- cursor: s-resize;
- }
-
-.fc-agenda .ui-resizable-resizing { /* TODO: better selector */
- _overflow: hidden;
- }
-
-.fc-timeline {
- position: absolute;
- width: 100%;
- left: 0;
- margin: 0;
- padding: 0;
- border: none;
- border-top: 2px solid #3ec400;
- z-index: 999;
-}
-
-/* List view (by bruederli at kolabsys.com)
-------------------------------------------------------------------------*/
-
-.fc-view-list,
-.fc-view-table {
- border: 1px solid #ccc;
- width: auto;
-}
-
-.fc-view-list .fc-list-header,
-.fc-view-table td.fc-list-header {
- border-width: 0;
- border-bottom-width: 1px;
- padding: 3px 5px;
-}
-
-.fc-view-table .fc-first td.fc-list-header {
- border-top-width: 0;
-}
-
-.fc-list-section {
- padding: 4px 2px;
- border-width: 0;
- border-bottom-width: 1px;
-}
-
-.fc-view-list .fc-last {
- border-bottom-width: 0;
-}
-
-.fc-list-section .fc-event {
- position: relative;
- margin: 1px 2px 3px 2px;
-}
-
-.fc-view-table tr.fc-event td {
- padding: 2px;
- border-bottom: 1px solid #ccc;
-}
-
-.fc-view-table tr.fc-event td.fc-event-handle {
- padding: 3px 8px 3px 3px;
-}
-
-.fc-view-table .fc-event-handle .fc-event-skin {
- border-radius: 2px;
- -moz-border-radius: 2px;
-}
-
-.fc-view-table .fc-event-handle .fc-event-inner {
- display: block;
- width: 8px;
- height: 10px;
- border-radius: 2px;
- -moz-border-radius: 2px;
-}
-
-.fc-view-table table {
- table-layout: fixed;
- width: 100%;
-}
-
-.fc-view-table col.fc-event-handle {
- width: 18px;
-}
-
-.fc-event-handle .fc-event-inner {
- border-color: inherit;
- background-color: inherit;
-}
-
-.fc-view-table col.fc-event-date {
- width: 7em;
-}
-
-.fc-view-table .fc-list-day col.fc-event-date {
- width: 1px;
-}
-
-.fc-view-table col.fc-event-time {
- width: 8em;
-}
-
-.fc-view-table td.fc-event-date,
-.fc-view-table td.fc-event-time {
- white-space: nowrap;
- padding-right: 1em;
-}
-
diff --git a/plugins/calendar/skins/default/iehacks.css b/plugins/calendar/skins/default/iehacks.css
deleted file mode 100644
index 831266f..0000000
--- a/plugins/calendar/skins/default/iehacks.css
+++ /dev/null
@@ -1,88 +0,0 @@
-/* CSS hacks for IE 6/7 */
-
-#main {
- width: expression(Math.max(300, parseInt(document.documentElement.clientWidth)-10)+'px');
- height: expression(Math.max(300, parseInt(document.documentElement.clientHeight)-100)+'px');
-}
-
-#sidebar,
-#sidebartoggle {
- height: expression((parseInt(this.parentNode.offsetHeight)-37)+'px');
-}
-
-#calendar {
- width: expression((parseInt(this.parentNode.offsetWidth)-parseInt(document.getElementById('sidebartoggle').offsetWidth)-parseInt(document.getElementById('sidebartoggle').offsetLeft)-4)+'px');
- height: expression(parseInt(this.parentNode.offsetHeight)+'px');
-}
-
-#calendars {
- height: expression((parseInt(this.parentNode.offsetHeight)-220)+'px');
-}
-
-#agendaoptions {
- width: expression((parseInt(this.parentNode.offsetWidth)-12)+'px');
-}
-
-#calendartoolbar a.buttonPas {
- filter: alpha(opacity=35);
-}
-
-html #calendartoolbar a.button,
-html #calendartoolbar a.buttonPas {
- background-image: url(images/toolbar.gif);
-}
-
-#datepicker a.ui-priority-secondary {
- filter: alpha(opacity=40);
-}
-
-#calendarslist li span {
- background-image: url(images/calendars.gif);
-}
-
-#datepicker .ui-widget-header {
- width: 102%;
-}
-
-#eventshow.sensitivity-private {
- background-image: url(images/badge_private.gif);
-}
-
-#eventshow.sensitivity-confidential {
- background-image: url(images/badge_confidential.gif);
-}
-
-.fc-day-content {
- cursor: default;
-}
-
-.fc-header-title h2 {
- font-size: 16px;
-}
-
-.fc-event-temp .fc-event-bg {
- display: none; /* nested opacity filters while dragging don't work */
-}
-
-#schedule-event-time {
- filter: alpha(opacity=40);
-}
-
-#eventfreebusy .schedule-buttons,
-#edit-attendees-form #edit-attendee-schedule {
- right: 0.6em;
-}
-
-#schedule-freebusy-times td.all-busy,
-#schedule-freebusy-times td.all-tentative,
-#schedule-freebusy-times td.all-out-of-office {
- background-image: url('images/freebusy-colors.gif');
-}
-
-#schedule-freebusy-times tr.times td.allday {
- width: expression(Math.max(60, parseInt(this.offsetWidth))+'px');
-}
-
-.ui-dialog .ui-dialog-titlebar {
- width: expression((parseInt(this.parentNode.offsetWidth)-26)+'px');
-}
diff --git a/plugins/calendar/skins/default/images/attendee-status.gif b/plugins/calendar/skins/default/images/attendee-status.gif
deleted file mode 100644
index 5c08aae..0000000
Binary files a/plugins/calendar/skins/default/images/attendee-status.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/badge_confidential.gif b/plugins/calendar/skins/default/images/badge_confidential.gif
deleted file mode 100644
index ce6b2a0..0000000
Binary files a/plugins/calendar/skins/default/images/badge_confidential.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/badge_confidential.png b/plugins/calendar/skins/default/images/badge_confidential.png
deleted file mode 100644
index e12e788..0000000
Binary files a/plugins/calendar/skins/default/images/badge_confidential.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/badge_private.gif b/plugins/calendar/skins/default/images/badge_private.gif
deleted file mode 100644
index 900ed73..0000000
Binary files a/plugins/calendar/skins/default/images/badge_private.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/badge_private.png b/plugins/calendar/skins/default/images/badge_private.png
deleted file mode 100644
index acf3207..0000000
Binary files a/plugins/calendar/skins/default/images/badge_private.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/calendar-blue.png b/plugins/calendar/skins/default/images/calendar-blue.png
deleted file mode 100644
index 95c9452..0000000
Binary files a/plugins/calendar/skins/default/images/calendar-blue.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/calendar.gif b/plugins/calendar/skins/default/images/calendar.gif
deleted file mode 100644
index 4b25de0..0000000
Binary files a/plugins/calendar/skins/default/images/calendar.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/calendar.png b/plugins/calendar/skins/default/images/calendar.png
deleted file mode 100644
index caab8a3..0000000
Binary files a/plugins/calendar/skins/default/images/calendar.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/calendars.gif b/plugins/calendar/skins/default/images/calendars.gif
deleted file mode 100644
index cf12ebd..0000000
Binary files a/plugins/calendar/skins/default/images/calendars.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/calendars.png b/plugins/calendar/skins/default/images/calendars.png
deleted file mode 100644
index feb3945..0000000
Binary files a/plugins/calendar/skins/default/images/calendars.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/eventicons.gif b/plugins/calendar/skins/default/images/eventicons.gif
deleted file mode 100644
index 7adbdeb..0000000
Binary files a/plugins/calendar/skins/default/images/eventicons.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/export.png b/plugins/calendar/skins/default/images/export.png
deleted file mode 100644
index d02781d..0000000
Binary files a/plugins/calendar/skins/default/images/export.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/freebusy-colors.gif b/plugins/calendar/skins/default/images/freebusy-colors.gif
deleted file mode 100644
index 699f4b9..0000000
Binary files a/plugins/calendar/skins/default/images/freebusy-colors.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/freebusy-colors.png b/plugins/calendar/skins/default/images/freebusy-colors.png
deleted file mode 100644
index ca37cd0..0000000
Binary files a/plugins/calendar/skins/default/images/freebusy-colors.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/invitation.png b/plugins/calendar/skins/default/images/invitation.png
deleted file mode 100644
index f3df83a..0000000
Binary files a/plugins/calendar/skins/default/images/invitation.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/listheader.gif b/plugins/calendar/skins/default/images/listheader.gif
deleted file mode 100644
index bf77a11..0000000
Binary files a/plugins/calendar/skins/default/images/listheader.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/loading_blue.gif b/plugins/calendar/skins/default/images/loading_blue.gif
deleted file mode 100644
index 2ea6b19..0000000
Binary files a/plugins/calendar/skins/default/images/loading_blue.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/minicolors-all.png b/plugins/calendar/skins/default/images/minicolors-all.png
deleted file mode 100644
index 001ed88..0000000
Binary files a/plugins/calendar/skins/default/images/minicolors-all.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/minicolors-handles.gif b/plugins/calendar/skins/default/images/minicolors-handles.gif
deleted file mode 100644
index 9aa9f75..0000000
Binary files a/plugins/calendar/skins/default/images/minicolors-handles.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/preview.png b/plugins/calendar/skins/default/images/preview.png
deleted file mode 100644
index 75f43aa..0000000
Binary files a/plugins/calendar/skins/default/images/preview.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/print.png b/plugins/calendar/skins/default/images/print.png
deleted file mode 100644
index 52dd67e..0000000
Binary files a/plugins/calendar/skins/default/images/print.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/spacer.gif b/plugins/calendar/skins/default/images/spacer.gif
deleted file mode 100644
index c749aaf..0000000
Binary files a/plugins/calendar/skins/default/images/spacer.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/toggle.gif b/plugins/calendar/skins/default/images/toggle.gif
deleted file mode 100644
index d3be86f..0000000
Binary files a/plugins/calendar/skins/default/images/toggle.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/toolbar.gif b/plugins/calendar/skins/default/images/toolbar.gif
deleted file mode 100644
index 2cf2693..0000000
Binary files a/plugins/calendar/skins/default/images/toolbar.gif and /dev/null differ
diff --git a/plugins/calendar/skins/default/images/toolbar.png b/plugins/calendar/skins/default/images/toolbar.png
deleted file mode 100644
index 94beddb..0000000
Binary files a/plugins/calendar/skins/default/images/toolbar.png and /dev/null differ
diff --git a/plugins/calendar/skins/default/jquery.miniColors.css b/plugins/calendar/skins/default/jquery.miniColors.css
deleted file mode 100644
index dc7c4a7..0000000
--- a/plugins/calendar/skins/default/jquery.miniColors.css
+++ /dev/null
@@ -1,106 +0,0 @@
-.miniColors-trigger {
- height: 22px;
- width: 22px;
- background: url('images/minicolors-all.png') -170px 0 no-repeat;
- vertical-align: middle;
- margin: 0 .25em;
- display: inline-block;
- outline: none;
-}
-
-.miniColors-selector {
- position: absolute;
- width: 175px;
- height: 150px;
- background: #FFF;
- border: solid 1px #BBB;
- -moz-box-shadow: 0 0 6px rgba(0, 0, 0, .25);
- -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, .25);
- box-shadow: 0 0 6px rgba(0, 0, 0, .25);
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- padding: 5px;
- z-index: 999999;
-}
-
-.miniColors-selector.black {
- background: #000;
- border-color: #000;
-}
-
-.miniColors-colors {
- position: absolute;
- top: 5px;
- left: 5px;
- width: 150px;
- height: 150px;
- background: url('images/minicolors-all.png') top left no-repeat;
- cursor: crosshair;
-}
-
-.miniColors-hues {
- position: absolute;
- top: 5px;
- left: 160px;
- width: 20px;
- height: 150px;
- background: url('images/minicolors-all.png') -150px 0 no-repeat;
- cursor: crosshair;
-}
-
-.miniColors-colorPicker {
- position: absolute;
- width: 11px;
- height: 11px;
- background: url('images/minicolors-all.png') -170px -28px no-repeat;
-}
-
-.miniColors-huePicker {
- position: absolute;
- left: -3px;
- width: 26px;
- height: 3px;
- background: url('images/minicolors-all.png') -170px -24px no-repeat;
- overflow: hidden;
-}
-
-.miniColors-presets {
- position: absolute;
- left: 185px;
- top: 5px;
- width: 60px;
-}
-
-.miniColors-colorPreset {
- float: left;
- width: 18px;
- height: 15px;
- margin: 2px;
- border: 1px solid #333;
- cursor: pointer;
-}
-
-.miniColors-colorPreset-active {
- border: 2px dotted #666;
- margin: 1px;
-}
-
-/* Hacks for IE6/7 */
-
-* html .miniColors-colors {
- background-image: none;
- filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='plugins/calendar/skins/default/images/minicolors-all.png', sizingMethod='crop');
-}
-
-* html .miniColors-colorPicker {
- background: url('images/minicolors-handles.gif') 0 -28px no-repeat;
-}
-
-* html .miniColors-huePicker {
- background: url('images/minicolors-handles.gif') 0 -24px no-repeat;
-}
-
-* html .miniColors-trigger {
- background: url('images/minicolors-handles.gif') 0 0 no-repeat;
-}
diff --git a/plugins/calendar/skins/default/print.css b/plugins/calendar/skins/default/print.css
deleted file mode 100644
index 3c9bd71..0000000
--- a/plugins/calendar/skins/default/print.css
+++ /dev/null
@@ -1,208 +0,0 @@
-/*** Printing styles for Calendar plugin ***/
-
-body {
- margin: 0;
- color: #000;
- background: #fff;
-}
-
-body, td, th, div, p, h3, select, input, textarea {
- font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
- font-size: 8pt;
-}
-
-#calendar {
- position: relative;
- top: 0;
- left: 0;
- height: auto;
- margin: 5em auto 0 auto;
- overflow: visible;
-}
-
-#calendar .fc-header-right {
- padding-right: 0;
-}
-
-#printconfig {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- z-index: 10000;
- padding: 0.5em;
- background: #ebebeb;
- border-bottom: 1px solid #999;
- box-shadow: 0 3px 4px #ccc;
- -moz-box-shadow: 0 3px 4px #ccc;
- -webkit-box-shadow: 0 3px 4px #ccc;
-}
-
-#printconfig .prop {
- padding-right: 2em;
-}
-
-#message {
- position: absolute;
- top: 5.5em;
- left: 1em;
-}
-
-#message div.loading {
- color: #666;
- font-style: italic;
-}
-
-#calendarlist {
- list-style-type: square;
- margin: 2em 0;
- padding-left: 1em;
-}
-
-#calendarlist li {
- float: left;
- padding-left: 0;
- padding-right: 3em;
- margin-left: 0;
- font-weight: bold;
-}
-
-#calendarlist input {
- display: none;
-}
-
-.calwidth {
- width: 700px;
- margin: 0 auto;
-}
-
-.rightalign {
- float: right;
- padding-top: 0.3em;
-}
-
- at media print {
- .noprint,
- .fc-header-right span {
- display: none;
- }
-
- #calendar {
- margin-top: 0;
- }
-}
-
-/* fullcalendar style overrides */
-
-.fc-view {
- overflow: visible;
-}
-
-.fc-event-skin,
-.fc-event-inner .fc-event-skin {
- color: black;
- background-color: #fff !important;
-}
-
-.fc-event-title {
- font-weight: bold;
-}
-
-.fc-event-hori .fc-event-title {
- font-weight: normal;
- white-space: nowrap;
-}
-
-.fc-event-hori .fc-event-time {
- white-space: nowrap;
- font-weight: normal !important;
- font-size: 10px;
- padding-right: 0.6em;
-}
-
-.fc-grid .fc-event-time {
- font-weight: normal !important;
- padding-right: 0.3em;
-}
-
-.fc-event-cateories {
- font-style: italic;
-}
-
-div.fc-event-location {
- font-size: 90%;
-}
-
-.fc-agenda-slots td div {
- height: 1.4em;
-}
-
-.fc-widget-header,
-.fc-mon, .fc-tue, .fc-wed, .fc-thu, .fc-fri {
- background-color: #fff;
-}
-
-.fc-widget-header, .fc-widget-content {
- border-color: #ccc;
-}
-
-.fc-icon-alarms,
-.fc-icon-recurring {
- display: inline-block;
- width: 11px;
- height: 11px;
- background: url('images/eventicons.gif') 0 0 no-repeat;
- margin-left: 3px;
- line-height: 10px;
-}
-
-.fc-icon-alarms {
- background-position: 0 -13px;
-}
-
-.fc-view-list, .fc-view-table {
- border: 0;
-}
-
-.fc-view-list div.fc-list-header,
-.fc-view-table td.fc-list-header {
- padding: 0.3em;
- background: #fff;
- font-weight: bold;
- font-size: 1.2em;
- color: #333;
- border-color: #333;
- border-style: solid;
- border-width: 1px 0;
- filter: none;
-}
-
-.fc-list-section .fc-event {
- cursor: auto;
-}
-
-.fc-view-table tr.fc-event td,
-.fc-view-table tr.fc-event td.fc-event-handle {
- border-color: #999;
- padding-top: 0.5em;
- padding-bottom: 0.5em;
-}
-
-.fc-view-table tr.fc-last td {
- border: 0;
-}
-
-.fc-view-table tr.fc-event .fc-event-description {
- padding-left: 2em;
- padding-top: 0em;
-}
-
-.fc-event-vert .fc-event-description {
- font-size: 90%;
- font-style: italic;
-}
-
-
-.fc-view-table col.fc-event-location {
- width: 20%;
-}
diff --git a/plugins/calendar/skins/default/print.iehacks.css b/plugins/calendar/skins/default/print.iehacks.css
deleted file mode 100644
index 986f004..0000000
--- a/plugins/calendar/skins/default/print.iehacks.css
+++ /dev/null
@@ -1,25 +0,0 @@
-/* CSS hacks for IE 6/7 */
-
-#calendar {
- top: 5em;
-}
-
-.calwidth {
- width: 172mm;
-}
-
-.fc-header-title h2 {
- font-size: 16px;
-}
-
-#calendarlist li {
- float: none;
- padding: 0;
- margin-left: 1em;
-}
-
- at media print {
- #calendar {
- top: 0;
- }
-}
\ No newline at end of file
diff --git a/plugins/calendar/skins/default/templates/attachment.html b/plugins/calendar/skins/default/templates/attachment.html
deleted file mode 100644
index 34d4da6..0000000
--- a/plugins/calendar/skins/default/templates/attachment.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-</head>
-<body class="extwin">
-
-<roundcube:include file="/includes/header.html" />
-
-<div id="partheader">
-<roundcube:object name="plugin.attachmentcontrols" cellpadding="2" cellspacing="0" />
-
-<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>]
-</div>
-</div>
-
-
-<div id="attachmentcontainer">
-<roundcube:object name="plugin.attachmentframe" id="attachmentframe" width="100%" height="100%" />
-</div>
-
-</body>
-</html>
-
diff --git a/plugins/calendar/skins/default/templates/calendar.html b/plugins/calendar/skins/default/templates/calendar.html
deleted file mode 100644
index a22056d..0000000
--- a/plugins/calendar/skins/default/templates/calendar.html
+++ /dev/null
@@ -1,201 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-<script type="text/javascript" src="/functions.js"></script>
-<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="./plugins/calendar/skins/default/iehacks.css" /><![endif]-->
-</head>
-<body class="calendarmain">
-
-<roundcube:include file="/includes/taskbar.html" />
-<roundcube:include file="/includes/header.html" />
-
-<div id="main">
- <div id="calendarsidebar">
- <div id="datepicker"></div>
- <div id="calendars" style="visibility:hidden">
- <div class="boxtitle"><roundcube:label name="calendar.calendars" /></div>
- <div class="boxlistcontent">
- <roundcube:object name="plugin.calendar_list" id="calendarslist" />
- </div>
- <div class="boxfooter">
- <roundcube:button command="calendar-create" type="link" title="calendar.createcalendar" class="buttonPas addgroup" classAct="button addgroup" content=" " />
- <roundcube:button name="calendaroptionslink" id="calendaroptionslink" type="link" title="calendaractions" class="button groupactions" onclick="rcmail_ui.show_popup('calendaroptions');return false" content=" " />
- </div>
- </div>
- </div>
- <div id="calendarsidebartoggle"></div>
- <div id="calendar">
- <roundcube:object name="plugin.angenda_options" class="boxfooter" id="agendaoptions" />
- </div>
-</div>
-
-<div id="calendaroptionsmenu" class="popupmenu">
- <ul>
- <li><roundcube:button command="calendar-edit" label="calendar.edit" classAct="active" /></li>
- <li><roundcube:button command="calendar-remove" label="calendar.remove" classAct="active" /></li>
- <li><roundcube:button command="events-import" label="calendar.importevents" classAct="active" /></li>
- <li><roundcube:button command="calendar-showurl" label="calendar.showurl" classAct="active" /></li>
- <roundcube:if condition="env:calendar_driver == 'kolab'" />
- <li class="separator_above"><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li>
- <roundcube:endif />
- </ul>
-</div>
-
-<div id="eventshow" class="uidialog">
- <h1 id="event-title">Event Title</h1>
- <div class="event-section" id="event-location">Location</div>
- <div class="event-section" id="event-date">From-To</div>
- <div class="event-section" id="event-description">
- <h5 class="label"><roundcube:label name="calendar.description" /></h5>
- <div class="event-text"></div>
- </div>
- <div class="event-section" id="event-repeat">
- <h5 class="label"><roundcube:label name="calendar.repeat" /></h5>
- <div class="event-text"></div>
- </div>
- <div class="event-section" id="event-alarm">
- <h5 class="label"><roundcube:label name="calendar.alarms" /></h5>
- <div class="event-text"></div>
- </div>
- <div class="event-section" id="event-attendees">
- <h5 class="label"><roundcube:label name="calendar.tabattendees" /></h5>
- <div class="event-text"></div>
- </div>
- <div class="event-line" id="event-calendar">
- <label><roundcube:label name="calendar.calendar" /></label>
- <span class="event-text">Default</span>
- </div>
- <div class="event-line" id="event-category">
- <label><roundcube:label name="calendar.category" /></label>
- <span class="event-text"></span>
- </div>
- <div class="event-line" id="event-free-busy">
- <label><roundcube:label name="calendar.freebusy" /></label>
- <span class="event-text"></span>
- </div>
- <div class="event-line" id="event-priority">
- <label><roundcube:label name="calendar.priority" /></label>
- <span class="event-text"></span>
- </div>
- <div class="event-line" id="event-sensitivity">
- <label><roundcube:label name="calendar.sensitivity" /></label>
- <span class="event-text"></span>
- </div>
- <div class="event-section" id="event-attachments">
- <label><roundcube:label name="attachments" /></label>
- <div class="event-text attachments-list"></div>
- </div>
-
- <roundcube:object name="plugin.event_rsvp_buttons" id="event-rsvp" style="display:none" />
-</div>
-
-<roundcube:include file="/templates/eventedit.html" />
-
-<div id="eventfreebusy" class="uidialog">
- <roundcube:object name="plugin.attendees_freebusy_table" id="attendees-freebusy-table" cellspacing="0" cellpadding="0" border="0" />
-
- <div class="schedule-options">
-
- <div class="schedule-buttons">
- <button id="shedule-freebusy-prev" title="<roundcube:label name='previouspage' />">◄</button><button id="shedule-freebusy-next" title="<roundcube:label name='nextpage' />">►</button>
- </div>
- </div>
-
- <div style="float:left; width:28em">
- <div class="form-section">
- <label for="schedule-startdate"><roundcube:label name="calendar.start" /></label>
- <input type="text" name="startdate" size="10" id="schedule-startdate" disabled="true" />
- <input type="text" name="starttime" size="6" id="schedule-starttime" disabled="true" />
- </div>
- <div class="form-section">
- <label for="schedule-enddate"><roundcube:label name="calendar.end" /></label>
- <input type="text" name="enddate" size="10" id="schedule-enddate" disabled="true" />
- <input type="text" name="endtime" size="6" id="schedule-endtime" disabled="true" />
- </div>
- </div>
- <div style="float:left">
- <div class="schedule-find-buttons">
- <button id="shedule-find-prev">◄ <roundcube:label name="calendar.prevslot" /></button>
- <button id="shedule-find-next"><roundcube:label name="calendar.nextslot" /> ►</button>
- </div>
- <div class="schedule-options">
- <label><input type="checkbox" id="schedule-freebusy-workinghours" value="1" /><roundcube:label name="calendar.onlyworkinghours" /></label>
- </div>
- </div>
- <br style="clear:both;" />
-
- <roundcube:include file="/templates/freebusylegend.html" />
- <div class="attendees-list">
- <span class="attendee organizer"><roundcube:label name="calendar.roleorganizer" /></span>
- <span class="attendee req-participant"><roundcube:label name="calendar.rolerequired" /></span>
- <span class="attendee opt-participant"><roundcube:label name="calendar.roleoptional" /></span>
- <span class="attendee chair"><roundcube:label name="calendar.roleresource" /></span>
- </div>
-</div>
-
-<div id="calendarform" class="uidialog">
- <roundcube:label name="loading" />
-</div>
-
-<div id="eventsimport" class="uidialog">
- <roundcube:object name="plugin.events_import_form" id="events-import-form" uploadFieldSize="30" />
-</div>
-
-<div id="calendarurlbox" class="uidialog">
- <p><roundcube:label name="calendar.showurldescription" /></p>
- <textarea id="calfeedurl" rows="2" readonly="readonly"></textarea>
-</div>
-
-<div id="alarm-snooze-dropdown" class="popupmenu">
- <roundcube:object name="plugin.snooze_select" type="ul" />
-</div>
-
-<div id="calendartoolbar">
- <roundcube:button command="addevent" type="link" class="buttonPas addevent" classAct="button addevent" classSel="button addeventSel" title="calendar.new_event" content=" " />
- <roundcube:button command="print" type="link" class="buttonPas print" classAct="button print" classSel="button printSel" title="calendar.print" content=" " />
- <roundcube:button command="export" type="link" class="buttonPas export" classAct="button export" classSel="button exportSel" title="calendar.export" content=" " />
- <roundcube:container name="toolbar" id="calendartoolbar" />
-</div>
-
-<div id="quicksearchbar">
-<roundcube:button name="searchmenulink" id="searchmenulink" image="/images/icons/glass.png" />
-<roundcube:object name="plugin.searchform" id="quicksearchbox" />
-<roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" />
-</div>
-
-<roundcube:object name="plugin.calendar_css" />
-
-<script type="text/javascript">
-
-// use skin functions to handle popup-menus
-rcube_init_mail_ui();
-rcmail_ui.popups.calendaroptions = { id:'calendaroptionsmenu', above:1, obj:$('#calendaroptionsmenu') };
-
-$(document).ready(function(e){
- // initialize sidebar toggle
- $('#calendarsidebartoggle').click(function() {
- var width = $(this).data('sidebarwidth');
- var offset = $(this).data('offset');
- var $sidebar = $('#calendarsidebar'), time = 250;
-
- if ($sidebar.is(':visible')) {
- $sidebar.animate({ left:'-'+(width+10)+'px' }, time, function(){ $('#calendarsidebar').hide(); });
- $(this).animate({ left:'8px'}, time, function(){ $('#calendarsidebartoggle').addClass('sidebarclosed') });
- $('#calendar').animate({ left:'20px'}, time, function(){ $(this).fullCalendar('render'); });
- }
- else {
- $sidebar.show().animate({ left:'10px' }, time);
- $(this).animate({ left:offset+'px'}, time, function(){ $('#calendarsidebartoggle').removeClass('sidebarclosed'); });
- $('#calendar').animate({ left:(width+16)+'px'}, time, function(){ $(this).fullCalendar('render'); });
- }
- })
- .data('offset', $('#calendarsidebartoggle').position().left)
- .data('sidebarwidth', $('#calendarsidebar').width() + $('#calendarsidebar').position().left);
-});
-
-</script>
-
-</body>
-</html>
diff --git a/plugins/calendar/skins/default/templates/eventedit.html b/plugins/calendar/skins/default/templates/eventedit.html
deleted file mode 100644
index 3548478..0000000
--- a/plugins/calendar/skins/default/templates/eventedit.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<div id="eventedit" class="uidialog">
- <form id="eventtabs" action="#" method="post" enctype="multipart/form-data">
- <ul>
- <li><a href="#event-tab-1"><roundcube:label name="calendar.tabsummary" /></a></li>
- <li id="edit-tab-recurrence"><a href="#event-tab-2"><roundcube:label name="calendar.tabrecurrence" /></a></li>
- <li id="edit-tab-attendees"><a href="#event-tab-3"><roundcube:label name="calendar.tabattendees" /></a></li>
- <li id="edit-tab-attachments"><a href="#event-tab-4"><roundcube:label name="calendar.tabattachments" /></a></li>
- </ul>
- <!-- basic info -->
- <div id="event-tab-1">
- <div class="event-section">
- <label for="edit-title"><roundcube:label name="calendar.title" /></label>
- <br />
- <input type="text" class="text" name="title" id="edit-title" size="40" />
- </div>
- <div class="event-section">
- <label for="edit-location"><roundcube:label name="calendar.location" /></label>
- <br />
- <input type="text" class="text" name="location" id="edit-location" size="40" />
- </div>
- <div class="event-section">
- <label for="edit-description"><roundcube:label name="calendar.description" /></label>
- <br />
- <textarea name="description" id="edit-description" class="text" rows="5" cols="40"></textarea>
- </div>
- <div class="event-section">
- <label style="float:right;padding-right:0.5em"><input type="checkbox" name="allday" id="edit-allday" value="1" /><roundcube:label name="calendar.all-day" /></label>
- <label for="edit-startdate"><roundcube:label name="calendar.start" /></label>
- <input type="text" name="startdate" size="10" id="edit-startdate" />
- <input type="text" name="starttime" size="6" id="edit-starttime" />
- </div>
- <div class="event-section">
- <label for="edit-enddate"><roundcube:label name="calendar.end" /></label>
- <input type="text" name="enddate" size="10" id="edit-enddate" />
- <input type="text" name="endtime" size="6" id="edit-endtime" />
- </div>
- <div class="event-section" id="edit-alarms">
- <label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
- <roundcube:object name="plugin.alarm_select" />
- </div>
- <div class="event-section" id="calendar-select">
- <label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
- <roundcube:object name="plugin.calendar_select" id="edit-calendar" />
- </div>
- <div class="event-section">
- <label for="edit-categories"><roundcube:label name="calendar.category" /></label>
- <roundcube:object name="plugin.category_select" id="edit-categories" />
- </div>
- <div class="event-section">
- <label for="edit-free-busy"><roundcube:label name="calendar.freebusy" /></label>
- <roundcube:object name="plugin.freebusy_select" id="edit-free-busy" />
- </div>
- <div class="event-section">
- <label for="edit-priority"><roundcube:label name="calendar.priority" /></label>
- <roundcube:object name="plugin.priority_select" id="edit-priority" />
- </div>
- <div class="event-section">
- <label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
- <roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
- </div>
- </div>
- <!-- recurrence settings -->
- <div id="event-tab-2">
- <div class="event-section border-after">
- <roundcube:object name="plugin.recurrence_form" part="frequency" />
- </div>
- <div class="recurrence-form border-after" id="recurrence-form-daily">
- <roundcube:object name="plugin.recurrence_form" part="daily" class="event-section" />
- </div>
- <div class="recurrence-form border-after" id="recurrence-form-weekly">
- <roundcube:object name="plugin.recurrence_form" part="weekly" class="event-section" />
- </div>
- <div class="recurrence-form border-after" id="recurrence-form-monthly">
- <roundcube:object name="plugin.recurrence_form" part="monthly" class="event-section" />
- </div>
- <div class="recurrence-form border-after" id="recurrence-form-yearly">
- <roundcube:object name="plugin.recurrence_form" part="yearly" class="event-section" />
- </div>
- <div class="recurrence-form" id="recurrence-form-until">
- <roundcube:object name="plugin.recurrence_form" part="until" class="event-section" />
- </div>
- </div>
- <!-- attendees list -->
- <div id="event-tab-3">
- <roundcube:object name="plugin.attendees_list" id="edit-attendees-table" cellspacing="0" cellpadding="0" border="0" />
- <roundcube:object name="plugin.attendees_form" id="edit-attendees-form" />
- <roundcube:include file="/templates/freebusylegend.html" />
- </div>
- <!-- attachments list (with upload form) -->
- <div id="event-tab-4">
- <div id="edit-attachments" class="attachments-list">
- <roundcube:object name="plugin.attachments_list" id="attachmentlist" deleteIcon="/images/icons/delete.png" cancelIcon="/images/icons/delete.png" loadingIcon="/images/display/loading_blue.gif" />
- </div>
- <div id="edit-attachments-form">
- <roundcube:object name="plugin.attachments_form" id="calendar-attachment-form" attachmentFieldSize="30" />
- </div>
- </div>
- </form>
-
- <roundcube:object name="plugin.edit_attendees_notify" id="edit-attendees-notify" class="event-dialog-message" style="display:none" />
- <roundcube:object name="plugin.edit_recurring_warning" class="event-dialog-message edit-recurring-warning" style="display:none" />
- <div id="edit-localchanges-warning" class="event-dialog-message" style="display:none"><roundcube:label name="calendar.localchangeswarning" /></div>
-</div>
\ No newline at end of file
diff --git a/plugins/calendar/skins/default/templates/freebusylegend.html b/plugins/calendar/skins/default/templates/freebusylegend.html
deleted file mode 100644
index 5cc01a1..0000000
--- a/plugins/calendar/skins/default/templates/freebusylegend.html
+++ /dev/null
@@ -1,7 +0,0 @@
- <div id="edit-attendees-legend" class="availability">
- <span class="legend"><img class="availabilityicon free" src="./program/blank.gif" /> <roundcube:label name="calendar.availfree" /></span>
- <span class="legend"><img class="availabilityicon busy" src="./program/blank.gif" /> <roundcube:label name="calendar.availbusy" /></span>
- <span class="legend"><img class="availabilityicon tentative" src="./program/blank.gif" /> <roundcube:label name="calendar.availtentative" /></span>
- <span class="legend"><img class="availabilityicon out-of-office" src="./program/blank.gif" /> <roundcube:label name="calendar.availoutofoffice" /></span>
- <span class="legend"><img class="availabilityicon unknown" src="./program/blank.gif" /> <roundcube:label name="calendar.availunknown" /></span>
- </div>
diff --git a/plugins/calendar/skins/default/templates/itipattend.html b/plugins/calendar/skins/default/templates/itipattend.html
deleted file mode 100644
index 84968b5..0000000
--- a/plugins/calendar/skins/default/templates/itipattend.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-</head>
-<body class="calendaritipattend">
-
-<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" style="margin:0 11px" />
-
-<roundcube:object name="message" id="message" />
-
-<div class="centerbox">
- <roundcube:object name="plugin.event_inviteform" />
- <roundcube:object name="plugin.event_invitebox" class="calendar-invitebox" />
- <roundcube:object name="plugin.event_rsvp_buttons" type="submit" iname="rsvp" id="event-rsvp" />
- </form>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/calendar/skins/default/templates/kolabacl.html b/plugins/calendar/skins/default/templates/kolabacl.html
deleted file mode 100644
index 668a670..0000000
--- a/plugins/calendar/skins/default/templates/kolabacl.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-<script type="text/javascript" src="/functions.js"></script>
-</head>
-<body class="iframe" style="background:#fff; margin:0">
-
-<roundcube:object name="folderacl" />
-
-</body>
-</html>
diff --git a/plugins/calendar/skins/default/templates/kolabform.html b/plugins/calendar/skins/default/templates/kolabform.html
deleted file mode 100644
index a74481a..0000000
--- a/plugins/calendar/skins/default/templates/kolabform.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div id="calendar-kolabform">
- <roundcube:object name="calendarform" />
-</div>
-<script type="text/javascript">rcube_init_tabs('calendar-kolabform');</script>
-<style type="text/css">
-#calendarpropform { min-width:680px }
-</style>
\ No newline at end of file
diff --git a/plugins/calendar/skins/default/templates/print.html b/plugins/calendar/skins/default/templates/print.html
deleted file mode 100644
index 3fc85f3..0000000
--- a/plugins/calendar/skins/default/templates/print.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-</head>
-<body class="calendarprint">
-
-<div id="printconfig" class="noprint">
- <div class="calwidth">
- <a href="#close" onclick="window.close()" class="rightalign"><roundcube:label name="close" /></a>
- <span class="prop"><input type="button" id="printme" value="<roundcube:label name='print' />" onclick="window.print()"></span>
- <span class="prop"><label><input type="checkbox" id="propdescription" checked="checked" /> <roundcube:label name="calendar.printdescriptions" /></label></span>
- </div>
-</div>
-
-<roundcube:object name="message" id="message" class="noprint" />
-
-<div id="calendar" class="calwidth"></div>
-
-<div class="calwidth">
- <roundcube:object name="plugin.calendar_list" activeonly="true" id="calendarlist" />
-</div>
-
-<roundcube:object name="plugin.calendar_css" printmode="true" />
-
-<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="./plugins/calendar/skins/default/print.iehacks.css" /><![endif]-->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/kolab_addressbook/package.xml b/plugins/kolab_addressbook/package.xml
index 61015a7..73e26a4 100644
--- a/plugins/kolab_addressbook/package.xml
+++ b/plugins/kolab_addressbook/package.xml
@@ -44,10 +44,10 @@
<file name="lib/rcube_kolab_contacts.php" role="php"></file>
<file name="config.inc.php.dist" role="data"></file>
<file name="LICENSE" role="data"></file>
- <file name="skins/default/kolab_addressbook.css" role="data"></file>
- <file name="skins/default/kolab_folders.gif" role="data"></file>
- <file name="skins/default/kolab_folders.png" role="data"></file>
- <file name="skins/default/templates/bookedit.html" role="data"></file>
+ <file name="skins/classic/kolab_addressbook.css" role="data"></file>
+ <file name="skins/classic/kolab_folders.gif" role="data"></file>
+ <file name="skins/classic/kolab_folders.png" role="data"></file>
+ <file name="skins/classic/templates/bookedit.html" role="data"></file>
<file name="skins/larry/kolab_addressbook.css" role="data"></file>
<file name="skins/larry/templates/bookedit.html" role="data"></file>
<file name="localization/de_CH.inc" role="data"></file>
diff --git a/plugins/kolab_addressbook/skins/classic/kolab_addressbook.css b/plugins/kolab_addressbook/skins/classic/kolab_addressbook.css
new file mode 100644
index 0000000..da3abed
--- /dev/null
+++ b/plugins/kolab_addressbook/skins/classic/kolab_addressbook.css
@@ -0,0 +1,35 @@
+#directorylist li.addressbook.readonly
+{
+ /* don't use 'background' to not reset background color */
+ background-image: url(kolab_folders.png);
+ background-position: 5px 0px;
+ background-repeat: no-repeat;
+}
+
+#directorylist li.addressbook.shared
+{
+ background-image: url(kolab_folders.png);
+ background-position: 5px -54px;
+ background-repeat: no-repeat;
+}
+
+#directorylist li.addressbook.shared.readonly
+{
+ background-image: url(kolab_folders.png);
+ background-position: 5px -72px;
+ background-repeat: no-repeat;
+}
+
+#directorylist li.addressbook.other
+{
+ background-image: url(kolab_folders.png);
+ background-position: 5px -18px;
+ background-repeat: no-repeat;
+}
+
+#directorylist li.addressbook.other.readonly
+{
+ background-image: url(kolab_folders.png);
+ background-position: 5px -36px;
+ background-repeat: no-repeat;
+}
diff --git a/plugins/kolab_addressbook/skins/classic/kolab_folders.gif b/plugins/kolab_addressbook/skins/classic/kolab_folders.gif
new file mode 100644
index 0000000..3ac6fc4
Binary files /dev/null and b/plugins/kolab_addressbook/skins/classic/kolab_folders.gif differ
diff --git a/plugins/kolab_addressbook/skins/classic/kolab_folders.png b/plugins/kolab_addressbook/skins/classic/kolab_folders.png
new file mode 100644
index 0000000..95a192e
Binary files /dev/null and b/plugins/kolab_addressbook/skins/classic/kolab_folders.png differ
diff --git a/plugins/kolab_addressbook/skins/classic/templates/bookedit.html b/plugins/kolab_addressbook/skins/classic/templates/bookedit.html
new file mode 100644
index 0000000..717ed8c
--- /dev/null
+++ b/plugins/kolab_addressbook/skins/classic/templates/bookedit.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<link rel="stylesheet" type="text/css" href="/settings.css" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body class="iframe">
+
+<div id="folder-title" class="boxtitle"><roundcube:label name="kolab_addressbook.bookproperties" /></div>
+
+<div id="folder-details" class="boxcontent">
+ <roundcube:object name="bookdetails" />
+ <p>
+<!--
+ <roundcube:if condition="!strlen(request:_source)" />
+ <input type="button" value="<roundcube:label name="cancel" />" class="button" onclick="history.back()" />
+ <roundcube:endif />
+-->
+ <roundcube:button command="book-save" type="input" class="button mainaction" label="save" />
+ </p>
+</div>
+<script type="text/javascript">rcube_init_tabs('folder-details > form')</script>
+
+</body>
+</html>
diff --git a/plugins/kolab_addressbook/skins/default/kolab_addressbook.css b/plugins/kolab_addressbook/skins/default/kolab_addressbook.css
deleted file mode 100644
index da3abed..0000000
--- a/plugins/kolab_addressbook/skins/default/kolab_addressbook.css
+++ /dev/null
@@ -1,35 +0,0 @@
-#directorylist li.addressbook.readonly
-{
- /* don't use 'background' to not reset background color */
- background-image: url(kolab_folders.png);
- background-position: 5px 0px;
- background-repeat: no-repeat;
-}
-
-#directorylist li.addressbook.shared
-{
- background-image: url(kolab_folders.png);
- background-position: 5px -54px;
- background-repeat: no-repeat;
-}
-
-#directorylist li.addressbook.shared.readonly
-{
- background-image: url(kolab_folders.png);
- background-position: 5px -72px;
- background-repeat: no-repeat;
-}
-
-#directorylist li.addressbook.other
-{
- background-image: url(kolab_folders.png);
- background-position: 5px -18px;
- background-repeat: no-repeat;
-}
-
-#directorylist li.addressbook.other.readonly
-{
- background-image: url(kolab_folders.png);
- background-position: 5px -36px;
- background-repeat: no-repeat;
-}
diff --git a/plugins/kolab_addressbook/skins/default/kolab_folders.gif b/plugins/kolab_addressbook/skins/default/kolab_folders.gif
deleted file mode 100644
index 3ac6fc4..0000000
Binary files a/plugins/kolab_addressbook/skins/default/kolab_folders.gif and /dev/null differ
diff --git a/plugins/kolab_addressbook/skins/default/kolab_folders.png b/plugins/kolab_addressbook/skins/default/kolab_folders.png
deleted file mode 100644
index 95a192e..0000000
Binary files a/plugins/kolab_addressbook/skins/default/kolab_folders.png and /dev/null differ
diff --git a/plugins/kolab_addressbook/skins/default/templates/bookedit.html b/plugins/kolab_addressbook/skins/default/templates/bookedit.html
deleted file mode 100644
index 717ed8c..0000000
--- a/plugins/kolab_addressbook/skins/default/templates/bookedit.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-<link rel="stylesheet" type="text/css" href="/settings.css" />
-<script type="text/javascript" src="/functions.js"></script>
-</head>
-<body class="iframe">
-
-<div id="folder-title" class="boxtitle"><roundcube:label name="kolab_addressbook.bookproperties" /></div>
-
-<div id="folder-details" class="boxcontent">
- <roundcube:object name="bookdetails" />
- <p>
-<!--
- <roundcube:if condition="!strlen(request:_source)" />
- <input type="button" value="<roundcube:label name="cancel" />" class="button" onclick="history.back()" />
- <roundcube:endif />
--->
- <roundcube:button command="book-save" type="input" class="button mainaction" label="save" />
- </p>
-</div>
-<script type="text/javascript">rcube_init_tabs('folder-details > form')</script>
-
-</body>
-</html>
diff --git a/plugins/kolab_zpush/package.xml b/plugins/kolab_zpush/package.xml
index ef6dfd7..ffa27d0 100644
--- a/plugins/kolab_zpush/package.xml
+++ b/plugins/kolab_zpush/package.xml
@@ -32,13 +32,13 @@
<file name="localization/de_DE.inc" role="data"></file>
<file name="localization/en_US.inc" role="data"></file>
<file name="localization/pl_PL.inc" role="data"></file>
- <file name="skins/default/templates/config.html" role="data"></file>
- <file name="skins/default/config.css" role="data"></file>
- <file name="skins/default/alarm-clock.png" role="data"></file>
- <file name="skins/default/deviceactions.png" role="data"></file>
- <file name="skins/default/foldertypes.png" role="data"></file>
- <file name="skins/default/pointer-left.gif" role="data"></file>
- <file name="skins/default/synchronize.png" role="data"></file>
+ <file name="skins/classic/templates/config.html" role="data"></file>
+ <file name="skins/classic/config.css" role="data"></file>
+ <file name="skins/classic/alarm-clock.png" role="data"></file>
+ <file name="skins/classic/deviceactions.png" role="data"></file>
+ <file name="skins/classic/foldertypes.png" role="data"></file>
+ <file name="skins/classic/pointer-left.gif" role="data"></file>
+ <file name="skins/classic/synchronize.png" role="data"></file>
<file name="skins/larry/templates/config.html" role="data"></file>
<file name="skins/larry/config.css" role="data"></file>
<file name="skins/larry/alarm-clock.png" role="data"></file>
diff --git a/plugins/kolab_zpush/skins/classic/alarm-clock.png b/plugins/kolab_zpush/skins/classic/alarm-clock.png
new file mode 100755
index 0000000..518bdc1
Binary files /dev/null and b/plugins/kolab_zpush/skins/classic/alarm-clock.png differ
diff --git a/plugins/kolab_zpush/skins/classic/config.css b/plugins/kolab_zpush/skins/classic/config.css
new file mode 100644
index 0000000..a3f0f18
--- /dev/null
+++ b/plugins/kolab_zpush/skins/classic/config.css
@@ -0,0 +1,119 @@
+/* Stylesheets for the Kolab Z-Push configuration UI */
+#configform {
+ padding-top: 15px;
+}
+
+#devices-table {
+ width: 100%;
+ table-layout: fixed;
+}
+
+#devices-table td {
+ cursor: pointer;
+}
+
+#devices-table td span.devicetype {
+ padding-left: 1em;
+ font-style: italic;
+ color: #666;
+}
+
+#devices-table tr.selected td span.devicetype {
+ color: #ccc;
+}
+
+.boxfooter a.button.delete,
+.boxfooter a.buttonPas.delete {
+ background-image: url(deviceactions.png);
+}
+
+div.subscriptionblock {
+ float: left;
+ margin: 0.5em 3em 2em 0;
+ padding: 0;
+ border: 1px solid #ddd;
+}
+
+div.subscriptionblock h3 {
+ font-size: 12px;
+ color: #333;
+ margin: 0 0 0.4em 0;
+ padding: 4px 4px 5px 30px;
+ background: url(foldertypes.png) 4px 4px no-repeat #fbfbfb;
+}
+
+div.subscriptionblock h3.contact {
+ background-position: 4px -16px;
+}
+
+div.subscriptionblock h3.event {
+ background-position: 4px -36px;
+}
+
+div.subscriptionblock h3.task {
+ background-position: 4px -56x;
+}
+
+div.subscriptionblock h3.note {
+ background-position: 4px -76px;
+}
+
+#foldersubscriptions thead td {
+ color: #999;
+ font-weight: bold;
+ padding: 3px 5px;
+ min-width: 2em;
+}
+
+#foldersubscriptions tbody td {
+ padding: 2px 5px;
+ border-top: 1px solid #ddd;
+}
+
+#foldersubscriptions td label {
+ display: block;
+}
+
+#foldersubscriptions td.mailbox {
+ padding-right: 3em;
+ padding-left: 2px;
+ min-width: 12em;
+}
+
+#foldersubscriptions td.virtual {
+ color: #999;
+}
+
+#foldersubscriptions {
+ overflow: auto;
+ max-height: 400px;
+ margin-top: 0.5em;
+}
+
+#introtext {
+ position: absolute;
+ top: 12px;
+ left: 5px;
+ padding-left: 10px;
+ max-width: 40em;
+}
+
+#introtext .pointer-left {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 14px;
+ height: 100%;
+ background: url(pointer-left.gif) right center no-repeat;
+}
+
+#introtext .inner {
+ border: 3px solid #e7e7e7;
+ background: #fff;
+}
+
+#introtext .bordered {
+ padding: 12px;
+ border: 1px solid #ccc;
+ background: #fff;
+}
diff --git a/plugins/kolab_zpush/skins/classic/deviceactions.png b/plugins/kolab_zpush/skins/classic/deviceactions.png
new file mode 100644
index 0000000..a542df9
Binary files /dev/null and b/plugins/kolab_zpush/skins/classic/deviceactions.png differ
diff --git a/plugins/kolab_zpush/skins/classic/foldertypes.png b/plugins/kolab_zpush/skins/classic/foldertypes.png
new file mode 100644
index 0000000..4950296
Binary files /dev/null and b/plugins/kolab_zpush/skins/classic/foldertypes.png differ
diff --git a/plugins/kolab_zpush/skins/classic/pointer-left.gif b/plugins/kolab_zpush/skins/classic/pointer-left.gif
new file mode 100644
index 0000000..b2de585
Binary files /dev/null and b/plugins/kolab_zpush/skins/classic/pointer-left.gif differ
diff --git a/plugins/kolab_zpush/skins/classic/synchronize.png b/plugins/kolab_zpush/skins/classic/synchronize.png
new file mode 100755
index 0000000..ba5ebd1
Binary files /dev/null and b/plugins/kolab_zpush/skins/classic/synchronize.png differ
diff --git a/plugins/kolab_zpush/skins/classic/templates/config.html b/plugins/kolab_zpush/skins/classic/templates/config.html
new file mode 100644
index 0000000..beb062f
--- /dev/null
+++ b/plugins/kolab_zpush/skins/classic/templates/config.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+<script type="text/javascript" src="/splitter.js"></script>
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mainscreen">
+
+<div id="sectionslist">
+<div id="directorylist-title" class="boxtitle"><roundcube:label name="kolab_zpush.devices" /></div>
+<div class="boxlistcontent">
+ <roundcube:object name="plugin.devicelist" id="devices-table" class="records-table" cellspacing="0" />
+</div>
+<div class="boxfooter">
+ <roundcube:button type="link" command="plugin.delete-device" title="kolab_zpush.deletedevice" class="buttonPas delete" classAct="button delete" content=" " />
+</div>
+</div>
+
+<div id="prefs-box">
+ <div class="boxtitle" style="display:none"><roundcube:label name="kolab_zpush.syncsettings"></div>
+ <form action="#" method="post" id="configform" class="boxcontent" style="display:none">
+ <fieldset>
+ <legend><roundcube:label name="kolab_zpush.deviceconfig" /></legend>
+ <roundcube:object name="plugin.deviceconfigform" form="configform" />
+ </fieldset>
+ <fieldset>
+ <legend><roundcube:label name="kolab_zpush.folderstosync" /></legend>
+ <roundcube:object name="plugin.foldersubscriptions" form="configform" id="foldersubscriptions" syncicon="synchronize.png" alarmicon="alarm-clock.png" />
+ </fieldset>
+ <p class="formbuttons">
+ <roundcube:button type="input" class="button mainaction" command="plugin.save-config" label="save" />
+ <roundcube:button type="input" class="button" command="plugin.delete-device" label="kolab_zpush.deletedevice" />
+ </p>
+ </form>
+ <div id="introtext">
+ <div class="inner"><div class="bordered">
+ <roundcube:if condition="env:devicecount" />
+ <roundcube:label name="kolab_zpush.introtext" />
+ <roundcube:else />
+ <roundcube:label name="kolab_zpush.nodevices" html="true" />
+ <roundcube:endif />
+ </div></div>
+ <div class="pointer-left"></div>
+ </div>
+</div>
+
+</div>
+
+<script type="text/javascript">
+ var viewsplit = new rcube_splitter({ id:'devicelistsplitter', p1: 'sectionslist', p2: 'prefs-box', orientation: 'v', relative: true, start: 195 });
+ rcmail.add_onload('viewsplit.init()');
+</script>
+
+</body>
+</html>
diff --git a/plugins/kolab_zpush/skins/default/alarm-clock.png b/plugins/kolab_zpush/skins/default/alarm-clock.png
deleted file mode 100755
index 518bdc1..0000000
Binary files a/plugins/kolab_zpush/skins/default/alarm-clock.png and /dev/null differ
diff --git a/plugins/kolab_zpush/skins/default/config.css b/plugins/kolab_zpush/skins/default/config.css
deleted file mode 100644
index a3f0f18..0000000
--- a/plugins/kolab_zpush/skins/default/config.css
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Stylesheets for the Kolab Z-Push configuration UI */
-#configform {
- padding-top: 15px;
-}
-
-#devices-table {
- width: 100%;
- table-layout: fixed;
-}
-
-#devices-table td {
- cursor: pointer;
-}
-
-#devices-table td span.devicetype {
- padding-left: 1em;
- font-style: italic;
- color: #666;
-}
-
-#devices-table tr.selected td span.devicetype {
- color: #ccc;
-}
-
-.boxfooter a.button.delete,
-.boxfooter a.buttonPas.delete {
- background-image: url(deviceactions.png);
-}
-
-div.subscriptionblock {
- float: left;
- margin: 0.5em 3em 2em 0;
- padding: 0;
- border: 1px solid #ddd;
-}
-
-div.subscriptionblock h3 {
- font-size: 12px;
- color: #333;
- margin: 0 0 0.4em 0;
- padding: 4px 4px 5px 30px;
- background: url(foldertypes.png) 4px 4px no-repeat #fbfbfb;
-}
-
-div.subscriptionblock h3.contact {
- background-position: 4px -16px;
-}
-
-div.subscriptionblock h3.event {
- background-position: 4px -36px;
-}
-
-div.subscriptionblock h3.task {
- background-position: 4px -56x;
-}
-
-div.subscriptionblock h3.note {
- background-position: 4px -76px;
-}
-
-#foldersubscriptions thead td {
- color: #999;
- font-weight: bold;
- padding: 3px 5px;
- min-width: 2em;
-}
-
-#foldersubscriptions tbody td {
- padding: 2px 5px;
- border-top: 1px solid #ddd;
-}
-
-#foldersubscriptions td label {
- display: block;
-}
-
-#foldersubscriptions td.mailbox {
- padding-right: 3em;
- padding-left: 2px;
- min-width: 12em;
-}
-
-#foldersubscriptions td.virtual {
- color: #999;
-}
-
-#foldersubscriptions {
- overflow: auto;
- max-height: 400px;
- margin-top: 0.5em;
-}
-
-#introtext {
- position: absolute;
- top: 12px;
- left: 5px;
- padding-left: 10px;
- max-width: 40em;
-}
-
-#introtext .pointer-left {
- position: absolute;
- top: 0;
- left: 0;
- width: 14px;
- height: 100%;
- background: url(pointer-left.gif) right center no-repeat;
-}
-
-#introtext .inner {
- border: 3px solid #e7e7e7;
- background: #fff;
-}
-
-#introtext .bordered {
- padding: 12px;
- border: 1px solid #ccc;
- background: #fff;
-}
diff --git a/plugins/kolab_zpush/skins/default/deviceactions.png b/plugins/kolab_zpush/skins/default/deviceactions.png
deleted file mode 100644
index a542df9..0000000
Binary files a/plugins/kolab_zpush/skins/default/deviceactions.png and /dev/null differ
diff --git a/plugins/kolab_zpush/skins/default/foldertypes.png b/plugins/kolab_zpush/skins/default/foldertypes.png
deleted file mode 100644
index 4950296..0000000
Binary files a/plugins/kolab_zpush/skins/default/foldertypes.png and /dev/null differ
diff --git a/plugins/kolab_zpush/skins/default/pointer-left.gif b/plugins/kolab_zpush/skins/default/pointer-left.gif
deleted file mode 100644
index b2de585..0000000
Binary files a/plugins/kolab_zpush/skins/default/pointer-left.gif and /dev/null differ
diff --git a/plugins/kolab_zpush/skins/default/synchronize.png b/plugins/kolab_zpush/skins/default/synchronize.png
deleted file mode 100755
index ba5ebd1..0000000
Binary files a/plugins/kolab_zpush/skins/default/synchronize.png and /dev/null differ
diff --git a/plugins/kolab_zpush/skins/default/templates/config.html b/plugins/kolab_zpush/skins/default/templates/config.html
deleted file mode 100644
index beb062f..0000000
--- a/plugins/kolab_zpush/skins/default/templates/config.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-<script type="text/javascript" src="/functions.js"></script>
-<script type="text/javascript" src="/splitter.js"></script>
-</head>
-<body>
-
-<roundcube:include file="/includes/taskbar.html" />
-<roundcube:include file="/includes/header.html" />
-<roundcube:include file="/includes/settingstabs.html" />
-
-<div id="mainscreen">
-
-<div id="sectionslist">
-<div id="directorylist-title" class="boxtitle"><roundcube:label name="kolab_zpush.devices" /></div>
-<div class="boxlistcontent">
- <roundcube:object name="plugin.devicelist" id="devices-table" class="records-table" cellspacing="0" />
-</div>
-<div class="boxfooter">
- <roundcube:button type="link" command="plugin.delete-device" title="kolab_zpush.deletedevice" class="buttonPas delete" classAct="button delete" content=" " />
-</div>
-</div>
-
-<div id="prefs-box">
- <div class="boxtitle" style="display:none"><roundcube:label name="kolab_zpush.syncsettings"></div>
- <form action="#" method="post" id="configform" class="boxcontent" style="display:none">
- <fieldset>
- <legend><roundcube:label name="kolab_zpush.deviceconfig" /></legend>
- <roundcube:object name="plugin.deviceconfigform" form="configform" />
- </fieldset>
- <fieldset>
- <legend><roundcube:label name="kolab_zpush.folderstosync" /></legend>
- <roundcube:object name="plugin.foldersubscriptions" form="configform" id="foldersubscriptions" syncicon="synchronize.png" alarmicon="alarm-clock.png" />
- </fieldset>
- <p class="formbuttons">
- <roundcube:button type="input" class="button mainaction" command="plugin.save-config" label="save" />
- <roundcube:button type="input" class="button" command="plugin.delete-device" label="kolab_zpush.deletedevice" />
- </p>
- </form>
- <div id="introtext">
- <div class="inner"><div class="bordered">
- <roundcube:if condition="env:devicecount" />
- <roundcube:label name="kolab_zpush.introtext" />
- <roundcube:else />
- <roundcube:label name="kolab_zpush.nodevices" html="true" />
- <roundcube:endif />
- </div></div>
- <div class="pointer-left"></div>
- </div>
-</div>
-
-</div>
-
-<script type="text/javascript">
- var viewsplit = new rcube_splitter({ id:'devicelistsplitter', p1: 'sectionslist', p2: 'prefs-box', orientation: 'v', relative: true, start: 195 });
- rcmail.add_onload('viewsplit.init()');
-</script>
-
-</body>
-</html>
diff --git a/plugins/owncloud/owncloud.php b/plugins/owncloud/owncloud.php
index d847cc3..09edcee 100644
--- a/plugins/owncloud/owncloud.php
+++ b/plugins/owncloud/owncloud.php
@@ -46,13 +46,8 @@ class owncloud extends rcube_plugin
'label' => 'owncloud.owncloud',
), 'taskbar');
- $skin = $rcmail->config->get('skin');
- if (!file_exists($this->home."/skins/$skin/owncloud.css")) {
- $skin = 'default';
- }
-
// add style for taskbar button (must be here) and Help UI
- $this->include_stylesheet("skins/$skin/owncloud.css");
+ $this->include_stylesheet($this->local_skin_path()."/owncloud.css");
}
function action()
diff --git a/plugins/owncloud/skins/classic/cloud.png b/plugins/owncloud/skins/classic/cloud.png
new file mode 100644
index 0000000..15a288f
Binary files /dev/null and b/plugins/owncloud/skins/classic/cloud.png differ
diff --git a/plugins/owncloud/skins/classic/owncloud.css b/plugins/owncloud/skins/classic/owncloud.css
new file mode 100644
index 0000000..920b730
--- /dev/null
+++ b/plugins/owncloud/skins/classic/owncloud.css
@@ -0,0 +1,12 @@
+/***** ownCloud plugin styles *****/
+
+#taskbar a.button-owncloud
+{
+ background-image: url(cloud.png);
+}
+
+.owncloud-box
+{
+ overflow: auto;
+ background-color: #F2F2F2;
+}
diff --git a/plugins/owncloud/skins/classic/templates/owncloud.html b/plugins/owncloud/skins/classic/templates/owncloud.html
new file mode 100644
index 0000000..efbd362
--- /dev/null
+++ b/plugins/owncloud/skins/classic/templates/owncloud.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<link rel="stylesheet" type="text/css" href="/this/owncloud.css" />
+<link rel="stylesheet" type="text/css" href="/settings.css" />
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen" class="box owncloud-box">
+ <roundcube:object name="owncloudframe" />
+</div>
+
+</body>
+</html>
diff --git a/plugins/owncloud/skins/default/cloud.png b/plugins/owncloud/skins/default/cloud.png
deleted file mode 100644
index 15a288f..0000000
Binary files a/plugins/owncloud/skins/default/cloud.png and /dev/null differ
diff --git a/plugins/owncloud/skins/default/owncloud.css b/plugins/owncloud/skins/default/owncloud.css
deleted file mode 100644
index 920b730..0000000
--- a/plugins/owncloud/skins/default/owncloud.css
+++ /dev/null
@@ -1,12 +0,0 @@
-/***** ownCloud plugin styles *****/
-
-#taskbar a.button-owncloud
-{
- background-image: url(cloud.png);
-}
-
-.owncloud-box
-{
- overflow: auto;
- background-color: #F2F2F2;
-}
diff --git a/plugins/owncloud/skins/default/templates/owncloud.html b/plugins/owncloud/skins/default/templates/owncloud.html
deleted file mode 100644
index efbd362..0000000
--- a/plugins/owncloud/skins/default/templates/owncloud.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-<link rel="stylesheet" type="text/css" href="/this/owncloud.css" />
-<link rel="stylesheet" type="text/css" href="/settings.css" />
-</head>
-<body>
-
-<roundcube:include file="/includes/taskbar.html" />
-<roundcube:include file="/includes/header.html" />
-
-<div id="mainscreen" class="box owncloud-box">
- <roundcube:object name="owncloudframe" />
-</div>
-
-</body>
-</html>
commit 0825c3d293c069c4d6d3453158400fe779e847fa
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Sun Jul 29 14:04:17 2012 +0200
Adjust filter masks considering start/due dates
diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php
index d65a3f0..6b205e9 100644
--- a/plugins/tasklist/tasklist.php
+++ b/plugins/tasklist/tasklist.php
@@ -352,7 +352,7 @@ class tasklist extends rcube_plugin
$search = get_input_value('q', RCUBE_INPUT_GPC);
$filter = array('mask' => $f, 'search' => $search);
$lists = get_input_value('lists', RCUBE_INPUT_GPC);;
-
+/*
// convert magic date filters into a real date range
switch ($f) {
case self::FILTER_MASK_TODAY:
@@ -383,7 +383,7 @@ class tasklist extends rcube_plugin
break;
}
-
+*/
$data = $tags = $this->task_tree = $this->task_titles = array();
foreach ($this->driver->list_tasks($filter, $lists) as $rec) {
if ($rec['parent_id']) {
@@ -484,23 +484,27 @@ class tasklist extends rcube_plugin
$week_date = new DateTime('now + 7 days', $this->timezone);
$weeklimit = $week_date->format('Y-m-d');
}
-
+
$mask = 0;
+ $start = $rec['startdate'] ?: '1900-00-00';
+
if ($rec['flagged'])
$mask |= self::FILTER_MASK_FLAGGED;
if ($rec['complete'] == 1.0)
$mask |= self::FILTER_MASK_COMPLETE;
+
if (empty($rec['date']))
$mask |= self::FILTER_MASK_NODATE;
- else if ($rec['date'] == $today)
- $mask |= self::FILTER_MASK_TODAY;
- else if ($rec['date'] == $tomorrow)
- $mask |= self::FILTER_MASK_TOMORROW;
else if ($rec['date'] < $today)
$mask |= self::FILTER_MASK_OVERDUE;
- else if ($rec['date'] > $tomorrow && $rec['date'] <= $weeklimit)
- $mask |= self::FILTER_MASK_LATER;
- else if ($rec['date'] > $weeklimit)
+
+ if ($rec['date'] >= $today && $start <= $today)
+ $mask |= self::FILTER_MASK_TODAY;
+ if ($rec['date'] >= $tomorrow && $start <= $tomorrow)
+ $mask |= self::FILTER_MASK_TOMORROW;
+ if (($start > $tomorrow || $rec['date'] > $tomorrow) && $rec['date'] <= $weeklimit)
+ $mask |= self::FILTER_MASK_WEEK;
+ if ($start > $weeklimit || $rec['date'] > $weeklimit)
$mask |= self::FILTER_MASK_LATER;
return $mask;
commit 1b55957fefee1bf57e31c7de9aa0c42ee56e773e
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Sun Jul 29 13:38:44 2012 +0200
Correctly save date-only task start dates
diff --git a/plugins/libkolab/lib/kolab_format_task.php b/plugins/libkolab/lib/kolab_format_task.php
index 4433cf6..b041b08 100644
--- a/plugins/libkolab/lib/kolab_format_task.php
+++ b/plugins/libkolab/lib/kolab_format_task.php
@@ -49,7 +49,7 @@ class kolab_format_task extends kolab_format_xcal
$this->obj->setPercentComplete(intval($object['complete']));
if (isset($object['start']))
- $this->obj->setStart(self::get_datetime($object['start']));
+ $this->obj->setStart(self::get_datetime($object['start'], null, $object['start']->_dateonly));
$this->obj->setDue(self::get_datetime($object['due'], null, $object['due']->_dateonly));
commit 78077bcb0af8233797861f4e90b3a1b354426fba
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Sun Jul 29 13:36:16 2012 +0200
Handle start date/time; fix task list sorting
diff --git a/plugins/tasklist/drivers/database/SQL/mysql.sql b/plugins/tasklist/drivers/database/SQL/mysql.sql
index 18f130d..6906ab6 100644
--- a/plugins/tasklist/drivers/database/SQL/mysql.sql
+++ b/plugins/tasklist/drivers/database/SQL/mysql.sql
@@ -32,6 +32,8 @@ CREATE TABLE `tasks` (
`tags` text,
`date` varchar(10) DEFAULT NULL,
`time` varchar(5) DEFAULT NULL,
+ `startdate` varchar(10) DEFAULT NULL,
+ `starttime` varchar(5) DEFAULT NULL,
`flagged` tinyint(4) NOT NULL DEFAULT '0',
`complete` float NOT NULL DEFAULT '0',
`alarms` varchar(255) NOT NULL,
diff --git a/plugins/tasklist/drivers/database/tasklist_database_driver.php b/plugins/tasklist/drivers/database/tasklist_database_driver.php
index b9aeba0..acc8fa0 100644
--- a/plugins/tasklist/drivers/database/tasklist_database_driver.php
+++ b/plugins/tasklist/drivers/database/tasklist_database_driver.php
@@ -343,7 +343,7 @@ class tasklist_database_driver extends tasklist_driver
{
$rec['id'] = $rec['task_id'];
$rec['list'] = $rec['tasklist_id'];
- $rec['changed'] = strtotime($rec['changed']);
+ $rec['changed'] = new DateTime($rec['changed']);
$rec['tags'] = array_filter(explode(',', $rec['tags']));
if (!$rec['parent_id'])
@@ -409,7 +409,7 @@ class tasklist_database_driver extends tasklist_driver
if (isset($prop[$col]))
$sql_set[] = $this->rc->db->quote_identifier($col) . '=' . $this->rc->db->quote($prop[$col]);
}
- foreach (array('parent_id', 'date', 'time') as $col) {
+ foreach (array('parent_id', 'date', 'time', 'startdate', 'starttime') as $col) {
if (isset($prop[$col]))
$sql_set[] = $this->rc->db->quote_identifier($col) . '=' . (empty($prop[$col]) ? 'NULL' : $this->rc->db->quote($prop[$col]));
}
diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
index 66e4912..7322e1f 100644
--- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
+++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
@@ -337,8 +337,13 @@ class tasklist_kolab_driver extends tasklist_driver
$task['date'] = $record['due']->format('Y-m-d');
$task['time'] = $record['due']->format('h:i');
}
+ // convert from DateTime to internal date format
+ if (is_a($record['start'], 'DateTime')) {
+ $task['startdate'] = $record['start']->format('Y-m-d');
+ $task['starttime'] = $record['start']->format('h:i');
+ }
if (is_a($record['dtstamp'], 'DateTime')) {
- $task['changed'] = $record['dtstamp']->format('U');
+ $task['changed'] = $record['dtstamp'];
}
return $task;
@@ -360,6 +365,13 @@ class tasklist_kolab_driver extends tasklist_driver
unset($object['date']);
}
+ if (!empty($task['startdate'])) {
+ $object['start'] = new DateTime($task['startdate'].' '.$task['starttime'], $this->plugin->timezone);
+ if (empty($task['starttime']))
+ $object['start']->_dateonly = true;
+ unset($object['startdate']);
+ }
+
$object['complete'] = $task['complete'] * 100;
if ($task['complete'] == 1.0)
$object['status'] = 'COMPLETED';
diff --git a/plugins/tasklist/drivers/tasklist_driver.php b/plugins/tasklist/drivers/tasklist_driver.php
index 6b93dc1..c86eca8 100644
--- a/plugins/tasklist/drivers/tasklist_driver.php
+++ b/plugins/tasklist/drivers/tasklist_driver.php
@@ -30,12 +30,14 @@
* 'parent_id' => 'ID of parent task', // null if top-level task
* 'uid' => 'Unique identifier of this task',
* 'list' => 'Task list identifier to add the task to or where the task is stored',
- * 'changed' => <unixtime>, // Last modification date of record
+ * 'changed' => <DateTime>, // Last modification date/time of the record
* 'title' => 'Event title/summary',
* 'description' => 'Event description',
* 'tags' => array(), // List of tags for this task
* 'date' => 'Due date', // as string of format YYYY-MM-DD or null if no date is set
* 'time' => 'Due time', // as string of format hh::ii or null if no due time is set
+ * 'startdate' => 'Start date' // Delay start of the task until that date
+ * 'starttime' => 'Start time' // ...and time
* 'categories' => 'Task category',
* 'flagged' => 'Boolean value whether this record is flagged',
* 'complete' => 'Float value representing the completeness state (range 0..1)',
diff --git a/plugins/tasklist/localization/de_CH.inc b/plugins/tasklist/localization/de_CH.inc
index eaf075a..a0b7a8e 100644
--- a/plugins/tasklist/localization/de_CH.inc
+++ b/plugins/tasklist/localization/de_CH.inc
@@ -2,8 +2,8 @@
$labels = array();
$labels['navtitle'] = 'Aufgaben';
-$labels['lists'] = 'Ressourcen';
-$labels['list'] = 'Ressource';
+$labels['lists'] = 'Aufgabenlisten';
+$labels['list'] = 'Liste';
$labels['tags'] = 'Tags';
$labels['newtask'] = 'Neue Aufgabe';
@@ -15,6 +15,7 @@ $labels['delete'] = 'Löschen';
$labels['title'] = 'Titel';
$labels['description'] = 'Beschreibung';
$labels['datetime'] = 'Datum/Zeit';
+$labels['start'] = 'Beginn';
$labels['all'] = 'Alle';
$labels['flagged'] = 'Markiert';
@@ -51,3 +52,4 @@ $labels['next'] = 'nächsten';
$labels['savingdata'] = 'Daten werden gespeichert...';
$labels['errorsaving'] = 'Fehler beim Speichern.';
$labels['notasksfound'] = 'Für die aktuellen Kriterien wurden keine Aufgaben gefunden.';
+$labels['invalidstartduedates'] = 'Beginn der Aufgabe darf nicht grösser als das Enddatum sein.';
diff --git a/plugins/tasklist/localization/en_US.inc b/plugins/tasklist/localization/en_US.inc
index b7d9d16..9c1aeef 100644
--- a/plugins/tasklist/localization/en_US.inc
+++ b/plugins/tasklist/localization/en_US.inc
@@ -2,8 +2,8 @@
$labels = array();
$labels['navtitle'] = 'Tasks';
-$labels['lists'] = 'Resources';
-$labels['list'] = 'Resource';
+$labels['lists'] = 'Tasklists';
+$labels['list'] = 'Tasklist';
$labels['tags'] = 'Tags';
$labels['newtask'] = 'New Task';
@@ -15,6 +15,7 @@ $labels['delete'] = 'Delete';
$labels['title'] = 'Title';
$labels['description'] = 'Description';
$labels['datetime'] = 'Date/Time';
+$labels['start'] = 'Start';
$labels['all'] = 'All';
$labels['flagged'] = 'Flagged';
@@ -51,3 +52,4 @@ $labels['next'] = 'next';
$labels['savingdata'] = 'Saving data...';
$labels['errorsaving'] = 'Failed to save data.';
$labels['notasksfound'] = 'No tasks found for the given criteria';
+$labels['invalidstartduedates'] = 'Start date must not be greater than due date.';
diff --git a/plugins/tasklist/skins/larry/templates/mainview.html b/plugins/tasklist/skins/larry/templates/mainview.html
index 603e34f..e98db77 100644
--- a/plugins/tasklist/skins/larry/templates/mainview.html
+++ b/plugins/tasklist/skins/larry/templates/mainview.html
@@ -107,6 +107,11 @@
<span class="task-text"></span>
<span id="task-time"></span>
</div>
+ <div id="task-start" class="form-section">
+ <label><roundcube:label name="tasklist.start" /></label>
+ <span class="task-text"></span>
+ <span id="task-starttime"></span>
+ </div>
<div id="task-list" class="form-section">
<label><roundcube:label name="tasklist.list" /></label>
<span class="task-text"></span>
@@ -137,16 +142,22 @@
<label for="edit-date"><roundcube:label name="tasklist.datetime" /></label>
<input type="text" name="date" size="10" id="edit-date" tabindex="20" />
<input type="text" name="time" size="6" id="edit-time" tabindex="21" />
- <a href="#nodate" style="margin-left:1em" id="edit-nodate"><roundcube:label name="tasklist.nodate" /></a>
+ <a href="#nodate" style="margin-left:1em" class="edit-nodate" rel="#edit-date,#edit-time"><roundcube:label name="tasklist.nodate" /></a>
+ </div>
+ <div class="form-section">
+ <label for="edit-startdate"><roundcube:label name="tasklist.start" /></label>
+ <input type="text" name="startdate" size="10" id="edit-startdate" tabindex="23" />
+ <input type="text" name="starttime" size="6" id="edit-starttime" tabindex="24" />
+ <a href="#nodate" style="margin-left:1em" class="edit-nodate" rel="#edit-startdate,#edit-starttime"><roundcube:label name="tasklist.nodate" /></a>
</div>
<div class="form-section">
<label for="edit-completeness"><roundcube:label name="tasklist.complete" /></label>
- <input type="text" name="title" id="edit-completeness" size="3" tabindex="23" /> %
+ <input type="text" name="title" id="edit-completeness" size="3" tabindex="25" /> %
<div id="edit-completeness-slider"></div>
</div>
<div class="form-section" id="tasklist-select">
<label for="edit-tasklist"><roundcube:label name="tasklist.list" /></label>
- <roundcube:object name="plugin.tasklist_select" id="edit-tasklist" tabindex="24" />
+ <roundcube:object name="plugin.tasklist_select" id="edit-tasklist" tabindex="26" />
</div>
</form>
</div>
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 77a37f4..c1522d0 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -54,6 +54,7 @@ function rcube_tasklist(settings)
var saving_lock;
var ui_loading;
var taskcounts = {};
+ var listindex = [];
var listdata = {};
var tags = [];
var draghelper;
@@ -354,12 +355,14 @@ function rcube_tasklist(settings)
function data_ready(response)
{
listdata = {};
+ listindex = [];
loadstate.lists = response.lists;
loadstate.filter = response.filter;
loadstate.search = response.search;
for (var i=0; i < response.data.length; i++) {
listdata[response.data[i].id] = response.data[i];
+ listindex.push(response.data[i].id);
}
render_tasklist();
@@ -373,12 +376,13 @@ function rcube_tasklist(settings)
function render_tasklist()
{
// clear display
- var rec,
+ var id, rec,
count = 0,
msgbox = $('#listmessagebox').hide(),
list = $(rcmail.gui_objects.resultlist).html('');
- for (var id in listdata) {
+ for (var i=0; i < listindex.length; i++) {
+ id = listindex[i];
rec = listdata[id];
if (match_filter(rec)) {
render_task(rec);
@@ -436,9 +440,18 @@ function rcube_tasklist(settings)
*/
function update_taskitem(rec)
{
- var id = rec.id;
+ var id = rec.id,
+ oldid = rec.tempid || id;
+ oldindex = listindex.indexOf(oldid);
+
+ if (oldindex >= 0)
+ listindex[oldindex] = id;
+ else
+ listindex.push(id);
+
listdata[id] = rec;
- render_task(rec, rec.tempid || id);
+
+ render_task(rec, oldid);
append_tags(rec.tags || []);
}
@@ -525,7 +538,7 @@ function rcube_tasklist(settings)
*/
function resort_task(rec, li, animated)
{
- var dir = 0, next_li, next_id, next_rec;
+ var dir = 0, index, slice, next_li, next_id, next_rec;
// animated moving
var insert_animated = function(li, before, after) {
@@ -542,6 +555,13 @@ function rcube_tasklist(settings)
});
}
+ // remove from list index
+ var oldindex = listindex.indexOf(rec.id);
+ if (oldindex >= 0) {
+ slice = listindex.slice(0,oldindex);
+ listindex = slice.concat(listindex.slice(oldindex+1));
+ }
+
// find the right place to insert the task item
li.siblings().each(function(i, elem){
next_li = $(elem);
@@ -558,17 +578,26 @@ function rcube_tasklist(settings)
}
else if (next_rec && next_li && task_cmp(rec, next_rec) < 0) {
if (animated) insert_animated(li, next_li);
- else li.insertBefore(next_li)
+ else li.insertBefore(next_li);
next_li = null;
return false;
}
});
+ index = listindex.indexOf(next_id);
+
if (next_li) {
if (animated) insert_animated(li, null, next_li);
else li.insertAfter(next_li);
+ index++;
+ }
+
+ // insert into list index
+ if (next_id && index >= 0) {
+ slice = listindex.slice(0,index);
+ slice.push(rec.id);
+ listindex = slice.concat(listindex.slice(index));
}
- return;
}
/**
@@ -617,15 +646,19 @@ function rcube_tasklist(settings)
{
var drag_id = draggable.data('id'),
parent_id = $(this).data('id'),
- rec = listdata[parent_id];
+ drag_rec = listdata[drag_id],
+ drop_rec = listdata[parent_id];
+
+ if (drop_rec && drop_rec.list != drag_rec.list)
+ return false;
- if (parent_id == listdata[drag_id].parent_id)
+ if (parent_id == drag_rec.parent_id)
return false;
- while (rec && rec.parent_id) {
- if (rec.parent_id == drag_id)
+ while (drop_rec && drop_rec.parent_id) {
+ if (drop_rec.parent_id == drag_id)
return false;
- rec = listdata[rec.parent_id];
+ drop_rec = listdata[drop_rec.parent_id];
}
return true;
@@ -672,6 +705,8 @@ function rcube_tasklist(settings)
$('#task-description').html(text2html(rec.description || '', 300, 6))[(rec.description ? 'show' : 'hide')]();
$('#task-date')[(rec.date ? 'show' : 'hide')]().children('.task-text').html(Q(rec.date || rcmail.gettext('nodate','tasklist')));
$('#task-time').html(Q(rec.time || ''));
+ $('#task-start')[(rec.startdate ? 'show' : 'hide')]().children('.task-text').html(Q(rec.startdate || ''));
+ $('#task-starttime').html(Q(rec.starttime || ''));
$('#task-completeness .task-text').html(((rec.complete || 0) * 100) + '%');
$('#task-list .task-text').html(Q(me.tasklists[rec.list] ? me.tasklists[rec.list].name : ''));
@@ -732,6 +767,8 @@ function rcube_tasklist(settings)
var description = $('#edit-description').val(rec.description || '');
var recdate = $('#edit-date').val(rec.date || '').datepicker(datepicker_settings);
var rectime = $('#edit-time').val(rec.time || '');
+ var recstartdate = $('#edit-startdate').val(rec.startdate || '').datepicker(datepicker_settings);
+ var recstarttime = $('#edit-starttime').val(rec.starttime || '');
var complete = $('#edit-completeness').val((rec.complete || 0) * 100);
completeness_slider.slider('value', complete.val());
var tasklist = $('#edit-tasklist').val(rec.list || 0); // .prop('disabled', rec.parent_id ? true : false);
@@ -755,22 +792,31 @@ function rcube_tasklist(settings)
texts: { removeLinkTitle: rcmail.gettext('removetag', 'tasklist') }
});
- $('#edit-nodate').unbind('click').click(function(){
- recdate.val('');
- rectime.val('');
+ $('a.edit-nodate').unbind('click').click(function(){
+ var sel = $(this).attr('rel');
+ if (sel) $(sel).val('');
return false;
})
// define dialog buttons
var buttons = {};
buttons[rcmail.gettext('save', 'tasklist')] = function() {
- me.selected_task.title = title.val();
- me.selected_task.description = description.val();
- me.selected_task.date = recdate.val();
- me.selected_task.time = rectime.val();
- me.selected_task.list = tasklist.val();
+ // copy form field contents into task object to save
+ $.each({ title:title, description:description, date:recdate, time:rectime, startdate:recstartdate, starttime:recstarttime, list:tasklist }, function(key,input){
+ me.selected_task[key] = input.val();
+ });
me.selected_task.tags = [];
+ // do some basic input validation
+ if (me.selected_task.startdate && me.selected_task.date) {
+ var startdate = $.datepicker.parseDate(datepicker_settings.dateFormat, me.selected_task.startdate, datepicker_settings);
+ var duedate = $.datepicker.parseDate(datepicker_settings.dateFormat, me.selected_task.date, datepicker_settings);
+ if (startdate > duedate) {
+ alert(rcmail.gettext('invalidstartduedates', 'tasklist'));
+ return false;
+ }
+ }
+
$('input[name="tags[]"]', rcmail.gui_objects.edittagline).each(function(i,elem){
if (elem.value)
me.selected_task.tags.push(elem.value);
@@ -812,9 +858,10 @@ function rcube_tasklist(settings)
$dialog.dialog('destroy').remove();
},
buttons: buttons,
+ minHeight: 340,
minWidth: 500,
width: 580
- }).append(editform.show()); // adding form content AFTERWARDS massively speeds up opening on IE6
+ }).append(editform.show()); // adding form content AFTERWARDS massively speeds up opening on IE
title.select();
}
diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php
index 0ba4260..d65a3f0 100644
--- a/plugins/tasklist/tasklist.php
+++ b/plugins/tasklist/tasklist.php
@@ -261,6 +261,18 @@ class tasklist extends rcube_plugin
}
}
+ if (!empty($rec['startdate'])) {
+ try {
+ $date = new DateTime($rec['startdate'] . ' ' . $rec['starttime'], $this->timezone);
+ $rec['startdate'] = $date->format('Y-m-d');
+ if (!empty($rec['starttime']))
+ $rec['starttime'] = $date->format('H:i');
+ }
+ catch (Exception $e) {
+ $rec['startdate'] = $rec['starttime'] = null;
+ }
+ }
+
return $rec;
}
@@ -400,6 +412,7 @@ class tasklist extends rcube_plugin
$rec['mask'] = $this->filter_mask($rec);
$rec['flagged'] = intval($rec['flagged']);
$rec['complete'] = floatval($rec['complete']);
+ $rec['changed'] = is_object($rec['changed']) ? $rec['changed']->format('U') : null;
if ($rec['date']) {
try {
@@ -417,6 +430,17 @@ class tasklist extends rcube_plugin
$rec['_hasdate'] = 0;
}
+ if ($rec['startdate']) {
+ try {
+ $date = new DateTime($rec['startdate'] . ' ' . $rec['starttime'], $this->timezone);
+ $rec['startdatetime'] = intval($date->format('U'));
+ $rec['startdate'] = $date->format($this->rc->config->get('date_format', 'Y-m-d'));
+ }
+ catch (Exception $e) {
+ $rec['startdate'] = $rec['startdatetime'] = null;
+ }
+ }
+
if (!isset($rec['_depth'])) {
$rec['_depth'] = 0;
$parent_id = $this->task_tree[$rec['id']];
commit e6fff6a96a1b96212949fbca414ab1deff29a2c9
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Sun Jul 29 11:29:34 2012 +0200
Use rcube_plugin::local_skin_path() to properly read skin setting
diff --git a/plugins/tasklist/tasklist_ui.php b/plugins/tasklist/tasklist_ui.php
index 420260c..a5f3520 100644
--- a/plugins/tasklist/tasklist_ui.php
+++ b/plugins/tasklist/tasklist_ui.php
@@ -51,8 +51,7 @@ class tasklist_ui
'label' => 'tasklist.navtitle',
), 'taskbar');
- $skin = $this->rc->config->get('skin');
- $this->plugin->include_stylesheet('skins/' . $skin . '/tasklist.css');
+ $this->plugin->include_stylesheet($this->plugin->local_skin_path() . '/tasklist.css');
$this->ready = true;
}
More information about the commits
mailing list