Conflicts:
	plugins/password/config.inc.php.dist
pull/187/head
Cyrill von Wattenwyl 10 years ago
commit 11a40dd1fe

@ -1,11 +1,39 @@
CHANGELOG Roundcube Webmail
===========================
- Support contacts import in GMail CSV format
- Added namespace filter in Folder Manager
- Added folder searching in Folder Manager
- Added config option/user preference to disable saving messages in localStorage (#1489979)
- Added config option 'imap_log_session' to enable Roundcube <-> IMAP session ID logging
- Added config option 'log_session_id' to control the lengh of the session identifer in logs
- Implemented 'storage_connected' API hook after successful IMAP login (#1490025)
- Intergrate Net_LDAP3 and rcube_ldap_generic classes
- Add option (disabled_actions) to disable UI elements/actions (#1489638)
- Support password encryption using openssl extension (#1489989)
- Create/rename groups in UI dialogs (#1489951)
- Added 'contact_search_name' option to define autocompletion entry format
- Display quota information for current folder not INBOX only (#1487993)
- Support images in HTML signatures (#1488676)
- Display full quota information in popup (#1485769, #1486604)
- Mail compose: Selecting contact inserts recipient to previously focused input - to/cc/bcc accordingly (#1489684)
- Add option to set default message list mode - default_list_mode (#1487312)
- Close "no subject" prompt with Enter key (#1489580)
- Add config option to specify IMAP connection socket parameters - imap_conn_options (#1489948)
- Password: Add option to force new users to change their password (#1486884)
- Improve support for screen readers and assistive technology using WCAG 2.0 and WAI ARIA standards
- Enable basic keyboard navigation throughout the UI (#1487845)
- Select/scroll to previously selected message when returning from message page (#1489023)
- Display a warning if popup window was blocked (#1489618)
- Remove (was: ...) from message subject on reply (#1489375)
- Update to TinyMCE 4.1 (#1489057)
- Enable autolink plugin in TinyMCE (#1488845)
- Support image operations with Imagick extension (#1489734)
- Support upload progress with session.upload_progress and PECL uploadprogress module (#1488702)
- Make identity name field optional (#1489510)
- Utility script to remove user records from the local database
- Plugin API: Added message_saved hook (#1489752)
- Plugin API: Added imap_search_before hook
- Support messages import from zip archives
- Zipdownload: Added mbox format support (#1486069)
- Drop support for IE6, move IE7/IE8 support to legacy_browser plugin
@ -16,9 +44,51 @@ CHANGELOG Roundcube Webmail
- Set In-Reply-To and References for forwarded messages (#1489593)
- Removed redundant default_folders config option (#1489737)
- Implemented IMAP SPECIAL-USE extension support [RFC6154] (#1487830)
- Optimize some framed pages content for better performance (#1489792)
- Improve text messages display and conversion to HTML (#1488937)
- Don't remove links when html signature is converted to text (#1489621)
- Fix mbox files import
- Fix some mime-type to extension mapping checks in Installer (#1489983)
- Fix errors when using localStorage in Safari's private browsing mode (#1489996)
- Fix bug where $Forwarded flag was being set even if server didn't support it (#1490000)
- Fix various iCloud vCard issues, added fallback for external photos (#1489993)
- Fix invalid Content-Type header when send_format_flowed=false (#1489992)
- Fix errors when adding/updating contacts in active search (#1490015)
- Fix incorrect thumbnail rotation with GD and exif orientation data (#1490029)
- Fix contacts list update after adding/deleting/moving a contact (#1490028, #1490033)
- Fix handling of email addresses with quoted domain part (#1490040)
- Fix comm_path update on task switch (#1490041)
RELEASE 1.0.2
-------------
- Fix storing unsaved drafts in localStorage (#1489818)
- Add configurable LDAP_OPT_DEREF option (#1489864)
- Fix so when switching editor mode original version of signature is used (#1488849)
- Fix unintentional draft autosave request if autosave is disabled (#1489882)
- Fix malformed References: header in send/saved mail (#1489891)
- Fix handling unicode characters in links (#1489898)
- Fix incorrect handling of HTML comments in messages sanitization code (#1489904)
- Fix so current page is reset on list-mode change (#1489907)
- Fix so responses menu hides on click in classic skin (#1489915)
- Fix unintentional line-height style modification in HTML messages (#1489917)
- Fix broken normalize_string(), add support for ISO-8859-2 (#1489918)
- Support csv contacts import in German localization (#1489920)
- Fix so message list and counters are updated when a message is opened in new window (#1489919)
- Fix malformed recipient name when composing a message by clicking on mailto link (#1489942)
- Fix list reload after sending message in another window (#1489931)
- Fix so address format errors are ignored when saving a draft (#1489954)
- Fix incorrect label translation in return receipt (#1489963)
- Fix security issue in delete-response action - allow only ajax request
- Fix Delete button state after deleting identity/response (#1489972)
- Fix bug where contacts with no email address were listed on compose addressbook (#1489970)
- Fix images import from various vCard formats (#1489977)
- Fix sorting messages by size on servers without SORT capability (#1489981)
RELEASE 1.0.1
-------------
- Support 'error' and 'body_file' return attribs in 'message_before_send' hook (#1489595)
- Apply user-specific replacements to group's base_dn property (#1489779)
- Fix mbox files import
- Fix missing email address when importing contacts from outlook csv (#1489830)
- Fix bug where "With attachment" option in search filter wasn't selected after return from mail view (#1489774)
- Fix "washing" of unicoded style attributes (#1489777)
- Fix unintentional redirect from compose page in Webkit browsers (#1489789)

@ -15,7 +15,7 @@ REQUIREMENTS
- PCRE, DOM, JSON, XML, Session, Sockets (required)
- PHP Data Objects (PDO) with driver for either MySQL, PostgreSQL or SQLite (required)
- Libiconv, Zip (recommended)
- Fileinfo, Mcrypt, mbstring (optional)
- OpenSSL, Fileinfo, Mcrypt, mbstring (optional)
* PEAR packages distributed with Roundcube or external:
- Mail_Mime 1.8.1 or newer
- Mail_mimeDecode 1.5.5 or newer
@ -35,7 +35,7 @@ REQUIREMENTS
- magic_quotes_runtime disabled
- magic_quotes_sybase disabled
- register_globals disabled (PHP < 5.4)
* PHP compiled with OpenSSL to connect to IMAPS and to use the spell checker
* PHP compiled with OpenSSL to use secure (tls/ssl) connections and to use the spell checker
* A MySQL (4.0.8 or newer), PostgreSQL, MS SQL Server (2005 or newer) database engine
or SQLite support in PHP
* One of the above databases with permission to create tables

@ -27,8 +27,8 @@ an IMAP library derived from [IlohaMail][iloha] the [TinyMCE][tinymce] rich
text editor, [Googiespell][googiespell] library for spell checking or
the [WASHTML][washtml] sanitizer by Frederic Motte.
The current default skin uses icons designed by Stephen Horlander and [Kevin
Gerich][kmgerich] for Mozilla.org.
The current default skin 'Larry' was kindly created by FLINT / Büro für
Gestaltung, Berne, Switzerland.
INSTALLATION

@ -157,7 +157,7 @@ if ($RCI->configured) {
if ($RCI->config['db_dsnw']) {
echo "Executing database schema update.\n";
system("php " . INSTALL_PATH . "bin/updatedb.sh --package=roundcube --version=" . $opts['version']
. " --dir=" . INSTALL_PATH . DIRECTORY_SEPARATOR . "SQL", $res);
. " --dir=" . INSTALL_PATH . "SQL", $res);
$success = !$res;
}

@ -116,7 +116,7 @@ if (empty($version)) {
$version = 2012080700;
}
$dir = $opts['dir'] . DIRECTORY_SEPARATOR . $DB->db_provider;
$dir = $opts['dir'] . '/' . $DB->db_provider;
if (!file_exists($dir)) {
rcube::raise_error("DDL Upgrade files for " . $DB->db_provider . " driver not found.", false, true);
}
@ -133,7 +133,7 @@ sort($result, SORT_NUMERIC);
foreach ($result as $v) {
echo "Updating database schema ($v)... ";
$error = update_db_schema($opts['package'], $v, $dir . DIRECTORY_SEPARATOR . "$v.sql");
$error = update_db_schema($opts['package'], $v, "$dir/$v.sql");
if ($error) {
echo "[FAILED]\n";

@ -3,14 +3,51 @@
"description": "The Roundcube Webmail suite",
"license": "GPL-3.0+",
"repositories": [
{
"type": "pear",
"url": "http://pear.php.net/"
},
{
"type": "composer",
"url": "http://plugins.roundcube.net/"
},
{
"type": "vcs",
"url": "git@github.com:roundcube/sample-plugin.git"
},
{
"type": "vcs",
"url": "git://git.kolab.org/git/pear/Net_LDAP3"
},
{
"type": "package",
"package": {
"name": "Net_SMTP",
"version": "dev-master",
"source": {
"url": "http://github.com/pear/Net_SMTP",
"type": "git",
"reference": "master"
}
}
}
],
"require": {
"php": ">=5.3.0",
"roundcube/plugin-installer": ">=0.1.3"
"roundcube/plugin-installer": ">=0.1.3",
"pear/mail_mime": ">=1.8.9",
"pear/mail_mime-decode": ">=1.5.5",
"pear/net_smtp": "dev-master",
"pear-pear.php.net/auth_sasl": ">=1.0.6",
"pear-pear.php.net/net_idna2": ">=0.1.1",
"pear-pear.php.net/net_sieve": ">=1.3.2",
"pear-pear.php.net/net_ldap2": ">=2.0.12",
"kolab/Net_LDAP3": "dev-master",
"patchwork/utf8": "1.2.x"
},
"require-dev": {
"pear-pear.php.net/crypt_gpg": "*",
"phpunit/phpunit": "*"
},
"minimum-stability": "dev"
}

@ -66,6 +66,10 @@ $config['log_driver'] = 'file';
// (read http://php.net/manual/en/function.date.php for all format characters)
$config['log_date_format'] = 'd-M-Y H:i:s O';
// length of the session ID to prepend each log line with
// set to 0 to avoid session IDs being logged.
$config['log_session_id'] = 8;
// Syslog ident string to use, if using the 'syslog' log driver.
$config['syslog_id'] = 'roundcube';
@ -123,6 +127,27 @@ $config['default_port'] = 143;
// best server supported one)
$config['imap_auth_type'] = null;
// IMAP socket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation
//$config['imap_conn_options'] = array(
// 'ssl' => array(
// 'verify_peer' => true,
// 'verify_depth' => 3,
// 'cafile' => '/etc/openssl/certs/ca.crt',
// ),
// );
$config['imap_conn_options'] = null;
// IMAP connection timeout, in seconds. Default: 0 (use default_socket_timeout)
$config['imap_timeout'] = 0;
// Optional IMAP authentication identifier to be used as authorization proxy
$config['imap_auth_cid'] = null;
// Optional IMAP authentication password to be used for imap_auth_cid
$config['imap_auth_pw'] = null;
// If you know your imap's folder delimiter, you can specify it here.
// Otherwise it will be determined automatically
$config['imap_delimiter'] = null;
@ -160,19 +185,17 @@ $config['imap_force_ns'] = false;
// Note: Because the list is cached, re-login is required after change.
$config['imap_disabled_caps'] = array();
// IMAP connection timeout, in seconds. Default: 0 (use default_socket_timeout)
$config['imap_timeout'] = 0;
// Optional IMAP authentication identifier to be used as authorization proxy
$config['imap_auth_cid'] = null;
// Optional IMAP authentication password to be used for imap_auth_cid
$config['imap_auth_pw'] = null;
// Log IMAP session identifers after each IMAP login.
// This is used to relate IMAP session with Roundcube user sessions
$config['imap_log_session'] = false;
// Type of IMAP indexes cache. Supported values: 'db', 'apc' and 'memcache'.
$config['imap_cache'] = null;
// Enables messages cache. Only 'db' cache is supported.
// This requires an IMAP server that supports QRESYNC and CONDSTORE
// extensions (RFC7162). See synchronize() in program/lib/Roundcube/rcube_imap_cache.php
// for further info, or if you experience syncing problems.
$config['messages_cache'] = false;
// Lifetime of IMAP indexes cache. Possible units: s, m, h, d, w
@ -241,13 +264,14 @@ $config['smtp_timeout'] = 0;
// requires 'smtp_timeout' to be non zero.
// $config['smtp_conn_options'] = array(
// 'ssl' => array(
// 'verify_peer' => true,
// 'verify_depth => 3,
// 'cafile' => '/etc/openssl/certs/ca.crt',
// 'verify_peer' => true,
// 'verify_depth' => 3,
// 'cafile' => '/etc/openssl/certs/ca.crt',
// ),
// );
$config['smtp_conn_options'] = null;
// ----------------------------------
// LDAP
// ----------------------------------
@ -269,6 +293,9 @@ $config['enable_installer'] = false;
// don't allow these settings to be overriden by the user
$config['dont_override'] = array();
// List of disabled UI elements/actions
$config['disabled_actions'] = array();
// define which settings should be listed under the 'advanced' block
// which is hidden by default
$config['advanced_prefs'] = array();
@ -465,6 +492,10 @@ $config['mdn_use_from'] = false;
// 4 - one identity with possibility to edit only signature
$config['identities_level'] = 0;
// Maximum size of uploaded image in kilobytes
// Images (in html signatures) are stored in database as data URIs
$config['identity_image_size'] = 64;
// Mimetypes supported by the browser.
// attachments of these types will open in a preview window
// either a comma-separated list or an array: 'text/plain,text/html,text/xml,image/jpeg,image/gif,image/png,application/pdf'
@ -784,6 +815,8 @@ $config['ldap_public']['Verisign'] = array(
'sizelimit' => '0', // Enables you to limit the count of entries fetched. Setting this to 0 means no limit.
'timelimit' => '0', // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit.
'referrals' => false, // Sets the LDAP_OPT_REFERRALS option. Mostly used in multi-domain Active Directory setups
'dereference' => 0, // Sets the LDAP_OPT_DEREF option. One of: LDAP_DEREF_NEVER, LDAP_DEREF_SEARCHING, LDAP_DEREF_FINDING, LDAP_DEREF_ALWAYS
// Used where addressbook contains aliases to objects elsewhere in the LDAP tree.
// definition for contact groups (uncomment if no groups are supported)
// for the groups base_dn, the user replacements %fu, %u, $d and %dc work as for base_dn (see above)
@ -855,6 +888,11 @@ $config['address_template'] = '{street}<br/>{locality} {zipcode}<br/>{country} {
// Note: For LDAP sources fuzzy_search must be enabled to use 'partial' or 'prefix' mode
$config['addressbook_search_mode'] = 0;
// Template of contact entry on the autocompletion list.
// You can use contact fields as: name, email, organization, department, etc.
// See program/steps/addressbook/func.inc for a list
$config['contact_search_name'] = '{name} <{email}>';
// ----------------------------------
// USER PREFERENCES
// ----------------------------------
@ -909,6 +947,10 @@ $config['compose_extwin'] = false;
// 0 - never, 1 - always, 2 - on reply to HTML message, 3 - on forward or reply to HTML message
$config['htmleditor'] = 0;
// save copies of compose messages in the browser's local storage
// for recovery in case of browser crashes and session timeout.
$config['compose_save_localstorage'] = true;
// show pretty dates as standard
$config['prettydate'] = true;
@ -960,9 +1002,12 @@ $config['check_all_folders'] = false;
// If true, after message delete/move, the next message will be displayed
$config['display_next'] = true;
// 0 - Do not expand threads
// 1 - Expand all threads automatically
// 2 - Expand only threads with unread messages
// Default messages listing mode. One of 'threads' or 'list'.
$config['default_list_mode'] = 'list';
// 0 - Do not expand threads
// 1 - Expand all threads automatically
// 2 - Expand only threads with unread messages
$config['autoexpand_threads'] = 0;
// When replying:
@ -987,7 +1032,7 @@ $config['force_7bit'] = false;
// Defaults of the search field configuration.
// The array can contain a per-folder list of header fields which should be considered when searching
// The entry with key '*' stands for all folders which do not have a specific list set.
// Please note that folder names should to be in sync with $config['default_folders']
// Please note that folder names should to be in sync with $config['*_mbox'] options
$config['search_mods'] = null; // Example: array('*' => array('subject'=>1, 'from'=>1), 'Sent' => array('subject'=>1, 'to'=>1));
// Defaults of the addressbook search field configuration.

@ -44,6 +44,7 @@ $RCMAIL = rcmail::get_instance($GLOBALS['env']);
// Make the whole PHP output non-cacheable (#1487797)
$RCMAIL->output->nocacheing_headers();
$RCMAIL->output->common_headers();
// turn on output buffering
ob_start();
@ -188,7 +189,7 @@ else if ($RCMAIL->task == 'logout' && isset($_SESSION['user_id'])
}
// check session and auth cookie
else if ($RCMAIL->task != 'login' && $_SESSION['user_id'] && $RCMAIL->action != 'send') {
else if ($RCMAIL->task != 'login' && $_SESSION['user_id']) {
if (!$RCMAIL->session->check_auth()) {
$RCMAIL->kill_session();
$session_error = true;
@ -211,7 +212,7 @@ if (empty($RCMAIL->user->ID)) {
$OUTPUT->show_message('sessionerror', 'error', null, true, -1);
}
if ($OUTPUT->ajax_call || !empty($_REQUEST['_framed'])) {
if ($OUTPUT->ajax_call || $OUTPUT->get_env('framed')) {
$OUTPUT->command('session_error', $RCMAIL->url(array('_err' => 'session')));
$OUTPUT->send('iframe');
}
@ -259,6 +260,14 @@ else {
'message' => "Referer check failed"), true, true);
}
}
// check access to disabled actions
$disabled_actions = (array) $RCMAIL->config->get('disabled_actions');
if (in_array($RCMAIL->task . '.' . ($RCMAIL->action ?: 'index'), $disabled_actions)) {
rcube::raise_error(array(
'code' => 403, 'type' => 'php',
'message' => "Action disabled"), true, true);
}
}
// we're ready, user is authenticated and the request is safe
@ -286,13 +295,14 @@ if (is_file($incfile = INSTALL_PATH . 'program/steps/'.$RCMAIL->task.'/func.inc'
$redirects = 0; $incstep = null;
while ($redirects < 5) {
// execute a plugin action
if ($RCMAIL->plugins->is_plugin_task($RCMAIL->task)) {
if (!$RCMAIL->action) $RCMAIL->action = 'index';
$RCMAIL->plugins->exec_action($RCMAIL->task.'.'.$RCMAIL->action);
if (preg_match('/^plugin\./', $RCMAIL->action)) {
$RCMAIL->plugins->exec_action($RCMAIL->action);
break;
}
else if (preg_match('/^plugin\./', $RCMAIL->action)) {
$RCMAIL->plugins->exec_action($RCMAIL->action);
// execute action registered to a plugin task
else if ($RCMAIL->plugins->is_plugin_task($RCMAIL->task)) {
if (!$RCMAIL->action) $RCMAIL->action = 'index';
$RCMAIL->plugins->exec_action($RCMAIL->task.'.'.$RCMAIL->action);
break;
}
// try to include the step file

@ -28,10 +28,13 @@ $optional_php_exts = array(
);
$required_libs = array(
'PEAR' => 'PEAR.php',
'Net_SMTP' => 'Net/SMTP.php',
'Net_IDNA2' => 'Net/IDNA2.php',
'Mail_mime' => 'Mail/mime.php',
'PEAR' => 'pear.php.net',
'Auth_SASL' => 'pear.php.net',
'Net_SMTP' => 'pear.php.net',
'Net_IDNA2' => 'pear.php.net',
'Net_LDAP3' => 'git.kolab.org',
'Mail_mime' => 'pear.php.net',
'Mail_mimeDecode' => 'pear.php.net',
);
$ini_checks = array(
@ -160,13 +163,13 @@ if (empty($found_db_driver)) {
<?php
foreach ($required_libs as $classname => $file) {
foreach ($required_libs as $classname => $vendor) {
@include_once $file;
if (class_exists($classname)) {
$RCI->pass($classname);
}
else {
$RCI->fail($classname, "Failed to load $file", $source_urls[$classname]);
$RCI->fail($classname, "Failed to load class $classname from $vendor", $source_urls[$classname]);
}
echo "<br />";
}

@ -3,9 +3,9 @@
/*
+-------------------------------------------------------------------------+
| Roundcube Webmail setup tool |
| Version 0.9-git |
| Version 1.1-git |
| |
| Copyright (C) 2009-2013, The Roundcube Dev Team |
| Copyright (C) 2009-2014, The Roundcube Dev Team |
| |
| This program is free software: you can redistribute it and/or modify |
| it under the terms of the GNU General Public License (with exceptions |
@ -49,6 +49,11 @@ $include_path .= ini_get('include_path');
set_include_path($include_path);
// include composer autoloader (if available)
if (@file_exists(INSTALL_PATH . 'vendor/autoload.php')) {
require INSTALL_PATH . 'vendor/autoload.php';
}
require_once 'Roundcube/bootstrap.php';
// deprecated aliases (to be removed)
require_once 'bc.php';

@ -210,7 +210,6 @@ if ($db_working) {
<h3>Test filetype detection</h3>
<p>
<?php
if ($errors = $RCI->check_mime_detection()) {
@ -225,12 +224,9 @@ if ($errors = $RCI->check_mime_detection()) {
}
else {
$RCI->pass('Fileinfo/mime_content_type configuration');
echo "<br/>";
}
?>
</p>
<p>
<?php
if ($errors = $RCI->check_mime_extensions()) {
$RCI->fail('Mimetype to file extension mapping');
@ -239,6 +235,7 @@ if ($errors = $RCI->check_mime_extensions()) {
}
else {
$RCI->pass('Mimetype to file extension mapping');
echo "<br/>";
}
?>

@ -24,11 +24,7 @@ if (window.rcmail) {
if (e.field.id != 'acluser')
return;
var value = e.insert;
// get UID from the entry value
if (value.match(/\s*\(([^)]+)\)[, ]*$/))
value = RegExp.$1;
e.field.value = value;
e.field.value = e.insert.replace(/[ ,;]+$/, '');
});
}
}
@ -140,15 +136,16 @@ rcube_webmail.prototype.acl_mode_switch = function(elem)
rcube_webmail.prototype.acl_list_init = function()
{
var method = this.env.acl_advanced ? 'addClass' : 'removeClass';
$('#acl-switch')[method]('selected');
$(this.gui_objects.acltable)[method]('advanced');
this.acl_list = new rcube_list_widget(this.gui_objects.acltable,
{multiselect:true, draggable:false, keyboard:true, toggleselect:true});
this.acl_list.addEventListener('select', function(o) { rcmail.acl_list_select(o); });
this.acl_list.addEventListener('dblclick', function(o) { rcmail.acl_list_dblclick(o); });
this.acl_list.addEventListener('keypress', function(o) { rcmail.acl_list_keypress(o); });
this.acl_list.init();
{multiselect: true, draggable: false, keyboard: true});
this.acl_list.addEventListener('select', function(o) { rcmail.acl_list_select(o); })
.addEventListener('dblclick', function(o) { rcmail.acl_list_dblclick(o); })
.addEventListener('keypress', function(o) { rcmail.acl_list_keypress(o); })
.init();
}
// ACL table row selection handler
@ -228,16 +225,23 @@ rcube_webmail.prototype.acl_add_row = function(o, sel)
row = $('thead > tr', table).clone();
// Update new row
$('td', row).map(function() {
var r, cl = this.className.replace(/^acl/, '');
$('th', row).map(function() {
var td = $('<td>'),
title = $(this).attr('title'),
cl = this.className.replace(/^acl/, '');
if (title)
td.attr('title', title);
if (items && items[cl])
cl = items[cl];
if (cl == 'user')
$(this).text(o.username);
td.addClass(cl).append($('<a>').text(o.username));
else
$(this).addClass(rcmail.acl_class(o.acl, cl)).text('');
td.addClass(this.className + ' ' + rcmail.acl_class(o.acl, cl)).text('');
$(this).replaceWith(td);
});
row.attr('id', 'rcmrow'+id);
@ -281,10 +285,10 @@ rcube_webmail.prototype.acl_init_form = function(id)
{
var ul, row, td, val = '', type = 'user', li_elements, body = $('body'),
adv_ul = $('#advancedrights'), sim_ul = $('#simplerights'),
name_input = $('#acluser');
name_input = $('#acluser'), type_list = $('#usertype');
if (!this.acl_form) {
var fn = function () { $('input[value=user]').prop('checked', true); };
var fn = function () { $('input[value="user"]').prop('checked', true); };
name_input.click(fn).keypress(fn);
}
@ -329,23 +333,24 @@ rcube_webmail.prototype.acl_init_form = function(id)
this.acl_id = id;
var me = this, inst = window.rcmail, body = document.body;
var buttons = {};
buttons[rcmail.gettext('save')] = function(e) { inst.command('acl-save'); };
buttons[rcmail.gettext('cancel')] = function(e) { inst.command('acl-cancel'); };
var buttons = {}, me = this, body = document.body;
buttons[this.gettext('save')] = function(e) { me.command('acl-save'); };
buttons[this.gettext('cancel')] = function(e) { me.command('acl-cancel'); };
// display it as popup
this.acl_popup = rcmail.show_popup_dialog(
this.acl_popup = this.show_popup_dialog(
'<div style="width:480px;height:280px">&nbsp;</div>',
id ? rcmail.gettext('acl.editperms') : rcmail.gettext('acl.newuser'),
id ? this.gettext('acl.editperms') : this.gettext('acl.newuser'),
buttons,
{
modal: true,
closeOnEscape: false,
closeOnEscape: true,
close: function(e, ui) {
(rcmail.is_framed() ? parent.rcmail : rcmail).ksearch_hide();
(me.is_framed() ? parent.rcmail : me).ksearch_hide();
me.acl_form.appendTo(body).hide();
$(this).remove();
window.focus(); // focus iframe
}
}
);
@ -354,9 +359,8 @@ rcube_webmail.prototype.acl_init_form = function(id)
if (type == 'user')
name_input.focus();
// unfocus the list, make backspace key in name input field working
this.acl_list.blur();
else
$('input:checked', type_list).focus();
}
// Returns class name according to ACL comparision result

@ -88,6 +88,7 @@ class acl extends rcube_plugin
$search = rcube_utils::get_input_value('_search', rcube_utils::INPUT_GPC, true);
$reqid = rcube_utils::get_input_value('_reqid', rcube_utils::INPUT_GPC);
$users = array();
$keys = array();
if ($this->init_ldap()) {
$max = (int) $this->rc->config->get('autocomplete_max', 15);
@ -105,15 +106,37 @@ class acl extends rcube_plugin
}
if ($user) {
if ($record['name'])
$user = $record['name'] . ' (' . $user . ')';
$display = rcube_addressbook::compose_search_name($record);
$user = array('name' => $user, 'display' => $display);
$users[] = $user;
$keys[] = $display ?: $user['name'];
}
}
if ($this->rc->config->get('acl_groups')) {
$prefix = $this->rc->config->get('acl_group_prefix');
$result = $this->ldap->list_groups($search, $mode);
foreach ($result as $record) {
$group = $record['name'];
if ($group) {
$users[] = array('name' => ($prefix ? $prefix : '') . $group, 'display' => $group);
$keys[] = $group;
}
}
}
}
sort($users, SORT_LOCALE_STRING);
if (count($users)) {
// sort users index
asort($keys, SORT_LOCALE_STRING);
// re-sort users according to index
foreach ($keys as $idx => $val) {
$keys[$idx] = $users[$idx];
}
$users = array_values($keys);
}
$this->rc->output->command('ksearch_query_results', $users, $search, $reqid);
$this->rc->output->send();
@ -286,7 +309,7 @@ class acl extends rcube_plugin
$textfield = new html_inputfield($attrib);
$fields['user'] = html::label(array('for' => 'iduser'), $this->gettext('username'))
$fields['user'] = html::label(array('for' => $attrib['id']), $this->gettext('username'))
. ' ' . $textfield->show();
// Add special entries
@ -401,7 +424,7 @@ class acl extends rcube_plugin
}
$table->add_row(array('id' => 'rcmrow'.$userid));
$table->add('user', rcube::Q($user));
$table->add('user', html::a(array('id' => 'rcmlinkrow'.$userid), rcube::Q($user)));
foreach ($items as $key => $right) {
$in = $this->acl_compare($userrights, $right);
@ -439,9 +462,13 @@ class acl extends rcube_plugin
$result = 0;
foreach ($users as $user) {
$user = trim($user);
$user = trim($user);
$prefix = $this->rc->config->get('acl_groups') ? $this->rc->config->get('acl_group_prefix') : '';
if (!empty($this->specials) && in_array($user, $this->specials)) {
if ($prefix && strpos($user, $prefix) === 0) {
$username = $user;
}
else if (!empty($this->specials) && in_array($user, $this->specials)) {
$username = $this->gettext($user);
}
else if (!empty($user)) {
@ -653,8 +680,9 @@ class acl extends rcube_plugin
*/
private function init_ldap()
{
if ($this->ldap)
if ($this->ldap) {
return $this->ldap->ready;
}
// get LDAP config
$config = $this->rc->config->get('acl_users_source');
@ -666,7 +694,7 @@ class acl extends rcube_plugin
// not an array, use configured ldap_public source
if (!is_array($config)) {
$ldap_config = (array) $this->rc->config->get('ldap_public');
$config = $ldap_config[$config];
$config = $ldap_config[$config];
}
$uid_field = $this->rc->config->get('acl_users_field', 'mail');
@ -686,18 +714,17 @@ class acl extends rcube_plugin
}
// add UID field to fieldmap, so it will be returned in a record with name
$config['fieldmap'] = array(
'name' => $name_field,
'uid' => $uid_field,
);
$config['fieldmap']['name'] = $name_field;
$config['fieldmap']['uid'] = $uid_field;
// search in UID and name fields
$config['search_fields'] = array_values($config['fieldmap']);
$config['search_fields'] = array_values($config['fieldmap']);
$config['required_fields'] = array($uid_field);
// set search filter
if ($filter)
if ($filter) {
$config['filter'] = $filter;
}
// disable vlv
$config['vlv'] = false;

@ -3,7 +3,7 @@
"type": "roundcube-plugin",
"description": "IMAP Folders Access Control Lists Management (RFC4314, RFC2086).",
"license": "GNU GPLv3+",
"version": "1.3",
"version": "1.5",
"authors": [
{
"name": "Aleksander Machniak",

@ -16,10 +16,15 @@ $config['acl_users_field'] = 'mail';
// The LDAP search filter will be &'d with search queries
$config['acl_users_filter'] = '';
// Enable LDAP groups in user autocompletion.
// Note: LDAP addressbook defined in acl_users_source must include groups config
$config['acl_groups'] = false;
// Prefix added to the group name to build IMAP ACL identifier
$config['acl_group_prefix'] = 'group:';
// Include the following 'special' access control subjects in the ACL dialog;
// Defaults to array('anyone', 'anonymous') (not when set to an empty array)
// Example: array('anyone') to exclude 'anonymous'.
// Set to an empty array to exclude all special aci subjects.
$config['acl_specials'] = array('anyone', 'anonymous');
?>

@ -0,0 +1,80 @@
<?php
/*
+-----------------------------------------------------------------------+
| plugins/acl/localization/<lang>.inc |
| |
| Localization file of the Roundcube Webmail ACL plugin |
| Copyright (C) 2012-2013, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/
$labels['sharing'] = 'Compartición';
$labels['myrights'] = 'Drechos d\'accesu';
$labels['username'] = 'Usuariu:';
$labels['advanced'] = 'Mou avanzáu';
$labels['newuser'] = 'Amestar entrada';
$labels['editperms'] = 'Editar permisos';
$labels['actions'] = 'Aición de drechos d\'accesu...';
$labels['anyone'] = 'Tolos usuarios (toos)';
$labels['anonymous'] = 'Convidaos (anónimos)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Guetar';
$labels['aclr'] = 'Lleer mensaxes';
$labels['acls'] = 'Estáu Caltener Vistu';
$labels['aclw'] = 'Escribir banderes';
$labels['acli'] = 'Inxertar (copiar a)';
$labels['aclc'] = 'Crear subcarpetes';
$labels['aclk'] = 'Crear subcarpetes';
$labels['acld'] = 'Desaniciar mensaxes';
$labels['aclt'] = 'Desaniciar mensaxes';
$labels['acle'] = 'Desanciar';
$labels['aclx'] = 'Desaniciar carpeta';
$labels['acla'] = 'Alministrar';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Otru';
$labels['aclread'] = 'Lleer';
$labels['aclwrite'] = 'Escribir';
$labels['acldelete'] = 'Desaniciar';
$labels['shortacll'] = 'Guetar';
$labels['shortaclr'] = 'Lleer';
$labels['shortacls'] = 'Caltener';
$labels['shortaclw'] = 'Escribir';
$labels['shortacli'] = 'Inxertar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Desaniciar';
$labels['shortaclt'] = 'Desaniciar';
$labels['shortacle'] = 'Desaniciar';
$labels['shortaclx'] = 'Desaniciu de carpeta';
$labels['shortacla'] = 'Alministrar';
$labels['shortaclother'] = 'Otru';
$labels['shortaclread'] = 'Lleer';
$labels['shortaclwrite'] = 'Escribir';
$labels['shortacldelete'] = 'Desaniciar';
$labels['longacll'] = 'La carpeta ye visible nes llistes y pue soscribise a';
$labels['longaclr'] = 'La carpeta nun pue abrise pa leer';
$labels['longaclx'] = 'La carpeta pue desaniciase o renomase';
$labels['longacla'] = 'Puen camudase los drechos d\'accesu de la carpeta';
$labels['longaclfull'] = 'Control completu incluyendo l\'alminitración de carpeta';
$labels['longaclread'] = 'La carpeta pue abrise pa llectura';
$labels['longaclwrite'] = 'Los mensaxes puen conseñase, escribise o copiase a la carpeta';
$labels['longacldelete'] = 'Los mensaxes puen desaniciase';
$labels['longaclother'] = 'Otros drechos d\'accesu';
$labels['ariasummaryacltable'] = 'Llista de drechos d\'accesu';
$messages['deleting'] = 'Desaniciando los drechos d\'accesu...';
$messages['saving'] = 'Guardando los drechos d\'accesu...';
$messages['updatesuccess'] = 'Camudaos con ésitu los drechos d\'accesu';
$messages['deletesuccess'] = 'Desaniciaos con ésitu los drechos d\'accesu';
$messages['createsuccess'] = 'Amestaos con ésitu los drechos d\'accesu';
$messages['updateerror'] = 'Nun puen anovase los drechos d\'accesu';
$messages['deleteerror'] = 'Nun puen desaniciase los drechos d\'accesu';
$messages['createerror'] = 'Nun puen amestase los drechos d\'accesu';
$messages['deleteconfirm'] = '¿De xuru quies desaniciar los drechos d\'accesu al(a los) usuariu(os) esbilláu(os)?';
?>

@ -18,8 +18,9 @@
$labels['sharing'] = 'Razmjena';
$labels['myrights'] = 'Prava pristupa';
$labels['username'] = 'Korisnik:';
$labels['advanced'] = 'napredni mod';
$labels['advanced'] = 'Napredni mod';
$labels['newuser'] = 'Dodaj unos';
$labels['editperms'] = 'Uredi dozvole';
$labels['actions'] = 'Akcije za prava pristupa...';
$labels['anyone'] = 'Svi korisnici (bilo ko)';
$labels['anonymous'] = 'Gosti (anonimno)';
@ -37,6 +38,7 @@ $labels['aclt'] = 'Obriši poruke';
$labels['acle'] = 'Izbriši';
$labels['aclx'] = 'Obriši folder';
$labels['acla'] = 'Administracija';
$labels['acln'] = 'Obilježi poruke';
$labels['aclfull'] = 'Puna kontrola';
$labels['aclother'] = 'Ostalo';
$labels['aclread'] = 'Pročitano';
@ -55,6 +57,7 @@ $labels['shortaclt'] = 'Obriši';
$labels['shortacle'] = 'Izbriši';
$labels['shortaclx'] = 'Brisanje foldera';
$labels['shortacla'] = 'Administracija';
$labels['shortacln'] = 'Obilježli';
$labels['shortaclother'] = 'Ostalo';
$labels['shortaclread'] = 'Pročitano';
$labels['shortaclwrite'] = 'Piši';
@ -72,10 +75,15 @@ $labels['longaclt'] = 'Oznaka za obrisane poruke se može mijenjati';
$labels['longacle'] = 'Poruke je moguće obrisati';
$labels['longaclx'] = 'Folder je moguće obrisati ili preimenovati';
$labels['longacla'] = 'Pristupna prava foldera je moguće promijeniti';
$labels['longacln'] = 'Dijeljeni podaci (obilježavanja) poruka mogu se mijenjati';
$labels['longaclfull'] = 'Puna kontrola uključujući i administraciju foldera';
$labels['longaclread'] = 'Folder je moguće otvoriti radi čitanja';
$labels['longaclwrite'] = 'Moguće je označavati, zapisivati i kopirati poruke u folder';
$labels['longacldelete'] = 'Moguće je obrisati poruke';
$labels['longaclother'] = 'Ostala prava pristupa';
$labels['ariasummaryacltable'] = 'Lista prava pristupa';
$labels['arialabelaclactions'] = 'Lista akcija';
$labels['arialabelaclform'] = 'Obrazac za prava pristupa';
$messages['deleting'] = 'Brišem prava pristupa...';
$messages['saving'] = 'Snimam prava pristupa...';
$messages['updatesuccess'] = 'Prava pristupa su uspješno promijenjena';

@ -18,7 +18,9 @@
$labels['sharing'] = 'Sharing';
$labels['myrights'] = 'Access Rights';
$labels['username'] = 'User:';
$labels['advanced'] = 'Advanced mode';
$labels['newuser'] = 'Add entry';
$labels['editperms'] = 'Edit permissions';
$labels['actions'] = 'Access right actions...';
$labels['anyone'] = 'All users (anyone)';
$labels['anonymous'] = 'Guests (anonymous)';
@ -36,6 +38,7 @@ $labels['aclt'] = 'Delete messages';
$labels['acle'] = 'Expunge';
$labels['aclx'] = 'Delete folder';
$labels['acla'] = 'Administer';
$labels['acln'] = 'Annotate messages';
$labels['aclfull'] = 'Full control';
$labels['aclother'] = 'Other';
$labels['aclread'] = 'Read';
@ -54,6 +57,7 @@ $labels['shortaclt'] = 'Delete';
$labels['shortacle'] = 'Expunge';
$labels['shortaclx'] = 'Folder delete';
$labels['shortacla'] = 'Administer';
$labels['shortacln'] = 'Annotate';
$labels['shortaclother'] = 'Other';
$labels['shortaclread'] = 'Read';
$labels['shortaclwrite'] = 'Write';
@ -71,6 +75,7 @@ $labels['longaclt'] = 'Messages Delete flag can be changed';
$labels['longacle'] = 'Messages can be expunged';
$labels['longaclx'] = 'The folder can be deleted or renamed';
$labels['longacla'] = 'The folder access rights can be changed';
$labels['longacln'] = 'Messages shared metadata (annotations) can be changed';
$labels['longaclfull'] = 'Full control including folder administration';
$labels['longaclread'] = 'The folder can be opened for reading';
$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder';

@ -87,6 +87,11 @@ $labels['longaclfull'] = 'Full control including folder administration';
$labels['longaclread'] = 'The folder can be opened for reading';
$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder';
$labels['longacldelete'] = 'Messages can be deleted';
$labels['longaclother'] = 'Other access rights';
$labels['ariasummaryacltable'] = 'List of access rights';
$labels['arialabelaclactions'] = 'List actions';
$labels['arialabelaclform'] = 'Access rights form';
$messages['deleting'] = 'Deleting access rights...';
$messages['saving'] = 'Saving access rights...';

@ -18,12 +18,17 @@
$labels['sharing'] = 'Jagamine';
$labels['myrights'] = 'Ligipääsuõigused';
$labels['username'] = 'Kasutaja:';
$labels['advanced'] = 'laiendatud režiim';
$labels['newuser'] = 'Lisa sissekanne';
$labels['editperms'] = 'Muuda õigusi';
$labels['actions'] = 'Ligipääsuõiguste toimingud...';
$labels['anyone'] = 'Kõik kasutajad';
$labels['anonymous'] = 'Külalised (anonüümsed)';
$labels['identifier'] = 'Tuvastaja';
$labels['acll'] = 'Ülevaade';
$labels['aclr'] = 'Lugeda kirju';
$labels['acls'] = 'Hoia nähtud olekut';
$labels['aclw'] = 'Salvesta lipud';
$labels['acli'] = 'Sisesta (kopeeri)';
$labels['aclp'] = 'Postita';
$labels['aclc'] = 'Luua alamkaustu';
@ -33,11 +38,13 @@ $labels['aclt'] = 'Kustutada kirju';
$labels['acle'] = 'Eemalda';
$labels['aclx'] = 'Kustutada kausta';
$labels['acla'] = 'Administreerida';
$labels['acln'] = 'Annoteeri kirja';
$labels['aclfull'] = 'Täis kontroll';
$labels['aclother'] = 'Muu';
$labels['aclread'] = 'Loe';
$labels['aclwrite'] = 'Kirjuta';
$labels['acldelete'] = 'Kustuta';
$labels['shortacll'] = 'Ülevaade';
$labels['shortaclr'] = 'Loe';
$labels['shortacls'] = 'Säilita';
$labels['shortaclw'] = 'Kirjuta';
@ -50,20 +57,33 @@ $labels['shortaclt'] = 'Kustuta';
$labels['shortacle'] = 'Eemalda';
$labels['shortaclx'] = 'Kausta kustutamine';
$labels['shortacla'] = 'Administreerida';
$labels['shortacln'] = 'Annoteeri';
$labels['shortaclother'] = 'Muu';
$labels['shortaclread'] = 'Loe';
$labels['shortaclwrite'] = 'Kirjuta';
$labels['shortacldelete'] = 'Kustuta';
$labels['longacll'] = 'See kaust on nimekirjas nähtav ja seda saab tellida';
$labels['longaclr'] = 'Kausta saab lugemiseks avada';
$labels['longacls'] = 'Kirja loetuse lippu saab muuta';
$labels['longaclw'] = 'Kirja lippe ja otsingusõnu saab muuta, väljaarvatud loetud ja kustutatud';
$labels['longacli'] = 'Kirju saab salvestada ja kopeerida antud kausta';
$labels['longaclp'] = 'Kirju saab postitada antud kausta';
$labels['longaclc'] = 'Kaustasi saab luua (või ümber nimetada) otse siia kausta alla.';
$labels['longaclk'] = 'Kaustu saab luua (või ümber nimetada) otse siia kausta alla';
$labels['longacld'] = 'Kirja kustutamis lippu saab muuta';
$labels['longaclt'] = 'Kirja kustutamis lippu saab muuta';
$labels['longacle'] = 'Kirju saab eemaldada';
$labels['longaclx'] = 'Seda kausta ei saa kustutada ega ümber nimetada';
$labels['longacla'] = 'Selle kausta ligipääsuõigusi saab muuta';
$labels['longacln'] = 'Kirja jagatud metainfot (annotatsioonid) saab muuta';
$labels['longaclfull'] = 'Täielik kontroll koos kaustade haldamisega';
$labels['longaclread'] = 'Kausta saab lugemiseks avada';
$labels['longaclwrite'] = 'Kirju saab märgistada, salvestada või kopeerida kausta';
$labels['longacldelete'] = 'Kirju saab kustutada';
$labels['longaclother'] = 'Muud ligipääsu õigused';
$labels['ariasummaryacltable'] = 'Nimekir ligipääsu õigustest';
$labels['arialabelaclactions'] = 'Näita tegevusi';
$labels['arialabelaclform'] = 'Ligipääsu õiguste vorm';
$messages['deleting'] = 'Ligipääsuõiguste kustutamine...';
$messages['saving'] = 'Ligipääsuõiguste salvestamine...';
$messages['updatesuccess'] = 'Ligipääsuõigused on muudetud';

@ -21,12 +21,24 @@ $labels['username'] = 'Käyttäjä:';
$labels['editperms'] = 'Muokkaa oikeuksia';
$labels['anyone'] = 'Kaikki käyttäjät (kuka tahansa)';
$labels['anonymous'] = 'Vieraat (anonyymit)';
$labels['aclc'] = 'Luo alikansioita';
$labels['aclk'] = 'Luo alikansioita';
$labels['acld'] = 'Poista viestejä';
$labels['aclt'] = 'Poista viestejä';
$labels['aclx'] = 'Poista kansio';
$labels['aclfull'] = 'Täydet käyttöoikeudet';
$labels['aclother'] = 'Muu';
$labels['aclread'] = 'Luku';
$labels['aclwrite'] = 'Kirjoitus';
$labels['acldelete'] = 'Poisto';
$labels['shortaclc'] = 'Luo';
$labels['shortaclk'] = 'Luo';
$labels['shortacld'] = 'Poista';
$labels['shortaclt'] = 'Poista';
$labels['shortaclother'] = 'Muu';
$labels['shortaclread'] = 'Luku';
$labels['shortaclwrite'] = 'Kirjoitus';
$labels['shortacldelete'] = 'Poisto';
$labels['longaclr'] = 'Kansion voi avata lukua varten';
$labels['longaclx'] = 'Kansio voidaan poistaa tai nimetä uudelleen';
$labels['longacla'] = 'Kansion käyttöoikeuksia voi muuttaa';

@ -80,6 +80,10 @@ $labels['longaclfull'] = 'Controllo completo incluso cartella di amministrazione
$labels['longaclread'] = 'Questa cartella può essere aperta in lettura';
$labels['longaclwrite'] = 'I messaggi possono essere marcati, scritti o copiati nella cartella';
$labels['longacldelete'] = 'I messaggi possono essere eliminati';
$labels['longaclother'] = 'Altri diritti di accesso';
$labels['ariasummaryacltable'] = 'Elenco dei diritti di accesso';
$labels['arialabelaclactions'] = 'Lista azioni';
$labels['arialabelaclform'] = 'Modulo di accesso';
$messages['deleting'] = 'Sto eliminando i diritti di accesso...';
$messages['saving'] = 'Sto salvando i diritti di accesso...';
$messages['updatesuccess'] = 'I diritti d\'accesso sono stati cambiati';

@ -80,6 +80,10 @@ $labels['longaclfull'] = 'Controlo total incluindo administração de pastas';
$labels['longaclread'] = 'A pasta pode ser aberta para leitura';
$labels['longaclwrite'] = 'As mensagens podem ser marcadas, guardadas ou copiadas para a pasta';
$labels['longacldelete'] = 'As mensagens podem ser eliminadas';
$labels['longaclother'] = 'Outros direitos de acesso';
$labels['ariasummaryacltable'] = 'Lista de direitos de acesso';
$labels['arialabelaclactions'] = 'Lista de acções';
$labels['arialabelaclform'] = 'Formulário de direitos de acesso';
$messages['deleting'] = 'A eliminar permissões de acesso...';
$messages['saving'] = 'A guardar permissões de acesso...';
$messages['updatesuccess'] = 'Permissões de acesso alteradas com sucesso';

@ -13,9 +13,9 @@
<email>alec@alec.pl</email>
<active>yes</active>
</lead>
<date>2014-02-04</date>
<date>2014-08-11</date>
<version>
<release>1.3</release>
<release>1.5</release>
<api>1.0</api>
</version>
<stability>

@ -26,44 +26,39 @@
border: none;
}
#acltable th,
#acltable td
{
white-space: nowrap;
text-align: center;
}
#acltable thead tr td
#acltable thead tr th
{
border-left: #BBD3DA dotted 1px;
font-size: 11px;
font-weight: bold;
width: auto;
}
#acltable tbody td
{
border-bottom: #DDDDDD 1px solid;
text-align: center;
height: 16px;
cursor: default;
}
#acltable thead td.user
#acltable thead tr > .user
{
width: 30%;
border-left: none;
}
#acltable.advanced thead td.user {
width: 25%;
#acltable.advanced thead tr > .user {
width: 25%;
}
#acltable tbody td.user
{
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
border-left: none;
}
#acltable tbody td.partial

@ -1,23 +1,26 @@
<div id="aclcontainer" class="uibox listbox">
<div id="acllist-content" class="scroller withfooter">
<roundcube:object name="acltable" id="acltable" class="records-table" />
<h2 class="voice" id="aria-label-acltable"><roundcube:label name="acl.ariasummaryacltable" /></h2>
<roundcube:object name="acltable" id="acltable" class="records-table" aria-labelledby="aria-label-acltable" role="listbox" />
</div>
<div id="acllist-footer" class="boxfooter">
<roundcube:button command="acl-create" id="aclcreatelink" type="link" title="acl.newuser" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="aclmenulink" id="aclmenulink" type="link" title="acl.actions" class="listbutton groupactions"onclick="UI.show_popup('aclmenu', undefined, {above:1});return false" innerClass="inner" content="&#9881;" />
<roundcube:button command="acl-create" id="aclcreatelink" type="link" title="acl.newuser" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="aclmenulink" id="aclmenulink" type="link" title="acl.actions" class="listbutton groupactions" onclick="return UI.toggle_popup('aclmenu', event)" innerClass="inner" content="&#9881;" aria-haspopup="true" aria-expanded="false" aria-owns="aclmenu-menu" />
</div>
</div>
<div id="aclmenu" class="popupmenu">
<ul class="toolbarmenu selectable iconized">
<li><roundcube:button command="acl-edit" label="edit" class="icon" classAct="icon active" innerclass="icon edit" /></li>
<li><roundcube:button command="acl-delete" label="delete" class="icon" classAct="icon active" innerclass="icon delete" /></li>
<div id="aclmenu" class="popupmenu" aria-hidden="true" data-align="bottom">
<h3 id="aria-label-aclactions" class="voice"><roundcube:label name="acl.arialabelaclactions" /></h3>
<ul id="aclmenu-menu" class="toolbarmenu selectable iconized" role="menu" aria-labelledby="aria-label-aclactions">
<li role="menuitem"><roundcube:button command="acl-edit" label="edit" class="icon" classAct="icon active" innerclass="icon edit" /></li>
<li role="menuitem"><roundcube:button command="acl-delete" label="delete" class="icon" classAct="icon active" innerclass="icon delete" /></li>
<roundcube:if condition="!in_array('acl_advanced_mode', (array)config:dont_override)" />
<li><roundcube:button name="acl-switch" id="acl-switch" label="acl.advanced" onclick="rcmail.command('acl-mode-switch');return false" class="active" /></li>
<li role="menuitem"><roundcube:button name="acl-switch" id="acl-switch" label="acl.advanced" onclick="rcmail.command('acl-mode-switch');return false" class="active" /></li>
<roundcube:endif />
</ul>
</div>
<div id="aclform" class="propform" style="position:absolute; width:480px; top:0; left:0; padding:8px">
<div id="aclform" class="propform" style="position:absolute; width:480px; top:0; left:0; padding:8px" aria-labelledby="aria-label-aclform" aria-hidden="true" role="dialog">
<h3 id="aria-label-aclform" class="voice"><roundcube:label name="acl.arialabelaclform" /></h3>
<fieldset class="thinbordered"><legend><roundcube:label name="acl.identifier" /></legend>
<roundcube:object name="acluser" id="acluser" size="35" class="proplist" />
</fieldset>

@ -1,7 +1,7 @@
<?php
// $config['additional_message_headers']['X-Remote-Browser'] = $_SERVER['HTTP_USER_AGENT'];
// $config['additional_message_headers']['X-Originating-IP'] = $_SERVER['REMOTE_ADDR'];
// $config['additional_message_headers']['X-Originating-IP'] = '[' . $_SERVER['REMOTE_ADDR'] .']';
// $config['additional_message_headers']['X-RoundCube-Server'] = $_SERVER['SERVER_ADDR'];
// if( isset( $_SERVER['MACHINE_NAME'] )) {

@ -17,15 +17,15 @@
*/
$labels['buttontext'] = 'Archivu';
$labels['buttontitle'] = 'Archivar esti mensaxe';
$labels['archived'] = 'Mensaxe archiváu';
$labels['archivedreload'] = 'Archiváu correchamente. Recarga la páxina pa ver les nueves carpetes d\'archivu.';
$labels['archived'] = 'Archiváu con ésitu';
$labels['archivedreload'] = 'Archiváu con ésitu. Recarga la páxina pa ver les nueves carpetes d\'archivos.';
$labels['archiveerror'] = 'Nun pudieron archivase dalgunos mensaxes';
$labels['archivefolder'] = 'Archivu';
$labels['settingstitle'] = 'Archivu';
$labels['archivetype'] = 'Dividir l\'archivu por';
$labels['archivetypeyear'] = 'Añu (p.ex. Archivu/2012)';
$labels['archivetypemonth'] = 'Mes (p.ex. Archivu/2012/06)';
$labels['archivetypefolder'] = 'Bandexa orixinal';
$labels['archivetypefolder'] = 'Carpeta orixinal';
$labels['archivetypesender'] = 'Corréu-e del remitente';
$labels['unkownsender'] = 'desconocíu';
?>

@ -16,16 +16,16 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/
$labels['buttontext'] = 'Архіў';
$labels['buttontitle'] = 'Перанесці ў Архіў';
$labels['archived'] = 'Перанесена ў Архіў';
$labels['archivedreload'] = 'Перанесена ў Архіў. Перазагрузіце старонку, каб пабачыць новыя архіўныя папкі.';
$labels['buttontitle'] = 'Перанесці ў архіў';
$labels['archived'] = 'Перанесена ў архіў';
$labels['archivedreload'] = 'Перанесена ў архіў. Перагрузіце старонку, каб пабачыць новыя архіўныя папкі.';
$labels['archiveerror'] = 'Некаторыя паведамленні не могуць быць перанесены ў архіў';
$labels['archivefolder'] = 'Архіў';
$labels['settingstitle'] = 'Архіў';
$labels['archivetype'] = 'Раздзяліць архіў паводле';
$labels['archivetypeyear'] = 'года (прыкладам, Архіў/2012)';
$labels['archivetypemonth'] = 'месяца (прыкладам, Архіў/2012/06)';
$labels['archivetypefolder'] = 'Арыгінальная папка';
$labels['archivetypefolder'] = 'Выточная папка';
$labels['archivetypesender'] = 'Эл. пошта адпраўніка';
$labels['unkownsender'] = 'невядомы';
?>

@ -19,4 +19,5 @@ $labels['buttontext'] = 'Diell';
$labels['buttontitle'] = 'Dielliñ ar gemenadenn-mañ';
$labels['archived'] = 'Diellet gant berzh';
$labels['archivefolder'] = 'Diell';
$labels['unkownsender'] = 'dianav';
?>

@ -15,15 +15,17 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/
$labels['buttontext'] = 'Archivo';
$labels['buttontext'] = 'Archivar';
$labels['buttontitle'] = 'Archivar este mensaje';
$labels['archived'] = 'Archivado exitosamente';
$labels['archivedreload'] = 'Achivado exitosamente. ';
$labels['archivedreload'] = 'Archivado exitosamente. Recarga esta página para ver las nuevas carpetas';
$labels['archiveerror'] = 'Algunos mensajes no pudieron ser archivados';
$labels['archivefolder'] = 'Archivo';
$labels['archivefolder'] = 'Archivar';
$labels['settingstitle'] = 'Archivar';
$labels['archivetype'] = 'Dividir archivo por';
$labels['archivetypeyear'] = 'Año (ej. Archivo/2012)';
$labels['archivetypemonth'] = 'Mes (ej. Archivo/2012/06)';
$labels['archivetypefolder'] = 'Carpeta original';
$labels['archivetypesender'] = 'Remitente de correo electrónico';
$labels['unkownsender'] = 'desconocido';
?>

@ -16,9 +16,9 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/
$labels['buttontext'] = '보관';
$labels['buttontitle'] = '이 메시지를 보관';
$labels['archived'] = '성공적으로 보관';
$labels['archivedreload'] = '성공적으로 보관됨. 페이지를 다시 불러와서 새 보관 폴더를 확인하세요.';
$labels['buttontitle'] = '이 메시지를 보관함에 저장';
$labels['archived'] = '성공적으로 보관';
$labels['archivedreload'] = '성공적으로 보관됨. 페이지를 다시 불러와서 새로운 보관 폴더를 확인하세요.';
$labels['archiveerror'] = '일부 메시지가 보관되지 않음';
$labels['archivefolder'] = '보관';
$labels['settingstitle'] = '보관';
@ -26,6 +26,6 @@ $labels['archivetype'] = '보관된 메시지 정리 기준';
$labels['archivetypeyear'] = '연도 (예: 보관 편지함/2012)';
$labels['archivetypemonth'] = '월 (예: 보관 편지함/2012/06)';
$labels['archivetypefolder'] = '원본 폴더';
$labels['archivetypesender'] = '발신인 이메일';
$labels['archivetypesender'] = '발송자 이메일';
$labels['unkownsender'] = '알 수 없음';
?>

@ -0,0 +1,20 @@
<?php
/*
+-----------------------------------------------------------------------+
| plugins/attachment_reminder/localization/<lang>.inc |
| |
| Localization file of the Roundcube Webmail Archive plugin |
| Copyright (C) 2013, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/
$messages['forgotattachment'] = "¿Escaecisti axuntar un ficheru?";
$messages['reminderoption'] = "Recordar alrodiu d'axuntos escaecíos";
$messages['keywords'] = "axuntu,ficheru,axuntar,axuntáu,axuntando,axuntao,axuntada,CV,carta de presentación";

@ -0,0 +1,20 @@
<?php
/*
+-----------------------------------------------------------------------+
| plugins/attachment_reminder/localization/<lang>.inc |
| |
| Localization file of the Roundcube Webmail Archive plugin |
| Copyright (C) 2013, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/
$messages['forgotattachment'] = "Disonjet ho peus stagan er restr ?";
$messages['reminderoption'] = "Adgalv war ar pezhiou stag disonjet";
$messages['keywords'] = "pezh stag, restr, stagan, aman staget, stagit, ouzhpenan, CV, lizher youl";

@ -15,6 +15,6 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/
$messages['forgotattachment'] = "";
$messages['reminderoption'] = "";
$messages['keywords'] = "";
$messages['forgotattachment'] = "Has olvidado adjuntar un archivo?";
$messages['reminderoption'] = "Recordar sobre archivos adjuntos olvidados";
$messages['keywords'] = "adjunto,archivo,adjuntar,adjuntado,adjuntando,";

@ -15,6 +15,6 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/
$messages['forgotattachment'] = "Apakah anda lupa menambahkan attachment?";
$messages['reminderoption'] = "Pengingat attachment yang terlupakan";
$messages['forgotattachment'] = "Apakah anda lupa melampirkan sebuah file?";
$messages['reminderoption'] = "Ingatkan tentang lampiran yang terlupakan";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";

@ -16,5 +16,5 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/
$messages['forgotattachment'] = "파일을 첨부하는 것을 잊으셨습니까?";
$messages['reminderoption'] = "잊었던 첨부파일에 대해 알리기";
$messages['reminderoption'] = "잊었던 첨부파일 추가에 대해 알림";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";

@ -15,6 +15,6 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/
$messages['forgotattachment'] = "";
$messages['reminderoption'] = "";
$messages['forgotattachment'] = "താങ്കൾ ഒരു ഫയൽ ചേർക്കാൻ മറന്നുപോയി";
$messages['reminderoption'] = "ചേർക്കാൻ മറന്നുപോയ ഫയലുകളെ പറ്റി ഓർമ്മപ്പെടുത്തുക";
$messages['keywords'] = "";

@ -71,8 +71,8 @@ class emoticons extends rcube_plugin
}
private function img_tag($ico, $title)
{
$path = './program/js/tiny_mce/plugins/emotions/img/';
{
$path = './program/js/tinymce/plugins/emoticons/img/';
return html::img(array('src' => $path.$ico, 'title' => $title));
}
}

@ -15,7 +15,7 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/
$labels['help'] = 'Segítség';
$labels['help'] = 'Súgó';
$labels['about'] = 'Névjegy';
$labels['license'] = 'Licenc';
$labels['license'] = 'Licensz';
?>

@ -0,0 +1,21 @@
<?php
/*
+-----------------------------------------------------------------------+
| plugins/help/localization/<lang>.inc |
| |
| Localization file of the Roundcube Webmail Help plugin |
| Copyright (C) 2012-2013, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/
$labels['help'] = 'സഹായം';
$labels['about'] = 'വിവരം';
$labels['license'] = 'അനുമതി';
?>

@ -13,7 +13,7 @@
border-bottom: 0;
}
.closelink {
.helpwin .closelink {
position: absolute;
top: 20px;
right: 20px;

@ -16,11 +16,11 @@ function help_init_settings_tabs()
</script>
</head>
<roundcube:if condition="env:extwin" />
<body class="extwin">
<body class="extwin helpwin">
<roundcube:object name="message" id="message" />
<roundcube:button name="close" type="link" label="close" class="closelink" onclick="self.close()" />
<roundcube:else />
<body>
<body class="helpwin">
<roundcube:include file="/includes/taskbar.html" />
<roundcube:include file="/includes/header.html" />
<roundcube:endif />

@ -25,7 +25,7 @@ function hide_blockquote()
if (limit <= 0)
return;
$('pre > blockquote', $('#messagebody')).each(function() {
$('div.message-part div.pre > blockquote', $('#messagebody')).each(function() {
var div, link, q = $(this),
text = $.trim(q.text()),
res = text.split(/\n/);

@ -0,0 +1,21 @@
<?php
/*
+-----------------------------------------------------------------------+
| plugins/hide_blockquote/localization/<lang>.inc |
| |
| Localization file of the Roundcube Webmail Hide-Blockquote plugin |
| Copyright (C) 2012-2013, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/
$labels['hide'] = 'Anubrir';
$labels['show'] = 'Amosar';
$labels['quotelimit'] = 'Anubrir la citación cuando la cuenta de llinies seya mayor de';
?>

@ -2,9 +2,9 @@
/*
+-----------------------------------------------------------------------+
| plugins/password/localization/<lang>.inc |
| plugins/hide_blockquote/localization/<lang>.inc |
| |
| Localization file of the Roundcube Webmail Password plugin |
| Localization file of the Roundcube Webmail Hide-Blockquote plugin |
| Copyright (C) 2012-2013, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
@ -13,7 +13,8 @@
| |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/
$labels['changepasswd'] = 'گۆڕینی ووشەی نهێنی';
$labels['hide'] = 'Kuzhat';
$labels['show'] = 'Diskouez';
?>

@ -16,6 +16,6 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/
$labels['hide'] = '숨기기';
$labels['show'] = '보이기';
$labels['quotelimit'] = '라인 개수가 정해진 개수보다 클 때 인용구 감추기';
$labels['show'] = '표시';
$labels['quotelimit'] = '행 개수가 다음보다 많을 때 인용구를 숨김:';
?>

@ -0,0 +1,21 @@
<?php
/*
+-----------------------------------------------------------------------+
| plugins/hide_blockquote/localization/<lang>.inc |
| |
| Localization file of the Roundcube Webmail Hide-Blockquote plugin |
| Copyright (C) 2012-2013, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/
$labels['hide'] = 'മറയ്ക്കുക';
$labels['show'] = 'പ്രദർശിപ്പിക്കുക';
$labels['quotelimit'] = 'ഇതിലും കൂടുതലാണ് വരികളുടെ എണ്ണമെങ്കിൽ അവലംബം മറയ്ക്കുക';
?>

@ -3,7 +3,7 @@
"type": "roundcube-plugin",
"description": "Plugin adds the complete jQuery-UI library including the smoothness theme to Roundcube. This allows other plugins to use jQuery-UI without having to load their own version. The benefit of using one central jQuery-UI is that we wont run into problems of conflicting jQuery libraries being loaded. All plugins that want to use jQuery-UI should use this plugin as a requirement.",
"license": "GNU GPLv3+",
"version": "1.9.1",
"version": "1.10.4",
"authors": [
{
"name": "Thomas Bruederli",

@ -5,7 +5,7 @@
*
* Provide the jQuery UI library with according themes.
*
* @version 1.9.2
* @version 1.10.4
* @author Cor Bosman <roundcube@wa.ter.net>
* @author Thomas Bruederli <roundcube@gmail.com>
* @license GNU GPLv3+
@ -13,32 +13,31 @@
class jqueryui extends rcube_plugin
{
public $noajax = true;
public $version = '1.10.4';
private static $features = array();
private static $ui_theme;
public function init()
{
$version = '1.9.2';
$rcmail = rcmail::get_instance();
$this->load_config();
// include UI scripts
$this->include_script("js/jquery-ui-$version.custom.min.js");
$this->include_script("js/jquery-ui-$this->version.custom.min.js");
// include UI stylesheet
$skin = $rcmail->config->get('skin');
$ui_map = $rcmail->config->get('jquery_ui_skin_map', array());
$ui_theme = $ui_map[$skin] ? $ui_map[$skin] : $skin;
$ui_theme = $ui_map[$skin] ?: $skin;
self::$ui_theme = $ui_theme;
if (file_exists($this->home . "/themes/$ui_theme/jquery-ui-$version.custom.css")) {
$this->include_stylesheet("themes/$ui_theme/jquery-ui-$version.custom.css");
if (file_exists($this->home . "/themes/$ui_theme/jquery-ui-$this->version.custom.css")) {
$this->include_stylesheet("themes/$ui_theme/jquery-ui-$this->version.custom.css");
}
else {
$this->include_stylesheet("themes/larry/jquery-ui-$version.custom.css");
$this->include_stylesheet("themes/larry/jquery-ui-$this->version.custom.css");
}
if ($ui_theme == 'larry') {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,214 @@
/*! jQuery UI Accessible Datepicker extension
* (to be appended to jquery-ui-*.custom.min.js)
*
* @licstart The following is the entire license notice for the
* JavaScript code in this page.
*
* Copyright 2014 Kolab Systems AG
*
* The JavaScript code in this page is free software: you can
* redistribute it and/or modify it under the terms of the GNU
* General Public License (GNU GPL) as published by the Free Software
* Foundation, either version 3 of the License, or (at your option)
* any later version. The code is distributed WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
*
* As additional permission under GNU GPL version 3 section 7, you
* may distribute non-source (e.g., minimized or compacted) forms of
* that code without the copy of the GNU GPL normally required by
* section 4, provided you include this license notice and a URL
* through which recipients can access the Corresponding Source.
*
* @licend The above is the entire license notice
* for the JavaScript code in this page.
*/
(function($, undefined) {
// references to super class methods
var __newInst = $.datepicker._newInst;
var __updateDatepicker = $.datepicker._updateDatepicker;
var __connectDatepicker = $.datepicker._connectDatepicker;
var __showDatepicker = $.datepicker._showDatepicker;
var __hideDatepicker = $.datepicker._hideDatepicker;
// "extend" singleton instance methods
$.extend($.datepicker, {
/* Create a new instance object */
_newInst: function(target, inline) {
var that = this, inst = __newInst.call(this, target, inline);
if (inst.inline) {
// attach keyboard event handler
inst.dpDiv.on('keydown.datepicker', '.ui-datepicker-calendar', function(event) {
// we're only interested navigation keys
if ($.inArray(event.keyCode, [ 13, 33, 34, 35, 36, 37, 38, 39, 40]) == -1) {
return;
}
event.stopPropagation();
event.preventDefault();
inst._hasfocus = true;
var activeCell;
switch (event.keyCode) {
case $.ui.keyCode.ENTER:
if ((activeCell = $('.' + that._dayOverClass, inst.dpDiv).get(0) || $('.' + that._currentClass, inst.dpDiv).get(0))) {
that._selectDay(inst.input, inst.selectedMonth, inst.selectedYear, activeCell);
}
break;
case $.ui.keyCode.PAGE_UP:
that._adjustDate(inst.input, -that._get(inst, 'stepMonths'), 'M');
break;
case $.ui.keyCode.PAGE_DOWN:
that._adjustDate(inst.input, that._get(inst, 'stepMonths'), 'M');
break;
default:
return that._cursorKeydown(event, inst);
}
})
.attr('role', 'region')
.attr('aria-labelledby', inst.id + '-dp-title');
}
else {
var widgetId = inst.dpDiv.attr('id') || inst.id + '-dp-widget';
inst.dpDiv.attr('id', widgetId)
.attr('aria-hidden', 'true')
.attr('aria-labelledby', inst.id + '-dp-title');
$(inst.input).attr('aria-haspopup', 'true')
.attr('aria-expanded', 'false')
.attr('aria-owns', widgetId);
}
return inst;
},
/* Attach the date picker to an input field */
_connectDatepicker: function(target, inst) {
__connectDatepicker.call(this, target, inst);
var that = this;
// register additional keyboard events to control date selection with cursor keys
$(target).unbind('keyup.datepicker-extended').bind('keyup.datepicker-extended', function(event) {
var inc = 1;
switch (event.keyCode) {
case 109:
case 189: // "minus"
inc = -1;
case 107:
case 187: // "plus"
that._adjustInstDate(inst, inc, 'D');
that._selectDate(target, that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear));
break;
case $.ui.keyCode.UP:
case $.ui.keyCode.DOWN:
// unfold datepicker if not visible
if ($.datepicker._lastInput !== target && !$.datepicker._isDisabledDatepicker(target)) {
that._showDatepicker(event);
event.stopPropagation();
event.preventDefault();
return false;
}
default:
if (!$.datepicker._isDisabledDatepicker(target) && !event.ctrlKey && !event.metaKey) {
return that._cursorKeydown(event, inst);
}
}
})
.attr('autocomplete', 'off');
},
/* Handle keyboard event on datepicker widget */
_cursorKeydown: function(event, inst) {
inst._keyEvent = true;
var isRTL = inst.dpDiv.hasClass('ui-datepicker-rtl');
switch (event.keyCode) {
case $.ui.keyCode.LEFT:
this._adjustDate(inst.input, (isRTL ? +1 : -1), 'D');
break;
case $.ui.keyCode.RIGHT:
this._adjustDate(inst.input, (isRTL ? -1 : +1), 'D');
break;
case $.ui.keyCode.UP:
this._adjustDate(inst.input, -7, 'D');
break;
case $.ui.keyCode.DOWN:
this._adjustDate(inst.input, +7, 'D');
break;
case $.ui.keyCode.HOME:
// TODO: jump to first of month
break;
case $.ui.keyCode.END:
// TODO: jump to end of month
break;
}
return true;
},
/* Pop-up the date picker for a given input field */
_showDatepicker: function(input) {
input = input.target || input;
__showDatepicker.call(this, input);
var inst = $.datepicker._getInst(input);
if (inst && $.datepicker._datepickerShowing) {
inst.dpDiv.attr('aria-hidden', 'false');
$(input).attr('aria-expanded', 'true');
}
},
/* Hide the date picker from view */
_hideDatepicker: function(input) {
__hideDatepicker.call(this, input);
var inst = this._curInst;;
if (inst && !$.datepicker._datepickerShowing) {
inst.dpDiv.attr('aria-hidden', 'true');
$(inst.input).attr('aria-expanded', 'false');
}
},
/* Render the date picker content */
_updateDatepicker: function(inst) {
__updateDatepicker.call(this, inst);
var activeCell = $('.' + this._dayOverClass, inst.dpDiv).get(0) || $('.' + this._currentClass, inst.dpDiv).get(0);
if (activeCell) {
activeCell = $(activeCell);
activeCell.attr('id', inst.id + '-day-' + activeCell.text());
}
// allow focus on main container only
inst.dpDiv.find('.ui-datepicker-calendar')
.attr('tabindex', inst.inline ? '0' : '-1')
.attr('role', 'grid')
.attr('aria-readonly', 'true')
.attr('aria-activedescendant', activeCell ? activeCell.attr('id') : '')
.find('td').attr('role', 'gridcell').attr('aria-selected', 'false')
.find('a').attr('tabindex', '-1');
$('.ui-datepicker-current-day', inst.dpDiv).attr('aria-selected', 'true');
inst.dpDiv.find('.ui-datepicker-title')
.attr('id', inst.id + '-dp-title')
// set focus again after update
if (inst._hasfocus) {
inst.dpDiv.find('.ui-datepicker-calendar').focus();
inst._hasfocus = false;
}
}
});
}(jQuery));

@ -1,176 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" packagerversion="1.9.0" version="2.0" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
http://pear.php.net/dtd/tasks-1.0.xsd
http://pear.php.net/dtd/package-2.0
http://pear.php.net/dtd/package-2.0.xsd">
<name>jqueryui</name>
<channel>pear.roundcube.net</channel>
<summary>jQuery-UI library</summary>
<description>
Plugin adds the complete jQuery-UI library including the smoothness
theme to Roundcube. This allows other plugins to use jQuery-UI without
having to load their own version. The benefit of using one central jQuery-UI
is that we wont run into problems of conflicting jQuery libraries being
loaded. All plugins that want to use jQuery-UI should use this plugin as
a requirement.
</description>
<lead>
<name>Thomas Bruederli</name>
<user>thomascube</user>
<email>roundcube@gmail.com</email>
<active>yes</active>
</lead>
<date>2014-04-07</date>
<version>
<release>1.9.2</release>
<api>1.9</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://www.gnu.org/licenses/gpl.html">GNU GPLv3+</license>
<notes>-</notes>
<contents>
<dir baseinstalldir="/" name="/">
<file name="jqueryui.php" role="php">
<tasks:replace from="@name@" to="name" type="package-info"/>
<tasks:replace from="@package_version@" to="version" type="package-info"/>
</file>
<file name="README" role="data"></file>
<file name="config.inc.php.dist" role="data"></file>
<file name="js/jquery-ui-1.9.1.custom.min.js" role="data"></file>
<file name="js/jquery.miniColors.min.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-af.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-ar-DZ.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-ar.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-az.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-bg.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-bz.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-ca.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-cs.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-cy-GB.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-da.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-de-CH.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-de.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-el.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-en-AU.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-en-GB.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-en-NZ.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-eo.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-es.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-et.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-eu.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-fa.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-fi.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-fo.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-fr-CH.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-fr.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-gl.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-he.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-hi.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-hr.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-hu.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-hy.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-id.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-is.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-it.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-ja.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-ka.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-kk.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-km.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-ko.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-kz.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-lt.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-lv.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-mk.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-ml.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-ms.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-nl-BE.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-nl.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-no.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-pl.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-pt-BR.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-pt.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-rm.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-ro.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-ru.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-sk.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-sl.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-sq.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-sr.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-sr-SR.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-sv.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-ta.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-th.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-tj.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-tr.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-uk.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-vi.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-zh-CN.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-zh-HK.js" role="data"></file>
<file name="js/i18n/jquery.ui.datepicker-zh-TW.js" role="data"></file>
<file name="themes/classic/jquery-ui-1.9.1.custom.css" role="data"></file>
<file name="themes/classic/roundcube-custom.diff" role="data"></file>
<file name="themes/classic/images/buttongradient.png" role="data"></file>
<file name="themes/classic/images/ui-bg_flat_90_cc3333_40x100.png" role="data"></file>
<file name="themes/classic/images/ui-bg_highlight-hard_90_f4f4f4_1x100.png" role="data"></file>
<file name="themes/classic/images/ui-icons_cc3333_256x240.png" role="data"></file>
<file name="themes/classic/images/listheader.png" role="data"></file>
<file name="themes/classic/images/ui-bg_glass_95_fef1ec_1x400.png" role="data"></file>
<file name="themes/classic/images/ui-icons_000000_256x240.png" role="data"></file>
<file name="themes/classic/images/ui-icons_dddddd_256x240.png" role="data"></file>
<file name="themes/classic/images/ui-bg_flat_0_aaaaaa_40x100.png" role="data"></file>
<file name="themes/classic/images/ui-bg_highlight-hard_90_a3a3a3_1x100.png" role="data"></file>
<file name="themes/classic/images/ui-icons_333333_256x240.png" role="data"></file>
<file name="themes/classic/images/ui-bg_flat_75_ffffff_40x100.png" role="data"></file>
<file name="themes/classic/images/ui-bg_highlight-hard_90_e6e6e7_1x100.png" role="data"></file>
<file name="themes/classic/images/ui-icons_666666_256x240.png" role="data"></file>
<file name="themes/larry/jquery.miniColors.css" role="data"></file>
<file name="themes/larry/images/minicolors-all.png" role="data"></file>
<file name="themes/larry/images/minicolors-handles.gif" role="data"></file>
<file name="themes/larry/images/ui-bg_highlight-hard_55_b0ccd7_1x100.png" role="data"></file>
<file name="themes/larry/images/ui-bg_highlight-hard_65_ffffff_1x100.png" role="data"></file>
<file name="themes/larry/images/ui-bg_highlight-hard_75_eaeaea_1x100.png" role="data"></file>
<file name="themes/larry/images/ui-bg_highlight-hard_75_f8f8f8_1x100.png" role="data"></file>
<file name="themes/larry/images/ui-bg_highlight-soft_75_fafafa_1x100.png" role="data"></file>
<file name="themes/larry/images/ui-bg_highlight-soft_90_e4e4e4_1x100.png" role="data"></file>
<file name="themes/larry/images/ui-dialog-close.png" role="data"></file>
<file name="themes/larry/images/ui-icons_004458_256x240.png" role="data"></file>
<file name="themes/larry/images/ui-icons_d7211e_256x240.png" role="data"></file>
<file name="themes/larry/images/ui-icons-datepicker.png" role="data"></file>
<file name="themes/redmond/jquery-ui-1.9.1.custom.css" role="data"></file>
<file name="themes/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png" role="data"></file>
<file name="themes/redmond/images/ui-bg_glass_95_fef1ec_1x400.png" role="data"></file>
<file name="themes/redmond/images/ui-icons_217bc0_256x240.png" role="data"></file>
<file name="themes/redmond/images/ui-icons_cd0a0a_256x240.png" role="data"></file>
<file name="themes/redmond/images/ui-bg_flat_55_fbec88_40x100.png" role="data"></file>
<file name="themes/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png" role="data"></file>
<file name="themes/redmond/images/ui-icons_2e83ff_256x240.png" role="data"></file>
<file name="themes/redmond/images/ui-icons_d8e7f3_256x240.png" role="data"></file>
<file name="themes/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png" role="data"></file>
<file name="themes/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png" role="data"></file>
<file name="themes/redmond/images/ui-icons_469bdd_256x240.png" role="data"></file>
<file name="themes/redmond/images/ui-icons_f9bd01_256x240.png" role="data"></file>
<file name="themes/redmond/images/ui-bg_glass_85_dfeffc_1x400.png" role="data"></file>
<file name="themes/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png" role="data"></file>
<file name="themes/redmond/images/ui-icons_6da8d5_256x240.png" role="data"></file>
</dir>
<!-- / -->
</contents>
<dependencies>
<required>
<php>
<min>5.2.1</min>
</php>
<pearinstaller>
<min>1.7.0</min>
</pearinstaller>
</required>
</dependencies>
<phprelease/>
</package>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

File diff suppressed because it is too large Load Diff

@ -1,581 +0,0 @@
/*
* jQuery UI CSS Framework 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
*/
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
.ui-helper-clearfix:after { clear: both; }
.ui-helper-clearfix { zoom: 1; }
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
/*
* jQuery UI CSS Framework 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
*
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ctl=themeroller&ctl=themeroller&ffDefault=Lucida%20Grande,%20Verdana,%20Arial,%20Helvetica,%20sans-serif&fwDefault=normal&fsDefault=1em&cornerRadius=0&bgColorHeader=f4f4f4&bgTextureHeader=04_highlight_hard.png&bgImgOpacityHeader=90&borderColorHeader=999999&fcHeader=333333&iconColorHeader=333333&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=000000&iconColorContent=000000&bgColorDefault=e6e6e7&bgTextureDefault=04_highlight_hard.png&bgImgOpacityDefault=90&borderColorDefault=aaaaaa&fcDefault=000000&iconColorDefault=666666&bgColorHover=e6e6e7&bgTextureHover=04_highlight_hard.png&bgImgOpacityHover=90&borderColorHover=999999&fcHover=000000&iconColorHover=333333&bgColorActive=a3a3a3&bgTextureActive=04_highlight_hard.png&bgImgOpacityActive=90&borderColorActive=a4a4a4&fcActive=000000&iconColorActive=333333&bgColorHighlight=cc3333&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=90&borderColorHighlight=cc3333&fcHighlight=ffffff&iconColorHighlight=dddddd&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cc3333&fcError=cc3333&iconColorError=cc3333&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=35&thicknessShadow=6px&offsetTopShadow=-6px&offsetLeftShadow=-6px&cornerRadiusShadow=6px
*/
/* Component containers
----------------------------------*/
.ui-widget { font-family: Lucida Grande, Verdana, Arial, Helvetica, sans-serif; font-size: 1em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Verdana, Arial, Helvetica, sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #000000; }
.ui-widget-content a { color: #000000; }
.ui-widget-header { border: 1px solid #999999; border-width: 0 0 1px 0; background: #f4f4f4 url(images/listheader.png) 50% 50% repeat; color: #333333; font-weight: bold; margin: -0.2em -0.2em 0 -0.2em; }
.ui-widget-header a { color: #333333; }
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #aaaaaa; background: #e6e6e7 url(images/ui-bg_highlight-hard_90_e6e6e7_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #000000; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #000000; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #e6e6e7 url(images/ui-bg_highlight-hard_90_e6e6e7_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #000000; }
.ui-state-hover a, .ui-state-hover a:hover { color: #000000; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #a4a4a4; background: #a3a3a3 url(images/ui-bg_highlight-hard_90_a3a3a3_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #000000; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #000000; text-decoration: none; }
.ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #c33; color: #a00; }
.ui-tabs-nav .ui-state-focus { border: 1px solid #a4a4a4; color: #000000; }
.ui-widget :active { outline: none; }
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #cc3333; background: #cc3333 url(images/ui-bg_flat_90_cc3333_40x100.png) 50% 50% repeat-x; color: #ffffff; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #ffffff; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cc3333; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cc3333; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cc3333; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cc3333; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .6; filter:Alpha(Opacity=60); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_000000_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_000000_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_333333_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_666666_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_333333_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_333333_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_dddddd_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cc3333_256x240.png); }
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 0; -webkit-border-top-left-radius: 0; -khtml-border-top-left-radius: 0; border-top-left-radius: 0; }
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; -khtml-border-top-right-radius: 0; border-top-right-radius: 0; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; -khtml-border-bottom-left-radius: 0; border-bottom-left-radius: 0; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; -khtml-border-bottom-right-radius: 0; border-bottom-right-radius: 0; }
/* Overlays */
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
.ui-widget-shadow { margin: -6px 0 0 -6px; padding: 6px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .35;filter:Alpha(Opacity=35); -moz-border-radius: 6px; -khtml-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; }/*
* jQuery UI Resizable 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Resizable#theming
*/
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
* jQuery UI Selectable 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Selectable#theming
*/
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
/*
* jQuery UI Accordion 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Accordion#theming
*/
/* IE/Win - Fix animation bug - #4615 */
.ui-accordion { width: 100%; }
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
.ui-accordion .ui-accordion-li-fix { display: inline; }
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
.ui-accordion .ui-accordion-content-active { display: block; }
/*
* jQuery UI Autocomplete 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Autocomplete#theming
*/
.ui-autocomplete { position: absolute; cursor: default; }
/* workarounds */
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
#ui-active-menuitem { background:#c33; border-color:#a22; color:#fff; }
/*
* jQuery UI Menu 1.8.18
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Menu#theming
*/
.ui-menu {
list-style:none;
padding: 2px;
margin: 0;
display:block;
float: left;
box-shadow: 1px 1px 18px #999;
-moz-box-shadow: 1px 1px 12px #999;
-webkit-box-shadow: #999 1px 1px 12px;
}
.ui-menu .ui-menu {
margin-top: -3px;
}
.ui-menu .ui-menu-item {
margin:0;
padding: 0;
zoom: 1;
float: left;
clear: left;
width: 100%;
}
.ui-menu .ui-menu-item a {
text-decoration:none;
display:block;
padding:.2em .4em;
line-height:1.5;
zoom:1;
}
.ui-menu .ui-menu-item a.ui-state-focus,
.ui-menu .ui-menu-item a.ui-state-active {
font-weight: normal;
margin: -1px;
}
/*
* jQuery UI Button 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Button#theming
*/
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: hidden; *overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; }
button.ui-button-icons-only { width: 3.7em; }
button.ui-button-text-only, a.ui-button-text-only { background-image: url(images/buttongradient.png) !important; }
/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4; }
.ui-button-text-only .ui-button-text { padding: .3em 1em; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }
/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
.ui-button.mainaction { font-weight: bold; border: 1px solid #999; }
/*
* jQuery UI Dialog 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Dialog#theming
*/
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; box-shadow: 1px 1px 18px #999; -moz-box-shadow: 1px 1px 12px #999; -webkit-box-shadow: #999 1px 1px 12px; }
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: default; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/*
* jQuery UI Slider 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Slider#theming
*/
.ui-slider { position: relative; text-align: left; }
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
.ui-slider-horizontal { height: .8em; }
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
.ui-slider-vertical { width: .8em; height: 100px; }
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
* jQuery UI Tabs 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Tabs#theming
*/
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 0 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; -moz-border-radius-topleft: 2px; -webkit-border-top-left-radius: 2px; border-top-left-radius: 2px; -moz-border-radius-topright: 2px; -webkit-border-top-right-radius: 2px; border-top-right-radius: 2px; }
.ui-tabs .ui-tabs-nav li a { float: left; padding: .3em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }
.ui-dialog .ui-tabs .ui-tabs-nav li.ui-tabs-selected { background:#fff; }
/*
* jQuery UI Datepicker 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Datepicker#theming
*/
.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; box-shadow: 1px 1px 18px #999; -moz-box-shadow: 1px 1px 12px #999; -webkit-box-shadow: #999 1px 1px 12px; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
.ui-datepicker td.ui-datepicker-current-day .ui-state-active { background:#c33; border-color:#a22; color:#fff; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: default; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
/* RTL support */
.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
display: none; /*sorry for IE5*/
display/**/: block; /*sorry for IE5*/
position: absolute; /*must have*/
z-index: -1; /*must have*/
filter: mask(); /*must have*/
top: -4px; /*must have*/
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
}/*
* jQuery UI Progressbar 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Progressbar#theming
*/
.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }

@ -1,118 +1,174 @@
--- jquery-ui-1.8.18.custom.css.orig 2012-03-02 08:13:36.000000000 +0100
+++ jquery-ui-1.8.18.custom.css 2012-03-02 17:22:10.000000000 +0100
@@ -58,7 +58,7 @@
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Verdana, Arial, Helvetica, sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #000000; }
.ui-widget-content a { color: #000000; }
-.ui-widget-header { border: 1px solid #999999; background: #f4f4f4 url(images/ui-bg_highlight-hard_90_f4f4f4_1x100.png) 50% 50% repeat-x; color: #333333; font-weight: bold; }
+.ui-widget-header { border: 1px solid #999999; border-width: 0 0 1px 0; background: #f4f4f4 url(images/listheader.png) 50% 50% repeat; color: #333333; font-weight: bold; margin: -0.2em -0.2em 0 -0.2em; }
.ui-widget-header a { color: #333333; }
/* Interaction states
@@ -69,6 +69,8 @@
.ui-state-hover a, .ui-state-hover a:hover { color: #000000; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #a4a4a4; background: #a3a3a3 url(images/ui-bg_highlight-hard_90_a3a3a3_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #000000; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #000000; text-decoration: none; }
+.ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #c33; color: #a00; }
+.ui-tabs-nav .ui-state-focus { border: 1px solid #a4a4a4; color: #000000; }
.ui-widget :active { outline: none; }
/* Interaction Cues
@@ -79,7 +81,7 @@
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cc3333; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cc3333; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .6; filter:Alpha(Opacity=60); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
/* Icons
@@ -346,6 +348,8 @@
/* workarounds */
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
--- jquery-ui-1.10.4.custom.orig.css 2014-06-17 00:44:04.000000000 +0200
+++ jquery-ui-1.10.4.custom.css 2014-07-31 08:55:11.000000000 +0200
@@ -226,13 +226,18 @@
width: 3.7em;
}
+#ui-active-menuitem { background:#c33; border-color:#a22; color:#fff; }
+button.ui-button-text-only,
+a.ui-button-text-only {
+ background-image: url("images/buttongradient.png") !important;
+}
+
/*
* jQuery UI Menu 1.8.18
*
@@ -361,6 +365,9 @@
margin: 0;
display:block;
float: left;
/* button text element */
.ui-button .ui-button-text {
display: block;
line-height: normal;
}
.ui-button-text-only .ui-button-text {
- padding: .4em 1em;
+ padding: .3em 1em;
}
.ui-button-icon-only .ui-button-text,
.ui-button-icons-only .ui-button-text {
@@ -301,6 +306,9 @@
width: 17em;
padding: .2em .2em 0;
display: none;
+ box-shadow: 1px 1px 18px #999;
+ -moz-box-shadow: 1px 1px 12px #999;
+ -webkit-box-shadow: #999 1px 1px 12px;
}
.ui-datepicker .ui-datepicker-header {
position: relative;
@@ -374,6 +382,11 @@
text-align: right;
text-decoration: none;
}
+.ui-datepicker td.ui-datepicker-current-day .ui-state-active {
+ background:#c33;
+ border-color:#a22;
+ color:#fff;
+}
.ui-datepicker .ui-datepicker-buttonpane {
background-image: none;
margin: .7em 0 0 0;
@@ -385,7 +398,7 @@
.ui-datepicker .ui-datepicker-buttonpane button {
float: right;
margin: .5em .2em .4em;
- cursor: pointer;
+ cursor: default;
padding: .2em .6em .3em .6em;
width: auto;
overflow: visible;
@@ -469,6 +482,9 @@
left: 0;
padding: .2em;
outline: 0;
+ -webkit-box-shadow: #999 1px 1px 12px;
+ -moz-box-shadow: 1px 1px 12px #999;
+ box-shadow: 1px 1px 18px #999;
}
.ui-dialog .ui-dialog-titlebar {
padding: .4em 1em;
@@ -491,6 +507,9 @@
padding: 1px;
height: 20px;
}
+.no-close .ui-dialog-titlebar-close {
+ display: none !important;
+}
.ui-dialog .ui-dialog-content {
position: relative;
border: 0;
@@ -510,7 +529,7 @@
}
.ui-dialog .ui-dialog-buttonpane button {
margin: .5em .4em .5em 0;
- cursor: pointer;
+ cursor: default;
}
.ui-dialog .ui-resizable-se {
width: 12px;
@@ -528,6 +547,9 @@
margin: 0;
display: block;
outline: none;
+ -webkit-box-shadow: #999 1px 1px 12px;
+ -moz-box-shadow: 1px 1px 12px #999;
+ box-shadow: 1px 1px 18px #999;
}
.ui-menu .ui-menu {
margin-top: -3px;
@@ -399,10 +406,11 @@
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; }
button.ui-button-icons-only { width: 3.7em; }
+button.ui-button-text-only, a.ui-button-text-only { background-image: url(images/buttongradient.png) !important; }
/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4; }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-text-only .ui-button-text { padding: .3em 1em; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
@@ -432,7 +440,7 @@
*
* http://docs.jquery.com/UI/Dialog#theming
*/
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; box-shadow: 1px 1px 18px #999; -moz-box-shadow: 1px 1px 12px #999; -webkit-box-shadow: #999 1px 1px 12px; }
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
@@ -441,7 +449,7 @@
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: default; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/*
@@ -478,13 +486,16 @@
*/
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 0 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; -moz-border-radius-topleft: 2px; -webkit-border-top-left-radius: 2px; border-top-left-radius: 2px; -moz-border-radius-topright: 2px; -webkit-border-top-right-radius: 2px; border-top-right-radius: 2px; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .3em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }
+
+.ui-dialog .ui-tabs .ui-tabs-nav li.ui-tabs-selected { background:#fff; }
+
/*
* jQuery UI Datepicker 1.8.18
*
@@ -494,7 +505,7 @@
*
* http://docs.jquery.com/UI/Datepicker#theming
*/
-.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; box-shadow: 1px 1px 18px #999; -moz-box-shadow: 1px 1px 12px #999; -webkit-box-shadow: #999 1px 1px 12px; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
@@ -512,8 +523,9 @@
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker td.ui-datepicker-current-day .ui-state-active { background:#c33; border-color:#a22; color:#fff; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: default; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
@@ -559,6 +581,9 @@
.ui-menu .ui-menu-item a.ui-state-active {
font-weight: normal;
margin: -1px;
+ background: #c33;
+ border-color: #a22;
+ color: #fff;
}
/* with multiple calendars */
.ui-menu .ui-state-disabled {
@@ -740,20 +765,29 @@
float: left;
position: relative;
top: 0;
- margin: 1px .2em 0 0;
+ margin: 0;
border-bottom-width: 0;
padding: 0;
white-space: nowrap;
+ -webkit-border-top-left-radius: 2px;
+ -moz-border-radius-topleft: 2px;
+ border-top-left-radius: 2px;
+ -webkit-border-top-right-radius: 2px;
+ -moz-border-radius-topright: 2px;
+ border-top-right-radius: 2px;
}
.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
float: left;
- padding: .5em 1em;
+ padding: .3em 1em;
text-decoration: none;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active {
margin-bottom: -1px;
padding-bottom: 1px;
}
+.ui-dialog .ui-tabs-nav li.ui-tabs-active {
+ background: #fff;
+}
.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
@@ -806,9 +840,11 @@
}
.ui-widget-header {
border: 1px solid #999999;
- background: #f4f4f4 url("images/ui-bg_highlight-hard_90_f4f4f4_1x100.png") 50% 50% repeat-x;
+ border-width: 0 0 1px 0;
+ background: #f4f4f4 url("images/listheader.png") 50% 50% repeat;
color: #333333;
font-weight: bold;
+ margin: -0.2em -0.2em 0 -0.2em;
}
.ui-widget-header a {
color: #333333;
@@ -841,6 +877,15 @@
font-weight: normal;
color: #000000;
}
+.ui-state-focus,
+.ui-widget-content .ui-state-focus {
+ border: 1px solid #c33;
+ color: #a00;
+}
+.ui-tabs-nav .ui-state-focus {
+ border: 1px solid #a4a4a4;
+ color: #000;
+}
.ui-state-hover a,
.ui-state-hover a:hover,
.ui-state-hover a:link,
@@ -906,8 +951,8 @@
.ui-priority-secondary,
.ui-widget-content .ui-priority-secondary,
.ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter:Alpha(Opacity=70);
+ opacity: .6;
+ filter:Alpha(Opacity=60);
font-weight: normal;
}
.ui-state-disabled,

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 B

File diff suppressed because it is too large Load Diff

@ -1,740 +0,0 @@
/*
* jQuery UI CSS Framework 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
*/
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
.ui-helper-clearfix:after { clear: both; }
.ui-helper-clearfix { zoom: 1; }
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
/*
* jQuery UI CSS Framework 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
*
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,Verdana,Arial,sans-serif&fwDefault=bold&fsDefault=1.0em&cornerRadius=5px&bgColorHeader=e4e4e4&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=90&borderColorHeader=fafafa&fcHeader=666666&iconColorHeader=004458&bgColorContent=fafafa&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=33333&iconColorContent=004458&bgColorDefault=f8f8f8&bgTextureDefault=04_highlight_hard.png&bgImgOpacityDefault=75&borderColorDefault=cccccc&fcDefault=666666&iconColorDefault=004458&bgColorHover=eaeaea&bgTextureHover=04_highlight_hard.png&bgImgOpacityHover=75&borderColorHover=aaaaaa&fcHover=333333&iconColorHover=004458&bgColorActive=ffffff&bgTextureActive=04_highlight_hard.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=333333&iconColorActive=004458&bgColorHighlight=b0ccd7&bgTextureHighlight=04_highlight_hard.png&bgImgOpacityHighlight=55&borderColorHighlight=a3a3a3&fcHighlight=004458&iconColorHighlight=004458&bgColorError=fef1ec&bgTextureError=01_flat.png&bgImgOpacityError=95&borderColorError=d7211e&fcError=d64040&iconColorError=d7211e&bgColorOverlay=333333&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=50&bgColorShadow=666666&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=20&thicknessShadow=6px&offsetTopShadow=-6px&offsetLeftShadow=-6px&cornerRadiusShadow=8px
*/
/* Component containers
----------------------------------*/
.ui-widget { font-family: Lucida Grande,Verdana,Arial,sans-serif; font-size: 1.0em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande,Verdana,Arial,sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #aaa; background: #fafafa url(images/ui-bg_highlight-soft_75_fafafa_1x100.png) 50% top repeat-x; color: #333; }
/*.ui-widget-content a { color: #333; }*/
.ui-widget-header { border: 2px solid #fafafa; background: #e4e4e4 url(images/ui-bg_highlight-soft_90_e4e4e4_1x100.png) 50% 50% repeat-x; color: #666666; font-weight: bold; }
.ui-widget-header a { color: #aaaaaa; }
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f8f8f8 url(images/ui-bg_highlight-hard_75_f8f8f8_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #666666; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #666666; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #aaaaaa; background: #eaeaea url(images/ui-bg_highlight-hard_75_eaeaea_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #333333; }
.ui-state-hover a, .ui-state-hover a:hover { color: #333333; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_highlight-hard_65_ffffff_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #333333; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #333333; text-decoration: none; }
.ui-widget :active { outline: none; }
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #a3a3a3; background: #b0ccd7 url(images/ui-bg_highlight-hard_55_b0ccd7_1x100.png) 50% top repeat-x; color: #004458; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #004458; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #d7211e; background: #fef1ec; color: #d64040; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #d64040; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #d64040; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_004458_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_004458_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_004458_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_004458_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_004458_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_004458_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_004458_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_d7211e_256x240.png); }
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -khtml-border-top-left-radius: 5px; border-top-left-radius: 5px; }
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; -khtml-border-top-right-radius: 5px; border-top-right-radius: 5px; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; -khtml-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; -khtml-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
/* Overlays */
.ui-widget-overlay { background: #333333; opacity: .50;filter:Alpha(Opacity=50); }
.ui-widget-shadow { visibility: hidden; }/*
* jQuery UI Resizable 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Resizable#theming
*/
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99998; display: block; }
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
* jQuery UI Selectable 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Selectable#theming
*/
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
/*
* jQuery UI Accordion 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Accordion#theming
*/
/* IE/Win - Fix animation bug - #4615 */
.ui-accordion { width: 100%; }
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
.ui-accordion .ui-accordion-li-fix { display: inline; }
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
.ui-accordion .ui-accordion-content-active { display: block; }
/*
* jQuery UI Autocomplete 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Autocomplete#theming
*/
.ui-autocomplete { position: absolute; cursor: default; }
/* workarounds */
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
/*
* jQuery UI Menu 1.8.18
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Menu#theming
*/
.ui-menu {
list-style:none;
padding: 0;
margin: 0;
display:block;
float: left;
background: #444;
border: 1px solid #999;
border-radius: 4px;
box-shadow: 0 2px 6px 0 #333;
-moz-box-shadow: 0 2px 6px 0 #333;
-webkit-box-shadow: 0 2px 6px 0 #333;
-o-box-shadow: 0 2px 6px 0 #333;
}
.ui-menu .ui-menu {
margin-top: -3px;
}
.ui-menu .ui-menu-item {
margin:0;
padding: 0;
zoom: 1;
float: left;
clear: left;
width: 100%;
color: #fff;
white-space: nowrap;
border-top: 1px solid #5a5a5a;
border-bottom: 1px solid #333;
}
.ui-menu .ui-menu-item:first-child {
border-top: 0;
}
.ui-menu .ui-menu-item:last-child {
border-bottom: 0;
}
.ui-menu .ui-menu-item a {
text-decoration:none;
display:block;
padding:.2em .4em;
line-height:1.5;
zoom:1;
border:0;
margin:0;
border-radius:0;
color: #fff;
text-shadow: 0px 1px 1px #333;
padding: 6px 10px 4px 10px;
}
.ui-menu .ui-menu-item a.ui-state-focus,
.ui-menu .ui-menu-item a.ui-state-active {
font-weight: normal;
background: #00aad6;
background: -moz-linear-gradient(top, #00aad6 0%, #008fc9 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00aad6), color-stop(100%,#008fc9));
background: -o-linear-gradient(top, #00aad6 0%, #008fc9 100%);
background: -ms-linear-gradient(top, #00aad6 0%, #008fc9 100%);
background: linear-gradient(top, #00aad6 0%, #008fc9 100%);
}
/*
* jQuery UI Button 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Button#theming
*/
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; *overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; }
button.ui-button-icons-only { width: 3.7em; }
/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4; }
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }
/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
/* Roundcube button styling */
.ui-button.ui-state-default {
display: inline-block;
margin: 0 2px;
padding: 1px 2px;
text-shadow: 0px 1px 1px #fff;
border: 1px solid #c6c6c6;
border-radius: 4px;
background: #f7f7f7;
background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#e6e6e6));
background: -o-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
background: linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e6e6e6', GradientType=0);
box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-o-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-webkit-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-moz-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
text-decoration: none;
outline: none;
}
.ui-button.mainaction {
color: #ededed;
text-shadow: 0px 1px 1px #333;
border-color: #1f262c;
background: #505050;
background: -moz-linear-gradient(top, #505050 0%, #2a2e31 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#505050), color-stop(100%,#2a2e31));
background: -o-linear-gradient(top, #505050 0%, #2a2e31 100%);
background: -ms-linear-gradient(top, #505050 0%, #2a2e31 100%);
background: linear-gradient(top, #505050 0%, #2a2e31 100%);
-moz-box-shadow: inset 0 1px 0 0 #777;
-webkit-box-shadow: inset 0 1px 0 0 #777;
-o-box-shadow: inset 0 1px 0 0 #777;
box-shadow: inset 0 1px 0 0 #777;
}
.ui-button.ui-state-focus {
color: #525252;
border-color: #4fadd5;
-moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
-webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
-o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
}
.ui-button.ui-state-active {
color: #525252;
border-color: #aaa;
background: #e6e6e6;
background: -moz-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e6e6e6), color-stop(100%,#f9f9f9));
background: -o-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
background: -ms-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
background: linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e6e6e6', endColorstr='#f9f9f9', GradientType=0);
}
.ui-button.ui-state-focus.mainaction,
.ui-button.ui-state-hover.mainaction {
color: #fff;
}
.ui-button.ui-state-focus.mainaction {
border-color: #1f262c;
-moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
-webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
-o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
}
.ui-button.ui-state-active.mainaction {
color: #fff;
background: #515151;
background: -moz-linear-gradient(top, #2a2e31 0%, #505050 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2a2e31), color-stop(100%,#505050));
background: -o-linear-gradient(top, #2a2e31 0%, #505050 100%);
background: -ms-linear-gradient(top, #2a2e31 0%, #505050 100%);
background: linear-gradient(top, #2a2e31 0%, #505050 100%);
}
.ui-button[disabled],
.ui-button[disabled]:hover,
.ui-button.mainaction[disabled] {
color: #aaa !important;
}
/*
* jQuery UI Dialog 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Dialog#theming
*/
.ui-dialog { position: absolute; padding: 3px; width: 300px; background: #fff; border-radius:6px; box-shadow: 1px 1px 18px #666; -moz-box-shadow: 1px 1px 12px #666; -webkit-box-shadow: #666 1px 1px 12px; }
.ui-dialog .ui-widget-content { border: 0 }
.ui-dialog .ui-dialog-titlebar { padding: 15px 1em 8px 1em; position: relative; border: 0; border-radius: 5px 5px 0 0; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; font-size: 1.3em; text-shadow: 1px 1px 1px #fff; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: -15px; top: -15px; margin:0; width: 30px; height: 30px; z-index:99999; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 0; background: url(images/ui-dialog-close.png) 0 0 no-repeat; width: 30px; height: 30px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { border: 0; background: none; padding: 0; }
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: 1.5em 1em 0.5em 1em; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; border-color: #ddd; border-style: solid; background-image: none; margin: 0; padding: .4em 1em .5em 1em; box-shadow: inset 0 1px 0 0 #fff; -o-box-shadow: inset 0 1px 0 0 #fff; -webkit-box-shadow: inset 0 1px 0 0 #fff; -moz-box-shadow: inset 0 1px 0 0 #fff; }
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: left; }
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
.ui-dialog .uibox { background-color: #fbfbfb; -moz-box-shadow: 0 0 1px #aaa; -webkit-box-shadow: 0 0 1px #aaa; box-shadow: 0 0 1px #aaa; }
.ui-dialog .uibox ul.proplist li, .ui-dialog .uibox table.propform td { border-bottom-color: #fbfbfb; }
.ui-dialog .listbox { background: #d9ecf4; }
/*
* jQuery UI Slider 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Slider#theming
*/
.ui-slider { position: relative; text-align: left; }
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; outline:none }
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0;
border-radius: 5px;
background: #019bc6;
background: -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
background: -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background: -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background: linear-gradient(top, #019bc6 0%, #017cb4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#019bc6', endColorstr='#017cb4', GradientType=0);
};
.ui-slider-horizontal { height: .8em; }
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
.ui-slider-vertical { width: .8em; height: 100px; }
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }
/*
* jQuery UI Tabs 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Tabs#theming
*/
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: 0; border: 0; background: transparent; height: 44px; }
.ui-tabs .ui-tabs-nav li { list-style: none; display: inline; border: 0; border-radius: 0; margin: 0; border-bottom: 0 !important; padding: 15px 1px 15px 0; white-space: nowrap; background: #f8f8f8; background: -moz-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(50%,#d3d3d3), color-stop(100%,#f8f8f8)); background: -webkit-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%); background: -o-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%); background: -ms-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%); background: linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#d3d3d3', GradientType=0); }
.ui-tabs .ui-tabs-nav li a { display: inline-block; padding: 15px; text-decoration: none; font-size: 12px; color: #999; background: #fafafa; border-right: 1px solid #fafafa; }
.ui-dialog-content .tabsbar .tablink a { background: #fafafa; }
.ui-tabs .ui-tabs-nav li.ui-tabs-active { }
.ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-dialog-content .tabsbar .tablink.selected a { outline:none; color: #004458; background: #efefef; background: -moz-linear-gradient(top, #fafafa 40%, #e4e4e4 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(40%,#fff), color-stop(100%,#e4e4e4)); background: -o-linear-gradient(top, #fafafa 40%, #e4e4e4 100%); background: -ms-linear-gradient(top, #fafafa 40%, #e4e4e4 100%); background: linear-gradient(top, #fafafa 40%, #e4e4e4 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa', endColorstr='#e4e4e4', GradientType=0); }
.ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li:last-child { /* background: none; */ }
.ui-tabs .ui-tabs-nav li:last-child a { border: 0; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 0.5em 1em; margin-top: 0.2em; background: #efefef; }
.ui-tabs .ui-tabs-hide { display: none !important; }
/*
* jQuery UI Datepicker 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Datepicker#theming
*/
.ui-datepicker { min-width: 18em; padding: 0; display: none; border: 0; border-radius: 3px; box-shadow: 1px 1px 16px #666; -moz-box-shadow: 1px 1px 10px #666; -webkit-box-shadow: #666 1px 1px 10px; }
.ui-datepicker .ui-datepicker-header { position:relative; padding: .3em 0; border-radius: 3px 3px 0 0; border: 0; background: #3a3a3a; color: #fff; text-shadow: text-shadow: 0px 1px 1px #000; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; border: 0; background: none; }
.ui-datepicker .ui-datepicker-header .ui-icon { background: url(images/ui-icons-datepicker.png) 0 0 no-repeat; }
.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-w { background-position: 0 2px; }
.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-e { background-position: -14px 2px; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 2px; border: 0; background: 0; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:2px; }
.ui-datepicker .ui-datepicker-next-hover { right:2px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year {
border: 0;
background: #3a3a3a;
outline: none;
color: #fff;
font-weight: bold;
width: auto;
margin-right: 4px;
padding-right: 4px;
}
.ui-datepicker .ui-datepicker-title select::-ms-expand { display: none; }
.ie10 .ui-datepicker .ui-datepicker-title select,
.webkit .ui-datepicker .ui-datepicker-title select,
.mozilla .ui-datepicker .ui-datepicker-title select {
background-image: url(images/ui-icons-datepicker.png);
background-position: right -18px;
background-repeat: no-repeat;
padding-right: 14px;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
.mozilla .ui-datepicker .ui-datepicker-title select {
background-position: right -17px;
text-indent: 0.01px;
text-overflow: '';
padding-right: 0;
}
.ui-datepicker table { width: 100%; border-collapse: collapse; margin:0; border-spacing: 0; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; color: #666; }
.ui-datepicker td { border: 1px solid #bbb; padding: 0; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .3em; text-align: right; text-decoration: none; border: 0; text-shadow: 0px 1px 1px #fff; }
.ui-datepicker td a.ui-state-default { border: 0px solid #fff; border-top-width: 1px; border-left-width: 1px; background: #e6e6e6; background: -moz-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e6e6e6), color-stop(100%,#d6d6d6)); background: -o-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%); background: -ms-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%); background: linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%); }
.ui-datepicker td a.ui-priority-secondary { background: #eee; }
.ui-datepicker td a.ui-state-active { color: #fff; border-color: #0286ac; text-shadow: 0px 1px 1px #00516e; background: #00acd4; background: -moz-linear-gradient(top, #00acd4 0%, #008fc7 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00acd4), color-stop(100%,#008fc7)); background: -o-linear-gradient(top, #00acd4 0%, #008fc7 100%); background: -ms-linear-gradient(top, #00acd4 0%, #008fc7 100%); background: linear-gradient(top, #00acd4 0%, #008fc7 100%); }
.ui-datepicker .ui-state-highlight { color: #0081c2; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
/* RTL support */
.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
display: none; /*sorry for IE5*/
display/**/: block; /*sorry for IE5*/
position: absolute; /*must have*/
z-index: -1; /*must have*/
filter: mask(); /*must have*/
top: -4px; /*must have*/
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
}
/*
* jQuery UI Progressbar 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Progressbar#theming
*/
.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }

@ -0,0 +1,600 @@
--- jquery-ui-1.10.4.custom.orig.css 2014-06-17 00:47:00.000000000 +0200
+++ jquery-ui-1.10.4.custom.css 2014-07-31 08:54:40.000000000 +0200
@@ -238,6 +238,8 @@
.ui-button-icons-only .ui-button-text {
padding: .4em;
text-indent: -9999999px;
+ width: 1px;
+ overflow: hidden;
}
.ui-button-text-icon-primary .ui-button-text,
.ui-button-text-icons .ui-button-text {
@@ -463,20 +465,29 @@
border-left-width: 1px;
}
.ui-dialog {
- overflow: hidden;
position: absolute;
top: 0;
left: 0;
- padding: .2em;
+ padding: 3px;
+ background: #fff;
+ border-radius: 6px !important;
+ border: 0 !important;
outline: 0;
+ -webkit-box-shadow: #666 1px 1px 12px;
+ -moz-box-shadow: 1px 1px 12px #666;
+ box-shadow: 1px 1px 18px #666;
}
.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
+ padding: 15px 1em 8px 1em;
position: relative;
+ border: 0;
+ border-radius: 5px 5px 0 0;
}
.ui-dialog .ui-dialog-title {
float: left;
- margin: .1em 0;
+ margin: .1em 16px .1em 0;
+ font-size: 1.3em;
+ text-shadow: 1px 1px 1px #fff;
white-space: nowrap;
width: 90%;
overflow: hidden;
@@ -484,50 +495,84 @@
}
.ui-dialog .ui-dialog-titlebar-close {
position: absolute;
- right: .3em;
- top: 50%;
- width: 20px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px;
+ right: -15px;
+ top: -15px;
+ width: 30px;
+ margin: 0;
+ padding: 0;
+ height: 30px;
+ z-index: 99999;
+ border-width: 0 !important;
+ background: none !important;
+ filter: none !important;
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ -o-box-shadow: none !important;
+ box-shadow: none !important;
+}
+.ui-dialog .ui-dialog-titlebar-close.ui-state-focus {
+ outline: 2px solid #4fadd5;
+}
+.ui-dialog .ui-dialog-titlebar-close .ui-icon-closethick {
+ top: 0;
+ left: 0;
+ margin: 0;
+ width: 30px;
+ height: 30px;
+ background: url("images/ui-dialog-close.png") 0 0 no-repeat;
+}
+.no-close .ui-dialog-titlebar-close {
+ display: none !important;
}
.ui-dialog .ui-dialog-content {
position: relative;
border: 0;
- padding: .5em 1em;
+ padding: 1.5em 1em 0.5em 1em;
background: none;
overflow: auto;
}
+.ui-dialog .ui-widget-content {
+ border: 0;
+}
.ui-dialog .ui-dialog-buttonpane {
text-align: left;
border-width: 1px 0 0 0;
background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em;
+ border-color: #ddd;
+ border-style: solid;
+ margin: 0;
+ padding: .3em 1em .5em .8em;
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right;
+ float: left;
}
.ui-dialog .ui-dialog-buttonpane button {
margin: .5em .4em .5em 0;
cursor: pointer;
}
.ui-dialog .ui-resizable-se {
- width: 12px;
- height: 12px;
- right: -5px;
- bottom: -5px;
- background-position: 16px 16px;
+ width: 14px;
+ height: 14px;
+ right: 3px;
+ bottom: 3px;
+ background-position: -80px -224px;
}
.ui-draggable .ui-dialog-titlebar {
cursor: move;
}
.ui-menu {
list-style: none;
- padding: 2px;
+ padding: 0;
margin: 0;
display: block;
outline: none;
+ background: #444;
+ border: 1px solid #999;
+ border-radius: 4px !important;
+ -webkit-box-shadow: 0 2px 6px 0 #333;
+ -moz-box-shadow: 0 2px 6px 0 #333;
+ -o-box-shadow: 0 2px 6px 0 #333;
+ box-shadow: 0 2px 6px 0 #333;
}
.ui-menu .ui-menu {
margin-top: -3px;
@@ -539,6 +584,16 @@
width: 100%;
/* support: IE10, see #8844 */
list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+ color: #fff;
+ white-space: nowrap;
+ border-top: 1px solid #5a5a5a;
+ border-bottom: 1px solid #333;
+}
+.ui-menu .ui-menu-item:first-child {
+ border-top: 0;
+}
+.ui-menu .ui-menu-item:last-child {
+ border-bottom: 0;
}
.ui-menu .ui-menu-divider {
margin: 5px -2px 5px -2px;
@@ -550,15 +605,26 @@
.ui-menu .ui-menu-item a {
text-decoration: none;
display: block;
- padding: 2px .4em;
+ padding: 6px 10px 4px 10px;
line-height: 1.5;
min-height: 0; /* support: IE7 */
font-weight: normal;
+ border: 0;
+ margin: 0;
+ border-radius: 0;
+ color: #fff;
+ background: #444;
+ text-shadow: 0px 1px 1px #333;
}
.ui-menu .ui-menu-item a.ui-state-focus,
.ui-menu .ui-menu-item a.ui-state-active {
font-weight: normal;
- margin: -1px;
+ background: #00aad6;
+ background: -moz-linear-gradient(top, #00aad6 0%, #008fc9 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00aad6), color-stop(100%,#008fc9));
+ background: -o-linear-gradient(top, #00aad6 0%, #008fc9 100%);
+ background: -ms-linear-gradient(top, #00aad6 0%, #008fc9 100%);
+ background: linear-gradient(top, #00aad6 0%, #008fc9 100%);
}
.ui-menu .ui-state-disabled {
@@ -626,7 +692,13 @@
font-size: .7em;
display: block;
border: 0;
- background-position: 0 0;
+ background: #019bc6;
+ background: -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
+ background: -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
+ background: -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
+ background: linear-gradient(top, #019bc6 0%, #017cb4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#019bc6', endColorstr='#017cb4', GradientType=0);
}
/* For IE8 - See #6727 */
@@ -732,23 +804,41 @@
padding: .2em;
}
.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0;
+ margin: 0; padding: 0;
+ border: 0;
+ background: transparent;
+ filter: none;
+ height: 44px;
}
.ui-tabs .ui-tabs-nav li {
list-style: none;
- float: left;
position: relative;
+ display: inline-block;
top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
+ margin: 0;
+ border: 0 !important;
+ padding: 0 1px 0 0;
white-space: nowrap;
+ background: #f8f8f8;
+ background: -moz-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(50%,#d3d3d3), color-stop(100%,#f8f8f8));
+ background: -webkit-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
+ background: -o-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
+ background: -ms-linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
+ background: linear-gradient(top, #f8f8f8 0%, #d3d3d3 50%, #f8f8f8 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#d3d3d3', GradientType=0);
+}
+.ui-tabs .ui-tabs-nav li:last-child {
+ background: none;
}
.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
- float: left;
- padding: .5em 1em;
+ display: inline-block;
+ padding: 15px;
text-decoration: none;
+ font-size: 12px;
+ color: #999;
+ background: #fafafa;
+ border-right: 1px solid #fafafa;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active {
margin-bottom: -1px;
@@ -759,14 +849,26 @@
.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
cursor: text;
}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ outline: none;
+ color: #004458;
+ background: #efefef;
+ background: -moz-linear-gradient(top, #fafafa 40%, #e4e4e4 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(40%,#fff), color-stop(100%,#e4e4e4));
+ background: -o-linear-gradient(top, #fafafa 40%, #e4e4e4 100%);
+ background: -ms-linear-gradient(top, #fafafa 40%, #e4e4e4 100%);
+ background: linear-gradient(top, #fafafa 40%, #e4e4e4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa', endColorstr='#e4e4e4', GradientType=0);
+}
.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
cursor: pointer;
}
.ui-tabs .ui-tabs-panel {
display: block;
border-width: 0;
- padding: 1em 1.4em;
- background: none;
+ padding: 0.5em 1em;
+ margin-top: 0.2em;
+ background: #efefef;
}
.ui-tooltip {
padding: 8px;
@@ -798,15 +900,21 @@
}
.ui-widget-content {
border: 1px solid #aaaaaa;
- background: #fafafa url("images/ui-bg_highlight-soft_75_fafafa_1x100.png") 50% top repeat-x;
- color: 33333;
+ background: #fafafa;
+ color: #333333;
}
.ui-widget-content a {
- color: 33333;
+ color: #0186ba;
}
.ui-widget-header {
border: 1px solid #fafafa;
- background: #e4e4e4 url("images/ui-bg_highlight-soft_90_e4e4e4_1x100.png") 50% 50% repeat-x;
+ background: #e4e4e4;
+ background: -moz-linear-gradient(top, #f2f2f2 0%, #e4e4e4 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f2f2f2), color-stop(100%,#e4e4e4));
+ background: -o-linear-gradient(top, #f2f2f2 0%, #e4e4e4 100%);
+ background: -ms-linear-gradient(top, #f2f2f2 0%, #e4e4e4 100%);
+ background: linear-gradient(top, #f2f2f2 0%, #e4e4e4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f2f2', endColorstr='#e4e4e4', GradientType=0);
color: #666666;
font-weight: bold;
}
@@ -820,7 +928,7 @@
.ui-widget-content .ui-state-default,
.ui-widget-header .ui-state-default {
border: 1px solid #cccccc;
- background: #f8f8f8 url("images/ui-bg_highlight-hard_75_f8f8f8_1x100.png") 50% 50% repeat-x;
+ background: #f8f8f8;
font-weight: bold;
color: #666666;
}
@@ -837,7 +945,7 @@
.ui-widget-content .ui-state-focus,
.ui-widget-header .ui-state-focus {
border: 1px solid #aaaaaa;
- background: #eaeaea url("images/ui-bg_highlight-hard_75_eaeaea_1x100.png") 50% 50% repeat-x;
+ background: #eaeaea;
font-weight: bold;
color: #333333;
}
@@ -856,7 +964,7 @@
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active {
border: 1px solid #aaaaaa;
- background: #ffffff url("images/ui-bg_highlight-hard_65_ffffff_1x100.png") 50% 50% repeat-x;
+ background: #ffffff;
font-weight: bold;
color: #333333;
}
@@ -873,7 +981,7 @@
.ui-widget-content .ui-state-highlight,
.ui-widget-header .ui-state-highlight {
border: 1px solid #a3a3a3;
- background: #b0ccd7 url("images/ui-bg_highlight-hard_55_b0ccd7_1x100.png") 50% top repeat-x;
+ background: #b0ccd7;
color: #004458;
}
.ui-state-highlight a,
@@ -885,7 +993,7 @@
.ui-widget-content .ui-state-error,
.ui-widget-header .ui-state-error {
border: 1px solid #d7211e;
- background: #fef1ec url("images/ui-bg_flat_95_fef1ec_40x100.png") 50% 50% repeat-x;
+ background: #fef1ec;
color: #d64040;
}
.ui-state-error a,
@@ -1164,15 +1272,240 @@
/* Overlays */
.ui-widget-overlay {
- background: #333333 url("images/ui-bg_flat_0_333333_40x100.png") 50% 50% repeat-x;
+ background: #333333;
opacity: .5;
filter: Alpha(Opacity=50);
}
.ui-widget-shadow {
margin: -6px 0 0 -6px;
padding: 6px;
- background: #666666 url("images/ui-bg_flat_0_666666_40x100.png") 50% 50% repeat-x;
+ background: #666666;
opacity: .2;
filter: Alpha(Opacity=20);
border-radius: 8px;
}
+
+/* Roundcube button styling */
+.ui-button.ui-state-default {
+ display: inline-block;
+ margin: 0 2px;
+ padding: 1px 2px;
+ text-shadow: 0px 1px 1px #fff;
+ border: 1px solid #c6c6c6;
+ border-radius: 4px;
+ background: #f7f7f7;
+ background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#e6e6e6));
+ background: -o-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
+ background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
+ background: linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e6e6e6', GradientType=0);
+ -webkit-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+ -moz-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+ -o-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+ box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+ text-decoration: none;
+ outline: none;
+}
+
+.ui-button.mainaction {
+ color: #ededed;
+ text-shadow: 0px 1px 1px #333;
+ border-color: #1f262c;
+ background: #505050;
+ background: -moz-linear-gradient(top, #505050 0%, #2a2e31 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#505050), color-stop(100%,#2a2e31));
+ background: -o-linear-gradient(top, #505050 0%, #2a2e31 100%);
+ background: -ms-linear-gradient(top, #505050 0%, #2a2e31 100%);
+ background: linear-gradient(top, #505050 0%, #2a2e31 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#505050', endColorstr='#2a2e31', GradientType=0);
+ -moz-box-shadow: inset 0 1px 0 0 #777;
+ -webkit-box-shadow: inset 0 1px 0 0 #777;
+ -o-box-shadow: inset 0 1px 0 0 #777;
+ box-shadow: inset 0 1px 0 0 #777;
+}
+
+.ui-button.ui-state-focus {
+ color: #525252;
+ border-color: #4fadd5;
+ -moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+ -webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+ -o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+ box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+}
+
+.ui-button.ui-state-active {
+ color: #525252;
+ border-color: #aaa;
+ background: #e6e6e6;
+ background: -moz-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e6e6e6), color-stop(100%,#f9f9f9));
+ background: -o-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
+ background: -ms-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
+ background: linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e6e6e6', endColorstr='#f9f9f9', GradientType=0);
+}
+
+.ui-button.ui-state-focus.mainaction,
+.ui-button.ui-state-hover.mainaction {
+ color: #fff;
+}
+
+.ui-button.ui-state-focus.mainaction {
+ border-color: #1f262c;
+ -moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
+ -webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
+ -o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
+ box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6), inset 0 1px 0 0 #777;
+}
+
+.ui-button.ui-state-active.mainaction {
+ color: #fff;
+ background: #515151;
+ background: -moz-linear-gradient(top, #2a2e31 0%, #505050 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2a2e31), color-stop(100%,#505050));
+ background: -o-linear-gradient(top, #2a2e31 0%, #505050 100%);
+ background: -ms-linear-gradient(top, #2a2e31 0%, #505050 100%);
+ background: linear-gradient(top, #2a2e31 0%, #505050 100%);
+}
+
+.ui-button[disabled],
+.ui-button[disabled]:hover,
+.ui-button.mainaction[disabled] {
+ color: #aaa !important;
+}
+
+/* Roundcube's specific Datepicker style override */
+.ui-datepicker {
+ min-width: 20em;
+ padding: 0;
+ display: none;
+ border: 0;
+ border-radius: 3px;
+ -webkit-box-shadow: #666 1px 1px 10px;
+ -moz-box-shadow: 1px 1px 10px #666;
+ box-shadow: 1px 1px 16px #666;
+}
+.ui-datepicker .ui-datepicker-header {
+ padding: .3em 0;
+ border-radius: 3px 3px 0 0;
+ border: 0;
+ background: #3a3a3a;
+ filter: none;
+ color: #fff;
+ text-shadow: 0px 1px 1px #000;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ border: 0;
+ background: none;
+}
+.ui-datepicker .ui-datepicker-header .ui-icon {
+ background: url("images/ui-icons-datepicker.png") 0 0 no-repeat;
+}
+.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-w {
+ background-position: 0 2px;
+}
+.ui-datepicker .ui-datepicker-header .ui-icon-circle-triangle-e {
+ background-position: -14px 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 2px;
+ border: 0;
+ background: none;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next,
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 2px;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ border: 0;
+ background: #3a3a3a;
+ outline: none;
+ color: #fff;
+ font-weight: bold;
+ width: auto;
+ margin-right: 4px;
+ padding-right: 4px;
+}
+.ui-datepicker .ui-datepicker-title select::-ms-expand {
+ display: none;
+}
+.ie10 .ui-datepicker .ui-datepicker-title select,
+.webkit .ui-datepicker .ui-datepicker-title select,
+.mozilla .ui-datepicker .ui-datepicker-title select {
+ background-image: url("images/ui-icons-datepicker.png");
+ background-position: right -18px;
+ background-repeat: no-repeat;
+ padding-right: 14px;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+}
+.mozilla .ui-datepicker .ui-datepicker-title select {
+ background-position: right -17px;
+ text-indent: 0.01px;
+ text-overflow: '';
+ padding-right: 0;
+}
+.ui-datepicker .ui-datepicker-month:focus,
+.ui-datepicker .ui-datepicker-year:focus {
+ outline: 1px solid #4fadd5;
+}
+.ui-datepicker table {
+ margin: 0;
+ border-spacing: 0;
+}
+.ui-datepicker table:focus {
+ outline: 2px solid #4fadd5;
+ outline-offset: -2px;
+}
+.ui-datepicker td {
+ border: 1px solid #bbb;
+ padding: 0;
+}
+.ui-datepicker td span, .ui-datepicker td a {
+ border: 0;
+ padding: .3em;
+ text-shadow: 0px 1px 1px #fff;
+}
+.ui-datepicker td a.ui-state-default {
+ border: 0px solid #fff;
+ border-top-width: 1px;
+ border-left-width: 1px;
+ background: #e6e6e6;
+ background: -moz-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e6e6e6), color-stop(100%,#d6d6d6));
+ background: -o-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%);
+ background: -ms-linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%);
+ background: linear-gradient(top, #e6e6e6 0%, #d6d6d6 100%);
+}
+.ui-datepicker td a.ui-priority-secondary {
+ background: #eee;
+}
+.ui-datepicker td a.ui-state-active {
+ color: #fff;
+ border-color: #0286ac !important;
+ text-shadow: 0px 1px 1px #00516e !important;
+ background: #00acd4 !important;
+ background: -moz-linear-gradient(top, #00acd4 0%, #008fc7 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00acd4), color-stop(100%,#008fc7));
+ background: -o-linear-gradient(top, #00acd4 0%, #008fc7 100%);
+ background: -ms-linear-gradient(top, #00acd4 0%, #008fc7 100%);
+ background: linear-gradient(top, #00acd4 0%, #008fc7 100%);
+}
+.ui-datepicker .ui-state-highlight {
+ color: #0081c2;
+}
+.ui-datepicker td.ui-datepicker-days-cell-over a.ui-state-default {
+ color: #fff;
+ border-color: rgba(73,180,210,0.7);
+ background: rgba(73,180,210,0.7);
+ text-shadow: 0px 1px 1px #666;
+}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

File diff suppressed because it is too large Load Diff

@ -1,461 +0,0 @@
/*! jQuery UI - v1.9.1 - 2012-11-07
* http://jqueryui.com
* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
* Copyright (c) 2012 jQuery Foundation and other contributors Licensed MIT */
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
.ui-helper-clearfix:after { clear: both; }
.ui-helper-clearfix { zoom: 1; }
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
.ui-accordion .ui-accordion-header { display: block; cursor: pointer; position: relative; margin-top: 2px; padding: .5em .5em .5em .7em; zoom: 1; }
.ui-accordion .ui-accordion-icons { padding-left: 2.2em; }
.ui-accordion .ui-accordion-noicons { padding-left: .7em; }
.ui-accordion .ui-accordion-icons .ui-accordion-icons { padding-left: 2.2em; }
.ui-accordion .ui-accordion-header .ui-accordion-header-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; overflow: auto; zoom: 1; }
.ui-autocomplete {
position: absolute;
top: 0; /* #8656 */
cursor: default;
}
/* workarounds */
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active { text-decoration: none; }
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; }
button.ui-button-icons-only { width: 3.7em; }
/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4; }
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }
/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
/* RTL support */
.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
position: absolute; /*must have*/
z-index: -1; /*must have*/
filter: mask(); /*must have*/
top: -4px; /*must have*/
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
}.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
.ui-menu { list-style:none; padding: 2px; margin: 0; display:block; outline: none; }
.ui-menu .ui-menu { margin-top: -3px; position: absolute; }
.ui-menu .ui-menu-item { margin: 0; padding: 0; zoom: 1; width: 100%; }
.ui-menu .ui-menu-divider { margin: 5px -2px 5px -2px; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; }
.ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; zoom: 1; font-weight: normal; }
.ui-menu .ui-menu-item a.ui-state-focus,
.ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; }
.ui-menu .ui-state-disabled { font-weight: normal; margin: .4em 0 .2em; line-height: 1.5; }
.ui-menu .ui-state-disabled a { cursor: default; }
/* icon support */
.ui-menu-icons { position: relative; }
.ui-menu-icons .ui-menu-item a { position: relative; padding-left: 2em; }
/* left-aligned */
.ui-menu .ui-icon { position: absolute; top: .2em; left: .2em; }
/* right-aligned */
.ui-menu .ui-menu-icon { position: static; float: right; }
.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }.ui-slider { position: relative; text-align: left; }
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
.ui-slider-horizontal { height: .8em; }
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
.ui-slider-vertical { width: .8em; height: 100px; }
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }.ui-spinner { position:relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; }
.ui-spinner-input { border: none; background: none; padding: 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; margin-right: 22px; }
.ui-spinner-button { width: 16px; height: 50%; font-size: .5em; padding: 0; margin: 0; text-align: center; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; }
.ui-spinner a.ui-spinner-button { border-top: none; border-bottom: none; border-right: none; } /* more specificity required here to overide default borders */
.ui-spinner .ui-icon { position: absolute; margin-top: -8px; top: 50%; left: 0; } /* vertical centre icon */
.ui-spinner-up { top: 0; }
.ui-spinner-down { bottom: 0; }
/* TR overrides */
.ui-spinner .ui-icon-triangle-1-s {
/* need to fix icons sprite */
background-position:-65px -16px;
}
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 0; margin: 1px .2em 0 0; border-bottom: 0; padding: 0; white-space: nowrap; }
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: -1px; padding-bottom: 1px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
.ui-tooltip {
padding: 8px;
position: absolute;
z-index: 9999;
max-width: 300px;
-webkit-box-shadow: 0 0 5px #aaa;
box-shadow: 0 0 5px #aaa;
}
/* Fades and background-images don't work well together in IE6, drop the image */
* html .ui-tooltip {
background-image: none;
}
body .ui-tooltip { border-width: 2px; }
/* Component containers
----------------------------------*/
.ui-widget { font-family: Lucida Grande,Lucida Sans,Arial,sans-serif; font-size: 1.1em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande,Lucida Sans,Arial,sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; }
.ui-widget-content a { color: #222222; }
.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
.ui-widget-header a { color: #ffffff; }
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2e6e9e; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; }
.ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #1d5987; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; text-decoration: none; }
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
.ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); } /* For IE8 - See #6059 */
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-on { background-position: -96px -144px; }
.ui-icon-radio-off { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -khtml-border-top-left-radius: 5px; border-top-left-radius: 5px; }
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; -khtml-border-top-right-radius: 5px; border-top-right-radius: 5px; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; -khtml-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; -khtml-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
/* Overlays */
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .3;filter:Alpha(Opacity=30); }
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .3;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }

@ -96,3 +96,13 @@ rcube_webmail.prototype.get_input_selection = function(obj)
return {start: start, end: end, text: normalizedValue.substr(start, end-start)};
};
// For IE<9 we have to do it this way
// otherwise the form will be posted to a new window
rcube_webmail.prototype.async_upload_form_frame = function(name)
{
document.body.insertAdjacentHTML('BeforeEnd', '<iframe name="' + name + '"'
+ ' src="program/resources/blank.gif" style="width:0; height:0; visibility:hidden"></iframe>');
return $('iframe[name="' + name + '"]');
};

@ -1,7 +1,7 @@
<?php
/**
* Plugin which adds support for legacy browsers (IE 7/8)
* Plugin which adds support for legacy browsers (IE 7/8, Firefox < 4)
*
* @author Aleksander Machniak <alec@alec.pl>
* @license GNU GPLv3+
@ -9,12 +9,18 @@
class legacy_browser extends rcube_plugin
{
public $noajax = true;
private $rc;
public function init()
{
$rcube = rcube::get_instance();
$this->rc = $rcube = rcube::get_instance();
if ($rcube->output->browser->ie && $rcube->output->browser->ver < 9) {
if (
// IE < 9
($rcube->output->browser->ie && $rcube->output->browser->ver < 9)
// Firefox < 4 (Firefox 4 is recognized as 2.0)
|| ($rcube->output->browser->mz && $rcube->output->browser->ver < 2)
) {
$this->add_hook('send_page', array($this, 'send_page'));
$this->add_hook('render_page', array($this, 'render_page'));
}
@ -22,19 +28,25 @@ class legacy_browser extends rcube_plugin
function send_page($args)
{
// replace jQuery 2.x with 1.x
$ts1 = filemtime($this->home . '/js/jquery.min.js');
$ts2 = filemtime($this->home . '/js/iehacks.js');
// put iehacks.js after app.js
$args['content'] = preg_replace(
'|(<script src="program/js/app(\.min)?\.js\?s=[0-9]+" type="text/javascript"></script>)|',
'\\1<script src="plugins/legacy_browser/js/iehacks.js?s=' . $ts2 . '" type="text/javascript"></script>',
$args['content'], 1, $count);
if ($this->rc->output->browser->ie) {
$args['content'] = preg_replace(
'|(<script src="program/js/app(\.min)?\.js\?s=[0-9]+" type="text/javascript"></script>)|',
'\\1<script src="plugins/legacy_browser/js/iehacks.js?s=' . $ts2 . '" type="text/javascript"></script>',
$args['content'], 1, $count);
}
else {
$count = 1;
}
// replace jQuery 2.x with 1.x
$args['content'] = preg_replace(
'|<script src="program/js/jquery\.min\.js\?s=[0-9]+" type="text/javascript"></script>|',
'<script src="plugins/legacy_browser/js/jquery.min.js?s=' . $ts1 . '" type="text/javascript"></script>'
// add iehacks.js if it is IE and it wasn't added yet
. ($count ? '' : "\n".'<script src="plugins/legacy_browser/js/iehacks.js?s=' . $ts2 . '" type="text/javascript"></script>'),
$args['content'], 1);
@ -43,23 +55,26 @@ class legacy_browser extends rcube_plugin
function render_page($args)
{
$rcube = rcube::get_instance();
if (!$this->rc->output->browser->ie) {
return $args;
}
$skin = $this->skin();
if ($skin == 'classic') {
$minified = file_exists(INSTALL_PATH . '/plugins/legacy_browser/skins/classic/iehacks.min.css') ? '.min' : '';
$rcube->output->add_header(
$this->rc->output->add_header(
'<link rel="stylesheet" type="text/css" href="plugins/legacy_browser/skins/classic/iehacks' . $minified . '.css" />'
);
}
else if ($skin == 'larry') {
$minified = file_exists(INSTALL_PATH . '/plugins/legacy_browser/skins/larry/iehacks.min.css') ? '.min' : '';
$rcube->output->add_header(
$this->rc->output->add_header(
'<link rel="stylesheet" type="text/css" href="plugins/legacy_browser/skins/larry/iehacks' . $minified . '.css" />'
);
if ($rcube->output->browser->ver < 8) {
$rcube->output->add_header(
if ($this->rc->output->browser->ver < 8) {
$this->rc->output->add_header(
'<link rel="stylesheet" type="text/css" href="plugins/legacy_browser/skins/larry/ie7hacks' . $minified . '.css" />'
);
}
@ -68,8 +83,7 @@ class legacy_browser extends rcube_plugin
private function skin()
{
$rcube = rcube::get_instance();
$skin = $rcube->config->get('skin');
$skin = $this->rc->config->get('skin');
// external skin, find if it inherits from other skin
if ($skin != 'larry' && $skin != 'classic') {

@ -5,17 +5,17 @@
http://pear.php.net/dtd/package-2.0.xsd">
<name>legacy_browser</name>
<channel>pear.roundcube.net</channel>
<summary>Legacy browser (IE 7/8) support</summary>
<description>This adds support for legacy browsers (IE 7/8).</description>
<summary>Legacy browser (IE 7/8, Firefox &lt; 4) support</summary>
<description>This adds support for legacy browsers (IE 7/8, Firefox &lt; 4).</description>
<lead>
<name>Aleksander Machniak</name>
<user>alec</user>
<email>alec@alec.pl</email>
<active>yes</active>
</lead>
<date>2014-04-12</date>
<date>2014-06-19</date>
<version>
<release>1.0</release>
<release>1.1</release>
<api>1.0</api>
</version>
<stability>

@ -37,6 +37,7 @@ input.button {
a.iconbutton,
a.deletebutton,
.boxpagenav a.icon,
a.button span.icon,
.pagenav a.button span.inner,
.boxfooter .listbutton .inner,
.attachmentslist li a.delete,

@ -169,3 +169,32 @@ ul.toolbarmenu li a.active:hover,
float: left;
height: 18px;
}
a.button.disabled span.inner,
a.iconbutton.disabled,
.boxfooter .listbutton.disabled .inner,
.boxpagenav a.icon.disabled,
.toolbar a.button.disabled {
filter: alpha(opacity=40);
}
.dropbutton a.button.disabled + .dropbuttontip {
filter: alpha(opacity=50);
}
select.decorated {
filter: alpha(opacity=0);
}
ul.toolbarmenu li span.icon {
filter: alpha(opacity=20);
}
ul.toolbarmenu li a.active span.icon {
filter: alpha(opacity=100);
}
.minimal #topline:hover,
#rcmdraglayer {
filter: alpha(opacity=93);
}

@ -1,6 +1,17 @@
- Added simple API to manage vacation rule
- Fix missing css/js scripts in filter form in mail task
- Fix default vacation status (#1490019)
- Make possible to set vacation start/end date and time
* version 8.0 [2014-07-16]
-----------------------------------------------------------
- Fix bug where non-existing (or unsubscribed) folder wasn't listed in folder selector (#1489956)
- Added optional separate interface for out-of-office management (#1488266)
- Fix disabled "create filter" action
- Fix enotify/notify extension handling
- Improved UI accessibility
- Added option to specify connection socket parameters - managesieve_conn_options
- Support vacation date rules without date extension (#1489978)
* version 7.2 [2014-02-14]
-----------------------------------------------------------

@ -28,6 +28,18 @@ $config['managesieve_auth_pw'] = null;
// Note: tls:// prefix in managesieve_host is also supported
$config['managesieve_usetls'] = false;
// Connection scket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation
//$config['imap_conn_options'] = array(
// 'ssl' => array(
// 'verify_peer' => true,
// 'verify_depth' => 3,
// 'cafile' => '/etc/openssl/certs/ca.crt',
// ),
// );
$config['managesieve_conn_options'] = null;
// default contents of filters script (eg. default spam filter)
$config['managesieve_default'] = '/etc/dovecot/sieve/global';

@ -22,17 +22,6 @@
// Managesieve Protocol: RFC5804
define('SIEVE_ERROR_CONNECTION', 1);
define('SIEVE_ERROR_LOGIN', 2);
define('SIEVE_ERROR_NOT_EXISTS', 3); // script not exists
define('SIEVE_ERROR_INSTALL', 4); // script installation
define('SIEVE_ERROR_ACTIVATE', 5); // script activation
define('SIEVE_ERROR_DELETE', 6); // script deletion
define('SIEVE_ERROR_INTERNAL', 7); // internal error
define('SIEVE_ERROR_DEACTIVATE', 8); // script activation
define('SIEVE_ERROR_OTHER', 255); // other/unknown error
class rcube_sieve
{
private $sieve; // Net_Sieve object
@ -43,6 +32,16 @@ class rcube_sieve
public $current; // name of currently loaded script
private $exts; // array of supported extensions
const ERROR_CONNECTION = 1;
const ERROR_LOGIN = 2;
const ERROR_NOT_EXISTS = 3; // script not exists
const ERROR_INSTALL = 4; // script installation
const ERROR_ACTIVATE = 5; // script activation
const ERROR_DELETE = 6; // script deletion
const ERROR_INTERNAL = 7; // internal error
const ERROR_DEACTIVATE = 8; // script activation
const ERROR_OTHER = 255; // other/unknown error
/**
* Object constructor
@ -57,10 +56,11 @@ class rcube_sieve
* @param boolean Enable/disable debugging
* @param string Proxy authentication identifier
* @param string Proxy authentication password
* @param array List of options to pass to stream_context_create().
*/
public function __construct($username, $password='', $host='localhost', $port=2000,
$auth_type=null, $usetls=true, $disabled=array(), $debug=false,
$auth_cid=null, $auth_pw=null)
$auth_cid=null, $auth_pw=null, $options=array())
{
$this->sieve = new Net_Sieve();
@ -68,8 +68,8 @@ class rcube_sieve
$this->sieve->setDebug(true, array($this, 'debug_handler'));
}
if (PEAR::isError($this->sieve->connect($host, $port, null, $usetls))) {
return $this->_set_error(SIEVE_ERROR_CONNECTION);
if (PEAR::isError($this->sieve->connect($host, $port, $options, $usetls))) {
return $this->_set_error(self::ERROR_CONNECTION);
}
if (!empty($auth_cid)) {
@ -81,7 +81,7 @@ class rcube_sieve
if (PEAR::isError($this->sieve->login($username, $password,
$auth_type ? strtoupper($auth_type) : null, $authz))
) {
return $this->_set_error(SIEVE_ERROR_LOGIN);
return $this->_set_error(self::ERROR_LOGIN);
}
$this->exts = $this->get_extensions();
@ -116,10 +116,10 @@ class rcube_sieve
public function save($name = null)
{
if (!$this->sieve)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
if (!$this->script)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
if (!$name)
$name = $this->current;
@ -130,7 +130,7 @@ class rcube_sieve
$script = '/* empty script */';
if (PEAR::isError($this->sieve->installScript($name, $script)))
return $this->_set_error(SIEVE_ERROR_INSTALL);
return $this->_set_error(self::ERROR_INSTALL);
return true;
}
@ -141,13 +141,13 @@ class rcube_sieve
public function save_script($name, $content = null)
{
if (!$this->sieve)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
if (!$content)
$content = '/* empty script */';
if (PEAR::isError($this->sieve->installScript($name, $content)))
return $this->_set_error(SIEVE_ERROR_INSTALL);
return $this->_set_error(self::ERROR_INSTALL);
return true;
}
@ -158,13 +158,13 @@ class rcube_sieve
public function activate($name = null)
{
if (!$this->sieve)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
if (!$name)
$name = $this->current;
if (PEAR::isError($this->sieve->setActive($name)))
return $this->_set_error(SIEVE_ERROR_ACTIVATE);
return $this->_set_error(self::ERROR_ACTIVATE);
return true;
}
@ -175,10 +175,10 @@ class rcube_sieve
public function deactivate()
{
if (!$this->sieve)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
if (PEAR::isError($this->sieve->setActive('')))
return $this->_set_error(SIEVE_ERROR_DEACTIVATE);
return $this->_set_error(self::ERROR_DEACTIVATE);
return true;
}
@ -189,7 +189,7 @@ class rcube_sieve
public function remove($name = null)
{
if (!$this->sieve)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
if (!$name)
$name = $this->current;
@ -197,10 +197,10 @@ class rcube_sieve
// script must be deactivated first
if ($name == $this->sieve->getActive())
if (PEAR::isError($this->sieve->setActive('')))
return $this->_set_error(SIEVE_ERROR_DELETE);
return $this->_set_error(self::ERROR_DELETE);
if (PEAR::isError($this->sieve->removeScript($name)))
return $this->_set_error(SIEVE_ERROR_DELETE);
return $this->_set_error(self::ERROR_DELETE);
if ($name == $this->current)
$this->current = null;
@ -217,9 +217,14 @@ class rcube_sieve
return $this->exts;
if (!$this->sieve)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
$ext = $this->sieve->getExtensions();
if (PEAR::isError($ext)) {
return array();
}
// we're working on lower-cased names
$ext = array_map('strtolower', (array) $ext);
@ -241,12 +246,12 @@ class rcube_sieve
if (!$this->list) {
if (!$this->sieve)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
$list = $this->sieve->listScripts();
if (PEAR::isError($list))
return $this->_set_error(SIEVE_ERROR_OTHER);
return $this->_set_error(self::ERROR_OTHER);
$this->list = $list;
}
@ -260,7 +265,7 @@ class rcube_sieve
public function get_active()
{
if (!$this->sieve)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
return $this->sieve->getActive();
}
@ -271,7 +276,7 @@ class rcube_sieve
public function load($name)
{
if (!$this->sieve)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
if ($this->current == $name)
return true;
@ -279,7 +284,7 @@ class rcube_sieve
$script = $this->sieve->getScript($name);
if (PEAR::isError($script))
return $this->_set_error(SIEVE_ERROR_OTHER);
return $this->_set_error(self::ERROR_OTHER);
// try to parse from Roundcube format
$this->script = $this->_parse($script);
@ -295,7 +300,7 @@ class rcube_sieve
public function load_script($script)
{
if (!$this->sieve)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
// try to parse from Roundcube format
$this->script = $this->_parse($script);
@ -340,12 +345,12 @@ class rcube_sieve
public function get_script($name)
{
if (!$this->sieve)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
$content = $this->sieve->getScript($name);
if (PEAR::isError($content))
return $this->_set_error(SIEVE_ERROR_OTHER);
return $this->_set_error(self::ERROR_OTHER);
return $content;
}
@ -356,13 +361,13 @@ class rcube_sieve
public function copy($name, $copy)
{
if (!$this->sieve)
return $this->_set_error(SIEVE_ERROR_INTERNAL);
return $this->_set_error(self::ERROR_INTERNAL);
if ($copy) {
$content = $this->sieve->getScript($copy);
if (PEAR::isError($content))
return $this->_set_error(SIEVE_ERROR_OTHER);
return $this->_set_error(self::ERROR_OTHER);
}
return $this->save_script($name, $content);

@ -73,7 +73,7 @@ class rcube_sieve_engine
*/
function __construct($plugin)
{
$this->rc = rcmail::get_instance();
$this->rc = rcube::get_instance();
$this->plugin = $plugin;
}
@ -91,6 +91,76 @@ class rcube_sieve_engine
'filtersetform' => array($this, 'filterset_form'),
));
// connect to managesieve server
$error = $this->connect($_SESSION['username'], $this->rc->decrypt($_SESSION['password']));
// load current/active script
if (!$error) {
// Get list of scripts
$list = $this->list_scripts();
// reset current script when entering filters UI (#1489412)
if ($this->rc->action == 'plugin.managesieve') {
$this->rc->session->remove('managesieve_current');
}
if ($mode != 'vacation') {
if (!empty($_GET['_set']) || !empty($_POST['_set'])) {
$script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_GPC, true);
}
else if (!empty($_SESSION['managesieve_current'])) {
$script_name = $_SESSION['managesieve_current'];
}
}
$error = $this->load_script($script_name);
}
// finally set script objects
if ($error) {
switch ($error) {
case rcube_sieve::ERROR_CONNECTION:
case rcube_sieve::ERROR_LOGIN:
$this->rc->output->show_message('managesieve.filterconnerror', 'error');
rcube::raise_error(array('code' => 403, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Unable to connect to managesieve on $host:$port"), true, false);
break;
default:
$this->rc->output->show_message('managesieve.filterunknownerror', 'error');
break;
}
// reload interface in case of possible error when specified script wasn't found (#1489412)
if ($script_name !== null && !empty($list) && !in_array($script_name, $list)) {
$this->rc->output->command('reload', 500);
}
// to disable 'Add filter' button set env variable
$this->rc->output->set_env('filterconnerror', true);
$this->script = array();
}
else {
$this->exts = $this->sieve->get_extensions();
$this->init_script();
$this->rc->output->set_env('currentset', $this->sieve->current);
$_SESSION['managesieve_current'] = $this->sieve->current;
}
return $error;
}
/**
* Connect to configured managesieve server
*
* @param string $username User login
* @param string $password User password
*
* @return int Connection status: 0 on success, >0 on failure
*/
public function connect($username, $password)
{
// Get connection parameters
$host = $this->rc->config->get('managesieve_host', 'localhost');
$port = $this->rc->config->get('managesieve_port');
@ -112,8 +182,8 @@ class rcube_sieve_engine
}
$plugin = $this->rc->plugins->exec_hook('managesieve_connect', array(
'user' => $_SESSION['username'],
'password' => $this->rc->decrypt($_SESSION['password']),
'user' => $username,
'password' => $password,
'host' => $host,
'port' => $port,
'usetls' => $tls,
@ -122,6 +192,7 @@ class rcube_sieve_engine
'debug' => $this->rc->config->get('managesieve_debug', false),
'auth_cid' => $this->rc->config->get('managesieve_auth_cid'),
'auth_pw' => $this->rc->config->get('managesieve_auth_pw'),
'socket_options' => $this->rc->config->get('managesieve_conn_options'),
));
// try to connect to managesieve server and to fetch the script
@ -135,97 +206,65 @@ class rcube_sieve_engine
$plugin['disabled'],
$plugin['debug'],
$plugin['auth_cid'],
$plugin['auth_pw']
$plugin['auth_pw'],
$plugin['socket_options']
);
if (!($error = $this->sieve->error())) {
// Get list of scripts
$list = $this->list_scripts();
return $this->sieve->error();
}
// reset current script when entering filters UI (#1489412)
if ($this->rc->action == 'plugin.managesieve') {
$this->rc->session->remove('managesieve_current');
}
/**
* Load specified (or active) script
*
* @param string $script_name Optional script name
*
* @return int Connection status: 0 on success, >0 on failure
*/
public function load_script($script_name = null)
{
// Get list of scripts
$list = $this->list_scripts();
if ($mode != 'vacation') {
if (!empty($_GET['_set']) || !empty($_POST['_set'])) {
$script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_GPC, true);
}
else if (!empty($_SESSION['managesieve_current'])) {
$script_name = $_SESSION['managesieve_current'];
}
if ($script_name === null || $script_name === '') {
// get (first) active script
if (!empty($this->active[0])) {
$script_name = $this->active[0];
}
else if ($list) {
$script_name = $list[0];
}
// create a new (initial) script
else {
// if script not exists build default script contents
$script_file = $this->rc->config->get('managesieve_default');
$script_name = $this->rc->config->get('managesieve_script_name');
if ($script_name === null || $script_name === '') {
// get (first) active script
if (!empty($this->active[0])) {
$script_name = $this->active[0];
if (empty($script_name)) {
$script_name = 'roundcube';
}
else if ($list) {
$script_name = $list[0];
}
// create a new (initial) script
else {
// if script not exists build default script contents
$script_file = $this->rc->config->get('managesieve_default');
$script_name = $this->rc->config->get('managesieve_script_name');
if (empty($script_name))
$script_name = 'roundcube';
if ($script_file && is_readable($script_file))
$content = file_get_contents($script_file);
// add script and set it active
if ($this->sieve->save_script($script_name, $content)) {
$this->activate_script($script_name);
$this->list[] = $script_name;
}
if ($script_file && is_readable($script_file)) {
$content = file_get_contents($script_file);
}
}
if ($script_name) {
$this->sieve->load($script_name);
// add script and set it active
if ($this->sieve->save_script($script_name, $content)) {
$this->activate_script($script_name);
$this->list[] = $script_name;
}
}
$error = $this->sieve->error();
}
// finally set script objects
if ($error) {
switch ($error) {
case SIEVE_ERROR_CONNECTION:
case SIEVE_ERROR_LOGIN:
$this->rc->output->show_message('managesieve.filterconnerror', 'error');
rcube::raise_error(array('code' => 403, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Unable to connect to managesieve on $host:$port"), true, false);
break;
default:
$this->rc->output->show_message('managesieve.filterunknownerror', 'error');
break;
}
// reload interface in case of possible error when specified script wasn't found (#1489412)
if ($script_name !== null && !empty($list) && !in_array($script_name, $list)) {
$this->rc->output->command('reload', 500);
}
// to disable 'Add filter' button set env variable
$this->rc->output->set_env('filterconnerror', true);
$this->script = array();
}
else {
$this->exts = $this->sieve->get_extensions();
$this->init_script();
$this->rc->output->set_env('currentset', $this->sieve->current);
$_SESSION['managesieve_current'] = $this->sieve->current;
if ($script_name) {
$this->sieve->load($script_name);
}
return $error;
return $this->sieve->error();
}
/**
* User interface actions handler
*/
function actions()
{
$error = $this->start();
@ -1826,17 +1865,22 @@ class rcube_sieve_engine
$out .= '</div>';
// mailbox select
if ($action['type'] == 'fileinto')
if ($action['type'] == 'fileinto') {
$mailbox = $this->mod_mailbox($action['target'], 'out');
else
// make sure non-existing (or unsubscribed) mailbox is listed (#1489956)
$additional = array($mailbox);
}
else {
$mailbox = '';
}
$select = $this->rc->folder_selector(array(
'realnames' => false,
'maxlength' => 100,
'id' => 'action_mailbox' . $id,
'name' => "_action_mailbox[$id]",
'style' => 'display:'.(empty($action['type']) || $action['type'] == 'fileinto' ? 'inline' : 'none')
'realnames' => false,
'maxlength' => 100,
'id' => 'action_mailbox' . $id,
'name' => "_action_mailbox[$id]",
'style' => 'display:'.(empty($action['type']) || $action['type'] == 'fileinto' ? 'inline' : 'none'),
'additional' => $additional,
));
$out .= $select->show($mailbox);
$out .= '</td>';

@ -23,6 +23,8 @@
class rcube_sieve_vacation extends rcube_sieve_engine
{
protected $error;
function actions()
{
$error = $this->start('vacation');
@ -32,7 +34,6 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$this->vacation_rule();
$this->vacation_post();
}
$this->plugin->add_label('vacation.saving');
$this->rc->output->add_handlers(array(
'vacationform' => array($this, 'vacation_form'),
@ -55,11 +56,23 @@ class rcube_sieve_vacation extends rcube_sieve_engine
// find (first) vacation rule
foreach ($this->script as $idx => $rule) {
if (empty($this->vacation) && !empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
foreach ($rule['actions'] as $act) {
if ($act['type'] == 'discard' || $act['type'] == 'keep') {
$action = $act['type'];
}
else if ($act['type'] == 'redirect') {
$action = $act['copy'] ? 'copy' : 'redirect';
$target = $act['target'];
}
}
$this->vacation = array_merge($rule['actions'][0], array(
'idx' => $idx,
'disabled' => $rule['disabled'],
'name' => $rule['name'],
'tests' => $rule['tests'],
'action' => $action ?: 'keep',
'target' => $target,
));
}
else {
@ -76,6 +89,17 @@ class rcube_sieve_vacation extends rcube_sieve_engine
return;
}
$date_extension = in_array('date', $this->exts);
$regex_extension = in_array('regex', $this->exts);
// set user's timezone
try {
$timezone = new DateTimeZone($this->rc->config->get('timezone', 'GMT'));
}
catch (Exception $e) {
$timezone = new DateTimeZone('GMT');
}
$status = rcube_utils::get_input_value('vacation_status', rcube_utils::INPUT_POST);
$subject = rcube_utils::get_input_value('vacation_subject', rcube_utils::INPUT_POST, true);
$reason = rcube_utils::get_input_value('vacation_reason', rcube_utils::INPUT_POST, true);
@ -84,7 +108,12 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$interval_type = rcube_utils::get_input_value('vacation_interval_type', rcube_utils::INPUT_POST);
$date_from = rcube_utils::get_input_value('vacation_datefrom', rcube_utils::INPUT_POST);
$date_to = rcube_utils::get_input_value('vacation_dateto', rcube_utils::INPUT_POST);
$time_from = rcube_utils::get_input_value('vacation_timefrom', rcube_utils::INPUT_POST);
$time_to = rcube_utils::get_input_value('vacation_timeto', rcube_utils::INPUT_POST);
$after = rcube_utils::get_input_value('vacation_after', rcube_utils::INPUT_POST);
$action = rcube_utils::get_input_value('vacation_action', rcube_utils::INPUT_POST);
$target = rcube_utils::get_input_value('action_target', rcube_utils::INPUT_POST, true);
$target_domain = rcube_utils::get_input_value('action_domain', rcube_utils::INPUT_POST);
$interval_type = $interval_type == 'seconds' ? 'seconds' : 'days';
$vacation_action['type'] = 'vacation';
@ -107,33 +136,65 @@ class rcube_sieve_vacation extends rcube_sieve_engine
}
if ($vacation_action['reason'] == '') {
$error = 'managesieve.cannotbeempty';
$error = 'managesieve.emptyvacationbody';
}
if ($vacation_action[$interval_type] && !preg_match('/^[0-9]+$/', $vacation_action[$interval_type])) {
$error = 'managesieve.forbiddenchars';
}
foreach (array('date_from', 'date_to') as $var) {
$date = $$var;
if ($date && ($dt = rcube_utils::anytodatetime($date))) {
$type = 'value-' . ($var == 'date_from' ? 'ge' : 'le');
$test = array(
'test' => 'currentdate',
'part' => 'date',
'type' => $type,
'arg' => $dt->format('Y-m-d'),
);
// find and remove existing date/regex/true rules
foreach ((array) $vacation_tests as $idx => $t) {
if ($t['test'] == 'currentdate' || $t['test'] == 'true'
|| ($t['test'] == 'header' && $t['type'] == 'regex' && $t['arg1'] == 'received')
) {
unset($vacation_tests[$idx]);
}
}
// find existing date rule
foreach ((array) $vacation_tests as $idx => $t) {
if ($t['test'] == 'currentdate' && $t['part'] == 'date' && $t['type'] == $type) {
$vacation_tests[$idx] = $test;
continue 2;
if ($date_extension) {
foreach (array('date_from', 'date_to') as $var) {
$time = ${str_replace('date', 'time', $var)};
$date = trim($$var . ' ' . $time);
if ($date && ($dt = rcube_utils::anytodatetime($date, $timezone))) {
if ($time) {
$vacation_tests[] = array(
'test' => 'currentdate',
'part' => 'iso8601',
'type' => 'value-' . ($var == 'date_from' ? 'ge' : 'le'),
'zone' => $dt->format('O'),
'arg' => str_replace('+00:00', 'Z', strtoupper($dt->format('c'))),
);
}
else {
$vacation_tests[] = array(
'test' => 'currentdate',
'part' => 'date',
'type' => 'value-' . ($var == 'date_from' ? 'ge' : 'le'),
'zone' => $dt->format('O'),
'arg' => $dt->format('Y-m-d'),
);
}
}
}
}
else if ($regex_extension) {
// Add date range rules if range specified
if ($date_from && $date_to) {
if ($tests = self::build_regexp_tests($date_from, $date_to, $error)) {
$vacation_tests = array_merge($vacation_tests, $tests);
}
}
}
$vacation_tests[] = $test;
if ($action == 'redirect' || $action == 'copy') {
if ($target_domain) {
$target .= '@' . $target_domain;
}
if (empty($target) || !rcube_utils::check_email($target)) {
$error = 'noemailwarning';
}
}
@ -148,9 +209,17 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$rule['type'] = 'if';
$rule['name'] = $rule['name'] ?: $this->plugin->gettext('vacation');
$rule['disabled'] = $status == 'off';
$rule['actions'][0] = $vacation_action;
$rule['tests'] = $vacation_tests;
$rule['join'] = count($vacation_tests) > 1;
$rule['join'] = $date_extension ? count($vacation_tests) > 1 : false;
$rule['actions'] = array($vacation_action);
if ($action && $action != 'keep') {
$rule['actions'][] = array(
'type' => $action == 'discard' ? 'discard' : 'redirect',
'copy' => $action == 'copy',
'target' => $action != 'discard' ? $target : '',
);
}
// reset original vacation rule
if (isset($this->vacation['idx'])) {
@ -202,6 +271,7 @@ class rcube_sieve_vacation extends rcube_sieve_engine
{
// check supported extensions
$date_extension = in_array('date', $this->exts);
$regex_extension = in_array('regex', $this->exts);
$seconds_extension = in_array('vacation-seconds', $this->exts);
// build FORM tag
@ -216,18 +286,26 @@ class rcube_sieve_vacation extends rcube_sieve_engine
) + $attrib);
// form elements
$subject = new html_inputfield(array('name' => 'vacation_subject', 'size' => 50));
$reason = new html_textarea(array('name' => 'vacation_reason', 'cols' => 60, 'rows' => 8));
$interval = new html_inputfield(array('name' => 'vacation_interval', 'size' => 5));
$addresses = '<textarea name="vacation_addresses" data-type="list" data-size="30" style="display: none">'
$subject = new html_inputfield(array('name' => 'vacation_subject', 'id' => 'vacation_subject', 'size' => 50));
$reason = new html_textarea(array('name' => 'vacation_reason', 'id' => 'vacation_reason', 'cols' => 60, 'rows' => 8));
$interval = new html_inputfield(array('name' => 'vacation_interval', 'id' => 'vacation_interval', 'size' => 5));
$addresses = '<textarea name="vacation_addresses" id="vacation_addresses" data-type="list" data-size="30" style="display: none">'
. rcube::Q(implode("\n", (array) $this->vacation['addresses']), 'strict', false) . '</textarea>';
$status = new html_select(array('name' => 'vacation_status'));
$status = new html_select(array('name' => 'vacation_status', 'id' => 'vacation_status'));
$action = new html_select(array('name' => 'vacation_action', 'id' => 'vacation_action', 'onchange' => 'vacation_action_select()'));
$status->add($this->plugin->gettext('vacation.on'), 'on');
$status->add($this->plugin->gettext('vacation.off'), 'off');
$action->add($this->plugin->gettext('vacation.keep'), 'keep');
$action->add($this->plugin->gettext('vacation.discard'), 'discard');
$action->add($this->plugin->gettext('vacation.redirect'), 'redirect');
if (in_array('copy', $this->exts)) {
$action->add($this->plugin->gettext('vacation.copy'), 'copy');
}
if ($this->rc->config->get('managesieve_vacation') != 2 && count($this->vacation['list'])) {
$after = new html_select(array('name' => 'vacation_after'));
$after = new html_select(array('name' => 'vacation_after', 'id' => 'vacation_after'));
$after->add('', '');
foreach ($this->vacation['list'] as $idx => $rule) {
@ -246,18 +324,74 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$interval_txt .= '&nbsp;' . $this->plugin->gettext('days');
}
if ($date_extension) {
$date_from = new html_inputfield(array('name' => 'vacation_datefrom', 'class' => 'datepicker', 'size' => 12));
$date_to = new html_inputfield(array('name' => 'vacation_dateto', 'class' => 'datepicker', 'size' => 12));
if ($date_extension || $regex_extension) {
$date_from = new html_inputfield(array('name' => 'vacation_datefrom', 'id' => 'vacation_datefrom', 'class' => 'datepicker', 'size' => 12));
$date_to = new html_inputfield(array('name' => 'vacation_dateto', 'id' => 'vacation_dateto', 'class' => 'datepicker', 'size' => 12));
$date_format = $this->rc->config->get('date_format', 'Y-m-d');
}
if ($date_extension) {
$time_from = new html_inputfield(array('name' => 'vacation_timefrom', 'id' => 'vacation_timefrom', 'size' => 6));
$time_to = new html_inputfield(array('name' => 'vacation_timeto', 'id' => 'vacation_timeto', 'size' => 6));
$time_format = $this->rc->config->get('time_format', 'H:i');
$date_value = array();
foreach ((array) $this->vacation['tests'] as $test) {
if ($test['test'] == 'currentdate' && $test['part'] == 'date') {
$date = $this->rc->format_date($test['arg'], $date_format, false);
$date_value[$test['type'] == 'value-ge' ? 'from' : 'to'] = $date;
if ($test['test'] == 'currentdate') {
$idx = $test['type'] == 'value-ge' ? 'from' : 'to';
if ($test['part'] == 'date') {
$date_value[$idx]['date'] = $test['arg'];
}
else if ($test['part'] == 'iso8601') {
$date_value[$idx]['datetime'] = $test['arg'];
}
}
}
foreach ($date_value as $idx => $value) {
$date = $value['datetime'] ?: $value['date'];
$date_value[$idx] = $this->rc->format_date($date, $date_format, false);
if (!empty($value['datetime'])) {
$date_value['time_' . $idx] = $this->rc->format_date($date, $time_format, true);
}
}
}
else if ($regex_extension) {
// Sieve 'date' extension not available, read start/end from RegEx based rules instead
if ($date_tests = self::parse_regexp_tests($this->vacation['tests'])) {
$date_value['from'] = $this->rc->format_date($date_tests['from'], $date_format, false);
$date_value['to'] = $this->rc->format_date($date_tests['to'], $date_format, false);
}
}
// force domain selection in redirect email input
$domains = (array) $this->rc->config->get('managesieve_domains');
$redirect = $this->vacation['action'] == 'redirect' || $this->vacation['action'] == 'copy';
if (!empty($domains)) {
sort($domains);
$domain_select = new html_select(array('name' => 'action_domain', 'id' => 'action_domain'));
$domain_select->add(array_combine($domains, $domains));
if ($redirect && $this->vacation['target']) {
$parts = explode('@', $this->vacation['target']);
if (!empty($parts)) {
$this->vacation['domain'] = array_pop($parts);
$this->vacation['target'] = implode('@', $parts);
}
}
}
// redirect target
$action_target = ' <span id="action_target_span" style="display:' . ($redirect ? 'inline' : 'none') . '">'
. '<input type="text" name="action_target" id="action_target"'
. ' value="' .($redirect ? rcube::Q($this->vacation['target'], 'strict', false) : '') . '"'
. (!empty($domains) ? ' size="20"' : ' size="35"') . '/>'
. (!empty($domains) ? ' @ ' . $domain_select->show($this->vacation['domain']) : '')
. '</span>';
// Message tab
$table = new html_table(array('cols' => 2));
@ -267,37 +401,336 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$table->add('title', html::label('vacation_reason', $this->plugin->gettext('vacation.body')));
$table->add(null, $reason->show($this->vacation['reason']));
if ($date_extension) {
$table->add('title', html::label('vacation_datefrom', $this->plugin->gettext('vacation.dates')));
$table->add(null,
$this->plugin->gettext('vacation.from'). ' ' . $date_from->show($date_value['from'])
. ' ' . $this->plugin->gettext('vacation.to'). ' ' . $date_to->show($date_value['to'])
);
if ($date_extension || $regex_extension) {
$table->add('title', html::label('vacation_datefrom', $this->plugin->gettext('vacation.start')));
$table->add(null, $date_from->show($date_value['from']) . ($time_from ? ' ' . $time_from->show($date_value['time_from']) : ''));
$table->add('title', html::label('vacation_dateto', $this->plugin->gettext('vacation.end')));
$table->add(null, $date_to->show($date_value['to']) . ($time_to ? ' ' . $time_to->show($date_value['time_to']) : ''));
}
$table->add('title', html::label('vacation_status', $this->plugin->gettext('vacation.status')));
$table->add(null, $status->show($this->vacation['disabled'] ? 'off' : 'on'));
$table->add(null, $status->show(!isset($this->vacation['disabled']) || $this->vacation['disabled'] ? 'off' : 'on'));
$out .= html::tag('fieldset', $class, html::tag('legend', null, $this->plugin->gettext('vacation.reply')) . $table->show($attrib));
// Advanced tab
$table = new html_table(array('cols' => 2));
$table->add('title', $this->plugin->gettext('vacation.addresses'));
$table->add('title', html::label('vacation_addresses', $this->plugin->gettext('vacation.addresses')));
$table->add(null, $addresses);
$table->add('title', $this->plugin->gettext('vacation.interval'));
$table->add('title', html::label('vacation_interval', $this->plugin->gettext('vacation.interval')));
$table->add(null, $interval_txt);
if ($after) {
$table->add('title', $this->plugin->gettext('vacation.after'));
$table->add('title', html::label('vacation_after', $this->plugin->gettext('vacation.after')));
$table->add(null, $after->show($this->vacation['idx'] - 1));
}
$table->add('title', html::label('vacation_action', $this->plugin->gettext('vacation.action')));
$table->add('vacation', $action->show($this->vacation['action']) . $action_target);
$out .= html::tag('fieldset', $class, html::tag('legend', null, $this->plugin->gettext('vacation.advanced')) . $table->show($attrib));
$out .= '</form>';
$this->rc->output->add_gui_object('sieveform', $form_id);
if ($time_format) {
$this->rc->output->set_env('time_format', $time_format);
}
return $out;
}
public static function build_regexp_tests($date_from, $date_to, &$error)
{
$tests = array();
$dt_from = rcube_utils::anytodatetime($date_from);
$dt_to = rcube_utils::anytodatetime($date_to);
$interval = $dt_from->diff($dt_to);
if ($interval->invert || $interval->days > 365) {
$error = 'managesieve.invaliddateformat';
return;
}
$dt_i = $dt_from;
$interval = new DateInterval('P1D');
$matchexp = '';
while (!$dt_i->diff($dt_to)->invert) {
$days = (int) $dt_i->format('d');
$matchexp .= $days < 10 ? "[ 0]$days" : $days;
if ($days == $dt_i->format('t') || $dt_i->diff($dt_to)->days == 0) {
$test = array(
'test' => 'header',
'type' => 'regex',
'arg1' => 'received',
'arg2' => '('.$matchexp.') '.$dt_i->format('M Y')
);
$tests[] = $test;
$matchexp = '';
}
else {
$matchexp .= '|';
}
$dt_i->add($interval);
}
return $tests;
}
public static function parse_regexp_tests($tests)
{
$rx_from = '/^\(([0-9]{2}).*\)\s([A-Za-z]+)\s([0-9]{4})/';
$rx_to = '/^\(.*([0-9]{2})\)\s([A-Za-z]+)\s([0-9]{4})/';
$result = array();
foreach ((array) $tests as $test) {
if ($test['test'] == 'header' && $test['type'] == 'regex' && $test['arg1'] == 'received') {
$textexp = preg_replace('/\[ ([^\]]*)\]/', '0', $test['arg2']);
if (!$result['from'] && preg_match($rx_from, $textexp, $matches)) {
$result['from'] = $matches[1]." ".$matches[2]." ".$matches[3];
}
if (preg_match($rx_to, $textexp, $matches)) {
$result['to'] = $matches[1]." ".$matches[2]." ".$matches[3];
}
}
}
return $result;
}
/**
* API: get vacation rule
*
* @return array Vacation rule information
*/
public function get_vacation()
{
$this->exts = $this->sieve->get_extensions();
$this->init_script();
$this->vacation_rule();
// check supported extensions
$date_extension = in_array('date', $this->exts);
$regex_extension = in_array('regex', $this->exts);
$seconds_extension = in_array('vacation-seconds', $this->exts);
// set user's timezone
try {
$timezone = new DateTimeZone($this->rc->config->get('timezone', 'GMT'));
}
catch (Exception $e) {
$timezone = new DateTimeZone('GMT');
}
if ($date_extension) {
$date_value = array();
foreach ((array) $this->vacation['tests'] as $test) {
if ($test['test'] == 'currentdate') {
$idx = $test['type'] == 'value-ge' ? 'start' : 'end';
if ($test['part'] == 'date') {
$date_value[$idx]['date'] = $test['arg'];
}
else if ($test['part'] == 'iso8601') {
$date_value[$idx]['datetime'] = $test['arg'];
}
}
}
foreach ($date_value as $idx => $value) {
$$idx = new DateTime($value['datetime'] ?: $value['date'], $timezone);
}
}
else if ($regex_extension) {
// Sieve 'date' extension not available, read start/end from RegEx based rules instead
if ($date_tests = self::parse_regexp_tests($this->vacation['tests'])) {
$from = new DateTime($date_tests['from'] . ' ' . '00:00:00', $timezone);
$to = new DateTime($date_tests['to'] . ' ' . '23:59:59', $timezone);
}
}
if (isset($this->vacation['seconds'])) {
$interval = $this->vacation['seconds'] . 's';
}
else if (isset($this->vacation['days'])) {
$interval = $this->vacation['days'] . 'd';
}
$vacation = array(
'supported' => $this->exts,
'interval' => $interval,
'start' => $start,
'end' => $end,
'enabled' => $this->vacation['reason'] && empty($this->vacation['disabled']),
'message' => $this->vacation['reason'],
'subject' => $this->vacation['subject'],
'action' => $this->vacation['action'],
'target' => $this->vacation['target'],
'addresses' => $this->vacation['addresses'],
);
return $vacation;
}
/**
* API: set vacation rule
*
* @param array $vacation Vacation rule information (see self::get_vacation())
*
* @return bool True on success, False on failure
*/
public function set_vacation($data)
{
$this->exts = $this->sieve->get_extensions();
$this->error = false;
$this->init_script();
$this->vacation_rule();
// check supported extensions
$date_extension = in_array('date', $this->exts);
$regex_extension = in_array('regex', $this->exts);
$seconds_extension = in_array('vacation-seconds', $this->exts);
$vacation['type'] = 'vacation';
$vacation['reason'] = $this->strip_value(str_replace("\r\n", "\n", $data['message']));
$vacation['addresses'] = $data['addresses'];
$vacation['subject'] = $data['subject'];
$vacation_tests = (array) $this->vacation['tests'];
foreach ((array) $vacation['addresses'] as $aidx => $address) {
$vacation['addresses'][$aidx] = $address = trim($address);
if (empty($address)) {
unset($vacation['addresses'][$aidx]);
}
else if (!rcube_utils::check_email($address)) {
$this->error = "Invalid address in vacation addresses: $address";
return false;
}
}
if ($vacation['reason'] == '') {
$this->error = "No vacation message specified";
return false;
}
if ($data['interval']) {
if (!preg_match('/^([0-9]+)\s*([sd])$/', $data['interval'], $m)) {
$this->error = "Invalid vacation interval value: " . $data['interval'];
return false;
}
else if ($m[1]) {
$vacation[strtolower($m[2]) == 's' ? 'seconds' : 'days'] = $m[1];
}
}
// find and remove existing date/regex/true rules
foreach ((array) $vacation_tests as $idx => $t) {
if ($t['test'] == 'currentdate' || $t['test'] == 'true'
|| ($t['test'] == 'header' && $t['type'] == 'regex' && $t['arg1'] == 'received')
) {
unset($vacation_tests[$idx]);
}
}
if ($date_extension) {
foreach (array('start', 'end') as $var) {
if ($dt = $data[$var]) {
$vacation_tests[] = array(
'test' => 'currentdate',
'part' => 'iso8601',
'type' => 'value-' . ($var == 'start' ? 'ge' : 'le'),
'zone' => $dt->format('O'),
'arg' => str_replace('+00:00', 'Z', strtoupper($dt->format('c'))),
);
}
}
}
else if ($regex_extension) {
// Add date range rules if range specified
if ($data['start'] && $data['end']) {
if ($tests = self::build_regexp_tests($data['start'], $data['end'], $error)) {
$vacation_tests = array_merge($vacation_tests, $tests);
}
if ($error) {
$this->error = "Invalid dates specified or unsupported period length";
return false;
}
}
}
if ($data['action'] == 'redirect' || $data['action'] == 'copy') {
if (empty($data['target']) || !rcube_utils::check_email($data['target'])) {
$this->error = "Invalid address in action taget: " . $data['target'];
return false;
}
}
else if ($data['action'] && $data['action'] != 'keep' && $data['action'] != 'discard') {
$this->error = "Unsupported vacation action: " . $data['action'];
return false;
}
if (empty($vacation_tests)) {
$vacation_tests = $this->rc->config->get('managesieve_vacation_test', array(array('test' => 'true')));
}
// @TODO: handle situation when there's no active script
$rule = $this->vacation;
$rule['type'] = 'if';
$rule['name'] = $rule['name'] ?: 'Out-of-Office';
$rule['disabled'] = isset($data['enabled']) && !$data['enabled'];
$rule['tests'] = $vacation_tests;
$rule['join'] = $date_extension ? count($vacation_tests) > 1 : false;
$rule['actions'] = array($vacation);
if ($data['action'] && $data['action'] != 'keep') {
$rule['actions'][] = array(
'type' => $data['action'] == 'discard' ? 'discard' : 'redirect',
'copy' => $data['action'] == 'copy',
'target' => $data['action'] != 'discard' ? $data['target'] : '',
);
}
// reset original vacation rule
if (isset($this->vacation['idx'])) {
$this->script[$this->vacation['idx']] = null;
}
array_unshift($this->script, $rule);
$this->sieve->script->content = array_values(array_filter($this->script));
return $this->save_script();
}
/**
* API: connect to managesieve server
*/
public function connect($username, $password)
{
if (!parent::connect($username, $password)) {
return $this->load_script();
}
}
/**
* API: Returns last error
*
* @return string Error message
*/
public function get_error()
{
return $this->error;
}
}

@ -0,0 +1,50 @@
<?php
/*
+-----------------------------------------------------------------------+
| plugins/managesieve/localization/<lang>.inc |
| |
| Localization file of the Roundcube Webmail Managesieve plugin |
| Copyright (C) 2012-2013, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/
$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Alministrar filtros de corréu entrante';
$labels['filtername'] = 'Nome del filtru';
$labels['newfilter'] = 'Filtru nuevu';
$labels['filteradd'] = 'Amestar filtru';
$labels['filterdel'] = 'Desaniciar filtru';
$labels['moveup'] = 'Mover arriba';
$labels['movedown'] = 'Mover abaxo';
$labels['filterany'] = 'tolos mensaxes';
$labels['filtercontains'] = 'contien';
$labels['filternotcontains'] = 'nun contien';
$labels['filteris'] = 'ye igual a';
$labels['filterisnot'] = 'nun ye igual a';
$labels['filterexists'] = 'esiste';
$labels['filternotexists'] = 'nun esiste';
$labels['filtermatches'] = 'espresiones que concasen';
$labels['filternotmatches'] = 'espresiones que nun concasen';
$labels['addrule'] = 'Amestar regla';
$labels['delrule'] = 'Desaniciar regla';
$labels['messagemoveto'] = 'Mover mensaxe a';
$labels['messageredirect'] = 'Redireicionar mensaxe a';
$labels['messagecopyto'] = 'Copiar mensaxe a';
$labels['messagedelete'] = 'Desaniciar mensaxe';
$labels['messagesrules'] = 'Pa corréu entrante:';
$labels['messagesactions'] = '...executar les aiciones siguientes:';
$labels['add'] = 'Amestar';
$labels['del'] = 'Desaniciar';
$labels['sender'] = 'Remitente';
$labels['enable'] = 'Habilitar/Deshabilitar';
$labels['flagread'] = 'Lleer';
$labels['flagdeleted'] = 'Desaniciáu';
$labels['flaganswered'] = 'Respondíu';
?>

@ -0,0 +1,30 @@
<?php
/*
+-----------------------------------------------------------------------+
| plugins/managesieve/localization/<lang>.inc |
| |
| Localization file of the Roundcube Webmail Managesieve plugin |
| Copyright (C) 2012-2013, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/
$labels['filters'] = 'sil';
$labels['newfilter'] = 'Sil nevez';
$labels['filteradd'] = 'Ouzhpenan ur sil';
$labels['filterdel'] = 'Dilemel ar sil';
$labels['filterany'] = 'An holl postel';
$labels['messagecopyto'] = 'eilan ar postel e';
$labels['messagedelete'] = 'Dilemel ar postel';
$labels['add'] = 'Ouzhpenan';
$labels['del'] = 'Dilemel';
$labels['sender'] = 'Kaser';
$labels['recipient'] = 'Resever';
$labels['vacationsubject'] = 'Sujed';
?>

@ -57,10 +57,10 @@ $labels['recipient'] = 'Primaoc';
$labels['vacationaddr'] = 'Moje dodatne email adrese:';
$labels['vacationdays'] = 'Frekvencija slanja poruka (u danima):';
$labels['vacationinterval'] = 'Frekvencija slanja poruka:';
$labels['days'] = 'dana';
$labels['seconds'] = 'sekundi';
$labels['vacationreason'] = 'Tijelo poruke (razlog za odmor):';
$labels['vacationsubject'] = 'Naslov poruke:';
$labels['days'] = 'dana';
$labels['seconds'] = 'sekundi';
$labels['rulestop'] = 'Prestani procjenjivati pravila';
$labels['enable'] = 'Omogući/Onemogući';
$labels['filterset'] = 'Set filtera';
@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'prvi znak velikim slovom';
$labels['varquotewildcard'] = 'citiraj specijalne znakove';
$labels['varlength'] = 'dužina';
$labels['notify'] = 'Pošalji napomenu';
$labels['notifyaddress'] = 'Na email adresu:';
$labels['notifybody'] = 'Sadržaj napomene:';
$labels['notifysubject'] = 'Naslov napomene:';
$labels['notifyfrom'] = 'Pošiljalac napomene:';
$labels['notifytarget'] = 'Odredište napomene:';
$labels['notifymessage'] = 'Poruka napomene (neobavezno):';
$labels['notifyoptions'] = 'Opcije napomene (neobavezno):';
$labels['notifyfrom'] = 'Pošiljalac napomene (neobavezno):';
$labels['notifyimportance'] = 'Prioritet:';
$labels['notifyimportancelow'] = 'mali';
$labels['notifyimportancenormal'] = 'obični';
$labels['notifyimportancehigh'] = 'veliki';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Kreiraj filter';
$labels['usedata'] = 'Koristite sljedeće podatke u filteru:';
$labels['nextstep'] = 'Sljedeći korak';
@ -157,6 +160,33 @@ $labels['asciicasemap'] = 'osjetljivo na velika/mala slova (ascii-casemap)';
$labels['asciinumeric'] = 'numerički (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'unazad';
$labels['vacation'] = 'Odmor';
$labels['vacation.reply'] = 'Poruka sa odgovorom';
$labels['vacation.advanced'] = 'Napredmen postavke';
$labels['vacation.subject'] = 'Naslov';
$labels['vacation.body'] = 'Tijelo';
$labels['vacation.dates'] = 'Vrijeme odmora';
$labels['vacation.from'] = 'Od:';
$labels['vacation.to'] = 'Do:';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Uključeno';
$labels['vacation.off'] = 'Isključeno';
$labels['vacation.addresses'] = 'Moje dodatne adrese';
$labels['vacation.interval'] = 'Interval odgovora';
$labels['vacation.after'] = 'Pravilo za odmor stavi nakon';
$labels['vacation.saving'] = 'Snimam podatke...';
$labels['vacation.action'] = 'Akcija za dolazne poruke';
$labels['vacation.keep'] = 'Zadrži';
$labels['vacation.discard'] = 'Odbaci';
$labels['vacation.redirect'] = 'Preusmeri ka';
$labels['vacation.copy'] = 'Pošalji kopiju na';
$labels['arialabelfiltersetactions'] = 'Akcije za filterske setove';
$labels['arialabelfilteractions'] = 'Filterske akcije';
$labels['arialabelfilterform'] = 'Svojstva filtera';
$labels['ariasummaryfilterslist'] = 'Lista filtera';
$labels['ariasummaryfiltersetslist'] = 'Lista filterskih setova';
$labels['filterstitle'] = 'Uredi filtere za dolazni email';
$labels['vacationtitle'] = 'Uredi pravila kada nisam na poslu';
$messages['filterunknownerror'] = 'Nepoznata serverska greška.';
$messages['filterconnerror'] = 'Nije se moguće povezati na server.';
$messages['filterdeleteerror'] = 'Nije moguće obrisati filter. Desila se serverska greška.';
@ -189,4 +219,7 @@ $messages['namereserved'] = 'Ime je rezervisano.';
$messages['setexist'] = 'Set već postoji.';
$messages['nodata'] = 'Morate označiti barem jednu poziciju!';
$messages['invaliddateformat'] = 'Netačan datum ili dio formata datuma';
$messages['saveerror'] = 'Nije moguće snimiti podatke. Desila se serverska greška.';
$messages['vacationsaved'] = 'Podaci o odmoru su uspješno snimljeni.';
$messages['emptyvacationbody'] = 'Tijelo poruke za odmor je neophodno!';
?>

@ -167,9 +167,8 @@ $labels['vacation.reply'] = 'Reply message';
$labels['vacation.advanced'] = 'Advanced settings';
$labels['vacation.subject'] = 'Subject';
$labels['vacation.body'] = 'Body';
$labels['vacation.dates'] = 'Vacation time';
$labels['vacation.from'] = 'From:';
$labels['vacation.to'] = 'To:';
$labels['vacation.start'] = 'Vacation start';
$labels['vacation.end'] = 'Vacation end';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'On';
$labels['vacation.off'] = 'Off';
@ -177,6 +176,18 @@ $labels['vacation.addresses'] = 'My additional addresses';
$labels['vacation.interval'] = 'Reply interval';
$labels['vacation.after'] = 'Put vacation rule after';
$labels['vacation.saving'] = 'Saving data...';
$labels['vacation.action'] = 'Incoming message action';
$labels['vacation.keep'] = 'Keep';
$labels['vacation.discard'] = 'Discard';
$labels['vacation.redirect'] = 'Redirect to';
$labels['vacation.copy'] = 'Send copy to';
$labels['arialabelfiltersetactions'] = 'Filter set actions';
$labels['arialabelfilteractions'] = 'Filter actions';
$labels['arialabelfilterform'] = 'Filter properties';
$labels['ariasummaryfilterslist'] = 'List of filters';
$labels['ariasummaryfiltersetslist'] = 'List of filter sets';
$labels['filterstitle'] = 'Edit incoming mail filters';
$labels['vacationtitle'] = 'Edit out-of-office rule';
$messages = array();
$messages['filterunknownerror'] = 'Unknown server error.';
@ -213,5 +224,6 @@ $messages['nodata'] = 'At least one position must be selected!';
$messages['invaliddateformat'] = 'Invalid date or date part format';
$messages['saveerror'] = 'Unable to save data. Server error occurred.';
$messages['vacationsaved'] = 'Vacation data saved successfully.';
$messages['emptyvacationbody'] = 'Body of vacation message is required!';
?>

@ -54,17 +54,27 @@ $labels['add'] = 'Agregar';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remitente';
$labels['recipient'] = 'Destinatario';
$labels['vacationdays'] = '¿Cada cuánto enviar mensajes (en días)?';
$labels['vacationinterval'] = '¿Con que frecuencia enviar mensajes?';
$labels['vacationaddr'] = 'Mis direccion(es) adiconal(es):';
$labels['vacationdays'] = 'Cuan a menudo enviar mensajes (en días):';
$labels['vacationinterval'] = '¿Con qué frecuencia enviar mensajes?:';
$labels['vacationreason'] = 'Cuerpo del mensaje (motivo de las vacaciones):';
$labels['vacationsubject'] = 'Asunto del mensaje:';
$labels['days'] = 'días';
$labels['seconds'] = 'segundos';
$labels['vacationreason'] = 'Cuerpo del mensaje (motivo de las vacaciones):';
$labels['vacationsubject'] = 'Título del mensaje:';
$labels['rulestop'] = 'Detener la evaluación de reglas';
$labels['enable'] = 'Habilitar/Deshabilitar';
$labels['filterset'] = 'Set de filtros';
$labels['filtersets'] = 'Filtro acciona';
$labels['filtersetadd'] = 'Agregar set de filtros';
$labels['filtersetdel'] = 'Eliminar set de filtros actual';
$labels['filtersetact'] = 'Activar set de filtros actual';
$labels['filtersetdeact'] = 'Desactivar set de filtros actual';
$labels['filterdef'] = 'Definición del filtro';
$labels['filtersetname'] = 'Nombre del set de filtros';
$labels['newfilterset'] = 'Nuevo set de filtros';
$labels['active'] = 'activo';
$labels['none'] = 'ninguno';
$labels['fromset'] = 'desde set';
$labels['fromfile'] = 'desde archivo';
$labels['filterdisabled'] = 'filtro deshabilitado';
$labels['countisgreaterthan'] = 'la cuenta es mayor a';
@ -72,15 +82,22 @@ $labels['countisgreaterthanequal'] = 'la cuenta es mayor o igual a ';
$labels['countislessthan'] = 'la cuenta es menor que';
$labels['countislessthanequal'] = 'la cuenta es menor o igual que';
$labels['countequals'] = 'la cuenta es igual a ';
$labels['countnotequals'] = 'la cuenta no es menor a';
$labels['valueisgreaterthan'] = 'el valor es mayor que';
$labels['valueisgreaterthanequal'] = 'el balor es mayor o igual que ';
$labels['valueislessthan'] = 'el valor es menor que ';
$labels['valueislessthanequal'] = 'el valor es menor o igual que ';
$labels['valueequals'] = 'el valor es igual a ';
$labels['valuenotequals'] = 'el valor no es igual a';
$labels['setflags'] = 'Colocar etiquetas al mensaje';
$labels['addflags'] = 'Agrega etiquetas al mensaje';
$labels['removeflags'] = 'Eliminar etiquetas al mensaje';
$labels['flagread'] = 'Leido';
$labels['flagdeleted'] = 'Eliminado';
$labels['flaganswered'] = 'Respondido';
$labels['flagflagged'] = 'Etiquetado';
$labels['flagdraft'] = 'Borrador';
$labels['setvariable'] = 'Establecer variable';
$labels['setvarname'] = 'Nombre de la variable:';
$labels['setvarvalue'] = 'Valor de la variable:';
$labels['setvarmodifiers'] = 'Modificadores:';
@ -91,30 +108,36 @@ $labels['varupperfirst'] = 'primer carácter en mayúscula';
$labels['varquotewildcard'] = 'citar carácteres especiales';
$labels['varlength'] = 'largo';
$labels['notify'] = 'Enviar notificación';
$labels['notifyaddress'] = 'A la direccion de correo:';
$labels['notifybody'] = 'Cuerpo de la notificación:';
$labels['notifysubject'] = 'Tema de la notificación:';
$labels['notifyfrom'] = 'Remitente de la notificación: ';
$labels['notifyimportance'] = 'Importantcia:';
$labels['notifytarget'] = 'Destinatario de la notificación:';
$labels['notifymessage'] = 'Mensaje de notificación (opcional):';
$labels['notifyoptions'] = 'Opciones de notificación (opcional):';
$labels['notifyfrom'] = 'Remitente de la notificación (opcional):';
$labels['notifyimportance'] = 'Importancia:';
$labels['notifyimportancelow'] = 'baja';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Correo electrónico';
$labels['notifymethodtel'] = 'Teléfono';
$labels['notifymethodsms'] = 'Mensaje de texto';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar los datos siguientes en el filtro:';
$labels['nextstep'] = 'Paso siguiente';
$labels['...'] = '...';
$labels['currdate'] = 'Fecha actual';
$labels['datetest'] = 'Fecha';
$labels['year'] = 'Año';
$labels['dateheader'] = 'encabezado:';
$labels['year'] = 'año';
$labels['month'] = 'mes';
$labels['day'] = 'día';
$labels['date'] = 'fecha(aaaa-mm-dd)';
$labels['julian'] = 'fecha (julian)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'fecha (ISO8601)';
$labels['std11'] = 'fecha (RFC2822)';
$labels['zone'] = 'zona horaria';
$labels['weekday'] = 'día de la semana (0-6)';
$labels['advancedopts'] = 'Opciones avanzadas';
$labels['body'] = 'Cuerpo';
@ -132,22 +155,71 @@ $labels['user'] = 'usuario';
$labels['detail'] = 'detalle';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'predeterminado';
$labels['octet'] = 'estricto';
$labels['asciinumeric'] = 'numérico (ascii-numeric)';
$messages['filterunknownerror'] = 'Error del servidor desconocido.';
$messages['filterconnerror'] = 'Incapaz de conectarse al servidor.';
$labels['octet'] = 'estricto (octeto)';
$labels['asciicasemap'] = 'no sensible a mayúsculas y minúsculas (mapero-ascii)';
$labels['asciinumeric'] = 'numérico (ascii-numérico)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'hacia atrás';
$labels['vacation'] = 'Vacaciones';
$labels['vacation.reply'] = 'Responder mensaje';
$labels['vacation.advanced'] = 'Opciones avanzadas';
$labels['vacation.subject'] = 'Asunto';
$labels['vacation.body'] = 'Cuerpo';
$labels['vacation.dates'] = 'Horario de vacaciones';
$labels['vacation.from'] = 'De:';
$labels['vacation.to'] = 'Para:';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Encendido';
$labels['vacation.off'] = 'Apagado';
$labels['vacation.addresses'] = 'Mis direcciones adicionales';
$labels['vacation.interval'] = 'Intervalo de respuesta';
$labels['vacation.after'] = 'Colocar regla de vacaciones luego';
$labels['vacation.saving'] = 'Guardando información...';
$labels['vacation.action'] = 'Acción para mensaje entrante';
$labels['vacation.keep'] = 'Mantener';
$labels['vacation.discard'] = 'Descartar';
$labels['vacation.redirect'] = 'Redireccionar a';
$labels['vacation.copy'] = 'Enviar una copia a';
$labels['arialabelfiltersetactions'] = 'Acciones del set de filtros';
$labels['arialabelfilteractions'] = 'Acciones de filtros';
$labels['arialabelfilterform'] = 'Propiedades de filtros';
$labels['ariasummaryfilterslist'] = 'Lista de filtros';
$labels['ariasummaryfiltersetslist'] = 'Lista de set de filtros';
$labels['filterstitle'] = 'Administrar filtros de correos entrantes';
$labels['vacationtitle'] = 'Editar regla de fuera de oficina';
$messages['filterunknownerror'] = 'Error de servidor desconocido.';
$messages['filterconnerror'] = 'No se puede conectar al servidor.';
$messages['filterdeleteerror'] = 'No se puede eliminar el filtro. Ocurrió un error de servidor.';
$messages['filterdeleted'] = 'Filtro eliminado exitosamente.';
$messages['filtersaved'] = 'Filtro guardado exitosamente.';
$messages['filtersaveerror'] = 'No es posible guardar el filtro. Ha ocurrido un error de servidor.';
$messages['filterdeleteconfirm'] = '¿Estás seguro que quieres eliminar el filtro seleccionado?';
$messages['ruledeleteconfirm'] = '¿Estás seguro que quieres eliminar la regla seleccionada?';
$messages['actiondeleteconfirm'] = '¿Estás seguro que queires eliminar la acción seleccionada?';
$messages['forbiddenchars'] = 'Carácteres ilegales en el campo.';
$messages['cannotbeempty'] = 'El campo no puede estar vacio.';
$messages['ruleexist'] = 'Ya existe un filtro con el nombre especificado.';
$messages['setactivateerror'] = 'No es posible activar el set de filtros seleccionado. Ha ocurrido un error de servidor.';
$messages['setdeactivateerror'] = 'No es posible desactivar el set de filtros selecciona. Ha ocurrido un error de servidor.';
$messages['setdeleteerror'] = 'No es posible eliminar el set de filtros seleccionado. Ha ocurrido un error de servidor.';
$messages['setactivated'] = 'Set de filtros activado exitosamente.';
$messages['setdeactivated'] = 'Set de filtros desactivado exitosamente.';
$messages['setdeleted'] = 'Set de filtroseliminado exitosamente.';
$messages['setdeleteconfirm'] = '¿Estas seguro que deseas eliminar el set de filtros seleccionado?';
$messages['setcreateerror'] = 'No es posible crear el set de filtros. Ha ocurrido un error de servidor.';
$messages['setcreated'] = 'Set de filtros creado exitosamente.';
$messages['activateerror'] = 'No es posible habilitar los filtros seleccionados. Ha ocurrido un error de servidor.';
$messages['deactivateerror'] = 'No es posible deshabilitar los filtros seleccionados. Ha ocurrido un error de servidor.';
$messages['deactivated'] = 'Filtro(s) deshabilitado(s) exitosamente.';
$messages['activated'] = 'Filtro(s) habilitado(s) exitosamente.';
$messages['moved'] = 'Filtro movido exitosamente.';
$messages['moveerror'] = 'No es posible mover los filtros seleccionados. Ha ocurrido un error de servidor.';
$messages['nametoolong'] = 'Nombre demasiado largo.';
$messages['namereserved'] = 'Nombre reservado.';
$messages['setexist'] = 'Set ya existe.';
$messages['nodata'] = 'Debes seleccionar al menos una posición.';
$messages['invaliddateformat'] = 'Fecha o parte del formato no válido';
$messages['saveerror'] = 'No es posible guardar la información. Ha ocurrido un error de servidor.';
$messages['vacationsaved'] = 'Información de vacaciones guardada exitosamente.';
$messages['emptyvacationbody'] = 'Cuerpo del mensaje de vacaciones es requerido!';
?>

@ -32,6 +32,10 @@ $labels['filteris'] = 'es igual a';
$labels['filterisnot'] = 'no es igual a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'no existe';
$labels['filtermatches'] = 'coincide con la expresión';
$labels['filternotmatches'] = 'no coindice con la expresión';
$labels['filterregex'] = 'coincide con la expresión regular';
$labels['filternotregex'] = 'no coincide con la expresión regular';
$labels['filterunder'] = 'bajo';
$labels['filterover'] = 'sobre';
$labels['addrule'] = 'Agregar regla';
@ -43,16 +47,24 @@ $labels['messagesendcopy'] = 'Enviar copia del mensaje a';
$labels['messagereply'] = 'Responder con un mensaje';
$labels['messagedelete'] = 'Eliminar mensaje';
$labels['messagediscard'] = 'Descartar con un mensaje';
$labels['messagekeep'] = 'Mantener mensajes en bandeja de entrada';
$labels['messagesrules'] = 'Para el correo entrante:';
$labels['messagesactions'] = '... ejecutar las siguientes acciones:';
$labels['add'] = 'Agregar';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remitente';
$labels['recipient'] = 'Destinatario';
$labels['vacationaddr'] = 'Mi(s) direccion(es) de e-mail adicional(es):';
$labels['vacationdays'] = 'Cada cuanto enviar mensajes (en días):';
$labels['vacationinterval'] = 'Enviar mensajes cada:';
$labels['vacationreason'] = 'Cuerpo del mensaje (razón de vacaciones):';
$labels['vacationsubject'] = 'Asunto del mensaje:';
$labels['days'] = 'dias';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de evaluar reglas';
$labels['enable'] = 'Habilitar/Deshabilitar';
$labels['filterset'] = 'Conjunto de filtros';
$labels['filtersets'] = 'Filtro activa';
$labels['filtersetadd'] = 'Agregar conjunto de filtros';
$labels['filtersetdel'] = 'Eliminar conjunto de filtros';
$labels['filtersetact'] = 'Activar conjunto de filtros';
@ -65,19 +77,149 @@ $labels['none'] = 'none';
$labels['fromset'] = 'desde conjunto';
$labels['fromfile'] = 'desde archivo';
$labels['filterdisabled'] = 'Filtro deshabilitado';
$labels['countisgreaterthan'] = 'la cuenta es mayor a';
$labels['countisgreaterthanequal'] = 'la cuenta es mayor o igual a';
$labels['countislessthan'] = 'la cuenta es menor a';
$labels['countislessthanequal'] = 'la cuenta es menor o igual a';
$labels['countequals'] = 'la cuenta es igual a';
$labels['countnotequals'] = 'la cuenta no es igual a';
$labels['valueisgreaterthan'] = 'el valor es mayor a';
$labels['valueisgreaterthanequal'] = 'el valor es mayor o igual a';
$labels['valueislessthan'] = 'el valor es menor a';
$labels['valueislessthanequal'] = 'el valor es menor o igual a';
$labels['valueequals'] = 'el valor es igual a';
$labels['valuenotequals'] = 'el valor no es igual a';
$labels['setflags'] = 'Configurar marcas del mensaje';
$labels['addflags'] = 'Agregar marcas al mensaje';
$labels['removeflags'] = 'Eliminar marcas del mensaje';
$labels['flagread'] = 'Leer';
$labels['flagdeleted'] = 'Eliminado';
$labels['flaganswered'] = 'Respondido';
$labels['flagflagged'] = 'Marcado';
$labels['flagdraft'] = 'Borrador';
$labels['setvariable'] = 'Setear variable';
$labels['setvarname'] = 'Nombre de variable:';
$labels['setvarvalue'] = 'Valor de variable:';
$labels['setvarmodifiers'] = 'Modificadores:';
$labels['varlower'] = 'minúscula';
$labels['varupper'] = 'mayúscula';
$labels['varlowerfirst'] = 'primer caracter en minúscula';
$labels['varupperfirst'] = 'primer caracter en mayúscula';
$labels['varquotewildcard'] = 'citar caracteres especiales';
$labels['varlength'] = 'longitud';
$labels['notify'] = 'Enviar notificación';
$labels['notifytarget'] = 'Objetivo de la notificación:';
$labels['notifymessage'] = 'Mensaje de notificación (opcional):';
$labels['notifyoptions'] = 'Opciones de notificación (opcional):';
$labels['notifyfrom'] = 'Remitente de la notificación (opcional):';
$labels['notifyimportance'] = 'Importancia:';
$labels['notifyimportancelow'] = 'baja';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Teléfono';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar la siguiente información en el filtro:';
$labels['nextstep'] = 'Siguiente paso';
$labels['...'] = '...';
$labels['currdate'] = 'Fecha actual';
$labels['datetest'] = 'Fecha';
$labels['dateheader'] = 'encabezado:';
$labels['year'] = 'año';
$labels['month'] = 'mes';
$labels['day'] = 'dia';
$labels['date'] = 'fecha (yyyy-mm-dd)';
$labels['julian'] = 'fecha (juliano)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'fecha (ISO8601)';
$labels['std11'] = 'fecha (RFC2822)';
$labels['zone'] = 'zona horaria';
$labels['weekday'] = 'día de la semana (0-6)';
$labels['advancedopts'] = 'Opciones avanzadas';
$labels['body'] = 'Cuerpo';
$labels['address'] = 'dirección';
$labels['envelope'] = 'envoltura';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'sin decodificar (crudo)';
$labels['contenttype'] = 'tipo de contenido';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todo';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'usuario';
$labels['detail'] = 'detalle';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'por defecto';
$labels['octet'] = 'estricto (octeto)';
$labels['asciicasemap'] = 'no sensible a minúsculas o mayúsculas (ascii-casemap)';
$labels['asciinumeric'] = 'numérico (ascii-numeric)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'hacia atrás';
$labels['vacation'] = 'Vacaciones';
$labels['vacation.reply'] = 'Responder mensaje';
$labels['vacation.advanced'] = 'Opciones avanzdas';
$labels['vacation.subject'] = 'Asunto';
$labels['vacation.body'] = 'Cuerpo';
$labels['vacation.dates'] = 'Período de vacaciones';
$labels['vacation.from'] = 'De:';
$labels['vacation.to'] = 'Para:';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'On';
$labels['vacation.off'] = 'Off';
$labels['vacation.addresses'] = 'Mis direcciones adicionales';
$labels['vacation.interval'] = 'Intervalo de respuesta';
$labels['vacation.after'] = 'Colocar luego regla de vacaciones ';
$labels['vacation.saving'] = 'Guardando información...';
$labels['vacation.action'] = 'Acción para mensaje entrante';
$labels['vacation.keep'] = 'Mantener';
$labels['vacation.discard'] = 'Descartar';
$labels['vacation.redirect'] = 'Reenviar a';
$labels['vacation.copy'] = 'Enviar copia a';
$labels['arialabelfiltersetactions'] = 'Acciones de conjunto de filtros';
$labels['arialabelfilteractions'] = 'Filtrar acciones';
$labels['arialabelfilterform'] = 'Filtrar propiedades';
$labels['ariasummaryfilterslist'] = 'Listado de filtros';
$labels['ariasummaryfiltersetslist'] = 'Listado de conjunto de filtros';
$labels['filterstitle'] = 'Editar filtros para mensajes entrantes';
$labels['vacationtitle'] = 'Editar reglas "fuera de la oficina"';
$messages['filterunknownerror'] = 'Error desconocido de servidor';
$messages['filterconnerror'] = 'Imposible conectar con el servidor managesieve';
$messages['filterdeleteerror'] = 'Imposible borrar filtro. Ha ocurrido un error en el servidor';
$messages['filterdeleted'] = 'Filtro borrado satisfactoriamente';
$messages['filtersaved'] = 'Filtro guardado satisfactoriamente';
$messages['filtersaveerror'] = 'Imposible guardar ell filtro. Ha ocurrido un error en el servidor';
$messages['filterdeleteconfirm'] = '¿Realmente desea borrar el filtro seleccionado?';
$messages['ruledeleteconfirm'] = '¿Está seguro de que desea borrar la regla seleccionada?';
$messages['actiondeleteconfirm'] = '¿Está seguro de que desea borrar la acción seleccionada?';
$messages['forbiddenchars'] = 'Caracteres prohibidos en el campo';
$messages['cannotbeempty'] = 'El campo no puede estar vacío';
$messages['ruleexist'] = 'El filtro con el nombre especificado ya existe.';
$messages['setactivateerror'] = 'Imposible activar el conjunto de filtros. Error en el servidor.';
$messages['setdeactivateerror'] = 'Imposible desactivar el conjunto de filtros. Error en el servidor.';
$messages['setdeleteerror'] = 'Imposible eliminar el conjunto de filtros. Error en el servidor.';
$messages['setactivated'] = 'Conjunto de filtros activados correctamente';
$messages['setdeactivated'] = 'Conjunto de filtros desactivados correctamente';
$messages['setdeleted'] = 'Conjunto de filtros eliminados correctamente';
$messages['setdeleteconfirm'] = '¿Esta seguro, que quiere eliminar el conjunto de filtros seleccionado?';
$messages['setcreateerror'] = 'Imposible crear el conjunto de filtros. Error en el servidor.';
$messages['setcreated'] = 'Conjunto de filtros creados correctamente';
$messages['nametoolong'] = 'Imposible crear el conjunto de filtros. Nombre del conjunto de filtros muy largo';
$messages['activateerror'] = 'Imposible activar el conjunto de filtros. Error en el servidor.';
$messages['deactivateerror'] = 'Imposible desactivar el conjunto de filtros. Error en el servidor.';
$messages['deactivated'] = 'Filtro deshabilitado satisfactoriamente';
$messages['activated'] = 'Filtro habilitado satisfactoriamente';
$messages['moved'] = 'Filtro movido satisfactoriamente';
$messages['moveerror'] = 'Imposible mover el filtro seleccionado. Ha ocurrido un error en el servidor.';
$messages['nametoolong'] = 'El nombre es demasiado largo.';
$messages['namereserved'] = 'Nombre reservado.';
$messages['setexist'] = 'Conjunto ya existe.';
$messages['nodata'] = 'Al menos una posición debe ser seleccionada!';
$messages['invaliddateformat'] = 'Fecha o formato de fecha inválido';
$messages['saveerror'] = 'Imposible guardar la información. Ha ocurrido un error con el servidor.';
$messages['vacationsaved'] = 'Información de vacaciones guardada satisfactoriamente.';
$messages['emptyvacationbody'] = '¡Se requiere un cuerpo para el mensaje por vacaciones!';
?>

@ -32,13 +32,30 @@ $labels['filteris'] = 'on samanlainen kuin';
$labels['filterisnot'] = 'ei ole samanlainen kuin';
$labels['filterexists'] = 'on olemassa';
$labels['filternotexists'] = 'ei ole olemassa';
$labels['filtermatches'] = 'vastaa lauseketta';
$labels['filternotmatches'] = 'ei vastaa lauseketta';
$labels['filterregex'] = 'vastaa säännöllistä lauseketta';
$labels['filternotregex'] = 'ei vastaa säännöllistä lauseketta';
$labels['filterunder'] = 'alle';
$labels['filterover'] = 'yli';
$labels['addrule'] = 'Lisää sääntö';
$labels['delrule'] = 'Poista sääntö';
$labels['messagemoveto'] = 'Siirrä viesti';
$labels['messageredirect'] = 'Lähetä viesti edelleen';
$labels['messagecopyto'] = 'Kopioi viesti';
$labels['messagesendcopy'] = 'Lähetä kopio viestistä';
$labels['messagereply'] = 'Vastaa viestillä';
$labels['messagedelete'] = 'Poista viesti';
$labels['messagediscard'] = 'Hylkää viestillä';
$labels['messagekeep'] = 'Säilytä viesti saapuneissa';
$labels['messagesactions'] = '...suorita seuraavat toiminnot:';
$labels['add'] = 'Lisää';
$labels['del'] = 'Poista';
$labels['sender'] = 'Lähettäjä';
$labels['recipient'] = 'Vastaanottaja';
$labels['vacationsubject'] = 'Viestin aihe:';
$labels['days'] = 'päivää';
$labels['seconds'] = 'sekuntia';
$labels['setflags'] = 'Aseta liput viestiin';
$labels['addflags'] = 'Lisää liput viestiin';
$labels['removeflags'] = 'Poista liput viestistä';
@ -50,14 +67,44 @@ $labels['setvariable'] = 'Aseta muuttuja';
$labels['setvarname'] = 'Muuttujan nimi:';
$labels['setvarvalue'] = 'Muuttujan arvo:';
$labels['notifyimportance'] = 'Tärkeysaste:';
$labels['notifymethodmailto'] = 'Sähköposti';
$labels['notifymethodtel'] = 'Puhelin';
$labels['notifymethodsms'] = 'Tekstiviesti';
$labels['filtercreate'] = 'Luo suodatin';
$labels['...'] = '...';
$labels['year'] = 'vuosi';
$labels['month'] = 'kuukausi';
$labels['day'] = 'päivä';
$labels['hour'] = 'tunti';
$labels['minute'] = 'minuutti';
$labels['second'] = 'sekunti';
$labels['time'] = 'aika (hh:mm:ss)';
$labels['zone'] = 'aikavyöhyke';
$labels['advancedopts'] = 'Lisävalinnat';
$labels['address'] = 'osoite';
$labels['allparts'] = 'kaikki';
$labels['user'] = 'käyttäjä';
$labels['default'] = 'oletus';
$labels['vacation'] = 'Loma';
$labels['vacation.reply'] = 'Vastausviesti';
$labels['vacation.advanced'] = 'Lisäasetukset';
$labels['vacation.subject'] = 'Aihe';
$labels['vacation.body'] = 'Sisältö';
$labels['vacation.dates'] = 'Loma-aika';
$labels['vacation.from'] = 'Lähettäjä:';
$labels['vacation.to'] = 'Vastaanottaja:';
$labels['vacation.status'] = 'Tila';
$labels['vacation.on'] = 'Päällä';
$labels['vacation.off'] = 'Pois';
$labels['vacation.saving'] = 'Tallennetaan tietoja...';
$messages['filterunknownerror'] = 'Tuntematon palvelinvirhe.';
$messages['filterconnerror'] = 'Yhteys palvelimeen epäonnistui.';
$messages['filterdeleted'] = 'Suodatin poistettu onnistuneesti.';
$messages['filterdeleteconfirm'] = 'Haluatko varmasti poistaa valitun suodattimen?';
$messages['cannotbeempty'] = 'Kenttä ei voi olla tyhjä.';
$messages['moved'] = 'Suodatin siirretty onnistuneesti.';
$messages['nametoolong'] = 'Nimi on liian pitkä.';
$messages['saveerror'] = 'Tietojen tallennus epäonnistui palvelinvirheen vuoksi.';
$messages['vacationsaved'] = 'Lomatiedot tallennettu onnistuneesti.';
$messages['emptyvacationbody'] = 'Lomaviestin sisältö vaaditaan!';
?>

@ -47,15 +47,20 @@ $labels['messagesendcopy'] = 'Kirim salinan pesan ke';
$labels['messagereply'] = 'balas dengan pesan';
$labels['messagedelete'] = 'Hapus pesan';
$labels['messagediscard'] = 'Buang dengan pesan';
$labels['messagekeep'] = 'Biarkan pesan tetap didalam kotak surat';
$labels['messagesrules'] = 'Untuk email masuk:';
$labels['messagesactions'] = '...lakukan tindakan berikut';
$labels['add'] = 'Tambah';
$labels['del'] = 'Hapus';
$labels['sender'] = 'Pengirim';
$labels['recipient'] = 'Penerima';
$labels['vacationaddr'] = 'Alamat email tambahan saya:';
$labels['vacationdays'] = 'Seberapa sering mengirim pesan (dalam hari):';
$labels['vacationinterval'] = 'Seberapa sering untuk pengiriman pesan:';
$labels['vacationreason'] = 'Isi pesan (alasan liburan):';
$labels['vacationsubject'] = 'Judul pesan:';
$labels['days'] = 'hari';
$labels['seconds'] = 'detik';
$labels['rulestop'] = 'Berhenti mengevaluasi aturan';
$labels['enable'] = 'Aktifkan/Non-Aktifkan';
$labels['filterset'] = 'Himpunan filter';
@ -77,11 +82,13 @@ $labels['countisgreaterthanequal'] = 'penghitungan lebih besa dari atau sama den
$labels['countislessthan'] = 'penghitungan lebih kecil dari';
$labels['countislessthanequal'] = 'penghitungan lebih kecil dari atau sama dengan';
$labels['countequals'] = 'penghitungan sama dengan';
$labels['countnotequals'] = 'penghitungan tidak sama dengan';
$labels['valueisgreaterthan'] = 'nilai lebih besar dari';
$labels['valueisgreaterthanequal'] = 'nilai lebih besar dari atau sama dengan';
$labels['valueislessthan'] = 'nilai lebih kecil dari';
$labels['valueislessthanequal'] = 'nilai lebih kecil dari atau sama dengan';
$labels['valueequals'] = 'nilai sama dengan';
$labels['valuenotequals'] = 'nilai tidak sadengan';
$labels['setflags'] = 'Atur tanda pada pesan';
$labels['addflags'] = 'Berikan tanda pada pesan';
$labels['removeflags'] = 'Cabut tanda dari pesan';
@ -101,18 +108,37 @@ $labels['varupperfirst'] = 'karakter pertama huruf besar';
$labels['varquotewildcard'] = 'kutip karakter khusus';
$labels['varlength'] = 'panjang';
$labels['notify'] = 'Kirim pemberitahuan';
$labels['notifyaddress'] = 'Ke alamat email:';
$labels['notifybody'] = 'Isi pemberitahuan:';
$labels['notifysubject'] = 'Judul pemberitahuan';
$labels['notifyfrom'] = 'Pengirim pemberitahuan.';
$labels['notifytarget'] = 'Pemberitahuan yang dituju:';
$labels['notifymessage'] = 'Pemberitahuan pesan (pilihan):';
$labels['notifyoptions'] = 'Pemberitahuan untuk beberapa pilihan (pilihan):';
$labels['notifyfrom'] = 'Pemberitahuan ke pengirim (tidak harus):';
$labels['notifyimportance'] = 'Tingkat kepentingan:';
$labels['notifyimportancelow'] = 'rendah';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'tinggi';
$labels['notifymethodmailto'] = 'Surat Elektronik / Email';
$labels['notifymethodtel'] = 'Telepon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Buat filter';
$labels['usedata'] = 'Gunakan data berikut dalam filter:';
$labels['nextstep'] = 'Langkah Selanjutnya';
$labels['...'] = '...';
$labels['currdate'] = 'Tanggal sekarang';
$labels['datetest'] = 'Tanggal';
$labels['dateheader'] = 'header / tajuk:';
$labels['year'] = 'tahun';
$labels['month'] = 'bulan';
$labels['day'] = 'hari';
$labels['date'] = 'tanggal (yyyy-mm-dd)';
$labels['julian'] = 'tanggal (kalender julian)';
$labels['hour'] = 'jam';
$labels['minute'] = 'menit';
$labels['second'] = 'detik';
$labels['time'] = 'waktu :(hh:mm:ss)';
$labels['iso8601'] = 'tanggal (ISO8601)';
$labels['std11'] = 'tanggal (RFC2822)';
$labels['zone'] = 'zona-waktu';
$labels['weekday'] = 'hari kerja (0-6)';
$labels['advancedopts'] = 'Pilihan lanjutan';
$labels['body'] = 'Isi';
$labels['address'] = 'alamat';
@ -132,26 +158,67 @@ $labels['default'] = 'standar';
$labels['octet'] = 'ketat (oktet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'mundur:';
$labels['vacation'] = 'Liburan';
$labels['vacation.reply'] = 'Balas pesan';
$labels['vacation.advanced'] = 'Pengaturan Lanjutan';
$labels['vacation.subject'] = 'Judul';
$labels['vacation.body'] = 'Isi';
$labels['vacation.dates'] = 'Waktu Liburan';
$labels['vacation.from'] = 'Pengirim:';
$labels['vacation.to'] = 'Kepada:';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Nyala';
$labels['vacation.off'] = 'Mati';
$labels['vacation.addresses'] = 'Alamat email tambahan saya';
$labels['vacation.interval'] = 'Balas secara interval';
$labels['vacation.after'] = 'Atur untuk pengaturan cuti setelah';
$labels['vacation.saving'] = 'Menyimpan data...';
$labels['vacation.action'] = 'Tindakan untuk pesan masuk';
$labels['vacation.keep'] = 'Simpan';
$labels['vacation.discard'] = 'Buang';
$labels['vacation.redirect'] = 'Alihkan ke';
$labels['vacation.copy'] = 'Kirim salinan ke';
$labels['arialabelfiltersetactions'] = 'Tindakan untuk penyaringan';
$labels['arialabelfilteractions'] = 'Tindakan penyaringan';
$labels['arialabelfilterform'] = 'Properti untuk penyaringan';
$labels['ariasummaryfilterslist'] = 'Daftar penyaringan';
$labels['ariasummaryfiltersetslist'] = 'Daftar penyaringan yang telah di set';
$labels['filterstitle'] = 'Ubah penyaringan untuk email masuk';
$labels['vacationtitle'] = 'Ubah aturan untuk sedang-diluar-kantor';
$messages['filterunknownerror'] = 'Error pada server tak dikenali.';
$messages['filterconnerror'] = 'Tidak dapat menyambung ke server.';
$messages['filterdeleteerror'] = 'Tidak dapat menghapus penyaringan. Terjadi kesalahan pada server.';
$messages['filterdeleted'] = 'Penyaringan berhasil dihapus.';
$messages['filtersaved'] = 'Penyaringan berhasil disimpan.';
$messages['filtersaveerror'] = 'Tidak dapat menyimpan penyaringan. Terjadi kesalahan pada server.';
$messages['filterdeleteconfirm'] = 'Yakin untuk menghapus penyaringan terpilih?';
$messages['ruledeleteconfirm'] = 'Yakin untuk menghapus aturan terpilih?';
$messages['actiondeleteconfirm'] = 'Yakin untuk menghapus tindakan terpilih?';
$messages['forbiddenchars'] = 'Karakter terlarang pada isian.';
$messages['cannotbeempty'] = 'Isian tidak bisa kosong.';
$messages['ruleexist'] = 'Penyaringan dengan nama tersebut sudah ada.';
$messages['setactivateerror'] = 'Tidak dapat mengaktivkan kumpulan penyaringan terpilih. Terjadi kesalahan pada server.';
$messages['setdeactivateerror'] = 'Tidak bisa mematikan kumpulan penyaringan terpilih. Terjadi kesalahan pada server.';
$messages['setdeleteerror'] = 'Tidak dapat menghapus kumpulan penyaringan terpilih. Terjadi kesalahan pada server.';
$messages['setactivated'] = 'Kumpulan penyaringan berhasil dihidupkan.';
$messages['setdeactivated'] = 'Kumpulan penyaringan berhasil dimatikan.';
$messages['setdeleted'] = 'Kumpulan penyaringan berhasil dihapus.';
$messages['setdeleteconfirm'] = 'Yakin ingin menghapus kumpulan penyaringan terpilih?';
$messages['setcreateerror'] = 'Tidak bisa membuat kumpulan penyaringan. Terjadi kesalahan pada server';
$messages['setcreated'] = 'Kumpulan penyaringan berhasul dibuat.';
$messages['activateerror'] = 'Tidak dapat mengaktifkan penyaringan terpilih. Terjadi kesalahan pada server';
$messages['deactivateerror'] = 'Tidak dapat mematikan penyaringan terpilih. Terjadi kesalahan pada server';
$messages['deactivated'] = 'Berhasil menghidupkan penyaringan.';
$messages['activated'] = 'Berhasil mematikan penyaringan.';
$messages['moved'] = 'Berhasil memindahkan penyaringan.';
$messages['moveerror'] = 'Tidak bisa memindahkan penyaringan terpilih. Ada kesalahan di server.';
$messages['nametoolong'] = 'Nama terlalu panjang.';
$messages['namereserved'] = 'Nama sudah terpesan.';
$messages['setexist'] = 'Kumpulan sudah ada.';
$messages['nodata'] = 'Setidaknya satu posisi harus dipilih!';
$messages['invaliddateformat'] = 'Format tanggal atau bagian dari tanggal salah';
$messages['saveerror'] = 'Tidak dapat menyimpan data. Terjadi kesalahan pada server.';
$messages['vacationsaved'] = 'Data untuk cuti berhasil disimpan.';
?>

@ -47,15 +47,20 @@ $labels['messagesendcopy'] = 'സന്ദേശത്തിന്റെ പക
$labels['messagereply'] = 'സന്ദേശം വെച്ച് മറുപടി അയക്കു';
$labels['messagedelete'] = 'സന്ദേശം മായ്ക്കു';
$labels['messagediscard'] = 'സന്ദേശത്തോടെ നിരാകരിക്കുക';
$labels['messagekeep'] = 'സന്ദേശം ഇൻബോക്സിൽ സൂക്ഷിക്കുക';
$labels['messagesrules'] = 'ആഗമന സന്ദേശങ്ങള്‍ക്ക്:';
$labels['messagesactions'] = '...ഈ പ്രവര്‍ത്തനങ്ങള്‍ ചെയ്യുക:';
$labels['add'] = 'ചേര്‍ക്കു';
$labels['del'] = 'നീക്കം ചെയ്യുക';
$labels['sender'] = 'അയചയാള്‍';
$labels['recipient'] = 'സ്വീകര്‍ത്താവ്';
$labels['vacationaddr'] = 'എന്റെ മറ്റ് ഈമെയിൽ വിലാസങ്ങൾ:';
$labels['vacationdays'] = 'എത്ര ഭിവസം കൂടുമ്പോള്‍ സന്ദേശം അയക്കണം:';
$labels['vacationinterval'] = 'എത്ര സമയം കൂടുമ്പോൾ സന്ദേശങ്ങൾ അയയ്ക്കണം:';
$labels['vacationreason'] = 'സന്ദേശത്തിന്റെ ഉള്ളടക്കം (അവധിയുടെ കാരണം):';
$labels['vacationsubject'] = 'സന്ദേശത്തിന്റെ വിഷയം:';
$labels['days'] = 'ദിവസങ്ങൾ';
$labels['seconds'] = 'സെക്കന്റുകൾ';
$labels['rulestop'] = 'നിയമങ്ങള്‍ വിലയിരുത്തുന്നത് നിര്‍ത്തുക';
$labels['enable'] = 'പ്രവര്‍ത്തനസജ്ജം/രഹിതം';
$labels['filterset'] = 'അരിപ്പകളുടെ കൂട്ടം';
@ -77,11 +82,13 @@ $labels['countisgreaterthanequal'] = 'എണ്ണം ഇതിനെക്ക
$labels['countislessthan'] = 'എണ്ണം ഇതിനെക്കാള്‍ കുറവ്';
$labels['countislessthanequal'] = 'എണ്ണം ഇതിനെക്കാള്‍ കൂറവ് ഇല്ലെങ്കില്‍ സമം';
$labels['countequals'] = 'എണ്ണം ഇതിനോട് സമം';
$labels['countnotequals'] = 'എണ്ണം ഇതിനോട് തുല്യമല്ല';
$labels['valueisgreaterthan'] = 'മൂല്യം ഇതിനെക്കാള്‍ കുടുതല്‍';
$labels['valueisgreaterthanequal'] = 'മുല്യം ഇതിനെക്കാള്‍ കൂടുതല്‍ ഇല്ലെങ്കില്‍ സമം';
$labels['valueislessthan'] = 'മൂല്യം ഇതിനെക്കാള്‍ കുറവ്';
$labels['valueislessthanequal'] = 'മൂല്യം ഇതിനെക്കാള്‍ കൂറവ് ഇല്ലെങ്കില്‍ തുല്യം';
$labels['valueequals'] = 'മൂല്യം ഇതിനോട് സമം';
$labels['valuenotequals'] = 'മൂല്യം ഇതിനോട് തുല്യമല്ല';
$labels['setflags'] = 'സന്ദേശത്തില്‍ അടയാളമിടുക';
$labels['addflags'] = 'സന്ദേശത്തില്‍ അടയാളം ചേര്‍ക്കുക';
$labels['removeflags'] = 'സന്ദേശത്തില്‍ നിന്നും അടയാളം മാറ്റുക';
@ -90,6 +97,9 @@ $labels['flagdeleted'] = 'നീക്കം ചെയ്തവ';
$labels['flaganswered'] = 'മറുപടി നല്‍കിയവ';
$labels['flagflagged'] = 'അടയാളപ്പെടുത്തിയവ';
$labels['flagdraft'] = 'കരട്';
$labels['setvariable'] = 'വേരിയബിൾ സ്ഥിരപ്പെടുത്തുക';
$labels['setvarname'] = 'വേരിയബിളിന്റെ പേര്';
$labels['setvarvalue'] = 'വേരിയബിളിന്റെ മൂല്യം';
$labels['filtercreate'] = 'അരിപ്പ ഉണ്ടാക്കുക';
$labels['usedata'] = 'ഈ വിവരങ്ങള്‍ അരിപ്പയില്‍ ഉപയോഗിക്കുക:';
$labels['nextstep'] = 'അടുത്ത പടി';

@ -100,10 +100,6 @@ $labels['varlowerfirst'] = 'med liten forbokstav';
$labels['varupperfirst'] = 'med stor forbokstav';
$labels['varlength'] = 'lengde';
$labels['notify'] = 'Send varsel';
$labels['notifyaddress'] = 'Til e-postadresse:';
$labels['notifybody'] = 'Varseltekst:';
$labels['notifysubject'] = 'Varselemne:';
$labels['notifyfrom'] = 'Varselavsendar:';
$labels['notifyimportance'] = 'Betyding:';
$labels['notifyimportancelow'] = 'låg';
$labels['notifyimportancenormal'] = 'normal';

@ -57,10 +57,10 @@ $labels['recipient'] = 'Получатель';
$labels['vacationaddr'] = 'Мой дополнительный адрес(а):';
$labels['vacationdays'] = 'Как часто отправлять сообщения (в днях):';
$labels['vacationinterval'] = 'Как часто отправлять сообщения:';
$labels['days'] = 'дней';
$labels['seconds'] = 'секунд';
$labels['vacationreason'] = 'Текст сообщения (причина отсутствия):';
$labels['vacationsubject'] = 'Тема сообщения:';
$labels['days'] = 'дней';
$labels['seconds'] = 'секунд';
$labels['rulestop'] = 'Закончить выполнение';
$labels['enable'] = 'Включить/Выключить';
$labels['filterset'] = 'Набор фильтров';
@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'первый символ в верхнем реги
$labels['varquotewildcard'] = 'символ кавычек';
$labels['varlength'] = 'длина';
$labels['notify'] = 'Отправить уведомление';
$labels['notifyaddress'] = 'На адрес электронной почты:';
$labels['notifybody'] = 'Текст уведомления:';
$labels['notifysubject'] = 'Тема уведомления:';
$labels['notifyfrom'] = 'Отправитель уведомления:';
$labels['notifytarget'] = 'Объект уведомления:';
$labels['notifymessage'] = 'Сообщение уведомления (не обязательно):';
$labels['notifyoptions'] = 'Параметры уведомления (не обязательно):';
$labels['notifyfrom'] = 'Отправитель уведомления (не обязательно):';
$labels['notifyimportance'] = 'Важность:';
$labels['notifyimportancelow'] = 'низкая';
$labels['notifyimportancenormal'] = 'нормальная';
$labels['notifyimportancehigh'] = 'высокая';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Телефон';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Создать фильтр';
$labels['usedata'] = 'Использовать следующие данные в фильтре:';
$labels['nextstep'] = 'Далее';
@ -157,6 +160,33 @@ $labels['asciicasemap'] = 'Регистронезависимый (ascii-casemap
$labels['asciinumeric'] = 'Числовой (ascii-numeric)';
$labels['index'] = 'индекс:';
$labels['indexlast'] = 'наоборот';
$labels['vacation'] = 'Отпуск';
$labels['vacation.reply'] = 'Ответное сообщение';
$labels['vacation.advanced'] = 'Дополнительные настройки';
$labels['vacation.subject'] = 'Тема';
$labels['vacation.body'] = 'Тело письма';
$labels['vacation.dates'] = 'Время отпуска';
$labels['vacation.from'] = 'От:';
$labels['vacation.to'] = 'Кому:';
$labels['vacation.status'] = 'Состояние';
$labels['vacation.on'] = 'Вкл.';
$labels['vacation.off'] = 'Выкл.';
$labels['vacation.addresses'] = 'Мои дополнительные адреса';
$labels['vacation.interval'] = 'Интервал ответа';
$labels['vacation.after'] = 'Поместить правило отпуска после';
$labels['vacation.saving'] = 'Сохранение данных...';
$labels['vacation.action'] = 'Действия с входящим сообщением';
$labels['vacation.keep'] = 'Оставить';
$labels['vacation.discard'] = 'Отменить';
$labels['vacation.redirect'] = 'Перенаправить на';
$labels['vacation.copy'] = 'Отправить копию на';
$labels['arialabelfiltersetactions'] = 'Действия набора фильтров';
$labels['arialabelfilteractions'] = 'Действия фильтра';
$labels['arialabelfilterform'] = 'Свойства фильтра';
$labels['ariasummaryfilterslist'] = 'Список фильтров';
$labels['ariasummaryfiltersetslist'] = 'Список набора фильтров';
$labels['filterstitle'] = 'Редактировать фильтры для входящей почты';
$labels['vacationtitle'] = 'Изменить правило "Не в офисе"';
$messages['filterunknownerror'] = 'Неизвестная ошибка сервера.';
$messages['filterconnerror'] = 'Невозможно подключиться к серверу.';
$messages['filterdeleteerror'] = 'Невозможно удалить фильтр. Ошибка сервера.';
@ -189,4 +219,7 @@ $messages['namereserved'] = 'Зарезервированное имя.';
$messages['setexist'] = 'Набор уже существует.';
$messages['nodata'] = 'Нужно выбрать хотя бы одну позицию!';
$messages['invaliddateformat'] = 'Неверная дата или формат части даты';
$messages['saveerror'] = 'Невозможно сохранить данные. Ошибка сервера.';
$messages['vacationsaved'] = 'Данные об отпуске успешно сохранены.';
$messages['emptyvacationbody'] = 'Сообщение о причине отсутствия не может быть пустым!';
?>

@ -102,10 +102,6 @@ $labels['varupperfirst'] = '第一個字高於';
$labels['varquotewildcard'] = '跳脫字元';
$labels['varlength'] = '長度';
$labels['notify'] = '寄送通知';
$labels['notifyaddress'] = '寄到電子郵件位址:';
$labels['notifybody'] = '通知內容:';
$labels['notifysubject'] = '通知主旨:';
$labels['notifyfrom'] = '通知寄件者:';
$labels['notifyimportance'] = '重要性:';
$labels['notifyimportancelow'] = '低';
$labels['notifyimportancenormal'] = '一般';

@ -48,80 +48,53 @@ if (window.rcmail) {
if (rcmail.env.action.startsWith('plugin.managesieve')) {
if (rcmail.gui_objects.sieveform) {
rcmail.enable_command('plugin.managesieve-save', true);
// small resize for header element
$('select[name="_header[]"]', rcmail.gui_objects.sieveform).each(function() {
if (this.value == '...') this.style.width = '40px';
});
// resize dialog window
if (rcmail.env.action == 'plugin.managesieve' && rcmail.env.task == 'mail') {
parent.rcmail.managesieve_dialog_resize(rcmail.gui_objects.sieveform);
}
$('input[type="text"]:first', rcmail.gui_objects.sieveform).focus();
// initialize smart list inputs
$('textarea[data-type="list"]', rcmail.gui_objects.sieveform).each(function() {
smart_field_init(this);
});
// enable date pickers on date fields
if ($.datepicker && rcmail.env.date_format) {
$.datepicker.setDefaults({
dateFormat: rcmail.env.date_format,
changeMonth: true,
showOtherMonths: true,
selectOtherMonths: true,
onSelect: function(dateText) { $(this).focus().val(dateText) }
});
$('input.datepicker').datepicker();
}
sieve_form_init();
}
else {
rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror);
}
var i, p = rcmail, setcnt, set = rcmail.env.currentset;
var setcnt, set = rcmail.env.currentset;
if (rcmail.gui_objects.filterslist) {
rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist,
{multiselect:false, draggable:true, keyboard:false});
{multiselect:false, draggable:true, keyboard:true});
rcmail.filters_list
.addEventListener('select', function(e) { p.managesieve_select(e); })
.addEventListener('dragstart', function(e) { p.managesieve_dragstart(e); })
.addEventListener('dragend', function(e) { p.managesieve_dragend(e); })
.addEventListener('select', function(e) { rcmail.managesieve_select(e); })
.addEventListener('dragstart', function(e) { rcmail.managesieve_dragstart(e); })
.addEventListener('dragend', function(e) { rcmail.managesieve_dragend(e); })
.addEventListener('initrow', function(row) {
row.obj.onmouseover = function() { p.managesieve_focus_filter(row); };
row.obj.onmouseout = function() { p.managesieve_unfocus_filter(row); };
row.obj.onmouseover = function() { rcmail.managesieve_focus_filter(row); };
row.obj.onmouseout = function() { rcmail.managesieve_unfocus_filter(row); };
})
.init().focus();
.init();
}
if (rcmail.gui_objects.filtersetslist) {
rcmail.filtersets_list = new rcube_list_widget(rcmail.gui_objects.filtersetslist,
{multiselect:false, draggable:false, keyboard:false});
{multiselect:false, draggable:false, keyboard:true});
rcmail.filtersets_list
.addEventListener('select', function(e) { p.managesieve_setselect(e); })
.init().focus();
rcmail.filtersets_list.init().focus();
if (set != null) {
set = rcmail.managesieve_setid(set);
rcmail.filtersets_list.shift_start = set;
rcmail.filtersets_list.highlight_row(set, false);
rcmail.filtersets_list.select(set);
}
// attach select event after initial record was selected
rcmail.filtersets_list.addEventListener('select', function(e) { rcmail.managesieve_setselect(e); });
setcnt = rcmail.filtersets_list.rowcount;
rcmail.enable_command('plugin.managesieve-set', true);
rcmail.enable_command('plugin.managesieve-setact', 'plugin.managesieve-setget', setcnt);
rcmail.enable_command('plugin.managesieve-setdel', setcnt > 1);
// Fix dragging filters over sets list
$('tr', rcmail.gui_objects.filtersetslist).each(function (i, e) { p.managesieve_fixdragend(e); });
$('tr', rcmail.gui_objects.filtersetslist).each(function (i, e) { rcmail.managesieve_fixdragend(e); });
}
}
if (rcmail.gui_objects.sieveform && rcmail.env.rule_disabled)
$('#disabled').attr('checked', true);
});
@ -736,6 +709,13 @@ function action_type_select(id)
}
};
function vacation_action_select()
{
var selected = $('#vacation_action').val();
$('#action_target_span')[selected == 'discard' || selected == 'keep' ? 'hide' : 'show']();
};
// Inititalizes smart list input
function smart_field_init(field)
{
@ -778,6 +758,7 @@ function smart_field_row(value, name, idx, size)
input = $('input', elem).attr(attrs).keydown(function(e) {
var input = $(this);
// element creation event (on Enter)
if (e.which == 13) {
var name = input.attr('name').replace(/\[\]$/, ''),
@ -787,6 +768,21 @@ function smart_field_row(value, name, idx, size)
input.parent().after(elem);
$('input', elem).focus();
}
// backspace or delete: remove input, focus previous one
else if ((e.which == 8 || e.which == 46) && input.val() == '') {
var parent = input.parent(), siblings = parent.parent().children();
if (siblings.length > 1) {
if (parent.prev().length)
parent.prev().children('input').focus();
else
parent.next().children('input').focus();
parent.remove();
return false;
}
}
});
// element deletion event
@ -833,6 +829,101 @@ rcube_webmail.prototype.managesieve_tip_register = function(tips)
}
};
// format time string
function sieve_formattime(hour, minutes)
{
var i, c, h, time = '', format = rcmail.env.time_format || 'H:i';
for (i=0; i<format.length; i++) {
c = format.charAt(i);
switch (c) {
case 'a': time += hour > 12 ? 'am' : 'pm'; break;
case 'A': time += hour > 12 ? 'AM' : 'PM'; break;
case 'g':
case 'h':
h = hour == 0 ? 12 : hour > 12 ? hour - 12 : hour;
time += (c == 'h' && hour < 10 ? '0' : '') + hour;
break;
case 'G': time += hour; break;
case 'H': time += (hour < 10 ? '0' : '') + hour; break;
case 'i': time += (minutes < 10 ? '0' : '') + minutes; break;
case 's': time += '00';
default: time += c;
}
}
return time;
}
function sieve_form_init()
{
// small resize for header element
$('select[name="_header[]"]', rcmail.gui_objects.sieveform).each(function() {
if (this.value == '...') this.style.width = '40px';
});
// resize dialog window
if (rcmail.env.action == 'plugin.managesieve' && rcmail.env.task == 'mail') {
parent.rcmail.managesieve_dialog_resize(rcmail.gui_objects.sieveform);
}
$('input[type="text"]:first', rcmail.gui_objects.sieveform).focus();
// initialize smart list inputs
$('textarea[data-type="list"]', rcmail.gui_objects.sieveform).each(function() {
smart_field_init(this);
});
// enable date pickers on date fields
if ($.datepicker && rcmail.env.date_format) {
$.datepicker.setDefaults({
dateFormat: rcmail.env.date_format,
changeMonth: true,
showOtherMonths: true,
selectOtherMonths: true,
onSelect: function(dateText) { $(this).focus().val(dateText); }
});
$('input.datepicker').datepicker();
}
// configure drop-down menu on time input fields based on jquery UI autocomplete
$('#vacation_timefrom, #vacation_timeto')
.attr('autocomplete', "off")
.autocomplete({
delay: 100,
minLength: 1,
source: function(p, callback) {
var h, result = [];
for (h = 0; h < 24; h++)
result.push(sieve_formattime(h, 0));
result.push(sieve_formattime(23, 59));
return callback(result);
},
open: function(event, ui) {
// scroll to current time
var $this = $(this), val = $this.val(),
widget = $this.autocomplete('widget').css('width', '10em'),
menu = $this.data('ui-autocomplete').menu;
if (val && val.length)
widget.children().each(function() {
var li = $(this);
if (li.text().indexOf(val) == 0)
menu._scrollIntoView(li);
});
},
select: function(event, ui) {
$(this).val(ui.item.value);
return false;
}
})
.click(function() { // show drop-down upon clicks
$(this).autocomplete('search', $(this).val() || ' ');
})
}
/*********************************************************/
/********* Mail UI methods *********/
/*********************************************************/

@ -37,7 +37,7 @@ class managesieve extends rcube_plugin
function init()
{
$this->rc = rcmail::get_instance();
$this->rc = rcube::get_instance();
// register actions
$this->register_action('plugin.managesieve', array($this, 'managesieve_actions'));
@ -54,7 +54,9 @@ class managesieve extends rcube_plugin
$this->add_hook('message_headers_output', array($this, 'mail_headers'));
// inject Create Filter popup stuff
if (empty($this->rc->action) || $this->rc->action == 'show') {
if (empty($this->rc->action) || $this->rc->action == 'show'
|| strpos($this->rc->action, 'plugin.managesieve') === 0
) {
$this->mail_task_handler();
}
}
@ -72,13 +74,15 @@ class managesieve extends rcube_plugin
// load localization
$this->add_texts('localization/');
if ($this->rc->task == 'mail' || strpos($this->rc->action, 'plugin.managesieve') === 0) {
$sieve_action = strpos($this->rc->action, 'plugin.managesieve') === 0;
if ($this->rc->task == 'mail' || $sieve_action) {
$this->include_script('managesieve.js');
}
// include styles
$skin_path = $this->local_skin_path();
if ($this->rc->task == 'settings') {
if ($this->rc->task == 'settings' || $sieve_action) {
if (is_file($this->home . "/$skin_path/managesieve.css")) {
$this->include_stylesheet("$skin_path/managesieve.css");
}
@ -89,7 +93,6 @@ class managesieve extends rcube_plugin
}
}
$this->ui_initialized = true;
}
@ -109,6 +112,7 @@ class managesieve extends rcube_plugin
'class' => 'filter',
'label' => 'filters',
'domain' => 'managesieve',
'title' => 'filterstitle',
);
}
@ -119,6 +123,7 @@ class managesieve extends rcube_plugin
'class' => 'vacation',
'label' => 'vacation',
'domain' => 'managesieve',
'title' => 'vacationtitle',
);
}
@ -225,7 +230,7 @@ class managesieve extends rcube_plugin
/**
* Initializes engine object
*/
private function get_engine($type = null)
public function get_engine($type = null)
{
if (!$this->engine) {
$this->load_config();

@ -17,7 +17,7 @@
<roundcube:object name="vacationform" id="vacationform" style="margin: 10px 10px 0 10px" />
<div id="formfooter" style="padding: 0 10px">
<div class="footerleft">
<roundcube:button command="save" type="input" class="button mainaction" label="save" />
<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
</div>
</div>
</div>

@ -306,6 +306,7 @@ a.button.disabled
font-size: 11px;
padding: 1px;
vertical-align: middle;
max-width: 280px;
}
html.mozilla #filter-form select
@ -334,9 +335,7 @@ fieldset
border: 1px solid #B2B2B2;
border-radius: 4px;
box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
-moz-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
-webkit-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
-o-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
margin: 0;
padding: 2px;
display: inline-block;
@ -417,11 +416,13 @@ body.iframe.mail #filter-form
/* vacation form */
#settings-sections span.vacation a {
background: url(images/vacation_icons.png) no-repeat 7px 1px;
#settings-sections .vacation a {
background-image: url(images/vacation_icons.png);
background-repeat: no-repeat;
background-position: 7px 1px;
}
#settings-sections span.vacation.selected a {
#settings-sections .vacation.selected a {
background-position: 7px -23px;
}
@ -452,3 +453,7 @@ body.iframe.mail #filter-form
border: 0;
box-shadow: none;
}
#vacationform td.vacation {
white-space: nowrap;
}

@ -4,39 +4,42 @@
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
</head>
<body class="noscroll">
<roundcube:if condition="env:extwin" /><body class="noscroll extwin"><roundcube:else /><body class="noscroll"><roundcube:endif />
<roundcube:include file="/includes/header.html" />
<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="managesieve.filters" /></h1>
<div id="mainscreen" class="offset">
<roundcube:include file="/includes/settingstabs.html" />
<div id="settings-right">
<div id="filtersetslistbox" class="uibox listbox">
<h2 class="boxtitle"><roundcube:label name="managesieve.filtersets" /></h2>
<div id="settings-right" role="main">
<div id="filtersetslistbox" class="uibox listbox" aria-labelledby="aria-label-filtersets">
<h2 class="boxtitle" id="aria-label-filtersets"><roundcube:label name="managesieve.filtersets" /></h2>
<div class="scroller withfooter">
<roundcube:object name="filtersetslist" id="filtersetslist" class="listing" cellspacing="0" summary="Filters list" type="list" noheader="true" />
<roundcube:object name="filtersetslist" id="filtersetslist" class="listing" summary="managesieve.ariasummaryfiltersetslist" type="list" noheader="true" role="listbox" />
</div>
<div class="boxfooter">
<roundcube:button command="plugin.managesieve-setadd" type="link" title="managesieve.filtersetadd" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="filtersetmenulink" id="filtersetmenulink" type="link" title="moreactions" class="listbutton groupactions" onclick="UI.show_popup('filtersetmenu');return false" innerClass="inner" content="&#9881;" />
<roundcube:button command="plugin.managesieve-setadd" type="link" title="managesieve.filtersetadd" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="filtersetmenulink" id="filtersetmenulink" type="link" title="moreactions" class="listbutton groupactions" onclick="return UI.toggle_popup('filtersetmenu', event)" innerClass="inner" content="&#9881;" aria-haspopup="true" aria-expanded="false" aria-owns="filtersetmenu-menu" />
</div>
</div>
<div id="filtersscreen">
<div id="filterslistbox" class="uibox listbox">
<h2 class="boxtitle"><roundcube:label name="managesieve.filters" /></h2>
<div id="filterslistbox" class="uibox listbox" aria-labelledby="aria-label-filters">
<h2 class="boxtitle" id="aria-label-filters"><roundcube:label name="managesieve.filters" /></h2>
<div class="scroller withfooter">
<roundcube:object name="filterslist" id="filterslist" class="listing" cellspacing="0" summary="Filters list" noheader="true" />
<roundcube:object name="filterslist" id="filterslist" class="listing" summary="managesieve.ariasummaryfilterslist" noheader="true" role="listbox" />
</div>
<div class="boxfooter">
<roundcube:button command="plugin.managesieve-add" type="link" title="managesieve.filteradd" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="filtermenulink" id="filtermenulink" type="link" title="moreactions" class="listbutton groupactions" onclick="UI.show_popup('filtermenu');return false" innerClass="inner" content="&#9881;" />
<roundcube:button command="plugin.managesieve-add" type="link" title="managesieve.filteradd" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="filtermenulink" id="filtermenulink" type="link" title="moreactions" class="listbutton groupactions" onclick="return UI.toggle_popup('filtermenu', event)" innerClass="inner" content="&#9881;" aria-haspopup="true" aria-expanded="false" aria-owns="filtermenu-menu" />
</div>
</div>
<div id="filter-box" class="uibox contentbox">
<div class="iframebox">
<roundcube:object name="filterframe" id="filter-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" />
<div class="iframebox" role="complementary" aria-labelledby="aria-label-filterform">
<h2 id="aria-label-filterframe" class="voice"><roundcube:label name="managesieve.arialabelfilterform" /></h2>
<roundcube:object name="filterframe" id="filter-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="managesieve.arialabelfilterform" />
</div>
</div>
@ -44,19 +47,21 @@
</div>
</div>
<div id="filtersetmenu" class="popupmenu">
<ul class="toolbarmenu">
<li><roundcube:button command="plugin.managesieve-setact" label="managesieve.enable" classAct="active" /></li>
<li><roundcube:button command="plugin.managesieve-setdel" label="delete" classAct="active" /></li>
<li class="separator_above"><roundcube:button command="plugin.managesieve-setget" label="download" classAct="active" /></li>
<div id="filtersetmenu" class="popupmenu" aria-hidden="true">
<h3 id="aria-label-setactions" class="voice"><roundcube:label name="managesieve.arialabelfiltersetactions" /></h3>
<ul class="toolbarmenu" id="filtersetmenu-menu" role="menu" aria-labelledby="aria-label-setactions">
<li role="menuitem"><roundcube:button command="plugin.managesieve-setact" label="managesieve.enable" classAct="active" /></li>
<li role="menuitem"><roundcube:button command="plugin.managesieve-setdel" label="delete" classAct="active" /></li>
<li role="menuitem" class="separator_above"><roundcube:button command="plugin.managesieve-setget" label="download" classAct="active" /></li>
<roundcube:container name="filtersetoptions" id="filtersetmenu" />
</ul>
</div>
<div id="filtermenu" class="popupmenu">
<ul class="toolbarmenu">
<li><roundcube:button command="plugin.managesieve-act" label="managesieve.enable" classAct="active" /></li>
<li><roundcube:button command="plugin.managesieve-del" label="delete" classAct="active" /></li>
<div id="filtermenu" class="popupmenu" aria-hidden="true">
<h3 id="aria-label-filteractions" class="voice"><roundcube:label name="managesieve.arialabelfilteractions" /></h3>
<ul class="toolbarmenu" id="filtermenu-menu" role="menu" aria-labelledby="aria-label-filteractions">
<li role="menuitem"><roundcube:button command="plugin.managesieve-act" label="managesieve.enable" classAct="active" /></li>
<li role="menuitem"><roundcube:button command="plugin.managesieve-del" label="delete" classAct="active" /></li>
<roundcube:container name="filteroptions" id="filtermenu" />
</ul>
</div>

@ -10,11 +10,13 @@
<div id="mainscreen" class="offset">
<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="managesieve.vacation" /></h1>
<roundcube:include file="/includes/settingstabs.html" />
<div id="managesieve-vacation" class="uibox contentbox">
<div id="managesieve-vacation" class="uibox contentbox" role="main" aria-labelledby="aria-label-vacationform">
<div>
<h2 class="boxtitle"><roundcube:label name="managesieve.vacation" /></h2>
<h2 class="boxtitle" id="aria-label-vacationform"><roundcube:label name="managesieve.vacation" /></h2>
<roundcube:object name="vacationform" id="vacationform" class="propform boxcontent tabbed" />
</div>
<div class="footerleft formbuttons">

@ -0,0 +1,66 @@
<?php
class Managesieve_Vacation extends PHPUnit_Framework_TestCase
{
function setUp()
{
include_once dirname(__FILE__) . '/../lib/Roundcube/rcube_sieve_engine.php';
include_once dirname(__FILE__) . '/../lib/Roundcube/rcube_sieve_vacation.php';
}
/**
* Plugin object construction test
*/
function test_constructor()
{
$vacation = new rcube_sieve_vacation(true);
$this->assertInstanceOf('rcube_sieve_vacation', $vacation);
}
function test_build_regexp_tests()
{
$tests = rcube_sieve_vacation::build_regexp_tests('2014-02-20', '2014-03-05', $error);
$this->assertCount(2, $tests);
$this->assertSame('header', $tests[0]['test']);
$this->assertSame('regex', $tests[0]['type']);
$this->assertSame('received', $tests[0]['arg1']);
$this->assertSame('(20|21|22|23|24|25|26|27|28) Feb 2014', $tests[0]['arg2']);
$this->assertSame('header', $tests[1]['test']);
$this->assertSame('regex', $tests[1]['type']);
$this->assertSame('received', $tests[1]['arg1']);
$this->assertSame('([ 0]1|[ 0]2|[ 0]3|[ 0]4|[ 0]5) Mar 2014', $tests[1]['arg2']);
$tests = rcube_sieve_vacation::build_regexp_tests('2014-02-20', '2014-01-05', $error);
$this->assertSame(null, $tests);
$this->assertSame('managesieve.invaliddateformat', $error);
}
function test_parse_regexp_tests()
{
$tests = array(
array(
'test' => 'header',
'type' => 'regex',
'arg1' => 'received',
'arg2' => '(20|21|22|23|24|25|26|27|28) Feb 2014',
),
array(
'test' => 'header',
'type' => 'regex',
'arg1' => 'received',
'arg2' => '([ 0]1|[ 0]2|[ 0]3|[ 0]4|[ 0]5) Mar 2014',
)
);
$result = rcube_sieve_vacation::parse_regexp_tests($tests);
$this->assertCount(2, $result);
$this->assertSame('20 Feb 2014', $result['from']);
$this->assertSame('05 Mar 2014', $result['to']);
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save