diff --git a/e107_handlers/js_manager.php b/e107_handlers/js_manager.php index d74e65c3a..6c27d55ab 100644 --- a/e107_handlers/js_manager.php +++ b/e107_handlers/js_manager.php @@ -22,42 +22,14 @@ class e_jsmanager 'prototype/prototype.js' , 'scriptaculous/scriptaculous.js', 'scriptaculous/effects.js', - 'e107.js'), - /* + 'e107.js', + ), 'jquery' => array( - "http://code.jquery.com/ui/1.9.1/themes/base/jquery-ui.css", - "http://code.jquery.com/jquery-1.8.2.js", - "http://code.jquery.com/ui/1.9.1/jquery-ui.js" - ), - - - 'jquery' => array( - "http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js", - "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js", - "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/themes/base/jquery-ui.css" - ) - */ - - - 'jquery' => array( - // "http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/themes/base/jquery-ui.css", - // "http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js" - // "http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", - // "http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" - // "http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js" "https://cdn.jsdelivr.net/jquery/2.2.4/jquery.min.js", // jQuery Once filters out all elements that had the same filter applied on them before. It can be used to // ensure that a function is only applied once to an element. jQuery Once is used in e107.behaviors. - "https://cdnjs.cloudflare.com/ajax/libs/jquery-once/2.1.1/jquery.once.min.js" - // , - // "http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/jquery-ui.min.js", - // "http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/base/jquery-ui.css", - // "http://code.jquery.com/jquery-1.8.3.js", - // "http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css", - // "http://code.jquery.com/ui/1.9.2/jquery-ui.js" - - ) - + "https://cdnjs.cloudflare.com/ajax/libs/jquery-once/2.1.1/jquery.once.min.js", + ), ); /** @@ -267,18 +239,14 @@ class e_jsmanager if($this->isInAdmin()) // Include jquery-ui in the admin-area only - Jquery-UI to eventually be removed from e107 completely if possible. { - $this->_libraries['jquery'] = array( - "https://cdn.jsdelivr.net/jquery/2.2.4/jquery.min.js", - // jQuery Once filters out all elements that had the same filter applied on them before. It can be used - // to ensure that a function is only applied once to an element. jQuery Once is used in e107.behaviors. - "https://cdnjs.cloudflare.com/ajax/libs/jquery-once/2.1.1/jquery.once.min.js", - "https://cdn.jsdelivr.net/jquery.ui/1.11.4/jquery-ui.min.js", - "https://cdn.jsdelivr.net/jquery.ui/1.11.4/themes/smoothness/jquery-ui.min.css" - ); + $minified = deftrue('e_DEBUG') == true ? null : 'minified'; - // "https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js", - // "https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css", - //https://cdn.jsdelivr.net/jquery.ui/1.11.4/jquery-ui.min.css + e107::library('load', 'cdn.jquery', $minified); + // jQuery Once is used in e107.behaviors. + e107::library('load', 'cdn.jquery.once', $minified); + e107::library('load', 'cdn.jquery.ui', $minified); + + $this->_libraries['jquery'] = array(); } if(isset($_SERVER['E_DEV_LOCALJS']) && $_SERVER['E_DEV_LOCALJS'] === 'true' || !deftrue('e_CDN',true)) // Test with Local JS Framework files. diff --git a/e107_handlers/library_manager.php b/e107_handlers/library_manager.php index a07ea1864..07ad8a609 100644 --- a/e107_handlers/library_manager.php +++ b/e107_handlers/library_manager.php @@ -442,6 +442,17 @@ class e_library_manager { $libraries = array(); + $coreLibrary = new core_library(); + $info = $coreLibrary->config(); + if(is_array($info)) + { + foreach($info as $machine_name => $properties) + { + $properties['info_type'] = 'core'; + $libraries[$machine_name] = $properties; + } + } + $plugins = array(); $themes = array(); @@ -582,7 +593,7 @@ class e_library_manager 'pre_detect' => array(), 'post_detect' => array(), 'pre_dependencies_load' => array(), - 'pre_load' => array(), + 'pre_load' => array('preLoad'), 'post_load' => array(), ); @@ -739,21 +750,21 @@ class e_library_manager { // Always apply the callback to the top-level library. // Params: $library, $version, $variant - $this->$callback($library, null, null); + $this->{$callback}($library, null, null); // Apply the callback to versions. if(isset($library['versions'])) { foreach($library['versions'] as $version_string => &$version) { - $this->$callback($version, $version_string, null); + $this->{$callback}($version, $version_string, null); // Versions can include variants as well. if(isset($version['variants'])) { foreach($version['variants'] as $version_variant_name => &$version_variant) { - $this->$callback($version_variant, $version_string, $version_variant_name); + $this->{$callback}($version_variant, $version_string, $version_variant_name); } } } @@ -1135,4 +1146,341 @@ class e_library_manager } } + /** + * Alter library information before loading. + */ + private function preLoad(&$library) + { + if(defset('e_ADMIN_AREA', false) == true) + { + switch($library['machine_name']) + { + // Force to use 'smoothness' theme for Admin UI. + case 'cdn.jquery.ui': + $library['files']['css'] = array( + 'themes/smoothness/jquery-ui.css' => array( + 'zone' => 2, + ), + ); + + $library['variants']['minified']['files']['css'] = array( + 'themes/smoothness/jquery-ui.min.css' => array( + 'zone' => 2, + ), + ); + break; + } + } + } + +} + + +/** + * Class core_library. + */ +class core_library +{ + + /** + * Return information about external libraries. + */ + public function config() + { + $libraries = array(); + + // jQuery (CDN). + $libraries['cdn.jquery'] = array( + 'name' => 'jQuery (CDN)', + 'vendor_url' => 'https://jquery.com/', + 'version_arguments' => array( + 'file' => 'jquery.min.js', + 'pattern' => '/jQuery\s+v(\d\.\d\.\d+)/', + 'lines' => 5, + ), + 'files' => array( + 'js' => array( + 'jquery.js' => array( + 'zone' => 1, + 'type' => 'url', + ), + ), + ), + 'variants' => array( + // All properties defined for 'minified' override top-level properties. + 'minified' => array( + 'files' => array( + 'js' => array( + 'jquery.min.js' => array( + 'zone' => 1, + 'type' => 'url', + ), + ), + ), + ), + ), + // Override library path to CDN. + 'library_path' => 'https://cdn.jsdelivr.net/jquery/2.2.4/', + ); + + // jQuery Once (CDN). + $libraries['cdn.jquery.once'] = array( + 'name' => 'jQuery Once (CDN)', + 'vendor_url' => 'https://plugins.jquery.com/once/', + 'version_arguments' => array( + 'file' => 'jquery.once.min.js', + 'pattern' => '/jQuery\sOnce\s++v(\d\.\d\.\d+)/', + 'lines' => 5, + ), + 'files' => array( + 'js' => array( + 'jquery.once.min.js' => array( // There is no non-minified version. + 'zone' => 2, + 'type' => 'url', + ), + ), + ), + 'variants' => array( + // All properties defined for 'minified' override top-level properties. + 'minified' => array( + 'files' => array( + 'js' => array( + 'jquery.once.min.js' => array( + 'zone' => 2, + 'type' => 'url', + ), + ), + ), + ), + ), + 'dependencies' => array( + 'cdn.jquery', + ), + // Override library path to CDN. + 'library_path' => 'https://cdn.jsdelivr.net/jquery.once/2.1.2/', + ); + + // jQuery UI (CDN). + $libraries['cdn.jquery.ui'] = array( + 'name' => 'jQuery UI (CDN)', + 'vendor_url' => 'https://jqueryui.com/', + 'version_arguments' => array( + 'file' => 'jquery-ui.min.js', + 'pattern' => '/v(\d\.\d+\.\d+)/', + 'lines' => 5, + ), + 'files' => array( + 'js' => array( + 'jquery-ui.min.js' => array( // There is no non-minified version. + 'zone' => 2, + 'type' => 'url', + ), + ), + 'css' => array( + 'jquery-ui.min.css' => array( // There is no non-minified version. + 'zone' => 2, + ), + ), + ), + 'variants' => array( + // All properties defined for 'minified' override top-level properties. + 'minified' => array( + 'files' => array( + 'js' => array( + 'jquery-ui.min.js' => array( + 'zone' => 2, + 'type' => 'url', + ), + ), + 'css' => array( + 'jquery-ui.min.css' => array( + 'zone' => 2, + ), + ), + ), + ), + ), + 'dependencies' => array( + 'cdn.jquery', + ), + // Override library path to CDN. + 'library_path' => 'https://cdn.jsdelivr.net/jquery.ui/1.11.4/', + ); + + // Bootstrap (CDN). + $libraries['cdn.bootstrap'] = array( + 'name' => 'Bootstrap (CDN)', + 'vendor_url' => 'http://getbootstrap.com/', + 'version_arguments' => array( + 'file' => 'js/bootstrap.min.js', + 'pattern' => '/Bootstrap\s+v(\d\.\d\.\d+)/', + 'lines' => 5, + ), + 'files' => array( + 'js' => array( + 'js/bootstrap.js' => array( + 'zone' => 2, + 'type' => 'url', + ), + ), + 'css' => array( + 'css/bootstrap.css' => array( + 'zone' => 2, + ), + ), + ), + 'variants' => array( + // All properties defined for 'minified' override top-level properties. + 'minified' => array( + 'files' => array( + 'js' => array( + 'js/bootstrap.min.js' => array( + 'zone' => 2, + 'type' => 'url', + ), + ), + 'css' => array( + 'css/bootstrap.min.css' => array( + 'zone' => 2, + ), + ), + ), + ), + ), + 'dependencies' => array( + 'cdn.jquery', + ), + // Override library path to CDN. + 'library_path' => 'https://cdn.jsdelivr.net/bootstrap/3.3.7/', + ); + + // Bootstrap Editable (Local). + $libraries['bootstrap.editable'] = array( + 'name' => 'Bootstrap Editable (Local)', + 'vendor_url' => 'https://vitalets.github.io/bootstrap-editable/', + 'version_arguments' => array( + 'file' => 'js/bootstrap-editable.min.js', + 'pattern' => '/v(\d\.\d\.\d+)/', + 'lines' => 5, + ), + 'files' => array( + 'js' => array( + 'js/bootstrap-editable.js' => array( + 'zone' => 2, + 'type' => 'url', + ), + ), + 'css' => array( + 'css/bootstrap-editable.css' => array( + 'zone' => 2, + ), + ), + ), + 'variants' => array( + // All properties defined for 'minified' override top-level properties. + 'minified' => array( + 'files' => array( + 'js' => array( + 'js/bootstrap-editable.min.js' => array( + 'zone' => 2, + 'type' => 'url', + ), + ), + 'css' => array( + 'css/bootstrap-editable.min.css' => array( + 'zone' => 2, + ), + ), + ), + ), + ), + 'dependencies' => array( + 'cdn.bootstrap', // FIXME - bootstrap local version? + ), + // Override library path. + 'library_path' => '{e_WEB}js/bootstrap3-editable/', + ); + + // Bootstrap Editable (CDN). + $libraries['cdn.bootstrap.editable'] = array( + 'name' => 'Bootstrap Editable (CDN)', + 'vendor_url' => 'https://vitalets.github.io/bootstrap-editable/', + 'version_arguments' => array( + 'file' => 'js/bootstrap-editable.min.js', + 'pattern' => '/v(\d\.\d\.\d+)/', + 'lines' => 5, + ), + 'files' => array( + 'js' => array( + 'js/bootstrap-editable.js' => array( + 'zone' => 2, + 'type' => 'url', + ), + ), + 'css' => array( + 'css/bootstrap-editable.css' => array( + 'zone' => 2, + ), + ), + ), + 'variants' => array( + // All properties defined for 'minified' override top-level properties. + 'minified' => array( + 'files' => array( + 'js' => array( + 'js/bootstrap-editable.min.js' => array( + 'zone' => 2, + 'type' => 'url', + ), + ), + 'css' => array( + 'css/bootstrap-editable.min.css' => array( + 'zone' => 2, + ), + ), + ), + ), + ), + 'dependencies' => array( + 'cdn.bootstrap', + ), + // Override library path to CDN. + 'library_path' => 'https://cdn.jsdelivr.net/bootstrap.editable/1.5.1/', + ); + + // Font-Awesome (CDN). + $libraries['cdn.fontawesome'] = array( + 'name' => 'Font-Awesome (CDN)', + 'vendor_url' => 'http://fontawesome.io/', + 'version_arguments' => array( + 'file' => 'css/font-awesome.min.css', + 'pattern' => '/(\d\.\d\.\d+)/', + 'lines' => 10, + ), + 'files' => array( + 'css' => array( + 'css/font-awesome.css' => array( + 'zone' => 2, + ), + ), + ), + 'variants' => array( + // All properties defined for 'minified' override top-level properties. + 'minified' => array( + 'files' => array( + 'css' => array( + 'css/font-awesome.min.css' => array( + 'zone' => 2, + ), + ), + ), + ), + ), + // Override library path to CDN. + 'library_path' => 'https://cdn.jsdelivr.net/fontawesome/4.7.0/', + ); + + return $libraries; + } + } diff --git a/e107_themes/bootstrap3/admin_theme.php b/e107_themes/bootstrap3/admin_theme.php index e370ba7f9..fdaf1960a 100644 --- a/e107_themes/bootstrap3/admin_theme.php +++ b/e107_themes/bootstrap3/admin_theme.php @@ -5,28 +5,11 @@ define("SEP"," <span class='fa fa-play e-breadcrumb'></span> "); define("BOOTSTRAP", 3); define('FONTAWESOME', 4); +$minified = deftrue('e_DEBUG') == true ? null : 'minified'; - -// e107::js("url", "https://netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js",'jquery', 2); -// e107::css('url', 'http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css'); -// e107::css('url', "https://netdna.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"); - -e107::js("url", "https://cdn.jsdelivr.net/bootstrap/3.3.6/js/bootstrap.min.js", 'jquery', 2); -// e107::css('url', 'https://cdn.jsdelivr.net/bootstrap/3.3.5/css/bootstrap.min.css'); -e107::css('url', 'https://cdn.jsdelivr.net/fontawesome/4.5.0/css/font-awesome.min.css'); - - -// Too slow. -// e107::css('url', "http://cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.0/bootstrap3-editable/css/bootstrap-editable.css"); -// e107::js('url', "http://cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.0/bootstrap3-editable/js/bootstrap-editable.min.js"); - -e107::css('core', 'bootstrap3-editable/css/bootstrap-editable.css', 'jquery'); -e107::js('core', 'bootstrap3-editable/js/bootstrap-editable.min.js', 'jquery', 4); - -// e107::css('url', 'http://maxcdn.bootstrapcdn.com/bootswatch/3.3.5/slate/bootstrap.min.css'); -// e107::css('url', 'http://maxcdn.bootstrapcdn.com/bootswatch/3.3.5/cyborg/bootstrap.min.css'); -// e107::css('url', "https://maxcdn.bootstrapcdn.com/bootswatch/3.3.5/cosmo/bootstrap.min.css"); -// e107::css('url', "https://maxcdn.bootstrapcdn.com/bootswatch/3.3.5/darkly/bootstrap.min.css"); +e107::library('load', 'cdn.bootstrap', $minified); +e107::library('load', 'cdn.fontawesome', $minified); +e107::library('load', 'bootstrap.editable', $minified); e107::css('theme','css/bootstrap-dark.min.css'); e107::css('theme','admin_style.css'); @@ -34,8 +17,6 @@ e107::css('theme','admin_dark.css'); e107::css('theme','ie_all.css',null,'all',"<!--[if IE]>","<![endif]-->"); e107::css('inline', " - - .mce-menubar .mce-caret { border-top-color: #C6C6C6!important } .mce-menubar:hover .mce-caret { border-top-color: #FFFFFF!important } .mce-menubar .mce-btn button { color: #C6C6C6!important; } @@ -48,7 +29,6 @@ e107::css('inline', " .mce-menubtn:focus { background-color:transparent!important; color: #FFFFFF!important; border-color:transparent!important; } .mce-menubar .mce-btn.mce-active { color:white!important; border-color:transparent!important; background-color: transparent!important; } - body.forceColors { margin:0; background-color: #373737; !important} body.forceColors a { color: white} body.forceColors li a { color: silver} @@ -56,8 +36,6 @@ body.forceColors li a { color: silver} div#media-manager div.mce-window-head { background-color: #373737; !important } div#media-manager div.mce-title { color:white; } div#media-manager, html { color: silver; background-color: #2F2F2F; !important} - - "); /* diff --git a/e107_web/js/bootstrap3-editable/css/bootstrap-editable.min.css b/e107_web/js/bootstrap3-editable/css/bootstrap-editable.min.css new file mode 100644 index 000000000..ab2118514 --- /dev/null +++ b/e107_web/js/bootstrap3-editable/css/bootstrap-editable.min.css @@ -0,0 +1,12 @@ +/*! X-editable - v1.5.1 +* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery +* http://github.com/vitalets/x-editable +* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */.editableform{margin-bottom:0}.editableform .control-group{margin-bottom:0;white-space:nowrap;line-height:20px}.editableform .form-control{width:auto}.editable-buttons{display:inline-block;vertical-align:top;margin-left:7px;zoom:1;*display:inline}.editable-buttons.editable-buttons-bottom{display:block;margin-top:7px;margin-left:0}.editable-input{vertical-align:top;display:inline-block;width:auto;white-space:normal;zoom:1;*display:inline}.editable-buttons .editable-cancel{margin-left:7px}.editable-buttons button.ui-button-icon-only{height:24px;width:30px}.editableform-loading{background:url(../img/loading.gif) center center no-repeat;height:25px;width:auto;min-width:25px}.editable-inline .editableform-loading{background-position:left 5px}.editable-error-block{max-width:300px;margin:5px 0 0;width:auto;white-space:normal}.editable-error-block.ui-state-error{padding:3px}.editable-error{color:red}.editableform .editable-date{padding:0;margin:0;float:left}.editable-inline .add-on .icon-th{margin-top:3px;margin-left:1px}.editable-checklist label input[type=checkbox],.editable-checklist label span{vertical-align:middle;margin:0}.editable-checklist label{white-space:nowrap}.editable-wysihtml5{width:566px;height:250px}.editable-clear{clear:both;font-size:.9em;text-decoration:none;text-align:right}.editable-clear-x{background:url(../img/clear.png) center center no-repeat;display:block;width:13px;height:13px;position:absolute;opacity:.6;z-index:100;top:50%;right:6px;margin-top:-6px}.editable-clear-x:hover{opacity:1}.editable-pre-wrapped{white-space:pre-wrap}.editable-container.editable-popup{max-width:none!important}.editable-container.popover{width:auto}.editable-container.editable-inline{display:inline-block;vertical-align:middle;width:auto;zoom:1;*display:inline}.editable-container.ui-widget{font-size:inherit;z-index:9990}.editable-click,a.editable-click,a.editable-click:hover{text-decoration:none;border-bottom:dashed 1px #08c}.editable-click.editable-disabled,a.editable-click.editable-disabled,a.editable-click.editable-disabled:hover{color:#585858;cursor:default;border-bottom:none}.editable-empty,.editable-empty:focus,.editable-empty:hover{font-style:italic;color:#D14;text-decoration:none}.editable-unsaved{font-weight:700}.editable-bg-transition{-webkit-transition:background-color 1400ms ease-out;-moz-transition:background-color 1400ms ease-out;-o-transition:background-color 1400ms ease-out;-ms-transition:background-color 1400ms ease-out;transition:background-color 1400ms ease-out}.form-horizontal .editable{padding-top:5px;display:inline-block}/*! + * Datepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Improvements by Andrew Rowls + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */.datepicker{padding:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;direction:ltr}.datepicker-inline{width:220px}.datepicker.datepicker-rtl{direction:rtl}.datepicker.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0}.datepicker-dropdown:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:6px}.datepicker-dropdown:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:7px}.datepicker>div{display:none}.datepicker.days div.datepicker-days,.datepicker.months div.datepicker-months,.datepicker.years div.datepicker-years{display:block}.datepicker table{margin:0}.datepicker td,.datepicker th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:none}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.day:hover{background:#eee;cursor:pointer}.datepicker table tr td.new,.datepicker table tr td.old{color:#999}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:0 0;color:#999;cursor:default}.datepicker table tr td.today,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today:hover{background-color:#fde19a;background-image:-moz-linear-gradient(top,#fdd49a,#fdf59a);background-image:-ms-linear-gradient(top,#fdd49a,#fdf59a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdd49a),to(#fdf59a));background-image:-webkit-linear-gradient(top,#fdd49a,#fdf59a);background-image:-o-linear-gradient(top,#fdd49a,#fdf59a);background-image:linear-gradient(top,#fdd49a,#fdf59a);background-repeat:repeat-x;border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,.1)rgba(0,0,0,.1)rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#000}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled.disabled,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover.disabled,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today.disabled:hover:hover,.datepicker table tr td.today.disabled:hover[disabled],.datepicker table tr td.today.disabled[disabled],.datepicker table tr td.today:active,.datepicker table tr td.today:hover,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover.disabled,.datepicker table tr td.today:hover:active,.datepicker table tr td.today:hover:hover,.datepicker table tr td.today:hover[disabled],.datepicker table tr td.today[disabled]{background-color:#fdf59a}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today:active,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover:active{background-color:#fbf069 \9}.datepicker table tr td.today:hover:hover{color:#000}.datepicker table tr td.today.active:hover{color:#fff}.datepicker table tr td.range,.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:hover,.datepicker table tr td.range:hover{background:#eee;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.datepicker table tr td.range.today,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today:hover{background-color:#f3d17a;background-image:-moz-linear-gradient(top,#f3c17a,#f3e97a);background-image:-ms-linear-gradient(top,#f3c17a,#f3e97a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f3c17a),to(#f3e97a));background-image:-webkit-linear-gradient(top,#f3c17a,#f3e97a);background-image:-o-linear-gradient(top,#f3c17a,#f3e97a);background-image:linear-gradient(top,#f3c17a,#f3e97a);background-repeat:repeat-x;border-color:#f3e97a #f3e97a #edde34;border-color:rgba(0,0,0,.1)rgba(0,0,0,.1)rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled.disabled,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover.disabled,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today.disabled:hover:hover,.datepicker table tr td.range.today.disabled:hover[disabled],.datepicker table tr td.range.today.disabled[disabled],.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover.disabled,.datepicker table tr td.range.today:hover:active,.datepicker table tr td.range.today:hover:hover,.datepicker table tr td.range.today:hover[disabled],.datepicker table tr td.range.today[disabled]{background-color:#f3e97a}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover:active{background-color:#efe24b \9}.datepicker table tr td.selected,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected:hover{background-color:#9e9e9e;background-image:-moz-linear-gradient(top,#b3b3b3,gray);background-image:-ms-linear-gradient(top,#b3b3b3,gray);background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3b3b3),to(gray));background-image:-webkit-linear-gradient(top,#b3b3b3,gray);background-image:-o-linear-gradient(top,#b3b3b3,gray);background-image:linear-gradient(top,#b3b3b3,gray);background-repeat:repeat-x;border-color:gray #808080 #595959;border-color:rgba(0,0,0,.1)rgba(0,0,0,.1)rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled.disabled,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover.disabled,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected.disabled:hover:hover,.datepicker table tr td.selected.disabled:hover[disabled],.datepicker table tr td.selected.disabled[disabled],.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover.disabled,.datepicker table tr td.selected:hover:active,.datepicker table tr td.selected:hover:hover,.datepicker table tr td.selected:hover[disabled],.datepicker table tr td.selected[disabled]{background-color:gray}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover:active{background-color:#666 \9}.datepicker table tr td.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(top,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1)rgba(0,0,0,.1)rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled.disabled,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover.disabled,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active.disabled:hover:hover,.datepicker table tr td.active.disabled:hover[disabled],.datepicker table tr td.active.disabled[disabled],.datepicker table tr td.active:active,.datepicker table tr td.active:hover,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover.disabled,.datepicker table tr td.active:hover:active,.datepicker table tr td.active:hover:hover,.datepicker table tr td.active:hover[disabled],.datepicker table tr td.active[disabled]{background-color:#04c}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active:active,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover:active{background-color:#039 \9}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.datepicker table tr td span:hover{background:#eee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:0 0;color:#999;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(top,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1)rgba(0,0,0,.1)rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled.disabled,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover.disabled,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active.disabled:hover[disabled],.datepicker table tr td span.active.disabled[disabled],.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover.disabled,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active:hover:hover,.datepicker table tr td span.active:hover[disabled],.datepicker table tr td span.active[disabled]{background-color:#04c}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active{background-color:#039 \9}.datepicker table tr td span.new,.datepicker table tr td span.old{color:#999}.datepicker th.datepicker-switch{width:145px}.datepicker tfoot tr th,.datepicker thead tr:first-child th{cursor:pointer}.datepicker tfoot tr th:hover,.datepicker thead tr:first-child th:hover{background:#eee}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.datepicker thead tr:first-child th.cw{cursor:default;background-color:transparent}.input-append.date .add-on i,.input-prepend.date .add-on i{display:block;cursor:pointer;width:16px;height:16px}.input-daterange input{text-align:center}.input-daterange input:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-daterange input:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-daterange .add-on{display:inline-block;width:auto;min-width:16px;height:18px;padding:4px 5px;font-weight:400;line-height:18px;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border:1px solid #ccc;margin-left:-5px;margin-right:-5px}