From b617ef1abdd82a52b5f80e9741112b0eac086a55 Mon Sep 17 00:00:00 2001 From: ielmin Date: Thu, 26 Mar 2015 13:20:21 +1100 Subject: [PATCH 001/110] Hardcoded http:// cause browser warnings --- admin/code/LeftAndMain.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/admin/code/LeftAndMain.php b/admin/code/LeftAndMain.php index 268229dd0..169db1928 100644 --- a/admin/code/LeftAndMain.php +++ b/admin/code/LeftAndMain.php @@ -76,7 +76,7 @@ class LeftAndMain extends Controller implements PermissionProvider { * @config * @var string */ - private static $help_link = 'http://userhelp.silverstripe.org/framework/en/3.1'; + private static $help_link = '//userhelp.silverstripe.org/framework/en/3.1'; /** * @var array @@ -1595,7 +1595,7 @@ class LeftAndMain extends Controller implements PermissionProvider { * @config * @var String */ - private static $application_link = 'http://www.silverstripe.org/'; + private static $application_link = '//www.silverstripe.org/'; /** * Sets the href for the anchor on the Silverstripe logo in the menu From 1cca37c9082ef53f02633d1bdac27f4a815d4208 Mon Sep 17 00:00:00 2001 From: Loz Calver Date: Mon, 4 May 2015 15:10:16 +0100 Subject: [PATCH 002/110] FIX: File::getFileType() was case sensitive (fixes #3631) --- filesystem/File.php | 2 +- tests/filesystem/FileTest.php | 3 +++ tests/filesystem/FileTest.yml | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/filesystem/File.php b/filesystem/File.php index ca0b51c9e..8f5124220 100644 --- a/filesystem/File.php +++ b/filesystem/File.php @@ -808,7 +808,7 @@ class File extends DataObject { 'htm' => _t('File.HtmlType', 'HTML file') ); - $ext = $this->getExtension(); + $ext = strtolower($this->getExtension()); return isset($types[$ext]) ? $types[$ext] : 'unknown'; } diff --git a/tests/filesystem/FileTest.php b/tests/filesystem/FileTest.php index 1466810a8..750479ad5 100644 --- a/tests/filesystem/FileTest.php +++ b/tests/filesystem/FileTest.php @@ -249,6 +249,9 @@ class FileTest extends SapphireTest { $file = $this->objFromFixture('File', 'pdf'); $this->assertEquals("Adobe Acrobat PDF file", $file->FileType); + + $file = $this->objFromFixture('File', 'gifupper'); + $this->assertEquals("GIF image - good for diagrams", $file->FileType); /* Only a few file types are given special descriptions; the rest are unknown */ $file = $this->objFromFixture('File', 'asdf'); diff --git a/tests/filesystem/FileTest.yml b/tests/filesystem/FileTest.yml index 636339f15..47e5190aa 100644 --- a/tests/filesystem/FileTest.yml +++ b/tests/filesystem/FileTest.yml @@ -13,6 +13,8 @@ File: Filename: assets/FileTest.txt gif: Filename: assets/FileTest.gif + gifupper: + Filename: assets/FileTest.GIF pdf: Filename: assets/FileTest.pdf setfromname: From dc24d3f21f4a9a62c1571a3235007bb2292816f3 Mon Sep 17 00:00:00 2001 From: cwchong Date: Tue, 19 May 2015 13:43:00 +0800 Subject: [PATCH 003/110] Bug fix: File->setName() Logical error. $base should use PATHINFO_FILENAME instead of PATHINFO_BASENAME in order to exclude extension; final $name should include a period before $ext as $ext uses PATHINFO_EXTENSION which excludes the period. --- filesystem/File.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/filesystem/File.php b/filesystem/File.php index a6a4f9f29..47fc95af8 100644 --- a/filesystem/File.php +++ b/filesystem/File.php @@ -609,7 +609,7 @@ class File extends DataObject { // If it's changed, check for duplicates if($oldName && $oldName != $name) { - $base = pathinfo($name, PATHINFO_BASENAME); + $base = pathinfo($name, PATHINFO_FILENAME); $ext = self::get_file_extension($name); $suffix = 1; @@ -621,7 +621,7 @@ class File extends DataObject { ))->first() ) { $suffix++; - $name = "$base-$suffix$ext"; + $name = "$base-$suffix.$ext"; } } From 9421374f91b0c3df87d6dd4fabe1bec8f398d52d Mon Sep 17 00:00:00 2001 From: Stewart Wilson Date: Fri, 5 Jun 2015 14:36:46 +1000 Subject: [PATCH 004/110] check to ensure $values is not null or empty before exploding. Otherwise, return an empty array --- forms/CheckboxSetField.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/forms/CheckboxSetField.php b/forms/CheckboxSetField.php index ca1033f53..d138da16d 100644 --- a/forms/CheckboxSetField.php +++ b/forms/CheckboxSetField.php @@ -96,8 +96,12 @@ class CheckboxSetField extends OptionsetField { } } } elseif($values && is_string($values)) { - $items = explode(',', $values); - $items = str_replace('{comma}', ',', $items); + if(!empty($values)) { + $items = explode(',', $values); + $items = str_replace('{comma}', ',', $items); + } else { + $items = array(); + } } } } else { @@ -109,8 +113,12 @@ class CheckboxSetField extends OptionsetField { $items = array(); } else { - $items = explode(',', $values); - $items = str_replace('{comma}', ',', $items); + if(!empty($values)) { + $items = explode(',', $values); + $items = str_replace('{comma}', ',', $items); + } else { + $items = array(); + } } } } From 3ee5b24898a63e4be973e25847344da4f949880d Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Fri, 6 Mar 2015 22:37:06 +0000 Subject: [PATCH 005/110] Nest and unnest Config and Controller for each test and test suite --- dev/SapphireTest.php | 258 +++++++++--------- tests/control/DirectorTest.php | 130 +++++---- tests/core/ConfigTest.php | 16 +- tests/core/manifest/ConfigManifestTest.php | 8 +- tests/dev/DevAdminControllerTest.php | 61 ++--- .../model/DataObjectSchemaGenerationTest.php | 52 ++-- tests/model/MySQLDatabaseTest.php | 6 +- tests/oembed/OembedTest.php | 12 +- tests/security/BasicAuthTest.php | 52 ++-- 9 files changed, 275 insertions(+), 320 deletions(-) diff --git a/dev/SapphireTest.php b/dev/SapphireTest.php index e2cc95a9c..c0de44d29 100644 --- a/dev/SapphireTest.php +++ b/dev/SapphireTest.php @@ -5,12 +5,12 @@ require_once 'TestRunner.php'; * Test case class for the Sapphire framework. * Sapphire unit testing is based on PHPUnit, but provides a number of hooks into our data model that make it easier * to work with. - * + * * @package framework * @subpackage testing */ class SapphireTest extends PHPUnit_Framework_TestCase { - + /** @config */ private static $dependencies = array( 'fixtureFactory' => '%$FixtureFactory', @@ -21,7 +21,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { * If passed as an array, multiple fixture files will be loaded. * Please note that you won't be able to refer with "=>" notation * between the fixtures, they act independent of each other. - * + * * @var string|array */ protected static $fixture_file = null; @@ -30,19 +30,19 @@ class SapphireTest extends PHPUnit_Framework_TestCase { * @var FixtureFactory */ protected $fixtureFactory; - + /** * @var bool Set whether to include this test in the TestRunner or to skip this. */ protected $skipTest = false; - + /** * @var Boolean If set to TRUE, this will force a test database to be generated - * in {@link setUp()}. Note that this flag is overruled by the presence of a + * in {@link setUp()}. Note that this flag is overruled by the presence of a * {@link $fixture_file}, which always forces a database build. */ protected $usesDatabase = null; - + protected $originalMailer; protected $originalMemberPasswordValidator; protected $originalRequirements; @@ -50,33 +50,33 @@ class SapphireTest extends PHPUnit_Framework_TestCase { protected $originalTheme; protected $originalNestedURLsState; protected $originalMemoryLimit; - + protected $mailer; - + /** * Pointer to the manifest that isn't a test manifest */ protected static $regular_manifest; - + /** * @var boolean */ protected static $is_running_test = false; - + protected static $test_class_manifest; - + /** * By default, setUp() does not require default records. Pass * class names in here, and the require/augment default records * function will be called on them. */ protected $requireDefaultRecordsFrom = array(); - - + + /** * A list of extensions that can't be applied during the execution of this run. If they are * applied, they will be temporarily removed and a database migration called. - * + * * The keys of the are the classes that the extensions can't be applied the extensions to, and * the values are an array of illegal extensions on that class. */ @@ -86,10 +86,10 @@ class SapphireTest extends PHPUnit_Framework_TestCase { /** * A list of extensions that must be applied during the execution of this run. If they are * not applied, they will be temporarily added and a database migration called. - * + * * The keys of the are the classes to apply the extensions to, and the values are an array * of required extensions on that class. - * + * * Example: * * array("MyTreeDataObject" => array("Versioned", "Hierarchy")) @@ -97,35 +97,35 @@ class SapphireTest extends PHPUnit_Framework_TestCase { */ protected $requiredExtensions = array( ); - + /** * By default, the test database won't contain any DataObjects that have the interface TestOnly. * This variable lets you define additional TestOnly DataObjects to set up for this test. * Set it to an array of DataObject subclass names. */ protected $extraDataObjects = array(); - + /** * We need to disabling backing up of globals to avoid overriding * the few globals SilverStripe relies on, like $lang for the i18n subsystem. - * + * * @see http://sebastian-bergmann.de/archives/797-Global-Variables-and-PHPUnit.html */ protected $backupGlobals = FALSE; - /** + /** * Helper arrays for illegalExtensions/requiredExtensions code */ private $extensionsToReapply = array(), $extensionsToRemove = array(); - + /** * Determines if unit tests are currently run (via {@link TestRunner}). * This is used as a cheap replacement for fully mockable state * in certain contiditions (e.g. access checks). * Caution: When set to FALSE, certain controllers might bypass * access checks, so this is a very security sensitive setting. - * + * * @return boolean */ public static function is_running_test() { @@ -133,7 +133,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { } public static function set_is_running_test($bool) { - self::$is_running_test = $bool; + self::$is_running_test = $bool; } /** @@ -161,22 +161,27 @@ class SapphireTest extends PHPUnit_Framework_TestCase { * @var array $fixtures Array of {@link YamlFixture} instances * @deprecated 3.1 Use $fixtureFactory instad */ - protected $fixtures = array(); - + protected $fixtures = array(); + protected $model; - + public function setUp() { + + //nest config and injector for each test so they are effectively sandboxed per test + Config::nest(); + Injector::nest(); + // We cannot run the tests on this abstract class. if(get_class($this) == "SapphireTest") $this->skipTest = true; - + if($this->skipTest) { $this->markTestSkipped(sprintf( 'Skipping %s ', get_class($this) )); - + return; } - + // Mark test as being run $this->originalIsRunningTest = self::$is_running_test; self::$is_running_test = true; @@ -185,16 +190,16 @@ class SapphireTest extends PHPUnit_Framework_TestCase { i18n::set_locale(i18n::default_locale()); i18n::config()->date_format = null; i18n::config()->time_format = null; - + // Set default timezone consistently to avoid NZ-specific dependencies date_default_timezone_set('UTC'); - + // Remove password validation $this->originalMemberPasswordValidator = Member::password_validator(); $this->originalRequirements = Requirements::backend(); Member::set_password_validator(null); Config::inst()->update('Cookie', 'report_errors', false); - + if(class_exists('RootURLController')) RootURLController::reset(); if(class_exists('Translatable')) Translatable::reset(); Versioned::reset(); @@ -203,7 +208,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { Hierarchy::reset(); if(Controller::has_curr()) Controller::curr()->setSession(Injector::inst()->create('Session', array())); Security::$database_is_ready = null; - + $fixtureFile = static::get_fixture_file(); $prefix = defined('SS_DATABASE_PREFIX') ? SS_DATABASE_PREFIX : 'ss_'; @@ -213,13 +218,13 @@ class SapphireTest extends PHPUnit_Framework_TestCase { $this->mailer = new TestMailer(); Email::set_mailer($this->mailer); Config::inst()->remove('Email', 'send_all_emails_to'); - + // Todo: this could be a special test model $this->model = DataModel::inst(); // Set up fixture if($fixtureFile || $this->usesDatabase || !self::using_temp_db()) { - if(substr(DB::getConn()->currentDatabase(), 0, strlen($prefix) + 5) + if(substr(DB::getConn()->currentDatabase(), 0, strlen($prefix) + 5) != strtolower(sprintf('%stmpdb', $prefix))) { //echo "Re-creating temp database... "; @@ -228,9 +233,9 @@ class SapphireTest extends PHPUnit_Framework_TestCase { } singleton('DataObject')->flushCache(); - + self::empty_temp_db(); - + foreach($this->requireDefaultRecordsFrom as $className) { $instance = singleton($className); if (method_exists($instance, 'requireDefaultRecords')) $instance->requireDefaultRecords(); @@ -245,14 +250,14 @@ class SapphireTest extends PHPUnit_Framework_TestCase { foreach($fixtureFiles as $fixtureFilePath) { // Support fixture paths relative to the test class, rather than relative to webroot // String checking is faster than file_exists() calls. - $isRelativeToFile = (strpos('/', $fixtureFilePath) === false + $isRelativeToFile = (strpos('/', $fixtureFilePath) === false || preg_match('/^\.\./', $fixtureFilePath)); if($isRelativeToFile) { $resolvedPath = realpath($pathForClass . '/' . $fixtureFilePath); if($resolvedPath) $fixtureFilePath = $resolvedPath; } - + $fixture = Injector::inst()->create('YamlFixture', $fixtureFilePath); $fixture->writeInto($this->getFixtureFactory()); $this->fixtures[] = $fixture; @@ -262,20 +267,20 @@ class SapphireTest extends PHPUnit_Framework_TestCase { $i++; } } - + $this->logInWithPermission("ADMIN"); } - + // Preserve memory settings $this->originalMemoryLimit = ini_get('memory_limit'); - + // turn off template debugging Config::inst()->update('SSViewer', 'source_file_comments', false); - + // Clear requirements Requirements::clear(); } - + /** * Called once per test case ({@link SapphireTest} subclass). * This is different to {@link setUp()}, which gets called once @@ -285,6 +290,10 @@ class SapphireTest extends PHPUnit_Framework_TestCase { * for tearing down the state again. */ public function setUpOnce() { + + //nest config and injector for each suite so they are effectively sandboxed + Config::nest(); + Injector::nest(); $isAltered = false; if(!Director::isDev()) { @@ -315,46 +324,34 @@ class SapphireTest extends PHPUnit_Framework_TestCase { } } } - + // If we have made changes to the extensions present, then migrate the database schema. if($isAltered || $this->extensionsToReapply || $this->extensionsToRemove || $this->extraDataObjects) { if(!self::using_temp_db()) self::create_temp_db(); $this->resetDBSchema(true); } - // clear singletons, they're caching old extension info + // clear singletons, they're caching old extension info // which is used in DatabaseAdmin->doBuild() Injector::inst()->unregisterAllObjects(); // Set default timezone consistently to avoid NZ-specific dependencies date_default_timezone_set('UTC'); } - + /** * tearDown method that's called once per test class rather once per test method. */ public function tearDownOnce() { - // If we have made changes to the extensions present, then migrate the database schema. - if($this->extensionsToReapply || $this->extensionsToRemove) { - // Remove extensions added for testing - foreach($this->extensionsToRemove as $class => $extensions) { - foreach($extensions as $extension) { - $class::remove_extension($extension); - } - } - - // Reapply ones removed - foreach($this->extensionsToReapply as $class => $extensions) { - foreach($extensions as $extension) { - $class::add_extension($extension); - } - } - } + //unnest injector / config now that the test suite is over + // this will reset all the extensions on the object too (see setUpOnce) + Injector::unnest(); + Config::unnest(); if($this->extensionsToReapply || $this->extensionsToRemove || $this->extraDataObjects) { $this->resetDBSchema(); } } - + /** * @return FixtureFactory */ @@ -367,10 +364,10 @@ class SapphireTest extends PHPUnit_Framework_TestCase { $this->fixtureFactory = $factory; return $this; } - + /** * Get the ID of an object from the fixture. - * + * * @param $className The data class, as specified in your fixture file. Parent classes won't work * @param $identifier The identifier string, as provided in your fixture file * @return int @@ -416,12 +413,12 @@ class SapphireTest extends PHPUnit_Framework_TestCase { "Couldn't find object '%s' (class: %s)", $identifier, $className - ), E_USER_ERROR); + ), E_USER_ERROR); } - + return $obj; } - + /** * Load a YAML fixture file into the database. * Once loaded, you can use idFromFixture() and objFromFixture() to get items from the fixture. @@ -434,19 +431,19 @@ class SapphireTest extends PHPUnit_Framework_TestCase { $fixture->writeInto($this->getFixtureFactory()); $this->fixtures[] = $fixture; } - + /** * Clear all fixtures which were previously loaded through - * {@link loadFixture()} + * {@link loadFixture()} */ public function clearFixtures() { $this->fixtures = array(); $this->getFixtureFactory()->clear(); } - + /** * Useful for writing unit tests without hardcoding folder structures. - * + * * @return String Absolute path to current class. */ protected function getCurrentAbsolutePath() { @@ -454,7 +451,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { if(!$filename) throw new LogicException("getItemPath returned null for " . get_class($this)); return dirname($filename); } - + /** * @return String File path relative to webroot */ @@ -464,7 +461,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { if(substr($path,0,strlen($base)) == $base) $path = preg_replace('/^\/*/', '', substr($path,strlen($base))); return $path; } - + public function tearDown() { // Preserve memory settings ini_set('memory_limit', ($this->originalMemoryLimit) ? $this->originalMemoryLimit : -1); @@ -474,16 +471,16 @@ class SapphireTest extends PHPUnit_Framework_TestCase { Email::set_mailer($this->originalMailer); $this->originalMailer = null; } - $this->mailer = null; + $this->mailer = null; // Restore password validation if($this->originalMemberPasswordValidator) { - Member::set_password_validator($this->originalMemberPasswordValidator); + Member::set_password_validator($this->originalMemberPasswordValidator); } - + // Restore requirements if($this->originalRequirements) { - Requirements::set_backend($this->originalRequirements); + Requirements::set_backend($this->originalRequirements); } // Mark test as no longer being run - we use originalIsRunningTest to allow for nested SapphireTest calls @@ -492,15 +489,18 @@ class SapphireTest extends PHPUnit_Framework_TestCase { // Reset mocked datetime SS_Datetime::clear_mock_now(); - + // Stop the redirection that might have been requested in the test. - // Note: Ideally a clean Controller should be created for each test. + // Note: Ideally a clean Controller should be created for each test. // Now all tests executed in a batch share the same controller. $controller = Controller::has_curr() ? Controller::curr() : null; if ( $controller && $controller->response && $controller->response->getHeader('Location') ) { $controller->response->setStatusCode(200); $controller->response->removeHeader('Location'); } + //unnest injector / config now that tests are over + Injector::unnest(); + Config::unnest(); } public static function assertContains( @@ -547,7 +547,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { public function findEmail($to, $from = null, $subject = null, $content = null) { return $this->mailer->findEmail($to, $from, $subject, $content); } - + /** * Assert that the matching email was sent since the last call to clearEmails() * All of the parameters can either be a string, or, if they start with "/", a PREG-compatible regular expression. @@ -579,7 +579,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { /** * Assert that the given {@link SS_List} includes DataObjects matching the given key-value * pairs. Each match must correspond to 1 distinct record. - * + * * @param $matches The patterns to match. Each pattern is a map of key-value pairs. You can * either pass a single pattern or an array of patterns. * @param $dataObjectSet The {@link SS_List} to test. @@ -587,19 +587,19 @@ class SapphireTest extends PHPUnit_Framework_TestCase { * Examples * -------- * Check that $members includes an entry with Email = sam@example.com: - * $this->assertDOSContains(array('Email' => '...@example.com'), $members); - * - * Check that $members includes entries with Email = sam@example.com and with + * $this->assertDOSContains(array('Email' => '...@example.com'), $members); + * + * Check that $members includes entries with Email = sam@example.com and with * Email = ingo@example.com: - * $this->assertDOSContains(array( - * array('Email' => '...@example.com'), - * array('Email' => 'i...@example.com'), - * ), $members); + * $this->assertDOSContains(array( + * array('Email' => '...@example.com'), + * array('Email' => 'i...@example.com'), + * ), $members); */ public function assertDOSContains($matches, $dataObjectSet) { $extracted = array(); foreach($dataObjectSet as $item) $extracted[] = $item->toMap(); - + foreach($matches as $match) { $matched = false; foreach($extracted as $i => $item) { @@ -615,35 +615,35 @@ class SapphireTest extends PHPUnit_Framework_TestCase { $this->assertTrue( $matched, "Failed asserting that the SS_List contains an item matching " - . var_export($match, true) . "\n\nIn the following SS_List:\n" + . var_export($match, true) . "\n\nIn the following SS_List:\n" . $this->DOSSummaryForMatch($dataObjectSet, $match) ); } - } - + } + /** - * Assert that the given {@link SS_List} includes only DataObjects matching the given + * Assert that the given {@link SS_List} includes only DataObjects matching the given * key-value pairs. Each match must correspond to 1 distinct record. - * + * * @param $matches The patterns to match. Each pattern is a map of key-value pairs. You can * either pass a single pattern or an array of patterns. * @param $dataObjectSet The {@link SS_List} to test. * * Example * -------- - * Check that *only* the entries Sam Minnee and Ingo Schommer exist in $members. Order doesn't + * Check that *only* the entries Sam Minnee and Ingo Schommer exist in $members. Order doesn't * matter: - * $this->assertDOSEquals(array( - * array('FirstName' =>'Sam', 'Surname' => 'Minnee'), - * array('FirstName' => 'Ingo', 'Surname' => 'Schommer'), - * ), $members); + * $this->assertDOSEquals(array( + * array('FirstName' =>'Sam', 'Surname' => 'Minnee'), + * array('FirstName' => 'Ingo', 'Surname' => 'Schommer'), + * ), $members); */ public function assertDOSEquals($matches, $dataObjectSet) { if(!$dataObjectSet) return false; - + $extracted = array(); foreach($dataObjectSet as $item) $extracted[] = $item->toMap(); - + foreach($matches as $match) { $matched = false; foreach($extracted as $i => $item) { @@ -659,11 +659,11 @@ class SapphireTest extends PHPUnit_Framework_TestCase { $this->assertTrue( $matched, "Failed asserting that the SS_List contains an item matching " - . var_export($match, true) . "\n\nIn the following SS_List:\n" + . var_export($match, true) . "\n\nIn the following SS_List:\n" . $this->DOSSummaryForMatch($dataObjectSet, $match) ); } - + // If we have leftovers than the DOS has extra data that shouldn't be there $this->assertTrue( (count($extracted) == 0), @@ -671,19 +671,19 @@ class SapphireTest extends PHPUnit_Framework_TestCase { "Failed asserting that the SS_List contained only the given items, the " . "following items were left over:\n" . var_export($extracted, true) ); - } + } /** * Assert that the every record in the given {@link SS_List} matches the given key-value * pairs. - * + * * @param $match The pattern to match. The pattern is a map of key-value pairs. * @param $dataObjectSet The {@link SS_List} to test. * * Example * -------- * Check that every entry in $members has a Status of 'Active': - * $this->assertDOSAllMatch(array('Status' => 'Active'), $members); + * $this->assertDOSAllMatch(array('Status' => 'Active'), $members); */ public function assertDOSAllMatch($match, $dataObjectSet) { $extracted = array(); @@ -692,12 +692,12 @@ class SapphireTest extends PHPUnit_Framework_TestCase { foreach($extracted as $i => $item) { $this->assertTrue( $this->dataObjectArrayMatch($item, $match), - "Failed asserting that the the following item matched " + "Failed asserting that the the following item matched " . var_export($match, true) . ": " . var_export($item, true) ); } - } - + } + /** * Helper function for the DOS matchers */ @@ -723,17 +723,17 @@ class SapphireTest extends PHPUnit_Framework_TestCase { public static function using_temp_db() { $dbConn = DB::getConn(); $prefix = defined('SS_DATABASE_PREFIX') ? SS_DATABASE_PREFIX : 'ss_'; - return $dbConn && (substr($dbConn->currentDatabase(), 0, strlen($prefix) + 5) + return $dbConn && (substr($dbConn->currentDatabase(), 0, strlen($prefix) + 5) == strtolower(sprintf('%stmpdb', $prefix))); } - + public static function kill_temp_db() { // Delete our temporary database if(self::using_temp_db()) { $dbConn = DB::getConn(); $dbName = $dbConn->currentDatabase(); if($dbName && DB::getConn()->databaseExists($dbName)) { - // Some DataExtensions keep a static cache of information that needs to + // Some DataExtensions keep a static cache of information that needs to // be reset whenever the database is killed foreach(ClassInfo::subclassesFor('DataExtension') as $class) { $toCall = array($class, 'on_db_reset'); @@ -745,7 +745,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { } } } - + /** * Remove all content from the temporary database. */ @@ -753,8 +753,8 @@ class SapphireTest extends PHPUnit_Framework_TestCase { if(self::using_temp_db()) { $dbadmin = new DatabaseAdmin(); $dbadmin->clearAllData(); - - // Some DataExtensions keep a static cache of information that needs to + + // Some DataExtensions keep a static cache of information that needs to // be reset whenever the database is cleaned out $classes = array_merge(ClassInfo::subclassesFor('DataExtension'), ClassInfo::subclassesFor('DataObject')); foreach($classes as $class) { @@ -763,7 +763,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { } } } - + public static function create_temp_db() { // Disable PHPUnit error handling restore_error_handler(); @@ -784,13 +784,13 @@ class SapphireTest extends PHPUnit_Framework_TestCase { $st = Injector::inst()->create('SapphireTest'); $st->resetDBSchema(); - + // Reinstate PHPUnit error handling set_error_handler(array('PHPUnit_Util_ErrorHandler', 'handleError')); - + return $dbname; } - + public static function delete_all_temp_dbs() { $prefix = defined('SS_DATABASE_PREFIX') ? SS_DATABASE_PREFIX : 'ss_'; foreach(DB::getConn()->allDatabaseNames() as $dbName) { @@ -805,7 +805,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { } } } - + /** * Reset the testing database's schema. * @param $includeExtraDataObjects If true, the extraDataObjects tables will also be included @@ -846,7 +846,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { singleton('DataObject')->flushCache(); } } - + /** * Create a member and group with the given permission code, and log in with it. * Returns the member ID. @@ -861,23 +861,23 @@ class SapphireTest extends PHPUnit_Framework_TestCase { $permission->Code = $permCode; $permission->write(); $group->Permissions()->add($permission); - + $member = DataObject::get_one('Member', sprintf('"Email" = \'%s\'', "$permCode@example.org")); if(!$member) $member = Injector::inst()->create('Member'); - + $member->FirstName = $permCode; $member->Surname = "User"; $member->Email = "$permCode@example.org"; $member->write(); $group->Members()->add($member); - + $this->cache_generatedMembers[$permCode] = $member; } - + $this->cache_generatedMembers[$permCode]->logIn(); return $this->cache_generatedMembers[$permCode]->ID; } - + /** * Cache for logInWithPermission() */ diff --git a/tests/control/DirectorTest.php b/tests/control/DirectorTest.php index b96d321be..1d5c6830f 100644 --- a/tests/control/DirectorTest.php +++ b/tests/control/DirectorTest.php @@ -2,7 +2,7 @@ /** * @package framework * @subpackage tests - * + * * @todo test Director::alternateBaseFolder() */ class DirectorTest extends SapphireTest { @@ -10,27 +10,24 @@ class DirectorTest extends SapphireTest { protected static $originalRequestURI; protected $originalProtocolHeaders = array(); - + protected $originalGet = array(); - + protected $originalSession = array(); public function setUp() { parent::setUp(); - - // Required for testRequestFilterInDirectorTest - Injector::nest(); // Hold the original request URI once so it doesn't get overwritten if(!self::$originalRequestURI) { self::$originalRequestURI = $_SERVER['REQUEST_URI']; } $_SERVER['REQUEST_URI'] = 'http://www.mysite.com'; - + $this->originalGet = $_GET; $this->originalSession = $_SESSION; $_SESSION = array(); - + Config::inst()->update('Director', 'rules', array( 'DirectorTestRule/$Action/$ID/$OtherID' => 'DirectorTestRequest_Controller', 'en-nz/$Action/$ID/$OtherID' => array( @@ -49,16 +46,13 @@ class DirectorTest extends SapphireTest { } } } - + public function tearDown() { // TODO Remove director rule, currently API doesnt allow this - - // Remove base URL override (setting to false reverts to default behaviour) - Config::inst()->update('Director', 'alternate_base_url', false); - + $_GET = $this->originalGet; $_SESSION = $this->originalSession; - + // Reinstate the original REQUEST_URI after it was modified by some tests $_SERVER['REQUEST_URI'] = self::$originalRequestURI; @@ -67,34 +61,32 @@ class DirectorTest extends SapphireTest { $_SERVER[$header] = $value; } } - - Injector::unnest(); parent::tearDown(); } - + public function testFileExists() { $tempFileName = 'DirectorTest_testFileExists.tmp'; $tempFilePath = TEMP_FOLDER . '/' . $tempFileName; - + // create temp file file_put_contents($tempFilePath, ''); - + $this->assertTrue( - Director::fileExists($tempFilePath), + Director::fileExists($tempFilePath), 'File exist check with absolute path' ); - + $this->assertTrue( - Director::fileExists($tempFilePath . '?queryparams=1&foo[bar]=bar'), + Director::fileExists($tempFilePath . '?queryparams=1&foo[bar]=bar'), 'File exist check with query params ignored' ); - + unlink($tempFilePath); } - + public function testAbsoluteURL() { - + $rootURL = Director::protocolAndHost(); $_SERVER['REQUEST_URI'] = "$rootURL/mysite/sub-page/"; Config::inst()->update('Director', 'alternate_base_url', '/mysite/'); @@ -116,20 +108,20 @@ class DirectorTest extends SapphireTest { $this->assertEquals('http://www.mytest.com', Director::absoluteURL('http://www.mytest.com', true)); $this->assertEquals("$rootURL/test", Director::absoluteURL("$rootURL/test")); $this->assertEquals("$rootURL/test", Director::absoluteURL("$rootURL/test", true)); - + // Test relative to base $this->assertEquals("$rootURL/mysite/test", Director::absoluteURL("test", true)); $this->assertEquals("$rootURL/mysite/test/url", Director::absoluteURL("test/url", true)); $this->assertEquals("$rootURL/root", Director::absoluteURL("/root", true)); $this->assertEquals("$rootURL/root/url", Director::absoluteURL("/root/url", true)); - + // Test relative to requested page $this->assertEquals("$rootURL/mysite/sub-page/test", Director::absoluteURL("test")); // Legacy behaviour resolves this to $rootURL/mysite/test/url //$this->assertEquals("$rootURL/mysite/sub-page/test/url", Director::absoluteURL("test/url")); $this->assertEquals("$rootURL/root", Director::absoluteURL("/root")); $this->assertEquals("$rootURL/root/url", Director::absoluteURL("/root/url")); - + // Test that javascript links are not left intact $this->assertStringStartsNotWith('javascript', Director::absoluteURL('javascript:alert("attack")')); $this->assertStringStartsNotWith('alert', Director::absoluteURL('javascript:alert("attack")')); @@ -140,7 +132,7 @@ class DirectorTest extends SapphireTest { public function testAlternativeBaseURL() { // Get original protocol and hostname $rootURL = Director::protocolAndHost(); - + // relative base URLs - you should end them in a / Config::inst()->update('Director', 'alternate_base_url', '/relativebase/'); $_SERVER['REQUEST_URI'] = "$rootURL/relativebase/sub-page/"; @@ -180,7 +172,7 @@ class DirectorTest extends SapphireTest { Director::absoluteURL('subfolder/test') ); } - + /** * Tests that {@link Director::is_absolute()} works under different environment types */ @@ -196,12 +188,12 @@ class DirectorTest extends SapphireTest { 'folder' => false, 'a/c:/' => false ); - + foreach($expected as $path => $result) { $this->assertEquals(Director::is_absolute($path), $result, "Test result for $path"); } } - + public function testIsAbsoluteUrl() { $this->assertTrue(Director::is_absolute_url('http://test.com/testpage')); $this->assertTrue(Director::is_absolute_url('ftp://test.com')); @@ -218,7 +210,7 @@ class DirectorTest extends SapphireTest { $this->assertTrue(Director::is_absolute_url('http:test.com')); $this->assertTrue(Director::is_absolute_url('//http://test.com')); } - + public function testIsRelativeUrl() { $siteUrl = Director::absoluteBaseURL(); $this->assertFalse(Director::is_relative_url('http://test.com')); @@ -231,18 +223,18 @@ class DirectorTest extends SapphireTest { $this->assertTrue(Director::is_relative_url('/relative/?url=http://test.com')); $this->assertTrue(Director::is_relative_url('/relative/#=http://test.com')); } - + public function testMakeRelative() { $siteUrl = Director::absoluteBaseURL(); $siteUrlNoProtocol = preg_replace('/https?:\/\//', '', $siteUrl); - + $this->assertEquals(Director::makeRelative("$siteUrl"), ''); $this->assertEquals(Director::makeRelative("https://$siteUrlNoProtocol"), ''); $this->assertEquals(Director::makeRelative("http://$siteUrlNoProtocol"), ''); $this->assertEquals(Director::makeRelative(" $siteUrl/testpage "), 'testpage'); $this->assertEquals(Director::makeRelative("$siteUrlNoProtocol/testpage"), 'testpage'); - + $this->assertEquals(Director::makeRelative('ftp://test.com'), 'ftp://test.com'); $this->assertEquals(Director::makeRelative('http://test.com'), 'http://test.com'); @@ -252,7 +244,7 @@ class DirectorTest extends SapphireTest { $this->assertEquals("test", Director::makeRelative("https://".$siteUrlNoProtocol."/test")); $this->assertEquals("test", Director::makeRelative("http://".$siteUrlNoProtocol."/test")); } - + /** * Mostly tested by {@link testIsRelativeUrl()}, * just adding the host name matching aspect here. @@ -264,7 +256,7 @@ class DirectorTest extends SapphireTest { $this->assertFalse(Director::is_site_url("http://test.com?url=" . urlencode(Director::absoluteBaseURL()))); $this->assertFalse(Director::is_site_url("//test.com?url=" . Director::absoluteBaseURL())); } - + /** * Tests isDev, isTest, isLive set from querystring */ @@ -274,32 +266,32 @@ class DirectorTest extends SapphireTest { unset($_SESSION['isLive']); unset($_GET['isTest']); unset($_GET['isDev']); - + // Test isDev=1 $_GET['isDev'] = '1'; $this->assertTrue(Director::isDev()); $this->assertFalse(Director::isTest()); $this->assertFalse(Director::isLive()); - + // Test persistence unset($_GET['isDev']); $this->assertTrue(Director::isDev()); $this->assertFalse(Director::isTest()); $this->assertFalse(Director::isLive()); - + // Test change to isTest $_GET['isTest'] = '1'; $this->assertFalse(Director::isDev()); $this->assertTrue(Director::isTest()); $this->assertFalse(Director::isLive()); - + // Test persistence unset($_GET['isTest']); $this->assertFalse(Director::isDev()); $this->assertTrue(Director::isTest()); $this->assertFalse(Director::isLive()); } - + public function testResetGlobalsAfterTestRequest() { $_GET = array('somekey' => 'getvalue'); $_POST = array('somekey' => 'postvalue'); @@ -315,7 +307,7 @@ class DirectorTest extends SapphireTest { $this->assertEquals('cookievalue', $_COOKIE['somekey'], '$_COOKIE reset to original value after Director::test()'); } - + public function testTestRequestCarriesGlobals() { $fixture = array('somekey' => 'sometestvalue'); foreach(array('get', 'post') as $method) { @@ -329,20 +321,20 @@ class DirectorTest extends SapphireTest { } } } - + /** - * Tests that additional parameters specified in the routing table are - * saved in the request + * Tests that additional parameters specified in the routing table are + * saved in the request */ public function testRouteParams() { Director::test('en-nz/myaction/myid/myotherid', null, null, null, null, null, null, $request); - + $this->assertEquals( - $request->params(), + $request->params(), array( 'Controller' => 'DirectorTestRequest_Controller', - 'Action' => 'myaction', - 'ID' => 'myid', + 'Action' => 'myaction', + 'ID' => 'myid', 'OtherID' => 'myotherid', 'Locale' => 'en_NZ' ) @@ -406,7 +398,7 @@ class DirectorTest extends SapphireTest { 'CONTENT_TYPE' => 'text/xml', 'CONTENT_LENGTH' => 10 ); - + $headers = array( 'Host' => 'host', 'User-Agent' => 'User Agent', @@ -416,7 +408,7 @@ class DirectorTest extends SapphireTest { 'Content-Type' => 'text/xml', 'Content-Length' => '10' ); - + $this->assertEquals($headers, Director::extract_request_headers($request)); } @@ -483,34 +475,34 @@ class DirectorTest extends SapphireTest { $_SERVER = $origServer; } - + public function testRequestFilterInDirectorTest() { $filter = new TestRequestFilter; - + $processor = new RequestProcessor(array($filter)); - + Injector::inst()->registerService($processor, 'RequestProcessor'); - + $response = Director::test('some-dummy-url'); - + $this->assertEquals(1, $filter->preCalls); $this->assertEquals(1, $filter->postCalls); - + $filter->failPost = true; - + $this->setExpectedException('SS_HTTPResponse_Exception'); - + $response = Director::test('some-dummy-url'); - + $this->assertEquals(2, $filter->preCalls); $this->assertEquals(2, $filter->postCalls); - + $filter->failPre = true; - + $response = Director::test('some-dummy-url'); - + $this->assertEquals(3, $filter->preCalls); - + // preCall 'false' will trigger an exception and prevent post call execution $this->assertEquals(2, $filter->postCalls); } @@ -519,13 +511,13 @@ class DirectorTest extends SapphireTest { class TestRequestFilter implements RequestFilter, TestOnly { public $preCalls = 0; public $postCalls = 0; - + public $failPre = false; public $failPost = false; public function preRequest(\SS_HTTPRequest $request, \Session $session, \DataModel $model) { ++$this->preCalls; - + if ($this->failPre) { return false; } @@ -533,7 +525,7 @@ class TestRequestFilter implements RequestFilter, TestOnly { public function postRequest(\SS_HTTPRequest $request, \SS_HTTPResponse $response, \DataModel $model) { ++$this->postCalls; - + if ($this->failPost) { return false; } diff --git a/tests/core/ConfigTest.php b/tests/core/ConfigTest.php index 21ae3bf43..07b3490c2 100644 --- a/tests/core/ConfigTest.php +++ b/tests/core/ConfigTest.php @@ -82,23 +82,23 @@ class ConfigTest_TestNest extends Object implements TestOnly { } class ConfigTest extends SapphireTest { - + public function testNest() { - + // Check basic config $this->assertEquals(3, Config::inst()->get('ConfigTest_TestNest', 'foo')); $this->assertEquals(5, Config::inst()->get('ConfigTest_TestNest', 'bar')); - + // Test nest copies data Config::nest(); $this->assertEquals(3, Config::inst()->get('ConfigTest_TestNest', 'foo')); $this->assertEquals(5, Config::inst()->get('ConfigTest_TestNest', 'bar')); - + // Test nested data can be updated Config::inst()->update('ConfigTest_TestNest', 'foo', 4); $this->assertEquals(4, Config::inst()->get('ConfigTest_TestNest', 'foo')); $this->assertEquals(5, Config::inst()->get('ConfigTest_TestNest', 'bar')); - + // Test unnest restores data Config::unnest(); $this->assertEquals(3, Config::inst()->get('ConfigTest_TestNest', 'foo')); @@ -193,8 +193,8 @@ class ConfigTest extends SapphireTest { Config::inst()->get('ConfigStaticTest_Fourth', 'first', Config::UNINHERITED)); // Subclasses that don't have the static explicitly defined should allow definition, also - // This also checks that set can be called after the first uninherited get() - // call (which can be buggy due to caching) + // This also checks that set can be called after the first uninherited get() + // call (which can be buggy due to caching) Config::inst()->update('ConfigStaticTest_Fourth', 'first', array('test_4b')); $this->assertContains('test_4b', Config::inst()->get('ConfigStaticTest_Fourth', 'first', Config::UNINHERITED)); } @@ -227,7 +227,7 @@ class ConfigTest extends SapphireTest { $result = array('A' => 1, 'B' => 2, 'C' => array('Foo' => 1, 'Bar' => 2), 'D' => 3); Config::merge_array_low_into_high($result, array('C' => array('Bar' => 3, 'Baz' => 4))); - $this->assertEquals($result, + $this->assertEquals($result, array('A' => 1, 'B' => 2, 'C' => array('Foo' => 1, 'Bar' => 2, 'Baz' => 4), 'D' => 3)); $result = array('A' => 1, 'B' => 2, 'C' => array('Foo' => 1, 'Bar' => 2), 'D' => 3); diff --git a/tests/core/manifest/ConfigManifestTest.php b/tests/core/manifest/ConfigManifestTest.php index e43dcf344..a1fac8424 100644 --- a/tests/core/manifest/ConfigManifestTest.php +++ b/tests/core/manifest/ConfigManifestTest.php @@ -391,7 +391,7 @@ class ConfigManifestTest extends SapphireTest { public function testEnvironmentRules() { foreach (array('dev', 'test', 'live') as $env) { - Config::inst()->nest(); + Config::nest(); Config::inst()->update('Director', 'environment_type', $env); $config = $this->getConfigFixtureValue('Environment'); @@ -403,13 +403,11 @@ class ConfigManifestTest extends SapphireTest { ); } - Config::inst()->unnest(); + Config::unnest(); } } public function testDynamicEnvironmentRules() { - Config::inst()->nest(); - // First, make sure environment_type is live Config::inst()->update('Director', 'environment_type', 'live'); $this->assertEquals('live', Config::inst()->get('Director', 'environment_type')); @@ -423,8 +421,6 @@ class ConfigManifestTest extends SapphireTest { // And that the dynamic rule was calculated correctly $this->assertEquals('dev', Config::inst()->get('ConfigManifestTest', 'DynamicEnvironment')); - - Config::inst()->unnest(); } public function testMultipleRules() { diff --git a/tests/dev/DevAdminControllerTest.php b/tests/dev/DevAdminControllerTest.php index c09b14684..8425e038e 100644 --- a/tests/dev/DevAdminControllerTest.php +++ b/tests/dev/DevAdminControllerTest.php @@ -1,17 +1,17 @@ -update('DevelopmentAdmin', 'registered_controllers', array( + Config::inst()->update('DevelopmentAdmin', 'registered_controllers', array( 'x1' => array( 'controller' => 'DevAdminControllerTest_Controller1', 'links' => array( @@ -27,45 +27,40 @@ class DevAdminControllerTest extends FunctionalTest { ) )); } - - public function tearDown(){ - parent::tearDown(); - Config::unnest(); - } - - + + public function testGoodRegisteredControllerOutput(){ - // Check for the controller running from the registered url above + // Check for the controller running from the registered url above // (we use contains rather than equals because sometimes you get Warning: You probably want to define an entry in $_FILE_TO_URL_MAPPING) $this->assertContains(DevAdminControllerTest_Controller1::OK_MSG, $this->getCapture('/dev/x1')); $this->assertContains(DevAdminControllerTest_Controller1::OK_MSG, $this->getCapture('/dev/x1/y1')); } - + public function testGoodRegisteredControllerStatus(){ // Check response code is 200/OK $this->assertEquals(false, $this->getAndCheckForError('/dev/x1')); $this->assertEquals(false, $this->getAndCheckForError('/dev/x1/y1')); - + // Check response code is 500/ some sort of error $this->assertEquals(true, $this->getAndCheckForError('/dev/x2')); } - - - + + + protected function getCapture($url){ $this->logInWithPermission('ADMIN'); - + ob_start(); $this->get($url); $r = ob_get_contents(); ob_end_clean(); - + return $r; } - + protected function getAndCheckForError($url){ $this->logInWithPermission('ADMIN'); - + if(Director::is_cli()){ // when in CLI the admin controller throws exceptions ob_start(); @@ -75,10 +70,10 @@ class DevAdminControllerTest extends FunctionalTest { ob_end_clean(); return true; } - + ob_end_clean(); return false; - + }else{ // when in http the admin controller sets a response header ob_start(); @@ -87,30 +82,30 @@ class DevAdminControllerTest extends FunctionalTest { return $resp->isError(); } } - + } class DevAdminControllerTest_Controller1 extends Controller { - + const OK_MSG = 'DevAdminControllerTest_Controller1 TEST OK'; - + private static $url_handlers = array( '' => 'index', 'y1' => 'y1Action' ); - + private static $allowed_actions = array( 'index', 'y1Action', ); - - + + public function index(){ echo self::OK_MSG; } - + public function y1Action(){ echo self::OK_MSG; - } - -} \ No newline at end of file + } + +} diff --git a/tests/model/DataObjectSchemaGenerationTest.php b/tests/model/DataObjectSchemaGenerationTest.php index c33cb7e36..76ca294eb 100644 --- a/tests/model/DataObjectSchemaGenerationTest.php +++ b/tests/model/DataObjectSchemaGenerationTest.php @@ -5,13 +5,13 @@ class DataObjectSchemaGenerationTest extends SapphireTest { 'DataObjectSchemaGenerationTest_DO', 'DataObjectSchemaGenerationTest_IndexDO' ); - + public function setUpOnce() { - + // enable fulltext option on this table Config::inst()->update('DataObjectSchemaGenerationTest_IndexDO', 'create_table_options', array('MySQLDatabase' => 'ENGINE=MyISAM')); - + parent::setUpOnce(); } @@ -23,7 +23,7 @@ class DataObjectSchemaGenerationTest extends SapphireTest { DB::quiet(); // Table will have been initially created by the $extraDataObjects setting - + // Verify that it doesn't need to be recreated $db->beginSchemaUpdate(); $obj = new DataObjectSchemaGenerationTest_DO(); @@ -41,9 +41,8 @@ class DataObjectSchemaGenerationTest extends SapphireTest { DB::quiet(); // Table will have been initially created by the $extraDataObjects setting - + // Let's insert a new field here - Config::nest(); Config::inst()->update('DataObjectSchemaGenerationTest_DO', 'db', array( 'SecretField' => 'Varchar(100)' )); @@ -55,20 +54,17 @@ class DataObjectSchemaGenerationTest extends SapphireTest { $needsUpdating = $db->doesSchemaNeedUpdating(); $db->cancelSchemaUpdate(); $this->assertTrue($needsUpdating); - - // Restore db configuration - Config::unnest(); } - + /** - * Check that indexes on a newly generated class do not subsequently request modification + * Check that indexes on a newly generated class do not subsequently request modification */ public function testIndexesDontRerequestChanges() { $db = DB::getConn(); DB::quiet(); - + // Table will have been initially created by the $extraDataObjects setting - + // Verify that it doesn't need to be recreated $db->beginSchemaUpdate(); $obj = new DataObjectSchemaGenerationTest_IndexDO(); @@ -76,9 +72,8 @@ class DataObjectSchemaGenerationTest extends SapphireTest { $needsUpdating = $db->doesSchemaNeedUpdating(); $db->cancelSchemaUpdate(); $this->assertFalse($needsUpdating); - + // Test with alternate index format, although these indexes are the same - Config::nest(); Config::inst()->remove('DataObjectSchemaGenerationTest_IndexDO', 'indexes'); Config::inst()->update('DataObjectSchemaGenerationTest_IndexDO', 'indexes', Config::inst()->get('DataObjectSchemaGenerationTest_IndexDO', 'indexes_alt') @@ -91,22 +86,18 @@ class DataObjectSchemaGenerationTest extends SapphireTest { $needsUpdating = $db->doesSchemaNeedUpdating(); $db->cancelSchemaUpdate(); $this->assertFalse($needsUpdating); - - // Restore old index format - Config::unnest(); } - + /** * Check that updates to a dataobject's indexes are reflected in DDL */ public function testIndexesRerequestChanges() { $db = DB::getConn(); DB::quiet(); - + // Table will have been initially created by the $extraDataObjects setting - + // Update the SearchFields index here - Config::nest(); Config::inst()->update('DataObjectSchemaGenerationTest_IndexDO', 'indexes', array( 'SearchFields' => array( 'value' => 'Title' @@ -120,17 +111,14 @@ class DataObjectSchemaGenerationTest extends SapphireTest { $needsUpdating = $db->doesSchemaNeedUpdating(); $db->cancelSchemaUpdate(); $this->assertTrue($needsUpdating); - - // Restore old indexes - Config::unnest(); } - + /** * Tests the generation of the ClassName spec and ensure it's not unnecessarily influenced * by the order of classnames of existing records */ public function testClassNameSpecGeneration() { - + // Test with blank entries DataObject::clear_classname_spec_cache(); $fields = DataObject::database_fields('DataObjectSchemaGenerationTest_DO'); @@ -138,7 +126,7 @@ class DataObjectSchemaGenerationTest extends SapphireTest { "Enum('DataObjectSchemaGenerationTest_DO, DataObjectSchemaGenerationTest_IndexDO')", $fields['ClassName'] ); - + // Test with instance of subclass $item1 = new DataObjectSchemaGenerationTest_IndexDO(); $item1->write(); @@ -149,7 +137,7 @@ class DataObjectSchemaGenerationTest extends SapphireTest { $fields['ClassName'] ); $item1->delete(); - + // Test with instance of main class $item2 = new DataObjectSchemaGenerationTest_DO(); $item2->write(); @@ -160,7 +148,7 @@ class DataObjectSchemaGenerationTest extends SapphireTest { $fields['ClassName'] ); $item2->delete(); - + // Test with instances of both classes $item1 = new DataObjectSchemaGenerationTest_IndexDO(); $item1->write(); @@ -199,7 +187,7 @@ class DataObjectSchemaGenerationTest_IndexDO extends DataObjectSchemaGenerationT 'value' => '"Title","Content"' ) ); - + /** @config */ private static $indexes_alt = array( 'NameIndex' => array( @@ -209,4 +197,4 @@ class DataObjectSchemaGenerationTest_IndexDO extends DataObjectSchemaGenerationT ), 'SearchFields' => 'fulltext ("Title","Content")' ); -} \ No newline at end of file +} diff --git a/tests/model/MySQLDatabaseTest.php b/tests/model/MySQLDatabaseTest.php index 83f7fb8f4..9b113fd5f 100644 --- a/tests/model/MySQLDatabaseTest.php +++ b/tests/model/MySQLDatabaseTest.php @@ -8,8 +8,9 @@ class MySQLDatabaseTest extends SapphireTest { protected $extraDataObjects = array( 'MySQLDatabaseTest_DO', ); - + public function setUp() { + parent::setUp(); if(DB::getConn() instanceof MySQLDatabase) { MySQLDatabaseTest_DO::config()->db = array( 'MultiEnum1' => 'MultiEnum("A, B, C, D","")', @@ -18,9 +19,8 @@ class MySQLDatabaseTest extends SapphireTest { ); } $this->markTestSkipped('This test requires the Config API to be immutable'); - parent::setUp(); } - + /** * Check that once a schema has been generated, then it doesn't need any more updating */ diff --git a/tests/oembed/OembedTest.php b/tests/oembed/OembedTest.php index 3570f7bb6..73d94c49b 100644 --- a/tests/oembed/OembedTest.php +++ b/tests/oembed/OembedTest.php @@ -1,16 +1,6 @@ update('Oembed', 'providers', array( 'http://*.silverstripe.com/watch*'=>'http://www.silverstripe.com/oembed/' @@ -35,7 +25,7 @@ class OembedTest extends SapphireTest { $result = Oembed::get_oembed_from_url('http://www.silverstripe.com/watch12345', false, array('foo'=>'bar')); $this->assertTrue($result!=false); $this->assertEquals($result->getOembedURL(), 'http://www.silverstripe.com/oembed/?format=json&url=' - . urlencode('http://www.silverstripe.com/watch12345').'&foo=bar', + . urlencode('http://www.silverstripe.com/watch12345').'&foo=bar', 'Includes options'); // Test magic. diff --git a/tests/security/BasicAuthTest.php b/tests/security/BasicAuthTest.php index 8be7ce73e..62b2479fa 100644 --- a/tests/security/BasicAuthTest.php +++ b/tests/security/BasicAuthTest.php @@ -14,46 +14,40 @@ class BasicAuthTest extends FunctionalTest { parent::setUp(); // Fixtures assume Email is the field used to identify the log in identity - Config::nest(); Member::config()->unique_identifier_field = 'Email'; Member::config()->lock_out_after_incorrect_logins = 10; } - public function tearDown() { - Config::unnest(); - parent::tearDown(); - } - public function testBasicAuthEnabledWithoutLogin() { $origUser = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : null; $origPw = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : null; - + unset($_SERVER['PHP_AUTH_USER']); unset($_SERVER['PHP_AUTH_PW']); - + $response = Director::test('BasicAuthTest_ControllerSecuredWithPermission'); $this->assertEquals(401, $response->getStatusCode()); - + $_SERVER['PHP_AUTH_USER'] = $origUser; $_SERVER['PHP_AUTH_PW'] = $origPw; } - + public function testBasicAuthDoesntCallActionOrFurtherInitOnAuthFailure() { $origUser = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : null; $origPw = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : null; - + unset($_SERVER['PHP_AUTH_USER']); unset($_SERVER['PHP_AUTH_PW']); $response = Director::test('BasicAuthTest_ControllerSecuredWithPermission'); $this->assertFalse(BasicAuthTest_ControllerSecuredWithPermission::$index_called); $this->assertFalse(BasicAuthTest_ControllerSecuredWithPermission::$post_init_called); - + $_SERVER['PHP_AUTH_USER'] = 'user-in-mygroup@test.com'; $_SERVER['PHP_AUTH_PW'] = 'test'; $response = Director::test('BasicAuthTest_ControllerSecuredWithPermission'); $this->assertTrue(BasicAuthTest_ControllerSecuredWithPermission::$index_called); $this->assertTrue(BasicAuthTest_ControllerSecuredWithPermission::$post_init_called); - + $_SERVER['PHP_AUTH_USER'] = $origUser; $_SERVER['PHP_AUTH_PW'] = $origPw; } @@ -61,45 +55,45 @@ class BasicAuthTest extends FunctionalTest { public function testBasicAuthEnabledWithPermission() { $origUser = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : null; $origPw = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : null; - + $_SERVER['PHP_AUTH_USER'] = 'user-in-mygroup@test.com'; $_SERVER['PHP_AUTH_PW'] = 'wrongpassword'; $response = Director::test('BasicAuthTest_ControllerSecuredWithPermission'); $this->assertEquals(401, $response->getStatusCode(), 'Invalid users dont have access'); - + $_SERVER['PHP_AUTH_USER'] = 'user-without-groups@test.com'; $_SERVER['PHP_AUTH_PW'] = 'test'; $response = Director::test('BasicAuthTest_ControllerSecuredWithPermission'); $this->assertEquals(401, $response->getStatusCode(), 'Valid user without required permission has no access'); - + $_SERVER['PHP_AUTH_USER'] = 'user-in-mygroup@test.com'; $_SERVER['PHP_AUTH_PW'] = 'test'; $response = Director::test('BasicAuthTest_ControllerSecuredWithPermission'); $this->assertEquals(200, $response->getStatusCode(), 'Valid user with required permission has access'); - + $_SERVER['PHP_AUTH_USER'] = $origUser; $_SERVER['PHP_AUTH_PW'] = $origPw; } - + public function testBasicAuthEnabledWithoutPermission() { $origUser = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : null; $origPw = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : null; - + $_SERVER['PHP_AUTH_USER'] = 'user-without-groups@test.com'; $_SERVER['PHP_AUTH_PW'] = 'wrongpassword'; $response = Director::test('BasicAuthTest_ControllerSecuredWithoutPermission'); $this->assertEquals(401, $response->getStatusCode(), 'Invalid users dont have access'); - + $_SERVER['PHP_AUTH_USER'] = 'user-without-groups@test.com'; $_SERVER['PHP_AUTH_PW'] = 'test'; $response = Director::test('BasicAuthTest_ControllerSecuredWithoutPermission'); $this->assertEquals(200, $response->getStatusCode(), 'All valid users have access'); - + $_SERVER['PHP_AUTH_USER'] = 'user-in-mygroup@test.com'; $_SERVER['PHP_AUTH_PW'] = 'test'; $response = Director::test('BasicAuthTest_ControllerSecuredWithoutPermission'); $this->assertEquals(200, $response->getStatusCode(), 'All valid users have access'); - + $_SERVER['PHP_AUTH_USER'] = $origUser; $_SERVER['PHP_AUTH_PW'] = $origPw; } @@ -131,23 +125,23 @@ class BasicAuthTest extends FunctionalTest { } class BasicAuthTest_ControllerSecuredWithPermission extends Controller implements TestOnly { - + static $post_init_called = false; - + static $index_called = false; protected $template = 'BlankPage'; - + public function init() { self::$post_init_called = false; self::$index_called = false; - + BasicAuth::protect_entire_site(true, 'MYCODE'); parent::init(); - + self::$post_init_called = true; } - + public function index() { self::$index_called = true; } @@ -164,5 +158,5 @@ class BasicAuthTest_ControllerSecuredWithoutPermission extends Controller implem BasicAuth::protect_entire_site(true, null); parent::init(); } - + } From 28be51cab0b567b692632503e0f440d30a2fe09e Mon Sep 17 00:00:00 2001 From: Loz Calver Date: Sat, 25 Oct 2014 22:28:28 +0100 Subject: [PATCH 006/110] FIX: Config state leaking between unit tests --- tests/core/ConfigTest.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/core/ConfigTest.php b/tests/core/ConfigTest.php index 07b3490c2..e0abcaa8a 100644 --- a/tests/core/ConfigTest.php +++ b/tests/core/ConfigTest.php @@ -189,8 +189,7 @@ class ConfigTest extends SapphireTest { // But it won't affect subclasses - this is *uninherited* static $this->assertNotContains('test_2b', Config::inst()->get('ConfigStaticTest_Third', 'first', Config::UNINHERITED)); - $this->assertNotContains('test_2b', - Config::inst()->get('ConfigStaticTest_Fourth', 'first', Config::UNINHERITED)); + $this->assertNull(Config::inst()->get('ConfigStaticTest_Fourth', 'first', Config::UNINHERITED)); // Subclasses that don't have the static explicitly defined should allow definition, also // This also checks that set can be called after the first uninherited get() From f21427d7fa309dcc6229cca79c9f73f60564a7b3 Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Sat, 7 Mar 2015 10:32:17 +0000 Subject: [PATCH 007/110] DOCS Explaining test suite nesting --- dev/SapphireTest.php | 2 +- .../06_Testing/00_Unit_Testing.md | 38 ++++++++++++++----- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/dev/SapphireTest.php b/dev/SapphireTest.php index c0de44d29..aacb86c18 100644 --- a/dev/SapphireTest.php +++ b/dev/SapphireTest.php @@ -347,7 +347,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { Injector::unnest(); Config::unnest(); - if($this->extensionsToReapply || $this->extensionsToRemove || $this->extraDataObjects) { + if(!empty($this->extensionsToReapply) || !empty($this->extensionsToRemove) || !empty($this->extraDataObjects)) { $this->resetDBSchema(); } } diff --git a/docs/en/02_Developer_Guides/06_Testing/00_Unit_Testing.md b/docs/en/02_Developer_Guides/06_Testing/00_Unit_Testing.md index 1771e640b..7afd1894c 100644 --- a/docs/en/02_Developer_Guides/06_Testing/00_Unit_Testing.md +++ b/docs/en/02_Developer_Guides/06_Testing/00_Unit_Testing.md @@ -182,18 +182,10 @@ end of each test. $page->publish('Stage', 'Live'); } - // reset configuration for the test. - Config::nest(); + // set custom configuration for the test. Config::inst()->update('Foo', 'bar', 'Hello!'); } - public function tearDown() { - // restores the config variables - Config::unnest(); - - parent::tearDown(); - } - public function testMyMethod() { // .. } @@ -223,6 +215,32 @@ individual test case. // .. } } + +### Config and Injector Nesting + +A powerful feature of both [`Config`](/developer_guides/configuration/configuration/) and [`Injector`](/developer_guides/extending/injector/) is the ability to "nest" them so that you can make changes that can easily be discarded without having to manage previous values. + +The testing suite makes use of this to "sandbox" each of the unit tests as well as each suite to prevent leakage between tests. + +If you need to make changes to `Config` (or `Injector) for each test (or the whole suite) you can safely update `Config` (or `Injector`) settings in the `setUp` or `tearDown` functions. + +It's important to remember that the `parent::setUp();` functions will need to be called first to ensure the nesting feature works as expected. + + :::php + function setUpOnce() { + parent::setUpOnce(); + //this will remain for the whole suite and be removed for any other tests + Config::inst()->update('ClassName', 'var_name', 'var_value'); + } + + function testFeatureDoesAsExpected() { + //this will be reset to 'var_value' at the end of this test function + Config::inst()->update('ClassName', 'var_name', 'new_var_value'); + } + + function testAnotherFeatureDoesAsExpected() { + Config::inst()->get('ClassName', 'var_name'); // this will be 'var_value' + } ## Generating a Coverage Report @@ -266,4 +284,4 @@ some `thirdparty/` directories add the following to the `phpunit.xml` configurat * [api:TestRunner] * [api:SapphireTest] -* [api:FunctionalTest] \ No newline at end of file +* [api:FunctionalTest] From 1b93db019cd3fa60c438675afdbd4d6013bf1707 Mon Sep 17 00:00:00 2001 From: Matthew Hailwood Date: Fri, 12 Jun 2015 13:38:09 +1200 Subject: [PATCH 008/110] Add 0 Based Position tip. --- docs/en/02_Developer_Guides/01_Templates/01_Syntax.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/02_Developer_Guides/01_Templates/01_Syntax.md b/docs/en/02_Developer_Guides/01_Templates/01_Syntax.md index 46f7a3640..321544a73 100644 --- a/docs/en/02_Developer_Guides/01_Templates/01_Syntax.md +++ b/docs/en/02_Developer_Guides/01_Templates/01_Syntax.md @@ -298,6 +298,7 @@ iteration. * `$First`, `$Last`, `$Middle`: Booleans about the position in the list. * `$FirstLast`: Returns a string, "first", "last", or "". Useful for CSS classes. * `$Pos`: The current position in the list (integer). Will start at 1. + * `$Pos(0)`: The current position in the list (integer). Will start at 0. * `$TotalItems`: Number of items in the list (integer). :::ss From 40c5b8b6758676a3e2a5daf3c438a7720c49baaf Mon Sep 17 00:00:00 2001 From: micmania1 Date: Sun, 25 May 2014 01:46:07 +0100 Subject: [PATCH 009/110] FIX FulltextFilter did not work and was not usable --- search/filters/FulltextFilter.php | 42 ++++++++++++++++++-- search/filters/SearchFilter.php | 7 +++- tests/search/FulltextFilterTest.php | 61 +++++++++++++++++++++++++++++ tests/search/FulltextFilterTest.yml | 16 ++++++++ 4 files changed, 122 insertions(+), 4 deletions(-) mode change 100644 => 100755 search/filters/FulltextFilter.php create mode 100755 tests/search/FulltextFilterTest.php create mode 100644 tests/search/FulltextFilterTest.yml diff --git a/search/filters/FulltextFilter.php b/search/filters/FulltextFilter.php old mode 100644 new mode 100755 index 36b77b4c2..ec98e2f63 --- a/search/filters/FulltextFilter.php +++ b/search/filters/FulltextFilter.php @@ -17,17 +17,17 @@ * database table, using the {$indexes} hash in your DataObject subclass: * * - * static $indexes = array( + * private static $indexes = array( * 'SearchFields' => 'fulltext(Name, Title, Description)' * ); * * - * @package framework - * @subpackage search + * @todo Add support for databases besides MySQL */ class FulltextFilter extends SearchFilter { protected function applyOne(DataQuery $query) { + $this->model = $query->applyRelation($this->relation); return $query->where(sprintf( "MATCH (%s) AGAINST ('%s')", $this->getDbName(), @@ -36,6 +36,7 @@ class FulltextFilter extends SearchFilter { } protected function excludeOne(DataQuery $query) { + $this->model = $query->applyRelation($this->relation); return $query->where(sprintf( "NOT MATCH (%s) AGAINST ('%s')", $this->getDbName(), @@ -46,4 +47,39 @@ class FulltextFilter extends SearchFilter { public function isEmpty() { return $this->getValue() === array() || $this->getValue() === null || $this->getValue() === ''; } + + + /** + * This implementation allows for a list of columns to be passed into MATCH() instead of just one. + * + * @example + * + * MyDataObject::get()->filter('SearchFields:fulltext', 'search term') + * + * + * @return string + */ + public function getDbName() { + $indexes = Config::inst()->get($this->model, "indexes"); + if(is_array($indexes) && array_key_exists($this->getName(), $indexes)) { + $index = $indexes[$this->getName()]; + if(is_array($index) && array_key_exists("value", $index)) { + return $index['value']; + } else { + // Parse a fulltext string (eg. fulltext ("ColumnA", "ColumnB")) to figure out which columns + // we need to search. + if(preg_match('/^fulltext\ \((.+)\)$/i', $index, $matches)) { + return $matches[1]; + } else { + throw new Exception("Invalid fulltext index format for '" . $this->getName() + . "' on '" . $this->model . "'"); + return; + } + } + return $columns; + } + + throw new Exception($this->getName() . ' is not a fulltext index on ' . $this->model . '.'); + } + } diff --git a/search/filters/SearchFilter.php b/search/filters/SearchFilter.php index e09e97dd1..b4efdfc9a 100644 --- a/search/filters/SearchFilter.php +++ b/search/filters/SearchFilter.php @@ -166,6 +166,11 @@ abstract class SearchFilter extends Object { return $this->name; } + // Ensure that we're dealing with a DataObject. + if (!is_subclass_of($this->model, 'DataObject')) { + throw new Exception("Model supplied to " . get_class($this) . " should be an instance of DataObject."); + } + $candidateClass = ClassInfo::table_for_object_field( $this->model, $this->name @@ -178,7 +183,7 @@ abstract class SearchFilter extends Object { return '"' . implode('"."', $parts) . '"'; } - return "\"$candidateClass\".\"$this->name\""; + return "\"{$candidateClass}\".\"{$this->name}\""; } /** diff --git a/tests/search/FulltextFilterTest.php b/tests/search/FulltextFilterTest.php new file mode 100755 index 000000000..49b75911d --- /dev/null +++ b/tests/search/FulltextFilterTest.php @@ -0,0 +1,61 @@ +assertEquals(3, $baseQuery->count(), "FulltextDataObject count does not match."); + + // First we'll text the 'SearchFields' which has been set using an array + $search = $baseQuery->filter("SearchFields:fulltext", 'SilverStripe'); + $this->assertEquals(1, $search->count()); + + $search = $baseQuery->exclude("SearchFields:fulltext", "SilverStripe"); + $this->assertEquals(2, $search->count()); + + // Now we'll run the same tests on 'OtherSearchFields' which should yield the same resutls + // but has been set using a string. + $search = $baseQuery->filter("OtherSearchFields:fulltext", 'SilverStripe'); + $this->assertEquals(1, $search->count()); + + $search = $baseQuery->exclude("OtherSearchFields:fulltext", "SilverStripe"); + $this->assertEquals(2, $search->count()); + + // Edgecase + $this->setExpectedException("Exception"); + $search = $baseQuery->exclude("Madeup:fulltext", "SilverStripe"); + } else { + $this->markTestSkipped("FulltextFilter only supports MySQL syntax."); + } + } + +} + + +class FulltextDataObject extends DataObject { + + private static $db = array( + "ColumnA" => "Varchar(255)", + "ColumnB" => "HTMLText", + "ColumnC" => "Varchar(255)", + "ColumnD" => "HTMLText", + ); + + private static $indexes = array( + 'SearchFields' => array( + 'type' => 'fulltext', + 'name' => 'SearchFields', + 'value' => '"ColumnA", "ColumnB"', + ), + 'OtherSearchFields' => 'fulltext ("ColumnC", "ColumnD")', + ); + + private static $create_table_options = array( + "MySQLDatabase" => "ENGINE=MyISAM", + ); + +} \ No newline at end of file diff --git a/tests/search/FulltextFilterTest.yml b/tests/search/FulltextFilterTest.yml new file mode 100644 index 000000000..b3be2215b --- /dev/null +++ b/tests/search/FulltextFilterTest.yml @@ -0,0 +1,16 @@ +FulltextDataObject: + object1: + ColumnA: 'SilverStripe' + CluumnB:

Some content about SilverStripe.

+ ColumnC: 'SilverStripe' + ColumnD: '

Some content about SilverStripe.

+ object2: + ColumnA: 'Test Row' + ColumnB: '

Some information about this test row.

' + ColumnC: 'Test Row' + ColumnD: '

Some information about this test row.

' + object3: + ColumnA: 'Fulltext Search' + ColumnB: '

Testing fulltext search.

' + ColumnC: 'Fulltext Search + ColumnD: '

Testing fulltext search.

' \ No newline at end of file From 782c4cbf6f5cde2fa4d45cdbd17552773a67f88f Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Thu, 29 Jan 2015 12:48:46 +1300 Subject: [PATCH 010/110] API Enable single-column fulltext filter search as fallback --- .../12_Search/02_FulltextSearch.md | 37 ++++++++++++ search/filters/FulltextFilter.php | 10 ++-- search/filters/SearchFilter.php | 37 ++++++------ tests/search/FulltextFilterTest.php | 60 ++++++++++++++++--- tests/search/FulltextFilterTest.yml | 13 ++-- 5 files changed, 120 insertions(+), 37 deletions(-) diff --git a/docs/en/02_Developer_Guides/12_Search/02_FulltextSearch.md b/docs/en/02_Developer_Guides/12_Search/02_FulltextSearch.md index 11fdb7c20..82153ca2d 100644 --- a/docs/en/02_Developer_Guides/12_Search/02_FulltextSearch.md +++ b/docs/en/02_Developer_Guides/12_Search/02_FulltextSearch.md @@ -39,6 +39,43 @@ records and cannot easily be adapted to include custom `DataObject` instances. T default site search, have a look at those extensions and modify as required. +### Fulltext Filter + +SilverStripe provides a `[api:FulltextFiler]` which you can use to perform custom fulltext searches on +`[api:DataList]`'s. + +Example DataObject: + + :::php + class SearchableDataObject extends DataObject { + + private static $db = array( + "Title" => "Varchar(255)", + "Content" => "HTMLText", + ); + + private static $indexes = array( + 'SearchFields' => array( + 'type' => 'fulltext', + 'name' => 'SearchFields', + 'value' => '"Title", "Content"', + ) + ); + + private static $create_table_options = array( + 'MySQLDatabase' => 'ENGINE=MyISAM' + ); + + } + +Performing the search: + + :::php + SearchableDataObject::get()->filter('SearchFields:fulltext', 'search term'); + +If your search index is a single field size, then you may also specify the search filter by the name of the +field instead of the index. + ## API Documentation * [api:FulltextSearchable] \ No newline at end of file diff --git a/search/filters/FulltextFilter.php b/search/filters/FulltextFilter.php index ec98e2f63..36fbf222e 100755 --- a/search/filters/FulltextFilter.php +++ b/search/filters/FulltextFilter.php @@ -68,18 +68,16 @@ class FulltextFilter extends SearchFilter { } else { // Parse a fulltext string (eg. fulltext ("ColumnA", "ColumnB")) to figure out which columns // we need to search. - if(preg_match('/^fulltext\ \((.+)\)$/i', $index, $matches)) { + if(preg_match('/^fulltext\s+\((.+)\)$/i', $index, $matches)) { return $matches[1]; } else { throw new Exception("Invalid fulltext index format for '" . $this->getName() . "' on '" . $this->model . "'"); - return; } } - return $columns; - } - - throw new Exception($this->getName() . ' is not a fulltext index on ' . $this->model . '.'); + } + + return parent::getDbName(); } } diff --git a/search/filters/SearchFilter.php b/search/filters/SearchFilter.php index b4efdfc9a..c1dbd90c5 100644 --- a/search/filters/SearchFilter.php +++ b/search/filters/SearchFilter.php @@ -9,27 +9,27 @@ * @subpackage search */ abstract class SearchFilter extends Object { - + /** * @var string Classname of the inspected {@link DataObject} */ protected $model; - + /** * @var string */ protected $name; - + /** * @var string */ protected $fullName; - + /** * @var mixed */ protected $value; - + /** * @var array */ @@ -41,7 +41,7 @@ abstract class SearchFilter extends Object { * {@link applyRelation()}. */ protected $relation; - + /** * @param string $fullName Determines the name of the field, as well as the searched database * column. Can contain a relation name in dot notation, which will automatically join @@ -58,7 +58,7 @@ abstract class SearchFilter extends Object { $this->value = $value; $this->setModifiers($modifiers); } - + /** * Called by constructor to convert a string pathname into * a well defined relationship sequence. @@ -74,7 +74,7 @@ abstract class SearchFilter extends Object { $this->name = $name; } } - + /** * Set the root model class to be selected by this * search query. @@ -84,7 +84,7 @@ abstract class SearchFilter extends Object { public function setModel($className) { $this->model = $className; } - + /** * Set the current value to be filtered on. * @@ -93,7 +93,7 @@ abstract class SearchFilter extends Object { public function setValue($value) { $this->value = $value; } - + /** * Accessor for the current value to be filtered on. * Caution: Data is not escaped. @@ -121,7 +121,7 @@ abstract class SearchFilter extends Object { public function getModifiers() { return $this->modifiers; } - + /** * The original name of the field. * @@ -137,7 +137,7 @@ abstract class SearchFilter extends Object { public function setName($name) { $this->name = $name; } - + /** * The full name passed to the constructor, * including any (optional) relations in dot notation. @@ -154,7 +154,7 @@ abstract class SearchFilter extends Object { public function setFullName($name) { $this->fullName = $name; } - + /** * Normalizes the field name to table mapping. * @@ -168,7 +168,9 @@ abstract class SearchFilter extends Object { // Ensure that we're dealing with a DataObject. if (!is_subclass_of($this->model, 'DataObject')) { - throw new Exception("Model supplied to " . get_class($this) . " should be an instance of DataObject."); + throw new InvalidArgumentException( + "Model supplied to " . get_class($this) . " should be an instance of DataObject." + ); } $candidateClass = ClassInfo::table_for_object_field( @@ -183,9 +185,9 @@ abstract class SearchFilter extends Object { return '"' . implode('"."', $parts) . '"'; } - return "\"{$candidateClass}\".\"{$this->name}\""; + return sprintf('"%s"."%s"', $candidateClass, $this->name); } - + /** * Return the value of the field as processed by the DBField class * @@ -200,7 +202,6 @@ abstract class SearchFilter extends Object { return $dbField->RAW(); } - /** * Apply filter criteria to a SQL query. * @@ -272,7 +273,7 @@ abstract class SearchFilter extends Object { protected function excludeMany(DataQuery $query) { throw new InvalidArgumentException(get_class($this) . " can't be used to filter by a list of items."); } - + /** * Determines if a field has a value, * and that the filter should be applied. diff --git a/tests/search/FulltextFilterTest.php b/tests/search/FulltextFilterTest.php index 49b75911d..efca15c6e 100755 --- a/tests/search/FulltextFilterTest.php +++ b/tests/search/FulltextFilterTest.php @@ -1,14 +1,17 @@ assertEquals(3, $baseQuery->count(), "FulltextDataObject count does not match."); + $baseQuery = FulltextFilterTest_DataObject::get(); + $this->assertEquals(3, $baseQuery->count(), "FulltextFilterTest_DataObject count does not match."); // First we'll text the 'SearchFields' which has been set using an array $search = $baseQuery->filter("SearchFields:fulltext", 'SilverStripe'); @@ -25,24 +28,64 @@ class FulltextFilterTest extends SapphireTest { $search = $baseQuery->exclude("OtherSearchFields:fulltext", "SilverStripe"); $this->assertEquals(2, $search->count()); - // Edgecase - $this->setExpectedException("Exception"); - $search = $baseQuery->exclude("Madeup:fulltext", "SilverStripe"); + // Search on a single field + $search = $baseQuery->filter("ColumnE:fulltext", 'Dragons'); + $this->assertEquals(1, $search->count()); + + $search = $baseQuery->exclude("ColumnE:fulltext", "Dragons"); + $this->assertEquals(2, $search->count()); } else { $this->markTestSkipped("FulltextFilter only supports MySQL syntax."); } } - + + public function testGenerateQuery() { + // Test SearchFields + $filter1 = new FulltextFilter('SearchFields', 'SilverStripe'); + $filter1->setModel('FulltextFilterTest_DataObject'); + $query1 = FulltextFilterTest_DataObject::get()->dataQuery(); + $filter1->apply($query1); + $this->assertEquals('"ColumnA", "ColumnB"', $filter1->getDbName()); + $this->assertEquals( + array("MATCH (\"ColumnA\", \"ColumnB\") AGAINST ('SilverStripe')"), + $query1->query()->getWhere() + ); + + + // Test Other searchfields + $filter2 = new FulltextFilter('OtherSearchFields', 'SilverStripe'); + $filter2->setModel('FulltextFilterTest_DataObject'); + $query2 = FulltextFilterTest_DataObject::get()->dataQuery(); + $filter2->apply($query2); + $this->assertEquals('"ColumnC", "ColumnD"', $filter2->getDbName()); + $this->assertEquals( + array("MATCH (\"ColumnC\", \"ColumnD\") AGAINST ('SilverStripe')"), + $query2->query()->getWhere() + ); + + // Test fallback to single field + $filter3 = new FulltextFilter('ColumnA', 'SilverStripe'); + $filter3->setModel('FulltextFilterTest_DataObject'); + $query3 = FulltextFilterTest_DataObject::get()->dataQuery(); + $filter3->apply($query3); + $this->assertEquals('"FulltextFilterTest_DataObject"."ColumnA"', $filter3->getDbName()); + $this->assertEquals( + array("MATCH (\"FulltextFilterTest_DataObject\".\"ColumnA\") AGAINST ('SilverStripe')"), + $query3->query()->getWhere() + ); + } + } -class FulltextDataObject extends DataObject { +class FulltextFilterTest_DataObject extends DataObject implements TestOnly { private static $db = array( "ColumnA" => "Varchar(255)", "ColumnB" => "HTMLText", "ColumnC" => "Varchar(255)", "ColumnD" => "HTMLText", + "ColumnE" => 'Varchar(255)' ); private static $indexes = array( @@ -52,6 +95,7 @@ class FulltextDataObject extends DataObject { 'value' => '"ColumnA", "ColumnB"', ), 'OtherSearchFields' => 'fulltext ("ColumnC", "ColumnD")', + 'SingleIndex' => 'fulltext ("ColumnE")' ); private static $create_table_options = array( diff --git a/tests/search/FulltextFilterTest.yml b/tests/search/FulltextFilterTest.yml index b3be2215b..1f59ca081 100644 --- a/tests/search/FulltextFilterTest.yml +++ b/tests/search/FulltextFilterTest.yml @@ -1,16 +1,19 @@ -FulltextDataObject: +FulltextFilterTest_DataObject: object1: ColumnA: 'SilverStripe' - CluumnB:

Some content about SilverStripe.

+ CluumnB: '

Some content about SilverStripe.

' ColumnC: 'SilverStripe' - ColumnD: '

Some content about SilverStripe.

+ ColumnD: '

Some content about SilverStripe.

' + ColumnE: 'Dragons be here' object2: ColumnA: 'Test Row' ColumnB: '

Some information about this test row.

' ColumnC: 'Test Row' ColumnD: '

Some information about this test row.

' + ColumnE: 'No' object3: ColumnA: 'Fulltext Search' ColumnB: '

Testing fulltext search.

' - ColumnC: 'Fulltext Search - ColumnD: '

Testing fulltext search.

' \ No newline at end of file + ColumnC: 'Fulltext Search' + ColumnD: '

Testing fulltext search.

' + ColumnE: '' From 71a14c30352e69e4c0ac59e5ea72e1da0c79009b Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Thu, 1 Jan 2015 12:01:01 +1300 Subject: [PATCH 011/110] BUG Prevent url= querystring argument override --- main.php | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/main.php b/main.php index e294530cb..854d5071f 100644 --- a/main.php +++ b/main.php @@ -67,37 +67,44 @@ if(!empty($_SERVER['HTTP_X_ORIGINAL_URL'])) { */ global $url; -// PHP 5.4's built-in webserver uses this -if (php_sapi_name() == 'cli-server') { - $url = $_SERVER['REQUEST_URI']; +// Helper to safely parse and load a querystring fragment +$parseQuery = function($query) { + parse_str($query, $_GET); + if ($_GET) $_REQUEST = array_merge((array)$_REQUEST, (array)$_GET); +}; - // Querystring args need to be explicitly parsed - if(strpos($url,'?') !== false) { - list($url, $query) = explode('?',$url,2); - parse_str($query, $_GET); - if ($_GET) $_REQUEST = array_merge((array)$_REQUEST, (array)$_GET); +// Apache rewrite rules and IIS use this +if (isset($_GET['url']) && php_sapi_name() !== 'cli-server') { + + // Prevent injection of url= querystring argument by prioritising any leading url argument + if(isset($_SERVER['QUERY_STRING']) && + preg_match('/^(?url=[^&?]*)(?.*[&?]url=.*)$/', $_SERVER['QUERY_STRING'], $results) + ) { + $queryString = $results['query'].'&'.$results['url']; + $parseQuery($queryString); } - // Pass back to the webserver for files that exist - if(file_exists(BASE_PATH . $url) && is_file(BASE_PATH . $url)) return false; - - // Apache rewrite rules use this -} else if (isset($_GET['url'])) { $url = $_GET['url']; + // IIS includes get variables in url $i = strpos($url, '?'); if($i !== false) { $url = substr($url, 0, $i); } - // Lighttpd uses this + // Lighttpd and PHP 5.4's built-in webserver use this } else { - if(strpos($_SERVER['REQUEST_URI'],'?') !== false) { - list($url, $query) = explode('?', $_SERVER['REQUEST_URI'], 2); - parse_str($query, $_GET); - if ($_GET) $_REQUEST = array_merge((array)$_REQUEST, (array)$_GET); - } else { - $url = $_SERVER["REQUEST_URI"]; + $url = $_SERVER['REQUEST_URI']; + + // Querystring args need to be explicitly parsed + if(strpos($url,'?') !== false) { + list($url, $query) = explode('?',$url,2); + $parseQuery($query); + } + + // Pass back to the webserver for files that exist + if(php_sapi_name() === 'cli-server' && file_exists(BASE_PATH . $url) && is_file(BASE_PATH . $url)) { + return false; } } From 7ff131daa76d345cff90410469accdcca9049cf1 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Wed, 1 Apr 2015 14:31:55 +1300 Subject: [PATCH 012/110] BUG Fix default casted (boolean)false evaluating to true in templates --- model/fieldtypes/StringField.php | 4 +- tests/model/StringFieldTest.php | 16 ++++++++ ...iewerTestIncludeScopeInheritanceInclude.ss | 2 +- tests/view/SSViewerTest.php | 40 ++++++++++++++++--- view/SSViewer.php | 36 +++++++++-------- 5 files changed, 73 insertions(+), 25 deletions(-) diff --git a/model/fieldtypes/StringField.php b/model/fieldtypes/StringField.php index 1089becab..c4d34cf17 100644 --- a/model/fieldtypes/StringField.php +++ b/model/fieldtypes/StringField.php @@ -83,7 +83,9 @@ abstract class StringField extends DBField { * @see core/model/fieldtypes/DBField#exists() */ public function exists() { - return ($this->value || $this->value == '0') || ( !$this->nullifyEmpty && $this->value === ''); + return $this->getValue() // All truthy values exist + || (is_string($this->getValue()) && strlen($this->getValue())) // non-empty strings exist ('0' but not (int)0) + || (!$this->getNullifyEmpty() && $this->getValue() === ''); // Remove this stupid exemption in 4.0 } /** diff --git a/tests/model/StringFieldTest.php b/tests/model/StringFieldTest.php index 0dfb9499d..e2029cbea 100644 --- a/tests/model/StringFieldTest.php +++ b/tests/model/StringFieldTest.php @@ -36,6 +36,22 @@ class StringFieldTest extends SapphireTest { ); } + public function testExists() { + // True exists + $this->assertTrue(DBField::create_field('StringFieldTest_MyStringField', true)->exists()); + $this->assertTrue(DBField::create_field('StringFieldTest_MyStringField', '0')->exists()); + $this->assertTrue(DBField::create_field('StringFieldTest_MyStringField', '1')->exists()); + $this->assertTrue(DBField::create_field('StringFieldTest_MyStringField', 1)->exists()); + $this->assertTrue(DBField::create_field('StringFieldTest_MyStringField', 1.1)->exists()); + + // false exists + $this->assertFalse(DBField::create_field('StringFieldTest_MyStringField', false)->exists()); + $this->assertFalse(DBField::create_field('StringFieldTest_MyStringField', '')->exists()); + $this->assertFalse(DBField::create_field('StringFieldTest_MyStringField', null)->exists()); + $this->assertFalse(DBField::create_field('StringFieldTest_MyStringField', 0)->exists()); + $this->assertFalse(DBField::create_field('StringFieldTest_MyStringField', 0.0)->exists()); + } + } class StringFieldTest_MyStringField extends StringField implements TestOnly { diff --git a/tests/templates/SSViewerTestIncludeScopeInheritanceInclude.ss b/tests/templates/SSViewerTestIncludeScopeInheritanceInclude.ss index 51b2dc190..0a67cba95 100644 --- a/tests/templates/SSViewerTestIncludeScopeInheritanceInclude.ss +++ b/tests/templates/SSViewerTestIncludeScopeInheritanceInclude.ss @@ -1 +1 @@ -$Title <% if ArgA %>- $ArgA <% end_if %>- <%if First %>First-<% end_if %><% if Last %>Last-<% end_if %><%if MultipleOf(2) %>EVEN<% else %>ODD<% end_if %> top:$Top.Title +<% if $Title %>$Title<% else %>Untitled<% end_if %> <% if $ArgA %>_ $ArgA <% end_if %>- <% if $First %>First-<% end_if %><% if $Last %>Last-<% end_if %><%if $MultipleOf(2) %>EVEN<% else %>ODD<% end_if %> top:$Top.Title diff --git a/tests/view/SSViewerTest.php b/tests/view/SSViewerTest.php index c8ce9f2f3..56882db0f 100644 --- a/tests/view/SSViewerTest.php +++ b/tests/view/SSViewerTest.php @@ -46,17 +46,45 @@ class SSViewerTest extends SapphireTest { // reset results for the tests that include arguments (the title is passed as an arg) $expected = array( - 'Item 1 - Item 1 - First-ODD top:Item 1', - 'Item 2 - Item 2 - EVEN top:Item 2', - 'Item 3 - Item 3 - ODD top:Item 3', - 'Item 4 - Item 4 - EVEN top:Item 4', - 'Item 5 - Item 5 - ODD top:Item 5', - 'Item 6 - Item 6 - Last-EVEN top:Item 6', + 'Item 1 _ Item 1 - First-ODD top:Item 1', + 'Item 2 _ Item 2 - EVEN top:Item 2', + 'Item 3 _ Item 3 - ODD top:Item 3', + 'Item 4 _ Item 4 - EVEN top:Item 4', + 'Item 5 _ Item 5 - ODD top:Item 5', + 'Item 6 _ Item 6 - Last-EVEN top:Item 6', ); $result = $data->renderWith('SSViewerTestIncludeScopeInheritanceWithArgs'); $this->assertExpectedStrings($result, $expected); } + + public function testIncludeTruthyness() { + $data = new ArrayData(array( + 'Title' => 'TruthyTest', + 'Items' => new ArrayList(array( + new ArrayData(array('Title' => 'Item 1')), + new ArrayData(array('Title' => '')), + new ArrayData(array('Title' => true)), + new ArrayData(array('Title' => false)), + new ArrayData(array('Title' => null)), + new ArrayData(array('Title' => 0)), + new ArrayData(array('Title' => 7)) + )) + )); + $result = $data->renderWith('SSViewerTestIncludeScopeInheritanceWithArgs'); + + // We should not end up with empty values appearing as empty + $expected = array( + 'Item 1 _ Item 1 - First-ODD top:Item 1', + 'Untitled - EVEN top:', + '1 _ 1 - ODD top:1', + 'Untitled - EVEN top:', + 'Untitled - ODD top:', + 'Untitled - EVEN top:0', + '7 _ 7 - Last-ODD top:7' + ); + $this->assertExpectedStrings($result, $expected); + } private function getScopeInheritanceTestData() { return new ArrayData(array( diff --git a/view/SSViewer.php b/view/SSViewer.php index d5fdb68bb..712a2e302 100644 --- a/view/SSViewer.php +++ b/view/SSViewer.php @@ -429,6 +429,15 @@ class SSViewer_DataPresenter extends SSViewer_Scope { } } + /** + * Get the injected value + * + * @param string $property Name of property + * @param array $params + * @param bool $cast If true, an object is always returned even if not an object. + * @return array Result array with the keys 'value' for raw value, or 'obj' if contained in an object + * @throws InvalidArgumentException + */ public function getInjectedValue($property, $params, $cast = true) { $on = $this->itemIterator ? $this->itemIterator->current() : $this->item; @@ -512,32 +521,25 @@ class SSViewer_DataPresenter extends SSViewer_Scope { if (isset($arguments[1]) && $arguments[1] != null) $params = $arguments[1]; else $params = array(); - $hasInjected = $res = null; - - if ($name == 'hasValue') { - if ($val = $this->getInjectedValue($property, $params, false)) { - $hasInjected = true; $res = (bool)$val['value']; - } - } - else { // XML_val - if ($val = $this->getInjectedValue($property, $params)) { - $hasInjected = true; - $obj = $val['obj']; + $val = $this->getInjectedValue($property, $params); + if ($val) { + $obj = $val['obj']; + if ($name === 'hasValue') { + $res = $obj instanceof Object + ? $obj->exists() + : (bool)$obj; + } else { + // XML_val $res = $obj->forTemplate(); } - } - - if ($hasInjected) { $this->resetLocalScope(); return $res; - } - else { + } else { return parent::__call($name, $arguments); } } } - /** * Parses a template file with an *.ss file extension. * From eaec2ad9a8b2c0b6d507687d842b316e7d9ef44f Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Sat, 7 Mar 2015 12:11:45 +0000 Subject: [PATCH 013/110] Safe unnesting of Config and Injector --- control/injector/Injector.php | 283 ++++++++++++++++++---------------- core/Config.php | 123 ++++++++------- 2 files changed, 212 insertions(+), 194 deletions(-) diff --git a/control/injector/Injector.php b/control/injector/Injector.php index 9d1b103e7..f8e7eae3c 100644 --- a/control/injector/Injector.php +++ b/control/injector/Injector.php @@ -13,61 +13,61 @@ use SilverStripe\Framework\Injector\Factory; * A simple injection manager that manages creating objects and injecting * dependencies between them. It borrows quite a lot from ideas taken from * Spring's configuration, but is adapted to the stateless PHP way of doing - * things. - * + * things. + * * In its simplest form, the dependency injector can be used as a mechanism to * instantiate objects. Simply call - * + * * Injector::inst()->get('ClassName') - * - * and a new instance of ClassName will be created and returned to you. - * - * Classes can have specific configuration defined for them to - * indicate dependencies that should be injected. This takes the form of + * + * and a new instance of ClassName will be created and returned to you. + * + * Classes can have specific configuration defined for them to + * indicate dependencies that should be injected. This takes the form of * a static variable $dependencies defined in the class (or configuration), - * which indicates the name of a property that should be set. - * - * eg - * + * which indicates the name of a property that should be set. + * + * eg + * * * class MyController extends Controller { - * + * * public $permissions; * public $defaultText; - * + * * static $dependencies = array( * 'defaultText' => 'Override in configuration', * 'permissions' => '%$PermissionService', * ); * } * - * + * * will result in an object of type MyController having the defaultText property * set to 'Override in configuration', and an object identified - * as PermissionService set into the property called 'permissions'. The %$ + * as PermissionService set into the property called 'permissions'. The %$ * syntax tells the injector to look the provided name up as an item to be created - * by the Injector itself. - * + * by the Injector itself. + * * A key concept of the injector is whether to manage the object as - * + * * * A pseudo-singleton, in that only one item will be created for a particular * identifier (but the same class could be used for multiple identifiers) * * A prototype, where the same configuration is used, but a new object is * created each time - * * unmanaged, in which case a new object is created and injected, but no + * * unmanaged, in which case a new object is created and injected, but no * information about its state is managed. - * - * Additional configuration of items managed by the injector can be done by - * providing configuration for the types, either by manually loading in an + * + * Additional configuration of items managed by the injector can be done by + * providing configuration for the types, either by manually loading in an * array describing the configuration, or by specifying the configuration - * for a type via SilverStripe's configuration mechanism. + * for a type via SilverStripe's configuration mechanism. * * Specify a configuration array of the format * * array( * array( * 'id' => 'BeanId', // the name to be used if diff from the filename - * 'priority' => 1, // priority. If another bean is defined with the same ID, + * 'priority' => 1, // priority. If another bean is defined with the same ID, * // but has a lower priority, it is NOT overridden * 'class' => 'ClassName', // the name of the PHP class * 'src' => '/path/to/file' // the location of the class @@ -77,7 +77,7 @@ use SilverStripe\Framework\Injector\Factory; * * 'factory' => 'FactoryService' // A factory service to use to create instances. * 'construct' => array( // properties to set at construction - * 'scalar', + * 'scalar', * '%$BeanId', * ) * 'properties' => array( @@ -145,9 +145,9 @@ class Injector { * @var array */ private $specs; - + /** - * A map of all the properties that should be automagically set on all + * A map of all the properties that should be automagically set on all * objects instantiated by the injector */ private $autoProperties; @@ -158,11 +158,11 @@ class Injector { * @var Injector */ private static $instance; - + /** * Indicates whether or not to automatically scan properties in injected objects to auto inject - * stuff, similar to the way grails does things. - * + * stuff, similar to the way grails does things. + * * @var boolean */ private $autoScanProperties = false; @@ -180,16 +180,16 @@ class Injector { * @var Factory */ protected $objectCreator; - + /** * Locator for determining Config properties for services - * - * @var ServiceConfigurationLocator + * + * @var ServiceConfigurationLocator */ protected $configLocator; /** - * Create a new injector. + * Create a new injector. * * @param array $config * Service configuration @@ -202,16 +202,16 @@ class Injector { $this->specs = array( 'Injector' => array('class' => 'Injector') ); - + $this->autoProperties = array(); $creatorClass = isset($config['creator']) ? $config['creator'] : 'InjectionCreator'; $locatorClass = isset($config['locator']) ? $config['locator'] : 'ServiceConfigurationLocator'; - + $this->objectCreator = new $creatorClass; $this->configLocator = new $locatorClass; - + if ($config) { $this->load($config); } @@ -219,7 +219,7 @@ class Injector { /** * The injector instance this one was copied from when Injector::nest() was called. - * + * * @var Injector */ protected $nestedFrom = null; @@ -246,15 +246,15 @@ class Injector { public static function set_inst(Injector $instance) { return self::$instance = $instance; } - + /** - * Make the newly active {@link Injector} be a copy of the current active + * Make the newly active {@link Injector} be a copy of the current active * {@link Injector} instance. * * You can then make changes to the injector with methods such as * {@link Injector::inst()->registerService()} which will be discarded * upon a subsequent call to {@link Injector::unnest()} - * + * * @return Injector Reference to new active Injector instance */ public static function nest() { @@ -266,24 +266,33 @@ class Injector { } /** - * Change the active Injector back to the Injector instance the current active + * Change the active Injector back to the Injector instance the current active * Injector object was copied from. - * + * * @return Injector Reference to restored active Injector instance */ public static function unnest() { - return self::set_inst(self::$instance->nestedFrom); + if (self::inst()->nestedFrom) { + self::set_inst(self::inst()->nestedFrom); + } + else { + user_error( + "Unable to unnest root Injector, please make sure you don't have mis-matched nest/unnest", + E_USER_WARNING + ); + } + return self::inst(); } /** - * Indicate whether we auto scan injected objects for properties to set. + * Indicate whether we auto scan injected objects for properties to set. * * @param boolean $val */ public function setAutoScanProperties($val) { $this->autoScanProperties = $val; } - + /** * Sets the default factory to use for creating new objects. * @@ -292,32 +301,32 @@ class Injector { public function setObjectCreator(Factory $obj) { $this->objectCreator = $obj; } - + /** * @return Factory */ public function getObjectCreator() { return $this->objectCreator; } - + /** - * Set the configuration locator - * @param ServiceConfigurationLocator $configLocator + * Set the configuration locator + * @param ServiceConfigurationLocator $configLocator */ public function setConfigLocator($configLocator) { $this->configLocator = $configLocator; } - + /** - * Retrieve the configuration locator - * @return ServiceConfigurationLocator + * Retrieve the configuration locator + * @return ServiceConfigurationLocator */ public function getConfigLocator() { return $this->configLocator; } - + /** - * Add in a specific mapping that should be catered for on a type. + * Add in a specific mapping that should be catered for on a type. * This allows configuration of what should occur when an object * of a particular type is injected, and what items should be injected * for those properties / methods. @@ -326,19 +335,19 @@ class Injector { * The class to set a mapping for * @param type $property * The property to set the mapping for - * @param type $injectType + * @param type $injectType * The registered type that will be injected * @param string $injectVia * Whether to inject by setting a property or calling a setter */ public function setInjectMapping($class, $property, $toInject, $injectVia = 'property') { $mapping = isset($this->injectMap[$class]) ? $this->injectMap[$class] : array(); - + $mapping[$property] = array('name' => $toInject, 'type' => $injectVia); - + $this->injectMap[$class] = $mapping; } - + /** * Add an object that should be automatically set on managed objects * @@ -370,7 +379,7 @@ class Injector { $spec = array('class' => $spec); } - $file = isset($spec['src']) ? $spec['src'] : null; + $file = isset($spec['src']) ? $spec['src'] : null; $name = null; if (file_exists($file)) { @@ -378,21 +387,21 @@ class Injector { $name = substr($filename, 0, strrpos($filename, '.')); } - // class is whatever's explicitly set, + // class is whatever's explicitly set, $class = isset($spec['class']) ? $spec['class'] : $name; - + // or the specid if nothing else available. if (!$class && is_string($specId)) { $class = $specId; } - + // make sure the class is set... $spec['class'] = $class; - $id = is_string($specId) ? $specId : (isset($spec['id']) ? $spec['id'] : $class); - + $id = is_string($specId) ? $specId : (isset($spec['id']) ? $spec['id'] : $class); + $priority = isset($spec['priority']) ? $spec['priority'] : 1; - + // see if we already have this defined. If so, check priority weighting if (isset($this->specs[$id]) && isset($this->specs[$id]['priority'])) { if ($this->specs[$id]['priority'] > $priority) { @@ -412,12 +421,12 @@ class Injector { // We've removed this check because new functionality means that the 'class' field doesn't need to refer // specifically to a class anymore - it could be a compound statement, ala SilverStripe's old Object::create // functionality -// +// // if (!class_exists($class)) { // throw new Exception("Failed to load '$class' from $file"); // } - // store the specs for now - we lazy load on demand later on. + // store the specs for now - we lazy load on demand later on. $this->specs[$id] = $spec; // EXCEPT when there's already an existing instance at this id. @@ -430,20 +439,20 @@ class Injector { return $this; } - + /** * Update the configuration of an already defined service - * + * * Use this if you don't want to register a complete new config, just append * to an existing configuration. Helpful to avoid overwriting someone else's changes - * + * * updateSpec('RequestProcessor', 'filters', '%$MyFilter') * * @param string $id * The name of the service to update the definition for * @param string $property - * The name of the property to update. - * @param mixed $value + * The name of the property to update. + * @param mixed $value * The value to set * @param boolean $append * Whether to append (the default) when the property is an array @@ -457,20 +466,20 @@ class Injector { } else { $this->specs[$id]['properties'][$property] = $value; } - + // and reload the object; existing bindings don't get - // updated though! (for now...) + // updated though! (for now...) if (isset($this->serviceCache[$id])) { $this->instantiate(array('class'=>$id), $id); } } } - + /** * Update a class specification to convert constructor configuration information if needed - * - * We do this as a separate process to avoid unneeded calls to convertServiceProperty - * + * + * We do this as a separate process to avoid unneeded calls to convertServiceProperty + * * @param array $spec * The class specification to update */ @@ -484,7 +493,7 @@ class Injector { * Recursively convert a value into its proper representation with service references * resolved to actual objects * - * @param string $value + * @param string $value */ public function convertServiceProperty($value) { if (is_array($value)) { @@ -494,7 +503,7 @@ class Injector { } return $newVal; } - + if (is_string($value) && strpos($value, '%$') === 0) { $id = substr($value, 2); return $this->get($id); @@ -518,10 +527,10 @@ class Injector { * set any relevant properties * * Optionally, you can pass a class name directly for creation - * + * * To access this from the outside, you should call ->get('Name') to ensure - * the appropriate checks are made on the specific type. - * + * the appropriate checks are made on the specific type. + * * * @param array $spec * The specification of the class to instantiate @@ -556,9 +565,9 @@ class Injector { // now set the service in place if needbe. This is NOT done for prototype beans, as they're // created anew each time if (!$type) { - $type = isset($spec['type']) ? $spec['type'] : null; + $type = isset($spec['type']) ? $spec['type'] : null; } - + if ($id && (!$type || $type != 'prototype')) { // this ABSOLUTELY must be set before the object is injected. // This prevents circular reference errors down the line @@ -573,7 +582,7 @@ class Injector { /** * Inject $object with available objects from the service cache - * + * * @todo Track all the existing objects that have had a service bound * into them, so we can update that binding at a later point if needbe (ie * if the managed service changes) @@ -583,12 +592,12 @@ class Injector { * @param string $asType * The ID this item was loaded as. This is so that the property configuration * for a type is referenced correctly in case $object is no longer the same - * type as the loaded config specification had it as. + * type as the loaded config specification had it as. */ public function inject($object, $asType=null) { $objtype = $asType ? $asType : get_class($object); $mapping = isset($this->injectMap[$objtype]) ? $this->injectMap[$objtype] : null; - + // first off, set any properties defined in the service specification for this // object type if (isset($this->specs[$objtype]) && isset($this->specs[$objtype]['properties'])) { @@ -662,8 +671,8 @@ class Injector { if ($injections && count($injections)) { foreach ($injections as $property => $value) { // we're checking empty in case it already has a property at this name - // this doesn't catch privately set things, but they will only be set by a setter method, - // which should be responsible for preventing further setting if it doesn't want it. + // this doesn't catch privately set things, but they will only be set by a setter method, + // which should be responsible for preventing further setting if it doesn't want it. if (empty($object->$property)) { $value = $this->convertServiceProperty($value); $this->setObjectProperty($object, $property, $value); @@ -691,7 +700,7 @@ class Injector { * Set an object's property to a specific value * @param string $name * The name of the property to set - * @param mixed $value + * @param mixed $value * The value to set */ protected function setObjectProperty($object, $name, $value) { @@ -704,14 +713,14 @@ class Injector { /** * Does the given service exist, and if so, what's the stored name for it? - * - * We do a special check here for services that are using compound names. For example, + * + * We do a special check here for services that are using compound names. For example, * we might want to say that a property should be injected with Log.File or Log.Memory, - * but have only registered a 'Log' service, we'll instead return that. - * + * but have only registered a 'Log' service, we'll instead return that. + * * Will recursively call hasService for each depth of dotting - * - * @return string + * + * @return string * The name of the service (as it might be different from the one passed in) */ public function hasService($name) { @@ -719,52 +728,52 @@ class Injector { if (isset($this->specs[$name])) { return $name; } - - // okay, check whether we've got a compound name - don't worry about 0 index, cause that's an + + // okay, check whether we've got a compound name - don't worry about 0 index, cause that's an // invalid name if (!strpos($name, '.')) { return null; } - + return $this->hasService(substr($name, 0, strrpos($name, '.'))); } /** * Register a service object with an optional name to register it as the * service for - * + * * @param stdClass $service * The object to register * @param string $replace - * The name of the object to replace (if different to the + * The name of the object to replace (if different to the * class name of the object to register) - * + * */ public function registerService($service, $replace = null) { $registerAt = get_class($service); if ($replace != null) { $registerAt = $replace; } - + $this->specs[$registerAt] = array('class' => get_class($service)); $this->serviceCache[$registerAt] = $service; $this->inject($service); } - + /** * Register a service with an explicit name - * + * * @deprecated since 3.1.1 */ public function registerNamedService($name, $service) { return $this->registerService($service, $name); } - + /** * Removes a named object from the cached list of objects managed * by the inject - * - * @param type $name + * + * @param type $name * The name to unregister */ public function unregisterNamedObject($name) { @@ -772,35 +781,35 @@ class Injector { } /** - * Clear out all objects that are managed by the injetor. + * Clear out all objects that are managed by the injetor. */ public function unregisterAllObjects() { $this->serviceCache = array('Injector' => $this); } - + /** * Get a named managed object - * + * * Will first check to see if the item has been registered as a configured service/bean - * and return that if so. - * + * and return that if so. + * * Next, will check to see if there's any registered configuration for the given type * and will then try and load that - * - * Failing all of that, will just return a new instance of the + * + * Failing all of that, will just return a new instance of the * specificied object. - * - * @param string $name - * the name of the service to retrieve. If not a registered + * + * @param string $name + * the name of the service to retrieve. If not a registered * service, then a class of the given name is instantiated * @param boolean $asSingleton * Whether to register the created object as a singleton * if no other configuration is found * @param array $constructorArgs * Optional set of arguments to pass as constructor arguments - * if this object is to be created from scratch + * if this object is to be created from scratch * (ie asSingleton = false) - * + * */ public function get($name, $asSingleton = true, $constructorArgs = null) { // reassign the name as it might actually be a compound name @@ -809,14 +818,14 @@ class Injector { // we don't want to return the singleton version of it. $spec = $this->specs[$serviceName]; $type = isset($spec['type']) ? $spec['type'] : null; - + // if we're explicitly a prototype OR we're not wanting a singleton if (($type && $type == 'prototype') || !$asSingleton) { if ($spec && $constructorArgs) { $spec['constructor'] = $constructorArgs; } else { - // convert any _configured_ constructor args. - // we don't call this for get() calls where someone passes in + // convert any _configured_ constructor args. + // we don't call this for get() calls where someone passes in // constructor args, otherwise we end up calling convertServiceParams // way too often $this->updateSpecConstructor($spec); @@ -830,7 +839,7 @@ class Injector { return $this->serviceCache[$serviceName]; } } - + $config = $this->configLocator->locateConfigFor($name); if ($config) { $this->load(array($name => $config)); @@ -844,7 +853,7 @@ class Injector { } } - // If we've got this far, we're dealing with a case of a user wanting + // If we've got this far, we're dealing with a case of a user wanting // to create an object based on its name. So, we need to fake its config // if the user wants it managed as a singleton service style object $spec = array('class' => $name, 'constructor' => $constructorArgs); @@ -856,10 +865,10 @@ class Injector { return $this->instantiate($spec); } - + /** * Magic method to return an item directly - * + * * @param string $name * The named object to retrieve * @return mixed @@ -870,20 +879,20 @@ class Injector { /** * Similar to get() but always returns a new object of the given type - * - * Additional parameters are passed through as - * - * @param type $name + * + * Additional parameters are passed through as + * + * @param type $name */ public function create($name) { $constructorArgs = func_get_args(); array_shift($constructorArgs); return $this->get($name, false, count($constructorArgs) ? $constructorArgs : null); } - + /** * Creates an object with the supplied argument array - * + * * @param string $name * Name of the class to create an object of * @param array $args @@ -893,4 +902,4 @@ class Injector { public function createWithArgs($name, $constructorArgs) { return $this->get($name, false, $constructorArgs); } -} \ No newline at end of file +} diff --git a/core/Config.php b/core/Config.php index f048d0fa1..42d5ad423 100644 --- a/core/Config.php +++ b/core/Config.php @@ -10,62 +10,62 @@ * - An array * - A non-array value * - * If the value is an array, each value in the array may also be one of those + * If the value is an array, each value in the array may also be one of those * three types. * - * A property can have a value specified in multiple locations, each of which - * have a hard coded or explicit priority. We combine all these values together - * into a "composite" value using rules that depend on the priority order of + * A property can have a value specified in multiple locations, each of which + * have a hard coded or explicit priority. We combine all these values together + * into a "composite" value using rules that depend on the priority order of * the locations to give the final value, using these rules: * - * - If the value is an array, each array is added to the _beginning_ of the - * composite array in ascending priority order. If a higher priority item has + * - If the value is an array, each array is added to the _beginning_ of the + * composite array in ascending priority order. If a higher priority item has * a non-integer key which is the same as a lower priority item, the value of - * those items is merged using these same rules, and the result of the merge - * is located in the same location the higher priority item would be if there + * those items is merged using these same rules, and the result of the merge + * is located in the same location the higher priority item would be if there * was no key clash. Other than in this key-clash situation, within the * particular array, order is preserved. * - * - If the value is not an array, the highest priority value is used without + * - If the value is not an array, the highest priority value is used without * any attempt to merge. * - * It is an error to have mixed types of the same named property in different - * locations (but an error will not necessarily be raised due to optimizations + * It is an error to have mixed types of the same named property in different + * locations (but an error will not necessarily be raised due to optimizations * in the lookup code). * - * The exception to this is "false-ish" values - empty arrays, empty strings, - * etc. When merging a non-false-ish value with a false-ish value, the result + * The exception to this is "false-ish" values - empty arrays, empty strings, + * etc. When merging a non-false-ish value with a false-ish value, the result * will be the non-false-ish value regardless of priority. When merging two * false-ish values the result will be the higher priority false-ish value. * - * The locations that configuration values are taken from in highest -> lowest + * The locations that configuration values are taken from in highest -> lowest * priority order. * * - Any values set via a call to Config#update. * - * - The configuration values taken from the YAML files in _config directories - * (internally sorted in before / after order, where the item that is latest + * - The configuration values taken from the YAML files in _config directories + * (internally sorted in before / after order, where the item that is latest * is highest priority). * - * - Any static set on an "additional static source" class (such as an + * - Any static set on an "additional static source" class (such as an * extension) named the same as the name of the property. * * - Any static set on the class named the same as the name of the property. * * - The composite configuration value of the parent class of this class. * - * At some of these levels you can also set masks. These remove values from the - * composite value at their priority point rather than add. They are much - * simpler. They consist of a list of key / value pairs. When applied against + * At some of these levels you can also set masks. These remove values from the + * composite value at their priority point rather than add. They are much + * simpler. They consist of a list of key / value pairs. When applied against * the current composite value: * - * - If the composite value is a sequential array, any member of that array + * - If the composite value is a sequential array, any member of that array * that matches any value in the mask is removed. * - * - If the composite value is an associative array, any member of that array + * - If the composite value is an associative array, any member of that array * that matches both the key and value of any pair in the mask is removed. * - * - If the composite value is not an array, if that value matches any value + * - If the composite value is not an array, if that value matches any value * in the mask it is removed. * * @package framework @@ -74,7 +74,7 @@ class Config { /** - * A marker instance for the "anything" singleton value. Don't access + * A marker instance for the "anything" singleton value. Don't access * directly, even in-class, always use self::anything() * * @var Object @@ -82,9 +82,9 @@ class Config { private static $_anything = null; /** - * Get a marker class instance that is used to do a "remove anything with + * Get a marker class instance that is used to do a "remove anything with * this key" by adding $key => Config::anything() to the suppress array - * + * * @return Object */ public static function anything() { @@ -98,7 +98,7 @@ class Config { // -- Source options bitmask -- /** - * source options bitmask value - merge all parent configuration in as + * source options bitmask value - merge all parent configuration in as * lowest priority. * * @const @@ -106,7 +106,7 @@ class Config { const INHERITED = 0; /** - * source options bitmask value - only get configuration set for this + * source options bitmask value - only get configuration set for this * specific class, not any of it's parents. * * @const @@ -114,23 +114,23 @@ class Config { const UNINHERITED = 1; /** - * source options bitmask value - inherit, but stop on the first class + * source options bitmask value - inherit, but stop on the first class * that actually provides a value (event an empty value). * * @const */ const FIRST_SET = 2; - /** - * @const source options bitmask value - do not use additional statics - * sources (such as extension) + /** + * @const source options bitmask value - do not use additional statics + * sources (such as extension) */ const EXCLUDE_EXTRA_SOURCES = 4; // -- get_value_type response enum -- /** - * Return flag for get_value_type indicating value is a scalar (or really + * Return flag for get_value_type indicating value is a scalar (or really * just not-an-array, at least ATM) * * @const @@ -144,7 +144,7 @@ class Config { const IS_ARRAY = 2; /** - * Get whether the value is an array or not. Used to be more complicated, + * Get whether the value is an array or not. Used to be more complicated, * but still nice sugar to have an enum to compare and not just a true / * false value. * @@ -171,7 +171,7 @@ class Config { } /** - * @todo If we can, replace next static & static methods with DI once that's in + * @todo If we can, replace next static & static methods with DI once that's in */ protected static $instance; @@ -180,7 +180,7 @@ class Config { * * Configs should not normally be manually created. * - * In general use you will use this method to obtain the current Config + * In general use you will use this method to obtain the current Config * instance. * * @return Config @@ -198,7 +198,7 @@ class Config { * * {@link Config} objects should not normally be manually created. * - * A use case for replacing the active configuration set would be for + * A use case for replacing the active configuration set would be for * creating an isolated environment for unit tests. * * @param Config $instance New instance of Config to assign @@ -213,13 +213,13 @@ class Config { } /** - * Make the newly active {@link Config} be a copy of the current active + * Make the newly active {@link Config} be a copy of the current active * {@link Config} instance. * - * You can then make changes to the configuration by calling update and - * remove on the new value returned by {@link Config::inst()}, and then discard + * You can then make changes to the configuration by calling update and + * remove on the new value returned by {@link Config::inst()}, and then discard * those changes later by calling unnest. - * + * * @return Config Reference to new active Config instance */ public static function nest() { @@ -231,13 +231,22 @@ class Config { } /** - * Change the active Config back to the Config instance the current active + * Change the active Config back to the Config instance the current active * Config object was copied from. - * + * * @return Config Reference to new active Config instance */ public static function unnest() { - return self::set_instance(self::$instance->nestedFrom); + if (self::inst()->nestedFrom) { + self::set_instance(self::inst()->nestedFrom); + } + else { + user_error( + "Unable to unnest root Config, please make sure you don't have mis-matched nest/unnest", + E_USER_WARNING + ); + } + return self::inst(); } /** @@ -246,7 +255,7 @@ class Config { protected $cache; /** - * Each copy of the Config object need's it's own cache, so changes don't + * Each copy of the Config object need's it's own cache, so changes don't * leak through to other instances. */ public function __construct() { @@ -257,22 +266,22 @@ class Config { $this->cache = clone $this->cache; } - /** - * @var Config - The config instance this one was copied from when + /** + * @var Config - The config instance this one was copied from when * Config::nest() was called. */ protected $nestedFrom = null; - /** - * @var array - Array of arrays. Each member is an nested array keyed as - * $class => $name => $value, where value is a config value to treat as + /** + * @var array - Array of arrays. Each member is an nested array keyed as + * $class => $name => $value, where value is a config value to treat as * the highest priority item. */ protected $overrides = array(); - /** - * @var array $suppresses Array of arrays. Each member is an nested array - * keyed as $class => $name => $value, where value is a config value suppress + /** + * @var array $suppresses Array of arrays. Each member is an nested array + * keyed as $class => $name => $value, where value is a config value suppress * from any lower priority item. */ protected $suppresses = array(); @@ -287,7 +296,7 @@ class Config { */ public function pushConfigStaticManifest(SS_ConfigStaticManifest $manifest) { array_unshift($this->staticManifests, $manifest); - + $this->cache->clean(); } @@ -483,8 +492,8 @@ class Config { } if (isset($this->suppresses[$k][$class][$name])) { - $suppress = $suppress - ? array_merge($suppress, $this->suppresses[$k][$class][$name]) + $suppress = $suppress + ? array_merge($suppress, $this->suppresses[$k][$class][$name]) : $this->suppresses[$k][$class][$name]; } } @@ -730,7 +739,7 @@ class Config_LRU { // Target count - not always the lowest, but guaranteed to exist (or hit an empty item) $target = $this->c - self::SIZE + 1; $i = $stop = $this->i; - + do { if (!($i--)) $i = self::SIZE-1; $item = $this->cache[$i]; From ce3b5a5ace556f65a23348ed6e7bd50dd639f9e0 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Tue, 16 Jun 2015 15:04:20 +1200 Subject: [PATCH 014/110] BUG Fix major segfault on PDOConnector after any DDL BUG Fix issue in PDOQuery::first() Refactor previewWrite and benchmarkQuery into SS_Database --- model/connect/DBConnector.php | 97 +++++++++------ model/connect/Database.php | 71 ++++++++++- model/connect/MySQLiConnector.php | 45 ++++--- model/connect/PDOConnector.php | 189 ++++++++++++++++++------------ model/connect/Query.php | 1 + tests/model/PDODatabaseTest.php | 113 ++++++++++++++++++ 6 files changed, 378 insertions(+), 138 deletions(-) create mode 100644 tests/model/PDODatabaseTest.php diff --git a/model/connect/DBConnector.php b/model/connect/DBConnector.php index a3fda60fe..94cdf5c7c 100644 --- a/model/connect/DBConnector.php +++ b/model/connect/DBConnector.php @@ -10,11 +10,20 @@ abstract class DBConnector { /** * List of operations to treat as write + * Implicitly includes all ddl_operations * * @config * @var array */ - private static $write_operations = array('insert', 'update', 'delete', 'replace', 'alter', 'drop'); + private static $write_operations = array('insert', 'update', 'delete', 'replace'); + + /** + * List of operations to treat as DDL + * + * @config + * @var array + */ + private static $ddl_operations = array('alter', 'drop', 'create', 'truncate'); /** * Error handler for database errors. @@ -27,6 +36,7 @@ abstract class DBConnector { * @param integer $errorLevel The level of the error to throw. * @param string $sql The SQL related to this query * @param array $parameters Parameters passed to the query + * @throws SS_DatabaseException */ protected function databaseError($msg, $errorLevel = E_USER_ERROR, $sql = null, $parameters = array()) { // Prevent errors when error checking is set at zero level @@ -47,48 +57,59 @@ abstract class DBConnector { user_error($msg, $errorLevel); } } - + /** - * Determines if the query should be previewed, and thus interrupted silently. - * If so, this function also displays the query via the debuging system. - * Subclasess should respect the results of this call for each query, and not - * execute any queries that generate a true response. - * - * @param string $sql The query to be executed - * @return boolean Flag indicating that the query was previewed + * Determine if this SQL statement is a destructive operation (write or ddl) + * + * @param string $sql + * @return bool */ - protected function previewWrite($sql) { - // Break if not requested - if (!isset($_REQUEST['previewwrite'])) return false; - - // Break if non-write operation - $operation = strtolower(substr($sql, 0, strpos($sql, ' '))); - $writeOperations = Config::inst()->get(get_class($this), 'write_operations'); - if (!in_array($operation, $writeOperations)) { + public function isQueryMutable($sql) { + $operations = array_merge( + Config::inst()->get(get_class($this), 'write_operations'), + Config::inst()->get(get_class($this), 'ddl_operations') + ); + return $this->isQueryType($sql, $operations); + } + + /** + * Determine if this SQL statement is a DDL operation + * + * @param string $sql + * @return bool + */ + public function isQueryDDL($sql) { + $operations = Config::inst()->get(get_class($this), 'ddl_operations'); + return $this->isQueryType($sql, $operations); + } + + /** + * Determine if this SQL statement is a write operation + * (alters content but not structure) + * + * @param string $sql + * @return bool + */ + public function isQueryWrite($sql) { + $operations = Config::inst()->get(get_class($this), 'write_operations'); + return $this->isQueryType($sql, $operations); + } + + /** + * Determine if a query is of the given type + * + * @param string $sql Raw SQL + * @param string|array $type Type or list of types (first word in the query). Must be lowercase + */ + protected function isQueryType($sql, $type) { + if(!preg_match('/^(?\w+)\b/', $sql, $matches)) { return false; } - - // output preview message - Debug::message("Will execute: $sql"); - return true; - } - - /** - * Allows the display and benchmarking of queries as they are being run - * - * @param string $sql Query to run, and single parameter to callback - * @param callable $callback Callback to execute code - * @return mixed Result of query - */ - protected function benchmarkQuery($sql, $callback) { - if (isset($_REQUEST['showqueries']) && Director::isDev(true)) { - $starttime = microtime(true); - $result = $callback($sql); - $endtime = round(microtime(true) - $starttime, 4); - Debug::message("\n$sql\n{$endtime}s\n", false); - return $result; + $operation = $matches['operation']; + if(is_array($type)) { + return in_array(strtolower($operation), $type); } else { - return $callback($sql); + return strcasecmp($sql, $type) === 0; } } diff --git a/model/connect/Database.php b/model/connect/Database.php index d12896f8a..ace5071b2 100644 --- a/model/connect/Database.php +++ b/model/connect/Database.php @@ -96,7 +96,19 @@ abstract class SS_Database { * @return SS_Query */ public function query($sql, $errorLevel = E_USER_ERROR) { - return $this->connector->query($sql, $errorLevel); + // Check if we should only preview this query + if ($this->previewWrite($sql)) { + return; + } + + // Benchmark query + $connector = $this->connector; + return $this->benchmarkQuery( + $sql, + function($sql) use($connector, $errorLevel) { + return $connector->query($sql, $errorLevel); + } + ); } @@ -109,7 +121,62 @@ abstract class SS_Database { * @return SS_Query */ public function preparedQuery($sql, $parameters, $errorLevel = E_USER_ERROR) { - return $this->connector->preparedQuery($sql, $parameters, $errorLevel); + // Check if we should only preview this query + if ($this->previewWrite($sql)) { + return; + } + + // Benchmark query + $connector = $this->connector; + return $this->benchmarkQuery( + $sql, + function($sql) use($connector, $parameters, $errorLevel) { + return $connector->preparedQuery($sql, $parameters, $errorLevel); + } + ); + } + + /** + * Determines if the query should be previewed, and thus interrupted silently. + * If so, this function also displays the query via the debuging system. + * Subclasess should respect the results of this call for each query, and not + * execute any queries that generate a true response. + * + * @param string $sql The query to be executed + * @return boolean Flag indicating that the query was previewed + */ + protected function previewWrite($sql) { + // Only preview if previewWrite is set, we are in dev mode, and + // the query is mutable + if (isset($_REQUEST['previewwrite']) + && Director::isDev() + && $this->connector->isQueryMutable($sql) + ) { + // output preview message + Debug::message("Will execute: $sql"); + return true; + } else { + return false; + } + } + + /** + * Allows the display and benchmarking of queries as they are being run + * + * @param string $sql Query to run, and single parameter to callback + * @param callable $callback Callback to execute code + * @return mixed Result of query + */ + protected function benchmarkQuery($sql, $callback) { + if (isset($_REQUEST['showqueries']) && Director::isDev()) { + $starttime = microtime(true); + $result = $callback($sql); + $endtime = round(microtime(true) - $starttime, 4); + Debug::message("\n$sql\n{$endtime}s\n", false); + return $result; + } else { + return $callback($sql); + } } /** diff --git a/model/connect/MySQLiConnector.php b/model/connect/MySQLiConnector.php index f3cec3f04..84f61ac90 100644 --- a/model/connect/MySQLiConnector.php +++ b/model/connect/MySQLiConnector.php @@ -103,22 +103,22 @@ class MySQLiConnector extends DBConnector { public function getVersion() { return $this->dbConn->server_info; } - - protected function benchmarkQuery($sql, $callback) { + + /** + * Invoked before any query is executed + * + * @param string $sql + */ + protected function beforeQuery($sql) { // Clear the last statement $this->setLastStatement(null); - return parent::benchmarkQuery($sql, $callback); } public function query($sql, $errorLevel = E_USER_ERROR) { - // Check if we should only preview this query - if ($this->previewWrite($sql)) return; + $this->beforeQuery($sql); // Benchmark query - $conn = $this->dbConn; - $handle = $this->benchmarkQuery($sql, function($sql) use($conn) { - return $conn->query($sql, MYSQLI_STORE_RESULT); - }); + $handle = $this->dbConn->query($sql, MYSQLI_STORE_RESULT); if (!$handle || $this->dbConn->error) { $this->databaseError($this->getLastError(), $errorLevel, $sql); @@ -208,23 +208,20 @@ class MySQLiConnector extends DBConnector { public function preparedQuery($sql, $parameters, $errorLevel = E_USER_ERROR) { // Shortcut to basic query when not given parameters - if(empty($parameters)) return $this->query($sql, $errorLevel); + if(empty($parameters)) { + return $this->query($sql, $errorLevel); + } - // Check if we should only preview this query - if ($this->previewWrite($sql)) return; + $this->beforeQuery($sql); // Type check, identify, and prepare parameters for passing to the statement bind function $parsedParameters = $this->parsePreparedParameters($parameters, $blobs); // Benchmark query - $self = $this; - $lastStatement = $this->benchmarkQuery($sql, function($sql) use($parsedParameters, $blobs, $self) { - - $statement = $self->prepareStatement($sql, $success); - if(!$success) return null; - + $statement = $this->prepareStatement($sql, $success); + if($success) { if($parsedParameters) { - $self->bindParameters($statement, $parsedParameters); + $this->bindParameters($statement, $parsedParameters); } // Bind any blobs given @@ -234,18 +231,18 @@ class MySQLiConnector extends DBConnector { // Safely execute the statement $statement->execute(); - return $statement; - }); + } - if (!$lastStatement || $lastStatement->error) { + if (!$success || $statement->error) { $values = $this->parameterValues($parameters); $this->databaseError($this->getLastError(), $errorLevel, $sql, $values); return null; } // Non-select queries will have no result data - if($lastStatement && ($metaData = $lastStatement->result_metadata())) { - return new MySQLStatement($lastStatement, $metaData); + $metaData = $statement->result_metadata(); + if($metaData) { + return new MySQLStatement($statement, $metaData); } else { // Replicate normal behaviour of ->query() on non-select calls return new MySQLQuery($this, true); diff --git a/model/connect/PDOConnector.php b/model/connect/PDOConnector.php index a0a38e41d..62f79b56d 100644 --- a/model/connect/PDOConnector.php +++ b/model/connect/PDOConnector.php @@ -30,11 +30,18 @@ class PDOConnector extends DBConnector { protected $databaseName = null; /** - * The most recent statement returned from PDODatabase->query + * If available, the row count of the last executed statement * - * @var PDOStatement + * @var int|null */ - protected $lastStatement = null; + protected $rowCount = null; + + /** + * Error generated by the errorInfo() method of the last PDOStatement + * + * @var array|null + */ + protected $lastStatementError = null; /** * List of prepared statements, cached by SQL string @@ -58,13 +65,22 @@ class PDOConnector extends DBConnector { * @return PDOStatement */ public function getOrPrepareStatement($sql) { - if(empty($this->cachedStatements[$sql])) { - $this->cachedStatements[$sql] = $this->pdoConnection->prepare( - $sql, - array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY) - ); + // Return cached statements + if(isset($this->cachedStatements[$sql])) { + return $this->cachedStatements[$sql]; } - return $this->cachedStatements[$sql]; + + // Generate new statement + $statement = $this->pdoConnection->prepare( + $sql, + array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY) + ); + + // Only cache select statements + if(preg_match('/^(\s*)select\b/i', $sql)) { + $this->cachedStatements[$sql] = $statement; + } + return $statement; } /** @@ -166,54 +182,54 @@ class PDOConnector extends DBConnector { public function quoteString($value) { return $this->pdoConnection->quote($value); } + + /** + * Invoked before any query is executed + * + * @param string $sql + */ + protected function beforeQuery($sql) { + // Reset state + $this->rowCount = 0; + $this->lastStatementError = null; + + // Flush if necessary + if($this->isQueryDDL($sql)) { + $this->flushStatements(); + } + } /** * Executes a query that doesn't return a resultset * - * @param string $sql * @param string $sql The SQL query to execute * @param integer $errorLevel For errors to this query, raise PHP errors * using this error level. + * @return int */ public function exec($sql, $errorLevel = E_USER_ERROR) { - // Check if we should only preview this query - if ($this->previewWrite($sql)) return; - - // Reset last statement to prevent interference in case of error - $this->lastStatement = null; - - // Benchmark query - $pdo = $this->pdoConnection; - $result = $this->benchmarkQuery($sql, function($sql) use($pdo) { - return $pdo->exec($sql); - }); + $this->beforeQuery($sql); + + // Directly exec this query + $result = $this->pdoConnection->exec($sql); // Check for errors - if ($result === false) { - $this->databaseError($this->getLastError(), $errorLevel, $sql); - return null; + if ($result !== false) { + return $this->rowCount = $result; } - - return $result; + + $this->databaseError($this->getLastError(), $errorLevel, $sql); + return null; } public function query($sql, $errorLevel = E_USER_ERROR) { - // Check if we should only preview this query - if ($this->previewWrite($sql)) return; - - // Benchmark query - $pdo = $this->pdoConnection; - $this->lastStatement = $this->benchmarkQuery($sql, function($sql) use($pdo) { - return $pdo->query($sql); - }); - - // Check for errors - if (!$this->lastStatement || $this->hasError($this->lastStatement)) { - $this->databaseError($this->getLastError(), $errorLevel, $sql); - return null; - } - - return new PDOQuery($this->lastStatement); + $this->beforeQuery($sql); + + // Directly query against connection + $statement = $this->pdoConnection->query($sql); + + // Generate results + return $this->prepareResults($statement, $errorLevel, $sql); } /** @@ -272,33 +288,54 @@ class PDOConnector extends DBConnector { } public function preparedQuery($sql, $parameters, $errorLevel = E_USER_ERROR) { - // Check if we should only preview this query - if ($this->previewWrite($sql)) return; - - // Benchmark query - $self = $this; - $this->lastStatement = $this->benchmarkQuery($sql, function($sql) use($parameters, $self) { - - // Prepare statement - $statement = $self->getOrPrepareStatement($sql); - if(!$statement) return null; - - // Inject parameters - $self->bindParameters($statement, $parameters); - - // Safely execute the statement + $this->beforeQuery($sql); + + // Prepare statement + $statement = $this->getOrPrepareStatement($sql); + + // Bind and invoke statement safely + if($statement) { + $this->bindParameters($statement, $parameters); $statement->execute($parameters); - return $statement; - }); - - // Check for errors - if (!$this->lastStatement || $this->hasError($this->lastStatement)) { - $values = $this->parameterValues($parameters); - $this->databaseError($this->getLastError(), $errorLevel, $sql, $values); - return null; + } + + // Generate results + return $this->prepareResults($statement, $errorLevel, $sql); + } + + /** + * Given a PDOStatement that has just been executed, generate results + * and report any errors + * + * @param PDOStatement $statement + * @param int $errorLevel + * @param string $sql + * @param array $parameters + * @return \PDOQuery + */ + protected function prepareResults($statement, $errorLevel, $sql, $parameters = array()) { + + // Record row-count and errors of last statement + if($this->hasError($statement)) { + $this->lastStatementError = $statement->errorInfo(); + } elseif($statement) { + // Count and return results + $this->rowCount = $statement->rowCount(); + return new PDOQuery($statement); } - return new PDOQuery($this->lastStatement); + // Ensure statement is closed + if($statement) { + $statement->closeCursor(); + unset($statement); + } + + // Report any errors + if($parameters) { + $parameters = $this->parameterValues($parameters); + } + $this->databaseError($this->getLastError(), $errorLevel, $sql, $parameters); + return null; } /** @@ -309,24 +346,29 @@ class PDOConnector extends DBConnector { */ protected function hasError($resource) { // No error if no resource - if(empty($resource)) return false; + if(empty($resource)) { + return false; + } // If the error code is empty the statement / connection has not been run yet $code = $resource->errorCode(); - if(empty($code)) return false; + if(empty($code)) { + return false; + } // Skip 'ok' and undefined 'warning' types. // @see http://docstore.mik.ua/orelly/java-ent/jenut/ch08_06.htm return $code !== '00000' && $code !== '01000'; } - + public function getLastError() { - if ($this->hasError($this->lastStatement)) { - $error = $this->lastStatement->errorInfo(); + $error = null; + if ($this->lastStatementError) { + $error = $this->lastStatementError; } elseif($this->hasError($this->pdoConnection)) { $error = $this->pdoConnection->errorInfo(); } - if (isset($error)) { + if ($error) { return sprintf("%s-%s: %s", $error[0], $error[1], $error[2]); } } @@ -336,8 +378,7 @@ class PDOConnector extends DBConnector { } public function affectedRows() { - if (empty($this->lastStatement)) return 0; - return $this->lastStatement->rowCount(); + return $this->rowCount; } public function selectDatabase($name) { diff --git a/model/connect/Query.php b/model/connect/Query.php index 22dd38f00..6bd20d398 100644 --- a/model/connect/Query.php +++ b/model/connect/Query.php @@ -146,6 +146,7 @@ abstract class SS_Query implements Iterator { public function rewind() { if ($this->queryHasBegun && $this->numRecords() > 0) { $this->queryHasBegun = false; + $this->currentRecord = null; return $this->seek(0); } } diff --git a/tests/model/PDODatabaseTest.php b/tests/model/PDODatabaseTest.php new file mode 100644 index 000000000..c613a931a --- /dev/null +++ b/tests/model/PDODatabaseTest.php @@ -0,0 +1,113 @@ +markTestSkipped('This test requires the current DB connector is PDO'); + } + + // Test preparation of equivalent statemetns + $result1 = DB::get_connector()->preparedQuery( + 'SELECT "Sort", "Title" FROM "MySQLDatabaseTest_Data" WHERE "Sort" > ? ORDER BY "Sort"', + array(0) + ); + + $result2 = DB::get_connector()->preparedQuery( + 'SELECT "Sort", "Title" FROM "MySQLDatabaseTest_Data" WHERE "Sort" > ? ORDER BY "Sort"', + array(2) + ); + $this->assertInstanceOf('PDOQuery', $result1); + $this->assertInstanceOf('PDOQuery', $result2); + + // Also select non-prepared statement + $result3 = DB::get_connector()->query('SELECT "Sort", "Title" FROM "MySQLDatabaseTest_Data" ORDER BY "Sort"'); + $this->assertInstanceOf('PDOQuery', $result3); + + // Iterating one level should not buffer, but return the right result + $this->assertEquals( + array( + 'Sort' => 1, + 'Title' => 'First Item' + ), + $result1->next() + ); + $this->assertEquals( + array( + 'Sort' => 2, + 'Title' => 'Second Item' + ), + $result1->next() + ); + + // Test first + $this->assertEquals( + array( + 'Sort' => 1, + 'Title' => 'First Item' + ), + $result1->first() + ); + + // Test seek + $this->assertEquals( + array( + 'Sort' => 2, + 'Title' => 'Second Item' + ), + $result1->seek(1) + ); + + // Test count + $this->assertEquals(4, $result1->numRecords()); + + // Test second statement + $this->assertEquals( + array( + 'Sort' => 3, + 'Title' => 'Third Item' + ), + $result2->next() + ); + + // Test non-prepared query + $this->assertEquals( + array( + 'Sort' => 1, + 'Title' => 'First Item' + ), + $result3->next() + ); + } + + public function testAffectedRows() { + if(!(DB::get_connector() instanceof PDOConnector)) { + $this->markTestSkipped('This test requires the current DB connector is PDO'); + } + + $query = new SQLUpdate('MySQLDatabaseTest_Data'); + $query->setAssignments(array('Title' => 'New Title')); + + // Test update which affects no rows + $query->setWhere(array('Title' => 'Bob')); + $result = $query->execute(); + $this->assertInstanceOf('PDOQuery', $result); + $this->assertEquals(0, DB::affected_rows()); + + // Test update which affects some rows + $query->setWhere(array('Title' => 'First Item')); + $result = $query->execute(); + $this->assertInstanceOf('PDOQuery', $result); + $this->assertEquals(1, DB::affected_rows()); + } +} \ No newline at end of file From 7597b888c308600b46ab4f55d319660835c4ccad Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 15 Jun 2015 18:35:01 +1200 Subject: [PATCH 015/110] Make SQLQuery strict semver for 3.2 --- docs/en/04_Changelogs/3.2.0.md | 41 ++++- model/DataQuery.php | 15 +- model/queries/SQLConditionalExpression.php | 12 +- model/queries/SQLQuery.php | 183 ++++++++++++++++++++- model/queries/SQLSelect.php | 2 +- tests/model/SQLQueryTest.php | 106 ++++++++++++ 6 files changed, 333 insertions(+), 26 deletions(-) diff --git a/docs/en/04_Changelogs/3.2.0.md b/docs/en/04_Changelogs/3.2.0.md index 53f84e11d..97c8c37ce 100644 --- a/docs/en/04_Changelogs/3.2.0.md +++ b/docs/en/04_Changelogs/3.2.0.md @@ -55,7 +55,7 @@ * Implementation of a parameterised query framework eliminating the need to manually escape variables for use in SQL queries. This has been integrated into nearly every level of the database ORM. * Refactor of database connectivity classes into separate components linked together through dependency injection -* Refactor of `SQLQuery` into separate objects for each query type: `SQLQuery`, `SQLDelete`, `SQLUpdate` and `SQLInsert` +* Refactor of `SQLQuery` into separate objects for each query type: `SQLSelect`, `SQLDelete`, `SQLUpdate` and `SQLInsert` * PDO is now a standard connector, and is available for all database interfaces * `DataObject::doValidate()` method visibility added to access `DataObject::validate` externally * `NumericField` now uses HTML5 "number" type instead of "text" @@ -455,6 +455,26 @@ After: $query->execute(); +When working with SQLQuery passed into user code, it is advisable to strictly +cast it into either a SQLSelect or SQLDelete. This can be done by using the new +`SQLQuery::toAppropriateExpression()` method, which will automatically convert +to the correct type based on whether the SQLQuery is set to delete or not. + +If a SQLQuery is not converted, then the result of `getWhere` will not be parameterised. +This is because user code written for 3.1 expects this list to be a flat array +of strings. This format is inherently unsafe, and should be avoided where possible. + + + :::php + getWhere(); // Will be flattened (unsafe 3.1 compatible format) + $expression = $query->toAppropriateExpression(); // Either SQLSelect or SQLDelete + $expression->getWhere(); // Will be parameterised (preferred 3.2 compatible format) + } + + + Alternatively: @@ -463,7 +483,8 @@ Alternatively: $query = SQLQuery::create() ->setFrom('"SiteTree"') ->setWhere(array('"SiteTree"."ShowInMenus"' => 0)) - ->toDelete(); + ->setDelete(true) + ->toAppropriateExpression(); $query->execute(); @@ -616,12 +637,14 @@ E.g. DB::prepared_query('DELETE FROM "MyObject" WHERE ParentID = ? OR IsValid = ?', $parameters); -#### 4. Interaction with `SQLQuery::getWhere()` method +#### 4. Interaction with `SQLSelect::getWhere()` method -As all where conditions are now parameterised, the format of the results returned by `SQLQuery::getWhere()` -will not always equate with that in FrameWork 3.1. Once this would be a list of strings, what will -now be returned is a list of conditions, each of which is an associative array mapping the -condition string to a list of parameters provided. +The `SQLSelect` class supercedes the old `SQLQuery` object for performing select queries. Although +both implement the `getWhere()` method, the results returned by `SQLSelect::getWhere()` will be +parameterised while `SQLQuery::getWhere()` will be a flattened array of strings. + +`SQLSelect::getWhere()` returns a list of conditions, each of which is an +associative array mapping the condition string to a list of parameters provided. Before: @@ -630,6 +653,7 @@ Before: getWhere(); $new = array(); foreach($conditions as $condition) { @@ -646,6 +670,7 @@ After: :::php // Increment value of a single condition + $query = new SQLSelect(/*...*/); $conditions = $query->getWhere(); $new = array(); foreach($conditions as $condition) { @@ -665,7 +690,7 @@ replace this method call with the new `getWhereParameterised($parameters)` metho applicable. This method returns a manipulated form of the where conditions stored by the query, so -that it matches the list of strings consistent with the old 3.1 `SQLQuery::getWhere()` behaviour. +that it matches the list of strings similar to the old 3.1 `SQLQuery::getWhere()` behaviour. Additionally, the list of parameters is safely extracted, flattened, and can be passed out through the `$parameters` argument which is passed by reference. diff --git a/model/DataQuery.php b/model/DataQuery.php index 94cbd7d17..b80257448 100644 --- a/model/DataQuery.php +++ b/model/DataQuery.php @@ -90,7 +90,7 @@ class DataQuery { $fieldExpression = key($fieldExpression); } - $where = $this->query->getWhere(); + $where = $this->query->toAppropriateExpression()->getWhere(); // Iterate through each condition foreach($where as $i => $condition) { @@ -836,6 +836,10 @@ class DataQuery { */ class DataQuery_SubGroup extends DataQuery implements SQLConditionGroup { + /** + * + * @var SQLQuery + */ protected $whereQuery; public function __construct(DataQuery $base, $connective) { @@ -867,11 +871,14 @@ class DataQuery_SubGroup extends DataQuery implements SQLConditionGroup { $parameters = array(); // Ignore empty conditions - $where = $this->whereQuery->getWhere(); - if(empty($where)) return null; + $query = $this->whereQuery->toAppropriateExpression(); + $where = $query->getWhere(); + if(empty($where)) { + return null; + } // Allow database to manage joining of conditions - $sql = DB::get_conn()->getQueryBuilder()->buildWhereFragment($this->whereQuery, $parameters); + $sql = DB::get_conn()->getQueryBuilder()->buildWhereFragment($query, $parameters); return preg_replace('/^\s*WHERE\s*/i', '', $sql); } } diff --git a/model/queries/SQLConditionalExpression.php b/model/queries/SQLConditionalExpression.php index 1e330ea50..24afbac16 100644 --- a/model/queries/SQLConditionalExpression.php +++ b/model/queries/SQLConditionalExpression.php @@ -371,7 +371,7 @@ abstract class SQLConditionalExpression extends SQLExpression { /** * Set a WHERE clause. * - * @see SQLQuery::addWhere() for syntax examples + * @see SQLConditionalExpression::addWhere() for syntax examples * * @param mixed $where Predicate(s) to set, as escaped SQL statements or paramaterised queries * @param mixed $where,... Unlimited additional predicates @@ -473,7 +473,7 @@ abstract class SQLConditionalExpression extends SQLExpression { } /** - * @see SQLQuery::addWhere() + * @see SQLConditionalExpression::addWhere() * * @param mixed $filters Predicate(s) to set, as escaped SQL statements or paramaterised queries * @param mixed $filters,... Unlimited additional predicates @@ -487,7 +487,7 @@ abstract class SQLConditionalExpression extends SQLExpression { } /** - * @see SQLQuery::addWhere() + * @see SQLConditionalExpression::addWhere() * * @param mixed $filters Predicate(s) to set, as escaped SQL statements or paramaterised queries * @param mixed $filters,... Unlimited additional predicates @@ -694,12 +694,12 @@ abstract class SQLConditionalExpression extends SQLExpression { } /** - * Generates an SQLQuery object using the currently specified parameters. + * Generates an SQLSelect object using the currently specified parameters. * - * @return SQLQuery + * @return SQLSelect */ public function toSelect() { - $select = new SQLQuery(); + $select = new SQLSelect(); $this->copyTo($select); return $select; } diff --git a/model/queries/SQLQuery.php b/model/queries/SQLQuery.php index 2dde438b1..58404e902 100644 --- a/model/queries/SQLQuery.php +++ b/model/queries/SQLQuery.php @@ -10,6 +10,14 @@ */ class SQLQuery extends SQLSelect { + /** + * If this is true, this statement will delete rather than select. + * + * @deprecated since version 4.0 + * @var boolean + */ + protected $isDelete = false; + /** * @deprecated since version 4.0 */ @@ -21,19 +29,180 @@ class SQLQuery extends SQLSelect { } /** - * @deprecated since version 3.2 + * @deprecated since version 4.0 */ public function setDelete($value) { - $message = 'SQLQuery->setDelete no longer works. Create a SQLDelete object instead, or use toDelete()'; - Deprecation::notice('3.2', $message); - throw new BadMethodCallException($message); + Deprecation::notice('4.0', 'SQLQuery::setDelete is deprecated. Use toDelete instead'); + $this->isDelete = $value; } /** - * @deprecated since version 3.2 + * @deprecated since version 4.0 */ public function getDelete() { - Deprecation::notice('3.2', 'Use SQLDelete object instead'); - return false; + Deprecation::notice('4.0', 'SQLQuery::getDelete is deprecated. Use SQLSelect or SQLDelete instead'); + return $this->isDelete; + } + + public function sql(&$parameters = array()) { + return $this->toAppropriateExpression()->sql($parameters); + } + + /** + * Get helper class for flattening parameterised conditions + * + * @return SQLQuery_ParameterInjector + */ + protected function getParameterInjector() { + return Injector::inst()->get('SQLQuery_ParameterInjector'); + } + + /** + * Return a list of SQL where conditions (flattened as a list of strings) + * + * @return array + */ + public function getWhere() { + Deprecation::notice( + '4.0', + 'SQLQuery::getWhere is non-parameterised for backwards compatibility. '. + 'Use ->toAppropriateExpression()->getWhere() instead' + ); + $conditions = parent::getWhere(); + + // This is where any benefits of parameterised queries die + return $this + ->getParameterInjector() + ->injectConditions($conditions); + } + + /** + * Convert this SQLQuery to a SQLExpression based on its + * internal $delete state (Normally SQLSelect or SQLDelete) + * + * @return SQLExpression + */ + public function toAppropriateExpression() { + if($this->isDelete) { + return parent::toDelete(); + } else { + return parent::toSelect(); + } + } + + public function toSelect() { + if($this->isDelete) { + user_error( + 'SQLQuery::toSelect called when $isDelete is true. Use ' . + 'toAppropriateExpression() instead', + E_USER_WARNING + ); + } + return parent::toSelect(); + } + + public function toDelete() { + if(!$this->isDelete) { + user_error( + 'SQLQuery::toDelete called when $isDelete is false. Use ' . + 'toAppropriateExpression() instead', + E_USER_WARNING + ); + } + parent::toDelete(); + } +} + +/** + * Provides conversion of parameterised SQL to flattened SQL strings + * + * @deprecated since version 4.0 + */ +class SQLQuery_ParameterInjector { + + public function __construct() { + Deprecation::notice('4.0', "Use SQLSelect / SQLDelete instead of SQLQuery"); + } + + /** + * Given a list of parameterised conditions, return a flattened + * list of condition strings + * + * @param array $conditions + * @return array + */ + public function injectConditions($conditions) { + $result = array(); + foreach($conditions as $condition) { + // Evaluate the result of SQLConditionGroup here + if($condition instanceof SQLConditionGroup) { + $predicate = $condition->conditionSQL($parameters); + if(!empty($predicate)) { + $result[] = $this->injectValues($predicate, $parameters); + } + } else { + foreach($condition as $predicate => $parameters) { + $result[] = $this->injectValues($predicate, $parameters); + } + } + } + return $result; + } + + /** + * Merge parameters into a SQL prepared condition + * + * @param string $sql + * @param array $parameters + * @return string + */ + protected function injectValues($sql, $parameters) { + $segments = preg_split('/\?/', $sql); + $joined = ''; + $inString = false; + for($i = 0; $i < count($segments); $i++) { + // Append next segment + $joined .= $segments[$i]; + // Don't add placeholder after last segment + if($i === count($segments) - 1) { + break; + } + // check string escape on previous fragment + if($this->checkStringTogglesLiteral($segments[$i])) { + $inString = !$inString; + } + // Append placeholder replacement + if($inString) { + // Literal questionmark + $joined .= '?'; + continue; + } + + // Encode and insert next parameter + $next = array_shift($parameters); + if(is_array($next) && isset($next['value'])) { + $next = $next['value']; + } + $joined .= "'".Convert::raw2sql($next)."'"; + } + return $joined; + } + + /** + * Determines if the SQL fragment either breaks into or out of a string literal + * by counting single quotes + * + * Handles double-quote escaped quotes as well as slash escaped quotes + * + * @param string $input The SQL fragment + * @return boolean True if the string breaks into or out of a string literal + */ + protected function checkStringTogglesLiteral($input) { + // Remove escaped backslashes, count them! + $input = preg_replace('/\\\\\\\\/', '', $input); + // Count quotes + $totalQuotes = substr_count($input, "'"); // Includes double quote escaped quotes + $escapedQuotes = substr_count($input, "\\'"); + return (($totalQuotes - $escapedQuotes) % 2) !== 0; } } diff --git a/model/queries/SQLSelect.php b/model/queries/SQLSelect.php index ee388d4f4..ba3ed74fb 100644 --- a/model/queries/SQLSelect.php +++ b/model/queries/SQLSelect.php @@ -8,7 +8,7 @@ * @subpackage model */ class SQLSelect extends SQLConditionalExpression { - + /** * An array of SELECT fields, keyed by an optional alias. * diff --git a/tests/model/SQLQueryTest.php b/tests/model/SQLQueryTest.php index db65c35e1..6449fa2fd 100755 --- a/tests/model/SQLQueryTest.php +++ b/tests/model/SQLQueryTest.php @@ -13,6 +13,18 @@ class SQLQueryTest extends SapphireTest { 'SQLQueryTestBase', 'SQLQueryTestChild' ); + + protected $oldDeprecation = null; + + public function setUp() { + parent::setUp(); + $this->oldDeprecation = Deprecation::dump_settings(); + } + + public function tearDown() { + Deprecation::restore_settings($this->oldDeprecation); + parent::tearDown(); + } public function testCount() { @@ -681,6 +693,100 @@ class SQLQueryTest extends SapphireTest { $this->assertEquals(array('%MyName%', '2012-08-08 12:00'), $parameters); $query->execute(); } + + /** + * Test deprecation of SQLQuery::getWhere working appropriately + */ + public function testDeprecatedGetWhere() { + // Temporarily disable deprecation + Deprecation::notification_version(null); + + $query = new SQLQuery(); + $query->setSelect(array('"SQLQueryTest_DO"."Name"')); + $query->setFrom('"SQLQueryTest_DO"'); + $query->addWhere(array( + '"SQLQueryTest_DO"."Date" > ?' => '2012-08-08 12:00' + )); + $query->addWhere('"SQLQueryTest_DO"."Name" = \'Richard\''); + $query->addWhere(array( + '"SQLQueryTest_DO"."Meta" IN (?, \'Who?\', ?)' => array('Left', 'Right') + )); + + $expectedSQL = << ?) + AND ("SQLQueryTest_DO"."Name" = 'Richard') + AND ("SQLQueryTest_DO"."Meta" IN (?, 'Who?', ?)) +EOS + ; + $expectedParameters = array('2012-08-08 12:00', 'Left', 'Right'); + + + // Check sql evaluation of this query maintains the parameters + $sql = $query->sql($parameters); + $this->assertSQLEquals($expectedSQL, $sql); + $this->assertEquals($expectedParameters, $parameters); + + // Check that ->toAppropriateExpression()->setWhere doesn't modify the query + $query->setWhere($query->toAppropriateExpression()->getWhere()); + $sql = $query->sql($parameters); + $this->assertSQLEquals($expectedSQL, $sql); + $this->assertEquals($expectedParameters, $parameters); + + // Check that getWhere are all flattened queries + $expectedFlattened = array( + '"SQLQueryTest_DO"."Date" > \'2012-08-08 12:00\'', + '"SQLQueryTest_DO"."Name" = \'Richard\'', + '"SQLQueryTest_DO"."Meta" IN (\'Left\', \'Who?\', \'Right\')' + ); + $this->assertEquals($expectedFlattened, $query->getWhere()); + } + + /** + * Test deprecation of SQLQuery::setDelete/getDelete + */ + public function testDeprecatedSetDelete() { + // Temporarily disable deprecation + Deprecation::notification_version(null); + + $query = new SQLQuery(); + $query->setSelect(array('"SQLQueryTest_DO"."Name"')); + $query->setFrom('"SQLQueryTest_DO"'); + $query->setWhere(array('"SQLQueryTest_DO"."Name"' => 'Andrew')); + + // Check SQL for select + $this->assertSQLEquals(<<sql($parameters) + ); + $this->assertEquals(array('Andrew'), $parameters); + + // Check setDelete works + $query->setDelete(true); + $this->assertSQLEquals(<<sql($parameters) + ); + $this->assertEquals(array('Andrew'), $parameters); + + // Check that setDelete back to false restores the state + $query->setDelete(false); + $this->assertSQLEquals(<<sql($parameters) + ); + $this->assertEquals(array('Andrew'), $parameters); + } } class SQLQueryTest_DO extends DataObject implements TestOnly { From 6cc1c4580c93be8c884c028a32f05cdc6f720d44 Mon Sep 17 00:00:00 2001 From: scott1702 Date: Wed, 17 Jun 2015 15:31:47 +1200 Subject: [PATCH 016/110] Update styles for multi-selection button --- admin/css/screen.css | 4 ++-- admin/scss/_style.scss | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/admin/css/screen.css b/admin/css/screen.css index 1572d73f3..ec10c3986 100644 --- a/admin/css/screen.css +++ b/admin/css/screen.css @@ -541,11 +541,11 @@ body.cms { overflow: hidden; } .cms-content-batchactions { float: left; position: relative; display: block; } .cms-content-batchactions .view-mode-batchactions-wrapper { height: 18px; float: left; padding: 4px 6px; border: 1px solid #aaa; margin-bottom: 8px; margin-right: -1px; background-color: #D9D9D9; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(to bottom, #ffffff, #d9d9d9); border-top-left-radius: 4px; border-bottom-left-radius: 4px; } .cms-content-batchactions .view-mode-batchactions-wrapper input { vertical-align: middle; } -.cms-content-batchactions .view-mode-batchactions-wrapper label { vertical-align: middle; display: none; } +.cms-content-batchactions .view-mode-batchactions-wrapper .view-mode-batchactions-label { vertical-align: middle; display: none; } .cms-content-batchactions .view-mode-batchactions-wrapper fieldset, .cms-content-batchactions .view-mode-batchactions-wrapper .Actions { display: inline-block; } .cms-content-batchactions .view-mode-batchactions-wrapper #view-mode-batchactions { margin-top: 2px; } .cms-content-batchactions.inactive .view-mode-batchactions-wrapper { border-radius: 4px; } -.cms-content-batchactions.inactive .view-mode-batchactions-wrapper label { display: inline; } +.cms-content-batchactions.inactive .view-mode-batchactions-wrapper .view-mode-batchactions-label { display: inline; } .cms-content-batchactions form > * { display: block; float: left; } .cms-content-batchactions form.cms-batch-actions { float: left; } .cms-content-batchactions.inactive form { display: none; } diff --git a/admin/scss/_style.scss b/admin/scss/_style.scss index 688ab9a2f..ad07f5104 100644 --- a/admin/scss/_style.scss +++ b/admin/scss/_style.scss @@ -906,7 +906,7 @@ body.cms { vertical-align: middle; } - label { + .view-mode-batchactions-label { vertical-align: middle; display: none; } @@ -922,7 +922,7 @@ body.cms { &.inactive .view-mode-batchactions-wrapper { border-radius: 4px; - label { + .view-mode-batchactions-label { display: inline; } } From 47ae8ac7e974d670ff256b1e2e5f75a8ee6b4d9b Mon Sep 17 00:00:00 2001 From: Christopher Pitt Date: Mon, 27 Apr 2015 14:34:52 +1200 Subject: [PATCH 017/110] Clean up NumericField --- forms/NumericField.php | 131 ++++++++++++++++++++++++++++++----------- 1 file changed, 96 insertions(+), 35 deletions(-) diff --git a/forms/NumericField.php b/forms/NumericField.php index 4fd615b2a..b1dfa3109 100644 --- a/forms/NumericField.php +++ b/forms/NumericField.php @@ -4,138 +4,199 @@ * Text input field with validation for numeric values. Supports validating * the numeric value as to the {@link i18n::get_locale()} value, or an * overridden locale specific to this field. - * + * * @package forms * @subpackage fields-formattedinput */ class NumericField extends TextField { - /** - * Override locale for this field - * + * Override locale for this field. + * * @var string */ protected $locale = null; + /** + * @param mixed $value + * @param array $data + * + * @return $this + * + * @throws Zend_Locale_Exception + */ public function setValue($value, $data = array()) { require_once "Zend/Locale/Format.php"; // If passing in a non-string number, or a value - // directly from a dataobject then localise this number - if ((is_numeric($value) && !is_string($value)) || - ($value && $data instanceof DataObject) - ){ + // directly from a DataObject then localise this number + + if(is_int($value) || is_float($value) || $data instanceof DataObject) { $locale = new Zend_Locale($this->getLocale()); - $this->value = Zend_Locale_Format::toNumber($value, array('locale' => $locale)); + + $this->value = Zend_Locale_Format::toNumber( + $value, + array('locale' => $locale) + ); } else { - // If an invalid number, store it anyway, but validate() will fail $this->value = $this->clean($value); } + return $this; } /** - * In some cases and locales, validation expects non-breaking spaces + * In some cases and locales, validation expects non-breaking spaces. + * + * Returns the value, with all spaces replaced with non-breaking spaces. * * @param string $input - * @return string The input value, with all spaces replaced with non-breaking spaces + * + * @return string */ protected function clean($input) { - $nbsp = html_entity_decode(' ', null, 'UTF-8'); - return str_replace(' ', $nbsp, trim($input)); + $replacement = html_entity_decode(' ', null, 'UTF-8'); + + return str_replace(' ', $replacement, trim($input)); } - + /** - * Determine if the current value is a valid number in the current locale - * + * Determine if the current value is a valid number in the current locale. + * * @return bool */ protected function isNumeric() { require_once "Zend/Locale/Format.php"; + $locale = new Zend_Locale($this->getLocale()); + return Zend_Locale_Format::isNumber( $this->clean($this->value), array('locale' => $locale) ); } + /** + * {@inheritdoc} + */ public function Type() { return 'numeric text'; } + /** + * @param Validator $validator + * + * @return bool + */ public function validate($validator) { if(!$this->value && !$validator->fieldIsRequired($this->name)) { return true; } - - if($this->isNumeric()) return true; + + if($this->isNumeric()) { + return true; + } $validator->validationError( $this->name, _t( - 'NumericField.VALIDATION', "'{value}' is not a number, only numbers can be accepted for this field", + 'NumericField.VALIDATION', + "'{value}' is not a number, only numbers can be accepted for this field", array('value' => $this->value) ), "validation" ); + return false; } /** - * Extracts the number value from the localised string value - * - * @return string number value + * Extracts the number value from the localised string value. + * + * @return string */ public function dataValue() { require_once "Zend/Locale/Format.php"; - if(!$this->isNumeric()) return 0; + + if(!$this->isNumeric()) { + return 0; + } + $locale = new Zend_Locale($this->getLocale()); + $number = Zend_Locale_Format::getNumber( $this->clean($this->value), array('locale' => $locale) ); + return $number; } - + /** - * Returns a readonly version of this field + * Creates a read-only version of the field. + * + * @return NumericField_Readonly */ public function performReadonlyTransformation() { - $field = new NumericField_Readonly($this->name, $this->title, $this->value); + $field = new NumericField_Readonly( + $this->name, + $this->title, + $this->value + ); + $field->setForm($this->form); + return $field; } /** - * Gets the current locale this field is set to - * + * Gets the current locale this field is set to. + * * @return string */ public function getLocale() { - return $this->locale ?: i18n::get_locale(); + if($this->locale) { + return $this->locale; + } + + return i18n::get_locale(); } /** - * Override the locale for this field + * Override the locale for this field. * * @param string $locale + * * @return $this */ public function setLocale($locale) { $this->locale = $locale; + return $this; } - } +/** + * Readonly version of a numeric field. + * + * @package forms + * @subpackage fields-basic + */ class NumericField_Readonly extends ReadonlyField { - + /** + * @return static + */ public function performReadonlyTransformation() { return clone $this; } + /** + * @return string + */ public function Value() { - return Convert::raw2xml($this->value ? "$this->value" : "0"); - } + if($this->value) { + return Convert::raw2xml((string) $this->value); + } + return '0'; + } } From efcd64a3148271d72bbd97aad996c06315831dd0 Mon Sep 17 00:00:00 2001 From: Christopher Pitt Date: Mon, 27 Apr 2015 14:50:40 +1200 Subject: [PATCH 018/110] Clean up NullableField --- forms/NullableField.php | 136 +++++++++++++++++++++++++++------------- 1 file changed, 93 insertions(+), 43 deletions(-) diff --git a/forms/NullableField.php b/forms/NullableField.php index ad1489121..5fa41f50d 100644 --- a/forms/NullableField.php +++ b/forms/NullableField.php @@ -1,75 +1,98 @@ Value() or $field->dataValue() - * - * You can specify the label to use for the "is null" checkbox. If you want to use I8N for this label then specify it - * like this: - * - * $field->setIsNullLabel(_T(SOME_MODULE_ISNULL_LABEL, "Is Null"); - * + * + * You can specify the label to use for the "is null" checkbox. If you want to use i18n for this + * label then specify it like this: + * + * $field->setIsNullLabel(_T(SOME_MODULE_ISNULL_LABEL, "Is Null")); + * * @author Pete Bacon Darwin + * * @package forms * @subpackage fields-basic */ class NullableField extends FormField { /** * The field that holds the value of this field + * * @var FormField */ protected $valueField; - + /** * The label to show next to the is null check box. + * * @var string */ protected $isNullLabel; - /** * Create a new nullable field - * @param $valueField - * @return NullableField + * + * @param FormField $valueField + * @param null|string $isNullLabel */ public function __construct(FormField $valueField, $isNullLabel = null) { $this->valueField = $valueField; - $this->isNullLabel = $isNullLabel; - if ( is_null($this->isNullLabel) ) { - // Set a default label if one is not provided. + + if(isset($isNullLabel)) { + $this->setIsNullLabel($isNullLabel); + } else { $this->isNullLabel = _t('NullableField.IsNullLabel', 'Is Null'); } - parent::__construct($valueField->getName(), $valueField->Title(), $valueField->Value(), - $valueField->getForm(), $valueField->RightTitle()); - $this->readonly = $valueField->isReadonly(); + + parent::__construct( + $valueField->getName(), + $valueField->Title(), + $valueField->Value() + ); + + $this->setForm($valueField->getForm()); + $this->setRightTitle($valueField->RightTitle()); + $this->setReadonly($valueField->isReadonly()); } - + /** * Get the label used for the Is Null checkbox. + * * @return string */ public function getIsNullLabel() { return $this->isNullLabel; } + /** * Set the label used for the Is Null checkbox. + * * @param $isNulLabel string + * + * @return $this */ - public function setIsNullLabel(string $isNulLabel){ + public function setIsNullLabel($isNulLabel) { $this->isNullLabel = $isNulLabel; + return $this; } - + /** * Get the id used for the Is Null check box. + * * @return string */ public function getIsNullId() { @@ -77,53 +100,80 @@ class NullableField extends FormField { } /** - * (non-PHPdoc) - * @see framework/forms/FormField#Field() + * @param array $properties + * + * @return string */ public function Field($properties = array()) { - if ( $this->isReadonly()) { + if($this->isReadonly()) { $nullableCheckbox = new CheckboxField_Readonly($this->getIsNullId()); } else { $nullableCheckbox = new CheckboxField($this->getIsNullId()); } + $nullableCheckbox->setValue(is_null($this->dataValue())); - return $this->valueField->Field() . ' ' . $nullableCheckbox->Field() - . ' ' . $this->getIsNullLabel().''; + return sprintf( + '%s %s %s', + $this->valueField->Field(), + $nullableCheckbox->Field(), + $this->getIsNullLabel() + ); } /** * Value is sometimes an array, and sometimes a single value, so we need to handle both cases + * + * @param mixed $value + * @param null|array $data + * + * @return $this */ public function setValue($value, $data = null) { - if ( is_array($data) && array_key_exists($this->getIsNullId(), $data) && $data[$this->getIsNullId()] ) { + $id = $this->getIsNullId(); + + if(is_array($data) && array_key_exists($id, $data) && $data[$id]) { $value = null; } + $this->valueField->setValue($value); + parent::setValue($value); return $this; } - + /** - * (non-PHPdoc) - * @see forms/FormField#setName($name) + * @param string $name + * + * @return $this */ public function setName($name) { - // We need to pass through the name change to the underlying value field. $this->valueField->setName($name); + parent::setName($name); return $this; } /** - * (non-PHPdoc) - * @see framework/forms/FormField#debug() + * @return string */ public function debug() { - $result = "$this->class ($this->name: $this->title : $this->message) = "; - $result .= (is_null($this->value)) ? "<>" : $this->value; - return result; + $result = sprintf( + '%s (%s: $s : %s) = ', + $this->class, + $this->name, + $this->title, + $this->message + ); + + if($this->value === null) { + $result .= "<>"; + } else { + $result .= (string) $this->value; + } + + return $result; } } From 4ddc2d231cce67e93337552b52a8f752881632a5 Mon Sep 17 00:00:00 2001 From: Christopher Pitt Date: Tue, 12 May 2015 20:37:51 +1200 Subject: [PATCH 019/110] Clean up GridField --- forms/gridfield/GridField.php | 800 +++++++++++++++++++++------------- 1 file changed, 504 insertions(+), 296 deletions(-) diff --git a/forms/gridfield/GridField.php b/forms/gridfield/GridField.php index c7d5994eb..ae36e19f8 100644 --- a/forms/gridfield/GridField.php +++ b/forms/gridfield/GridField.php @@ -3,12 +3,11 @@ /** * Displays a {@link SS_List} in a grid format. * - * GridField is a field that takes an SS_List and displays it in an table with rows - * and columns. It reminds of the old TableFields but works with SS_List types - * and only loads the necessary rows from the list. + * GridField is a field that takes an SS_List and displays it in an table with rows and columns. + * It reminds of the old TableFields but works with SS_List types and only loads the necessary + * rows from the list. * - * The minimum configuration is to pass in name and title of the field and a - * SS_List. + * The minimum configuration is to pass in name and title of the field and a SS_List. * * * $gridField = new GridField('ExampleGrid', 'Example grid', new DataList('Page')); @@ -20,45 +19,44 @@ * @subpackage fields-gridfield */ class GridField extends FormField { - /** - * * @var array */ private static $allowed_actions = array( 'index', - 'gridFieldAlterAction' + 'gridFieldAlterAction', ); /** - * The datasource + * Data source. * * @var SS_List */ protected $list = null; /** - * The classname of the DataObject that the GridField will display. Defaults to the value of $this->list->dataClass + * Class name of the DataObject that the GridField will display. + * + * Defaults to the value of $this->list->dataClass. * * @var string */ protected $modelClassName = ''; /** - * the current state of the GridField + * Current state of the GridField. * * @var GridState */ protected $state = null; /** - * * @var GridFieldConfig */ protected $config = null; /** - * The components list + * Components list. * * @var array */ @@ -66,14 +64,15 @@ class GridField extends FormField { /** * Internal dispatcher for column handlers. - * Keys are column names and values are GridField_ColumnProvider objects + * + * Keys are column names and values are GridField_ColumnProvider objects. * * @var array */ protected $columnDispatch = null; /** - * Map of callbacks for custom data fields + * Map of callbacks for custom data fields. * * @var array */ @@ -85,8 +84,6 @@ class GridField extends FormField { protected $name = ''; /** - * Creates a new GridField field - * * @param string $name * @param string $title * @param SS_List $dataList @@ -94,13 +91,18 @@ class GridField extends FormField { */ public function __construct($name, $title = null, SS_List $dataList = null, GridFieldConfig $config = null) { parent::__construct($name, $title, null); + $this->name = $name; if($dataList) { $this->setList($dataList); } - $this->setConfig($config ?: GridFieldConfig_Base::create()); + if(!$config) { + $config = GridFieldConfig_Base::create(); + } + + $this->setConfig($config); $this->config->addComponent(new GridState_Component()); $this->state = new GridState($this); @@ -108,44 +110,58 @@ class GridField extends FormField { $this->addExtraClass('ss-gridfield'); } + /** + * @param SS_HTTPRequest $request + * + * @return string + */ public function index($request) { return $this->gridFieldAlterAction(array(), $this->getForm(), $request); } /** - * Set the modelClass (dataobject) that this field will get it column headers from. - * If no $displayFields has been set, the displayfields will be fetched from - * this modelclass $summary_fields + * Set the modelClass (data object) that this field will get it column headers from. + * + * If no $displayFields has been set, the display fields will be $summary_fields. + * + * @see GridFieldDataColumns::getDisplayFields() * * @param string $modelClassName * - * @see GridFieldDataColumns::getDisplayFields() + * @return $this */ public function setModelClass($modelClassName) { $this->modelClassName = $modelClassName; + return $this; } /** - * Returns a dataclass that is a DataObject type that this GridField should look like. + * Returns a data class that is a DataObject type that this GridField should look like. * - * @throws Exception * @return string + * + * @throws LogicException */ public function getModelClass() { - if($this->modelClassName) return $this->modelClassName; - if($this->list && method_exists($this->list, 'dataClass')) { - $class = $this->list->dataClass(); - if($class) return $class; + if($this->modelClassName) { + return $this->modelClassName; } - throw new LogicException('GridField doesn\'t have a modelClassName,' - . ' so it doesn\'t know the columns of this grid.'); + if($this->list && method_exists($this->list, 'dataClass')) { + $class = $this->list->dataClass(); + + if($class) { + return $class; + } + } + + throw new LogicException( + 'GridField doesn\'t have a modelClassName, so it doesn\'t know the columns of this grid.' + ); } /** - * Get the GridFieldConfig - * * @return GridFieldConfig */ public function getConfig() { @@ -155,61 +171,69 @@ class GridField extends FormField { /** * @param GridFieldConfig $config * - * @return GridField + * @return $this */ public function setConfig(GridFieldConfig $config) { $this->config = $config; + return $this; } + /** + * @return ArrayList + */ public function getComponents() { return $this->config->getComponents(); } /** - * Cast a arbitrary value with the help of a castingDefintion - * - * @param $value - * @param $castingDefinition + * Cast an arbitrary value with the help of a $castingDefinition. * * @todo refactor this into GridFieldComponent + * + * @param mixed $value + * @param string|array $castingDefinition + * + * @return mixed */ public function getCastedValue($value, $castingDefinition) { + $castingParams = array(); + if(is_array($castingDefinition)) { $castingParams = $castingDefinition; array_shift($castingParams); $castingDefinition = array_shift($castingDefinition); - } else { - $castingParams = array(); } if(strpos($castingDefinition, '->') === false) { $castingFieldType = $castingDefinition; $castingField = DBField::create_field($castingFieldType, $value); - $value = call_user_func_array(array($castingField, 'XML'), $castingParams); - } else { - $fieldTypeParts = explode('->', $castingDefinition); - $castingFieldType = $fieldTypeParts[0]; - $castingMethod = $fieldTypeParts[1]; - $castingField = DBField::create_field($castingFieldType, $value); - $value = call_user_func_array(array($castingField, $castingMethod), $castingParams); + + return call_user_func_array(array($castingField, 'XML'), $castingParams); } - return $value; + list($castingFieldType, $castingMethod) = explode('->', $castingDefinition); + + $castingField = DBField::create_field($castingFieldType, $value); + + return call_user_func_array(array($castingField, $castingMethod), $castingParams); } /** - * Set the datasource + * Set the data source. * * @param SS_List $list + * + * @return $this */ public function setList(SS_List $list) { $this->list = $list; + return $this; } /** - * Get the datasource + * Get the data source. * * @return SS_List */ @@ -218,26 +242,28 @@ class GridField extends FormField { } /** - * Get the datasource after applying the {@link GridField_DataManipulator}s to it. + * Get the data source after applying every {@link GridField_DataManipulator} to it. * * @return SS_List */ public function getManipulatedList() { $list = $this->getList(); + foreach($this->getComponents() as $item) { if($item instanceof GridField_DataManipulator) { $list = $item->getManipulatedData($this, $list); } } + return $list; } /** - * Get the current GridState_Data or the GridState + * Get the current GridState_Data or the GridState. * - * @param bool $getData - flag for returning the GridState_Data or the GridState + * @param bool $getData * - * @return GridState_data|GridState + * @return GridState_Data|GridState */ public function getState($getData = true) { if($getData) { @@ -248,7 +274,9 @@ class GridField extends FormField { } /** - * Returns the whole gridfield rendered with all the attached components + * Returns the whole gridfield rendered with all the attached components. + * + * @param array $properties * * @return string */ @@ -264,88 +292,115 @@ class GridField extends FormField { Requirements::javascript(THIRDPARTY_DIR . '/jquery-entwine/dist/jquery.entwine-dist.js'); Requirements::javascript(FRAMEWORK_DIR . '/javascript/GridField.js'); - // Get columns $columns = $this->getColumns(); - // Get data $list = $this->getManipulatedList(); - // Render headers, footers, etc $content = array( - "before" => "", - "after" => "", - "header" => "", - "footer" => "", + 'before' => '', + 'after' => '', + 'header' => '', + 'footer' => '', ); foreach($this->getComponents() as $item) { if($item instanceof GridField_HTMLProvider) { $fragments = $item->getHTMLFragments($this); - if($fragments) foreach($fragments as $k => $v) { - $k = strtolower($k); - if(!isset($content[$k])) $content[$k] = ""; - $content[$k] .= $v . "\n"; - } - } - } - foreach($content as $k => $v) { - $content[$k] = trim($v); - } + if($fragments) { + foreach($fragments as $fragmentKey => $fragmentValue) { + $fragmentKey = strtolower($fragmentKey); - // Replace custom fragments and check which fragments are defined - // Nested dependencies are handled by deferring the rendering of any content item that - // Circular dependencies are detected by disallowing any item to be deferred more than 5 times - // It's a fairly crude algorithm but it works - - $fragmentDefined = array('header' => true, 'footer' => true, 'before' => true, 'after' => true); - reset($content); - while(list($k, $v) = each($content)) { - if(preg_match_all('/\$DefineFragment\(([a-z0-9\-_]+)\)/i', $v, $matches)) { - foreach($matches[1] as $match) { - $fragmentName = strtolower($match); - $fragmentDefined[$fragmentName] = true; - $fragment = isset($content[$fragmentName]) ? $content[$fragmentName] : ""; - - // If the fragment still has a fragment definition in it, when we should defer this item until - // later. - if(preg_match('/\$DefineFragment\(([a-z0-9\-_]+)\)/i', $fragment, $matches)) { - // If we've already deferred this fragment, then we have a circular dependency - if(isset($fragmentDeferred[$k]) && $fragmentDeferred[$k] > 5) { - throw new LogicException("GridField HTML fragment '$fragmentName' and '$matches[1]' " . - "appear to have a circular dependency."); + if(!isset($content[$fragmentKey])) { + $content[$fragmentKey] = ''; } - // Otherwise we can push to the end of the content array - unset($content[$k]); - $content[$k] = $v; - if(!isset($fragmentDeferred[$k])) { - $fragmentDeferred[$k] = 1; - } else { - $fragmentDeferred[$k]++; - } - break; - } else { - $content[$k] = preg_replace('/\$DefineFragment\(' . $fragmentName . '\)/i', $fragment, - $content[$k]); + $content[$fragmentKey] .= $fragmentValue . "\n"; } } } } - // Check for any undefined fragments, and if so throw an exception - // While we're at it, trim whitespace off the elements - foreach($content as $k => $v) { - if(empty($fragmentDefined[$k])) { - throw new LogicException("GridField HTML fragment '$k' was given content," - . " but not defined. Perhaps there is a supporting GridField component you need to add?"); + foreach($content as $contentKey => $contentValue) { + $content[$contentKey] = trim($contentValue); + } + + // Replace custom fragments and check which fragments are defined. Circular dependencies + // are detected by disallowing any item to be deferred more than 5 times. + + $fragmentDefined = array( + 'header' => true, + 'footer' => true, + 'before' => true, + 'after' => true, + ); + + reset($content); + + while(list($contentKey, $contentValue) = each($content)) { + if(preg_match_all('/\$DefineFragment\(([a-z0-9\-_]+)\)/i', $contentValue, $matches)) { + foreach($matches[1] as $match) { + $fragmentName = strtolower($match); + $fragmentDefined[$fragmentName] = true; + + $fragment = ''; + + if(isset($content[$fragmentName])) { + $fragment = $content[$fragmentName]; + } + + // If the fragment still has a fragment definition in it, when we should defer + // this item until later. + + if(preg_match('/\$DefineFragment\(([a-z0-9\-_]+)\)/i', $fragment, $matches)) { + if(isset($fragmentDeferred[$contentKey]) && $fragmentDeferred[$contentKey] > 5) { + throw new LogicException(sprintf( + 'GridField HTML fragment "%s" and "%s" appear to have a circular dependency.', + $fragmentName, + $matches[1] + )); + } + + unset($content[$contentKey]); + + $content[$contentKey] = $contentValue; + + if(!isset($fragmentDeferred[$contentKey])) { + $fragmentDeferred[$contentKey] = 0; + } + + $fragmentDeferred[$contentKey]++; + + break; + } else { + $content[$contentKey] = preg_replace( + sprintf('/\$DefineFragment\(%s\)/i', $fragmentName), + $fragment, + $content[$contentKey] + ); + } + } + } + } + + // Check for any undefined fragments, and if so throw an exception. + // While we're at it, trim whitespace off the elements. + + foreach($content as $contentKey => $contentValue) { + if(empty($fragmentDefined[$contentKey])) { + throw new LogicException(sprintf( + 'GridField HTML fragment "%s" was given content, but not defined. Perhaps there is a supporting GridField component you need to add?', + $contentKey + )); } } $total = count($list); + if($total > 0) { $rows = array(); - foreach($list as $idx => $record) { + + foreach($list as $index => $record) { if($record->hasMethod('canView') && !$record->canView()) { continue; } @@ -355,58 +410,80 @@ class GridField extends FormField { foreach($this->getColumns() as $column) { $colContent = $this->getColumnContent($record, $column); - // A return value of null means this columns should be skipped altogether. + // Null means this columns should be skipped altogether. + if($colContent === null) { continue; } $colAttributes = $this->getColumnAttributes($record, $column); - $rowContent .= $this->newCell($total, $idx, $record, $colAttributes, $colContent); + $rowContent .= $this->newCell( + $total, + $index, + $record, + $colAttributes, + $colContent + ); } - $rowAttributes = $this->getRowAttributes($total, $idx, $record); + $rowAttributes = $this->getRowAttributes($total, $index, $record); - $rows[] = $this->newRow($total, $idx, $record, $rowAttributes, $rowContent); + $rows[] = $this->newRow($total, $index, $record, $rowAttributes, $rowContent); } $content['body'] = implode("\n", $rows); } - // Display a message when the grid field is empty - if(!(isset($content['body']) && $content['body'])) { - $content['body'] = FormField::create_tag( - 'tr', - array("class" => 'ss-gridfield-item ss-gridfield-no-items'), - FormField::create_tag( - 'td', - array('colspan' => count($columns)), - _t('GridField.NoItemsFound', 'No items found') - ) + // Display a message when the grid field is empty. + + if(empty($content['body'])) { + $cell = FormField::create_tag( + 'td', + array( + 'colspan' => count($columns), + ), + _t('GridField.NoItemsFound', 'No items found') ); + + $row = FormField::create_tag( + 'tr', + array( + 'class' => 'ss-gridfield-item ss-gridfield-no-items', + ), + $cell + ); + + $content['body'] = $row; } - // Turn into the relevant parts of a table - $head = $content['header'] - ? FormField::create_tag('thead', array(), $content['header']) - : ''; - $body = $content['body'] - ? FormField::create_tag('tbody', array('class' => 'ss-gridfield-items'), $content['body']) - : ''; - $foot = $content['footer'] - ? FormField::create_tag('tfoot', array(), $content['footer']) - : ''; + $header = $this->getOptionalTableHeader($content); + $body = $this->getOptionalTableBody($content); + $footer = $this->getOptionalTableFooter($content); $this->addExtraClass('ss-gridfield field'); - $attrs = array_diff_key( + + $fieldsetAttributes = array_diff_key( $this->getAttributes(), - array('value' => false, 'type' => false, 'name' => false) + array( + 'value' => false, + 'type' => false, + 'name' => false, + ) ); - $attrs['data-name'] = $this->getName(); - $tableAttrs = array( - 'id' => isset($this->id) ? $this->id : null, + + $fieldsetAttributes['data-name'] = $this->getName(); + + $tableId = null; + + if($this->id) { + $tableId = $this->id; + } + + $tableAttributes = array( + 'id' => $tableId, 'class' => 'ss-gridfield-table', 'cellpadding' => '0', - 'cellspacing' => '0' + 'cellspacing' => '0', ); if($this->getDescription()) { @@ -417,12 +494,17 @@ class GridField extends FormField { ); } - return - FormField::create_tag('fieldset', $attrs, - $content['before'] . - FormField::create_tag('table', $tableAttrs, $head . "\n" . $foot . "\n" . $body) . - $content['after'] - ); + $table = FormField::create_tag( + 'table', + $tableAttributes, + $header . "\n" . $footer . "\n" . $body + ); + + return FormField::create_tag( + 'fieldset', + $fieldsetAttributes, + $content['before'] . $table . $content['after'] + ); } /** @@ -494,27 +576,44 @@ class GridField extends FormField { $classes[] = 'last'; } - $classes[] = ($index % 2) ? 'even' : 'odd'; + if($index % 2) { + $classes[] = 'even'; + } else { + $classes[] = 'odd'; + } return $classes; } + /** + * @param array $properties + * + * @return string + */ public function Field($properties = array()) { return $this->FieldHolder($properties); } + /** + * {@inheritdoc} + */ public function getAttributes() { - return array_merge(parent::getAttributes(), array('data-url' => $this->Link())); + return array_merge( + parent::getAttributes(), + array( + 'data-url' => $this->Link(), + ) + ); } /** - * Get the columns of this GridField, they are provided by attached GridField_ColumnProvider + * Get the columns of this GridField, they are provided by attached GridField_ColumnProvider. * * @return array */ public function getColumns() { - // Get column list $columns = array(); + foreach($this->getComponents() as $item) { if($item instanceof GridField_ColumnProvider) { $item->augmentColumns($this, $columns); @@ -525,28 +624,36 @@ class GridField extends FormField { } /** - * Get the value from a column + * Get the value from a column. * * @param DataObject $record * @param string $column * * @return string + * * @throws InvalidArgumentException */ public function getColumnContent($record, $column) { - // Build the column dispatch if(!$this->columnDispatch) { $this->buildColumnDispatch(); } if(!empty($this->columnDispatch[$column])) { - $content = ""; + $content = ''; + foreach($this->columnDispatch[$column] as $handler) { + /** + * @var GridField_ColumnProvider $handler + */ $content .= $handler->getColumnContent($this, $record, $column); } + return $content; } else { - throw new InvalidArgumentException("Bad column '$column'"); + throw new InvalidArgumentException(sprintf( + 'Bad column "%s"', + $column + )); } } @@ -566,111 +673,139 @@ class GridField extends FormField { /** * Get the value of a named field on the given record. - * Use of this method ensures that any special rules around the data for this gridfield are followed. + * + * Use of this method ensures that any special rules around the data for this gridfield are + * followed. + * + * @param DataObject $record + * @param string $fieldName + * + * @return mixed */ public function getDataFieldValue($record, $fieldName) { - // Custom callbacks if(isset($this->customDataFields[$fieldName])) { $callback = $this->customDataFields[$fieldName]; + return $callback($record); } - // Default implementation if($record->hasMethod('relField')) { return $record->relField($fieldName); - } elseif($record->hasMethod($fieldName)) { - return $record->$fieldName(); - } else { - return $record->$fieldName; } + + if($record->hasMethod($fieldName)) { + return $record->$fieldName(); + } + + return $record->$fieldName; } /** - * Get extra columns attributes used as HTML attributes + * Get extra columns attributes used as HTML attributes. * * @param DataObject $record * @param string $column * * @return array + * * @throws LogicException * @throws InvalidArgumentException */ public function getColumnAttributes($record, $column) { - // Build the column dispatch if(!$this->columnDispatch) { $this->buildColumnDispatch(); } if(!empty($this->columnDispatch[$column])) { - $attrs = array(); + $attributes = array(); foreach($this->columnDispatch[$column] as $handler) { - $column_attrs = $handler->getColumnAttributes($this, $record, $column); + /** + * @var GridField_ColumnProvider $handler + */ + $columnAttributes = $handler->getColumnAttributes($this, $record, $column); - if(is_array($column_attrs)) { - $attrs = array_merge($attrs, $column_attrs); - } elseif($column_attrs) { - $methodSignature = get_class($handler) . "::getColumnAttributes()"; - throw new LogicException("Non-array response from $methodSignature."); + if(is_array($columnAttributes)) { + $attributes = array_merge($attributes, $columnAttributes); + continue; } + + throw new LogicException(sprintf( + 'Non-array response from %s::getColumnAttributes().', + get_class($handler) + )); } - return $attrs; - } else { - throw new InvalidArgumentException("Bad column '$column'"); + return $attributes; } + + throw new InvalidArgumentException(sprintf( + 'Bad column "%s"', + $column + )); } /** - * Get metadata for a column, example array('Title'=>'Email address') + * Get metadata for a column. + * + * @example "array('Title'=>'Email address')" * * @param string $column * * @return array + * * @throws LogicException * @throws InvalidArgumentException */ public function getColumnMetadata($column) { - // Build the column dispatch if(!$this->columnDispatch) { $this->buildColumnDispatch(); } if(!empty($this->columnDispatch[$column])) { - $metadata = array(); + $metaData = array(); foreach($this->columnDispatch[$column] as $handler) { - $column_metadata = $handler->getColumnMetadata($this, $column); + /** + * @var GridField_ColumnProvider $handler + */ + $columnMetaData = $handler->getColumnMetadata($this, $column); - if(is_array($column_metadata)) { - $metadata = array_merge($metadata, $column_metadata); - } else { - $methodSignature = get_class($handler) . "::getColumnMetadata()"; - throw new LogicException("Non-array response from $methodSignature."); + if(is_array($columnMetaData)) { + $metaData = array_merge($metaData, $columnMetaData); + continue; } + throw new LogicException(sprintf( + 'Non-array response from %s::getColumnMetadata().', + get_class($handler) + )); } - return $metadata; + return $metaData; } - throw new InvalidArgumentException("Bad column '$column'"); + + throw new InvalidArgumentException(sprintf( + 'Bad column "%s"', + $column + )); } /** - * Return how many columns the grid will have + * Return how many columns the grid will have. * * @return int */ public function getColumnCount() { - // Build the column dispatch - if(!$this->columnDispatch) $this->buildColumnDispatch(); + if(!$this->columnDispatch) { + $this->buildColumnDispatch(); + } + return count($this->columnDispatch); } /** - * Build an columnDispatch that maps a GridField_ColumnProvider to a column - * for reference later - * + * Build an columnDispatch that maps a GridField_ColumnProvider to a column for reference later. */ protected function buildColumnDispatch() { $this->columnDispatch = array(); @@ -690,140 +825,172 @@ class GridField extends FormField { * This is the action that gets executed when a GridField_AlterAction gets clicked. * * @param array $data + * @param Form $form + * @param SS_HTTPRequest $request * * @return string */ public function gridFieldAlterAction($data, $form, SS_HTTPRequest $request) { - $html = ''; $data = $request->requestVars(); $name = $this->getName(); - $fieldData = isset($data[$name]) ? $data[$name] : null; - // Update state from client + $fieldData = null; + + if(isset($data[$name])) { + $fieldData = $data[$name]; + } + $state = $this->getState(false); if(isset($fieldData['GridState'])) { $state->setValue($fieldData['GridState']); } - // Try to execute alter action - foreach($data as $k => $v) { - if(preg_match('/^action_gridFieldAlterAction\?StateID=(.*)/', $k, $matches)) { - $id = $matches[1]; - $stateChange = Session::get($id); - + foreach($data as $dataKey => $dataValue) { + if(preg_match('/^action_gridFieldAlterAction\?StateID=(.*)/', $dataKey, $matches)) { + $stateChange = Session::get($matches[1]); $actionName = $stateChange['actionName']; - $args = isset($stateChange['args']) ? $stateChange['args'] : array(); - $html = $this->handleAlterAction($actionName, $args, $data); - // A field can optionally return its own HTML - if($html) return $html; + $arguments = array(); + + if(isset($stateChange['args'])) { + $arguments = $stateChange['args']; + }; + + $html = $this->handleAlterAction($actionName, $arguments, $data); + + if($html) { + return $html; + } } } - switch($request->getHeader('X-Pjax')) { - case 'CurrentField': - return $this->FieldHolder(); - break; - - case 'CurrentForm': - return $form->forTemplate(); - break; - - default: - return $form->forTemplate(); - break; + if($request->getHeader('X-Pjax') === 'CurrentField') { + return $this->FieldHolder(); } + + return $form->forTemplate(); } /** - * Pass an action on the first GridField_ActionProvider that matches the $actionName + * Pass an action on the first GridField_ActionProvider that matches the $actionName. * * @param string $actionName - * @param mixed $args - * @param array $data - send data from a form + * @param mixed $arguments + * @param array $data + * + * @return mixed * - * @return type * @throws InvalidArgumentException */ - public function handleAlterAction($actionName, $args, $data) { + public function handleAlterAction($actionName, $arguments, $data) { $actionName = strtolower($actionName); - foreach($this->getComponents() as $component) { - if(!($component instanceof GridField_ActionProvider)) { - continue; - } - if(in_array($actionName, array_map('strtolower', (array) $component->getActions($this)))) { - return $component->handleAction($this, $actionName, $args, $data); + foreach($this->getComponents() as $component) { + if($component instanceof GridField_ActionProvider) { + $actions = array_map('strtolower', (array) $component->getActions($this)); + + if(in_array($actionName, $actions)) { + return $component->handleAction($this, $actionName, $arguments, $data); + } } } - throw new InvalidArgumentException("Can't handle action '$actionName'"); + + throw new InvalidArgumentException(sprintf( + 'Can\'t handle action "%s"', + $actionName + )); } /** - * Custom request handler that will check component handlers before proceeding to the default implementation. + * Custom request handler that will check component handlers before proceeding to the default + * implementation. * - * @todo There is too much code copied from RequestHandler here. + * @todo copy less code from RequestHandler. + * + * @param SS_HTTPRequest $request + * @param DataModel $model + * + * @return array|RequestHandler|SS_HTTPResponse|string|void + * + * @throws SS_HTTPResponse_Exception */ public function handleRequest(SS_HTTPRequest $request, DataModel $model) { if($this->brokenOnConstruct) { - user_error("parent::__construct() needs to be called on {$handlerClass}::__construct()", E_USER_WARNING); + user_error( + sprintf( + "parent::__construct() needs to be called on %s::__construct()", + __CLASS__ + ), + E_USER_WARNING + ); } $this->request = $request; $this->setDataModel($model); $fieldData = $this->request->requestVar($this->getName()); - if($fieldData && isset($fieldData['GridState'])) $this->getState(false)->setValue($fieldData['GridState']); + + if($fieldData && isset($fieldData['GridState'])) { + $this->getState(false)->setValue($fieldData['GridState']); + } foreach($this->getComponents() as $component) { - if(!($component instanceof GridField_URLHandler)) { - continue; - } + if($component instanceof GridField_URLHandler && $urlHandlers = $component->getURLHandlers($this)) { + foreach($urlHandlers as $rule => $action) { + if($params = $request->match($rule, true)) { + // Actions can reference URL parameters. + // e.g. '$Action/$ID/$OtherID' → '$Action' - $urlHandlers = $component->getURLHandlers($this); - - if($urlHandlers) foreach($urlHandlers as $rule => $action) { - if($params = $request->match($rule, true)) { - // Actions can reference URL parameters, eg, '$Action/$ID/$OtherID' => '$Action', - if($action[0] == '$') $action = $params[substr($action, 1)]; - if(!method_exists($component, 'checkAccessAction') || $component->checkAccessAction($action)) { - if(!$action) { - $action = "index"; - } else if(!is_string($action)) { - throw new LogicException("Non-string method name: " . var_export($action, true)); + if($action[0] == '$') { + $action = $params[substr($action, 1)]; } - try { - $result = $component->$action($this, $request); - } catch(SS_HTTPResponse_Exception $responseException) { - $result = $responseException->getResponse(); - } - - if($result instanceof SS_HTTPResponse && $result->isError()) { - return $result; - } - - if($this !== $result && !$request->isEmptyPattern($rule) && is_object($result) - && $result instanceof RequestHandler - ) { - - $returnValue = $result->handleRequest($request, $model); - - if(is_array($returnValue)) { - throw new LogicException("GridField_URLHandler handlers can't return arrays"); + if(!method_exists($component, 'checkAccessAction') || $component->checkAccessAction($action)) { + if(!$action) { + $action = "index"; } - return $returnValue; + if(!is_string($action)) { + throw new LogicException(sprintf( + 'Non-string method name: %s', + var_export($action, true) + )); + } - // If we return some other data, and all the URL is parsed, then return that - } else if($request->allParsed()) { - return $result; + try { + $result = $component->$action($this, $request); + } catch(SS_HTTPResponse_Exception $responseException) { + $result = $responseException->getResponse(); + } - // But if we have more content on the URL and we don't know what to do with it, return an error - } else { - return $this->httpError(404, - "I can't handle sub-URLs of a " . get_class($result) . " object."); + if($result instanceof SS_HTTPResponse && $result->isError()) { + return $result; + } + + if($this !== $result && !$request->isEmptyPattern($rule) && is_object($result) && $result instanceof RequestHandler) { + $returnValue = $result->handleRequest($request, $model); + + if(is_array($returnValue)) { + throw new LogicException( + 'GridField_URLHandler handlers can\'t return arrays' + ); + } + + return $returnValue; + } + + if($request->allParsed()) { + return $result; + } + + return $this->httpError( + 404, + sprintf( + 'I can\'t handle sub-URLs of a %s object.', + get_class($result) + ) + ); } } } @@ -833,6 +1000,9 @@ class GridField extends FormField { return parent::handleRequest($request, $model); } + /** + * {@inheritdoc} + */ public function saveInto(DataObjectInterface $record) { foreach($this->getComponents() as $component) { if($component instanceof GridField_SaveHandler) { @@ -841,18 +1011,61 @@ class GridField extends FormField { } } + /** + * @param array $content + * + * @return string + */ + protected function getOptionalTableHeader(array $content) { + if($content['header']) { + return FormField::create_tag( + 'thead', array(), $content['header'] + ); + } + + return ''; + } + + /** + * @param array $content + * + * @return string + */ + protected function getOptionalTableBody(array $content) { + if($content['body']) { + return FormField::create_tag( + 'tbody', array('class' => 'ss-gridfield-items'), $content['body'] + ); + } + + return ''; + } + + /** + * @param $content + * + * @return string + */ + protected function getOptionalTableFooter($content) { + if($content['footer']) { + return FormField::create_tag( + 'tfoot', array(), $content['footer'] + ); + } + + return ''; + } + } - /** - * This class is the base class when you want to have an action that alters - * the state of the {@link GridField}, rendered as a button element. + * This class is the base class when you want to have an action that alters the state of the + * {@link GridField}, rendered as a button element. * - * @package forms + * @package forms * @subpackage fields-gridfield */ class GridField_FormAction extends FormAction { - /** * @var GridField */ @@ -880,10 +1093,10 @@ class GridField_FormAction extends FormAction { /** * @param GridField $gridField - * @param type $name - * @param type $label - * @param type $actionName - * @param type $args + * @param string $name + * @param string $title + * @param string $actionName + * @param array $args */ public function __construct(GridField $gridField, $name, $title, $actionName, $args) { $this->gridField = $gridField; @@ -894,19 +1107,20 @@ class GridField_FormAction extends FormAction { } /** - * urlencode encodes less characters in percent form than we need - we - * need everything that isn't a \w. + * Encode all non-word characters. * - * @param string $val + * @param string $value + * + * @return string */ - public function nameEncode($val) { - return preg_replace_callback('/[^\w]/', array($this, '_nameEncode'), $val); + public function nameEncode($value) { + return (string) preg_replace_callback('/[^\w]/', array($this, '_nameEncode'), $value); } /** - * The callback for nameEncode + * @param array $match * - * @param string $val + * @return string */ public function _nameEncode($match) { return '%' . dechex(ord($match[0])); @@ -916,14 +1130,12 @@ class GridField_FormAction extends FormAction { * @return array */ public function getAttributes() { - // Store state in session, and pass ID to client side. $state = array( 'grid' => $this->getNameFromParent(), 'actionName' => $this->actionName, 'args' => $this->args, ); - // Ensure $id doesn't contain only numeric characters $id = 'gf_' . substr(md5(serialize($state)), 0, 8); Session::set($id, $state); $actionData['StateID'] = $id; @@ -931,18 +1143,14 @@ class GridField_FormAction extends FormAction { return array_merge( parent::getAttributes(), array( - // Note: This field needs to be less than 65 chars, otherwise Suhosin security patch - // will strip it from the requests - 'name' => 'action_gridFieldAlterAction' . '?' . http_build_query($actionData), + 'name' => 'action_gridFieldAlterAction?' . http_build_query($actionData), 'data-url' => $this->gridField->Link(), ) ); } /** - * Calculate the name of the gridfield relative to the Form - * - * @param GridField $base + * Calculate the name of the gridfield relative to the form. * * @return string */ From 5fcebbef02b3626a7e7c5c4b80be37eed47ca365 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Thu, 18 Jun 2015 11:27:05 +1200 Subject: [PATCH 020/110] Alias 3 as 3.3 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 2ee37993e..86f81433e 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ }, "extra": { "branch-alias": { - "3.x-dev": "3.2.x-dev" + "3.x-dev": "3.3.x-dev" } }, "autoload": { From 070ae2555b4b6beddec71cd2b9e54057a03e872d Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Thu, 18 Jun 2015 11:43:09 +1200 Subject: [PATCH 021/110] Remove redundant alias --- composer.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/composer.json b/composer.json index 2ee37993e..710affb3c 100644 --- a/composer.json +++ b/composer.json @@ -22,11 +22,6 @@ "require-dev": { "phpunit/PHPUnit": "~3.7@stable" }, - "extra": { - "branch-alias": { - "3.x-dev": "3.2.x-dev" - } - }, "autoload": { "classmap": ["tests/behat/features/bootstrap"] }, From 54b0b1fd4e5ffedf87e1767b2f5572e48d88580c Mon Sep 17 00:00:00 2001 From: David Alexander Date: Thu, 18 Jun 2015 17:26:58 +1200 Subject: [PATCH 022/110] Update 02_Release_Process.md Typos. Spelling. 404 errors for framework and cms milestones links to github(line 13). --- docs/en/05_Contributing/02_Release_Process.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/en/05_Contributing/02_Release_Process.md b/docs/en/05_Contributing/02_Release_Process.md index 74f0805cd..9800a63e9 100644 --- a/docs/en/05_Contributing/02_Release_Process.md +++ b/docs/en/05_Contributing/02_Release_Process.md @@ -2,7 +2,7 @@ summary: Describes the process followed for "core" releases. # Release Process -Describes the process followed for "core" releases (mainly the `framework` and `cms` modules). +This page describes the process followed for "core" releases (mainly the `framework` and `cms` modules). ## Release Maintainer @@ -19,13 +19,13 @@ Release dates are usually not published prior to the release, but you can get a reviewing the release milestone on github.com. Releases will be announced on the [release announcements mailing list](http://groups.google.com/group/silverstripe-announce). -Releases of the *cms* and *framework* modules are coupled at the moment, they follow the same numbering scheme. +Releases of the *cms* and *framework* modules are coupled at the moment, and they follow the same numbering scheme. ## Release Numbering SilverStripe follows [Semantic Versioning](http://semver.org). -Note: Until November 2014, the project didn't adhere to Semantic Versioning. Instead. a "minor release" in semver terminology +Note: Until November 2014, the project didn't adhere to Semantic Versioning. Instead, a "minor release" in semver terminology was treated as a "major release" in SilverStripe. For example, the *3.1.0* release contained API breaking changes, and the *3.1.1* release contained new features rather than just bugfixes. @@ -43,7 +43,7 @@ patch release ## Deprecation Needs of developers (both on core framework and custom projects) can outgrow the capabilities -of a certain API. Existing APIs might turn out to be hard to understand, maintain, test or stabilize. +of a certain API. Existing APIs might turn out to be hard to understand, maintain, test or stabilise. In these cases, it is best practice to "refactor" these APIs into something more useful. SilverStripe acknowledges that developers have built a lot of code on top of existing APIs, so we strive for giving ample warning on any upcoming changes through a "deprecation cycle". @@ -53,14 +53,14 @@ How to deprecate an API: * Add a `@deprecated` item to the docblock tag, with a `{@link }` item pointing to the new API to use. * Update the deprecated code to throw a `[api:Deprecation::notice()]` error. * Both the docblock and error message should contain the **target version** where the functionality is removed. - So if you're committing the change to a *3.1* minor release, the target version will be *4.0*. + So, if you're committing the change to a *3.1* minor release, the target version will be *4.0*. * Deprecations should not be committed to patch releases -* Deprecations should just be committed to pre-release branches, ideally before they enter the "beta" phase. +* Deprecations should only be committed to pre-release branches, ideally before they enter the "beta" phase. If deprecations are introduced after this point, their target version needs to be increased by one. * Make sure that the old deprecated function works by calling the new function - don't have duplicated code! * The commit message should contain an `API` prefix (see ["commit message format"](code#commit-messages)) * Document the change in the [changelog](/changelogs) for the next release -* Deprecated APIs can be removed after developers had a chance to react to the changes. As a rule of thumb, leave the +* Deprecated APIs can be removed after developers have had a chance to react to the changes. As a rule of thumb, leave the code with the deprecation warning in for at least three micro releases. Only remove code in a minor or major release. * Exceptions to the deprecation cycle are APIs that have been moved into their own module, and continue to work with the new minor release. These changes can be performed in a single minor release without a deprecation period. @@ -77,8 +77,8 @@ Here's an example for replacing `Director::isDev()` with a (theoretical) `Env::i return Env::is_dev(); } -This change could be committed to a minor release like *3.2.0*, and stays deprecated in all following minor releases -(e.g. *3.3.0*, *3.4.0*), until a new major release (e.g. *4.0.0*) where it gets removed from the codebase. +This change could be committed to a minor release like *3.2.0*, and remains deprecated in all subsequent minor releases +(e.g. *3.3.0*, *3.4.0*), until a new major release (e.g. *4.0.0*), at which point it gets removed from the codebase. ## Security Releases @@ -99,7 +99,7 @@ previous major release (if applicable). [new release](http://silverstripe.org/security-releases/) publically. You can help us determine the problem and speed up responses by providing us with more information on how to reproduce -the issue: SilverStripe version (incl. any installed modules), PHP/webserver version and configuration, anonymized +the issue: SilverStripe version (incl. any installed modules), PHP/webserver version and configuration, anonymised webserver access logs (if a hack is suspected), any other services and web packages running on the same server. ### Severity rating @@ -109,7 +109,7 @@ each vulnerability. The rating indicates how important an update is: | Severity | Description | |---------------|-------------| -| **Critical** | Critical releases require immediate actions. Such vulnerabilities allow attackers to take control of your site and you should upgrade on the day of release. *Example: Directory traversal, privilege escalation* | +| **Critical** | Critical releases require immediate action. Such vulnerabilities allow attackers to take control of your site and you should upgrade on the day of release. *Example: Directory traversal, privilege escalation* | | **Important** | Important releases should be evaluated immediately. These issues allow an attacker to compromise a site's data and should be fixed within days. *Example: SQL injection.* | | **Moderate** | Releases of moderate severity should be applied as soon as possible. They allow the unauthorized editing or creation of content. *Examples: Cross Site Scripting (XSS) in template helpers.* | -| **Low** | Low risk releases fix information disclosure and read-only privilege escalation vulnerabilities. These updates should also be applied as soon as possible, but with an impact-dependent priority. *Example: Exposure of the core version number, Cross Site Scripting (XSS) limited to the admin interface.* | +| **Low** | Low risk releases fix information disclosure and read-only privilege escalation vulnerabilities. These updates should also be applied as soon as possible, but according to an impact-dependent priority. *Example: Exposure of the core version number, Cross Site Scripting (XSS) limited to the admin interface.* | From 08d8865704016160eaa3412180e0c9ed8b46b5ac Mon Sep 17 00:00:00 2001 From: David Alexander Date: Thu, 18 Jun 2015 17:42:55 +1200 Subject: [PATCH 023/110] Update 03_Documentation.md Typos. --- docs/en/05_Contributing/03_Documentation.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/en/05_Contributing/03_Documentation.md b/docs/en/05_Contributing/03_Documentation.md index d920a3677..0006befb9 100644 --- a/docs/en/05_Contributing/03_Documentation.md +++ b/docs/en/05_Contributing/03_Documentation.md @@ -16,8 +16,7 @@ page you want to edit. Alternatively, locate the appropriate .md file in the * After editing the documentation, describe your changes in the "commit summary" and "extended description" fields below then press "Commit Changes". - * After that you will see a form to submit a Pull Request: "[pull requests](http://help.github.com/pull-requests/)". You should be able to adjust the version your - * documentation changes are for and then submit the form. Your changes will be sent to the core committers for approval. + * After that you will see a form to submit a Pull Request: "[pull requests](http://help.github.com/pull-requests/)". You should be able to adjust the version your documentation changes apply to and then submit the form. Your changes will be sent to the core committers for approval.
You should make your changes in the lowest branch they apply to. For instance, if you fix a spelling issue that you found in the 3.1 documentation, submit your fix to that branch in Github and it'll be copied to the master (3.2) version of the documentation automatically. *Don't submit multiple pull requests*. @@ -57,7 +56,7 @@ for documenting open source software. * Use PHPDoc in source code: Leave low level technical documentation to code comments within PHP, in [PHPDoc](http://en.wikipedia.org/wiki/PHPDoc) format. * API and developer guides are two forms of source code documentation that complement each other. * API documentation should provide context, ie, the "bigger picture", by referring to developer guides inside your PHPDoc. -* Make your documentation easy to find: Documentation lives by interlinking content so please make sure your contribution doesn't become an inaccessible island. At the very least, put a link to your should on the index page in the same folder. A link to your page can also appear +* Make your documentation easy to find: Documentation is useful only when it is interlinked so please make sure your contribution doesn't become an inaccessible island. At the very least, put a link to your index page in the same folder. A link to your page can also appear as "related content" on other resource (e.g. `/tutorials/site_search` might link to `/developer_guides/forms/introduction`). ## Writing style @@ -85,7 +84,7 @@ sparingly. "Tip box": A tip box is great for adding, deepening or accenting information in the main text. They can be used for background knowledge, or to provide links to further information (ie, a "see also" link).
-Code: +Code for a Tip box:
... @@ -95,7 +94,7 @@ Code: "Notification box": A notification box is good for technical notifications relating to the main text. For example, notifying users about a deprecated feature.
-Code: +Code for a Notification box:
... @@ -105,7 +104,7 @@ Code: "Warning box": A warning box is useful for highlighting a severe bug or a technical issue requiring a user's attention. For example, suppose a rare edge case sometimes leads to a variable being overwritten incorrectly. A warning box can be used to alert the user to this case so they can write their own code to handle it.
-Code: +Code for a Warning box:
... From dfc1c8df3452f4474d649cb36d03954c3d2d3a85 Mon Sep 17 00:00:00 2001 From: David Alexander Date: Thu, 18 Jun 2015 17:50:29 +1200 Subject: [PATCH 024/110] Update 05_Translation_Process.md Typos. --- .../05_Contributing/05_Translation_Process.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/en/05_Contributing/05_Translation_Process.md b/docs/en/05_Contributing/05_Translation_Process.md index bd79f05fd..713d8f797 100644 --- a/docs/en/05_Contributing/05_Translation_Process.md +++ b/docs/en/05_Contributing/05_Translation_Process.md @@ -1,12 +1,12 @@ -title: Implement Internationalization -summary: Implement SilverStripe's internationalization system in your own modules. +title: Implement Internationalisation +summary: Implement SilverStripe's internationalisation system in your own modules. -# Implementing Internationalization +# Implementing Internationalisation -To find out about how to assist with translating SilverStripe from a users point of view, see the +To find out about how to assist with translating SilverStripe from a user's point of view, see the [Contributing Translations page](/contributing/translations). -## Set up your own module for localization +## Set up your own module for localisation ### Collecting translatable text @@ -33,7 +33,7 @@ source_lang = en type = YML ``` -If you don't have existing translations, your project is ready to go - simply point translators to the URL, have them +If you don't have existing translations to import, your project is ready to go - simply point translators to the URL, have them sign up, and they can create languages and translations as required. ### Import existing translations @@ -57,7 +57,7 @@ assumes you're adhering to the following guidelines: - Run the `i18nTextCollectorTask` with the `merge=true` option to avoid deleting unused entities (which might still be relevant in older release branches) -### Converting your language files from 2.4 PHP format +### Converting your language files from 2.4 PHP format to YML The conversion from PHP format to YML is taken care of by a module called [i18n_yml_converter](https://github.com/chillu/i18n_yml_converter). @@ -116,7 +116,7 @@ First of all, you need to create those source files in JSON, and store them in ` source_lang = en type = KEYVALUEJSON -Now you can upload the source files via a normal `tx push`. Once translations come in, you need to convert the source +Then you can upload the source files via a normal `tx push`. Once translations come in, you need to convert the source files back into the JS files SilverStripe can actually read. This requires an installation of our [buildtools](https://github.com/silverstripe/silverstripe-buildtools). @@ -130,4 +130,4 @@ files back into the JS files SilverStripe can actually read. This requires an in * [i18n](/developer_guides/i18n/): Developer-level documentation of Silverstripe's i18n capabilities * [Contributing Translations](/contributing/translations): Information for translators looking to contribute translations of the SilverStripe UI. * [translatable](https://github.com/silverstripe/silverstripe-translatable): DataObject-interface powering the website-content translations - * ["Translatable ModelAdmin" module](http://silverstripe.org/translatablemodeladmin-module/): An extension which allows translations of DataObjects inside ModelAdmin \ No newline at end of file + * ["Translatable ModelAdmin" module](http://silverstripe.org/translatablemodeladmin-module/): An extension which allows translations of DataObjects inside ModelAdmin From 0b7f24537fcdad659cfed4b588a5c6a4ed185f69 Mon Sep 17 00:00:00 2001 From: David Alexander Date: Thu, 18 Jun 2015 19:40:04 +1200 Subject: [PATCH 025/110] Update index.md Rewording. --- docs/en/04_Changelogs/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/04_Changelogs/index.md b/docs/en/04_Changelogs/index.md index 5196e6983..39f4fa3e2 100644 --- a/docs/en/04_Changelogs/index.md +++ b/docs/en/04_Changelogs/index.md @@ -1,11 +1,11 @@ title: Changelogs introduction: Key information on new features and improvements in each version. -Keep up to date with new releases subscribe to the [SilverStripe Release Announcements](https://groups.google.com/group/silverstripe-announce) group, +Keep up to date with new releases by subscribing to the [SilverStripe Release Announcements](https://groups.google.com/group/silverstripe-announce) group, or read our [blog posts about releases](http://silverstripe.org/blog/tag/release). We also keep an overview of [security-related releases](http://silverstripe.org/security-releases/). For information on how to upgrade to newer versions consult the [upgrading](/upgrading) guide. -[CHILDREN] \ No newline at end of file +[CHILDREN] From a4ec9b5d4fde43ad03e6e14c5523696cd4653896 Mon Sep 17 00:00:00 2001 From: David Alexander Date: Thu, 18 Jun 2015 20:04:07 +1200 Subject: [PATCH 026/110] Update 00_Issues_and_Bugs.md Corrected Documentation mailing list link. --- docs/en/05_Contributing/00_Issues_and_Bugs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/05_Contributing/00_Issues_and_Bugs.md b/docs/en/05_Contributing/00_Issues_and_Bugs.md index a5d45cdf9..08fb127b4 100644 --- a/docs/en/05_Contributing/00_Issues_and_Bugs.md +++ b/docs/en/05_Contributing/00_Issues_and_Bugs.md @@ -62,4 +62,4 @@ read our guide on [how to write secure code](/developer_guides/security/secure_c * [silverstripe.org/forums](http://www.silverstripe.org/community/forums/): Forums on silverstripe.org * [silverstripe-dev](http://groups.google.com/group/silverstripe-dev/): Core development mailinglist -* [silverstripe-documentation](http://groups.google.com/group/silverstripe-translators/): Translation team mailing list +* [silverstripe-documentation](http://groups.google.com/group/silverstripe-documentation/): Documentation mailing list From 66b1dd9154be353e47699823039f93bf37952767 Mon Sep 17 00:00:00 2001 From: Gregory Smirnov Date: Thu, 18 Jun 2015 18:28:21 +0200 Subject: [PATCH 027/110] Issue 4305: fixed DatetimeField::setName() --- forms/DatetimeField.php | 10 +++++++++- tests/forms/DatetimeFieldTest.php | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/forms/DatetimeField.php b/forms/DatetimeField.php index 20b84eb79..347795a42 100644 --- a/forms/DatetimeField.php +++ b/forms/DatetimeField.php @@ -63,7 +63,7 @@ class DatetimeField extends FormField { ->addExtraClass('fieldgroup-field'); $this->timeField = TimeField::create($name . '[time]', false) ->addExtraClass('fieldgroup-field'); - $this->timezoneField = new HiddenField($this->getName() . '[timezone]'); + $this->timezoneField = new HiddenField($name . '[timezone]'); parent::__construct($name, $title, $value); } @@ -77,6 +77,14 @@ class DatetimeField extends FormField { return $this; } + + public function setName($name) { + parent::setName($name); + + $this->dateField->setName($name . '[date]'); + $this->timeField->setName($name . '[time]'); + $this->timezoneField->setName($name . '[timezone]'); + } public function FieldHolder($properties = array()) { $config = array( diff --git a/tests/forms/DatetimeFieldTest.php b/tests/forms/DatetimeFieldTest.php index 7802bf444..d21dba211 100644 --- a/tests/forms/DatetimeFieldTest.php +++ b/tests/forms/DatetimeFieldTest.php @@ -214,6 +214,24 @@ class DatetimeFieldTest extends SapphireTest { ); } + public function testGetName() { + $field = new DatetimeField('Datetime'); + + $this->assertEquals('Datetime', $field->getName()); + $this->assertEquals('Datetime[date]', $field->getDateField()->getName()); + $this->assertEquals('Datetime[time]', $field->getTimeField()->getName()); + $this->assertEquals('Datetime[timezone]', $field->getTimezoneField()->getName()); + } + + public function testSetName() { + $field = new DatetimeField('Datetime', 'Datetime'); + $field->setName('CustomDatetime'); + $this->assertEquals('CustomDatetime', $field->getName()); + $this->assertEquals('CustomDatetime[date]', $field->getDateField()->getName()); + $this->assertEquals('CustomDatetime[time]', $field->getTimeField()->getName()); + $this->assertEquals('CustomDatetime[timezone]', $field->getTimezoneField()->getName()); + } + protected function getMockForm() { return new Form( new Controller(), From 5b22e3afc513422d282c69113755d27bcc51c370 Mon Sep 17 00:00:00 2001 From: Gregory Smirnov Date: Thu, 18 Jun 2015 18:53:44 +0200 Subject: [PATCH 028/110] Test TimeField value at 12:00 am --- tests/forms/TimeFieldTest.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/forms/TimeFieldTest.php b/tests/forms/TimeFieldTest.php index 6bd2b1861..6fe52b93a 100644 --- a/tests/forms/TimeFieldTest.php +++ b/tests/forms/TimeFieldTest.php @@ -91,6 +91,14 @@ class TimeFieldTest extends SapphireTest { $f = new TimeField('Time', 'Time'); $f->setValue('23:59:38'); $this->assertEquals($f->dataValue(), '23:59:38'); + + $f = new TimeField('Time', 'Time'); + $f->setValue('12:00 am'); + $this->assertEquals($f->dataValue(), '00:00:00'); + + $f = new TimeField('Time', 'Time'); + $f->setValue('12:00:01 am'); + $this->assertEquals($f->dataValue(), '00:00:01'); } public function testOverrideWithNull() { From f6d60ca946ecfba7712fb9bc88f1d12361d572e7 Mon Sep 17 00:00:00 2001 From: David Alexander Date: Fri, 19 Jun 2015 07:51:16 +1200 Subject: [PATCH 029/110] Update 02_Release_Process.md Updated: deprecated API's removed only in MAJOR releases. --- docs/en/05_Contributing/02_Release_Process.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/en/05_Contributing/02_Release_Process.md b/docs/en/05_Contributing/02_Release_Process.md index 9800a63e9..92b3b19e1 100644 --- a/docs/en/05_Contributing/02_Release_Process.md +++ b/docs/en/05_Contributing/02_Release_Process.md @@ -60,10 +60,8 @@ How to deprecate an API: * Make sure that the old deprecated function works by calling the new function - don't have duplicated code! * The commit message should contain an `API` prefix (see ["commit message format"](code#commit-messages)) * Document the change in the [changelog](/changelogs) for the next release -* Deprecated APIs can be removed after developers have had a chance to react to the changes. As a rule of thumb, leave the -code with the deprecation warning in for at least three micro releases. Only remove code in a minor or major release. -* Exceptions to the deprecation cycle are APIs that have been moved into their own module, and continue to work with the -new minor release. These changes can be performed in a single minor release without a deprecation period. +* Deprecated APIs can be removed only after developers have had sufficient time to react to the changes. Hence, deprecated APIs should be removed in MAJOR releases only. Between MAJOR releases, leave the code in place with a deprecation warning. +* Exceptions to the deprecation cycle are APIs that have been moved into their own module, and continue to work with the new minor release. These changes can be performed in a single minor release without a deprecation period. Here's an example for replacing `Director::isDev()` with a (theoretical) `Env::is_dev()`: From e14f743bf031bda2022cd12e37d26f420ce7c403 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Fri, 19 Jun 2015 11:59:27 +1200 Subject: [PATCH 030/110] Set deprecation level for all changes in 3.x to 4.0 --- admin/code/LeftAndMain.php | 18 ++- admin/code/ModelAdmin.php | 8 +- admin/code/SecurityAdmin.php | 16 +-- api/RestfulService.php | 20 ++-- control/ContentNegotiator.php | 16 +-- control/Director.php | 16 +-- control/HTTP.php | 2 +- control/Session.php | 43 +++---- control/injector/Injector.php | 4 +- core/Config.php | 4 +- core/Object.php | 2 +- core/manifest/ConfigStaticManifest.php | 2 +- dev/LogEmailWriter.php | 8 +- dev/SapphireTest.php | 11 +- email/Email.php | 31 ++--- email/Mailer.php | 8 +- filesystem/GD.php | 8 +- filesystem/ImagickBackend.php | 4 +- forms/DateField.php | 4 +- forms/FormAction.php | 2 +- forms/FormField.php | 6 +- forms/HtmlEditorField.php | 2 +- forms/RequiredFields.php | 5 +- i18n/i18n.php | 25 ++-- model/DB.php | 68 +++++------ model/DatabaseAdmin.php | 4 +- model/Image.php | 4 +- model/connect/Database.php | 132 ++++++++++----------- model/fieldtypes/Currency.php | 4 +- model/queries/SQLConditionalExpression.php | 2 +- model/queries/SQLExpression.php | 8 +- parsers/BBCodeParser.php | 24 ++-- security/Member.php | 24 ++-- security/Permission.php | 12 +- security/Security.php | 48 ++++---- tests/email/EmailTest.php | 4 +- tests/model/DataQueryTest.php | 14 +-- tests/model/ManyManyListTest.php | 4 +- view/SSViewer.php | 31 ++--- 39 files changed, 336 insertions(+), 312 deletions(-) diff --git a/admin/code/LeftAndMain.php b/admin/code/LeftAndMain.php index 8a01de9ad..7b69df5f4 100644 --- a/admin/code/LeftAndMain.php +++ b/admin/code/LeftAndMain.php @@ -1622,11 +1622,13 @@ class LeftAndMain extends Controller implements PermissionProvider { /** * Sets the href for the anchor on the Silverstripe logo in the menu + * + * @deprecated since version 4.0 * * @param String $link */ public static function set_application_link($link) { - Deprecation::notice('3.2', 'Use the "LeftAndMain.application_link" config setting instead'); + Deprecation::notice('4.0', 'Use the "LeftAndMain.application_link" config setting instead'); Config::inst()->update('LeftAndMain', 'application_link', $link); } @@ -1648,9 +1650,10 @@ class LeftAndMain extends Controller implements PermissionProvider { /** * @param String $name + * @deprecated since version 4.0 */ public static function setApplicationName($name) { - Deprecation::notice('3.2', 'Use the "LeftAndMain.application_name" config setting instead'); + Deprecation::notice('4.0', 'Use the "LeftAndMain.application_name" config setting instead'); Config::inst()->update('LeftAndMain', 'application_name', $name); } @@ -1747,21 +1750,24 @@ class LeftAndMain extends Controller implements PermissionProvider { /** * Register the given javascript file as required in the CMS. * Filenames should be relative to the base, eg, FRAMEWORK_DIR . '/javascript/loader.js' + * + * @deprecated since version 4.0 */ public static function require_javascript($file) { - Deprecation::notice('3.2', 'Use "LeftAndMain.extra_requirements_javascript" config setting instead'); + Deprecation::notice('4.0', 'Use "LeftAndMain.extra_requirements_javascript" config setting instead'); Config::inst()->update('LeftAndMain', 'extra_requirements_javascript', array($file => array())); } /** * Register the given stylesheet file as required. + * @deprecated since version 4.0 * * @param $file String Filenames should be relative to the base, eg, THIRDPARTY_DIR . '/tree/tree.css' * @param $media String Comma-separated list of media-types (e.g. "screen,projector") * @see http://www.w3.org/TR/REC-CSS2/media.html */ public static function require_css($file, $media = null) { - Deprecation::notice('3.2', 'Use "LeftAndMain.extra_requirements_css" config setting instead'); + Deprecation::notice('4.0', 'Use "LeftAndMain.extra_requirements_css" config setting instead'); Config::inst()->update('LeftAndMain', 'extra_requirements_css', array($file => array('media' => $media))); } @@ -1769,12 +1775,14 @@ class LeftAndMain extends Controller implements PermissionProvider { * Register the given "themeable stylesheet" as required. * Themeable stylesheets have globally unique names, just like templates and PHP files. * Because of this, they can be replaced by similarly named CSS files in the theme directory. + * + * @deprecated since version 4.0 * * @param $name String The identifier of the file. For example, css/MyFile.css would have the identifier "MyFile" * @param $media String Comma-separated list of media-types (e.g. "screen,projector") */ public static function require_themed_css($name, $media = null) { - Deprecation::notice('3.2', 'Use "LeftAndMain.extra_requirements_themedCss" config setting instead'); + Deprecation::notice('4.0', 'Use "LeftAndMain.extra_requirements_themedCss" config setting instead'); Config::inst()->update('LeftAndMain', 'extra_requirements_themedCss', array($name => array('media' => $media))); } diff --git a/admin/code/ModelAdmin.php b/admin/code/ModelAdmin.php index 11d2ec2c2..a26145ffb 100644 --- a/admin/code/ModelAdmin.php +++ b/admin/code/ModelAdmin.php @@ -465,20 +465,20 @@ abstract class ModelAdmin extends LeftAndMain { * overwrite the static page_length of the admin panel, * should be called in the project _config file. * - * @deprecated 3.2 Use "ModelAdmin.page_length" config setting + * @deprecated 4.0 Use "ModelAdmin.page_length" config setting */ public static function set_page_length($length){ - Deprecation::notice('3.2', 'Use "ModelAdmin.page_length" config setting'); + Deprecation::notice('4.0', 'Use "ModelAdmin.page_length" config setting'); self::config()->page_length = $length; } /** * Return the static page_length of the admin, default as 30 * - * @deprecated 3.2 Use "ModelAdmin.page_length" config setting + * @deprecated 4.0 Use "ModelAdmin.page_length" config setting */ public static function get_page_length(){ - Deprecation::notice('3.2', 'Use "ModelAdmin.page_length" config setting'); + Deprecation::notice('4.0', 'Use "ModelAdmin.page_length" config setting'); return self::config()->page_length; } diff --git a/admin/code/SecurityAdmin.php b/admin/code/SecurityAdmin.php index aef46e0b7..43c8f2961 100755 --- a/admin/code/SecurityAdmin.php +++ b/admin/code/SecurityAdmin.php @@ -334,41 +334,41 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider { * The permissions represented in the $codes will not appearing in the form * containing {@link PermissionCheckboxSetField} so as not to be checked / unchecked. * - * @deprecated 3.2 Use "Permission.hidden_permissions" config setting instead + * @deprecated 4.0 Use "Permission.hidden_permissions" config setting instead * @param $codes String|Array */ public static function add_hidden_permission($codes){ if(is_string($codes)) $codes = array($codes); - Deprecation::notice('3.2', 'Use "Permission.hidden_permissions" config setting instead'); + Deprecation::notice('4.0', 'Use "Permission.hidden_permissions" config setting instead'); Config::inst()->update('Permission', 'hidden_permissions', $codes); } /** - * @deprecated 3.2 Use "Permission.hidden_permissions" config setting instead + * @deprecated 4.0 Use "Permission.hidden_permissions" config setting instead * @param $codes String|Array */ public static function remove_hidden_permission($codes){ if(is_string($codes)) $codes = array($codes); - Deprecation::notice('3.2', 'Use "Permission.hidden_permissions" config setting instead'); + Deprecation::notice('4.0', 'Use "Permission.hidden_permissions" config setting instead'); Config::inst()->remove('Permission', 'hidden_permissions', $codes); } /** - * @deprecated 3.2 Use "Permission.hidden_permissions" config setting instead + * @deprecated 4.0 Use "Permission.hidden_permissions" config setting instead * @return Array */ public static function get_hidden_permissions(){ - Deprecation::notice('3.2', 'Use "Permission.hidden_permissions" config setting instead'); + Deprecation::notice('4.0', 'Use "Permission.hidden_permissions" config setting instead'); Config::inst()->get('Permission', 'hidden_permissions', Config::FIRST_SET); } /** * Clear all permissions previously hidden with {@link add_hidden_permission} * - * @deprecated 3.2 Use "Permission.hidden_permissions" config setting instead + * @deprecated 4.0 Use "Permission.hidden_permissions" config setting instead */ public static function clear_hidden_permissions(){ - Deprecation::notice('3.2', 'Use "Permission.hidden_permissions" config setting instead'); + Deprecation::notice('4.0', 'Use "Permission.hidden_permissions" config setting instead'); Config::inst()->remove('Permission', 'hidden_permissions', Config::anything()); } } diff --git a/api/RestfulService.php b/api/RestfulService.php index 4da3971d5..ac5ef31eb 100644 --- a/api/RestfulService.php +++ b/api/RestfulService.php @@ -47,22 +47,22 @@ class RestfulService extends ViewableData implements Flushable { * set a curl option that will be applied to all requests as default * {@see http://php.net/manual/en/function.curl-setopt.php#refsect1-function.curl-setopt-parameters} * - * @deprecated 3.2 Use the "RestfulService.default_curl_options" config setting instead + * @deprecated 4.0 Use the "RestfulService.default_curl_options" config setting instead * @param int $option The cURL opt Constant * @param mixed $value The cURL opt value */ public static function set_default_curl_option($option, $value) { - Deprecation::notice('3.2', 'Use the "RestfulService.default_curl_options" config setting instead'); + Deprecation::notice('4.0', 'Use the "RestfulService.default_curl_options" config setting instead'); Config::inst()->update('RestfulService', 'default_curl_options', array($option => $value)); } /** * set many defauly curl options at once * - * @deprecated 3.2 Use the "RestfulService.default_curl_options" config setting instead + * @deprecated 4.0 Use the "RestfulService.default_curl_options" config setting instead */ public static function set_default_curl_options($optionArray) { - Deprecation::notice('3.2', 'Use the "RestfulService.default_curl_options" config setting instead'); + Deprecation::notice('4.0', 'Use the "RestfulService.default_curl_options" config setting instead'); Config::inst()->update('RestfulService', 'default_curl_options', $optionArray); } @@ -74,12 +74,12 @@ class RestfulService extends ViewableData implements Flushable { * @param string $user The proxy auth user name * @param string $password The proxy auth password * @param boolean $socks Set true to use socks5 proxy instead of http - * @deprecated 3.2 Use the "RestfulService.default_curl_options" config setting instead, + * @deprecated 4.0 Use the "RestfulService.default_curl_options" config setting instead, * with direct reference to the CURL_* options */ public static function set_default_proxy($proxy, $port = 80, $user = "", $password = "", $socks = false) { Deprecation::notice( - '3.1', + '4.0', 'Use the "RestfulService.default_curl_options" config setting instead, ' . 'with direct reference to the CURL_* options' ); @@ -144,8 +144,11 @@ class RestfulService extends ViewableData implements Flushable { $this->customHeaders[] = $header; } + /** + * @deprecated since version 4.0 + */ protected function constructURL(){ - Deprecation::notice('3.2', 'constructURL is deprecated, please use `getAbsoluteRequestURL` instead'); + Deprecation::notice('4.0', 'constructURL is deprecated, please use `getAbsoluteRequestURL` instead'); return Controller::join_links($this->baseURL, '?' . $this->queryString); } @@ -616,9 +619,10 @@ class RestfulService_Response extends SS_HTTPResponse { /** * @param string + * @deprecated since version 4.0 */ public function setCachedBody($content) { - Deprecation::notice('3.2', 'Setting the response body is now deprecated, set the cached request instead'); + Deprecation::notice('4.0', 'Setting the response body is now deprecated, set the cached request instead'); if (!$this->cachedResponse) { $this->cachedResponse = new RestfulService_Response($content); } diff --git a/control/ContentNegotiator.php b/control/ContentNegotiator.php index c670dd8d0..c34e47171 100644 --- a/control/ContentNegotiator.php +++ b/control/ContentNegotiator.php @@ -56,10 +56,10 @@ class ContentNegotiator extends Object { * Set the character set encoding for this page. By default it's utf-8, but you could change it to, say, * windows-1252, to improve interoperability with extended characters being imported from windows excel. * - * @deprecated 3.2 Use the "ContentNegotiator.encoding" config setting instead + * @deprecated 4.0 Use the "ContentNegotiator.encoding" config setting instead */ public static function set_encoding($encoding) { - Deprecation::notice('3.2', 'Use the "ContentNegotiator.encoding" config setting instead'); + Deprecation::notice('4.0', 'Use the "ContentNegotiator.encoding" config setting instead'); Config::inst()->update('ContentNegotiator', 'encoding', $encoding); } @@ -67,30 +67,30 @@ class ContentNegotiator extends Object { * Return the character encoding set bhy ContentNegotiator::set_encoding(). It's recommended that all classes * that need to specify the character set make use of this function. * - * @deprecated 3.2 Use the "ContentNegotiator.encoding" config setting instead + * @deprecated 4.0 Use the "ContentNegotiator.encoding" config setting instead */ public static function get_encoding() { - Deprecation::notice('3.2', 'Use the "ContentNegotiator.encoding" config setting instead'); + Deprecation::notice('4.0', 'Use the "ContentNegotiator.encoding" config setting instead'); return Config::inst()->get('ContentNegotiator', 'encoding'); } /** * Enable content negotiation for all templates, not just those with the xml header. * - * @deprecated 3.2 Use the "ContentNegotiator.enabled" config setting instead + * @deprecated 4.0 Use the "ContentNegotiator.enabled" config setting instead */ public static function enable() { - Deprecation::notice('3.2', 'Use the "ContentNegotiator.enabled" config setting instead'); + Deprecation::notice('4.0', 'Use the "ContentNegotiator.enabled" config setting instead'); Config::inst()->update('ContentNegotiator', 'enabled', true); } /** * Disable content negotiation for all templates, not just those with the xml header. * - * @deprecated 3.2 Use the "ContentNegotiator.enabled" config setting instead + * @deprecated 4.0 Use the "ContentNegotiator.enabled" config setting instead */ public static function disable() { - Deprecation::notice('3.2', 'Use the "ContentNegotiator.enabled" config setting instead'); + Deprecation::notice('4.0', 'Use the "ContentNegotiator.enabled" config setting instead'); Config::inst()->update('ContentNegotiator', 'enabled', false); } diff --git a/control/Director.php b/control/Director.php index f069e2cc8..1e315318f 100644 --- a/control/Director.php +++ b/control/Director.php @@ -69,13 +69,13 @@ class Director implements TemplateGlobalProvider { * * The director is responsible for turning URLs into Controller objects. * - * @deprecated 3.2 Use the "Director.rules" config setting instead + * @deprecated 4.0 Use the "Director.rules" config setting instead * @param $priority The priority of the rules; higher values will get your rule checked first. We recommend * priority 100 for your site's rules. The built-in rules are priority 10, standard modules are * priority 50. */ public static function addRules($priority, $rules) { - Deprecation::notice('3.2', 'Use the "Director.rules" config setting instead'); + Deprecation::notice('4.0', 'Use the "Director.rules" config setting instead'); Config::inst()->update('Director', 'rules', $rules); } @@ -575,10 +575,10 @@ class Director implements TemplateGlobalProvider { * Sets the root URL for the website. * If the site isn't accessible from the URL you provide, weird things will happen. * - * @deprecated 3.2 Use the "Director.alternate_base_url" config setting instead + * @deprecated 4.0 Use the "Director.alternate_base_url" config setting instead */ public static function setBaseURL($baseURL) { - Deprecation::notice('3.2', 'Use the "Director.alternate_base_url" config setting instead'); + Deprecation::notice('4.0', 'Use the "Director.alternate_base_url" config setting instead'); Config::inst()->update('Director', 'alternate_base_url', $baseURL); } @@ -595,10 +595,10 @@ class Director implements TemplateGlobalProvider { * Sets the root folder for the website. * If the site isn't accessible from the folder you provide, weird things will happen. * - * @deprecated 3.2 Use the "Director.alternate_base_folder" config setting instead + * @deprecated 4.0 Use the "Director.alternate_base_folder" config setting instead */ public static function setBaseFolder($baseFolder) { - Deprecation::notice('3.2', 'Use the "Director.alternate_base_folder" config setting instead'); + Deprecation::notice('4.0', 'Use the "Director.alternate_base_folder" config setting instead'); Config::inst()->update('Director', 'alternate_base_folder', $baseFolder); } @@ -971,7 +971,7 @@ class Director implements TemplateGlobalProvider { * Once the environment type is set, it can be checked with {@link Director::isDev()}, {@link Director::isTest()}, * and {@link Director::isLive()}. * - * @deprecated 3.2 Use the "Director.environment_type" config setting instead + * @deprecated 4.0 Use the "Director.environment_type" config setting instead * @param $et string The environment type: dev, test, or live. */ public static function set_environment_type($et) { @@ -979,7 +979,7 @@ class Director implements TemplateGlobalProvider { user_error("Director::set_environment_type passed '$et'. It should be passed dev, test, or live", E_USER_WARNING); } else { - Deprecation::notice('3.2', 'Use the "Director.environment_type" config setting instead'); + Deprecation::notice('4.0', 'Use the "Director.environment_type" config setting instead'); Config::inst()->update('Director', 'environment_type', $et); } } diff --git a/control/HTTP.php b/control/HTTP.php index 9993c8e52..97dcb84f7 100644 --- a/control/HTTP.php +++ b/control/HTTP.php @@ -103,7 +103,7 @@ class HTTP { */ public static function urlRewriter($content, $code) { if(!is_callable($code)) { - Deprecation::notice(3.1, 'HTTP::urlRewriter expects a callable as the second parameter'); + Deprecation::notice('4.0', 'HTTP::urlRewriter expects a callable as the second parameter'); } // Replace attributes diff --git a/control/Session.php b/control/Session.php index 2556835b6..0a7bdc59a 100644 --- a/control/Session.php +++ b/control/Session.php @@ -162,24 +162,24 @@ class Session { * To make cookies visible on all subdomains then the domain * must be prefixed with a dot like '.php.net'. * - * @deprecated 3.2 Use the "Session.cookie_domain" config setting instead + * @deprecated 4.0 Use the "Session.cookie_domain" config setting instead * * @param string $domain The domain to set */ public static function set_cookie_domain($domain) { - Deprecation::notice('3.2', 'Use the "Session.cookie_domain" config setting instead'); + Deprecation::notice('4.0', 'Use the "Session.cookie_domain" config setting instead'); Config::inst()->update('Session', 'cookie_domain', $domain); } /** * Get the cookie domain. * - * @deprecated 3.2 Use the "Session.cookie_domain" config setting instead + * @deprecated 4.0 Use the "Session.cookie_domain" config setting instead * * @return string */ public static function get_cookie_domain() { - Deprecation::notice('3.2', 'Use the "Session.cookie_domain" config setting instead'); + Deprecation::notice('4.0', 'Use the "Session.cookie_domain" config setting instead'); return Config::inst()->get('Session', 'cookie_domain'); } @@ -187,24 +187,24 @@ class Session { * Path to set on the domain where the session cookie will work. * Use a single slash ('/') for all paths on the domain. * - * @deprecated 3.2 Use the "Session.cookie_path" config setting instead + * @deprecated 4.0 Use the "Session.cookie_path" config setting instead * * @param string $path The path to set */ public static function set_cookie_path($path) { - Deprecation::notice('3.2', 'Use the "Session.cookie_path" config setting instead'); + Deprecation::notice('4.0', 'Use the "Session.cookie_path" config setting instead'); Config::inst()->update('Session', 'cookie_path', $path); } /** * Get the path on the domain where the session cookie will work. * - * @deprecated 3.2 Use the "Session.cookie_path" config setting instead + * @deprecated 4.0 Use the "Session.cookie_path" config setting instead * * @return string */ public static function get_cookie_path() { - Deprecation::notice('3.2', 'Use the "Session.cookie_path" config setting instead'); + Deprecation::notice('4.0', 'Use the "Session.cookie_path" config setting instead'); if(Config::inst()->get('Session', 'cookie_path')) { return Config::inst()->get('Session', 'cookie_path'); } else { @@ -215,45 +215,46 @@ class Session { /** * Secure cookie, tells the browser to only send it over SSL. * - * @deprecated 3.2 Use the "Session.cookie_secure" config setting instead + * @deprecated 4.0 Use the "Session.cookie_secure" config setting instead * * @param boolean $secure */ public static function set_cookie_secure($secure) { - Deprecation::notice('3.2', 'Use the "Session.cookie_secure" config setting instead'); + Deprecation::notice('4.0', 'Use the "Session.cookie_secure" config setting instead'); Config::inst()->update('Session', 'cookie_secure', (bool)$secure); } /** * Get if the cookie is secure * - * @deprecated 3.2 Use the "Session.cookie_secure" config setting instead + * @deprecated 4.0 Use the "Session.cookie_secure" config setting instead * * @return boolean */ public static function get_cookie_secure() { - Deprecation::notice('3.2', 'Use the "Session.cookie_secure" config setting instead'); + Deprecation::notice('4.0', 'Use the "Session.cookie_secure" config setting instead'); return Config::inst()->get('Session', 'cookie_secure'); } /** * Set the session store path * - * @deprecated 3.2 Use the "Session.session_store_path" config setting instead + * @deprecated 4.0 Use the "Session.session_store_path" config setting instead * * @param string $path Filesystem path to the session store */ public static function set_session_store_path($path) { - Deprecation::notice('3.2', 'Use the "Session.session_store_path" config setting instead'); + Deprecation::notice('4.0', 'Use the "Session.session_store_path" config setting instead'); Config::inst()->update('Session', 'session_store_path', $path); } /** * Get the session store path * @return string + * @deprecated since version 4.0 */ public static function get_session_store_path() { - Deprecation::notice('3.2', 'Use the "Session.session_store_path" config setting instead'); + Deprecation::notice('4.0', 'Use the "Session.session_store_path" config setting instead'); return Config::inst()->get('Session', 'session_store_path'); } @@ -270,12 +271,12 @@ class Session { * * Session::set_timeout is used to set the timeout value for any users whose address is not in the given IP range. * - * @deprecated 3.2 Use the "Session.timeout_ips" config setting instead + * @deprecated 4.0 Use the "Session.timeout_ips" config setting instead * * @param array $session_ips Array of IPv4 rules. */ public static function set_timeout_ips($ips) { - Deprecation::notice('3.2', 'Use the "Session.timeout_ips" config setting instead'); + Deprecation::notice('4.0', 'Use the "Session.timeout_ips" config setting instead'); Config::inst()->update('Session', 'timeout_ips', $ips); } @@ -605,20 +606,20 @@ class Session { /** * Set the timeout of a Session value * - * @deprecated 3.2 Use the "Session.timeout" config setting instead + * @deprecated 4.0 Use the "Session.timeout" config setting instead * * @param int $timeout Time until a session expires in seconds. Defaults to expire when browser is closed. */ public static function set_timeout($timeout) { - Deprecation::notice('3.2', 'Use the "Session.timeout" config setting instead'); + Deprecation::notice('4.0', 'Use the "Session.timeout" config setting instead'); Config::inst()->update('Session', 'timeout', (int)$timeout); } /** - * @deprecated 3.2 Use the "Session.timeout" config setting instead + * @deprecated 4.0 Use the "Session.timeout" config setting instead */ public static function get_timeout() { - Deprecation::notice('3.2', 'Use the "Session.timeout" config setting instead'); + Deprecation::notice('4.0', 'Use the "Session.timeout" config setting instead'); return Config::inst()->get('Session', 'timeout'); } } diff --git a/control/injector/Injector.php b/control/injector/Injector.php index f8694dbe2..c593fe126 100644 --- a/control/injector/Injector.php +++ b/control/injector/Injector.php @@ -750,10 +750,10 @@ class Injector { /** * Register a service with an explicit name * - * @deprecated since 3.1.1 + * @deprecated since 4.0 */ public function registerNamedService($name, $service) { - Deprecation::notice('3.1.1', 'registerNamedService is deprecated, use registerService instead'); + Deprecation::notice('4.0', 'registerNamedService is deprecated, use registerService instead'); return $this->registerService($service, $name); } diff --git a/core/Config.php b/core/Config.php index 7291390e0..aa0d81225 100644 --- a/core/Config.php +++ b/core/Config.php @@ -681,7 +681,7 @@ class Config { /** * @package framework * @subpackage core - * @deprecated 3.2 + * @deprecated 4.0 */ class Config_LRU { const SIZE = 1000; @@ -693,7 +693,7 @@ class Config_LRU { protected $c = 0; public function __construct() { - Deprecation::notice('3.2', 'Please use Config_MemCache instead', Deprecation::SCOPE_CLASS); + Deprecation::notice('4.0', 'Please use Config_MemCache instead', Deprecation::SCOPE_CLASS); if (version_compare(PHP_VERSION, '5.3.7', '<')) { // SplFixedArray causes seg faults before PHP 5.3.7 $this->cache = array(); diff --git a/core/Object.php b/core/Object.php index e0e2bd587..9943a5d03 100755 --- a/core/Object.php +++ b/core/Object.php @@ -584,7 +584,7 @@ abstract class Object { $sources[] = $extensionClass; if(!ClassInfo::has_method_from($extensionClass, 'add_to_class', 'Extension')) { - Deprecation::notice('3.2.0', + Deprecation::notice('4.0', "add_to_class deprecated on $extensionClass. Use get_extra_config instead"); } diff --git a/core/manifest/ConfigStaticManifest.php b/core/manifest/ConfigStaticManifest.php index fc1c54feb..ba488a5b7 100644 --- a/core/manifest/ConfigStaticManifest.php +++ b/core/manifest/ConfigStaticManifest.php @@ -79,7 +79,7 @@ class SS_ConfigStaticManifest { $static = $this->statics[$class][$name]; if ($static['access'] != T_PRIVATE) { - Deprecation::notice('3.2.0', "Config static $class::\$$name must be marked as private", + Deprecation::notice('4.0', "Config static $class::\$$name must be marked as private", Deprecation::SCOPE_GLOBAL); // Don't warn more than once per static $this->statics[$class][$name]['access'] = T_PRIVATE; diff --git a/dev/LogEmailWriter.php b/dev/LogEmailWriter.php index 55ece9873..6a4d81b17 100644 --- a/dev/LogEmailWriter.php +++ b/dev/LogEmailWriter.php @@ -31,18 +31,18 @@ class SS_LogEmailWriter extends Zend_Log_Writer_Abstract { } /** - * @deprecated 3.2 Use the "SS_LogEmailWriter.send_from" config setting instead + * @deprecated 4.0 Use the "SS_LogEmailWriter.send_from" config setting instead */ public static function set_send_from($address) { - Deprecation::notice('3.2', 'Use the "SS_LogEmailWriter.send_from" config setting instead'); + Deprecation::notice('4.0', 'Use the "SS_LogEmailWriter.send_from" config setting instead'); Config::inst()->update('SS_LogEmailWriter', 'send_from', $address); } /** - * @deprecated 3.2 Use the "SS_LogEmailWriter.send_from" config setting instead + * @deprecated 4.0 Use the "SS_LogEmailWriter.send_from" config setting instead */ public static function get_send_from() { - Deprecation::notice('3.2', 'Use the "SS_LogEmailWriter.send_from" config setting instead'); + Deprecation::notice('4.0', 'Use the "SS_LogEmailWriter.send_from" config setting instead'); return Config::inst()->get('SS_LogEmailWriter', 'send_from'); } diff --git a/dev/SapphireTest.php b/dev/SapphireTest.php index 15efdc0fd..5519e0f76 100644 --- a/dev/SapphireTest.php +++ b/dev/SapphireTest.php @@ -43,7 +43,11 @@ class SapphireTest extends PHPUnit_Framework_TestCase { */ protected $usesDatabase = null; + /** + * @deprecated since version 4.0 + */ protected $originalMailer; + protected $originalMemberPasswordValidator; protected $originalRequirements; protected $originalIsRunningTest; @@ -221,7 +225,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { // Set up email $this->originalMailer = Email::mailer(); $this->mailer = new TestMailer(); - Email::set_mailer($this->mailer); + Injector::inst()->registerService($this->mailer, 'Mailer'); Config::inst()->remove('Email', 'send_all_emails_to'); // Todo: this could be a special test model @@ -471,10 +475,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { ini_set('memory_limit', ($this->originalMemoryLimit) ? $this->originalMemoryLimit : -1); // Restore email configuration - if($this->originalMailer) { - Email::set_mailer($this->originalMailer); - $this->originalMailer = null; - } + $this->originalMailer = null; $this->mailer = null; // Restore password validation diff --git a/email/Email.php b/email/Email.php index 1ccb93d37..b35dcbabe 100644 --- a/email/Email.php +++ b/email/Email.php @@ -62,10 +62,10 @@ class Email extends ViewableData { protected $bcc; /** - * @deprecated since version 3.3 + * @deprecated since version 4.0 */ public static function set_mailer(Mailer $mailer) { - Deprecation::notice('3.3.0', 'Use Injector to override the Mailer service'); + Deprecation::notice('4.0', 'Use Injector to override the Mailer service'); Injector::inst()->registerService($mailer, 'Mailer'); } @@ -162,7 +162,7 @@ class Email extends ViewableData { if($bcc != null) $this->bcc = $bcc; if($bounceHandlerURL != null) { - Deprecation::notice('3.1', 'Use "emailbouncehandler" module'); + Deprecation::notice('4.0', 'Use "emailbouncehandler" module'); } parent::__construct(); @@ -177,8 +177,11 @@ class Email extends ViewableData { return $this; } + /** + * @deprecated since version 4.0 + */ public function setBounceHandlerURL($bounceHandlerURL) { - Deprecation::notice('3.1', 'Use "emailbouncehandler" module'); + Deprecation::notice('4.0', 'Use "emailbouncehandler" module'); } public function attachFile($filename, $attachedFilename = null, $mimetype = null) { @@ -538,20 +541,20 @@ class Email extends ViewableData { * * Used by {@link Email->send()}, {@link Email->sendPlain()}, {@link Debug->friendlyError()}. * - * @deprecated 3.2 Use the "Email.admin_email" config setting instead + * @deprecated 4.0 Use the "Email.admin_email" config setting instead * @param string $newEmail */ public static function setAdminEmail($newEmail) { - Deprecation::notice('3.2', 'Use the "Email.admin_email" config setting instead'); + Deprecation::notice('4.0', 'Use the "Email.admin_email" config setting instead'); Config::inst()->update('Email', 'admin_email', $newEmail); } /** - * @deprecated 3.2 Use the "Email.admin_email" config setting instead + * @deprecated 4.0 Use the "Email.admin_email" config setting instead * @return string */ public static function getAdminEmail() { - Deprecation::notice('3.2', 'Use the "Email.admin_email" config setting instead'); + Deprecation::notice('4.0', 'Use the "Email.admin_email" config setting instead'); return Config::inst()->get('Email', 'admin_email'); } @@ -562,10 +565,10 @@ class Email extends ViewableData { * * if(!Director::isLive()) Email::send_all_emails_to("someone@example.com") * - * @deprecated 3.2 Use the "Email.send_all_emails_to" config setting instead + * @deprecated 4.0 Use the "Email.send_all_emails_to" config setting instead */ public static function send_all_emails_to($emailAddress) { - Deprecation::notice('3.2', 'Use the "Email.send_all_emails_to" config setting instead'); + Deprecation::notice('4.0', 'Use the "Email.send_all_emails_to" config setting instead'); Config::inst()->update('Email', 'send_all_emails_to', $emailAddress); } @@ -580,10 +583,10 @@ class Email extends ViewableData { * * if(Director::isLive()) Email::cc_all_emails_to("supportperson@example.com") * - * @deprecated 3.2 Use the "Email.cc_all_emails_to" config setting instead + * @deprecated 4.0 Use the "Email.cc_all_emails_to" config setting instead */ public static function cc_all_emails_to($emailAddress) { - Deprecation::notice('3.2', 'Use the "Email.cc_all_emails_to" config setting instead'); + Deprecation::notice('4.0', 'Use the "Email.cc_all_emails_to" config setting instead'); Config::inst()->update('Email', 'cc_all_emails_to', $emailAddress); } @@ -598,10 +601,10 @@ class Email extends ViewableData { * * if(Director::isLive()) Email::cc_all_emails_to("supportperson@example.com") * - * @deprecated 3.2 Use the "Email.bcc_all_emails_to" config setting instead + * @deprecated 4.0 Use the "Email.bcc_all_emails_to" config setting instead */ public static function bcc_all_emails_to($emailAddress) { - Deprecation::notice('3.2', 'Use the "Email.bcc_all_emails_to" config setting instead'); + Deprecation::notice('4.0', 'Use the "Email.bcc_all_emails_to" config setting instead'); Config::inst()->update('Email', 'bcc_all_emails_to', $emailAddress); } diff --git a/email/Mailer.php b/email/Mailer.php index 7f61d314f..0e44df151 100644 --- a/email/Mailer.php +++ b/email/Mailer.php @@ -477,17 +477,17 @@ class Mailer extends Object { } /** - * @deprecated since version 3.2.0 + * @deprecated since version 4.0 */ public function wrapImagesInline($htmlContent) { - Deprecation::notice('3.2.0', 'wrapImagesInline is deprecated'); + Deprecation::notice('4.0', 'wrapImagesInline is deprecated'); } /** - * @deprecated since version 3.2.0 + * @deprecated since version 4.0 */ public function wrapImagesInline_rewriter($url) { - Deprecation::notice('3.2.0', 'wrapImagesInline_rewriter is deprecated'); + Deprecation::notice('4.0', 'wrapImagesInline_rewriter is deprecated'); } } diff --git a/filesystem/GD.php b/filesystem/GD.php index 8ca8c9569..c50b5a1a8 100644 --- a/filesystem/GD.php +++ b/filesystem/GD.php @@ -25,11 +25,11 @@ class GDBackend extends Object implements Image_Backend { /** * Set the default image quality. * - * @deprecated 3.2 Use the "GDBackend.default_quality" config setting instead + * @deprecated 4.0 Use the "GDBackend.default_quality" config setting instead * @param quality int A number from 0 to 100, 100 being the best quality. */ public static function set_default_quality($quality) { - Deprecation::notice('3.2', 'Use the "GDBackend.default_quality" config setting instead'); + Deprecation::notice('4.0', 'Use the "GDBackend.default_quality" config setting instead'); if(is_numeric($quality) && (int) $quality >= 0 && (int) $quality <= 100) { config::inst()->update('GDBackend', 'default_quality', (int) $quality); } @@ -562,10 +562,10 @@ class GDBackend extends Object implements Image_Backend { class GD extends GDBackend { /** - * @deprecated 3.2 Use the "GDBackend.default_quality" config setting instead + * @deprecated 4.0 Use the "GDBackend.default_quality" config setting instead */ public static function set_default_quality($quality) { - Deprecation::notice('3.2', 'Use the "GDBackend.default_quality" config setting instead'); + Deprecation::notice('4.0', 'Use the "GDBackend.default_quality" config setting instead'); GDBackend::set_default_quality($quality); } } diff --git a/filesystem/ImagickBackend.php b/filesystem/ImagickBackend.php index d9f841fab..3112d8b10 100644 --- a/filesystem/ImagickBackend.php +++ b/filesystem/ImagickBackend.php @@ -42,12 +42,12 @@ class ImagickBackend extends Imagick implements Image_Backend { /** * set_default_quality * - * @deprecated 3.2 Use the "ImagickBackend.default_quality" config setting instead + * @deprecated 4.0 Use the "ImagickBackend.default_quality" config setting instead * @param int $quality * @return void */ public static function set_default_quality($quality) { - Deprecation::notice('3.2', 'Use the "ImagickBackend.default_quality" config setting instead'); + Deprecation::notice('4.0', 'Use the "ImagickBackend.default_quality" config setting instead'); if(is_numeric($quality) && (int) $quality >= 0 && (int) $quality <= 100) { Config::inst()->update('ImagickBackend', 'default_quality', (int) $quality); } diff --git a/forms/DateField.php b/forms/DateField.php index 20b0597c7..3c2d26af2 100644 --- a/forms/DateField.php +++ b/forms/DateField.php @@ -323,13 +323,13 @@ class DateField extends TextField { } /** - * @deprecated 3.2 Use the "DateField.default_config" config setting instead + * @deprecated 4.0 Use the "DateField.default_config" config setting instead * @param String $k * @param mixed $v * @return boolean */ public static function set_default_config($k, $v) { - Deprecation::notice('3.2', 'Use the "DateField.default_config" config setting instead'); + Deprecation::notice('4.0', 'Use the "DateField.default_config" config setting instead'); return Config::inst()->update('DateField', 'default_config', array($k => $v)); } diff --git a/forms/FormAction.php b/forms/FormAction.php index bb9400ec7..abb9d662b 100644 --- a/forms/FormAction.php +++ b/forms/FormAction.php @@ -100,7 +100,7 @@ class FormAction extends FormField { // Remove this method override in 4.0 $decoded = Convert::xml2raw($title); - if($decoded !== $title) { + if($title && $decoded !== $title) { Deprecation::notice( '4.0', 'The FormAction title field should not be html encoded. Use buttonContent to set custom html instead' diff --git a/forms/FormField.php b/forms/FormField.php index 718a9c50b..987089368 100644 --- a/forms/FormField.php +++ b/forms/FormField.php @@ -908,12 +908,12 @@ class FormField extends RequestHandler { } /** - * @deprecated 3.2 Use FormField::create_tag() + * @deprecated 4.0 Use FormField::create_tag() */ public function createTag($tag, $attributes, $content = null) { - Deprecation::notice('3.2', 'Use FormField::create_tag()'); + Deprecation::notice('4.0', 'Use FormField::create_tag()'); return self::create_tag($tag, $attributes, $content); - } + } /** * Validation method each {@link FormField} subclass should implement, diff --git a/forms/HtmlEditorField.php b/forms/HtmlEditorField.php index 9817431e8..e96b73db5 100644 --- a/forms/HtmlEditorField.php +++ b/forms/HtmlEditorField.php @@ -29,7 +29,7 @@ class HtmlEditorField extends TextareaField { protected $rows = 30; /** - * @deprecated since version 3.2 + * @deprecated since version 4.0 */ public static function include_js() { Deprecation::notice('4.0', 'Use HtmlEditorConfig::require_js() instead'); diff --git a/forms/RequiredFields.php b/forms/RequiredFields.php index 15c8a7b34..06966a0c6 100644 --- a/forms/RequiredFields.php +++ b/forms/RequiredFields.php @@ -34,8 +34,11 @@ class RequiredFields extends Validator { parent::__construct(); } + /** + * @deprecated since version 4.0 + */ public function useLabels($flag) { - Deprecation::notice('3.2', 'useLabels will be removed from 3.2, please do not use it or implement it yourself'); + Deprecation::notice('4.0', 'useLabels will be removed from 4.0, please do not use it or implement it yourself'); $this->useLabels = $flag; return $this; } diff --git a/i18n/i18n.php b/i18n/i18n.php index 5d09fabe4..336899b16 100644 --- a/i18n/i18n.php +++ b/i18n/i18n.php @@ -137,54 +137,56 @@ class i18n extends Object implements TemplateGlobalProvider, Flushable { * * @see Requirements::process_i18n_javascript() * - * @deprecated 3.2 Use the "i18n.js_i18n" config setting instead + * @deprecated 4.0 Use the "i18n.js_i18n" config setting instead * @param bool $bool */ public static function set_js_i18n($bool) { - Deprecation::notice('3.2', 'Use the "i18n.js_i18n" config setting instead'); + Deprecation::notice('4.0', 'Use the "i18n.js_i18n" config setting instead'); Config::inst()->update('i18n', 'js_i18n', $bool); } /** - * @deprecated 3.2 Use the "i18n.js_i18n" config setting instead + * @deprecated 4.0 Use the "i18n.js_i18n" config setting instead * @return bool */ public static function get_js_i18n() { - Deprecation::notice('3.2', 'Use the "i18n.js_i18n" config setting instead'); + Deprecation::notice('4.0', 'Use the "i18n.js_i18n" config setting instead'); return Config::inst()->get('i18n', 'js_i18n'); } /** - * @deprecated 3.2 Use the "i18n.date_format" config setting instead + * @deprecated 4.0 Use the "i18n.date_format" config setting instead * @param string ISO date format */ public static function set_date_format($format) { - Deprecation::notice('3.2', 'Use the "i18n.date_format" config setting instead'); + Deprecation::notice('4.0', 'Use the "i18n.date_format" config setting instead'); Config::inst()->update('i18n', 'date_format', $format); } /** + * @deprecated since version 4.0 * @return string ISO date format */ public static function get_date_format() { - Deprecation::notice('3.2', 'Use the "i18n.date_format" config setting instead'); + Deprecation::notice('4.0', 'Use the "i18n.date_format" config setting instead'); return Config::inst()->get('i18n', 'date_format'); } /** - * @deprecated 3.2 Use the "i18n.time_format" config setting instead + * @deprecated 4.0 Use the "i18n.time_format" config setting instead * @param string ISO time format */ public static function set_time_format($format) { - Deprecation::notice('3.2', 'Use the "i18n.time_format" config setting instead'); + Deprecation::notice('4.0', 'Use the "i18n.time_format" config setting instead'); Config::inst()->update('i18n', 'time_format', $format); } /** + * @deprecated since version 4.0 * @return string ISO time format */ public static function get_time_format() { - Deprecation::notice('3.2', 'Use the "i18n.time_format" config setting instead'); + Deprecation::notice('4.0', 'Use the "i18n.time_format" config setting instead'); return Config::inst()->get('i18n', 'time_format'); } @@ -2224,10 +2226,11 @@ class i18n extends Object implements TemplateGlobalProvider, Flushable { /** * Get a list of locales (code => language and country) * + * @deprecated since version 4.0 * @return list of languages in the form 'code' => 'name' */ public static function get_locale_list() { - Deprecation::notice('3.2', 'Use the "i18n.all_locales" config setting instead'); + Deprecation::notice('4.0', 'Use the "i18n.all_locales" config setting instead'); return (array)Config::inst()->get('i18n', 'all_locales'); } diff --git a/model/DB.php b/model/DB.php index 5d56efcb8..c918dd488 100644 --- a/model/DB.php +++ b/model/DB.php @@ -50,10 +50,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::set_conn instead + * @deprecated since version 4.0 Use DB::set_conn instead */ public static function setConn(SS_Database $connection, $name = 'default') { - Deprecation::notice('3.3', 'Use DB::set_conn instead'); + Deprecation::notice('4.0', 'Use DB::set_conn instead'); self::set_conn($connection, $name); } @@ -71,10 +71,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::get_conn instead + * @deprecated since version 4.0 Use DB::get_conn instead */ public static function getConn($name = 'default') { - Deprecation::notice('3.3', 'Use DB::get_conn instead'); + Deprecation::notice('4.0', 'Use DB::get_conn instead'); return self::get_conn($name); } @@ -254,10 +254,10 @@ class DB { } /** - * @deprecated since version 3.2 DB::getConnect was never implemented and is obsolete + * @deprecated since version 4.0 DB::getConnect was never implemented and is obsolete */ public static function getConnect($parameters) { - Deprecation::notice('3.2', 'DB::getConnect was never implemented and is obsolete'); + Deprecation::notice('4.0', 'DB::getConnect was never implemented and is obsolete'); } /** @@ -363,10 +363,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::get_generated_id instead + * @deprecated since version 4.0 Use DB::get_generated_id instead */ public static function getGeneratedID($table) { - Deprecation::notice('3.3', 'Use DB::get_generated_id instead'); + Deprecation::notice('4.0', 'Use DB::get_generated_id instead'); return self::get_generated_id($table); } @@ -380,10 +380,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::is_active instead + * @deprecated since version 4.0 Use DB::is_active instead */ public static function isActive() { - Deprecation::notice('3.3', 'Use DB::is_active instead'); + Deprecation::notice('4.0', 'Use DB::is_active instead'); return self::is_active(); } @@ -400,10 +400,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::create_database instead + * @deprecated since version 4.0 Use DB::create_database instead */ public static function createDatabase($connect, $username, $password, $database) { - Deprecation::notice('3.3', 'Use DB::create_database instead'); + Deprecation::notice('4.0', 'Use DB::create_database instead'); return self::create_database($database); } @@ -426,10 +426,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::create_table instead + * @deprecated since version 4.0 Use DB::create_table instead */ public static function createTable($table, $fields = null, $indexes = null, $options = null) { - Deprecation::notice('3.3', 'Use DB::create_table instead'); + Deprecation::notice('4.0', 'Use DB::create_table instead'); return self::create_table($table, $fields, $indexes, $options); } @@ -444,10 +444,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::create_field instead + * @deprecated since version 4.0 Use DB::create_field instead */ public static function createField($table, $field, $spec) { - Deprecation::notice('3.3', 'Use DB::create_field instead'); + Deprecation::notice('4.0', 'Use DB::create_field instead'); return self::create_field($table, $field, $spec); } @@ -474,12 +474,12 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::require_table instead + * @deprecated since version 4.0 Use DB::require_table instead */ public static function requireTable($table, $fieldSchema = null, $indexSchema = null, $hasAutoIncPK = true, $options = null, $extensions = null ) { - Deprecation::notice('3.3', 'Use DB::require_table instead'); + Deprecation::notice('4.0', 'Use DB::require_table instead'); return self::require_table($table, $fieldSchema, $indexSchema, $hasAutoIncPK, $options, $extensions); } @@ -495,10 +495,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::require_field instead + * @deprecated since version 4.0 Use DB::require_field instead */ public static function requireField($table, $field, $spec) { - Deprecation::notice('3.3', 'Use DB::require_field instead'); + Deprecation::notice('4.0', 'Use DB::require_field instead'); return self::require_field($table, $field, $spec); } @@ -514,10 +514,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::require_index instead + * @deprecated since version 4.0 Use DB::require_index instead */ public static function requireIndex($table, $index, $spec) { - Deprecation::notice('3.3', 'Use DB::require_index instead'); + Deprecation::notice('4.0', 'Use DB::require_index instead'); self::require_index($table, $index, $spec); } @@ -531,10 +531,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::dont_require_table instead + * @deprecated since version 4.0 Use DB::dont_require_table instead */ public static function dontRequireTable($table) { - Deprecation::notice('3.3', 'Use DB::dont_require_table instead'); + Deprecation::notice('4.0', 'Use DB::dont_require_table instead'); self::dont_require_table($table); } @@ -549,10 +549,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::dont_require_field instead + * @deprecated since version 4.0 Use DB::dont_require_field instead */ public static function dontRequireField($table, $fieldName) { - Deprecation::notice('3.3', 'Use DB::dont_require_field instead'); + Deprecation::notice('4.0', 'Use DB::dont_require_field instead'); self::dont_require_field($table, $fieldName); } @@ -567,10 +567,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::check_and_repair_table instead + * @deprecated since version 4.0 Use DB::check_and_repair_table instead */ public static function checkAndRepairTable($table) { - Deprecation::notice('3.3', 'Use DB::check_and_repair_table instead'); + Deprecation::notice('4.0', 'Use DB::check_and_repair_table instead'); self::check_and_repair_table($table); } @@ -584,10 +584,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::affected_rows instead + * @deprecated since version 4.0 Use DB::affected_rows instead */ public static function affectedRows() { - Deprecation::notice('3.3', 'Use DB::affected_rows instead'); + Deprecation::notice('4.0', 'Use DB::affected_rows instead'); return self::affected_rows(); } @@ -602,10 +602,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::table_list instead + * @deprecated since version 4.0 Use DB::table_list instead */ public static function tableList() { - Deprecation::notice('3.3', 'Use DB::table_list instead'); + Deprecation::notice('4.0', 'Use DB::table_list instead'); return self::table_list(); } @@ -621,10 +621,10 @@ class DB { } /** - * @deprecated since version 3.3 Use DB::field_list instead + * @deprecated since version 4.0 Use DB::field_list instead */ public static function fieldList($table) { - Deprecation::notice('3.3', 'Use DB::field_list instead'); + Deprecation::notice('4.0', 'Use DB::field_list instead'); return self::field_list($table); } diff --git a/model/DatabaseAdmin.php b/model/DatabaseAdmin.php index c580eb38b..cc62ec861 100644 --- a/model/DatabaseAdmin.php +++ b/model/DatabaseAdmin.php @@ -265,10 +265,10 @@ class DatabaseAdmin extends Controller { /** * Clear all data out of the database * - * @deprecated since version 3.2 + * @deprecated since version 4.0 */ public function clearAllData() { - Deprecation::notice('3.2', 'Use DB::get_conn()->clearAllData() instead'); + Deprecation::notice('4.0', 'Use DB::get_conn()->clearAllData() instead'); DB::get_conn()->clearAllData(); } diff --git a/model/Image.php b/model/Image.php index d488c689a..72e7d9a9c 100644 --- a/model/Image.php +++ b/model/Image.php @@ -168,10 +168,10 @@ class Image extends File implements Flushable { * File names are filtered through {@link FileNameFilter}, see class documentation * on how to influence this behaviour. * - * @deprecated 3.2 + * @deprecated 4.0 */ public function loadUploadedImage($tmpFile) { - Deprecation::notice('3.2', 'Use the Upload::loadIntoFile()'); + Deprecation::notice('4.0', 'Use the Upload::loadIntoFile()'); if(!is_array($tmpFile)) { user_error("Image::loadUploadedImage() Not passed an array. Most likely, the form hasn't got the right" diff --git a/model/connect/Database.php b/model/connect/Database.php index ace5071b2..cfdd6281e 100644 --- a/model/connect/Database.php +++ b/model/connect/Database.php @@ -681,70 +681,70 @@ abstract class SS_Database { abstract public function random(); /** - * @deprecated since version 3.3 Use DB::get_schema()->dbDataType($type) instead + * @deprecated since version 4.0 Use DB::get_schema()->dbDataType($type) instead */ public function dbDataType($type){ - Deprecation::notice('3.3', 'Use DB::get_schema()->dbDataType($type) instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->dbDataType($type) instead'); return $this->getSchemaManager()->dbDataType($type); } /** - * @deprecated since version 3.3 Use selectDatabase('dbname', true) instead + * @deprecated since version 4.0 Use selectDatabase('dbname', true) instead */ public function createDatabase() { - Deprecation::notice('3.3', 'Use selectDatabase(\'dbname\',true) instead'); + Deprecation::notice('4.0', 'Use selectDatabase(\'dbname\',true) instead'); $database = $this->connector->getSelectedDatabase(); $this->selectDatabase($database, true); return $this->isActive(); } /** - * @deprecated since version 3.3 SS_Database::getConnect was never implemented and is obsolete + * @deprecated since version 4.0 SS_Database::getConnect was never implemented and is obsolete */ public function getConnect($parameters) { - Deprecation::notice('3.3', 'SS_Database::getConnect was never implemented and is obsolete'); + Deprecation::notice('4.0', 'SS_Database::getConnect was never implemented and is obsolete'); } /** - * @deprecated since version 3.3 Use Convert::raw2sql($string, true) instead + * @deprecated since version 4.0 Use Convert::raw2sql($string, true) instead */ public function prepStringForDB($string) { - Deprecation::notice('3.3', 'Use Convert::raw2sql($string, true) instead'); + Deprecation::notice('4.0', 'Use Convert::raw2sql($string, true) instead'); return $this->quoteString($string); } /** - * @deprecated since version 3.3 Use dropSelectedDatabase instead + * @deprecated since version 4.0 Use dropSelectedDatabase instead */ public function dropDatabase() { - Deprecation::notice('3.3', 'Use dropSelectedDatabase instead'); + Deprecation::notice('4.0', 'Use dropSelectedDatabase instead'); $this->dropSelectedDatabase(); } /** - * @deprecated since version 3.3 Use databaseList instead + * @deprecated since version 4.0 Use databaseList instead */ public function allDatabaseNames() { - Deprecation::notice('3.3', 'Use databaseList instead'); + Deprecation::notice('4.0', 'Use databaseList instead'); return $this->databaseList(); } /** - * @deprecated since version 3.3 Use DB::create_table instead + * @deprecated since version 4.0 Use DB::create_table instead */ public function createTable($table, $fields = null, $indexes = null, $options = null, $advancedOptions = null) { - Deprecation::notice('3.3', 'Use DB::create_table instead'); + Deprecation::notice('4.0', 'Use DB::create_table instead'); return $this->getSchemaManager()->createTable($table, $fields, $indexes, $options, $advancedOptions); } /** - * @deprecated since version 3.3 Use DB::get_schema()->alterTable() instead + * @deprecated since version 4.0 Use DB::get_schema()->alterTable() instead */ public function alterTable($table, $newFields = null, $newIndexes = null, $alteredFields = null, $alteredIndexes = null, $alteredOptions = null, $advancedOptions = null ) { - Deprecation::notice('3.3', 'Use DB::get_schema()->alterTable() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->alterTable() instead'); return $this->getSchemaManager()->alterTable( $table, $newFields, $newIndexes, $alteredFields, $alteredIndexes, $alteredOptions, $advancedOptions @@ -752,74 +752,74 @@ abstract class SS_Database { } /** - * @deprecated since version 3.3 Use DB::get_schema()->renameTable() instead + * @deprecated since version 4.0 Use DB::get_schema()->renameTable() instead */ public function renameTable($oldTableName, $newTableName) { - Deprecation::notice('3.3', 'Use DB::get_schema()->renameTable() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->renameTable() instead'); $this->getSchemaManager()->renameTable($oldTableName, $newTableName); } /** - * @deprecated since version 3.3 Use DB::create_field() instead + * @deprecated since version 4.0 Use DB::create_field() instead */ public function createField($table, $field, $spec) { - Deprecation::notice('3.3', 'Use DB::create_field() instead'); + Deprecation::notice('4.0', 'Use DB::create_field() instead'); $this->getSchemaManager()->createField($table, $field, $spec); } /** - * @deprecated since version 3.3 Use DB::get_schema()->renameField() instead + * @deprecated since version 4.0 Use DB::get_schema()->renameField() instead */ public function renameField($tableName, $oldName, $newName) { - Deprecation::notice('3.3', 'Use DB::get_schema()->renameField() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->renameField() instead'); $this->getSchemaManager()->renameField($tableName, $oldName, $newName); } /** - * @deprecated since version 3.3 Use getSelectedDatabase instead + * @deprecated since version 4.0 Use getSelectedDatabase instead */ public function currentDatabase() { - Deprecation::notice('3.3', 'Use getSelectedDatabase instead'); + Deprecation::notice('4.0', 'Use getSelectedDatabase instead'); return $this->getSelectedDatabase(); } /** - * @deprecated since version 3.3 Use DB::field_list instead + * @deprecated since version 4.0 Use DB::field_list instead */ public function fieldList($table) { - Deprecation::notice('3.3', 'Use DB::field_list instead'); + Deprecation::notice('4.0', 'Use DB::field_list instead'); return $this->getSchemaManager()->fieldList($table); } /** - * @deprecated since version 3.3 Use DB::table_list instead + * @deprecated since version 4.0 Use DB::table_list instead */ public function tableList() { - Deprecation::notice('3.3', 'Use DB::table_list instead'); + Deprecation::notice('4.0', 'Use DB::table_list instead'); return $this->getSchemaManager()->tableList(); } /** - * @deprecated since version 3.3 Use DB::get_schema()->hasTable() instead + * @deprecated since version 4.0 Use DB::get_schema()->hasTable() instead */ public function hasTable($tableName) { - Deprecation::notice('3.3', 'Use DB::get_schema()->hasTable() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->hasTable() instead'); return $this->getSchemaManager()->hasTable($tableName); } /** - * @deprecated since version 3.3 Use DB::get_schema()->enumValuesForField() instead + * @deprecated since version 4.0 Use DB::get_schema()->enumValuesForField() instead */ public function enumValuesForField($tableName, $fieldName) { - Deprecation::notice('3.3', 'Use DB::get_schema()->enumValuesForField() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->enumValuesForField() instead'); return $this->getSchemaManager()->enumValuesForField($tableName, $fieldName); } /** - * @deprecated since version 3.3 Use Convert::raw2sql instead + * @deprecated since version 4.0 Use Convert::raw2sql instead */ public function addslashes($value) { - Deprecation::notice('3.3', 'Use Convert::raw2sql instead'); + Deprecation::notice('4.0', 'Use Convert::raw2sql instead'); return $this->escapeString($value); } @@ -842,134 +842,134 @@ abstract class SS_Database { } /** - * @deprecated since version 3.3 Use DB::get_schema()->cancelSchemaUpdate instead + * @deprecated since version 4.0 Use DB::get_schema()->cancelSchemaUpdate instead */ public function cancelSchemaUpdate() { - Deprecation::notice('3.3', 'Use DB::get_schema()->cancelSchemaUpdate instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->cancelSchemaUpdate instead'); $this->getSchemaManager()->cancelSchemaUpdate(); } /** - * @deprecated since version 3.3 Use DB::get_schema()->isSchemaUpdating() instead + * @deprecated since version 4.0 Use DB::get_schema()->isSchemaUpdating() instead */ public function isSchemaUpdating() { - Deprecation::notice('3.3', 'Use DB::get_schema()->isSchemaUpdating() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->isSchemaUpdating() instead'); return $this->getSchemaManager()->isSchemaUpdating(); } /** - * @deprecated since version 3.3 Use DB::get_schema()->doesSchemaNeedUpdating() instead + * @deprecated since version 4.0 Use DB::get_schema()->doesSchemaNeedUpdating() instead */ public function doesSchemaNeedUpdating() { - Deprecation::notice('3.3', 'Use DB::get_schema()->doesSchemaNeedUpdating() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->doesSchemaNeedUpdating() instead'); return $this->getSchemaManager()->doesSchemaNeedUpdating(); } /** - * @deprecated since version 3.3 Use DB::get_schema()->transCreateTable() instead + * @deprecated since version 4.0 Use DB::get_schema()->transCreateTable() instead */ public function transCreateTable($table, $options = null, $advanced_options = null) { - Deprecation::notice('3.3', 'Use DB::get_schema()->transCreateTable() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->transCreateTable() instead'); $this->getSchemaManager()->transCreateTable($table, $options, $advanced_options); } /** - * @deprecated since version 3.3 Use DB::get_schema()->transAlterTable() instead + * @deprecated since version 4.0 Use DB::get_schema()->transAlterTable() instead */ public function transAlterTable($table, $options, $advanced_options) { - Deprecation::notice('3.3', 'Use DB::get_schema()->transAlterTable() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->transAlterTable() instead'); $this->getSchemaManager()->transAlterTable($table, $index, $schema); } /** - * @deprecated since version 3.3 Use DB::get_schema()->transCreateField() instead + * @deprecated since version 4.0 Use DB::get_schema()->transCreateField() instead */ public function transCreateField($table, $field, $schema) { - Deprecation::notice('3.3', 'Use DB::get_schema()->transCreateField() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->transCreateField() instead'); $this->getSchemaManager()->transCreateField($table, $index, $schema); } /** - * @deprecated since version 3.3 Use DB::get_schema()->transCreateIndex() instead + * @deprecated since version 4.0 Use DB::get_schema()->transCreateIndex() instead */ public function transCreateIndex($table, $index, $schema) { - Deprecation::notice('3.3', 'Use DB::get_schema()->transCreateIndex() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->transCreateIndex() instead'); $this->getSchemaManager()->transCreateIndex($table, $index, $schema); } /** - * @deprecated since version 3.3 Use DB::get_schema()->transAlterField() instead + * @deprecated since version 4.0 Use DB::get_schema()->transAlterField() instead */ public function transAlterField($table, $field, $schema) { - Deprecation::notice('3.3', 'Use DB::get_schema()->transAlterField() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->transAlterField() instead'); $this->getSchemaManager()->transAlterField($table, $index, $schema); } /** - * @deprecated since version 3.3 Use DB::get_schema()->transAlterIndex() instead + * @deprecated since version 4.0 Use DB::get_schema()->transAlterIndex() instead */ public function transAlterIndex($table, $index, $schema) { - Deprecation::notice('3.3', 'Use DB::get_schema()->transAlterIndex() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->transAlterIndex() instead'); $this->getSchemaManager()->transAlterIndex($table, $index, $schema); } /** - * @deprecated since version 3.3 Use DB::require_table() instead + * @deprecated since version 4.0 Use DB::require_table() instead */ public function requireTable($table, $fieldSchema = null, $indexSchema = null, $hasAutoIncPK = true, $options = array(), $extensions = false ) { - Deprecation::notice('3.3', 'Use DB::require_table() instead'); + Deprecation::notice('4.0', 'Use DB::require_table() instead'); return $this->getSchemaManager()->requireTable( $table, $fieldSchema, $indexSchema, $hasAutoIncPK, $options, $extensions ); } /** - * @deprecated since version 3.3 Use DB::dont_require_table() instead + * @deprecated since version 4.0 Use DB::dont_require_table() instead */ public function dontRequireTable($table) { - Deprecation::notice('3.3', 'Use DB::dont_require_table() instead'); + Deprecation::notice('4.0', 'Use DB::dont_require_table() instead'); $this->getSchemaManager()->dontRequireTable($table); } /** - * @deprecated since version 3.3 Use DB::require_index() instead + * @deprecated since version 4.0 Use DB::require_index() instead */ public function requireIndex($table, $index, $spec) { - Deprecation::notice('3.3', 'Use DB::require_index() instead'); + Deprecation::notice('4.0', 'Use DB::require_index() instead'); $this->getSchemaManager()->requireIndex($table, $index, $spec); } /** - * @deprecated since version 3.3 Use DB::get_schema()->hasField() instead + * @deprecated since version 4.0 Use DB::get_schema()->hasField() instead */ public function hasField($tableName, $fieldName) { - Deprecation::notice('3.3', 'Use DB::get_schema()->hasField() instead'); + Deprecation::notice('4.0', 'Use DB::get_schema()->hasField() instead'); return $this->getSchemaManager()->hasField($tableName, $fieldName); } /** - * @deprecated since version 3.3 Use DB::require_field() instead + * @deprecated since version 4.0 Use DB::require_field() instead */ public function requireField($table, $field, $spec) { - Deprecation::notice('3.3', 'Use DB::require_field() instead'); + Deprecation::notice('4.0', 'Use DB::require_field() instead'); $this->getSchemaManager()->requireField($table, $field, $spec); } /** - * @deprecated since version 3.3 Use DB::dont_require_field() instead + * @deprecated since version 4.0 Use DB::dont_require_field() instead */ public function dontRequireField($table, $fieldName) { - Deprecation::notice('3.3', 'Use DB::dont_require_field() instead'); + Deprecation::notice('4.0', 'Use DB::dont_require_field() instead'); $this->getSchemaManager()->dontRequireField($table, $fieldName); } /** - * @deprecated since version 3.3 Use DB::build_sql() instead + * @deprecated since version 4.0 Use DB::build_sql() instead */ public function sqlQueryToString(SQLExpression $query, &$parameters = array()) { - Deprecation::notice('3.3', 'Use DB::build_sql() instead'); + Deprecation::notice('4.0', 'Use DB::build_sql() instead'); return $this->getQueryBuilder()->buildSQL($query, $parameters); } } diff --git a/model/fieldtypes/Currency.php b/model/fieldtypes/Currency.php index 4541e1fcf..0f5e11166 100644 --- a/model/fieldtypes/Currency.php +++ b/model/fieldtypes/Currency.php @@ -60,12 +60,12 @@ class Currency extends Decimal { } /** - * @deprecated 3.2 Use the "Currency.currency_symbol" config setting instead + * @deprecated 4.0 Use the "Currency.currency_symbol" config setting instead * @param [type] $value [description] */ public static function setCurrencySymbol($value) { - Deprecation::notice('3.2', 'Use the "Currency.currency_symbol" config setting instead'); + Deprecation::notice('4.0', 'Use the "Currency.currency_symbol" config setting instead'); Currency::config()->currency_symbol = $value; } } diff --git a/model/queries/SQLConditionalExpression.php b/model/queries/SQLConditionalExpression.php index 24afbac16..e917e0b43 100644 --- a/model/queries/SQLConditionalExpression.php +++ b/model/queries/SQLConditionalExpression.php @@ -246,7 +246,7 @@ abstract class SQLConditionalExpression extends SQLExpression { public function getJoins(&$parameters = array()) { if(func_num_args() == 0) { Deprecation::notice( - '3.2', + '4.0', 'SQLConditionalExpression::getJoins() now may produce parameters which are necessary to execute this query' ); diff --git a/model/queries/SQLExpression.php b/model/queries/SQLExpression.php index 797b688c9..523b6a21b 100644 --- a/model/queries/SQLExpression.php +++ b/model/queries/SQLExpression.php @@ -24,18 +24,18 @@ abstract class SQLExpression { protected $replacementsNew = array(); /** - * @deprecated since version 3.2 + * @deprecated since version 4.0 */ public function __get($field) { - Deprecation::notice('3.2', 'use get{Field} to get the necessary protected field\'s value'); + Deprecation::notice('4.0', 'use get{Field} to get the necessary protected field\'s value'); return $this->$field; } /** - * @deprecated since version 3.2 + * @deprecated since version 4.0 */ public function __set($field, $value) { - Deprecation::notice('3.2', 'use set{Field} to set the necessary protected field\'s value'); + Deprecation::notice('4.0', 'use set{Field} to set the necessary protected field\'s value'); return $this->$field = $value; } diff --git a/parsers/BBCodeParser.php b/parsers/BBCodeParser.php index a1ba19582..d93b88160 100644 --- a/parsers/BBCodeParser.php +++ b/parsers/BBCodeParser.php @@ -36,10 +36,10 @@ class BBCodeParser extends TextParser { private static $smilies_location = null; /** - * @deprecated 3.2 Use the "BBCodeParser.smilies_location" config setting instead + * @deprecated 4.0 Use the "BBCodeParser.smilies_location" config setting instead */ public static function smilies_location() { - Deprecation::notice('3.2', 'Use the "BBCodeParser.smilies_location" config setting instead'); + Deprecation::notice('4.0', 'Use the "BBCodeParser.smilies_location" config setting instead'); if(!BBCodeParser::$smilies_location) { return FRAMEWORK_DIR . '/images/smilies'; } @@ -47,42 +47,42 @@ class BBCodeParser extends TextParser { } /** - * @deprecated 3.2 Use the "BBCodeParser.smilies_location" config setting instead + * @deprecated 4.0 Use the "BBCodeParser.smilies_location" config setting instead */ public static function set_icon_folder($path) { - Deprecation::notice('3.2', 'Use the "BBCodeParser.smilies_location" config setting instead'); + Deprecation::notice('4.0', 'Use the "BBCodeParser.smilies_location" config setting instead'); static::config()->smilies_location = $path; } /** - * @deprecated 3.2 Use the "BBCodeParser.autolink_urls" config setting instead + * @deprecated 4.0 Use the "BBCodeParser.autolink_urls" config setting instead */ public static function autolinkUrls() { - Deprecation::notice('3.2', 'Use the "BBCodeParser.autolink_urls" config setting instead'); + Deprecation::notice('4.0', 'Use the "BBCodeParser.autolink_urls" config setting instead'); return static::config()->autolink_urls; } /** - * @deprecated 3.2 Use the "BBCodeParser.autolink_urls" config setting instead + * @deprecated 4.0 Use the "BBCodeParser.autolink_urls" config setting instead */ public static function disable_autolink_urls($autolink = false) { - Deprecation::notice('3.2', 'Use the "BBCodeParser.autolink_urls" config setting instead'); + Deprecation::notice('4.0', 'Use the "BBCodeParser.autolink_urls" config setting instead'); static::config()->autolink_urls = $autolink; } /** - * @deprecated 3.2 Use the "BBCodeParser.allow_smilies" config setting instead + * @deprecated 4.0 Use the "BBCodeParser.allow_smilies" config setting instead */ public static function smiliesAllowed() { - Deprecation::notice('3.2', 'Use the "BBCodeParser.allow_smilies" config setting instead'); + Deprecation::notice('4.0', 'Use the "BBCodeParser.allow_smilies" config setting instead'); return static::config()->allow_smilies; } /** - * @deprecated 3.2 Use the "BBCodeParser.allow_smilies" config setting instead + * @deprecated 4.0 Use the "BBCodeParser.allow_smilies" config setting instead */ public static function enable_smilies() { - Deprecation::notice('3.2', 'Use the "BBCodeParser.allow_smilies" config setting instead'); + Deprecation::notice('4.0', 'Use the "BBCodeParser.allow_smilies" config setting instead'); static::config()->allow_similies = true; } diff --git a/security/Member.php b/security/Member.php index b6401881b..86c34b821 100644 --- a/security/Member.php +++ b/security/Member.php @@ -202,10 +202,10 @@ class Member extends DataObject implements TemplateGlobalProvider { private static $temp_id_lifetime = 259200; /** - * @deprecated 3.2 Use the "Member.session_regenerate_id" config setting instead + * @deprecated 4.0 Use the "Member.session_regenerate_id" config setting instead */ public static function set_session_regenerate_id($bool) { - Deprecation::notice('3.2', 'Use the "Member.session_regenerate_id" config setting instead'); + Deprecation::notice('4.0', 'Use the "Member.session_regenerate_id" config setting instead'); self::config()->session_regenerate_id = $bool; } @@ -275,11 +275,11 @@ class Member extends DataObject implements TemplateGlobalProvider { * RewriteCond %{HTTP_COOKIE} !SS_LOGGED_IN=1 * * - * @deprecated 3.2 Use the "Member.login_marker_cookie" config setting instead + * @deprecated 4.0 Use the "Member.login_marker_cookie" config setting instead * @param $cookieName string The name of the cookie to set. */ public static function set_login_marker_cookie($cookieName) { - Deprecation::notice('3.2', 'Use the "Member.login_marker_cookie" config setting instead'); + Deprecation::notice('4.0', 'Use the "Member.login_marker_cookie" config setting instead'); self::config()->login_marker_cookie = $cookieName; } @@ -369,11 +369,11 @@ class Member extends DataObject implements TemplateGlobalProvider { * Get the field used for uniquely identifying a member * in the database. {@see Member::$unique_identifier_field} * - * @deprecated 3.2 Use the "Member.unique_identifier_field" config setting instead + * @deprecated 4.0 Use the "Member.unique_identifier_field" config setting instead * @return string */ public static function get_unique_identifier_field() { - Deprecation::notice('3.2', 'Use the "Member.unique_identifier_field" config setting instead'); + Deprecation::notice('4.0', 'Use the "Member.unique_identifier_field" config setting instead'); return Member::config()->unique_identifier_field; } @@ -381,11 +381,11 @@ class Member extends DataObject implements TemplateGlobalProvider { * Set the field used for uniquely identifying a member * in the database. {@see Member::$unique_identifier_field} * - * @deprecated 3.2 Use the "Member.unique_identifier_field" config setting instead + * @deprecated 4.0 Use the "Member.unique_identifier_field" config setting instead * @param $field The field name to set as the unique field */ public static function set_unique_identifier_field($field) { - Deprecation::notice('3.2', 'Use the "Member.unique_identifier_field" config setting instead'); + Deprecation::notice('4.0', 'Use the "Member.unique_identifier_field" config setting instead'); Member::config()->unique_identifier_field = $field; } @@ -407,20 +407,20 @@ class Member extends DataObject implements TemplateGlobalProvider { * Set the number of days that a password should be valid for. * Set to null (the default) to have passwords never expire. * - * @deprecated 3.2 Use the "Member.password_expiry_days" config setting instead + * @deprecated 4.0 Use the "Member.password_expiry_days" config setting instead */ public static function set_password_expiry($days) { - Deprecation::notice('3.2', 'Use the "Member.password_expiry_days" config setting instead'); + Deprecation::notice('4.0', 'Use the "Member.password_expiry_days" config setting instead'); self::config()->password_expiry_days = $days; } /** * Configure the security system to lock users out after this many incorrect logins * - * @deprecated 3.2 Use the "Member.lock_out_after_incorrect_logins" config setting instead + * @deprecated 4.0 Use the "Member.lock_out_after_incorrect_logins" config setting instead */ public static function lock_out_after_incorrect_logins($numLogins) { - Deprecation::notice('3.2', 'Use the "Member.lock_out_after_incorrect_logins" config setting instead'); + Deprecation::notice('4.0', 'Use the "Member.lock_out_after_incorrect_logins" config setting instead'); self::config()->lock_out_after_incorrect_logins = $numLogins; } diff --git a/security/Permission.php b/security/Permission.php index 87209c147..5f81d6450 100644 --- a/security/Permission.php +++ b/security/Permission.php @@ -558,26 +558,26 @@ class Permission extends DataObject implements TemplateGlobalProvider { /** * add a permission represented by the $code to the {@link slef::$hidden_permissions} list * - * @deprecated 3.2 Use "Permission.hidden_permissions" config setting instead + * @deprecated 4.0 Use "Permission.hidden_permissions" config setting instead * @param $code string - the permissions code * @return void */ public static function add_to_hidden_permissions($code){ if(is_string($codes)) $codes = array($codes); - Deprecation::notice('3.2', 'Use "Permission.hidden_permissions" config setting instead'); + Deprecation::notice('4.0', 'Use "Permission.hidden_permissions" config setting instead'); Config::inst()->update('Permission', 'hidden_permissions', $codes); } /** * remove a permission represented by the $code from the {@link slef::$hidden_permissions} list * - * @deprecated 3.2 Use "Permission.hidden_permissions" config setting instead + * @deprecated 4.0 Use "Permission.hidden_permissions" config setting instead * @param $code string - the permissions code * @return void */ public static function remove_from_hidden_permissions($code){ if(is_string($codes)) $codes = array($codes); - Deprecation::notice('3.2', 'Use "Permission.hidden_permissions" config setting instead'); + Deprecation::notice('4.0', 'Use "Permission.hidden_permissions" config setting instead'); Config::inst()->remove('Permission', 'hidden_permissions', $codes); } @@ -587,12 +587,12 @@ class Permission extends DataObject implements TemplateGlobalProvider { * Permissions can be grouped by nesting arrays. Scalar values are always * treated as permissions. * - * @deprecated 3.2 Use "Permission.declared_permissions" config setting instead + * @deprecated 4.0 Use "Permission.declared_permissions" config setting instead * @param array $permArray A (possibly nested) array of permissions to * declare for the system. */ public static function declare_permissions($permArray) { - Deprecation::notice('3.2', 'Use "Permission.declared_permissions" config setting instead'); + Deprecation::notice('4.0', 'Use "Permission.declared_permissions" config setting instead'); self::config()->declared_permissions = $permArray; } diff --git a/security/Security.php b/security/Security.php index dbc48da6c..a17a4bc75 100644 --- a/security/Security.php +++ b/security/Security.php @@ -132,10 +132,10 @@ class Security extends Controller implements TemplateGlobalProvider { /** * Get location of word list file * - * @deprecated 3.2 Use the "Security.word_list" config setting instead + * @deprecated 4.0 Use the "Security.word_list" config setting instead */ public static function get_word_list() { - Deprecation::notice('3.2', 'Use the "Security.word_list" config setting instead'); + Deprecation::notice('4.0', 'Use the "Security.word_list" config setting instead'); return self::config()->word_list; } @@ -165,22 +165,22 @@ class Security extends Controller implements TemplateGlobalProvider { /** * Set location of word list file * - * @deprecated 3.2 Use the "Security.word_list" config setting instead + * @deprecated 4.0 Use the "Security.word_list" config setting instead * @param string $wordListFile Location of word list file */ public static function set_word_list($wordListFile) { - Deprecation::notice('3.2', 'Use the "Security.word_list" config setting instead'); + Deprecation::notice('4.0', 'Use the "Security.word_list" config setting instead'); self::config()->word_list = $wordListFile; } /** * Set the default message set used in permissions failures. * - * @deprecated 3.2 Use the "Security.default_message_set" config setting instead + * @deprecated 4.0 Use the "Security.default_message_set" config setting instead * @param string|array $messageSet */ public static function set_default_message_set($messageSet) { - Deprecation::notice('3.2', 'Use the "Security.default_message_set" config setting instead'); + Deprecation::notice('4.0', 'Use the "Security.default_message_set" config setting instead'); self::config()->default_message_set = $messageSet; } @@ -888,12 +888,12 @@ class Security extends Controller implements TemplateGlobalProvider { * This prevents sharing of the session across several sites in the * domain. * - * @deprecated 3.2 Use the "Security.strict_path_checking" config setting instead + * @deprecated 4.0 Use the "Security.strict_path_checking" config setting instead * @param boolean $strictPathChecking To enable or disable strict patch * checking. */ public static function setStrictPathChecking($strictPathChecking) { - Deprecation::notice('3.2', 'Use the "Security.strict_path_checking" config setting instead'); + Deprecation::notice('4.0', 'Use the "Security.strict_path_checking" config setting instead'); self::config()->strict_path_checking = $strictPathChecking; } @@ -901,11 +901,11 @@ class Security extends Controller implements TemplateGlobalProvider { /** * Get strict path checking * - * @deprecated 3.2 Use the "Security.strict_path_checking" config setting instead + * @deprecated 4.0 Use the "Security.strict_path_checking" config setting instead * @return boolean Status of strict path checking */ public static function getStrictPathChecking() { - Deprecation::notice('3.2', 'Use the "Security.strict_path_checking" config setting instead'); + Deprecation::notice('4.0', 'Use the "Security.strict_path_checking" config setting instead'); return self::config()->strict_path_checking; } @@ -913,23 +913,23 @@ class Security extends Controller implements TemplateGlobalProvider { /** * Set the password encryption algorithm * - * @deprecated 3.2 Use the "Security.password_encryption_algorithm" config setting instead + * @deprecated 4.0 Use the "Security.password_encryption_algorithm" config setting instead * @param string $algorithm One of the available password encryption * algorithms determined by {@link Security::get_encryption_algorithms()} * @return bool Returns TRUE if the passed algorithm was valid, otherwise FALSE. */ public static function set_password_encryption_algorithm($algorithm) { - Deprecation::notice('3.2', 'Use the "Security.password_encryption_algorithm" config setting instead'); + Deprecation::notice('4.0', 'Use the "Security.password_encryption_algorithm" config setting instead'); self::config()->password_encryption_algorithm = $algorithm; } /** - * @deprecated 3.2 Use the "Security.password_encryption_algorithm" config setting instead + * @deprecated 4.0 Use the "Security.password_encryption_algorithm" config setting instead * @return String */ public static function get_password_encryption_algorithm() { - Deprecation::notice('3.2', 'Use the "Security.password_encryption_algorithm" config setting instead'); + Deprecation::notice('4.0', 'Use the "Security.password_encryption_algorithm" config setting instead'); return self::config()->password_encryption_algorithm; } @@ -1022,20 +1022,20 @@ class Security extends Controller implements TemplateGlobalProvider { * Enable or disable recording of login attempts * through the {@link LoginRecord} object. * - * @deprecated 3.2 Use the "Security.login_recording" config setting instead + * @deprecated 4.0 Use the "Security.login_recording" config setting instead * @param boolean $bool */ public static function set_login_recording($bool) { - Deprecation::notice('3.2', 'Use the "Security.login_recording" config setting instead'); + Deprecation::notice('4.0', 'Use the "Security.login_recording" config setting instead'); self::$login_recording = (bool)$bool; } /** - * @deprecated 3.2 Use the "Security.login_recording" config setting instead + * @deprecated 4.0 Use the "Security.login_recording" config setting instead * @return boolean */ public static function login_recording() { - Deprecation::notice('3.2', 'Use the "Security.login_recording" config setting instead'); + Deprecation::notice('4.0', 'Use the "Security.login_recording" config setting instead'); return self::$login_recording; } @@ -1049,20 +1049,20 @@ class Security extends Controller implements TemplateGlobalProvider { private static $default_login_dest = ""; /** - * @deprecated 3.2 Use the "Security.default_login_dest" config setting instead + * @deprecated 4.0 Use the "Security.default_login_dest" config setting instead */ public static function set_default_login_dest($dest) { - Deprecation::notice('3.2', 'Use the "Security.default_login_dest" config setting instead'); + Deprecation::notice('4.0', 'Use the "Security.default_login_dest" config setting instead'); self::config()->default_login_dest = $dest; } /** * Get the default login dest. * - * @deprecated 3.2 Use the "Security.default_login_dest" config setting instead + * @deprecated 4.0 Use the "Security.default_login_dest" config setting instead */ public static function default_login_dest() { - Deprecation::notice('3.2', 'Use the "Security.default_login_dest" config setting instead'); + Deprecation::notice('4.0', 'Use the "Security.default_login_dest" config setting instead'); return self::config()->default_login_dest; } @@ -1085,10 +1085,10 @@ class Security extends Controller implements TemplateGlobalProvider { /** * Set a custom log-in URL if you have built your own log-in page. * - * @deprecated 3.2 Use the "Security.login_url" config setting instead. + * @deprecated 4.0 Use the "Security.login_url" config setting instead. */ public static function set_login_url($loginUrl) { - Deprecation::notice('3.2', 'Use the "Security.login_url" config setting instead'); + Deprecation::notice('4.0', 'Use the "Security.login_url" config setting instead'); self::config()->update("login_url", $loginUrl); } diff --git a/tests/email/EmailTest.php b/tests/email/EmailTest.php index f7f5d86f0..4e9dfaf3c 100644 --- a/tests/email/EmailTest.php +++ b/tests/email/EmailTest.php @@ -111,7 +111,7 @@ class EmailTest extends SapphireTest { $oldProject = $project; $project = 'emailtest'; - Email::set_mailer(new EmailTest_Mailer()); + Injector::inst()->registerService(new EmailTest_Mailer(), 'Mailer'); $email = new Email( 'from@example.com', 'to@example.com', @@ -160,7 +160,7 @@ class EmailTest extends SapphireTest { $oldProject = $project; $project = 'emailtest'; - Email::set_mailer(new EmailTest_Mailer()); + Injector::inst()->registerService(new EmailTest_Mailer(), 'Mailer'); $email = new Email( 'from@example.com', 'to@example.com', diff --git a/tests/model/DataQueryTest.php b/tests/model/DataQueryTest.php index 57ba12211..d73ca7818 100644 --- a/tests/model/DataQueryTest.php +++ b/tests/model/DataQueryTest.php @@ -199,7 +199,7 @@ class DataQueryTest extends SapphireTest { public function testComparisonClauseInt() { DB::query("INSERT INTO \"DataQueryTest_F\" (\"SortOrder\") VALUES (2)"); $query = new DataQuery('DataQueryTest_F'); - $query->where(DB::getConn()->comparisonClause('"SortOrder"', '2')); + $query->where(DB::get_conn()->comparisonClause('"SortOrder"', '2')); $this->assertGreaterThan(0, $query->count(), "Couldn't find SortOrder"); $this->resetDBSchema(true); } @@ -207,7 +207,7 @@ class DataQueryTest extends SapphireTest { public function testComparisonClauseDateFull() { DB::query("INSERT INTO \"DataQueryTest_F\" (\"MyDate\") VALUES ('1988-03-04 06:30')"); $query = new DataQuery('DataQueryTest_F'); - $query->where(DB::getConn()->comparisonClause('"MyDate"', '1988-03-04%')); + $query->where(DB::get_conn()->comparisonClause('"MyDate"', '1988-03-04%')); $this->assertGreaterThan(0, $query->count(), "Couldn't find MyDate"); $this->resetDBSchema(true); } @@ -215,7 +215,7 @@ class DataQueryTest extends SapphireTest { public function testComparisonClauseDateStartsWith() { DB::query("INSERT INTO \"DataQueryTest_F\" (\"MyDate\") VALUES ('1988-03-04 06:30')"); $query = new DataQuery('DataQueryTest_F'); - $query->where(DB::getConn()->comparisonClause('"MyDate"', '1988%')); + $query->where(DB::get_conn()->comparisonClause('"MyDate"', '1988%')); $this->assertGreaterThan(0, $query->count(), "Couldn't find MyDate"); $this->resetDBSchema(true); } @@ -223,7 +223,7 @@ class DataQueryTest extends SapphireTest { public function testComparisonClauseDateStartsPartial() { DB::query("INSERT INTO \"DataQueryTest_F\" (\"MyDate\") VALUES ('1988-03-04 06:30')"); $query = new DataQuery('DataQueryTest_F'); - $query->where(DB::getConn()->comparisonClause('"MyDate"', '%03-04%')); + $query->where(DB::get_conn()->comparisonClause('"MyDate"', '%03-04%')); $this->assertGreaterThan(0, $query->count(), "Couldn't find MyDate"); $this->resetDBSchema(true); } @@ -231,7 +231,7 @@ class DataQueryTest extends SapphireTest { public function testComparisonClauseTextCaseInsensitive() { DB::query("INSERT INTO \"DataQueryTest_F\" (\"MyString\") VALUES ('HelloWorld')"); $query = new DataQuery('DataQueryTest_F'); - $query->where(DB::getConn()->comparisonClause('"MyString"', 'helloworld')); + $query->where(DB::get_conn()->comparisonClause('"MyString"', 'helloworld')); $this->assertGreaterThan(0, $query->count(), "Couldn't find MyString"); $this->resetDBSchema(true); } @@ -239,11 +239,11 @@ class DataQueryTest extends SapphireTest { public function testComparisonClauseTextCaseSensitive() { DB::query("INSERT INTO \"DataQueryTest_F\" (\"MyString\") VALUES ('HelloWorld')"); $query = new DataQuery('DataQueryTest_F'); - $query->where(DB::getConn()->comparisonClause('"MyString"', 'HelloWorld', false, false, true)); + $query->where(DB::get_conn()->comparisonClause('"MyString"', 'HelloWorld', false, false, true)); $this->assertGreaterThan(0, $query->count(), "Couldn't find MyString"); $query2 = new DataQuery('DataQueryTest_F'); - $query2->where(DB::getConn()->comparisonClause('"MyString"', 'helloworld', false, false, true)); + $query2->where(DB::get_conn()->comparisonClause('"MyString"', 'helloworld', false, false, true)); $this->assertEquals(0, $query2->count(), "Found mystring. Shouldn't be able too."); $this->resetDBSchema(true); } diff --git a/tests/model/ManyManyListTest.php b/tests/model/ManyManyListTest.php index 676c420f6..1e18f844e 100644 --- a/tests/model/ManyManyListTest.php +++ b/tests/model/ManyManyListTest.php @@ -250,13 +250,13 @@ class ManyManyListTest extends SapphireTest { // ensure that ManyManyListTest_ExtraFields_Clients.ValueCurrency is // selected. - $db = DB::getConn(); + $db = DB::get_conn(); $expected = 'SELECT DISTINCT "ManyManyListTest_ExtraFields_Clients"."WorthCurrency",' .' "ManyManyListTest_ExtraFields_Clients"."WorthAmount", "ManyManyListTest_ExtraFields_Clients"."Reference",' .' "ManyManyListTest_ExtraFields"."ClassName", "ManyManyListTest_ExtraFields"."LastEdited",' .' "ManyManyListTest_ExtraFields"."Created", "ManyManyListTest_ExtraFields"."ID",' .' CASE WHEN "ManyManyListTest_ExtraFields"."ClassName" IS NOT NULL THEN' - .' "ManyManyListTest_ExtraFields"."ClassName" ELSE '. $db->prepStringForDB('ManyManyListTest_ExtraFields') + .' "ManyManyListTest_ExtraFields"."ClassName" ELSE '. Convert::raw2sql('ManyManyListTest_ExtraFields', true) .' END AS "RecordClassName" FROM "ManyManyListTest_ExtraFields" INNER JOIN' .' "ManyManyListTest_ExtraFields_Clients" ON' .' "ManyManyListTest_ExtraFields_Clients"."ManyManyListTest_ExtraFieldsID" =' diff --git a/view/SSViewer.php b/view/SSViewer.php index 99ca40f34..8ae373881 100644 --- a/view/SSViewer.php +++ b/view/SSViewer.php @@ -597,20 +597,20 @@ class SSViewer implements Flushable { * Set whether HTML comments indicating the source .SS file used to render this page should be * included in the output. This is enabled by default * - * @deprecated 3.2 Use the "SSViewer.source_file_comments" config setting instead + * @deprecated 4.0 Use the "SSViewer.source_file_comments" config setting instead * @param boolean $val */ public static function set_source_file_comments($val) { - Deprecation::notice('3.2', 'Use the "SSViewer.source_file_comments" config setting instead'); + Deprecation::notice('4.0', 'Use the "SSViewer.source_file_comments" config setting instead'); Config::inst()->update('SSViewer', 'source_file_comments', $val); } /** - * @deprecated 3.2 Use the "SSViewer.source_file_comments" config setting instead + * @deprecated 4.0 Use the "SSViewer.source_file_comments" config setting instead * @return boolean */ public static function get_source_file_comments() { - Deprecation::notice('3.2', 'Use the "SSViewer.source_file_comments" config setting instead'); + Deprecation::notice('4.0', 'Use the "SSViewer.source_file_comments" config setting instead'); return Config::inst()->get('SSViewer', 'source_file_comments'); } @@ -684,20 +684,20 @@ class SSViewer implements Flushable { } /** - * @deprecated 3.2 Use the "SSViewer.theme" config setting instead + * @deprecated 4.0 Use the "SSViewer.theme" config setting instead * @param string $theme The "base theme" name (without underscores). */ public static function set_theme($theme) { - Deprecation::notice('3.2', 'Use the "SSViewer.theme" config setting instead'); + Deprecation::notice('4.0', 'Use the "SSViewer.theme" config setting instead'); Config::inst()->update('SSViewer', 'theme', $theme); } /** - * @deprecated 3.2 Use the "SSViewer.theme" config setting instead + * @deprecated 4.0 Use the "SSViewer.theme" config setting instead * @return string */ public static function current_theme() { - Deprecation::notice('3.2', 'Use the "SSViewer.theme" config setting instead'); + Deprecation::notice('4.0', 'Use the "SSViewer.theme" config setting instead'); return Config::inst()->get('SSViewer', 'theme'); } @@ -736,10 +736,11 @@ class SSViewer implements Flushable { } /** + * @deprecated since version 4.0 * @return string */ public static function current_custom_theme(){ - Deprecation::notice('3.2', 'Use the "SSViewer.theme" and "SSViewer.theme_enabled" config settings instead'); + Deprecation::notice('4.0', 'Use the "SSViewer.theme" and "SSViewer.theme_enabled" config settings instead'); return Config::inst()->get('SSViewer', 'theme_enabled') ? Config::inst()->get('SSViewer', 'theme') : null; } @@ -865,31 +866,31 @@ class SSViewer implements Flushable { * links: "". This is useful if you're generating a * page that will be saved to a .php file and may be accessed from different URLs. * - * @deprecated 3.2 Use the "SSViewer.rewrite_hash_links" config setting instead + * @deprecated 4.0 Use the "SSViewer.rewrite_hash_links" config setting instead * @param string $optionName * @param mixed $optionVal */ public static function setOption($optionName, $optionVal) { if($optionName == 'rewriteHashlinks') { - Deprecation::notice('3.2', 'Use the "SSViewer.rewrite_hash_links" config setting instead'); + Deprecation::notice('4.0', 'Use the "SSViewer.rewrite_hash_links" config setting instead'); Config::inst()->update('SSViewer', 'rewrite_hash_links', $optionVal); } else { - Deprecation::notice('3.2', 'Use the "SSViewer.' . $optionName . '" config setting instead'); + Deprecation::notice('4.0', 'Use the "SSViewer.' . $optionName . '" config setting instead'); Config::inst()->update('SSViewer', $optionName, $optionVal); } } /** - * @deprecated 3.2 Use the "SSViewer.rewrite_hash_links" config setting instead + * @deprecated 4.0 Use the "SSViewer.rewrite_hash_links" config setting instead * @param string * @return mixed */ public static function getOption($optionName) { if($optionName == 'rewriteHashlinks') { - Deprecation::notice('3.2', 'Use the "SSViewer.rewrite_hash_links" config setting instead'); + Deprecation::notice('4.0', 'Use the "SSViewer.rewrite_hash_links" config setting instead'); return Config::inst()->get('SSViewer', 'rewrite_hash_links'); } else { - Deprecation::notice('3.2', 'Use the "SSViewer.' . $optionName . '" config setting instead'); + Deprecation::notice('4.0', 'Use the "SSViewer.' . $optionName . '" config setting instead'); return Config::inst()->get('SSViewer', $optionName); } } From d9c7d4538b8aca8a203d142a0541c15c2a4e3c0b Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Fri, 19 Jun 2015 15:56:12 +1200 Subject: [PATCH 031/110] Update user help link for 3.2 --- admin/code/LeftAndMain.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/code/LeftAndMain.php b/admin/code/LeftAndMain.php index 8a01de9ad..7b153d1d1 100644 --- a/admin/code/LeftAndMain.php +++ b/admin/code/LeftAndMain.php @@ -76,7 +76,7 @@ class LeftAndMain extends Controller implements PermissionProvider { * @config * @var string */ - private static $help_link = 'http://userhelp.silverstripe.org/framework/en/3.1'; + private static $help_link = 'http://userhelp.silverstripe.org/en/3.2/'; /** * @var array From e32b06846b476ef1403508039123e69fe8d52087 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Fri, 19 Jun 2015 17:43:05 +1200 Subject: [PATCH 032/110] Revert "GridFieldDeleteAction missing button text without icons" This reverts commit 265a34141ec758efec638e722a0a397f9939e57f. --- forms/gridfield/GridFieldDeleteAction.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/forms/gridfield/GridFieldDeleteAction.php b/forms/gridfield/GridFieldDeleteAction.php index 9373a27aa..cba6b1327 100644 --- a/forms/gridfield/GridFieldDeleteAction.php +++ b/forms/gridfield/GridFieldDeleteAction.php @@ -107,7 +107,7 @@ class GridFieldDeleteAction implements GridField_ColumnProvider, GridField_Actio if($this->removeRelation) { if(!$record->canEdit()) return; - $field = GridField_FormAction::create($gridField, 'UnlinkRelation'.$record->ID, _t('GridAction.UnlinkRelation', "Unlink"), + $field = GridField_FormAction::create($gridField, 'UnlinkRelation'.$record->ID, false, "unlinkrelation", array('RecordID' => $record->ID)) ->addExtraClass('gridfield-button-unlink') ->setAttribute('title', _t('GridAction.UnlinkRelation', "Unlink")) @@ -115,14 +115,13 @@ class GridFieldDeleteAction implements GridField_ColumnProvider, GridField_Actio } else { if(!$record->canDelete()) return; - $field = GridField_FormAction::create($gridField, 'DeleteRecord'.$record->ID, _t('GridAction.Delete', "Delete"), "deleterecord", + $field = GridField_FormAction::create($gridField, 'DeleteRecord'.$record->ID, false, "deleterecord", array('RecordID' => $record->ID)) ->addExtraClass('gridfield-button-delete') ->setAttribute('title', _t('GridAction.Delete', "Delete")) ->setAttribute('data-icon', 'cross-circle') ->setDescription(_t('GridAction.DELETE_DESCRIPTION','Delete')); } - return $field->Field(); } From bc8bc7d0c51cb7bb740f54e7d279348a1c8d3fba Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Fri, 19 Jun 2015 18:18:00 +1200 Subject: [PATCH 033/110] Update translations --- admin/javascript/lang/src/cs.js | 6 ++++++ admin/javascript/lang/src/de.js | 6 ++++++ admin/javascript/lang/src/eo.js | 6 ++++++ admin/javascript/lang/src/es.js | 6 ++++++ admin/javascript/lang/src/fi.js | 6 ++++++ admin/javascript/lang/src/fr.js | 6 ++++++ admin/javascript/lang/src/id.js | 6 ++++++ admin/javascript/lang/src/id_ID.js | 6 ++++++ admin/javascript/lang/src/it.js | 6 ++++++ admin/javascript/lang/src/ja.js | 6 ++++++ admin/javascript/lang/src/lt.js | 6 ++++++ admin/javascript/lang/src/mi.js | 6 ++++++ admin/javascript/lang/src/nb.js | 6 ++++++ admin/javascript/lang/src/nl.js | 6 ++++++ admin/javascript/lang/src/pl.js | 6 ++++++ admin/javascript/lang/src/ro.js | 6 ++++++ admin/javascript/lang/src/ru.js | 6 ++++++ admin/javascript/lang/src/sk.js | 6 ++++++ admin/javascript/lang/src/sl.js | 6 ++++++ admin/javascript/lang/src/sr.js | 6 ++++++ admin/javascript/lang/src/sr_RS.js | 6 ++++++ admin/javascript/lang/src/sv.js | 6 ++++++ admin/javascript/lang/src/zh.js | 6 ++++++ lang/en.yml | 19 +++++++++++-------- 24 files changed, 149 insertions(+), 8 deletions(-) diff --git a/admin/javascript/lang/src/cs.js b/admin/javascript/lang/src/cs.js index 51fdec086..3ff0dedf4 100644 --- a/admin/javascript/lang/src/cs.js +++ b/admin/javascript/lang/src/cs.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Určitě chcete opustit navigaci z této stránky?\n\nUPOZORNĚNÍ: Vaše změny nebyly uloženy.\n\nStlačte OK pro pokračovat, nebo Cancel, zůstanete na této stránce.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "UPOZORNĚNÍ: Vaše změny nebyly uloženy.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Skutečně chcete smazat %s skupiny?", diff --git a/admin/javascript/lang/src/de.js b/admin/javascript/lang/src/de.js index 66fa1352b..8dbbf9240 100644 --- a/admin/javascript/lang/src/de.js +++ b/admin/javascript/lang/src/de.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Sind Sie sicher, dass Sie die Seite verlassen möchten?\n\nWARNUNG: Ihre Änderungen werden nicht gespeichert.\n\nDrücken Sie \"OK\" um fortzufahren, oder \"Abbrechen\" um auf dieser Seite zu bleiben.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "WARNUNG: Ihre Änderungen wurden nicht gespeichert.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Möchten Sie wirklich %s Gruppen löschen?", diff --git a/admin/javascript/lang/src/eo.js b/admin/javascript/lang/src/eo.js index d1bf331ae..b3d58ab8c 100644 --- a/admin/javascript/lang/src/eo.js +++ b/admin/javascript/lang/src/eo.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Ĉu vi vere volas navigi for de ĉi tiu paĝo?\n\nAVERTO: Viaj ŝanĝoj ne estas konservitaj.\n\nPremu je Akcepti por daŭrigi, aŭ Nuligi por resti ĉe la aktuala paĝo.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "AVERTO: Viaj ŝanĝoj ne estas konservitaj.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Ĉu vi vere volas forigi %s grupojn?", diff --git a/admin/javascript/lang/src/es.js b/admin/javascript/lang/src/es.js index b232973f8..9e93dd15c 100644 --- a/admin/javascript/lang/src/es.js +++ b/admin/javascript/lang/src/es.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "¿Estás seguro que quieres navegar fuera de esta página?⏎\n⏎\nADVERTENCIA: Tus cambios no han sido guardados.⏎\n⏎\nPresionar OK para continuar o Cancelar para continuar en la página actual", "LeftAndMain.CONFIRMUNSAVEDSHORT": "ADVERTENCIA: Tus cambios no han sido guardados.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "¿Realmente quieres eliminar el grupo %s?", diff --git a/admin/javascript/lang/src/fi.js b/admin/javascript/lang/src/fi.js index 39cc99d81..2e54c6889 100644 --- a/admin/javascript/lang/src/fi.js +++ b/admin/javascript/lang/src/fi.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Haluatko varmasti poistua tältä sivulta?\n\nVAROITUS: Muutoksiasi ei ole tallennettu.\n\nPaina OK jatkaaksesi, tai Peruuta pysyäksesi nykyisellä sivulla.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "VAROITUS: Muutoksiasi ei ole tallennettu.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Haluatko varmasti poistaa %s ryhmät?", diff --git a/admin/javascript/lang/src/fr.js b/admin/javascript/lang/src/fr.js index 6d829d4d4..d413c924b 100644 --- a/admin/javascript/lang/src/fr.js +++ b/admin/javascript/lang/src/fr.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Etes-vous sûr de vouloir quitter cette page ?\n\nATTENTION: Vos changements n'ont pas été sauvegardés.\n\nCliquez sur OK pour continuer, ou sur Annuler pour rester sur la page actuelle.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "WARNING: Your changes have not been saved.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Do you really want to delete %s groups?", diff --git a/admin/javascript/lang/src/id.js b/admin/javascript/lang/src/id.js index 5485d3f02..59c697fae 100644 --- a/admin/javascript/lang/src/id.js +++ b/admin/javascript/lang/src/id.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Anda ingin tinggalkan laman ini?\n\nPERINGATAN: Perubahan tidak akan disimpan.\n\nTekan OK untuk lanjut, atau Batal untuk tetap di laman ini.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "PERINGATAN: Perubahan tidak akan disimpan.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Anda ingin menghapus kelompok %s?", diff --git a/admin/javascript/lang/src/id_ID.js b/admin/javascript/lang/src/id_ID.js index 5485d3f02..59c697fae 100644 --- a/admin/javascript/lang/src/id_ID.js +++ b/admin/javascript/lang/src/id_ID.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Anda ingin tinggalkan laman ini?\n\nPERINGATAN: Perubahan tidak akan disimpan.\n\nTekan OK untuk lanjut, atau Batal untuk tetap di laman ini.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "PERINGATAN: Perubahan tidak akan disimpan.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Anda ingin menghapus kelompok %s?", diff --git a/admin/javascript/lang/src/it.js b/admin/javascript/lang/src/it.js index 1da52d0b7..9498fc6e2 100644 --- a/admin/javascript/lang/src/it.js +++ b/admin/javascript/lang/src/it.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Siete sicuri di voler uscire da questa pagina?\n\nATTENZIONE: I vostri cambiamenti non sono stati salvati.\n\nCliccare OK per continuare, o su Annulla per rimanere sulla pagina corrente.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "WARNING: Your changes have not been saved.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Do you really want to delete %s groups?", diff --git a/admin/javascript/lang/src/ja.js b/admin/javascript/lang/src/ja.js index b0e6b56fb..8797dad55 100644 --- a/admin/javascript/lang/src/ja.js +++ b/admin/javascript/lang/src/ja.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "このページから移動しても良いですか?\n\n警告: あなたの変更は保存されていません.\n\n続行するにはOKを押してください.キャンセルをクリックするとこのページにとどまります.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "警告: あなたの変更は保存されていません.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "%sグループを本当に削除しても良いですか?", diff --git a/admin/javascript/lang/src/lt.js b/admin/javascript/lang/src/lt.js index a129073ea..cfebed860 100644 --- a/admin/javascript/lang/src/lt.js +++ b/admin/javascript/lang/src/lt.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Ar tikrai norite išeiti iš šio puslapio?\n\nDĖMESIO: Jūsų pakeitimai neišsaugoti.\n\nNorėdami tęsti, spauskite OK, jeigu norite likti, spauskite Cancel.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "DĖMESIO: Jūsų pakeitimai neišsaugoti.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Ar tikrai norite ištrinti %s grupes?", diff --git a/admin/javascript/lang/src/mi.js b/admin/javascript/lang/src/mi.js index 7e528d3fa..ad284a1c0 100644 --- a/admin/javascript/lang/src/mi.js +++ b/admin/javascript/lang/src/mi.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Kei te hiahia whakatere atu i tēnei whārangi?\n\nWHAKATŪPATO: Kāore anō ō huringa kia tiakina.\n\nPēhi AE kia haere tonu, Whakakore rānei kia noho i te whārangi onāianei.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "WHAKATŪPATO: Kāore anō ō huringa kia tiakina.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Kei te tino hiahia muku i te %s rōpū?", diff --git a/admin/javascript/lang/src/nb.js b/admin/javascript/lang/src/nb.js index 9b3a93726..76fa19bd7 100644 --- a/admin/javascript/lang/src/nb.js +++ b/admin/javascript/lang/src/nb.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Er du sikker på at du vil forlate denne siden?\n\nADVARSEL: Endringene din har ikke blitt lagret.\n\nTrykk OK for å fortsette eller Avbryt for å holde deg på samme side.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "ADVARSEL: Endringene dine har ikke blitt lagret.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Vil du virkelig slette %s grupper?", diff --git a/admin/javascript/lang/src/nl.js b/admin/javascript/lang/src/nl.js index 3b1efc5aa..49f7ea18c 100644 --- a/admin/javascript/lang/src/nl.js +++ b/admin/javascript/lang/src/nl.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Weet u zeker dat u deze pagina wilt verlaten?\nWAARSCHUWING: Uw veranderingen zijn niet opgeslagen.\n\nKies OK om te verlaten, of Cancel om op de huidige pagina te blijven.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "WAARSCHUWING: Uw veranderingen zijn niet opgeslagen", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Weet u zeker dat u deze groep %s wilt verwijderen?", diff --git a/admin/javascript/lang/src/pl.js b/admin/javascript/lang/src/pl.js index aa162919b..3aa74a856 100644 --- a/admin/javascript/lang/src/pl.js +++ b/admin/javascript/lang/src/pl.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Czy na pewno chcesz kontynuować nawigację poza tą stronę?\n\nUWAGA: Twoje zmiany nie zostały zapisane.\n\nWciśnij OK aby kontynuować, wciśnij Anuluj aby pozostać na tej stronie.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "UWAGA: Twoje zmiany nie zostały zapisane.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Czy na pewno chcesz usunąć %s grup?", diff --git a/admin/javascript/lang/src/ro.js b/admin/javascript/lang/src/ro.js index fedae55b5..ac2dc1c00 100644 --- a/admin/javascript/lang/src/ro.js +++ b/admin/javascript/lang/src/ro.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Sunteți sigur că doriți să părăsiți pagina?\n\nAVERTISMENT: Modificările nu au fost salvate.\n\nApăsați OK pentru a continua, sau Anulați pentru a rămâne pe pagina curentă.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "AVERTISMENT: Modificările nu au fost salvate.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Sigur doriți să ștergeți grupurile %s?", diff --git a/admin/javascript/lang/src/ru.js b/admin/javascript/lang/src/ru.js index 36994582a..e55e862ce 100644 --- a/admin/javascript/lang/src/ru.js +++ b/admin/javascript/lang/src/ru.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Вы действительно хотите покинуть эту страницу?\n\nВНИМАНИЕ: Ваши изменения не были сохранены.\n\nНажмите ОК, чтобы продолжить или Отмена, чтобы остаться на текущей странице.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "ВНИМАНИЕ: Ваши изменения не были сохранены", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Вы действительно хотите удалить %s групп?", diff --git a/admin/javascript/lang/src/sk.js b/admin/javascript/lang/src/sk.js index 0ed720b81..df76b69da 100644 --- a/admin/javascript/lang/src/sk.js +++ b/admin/javascript/lang/src/sk.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Určite chcete opustiť navigáciu z tejto stránky?\n\nUPOZORNENIE: Vaše zmeny neboli uložené.\n\nStlačte OK pre pokračovať, alebo Cancel, ostanete na teto stránke.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "UPOZORNENIE: Vaše zmeny neboli uložené.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Skutočne chcete zmazať % skupiny?", diff --git a/admin/javascript/lang/src/sl.js b/admin/javascript/lang/src/sl.js index f35b6e24c..d73d42df5 100644 --- a/admin/javascript/lang/src/sl.js +++ b/admin/javascript/lang/src/sl.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Res želite zapusitit stran?\n\nOPOZORILO: spremembe niso bile shranjene\n\nKliknite OK za nadaljevanje ali Prekliči, da ostanete na trenutni strani.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "OPOZORILO: spremembe niso bile shranjene.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Izbrišem %s skupin?", diff --git a/admin/javascript/lang/src/sr.js b/admin/javascript/lang/src/sr.js index 7d410b212..d29a0eaa2 100644 --- a/admin/javascript/lang/src/sr.js +++ b/admin/javascript/lang/src/sr.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Да ли сте сигурни да желите да одете са ове странице?\n\nУПОЗОРЕЊЕ: Ваше измене још нису сачуване.\n\nПритисните У реду за наставак или Одустани да би сте остали на овој страници.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "УПОЗОРЕЊЕ: Ваше измене нису сачуване.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Да ли заиста желите да се избришете %s групе?", diff --git a/admin/javascript/lang/src/sr_RS.js b/admin/javascript/lang/src/sr_RS.js index 7d410b212..d29a0eaa2 100644 --- a/admin/javascript/lang/src/sr_RS.js +++ b/admin/javascript/lang/src/sr_RS.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Да ли сте сигурни да желите да одете са ове странице?\n\nУПОЗОРЕЊЕ: Ваше измене још нису сачуване.\n\nПритисните У реду за наставак или Одустани да би сте остали на овој страници.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "УПОЗОРЕЊЕ: Ваше измене нису сачуване.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Да ли заиста желите да се избришете %s групе?", diff --git a/admin/javascript/lang/src/sv.js b/admin/javascript/lang/src/sv.js index 38a9630b6..1c073fd00 100644 --- a/admin/javascript/lang/src/sv.js +++ b/admin/javascript/lang/src/sv.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "Är du säker på att du vill lämna denna sida?\n\nVARNING: Dina ändringar har inte sparats.\n\nTryck OK för att lämna sidan eller Avbryt för att stanna på aktuell sida.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "WARNING: Your changes have not been saved.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Vill du verkligen radera %s grupper?", diff --git a/admin/javascript/lang/src/zh.js b/admin/javascript/lang/src/zh.js index 385df4f64..d712d17fe 100644 --- a/admin/javascript/lang/src/zh.js +++ b/admin/javascript/lang/src/zh.js @@ -1,4 +1,10 @@ { + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "LeftAndMain.CONFIRMUNSAVED": "您确定要离开此页面?\n警告:您所做的更改尚未保存。\n请按“确定”继续,或“取消”留在当前页面。\n", "LeftAndMain.CONFIRMUNSAVEDSHORT": "警告:您所做的更改尚未保存。", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "您真的要删除 %s 小组吗?", diff --git a/lang/en.yml b/lang/en.yml index 2d5097e11..829026f2d 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -60,8 +60,8 @@ en: ERRORNOTREC: 'That username / password isn''t recognised' Boolean: ANY: Any - NOANSWER: No - YESANSWER: Yes + NOANSWER: 'No' + YESANSWER: 'Yes' CMSLoadingScreen_ss: LOADING: Loading... REQUIREJS: 'The CMS requires that you have JavaScript enabled.' @@ -81,8 +81,8 @@ en: HELLO: Hi PASSWORD: Password CheckboxField: - NOANSWER: No - YESANSWER: Yes + NOANSWER: 'No' + YESANSWER: 'Yes' CheckboxFieldSetField: SOURCE_VALIDATION: 'Please select a value within the list provided. {value} is not a valid option' CMSMemberLoginForm: @@ -192,7 +192,7 @@ en: TEXT3: for Form: CSRF_EXPIRED_MESSAGE: 'Your session has expired. Please re-submit the form.' - CSRF_FAILED_MESSAGE: 'There seems to have been a technical problem. Please click the back button, refresh your browser, and try again.' + CSRF_FAILED_MESSAGE: 'There seems to have been a technical problem. Please click the back button, refresh your browser, and try again.' FIELDISREQUIRED: '{name} is required' SubmitBtnLabel: Go VALIDATIONCREDITNUMBER: 'Please ensure you have entered the {number} credit card number correctly' @@ -259,7 +259,7 @@ en: many_many_Members: Members GroupImportForm: Help1: '

Import one or more groups in CSV format (comma-separated values). Show advanced usage

' - Help2: "
\n

Advanced usage

\n
    \n
  • Allowed columns: %s
  • \n
  • Existing groups are matched by their unique Code value, and updated with any new values from the \n imported file
  • \n
  • Group hierarchies can be created by using a ParentCode column.
  • \n
  • Permission codes can be assigned by the PermissionCode column. Existing permission codes are not\n cleared.
  • \n
\n
" + Help2: "
\n

Advanced usage

\n
    \n
  • Allowed columns: %s
  • \n
  • Existing groups are matched by their unique Code value, and updated with any new values from the\n imported file
  • \n
  • Group hierarchies can be created by using a ParentCode column.
  • \n
  • Permission codes can be assigned by the PermissionCode column. Existing permission codes are not\n cleared.
  • \n
\n
" ResultCreated: 'Created {count} groups' ResultDeleted: 'Deleted %d groups' ResultUpdated: 'Updated %d groups' @@ -313,6 +313,7 @@ en: URL: URL URLNOTANOEMBEDRESOURCE: 'The URL ''{url}'' could not be turned into a media resource.' UpdateMEDIA: 'Update Media' + SUBJECT: 'Email subject' Image: PLURALNAME: Files SINGULARNAME: File @@ -330,7 +331,7 @@ en: PERMAGAIN: 'You have been logged out of the CMS. If you would like to log in again, enter a username and password below.' PERMALREADY: 'I''m sorry, but you can''t access that part of the CMS. If you want to log in as someone else, do so below' PERMDEFAULT: 'Please choose an authentication method and enter your credentials to access the CMS.' - PLEASESAVE: 'Please Save Page: This page could not be upated because it hasn''t been saved yet.' + PLEASESAVE: 'Please Save Page: This page could not be updated because it hasn''t been saved yet.' PreviewButton: Preview REORGANISATIONSUCCESSFUL: 'Reorganised the site tree successfully.' SAVEDUP: Saved. @@ -342,7 +343,7 @@ en: Hello: Hi LOGOUT: 'Log out' ListboxField: - SOURCE_VALIDATION: 'Please select a value within the list provided. {value} is not a valid option' + SOURCE_VALIDATION: 'Please select a value within the list provided. %s is not a valid option' LoginAttempt: Email: 'Email Address' IP: 'IP Address' @@ -585,3 +586,5 @@ en: UPLOADSINTO: 'saves into /{path}' Versioned: has_many_Versions: Versions + CheckboxSetField: + SOURCE_VALIDATION: 'Please select a value within the list provided. ''{value}'' is not a valid option' From 9cccfec1a067bdb172d6d1af80aa0d19aab85bed Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Fri, 19 Jun 2015 19:22:38 +1200 Subject: [PATCH 034/110] Added 3.2.0-beta1 changelog --- docs/en/04_Changelogs/beta/3.2.0-beta1.md | 923 ++++++++++++++++++++++ 1 file changed, 923 insertions(+) create mode 100644 docs/en/04_Changelogs/beta/3.2.0-beta1.md diff --git a/docs/en/04_Changelogs/beta/3.2.0-beta1.md b/docs/en/04_Changelogs/beta/3.2.0-beta1.md new file mode 100644 index 000000000..206dfb1f0 --- /dev/null +++ b/docs/en/04_Changelogs/beta/3.2.0-beta1.md @@ -0,0 +1,923 @@ +# 3.2.0 beta1 + +## Contents + +* [Major Changes](#major-changes) +* [Removed API](#deprecated-classesmethods-removed) +* [New API](#new-and-changed-api) +* [Bugfixes](#bugfixes) +* [Upgrading Notes](#upgrading-notes) +* [Changelog](#changelog) + +## Major changes + +* Minimum PHP version raised to 5.3.3 +* Introduction of new parameterised ORM +* Default support for PDO +* Moved SS_Report and ReportAdmin out to a separate module. If you're using + composer or downloading a release, this module should be included for you. + Otherwise, you'll need to include the module yourself + (https://github.com/silverstripe-labs/silverstripe-reports) +* Moved SiteConfig also out to its own module. This will be included by + default if you include the CMS module. + (https://github.com/silverstripe/silverstripe-siteconfig) +* Implementation of new "Archive" concept for page removal, which supercedes + "delete from draft". Where deletion removed pages only from draft, archiving + removes from both draft and live simultaneously. +* Most of the `Image` manipulation methods have been renamed + +## Deprecated classes/methods removed + +* `ToggleField` was deprecated in 3.1, and has been removed. Use custom Javascript with `ReadonlyField` instead. +* `ExactMatchMultiFilter` was deprecated in 3.1, and has been removed. Use `ExactMatchFilter` instead. +* `NegationFilter` was deprecated in 3.1, and has been removed. Use `ExactMatchFilter:not` instead. +* `StartsWithMultiFilter` was deprecated in 3.1, and has been removed. Use `StartsWithFilter` instead. +* `ScheduledTask` and subclasses like `DailyTask` were deprecated in 3.1, and have been removed. + Use custom code instead, or a module like silverstripe-crontask: https://github.com/silverstripe-labs/silverstripe-crontask +* `Cookie::forceExpiry()` was removed. Use `Cookie::force_expiry()` instead +* `Object` statics removal: `get_static()`, `set_static()`, `uninherited_static()`, `combined_static()`, + `addStaticVars()` and `add_static_var()` removed. Use the Config methods instead. +* `GD` methods removed: `setGD()`, `getGD()`, `hasGD()`. Use `setImageResource()`, `getImageResource()`, and `hasImageResource()` instead +* `DataExtension::get_extra_config()` removed, no longer supports `extraStatics` or `extraDBFields`. Define your + statics on the class directly. +* `DataList::getRange()` removed. Use `limit()` instead. +* `SQLMap` removed. Call `map()` on a `DataList` or use `SS_Map` directly instead. +* `Profiler` removed. Use xhprof or xdebug for profiling instead. +* `Aggregate` removed. Call aggregate methods on a `DataList` instead e.g. `Member::get()->max('LastEdited')` +* `MySQLDatabase::set_connection_charset()` removed. Use `MySQLDatabase.connection_charset` config setting instead +* `SQLConditionalExpression/SQLQuery` `select()`, `limit()`, `orderby()`, `groupby()`, `having()`, `from()`, `leftjoin()`, `innerjoin()`, `where()` and `whereAny()` removed. + Use `set*()` and `add*()` methods instead. +* Template `<% control $MyList %>` syntax removed. Use `<% loop $MyList %>` instead. +* Removed `Member.LastVisited` and `Member.NumVisits` properties, see + [Howto: Track Member Logins](/extending/how_tos/track_member_logins) to restore functionality as custom code + +## New and changed API + +* Implementation of a parameterised query framework eliminating the need to manually escape variables for + use in SQL queries. This has been integrated into nearly every level of the database ORM. +* Refactor of database connectivity classes into separate components linked together through dependency injection +* Refactor of `SQLQuery` into separate objects for each query type: `SQLSelect`, `SQLDelete`, `SQLUpdate` and `SQLInsert` +* PDO is now a standard connector, and is available for all database interfaces +* `DataObject::doValidate()` method visibility added to access `DataObject::validate` externally +* `NumericField` now uses HTML5 "number" type instead of "text" +* `UploadField` "Select from files" shows files in all folders by default +* `UploadField` won't display an overwrite warning unless `Upload::replaceFile` is true +* `HtmlEditorField` no longer substitutes `
` for indented text +* `ClassInfo::dataClassesFor` now returns classes which should have tables, regardless of whether those + tables actually exist. +* `SS_Filterable`, `SS_Limitable` and `SS_Sortable` now explicitly extend `SS_List` +* `Convert::html2raw` no longer wraps text by default and can decode single quotes. +* `Mailer` no longer calls `xml2raw` on all email subject line, and now must be passed in via plain text. +* `ErrorControlChain` now supports reload on exceptions +* `FormField::validate` now requires an instance of `Validator` +* API: Removed URL routing by controller name +* Security: The multiple authenticator login page should now be styled manually - i.e. without the default jQuery + UI layout. A new template, Security_MultiAuthenticatorLogin.ss is available. +* Security: This controller's templates can be customised by overriding the `getTemplatesFor` function. +* API: Form and FormField ID attributes rewritten. +* `SearchForm::getSearchQuery` no longer pre-escapes search keywords and must + be cast in your template +* Helper function `DB::placeholders` can be used to generate a comma separated list of placeholders + useful for creating "WHERE ... IN (?,...)" SQL fragments +* Implemented Convert::symbol2sql to safely encode database and table names and identifiers. + E.g. `Convert::symbol2sql('table.column') => '"table"."column"';` +* `Convert::raw2sql` may now quote the escaped value, as well as safely escape it, according to the current + database adaptor's preference. +* `DB` class has been updated and many static methods have been renamed to conform to coding convention. + * Renamed API: + * `affectedRows` -> `affected_rows` + * `checkAndRepairTable` -> `check_and_repair_table` + * `createDatabase` -> `create_database` + * `createField` -> `create_field` + * `createTable` -> `create_table` + * `dontRequireField` -> `dont_require_field` + * `dontRequireTable` -> `dont_require_table` + * `fieldList` -> `field_list` + * `getConn` -> `get_conn` + * `getGeneratedID` -> `get_generated_id` + * `isActive` -> `is_active` + * `requireField` -> `require_field` + * `requireIndex` -> `require_index` + * `requireTable` -> `require_table` + * `setConn` -> `set_conn` + * `tableList` -> `table_list` + * Deprecated API: + * `getConnect` (Was placeholder for PDO connection string building code, but is made + redundant after the PDOConnector being fully abstracted) + * New API: + * `build_sql` - Hook into new SQL generation code + * `get_connector` (Nothing to do with getConnect) + * `get_schema` + * `placeholders` + * `prepared_query` +* `SS_Database` class has been updated and many functions have been deprecated, or refactored into + the various other database classes. Most of the database management classes remain in the database + controller, due to individual databases (changing, creating of, etc) varying quite a lot from + API to API, but schema updates within a database itself is managed by an attached DBSchemaManager + * Refactored into DBSchemaManager: + * `createTable` + * `alterTable` + * `renameTable` + * `createField` + * `renameField` + * `fieldList` + * `tableList` + * `hasTable` + * `enumValuesForField` + * `beginSchemaUpdate` and `endSchemaUpdate` -> Use `schemaUpdate` with a callback + * `cancelSchemaUpdate` + * `isSchemaUpdating` + * `doesSchemaNeedUpdating` + * `transCreateTable` + * `transAlterTable` + * `transCreateField` + * `transCreateField` + * `transCreateIndex` + * `transAlterField` + * `transAlterIndex` + * `requireTable` + * `dontRequireTable` + * `requireIndex` + * `hasField` + * `requireField` + * `dontRequireField` + * Refactored into DBQueryBuilder + * `sqlQueryToString` + * Deprecated: + * `getConnect` - Was intended for use with PDO, but was never implemented, and is now + redundant, now that there is a stand-alone `PDOConnector` + * `prepStringForDB` - Use `quoteString` instead + * `dropDatabase` - Use `dropSelectedDatabase` + * `createDatabase` - Use `selectDatabase` with the second parameter set to true instead + * `allDatabaseNames` - Use `databaseList` instead + * `currentDatabase` - Use `getSelectedDatabase` instead + * `addslashes` - Use `escapeString` instead +* `LogErrorEmailFormatter` now better displays SQL queries in errors by respecting line breaks +* Installer has been majorly upgraded to handle the new database configuration options + and additional PDO functionality. +* Created `SS_DatabaseException` to emit database errors. Query information such as SQL + and any relevant parameters may be used by error handling user code that catches + this exception. +* The `SQLConditionGroup` interface has been created to represent dynamically + evaluated SQL conditions. This may be used to wrap a class that generates + a custom SQL clause(s) to be evaluated at the time of execution. +* `DataObject` constants CHANGE_NONE, CHANGE_STRICT, and CHANGE_VALUE have been created + to provide more verbosity to field modification detection. This replaces the use of + various magic numbers with the same meaning. +* create_table_options now uses constants as API specific filters rather than strings. + This is in order to promote better referencing of elements across the codebase. + See `FulltextSearchable->enable` for example. +* `$FromEnd` iterator variable now available in templates. +* Support for multiple HtmlEditorConfigs on the same page. +* Object::singleton() method for better type-friendly singleton generation +* New `Image` methods `CropWidth` and `CropHeight` added +* 'Max' versions of `Image` methods introduced to prevent up-sampling +* Update Image method names in PHP code and templates + * `SetRatioSize` -> `Fit` + * `CroppedImage` -> `Fill` + * `PaddedImage` -> `Pad` + * `SetSize` -> `Pad` + * `SetWidth` -> `ScaleWidth` + * `SetHeight` -> `ScaleHeight` + +## Bugfixes + +* Reduced database regeneration chances on subsequent rebuilds after the initial dev/build +* Elimination of various SQL injection vulnerability points +* `DataObject::writeComponents()` now called correctly during `DataObject::write()` +* Fixed missing theme declaration in installer +* Fixed incorrect use of non-existing exception classes (e.g. `HTTPResponse_exception`) +* `GridState` fixed to distinguish between check for missing values, and creation of + nested state values, in order to prevent non-empty values being returned for + missing keys. This was breaking `DataObject::get_by_id` by passing in an object + for the ID. +* Fixed order of `File` fulltext searchable fields to use same order as actual fields. + This is required to prevent unnecessary rebuild of MS SQL databases when fulltext + searching is enabled. +* In the past E_RECOVERABLE_ERROR would be ignored, and now correctly appear as warnings. + +## Upgrading Notes + +### UploadField "Select from files" shows files in all folders by default + +In order to list files in a single folder by default (previous default behaviour), +use `setDisplayFolderName()` with a folder path relative to `assets/`: + + + :::php + UploadField::create('MyField')->setDisplayFolderName('Uploads'); + + +### UploadField won't display an overwrite warning unless Upload:replaceFile is true + +The configuration setting `UploadField:overwriteWarning` is dependent on `Upload:replaceFile` +which is set to false by default. + +To display a warning before overwriting a file: + +Via config: + + + ::yaml + Upload: + # Replace an existing file rather than renaming the new one. + replaceFile: true + UploadField: + # Warning before overwriting existing file (only relevant when Upload: replaceFile is true) + overwriteWarning: true + + +Or per instance: + + + ::php + $uploadField->getUpload()->setReplaceFile(true); + $uploadField->setOverwriteWarning(true); + + +### File.allowed_extensions restrictions + +Certain file types such as swf, html, htm, xhtml and xml have been removed from the list +of allowable file uploads. If your application requires the ability to upload these, +you will need to append these to the `File.allowed_extensions` config as necessary. +Also if uploading other file types, it's necessary to ensure that `File.allowed_extensions` +includes that extension, as extensions passed to `[api:UploadField]` will be filtered against +this list. + +### Removed format detection in i18n::$date_format and i18n::$time_format + +Localized dates cause inconsistencies in client-side vs. server-side formatting +and validation, particularly in abbreviated month names. The default date +format has been changed to "yyyy-MM-dd" (e.g. 2014-12-31). +New users will continue to have the option for a localized date +format in their profile (based on their chosen locale). +If you have existing users with `Member.DateFormat` set to a format +including "MMM" or "MMMM", consider deleting those formats to fall back to +the global (and more stable) default. + +### Cookies set via Cookie::set() are now HTTP only by default + +Cookies set through `Cookie::set()` now default to "HTTP only". This means that scripting +languages like JavaScript won't be able to read them. + +To set it back to be non-HTTP only, you need to set the `$httpOnly` argument to false when calling +`Cookie::set()`. + +### API: Removed URL routing by controller name + +The auto-routing of controller class names to URL endpoints +has been removed (rule: `'$Controller//$Action/$ID/$OtherID': '*'`). +This increases clarity in routing since it makes URL entpoints explicit, +and thereby simplifies system and security reviews. + +Please access any custom controllers exclusively through self-defined +[routes](/reference/director). For controllers extending `Page_Controller`, +simply use the provided page URLs. + + + :::php + class MyController extends Controller { + static $allowed_actions = array('myaction'); + public function myaction($request) { + // ... + } + } + + +Create a new file `mysite/_config/routes.yml` +(read more about the [config format](/topics/configuration)). +Your controller is now available on `http://yourdomain.com/my-controller-endpoint`, +after refreshing the configuration cache through `?flush=all`. + + + :::yaml + --- + Name: my-routes + After: framework/routes#coreroutes + --- + Director: + rules: + 'my-controller-endpoint//$Action' : 'MyController' + + +The auto-routing is still in place for unit tests, +since its a frequently used feature there. Although we advise against it, +you can reinstate the old behaviour through a director rule: + + + :::yaml + --- + Name: my-routes + After: framework/routes#coreroutes + --- + Director: + rules: + '$Controller//$Action/$ID/$OtherID': '*' + + +### API: Default Form and FormField ID attributes rewritten. + +Previously the automatic generation of ID attributes throughout the Form API +could generate invalid ID values such as Password[ConfirmedPassword] as well +as duplicate ID values between forms on the same page. For example, if you +created a field called `Email` on more than one form on the page, the resulting +HTML would have multiple instances of `#Email`. ID should be a unique +identifier for a single element within the document. + +This rewrite has several angles, each of which is described below. If you rely +on ID values in your CSS files, Javascript code or application unit tests *you +will need to update your code*. + +#### Conversion of invalid form ID values + +ID attributes on Form and Form Fields will now follow the +[HTML specification](http://www.w3.org/TR/REC-html40/types.html#type-cdata). +Generating ID attributes is now handled by the new `FormTemplateHelper` class. + +Please test each of your existing site forms to ensure that they work +correctly in particular, javascript and css styles which rely on specific ID +values. + +#### Invalid ID attributes stripped + +ID attributes will now be run through `Convert::raw2htmlid`. Invalid characters +are replaced with a single underscore character. Duplicate, leading and trailing +underscores are removed. Custom ID attributes (set through `setHTMLID`) will not +be altered. + +Before: + + + :::html +
+ + +Now: + + + :::html + +
+ + + +#### Namespaced FormField ID's + +Form Field ID values will now be namespaced with the parent form ID. + +Before: + + + :::html +
+ + +Now: + + + :::html +
+ + +#### FormField wrapper containers suffixed with `_Holder` + +Previously both the container div and FormField tag shared the same ID in +certain cases. Now, the wrapper div in the default `FormField` template will be +suffixed with `_Holder`. + +Before: + + + :::html +
+ + + +After: + + + :::html +
+ + +#### Reverting to the old specification + +If upgrading existing forms is not feasible, developers can opt out of the new +specifications by using the `FormTemplateHelper_Pre32` class rules instead of +the default ones. + + +`mysite/config/_config.yml`: + + + :::yaml + Injector: + FormTemplateHelper: + class: FormTemplateHelper_Pre32 + + +### Update code that uses SQLQuery + +SQLQuery has been changed. Previously this class was used for both selecting and deleting, but +deletion is now handled by the new SQLDelete class. + +Additionally, 3.2 now provides SQLUpdate and SQLInsert to generate parameterised query friendly +data updates. + +SQLQuery, SQLDelete and SQLUpdate all inherit from SQLConditionalExpression, which +implements toSelect, toDelete, and toUpdate to generate basic transformations +between query types. + +In the past SQLQuery->setDelete(true) would be used to turn a select into a delete, +although now a new SQLDelete object should be created from the original SQLQuery. + +Before: + + + :::php + setFrom('"SiteTree"'); + $query->setWhere('"SiteTree"."ShowInMenus" = 0'); + $query->setDelete(true); + $query->execute(); + + +After: + + + :::php + setFrom('"SiteTree"') + ->setWhere(array('"SiteTree"."ShowInMenus"' => 0)); + $query->execute(); + + +When working with SQLQuery passed into user code, it is advisable to strictly +cast it into either a SQLSelect or SQLDelete. This can be done by using the new +`SQLQuery::toAppropriateExpression()` method, which will automatically convert +to the correct type based on whether the SQLQuery is set to delete or not. + +If a SQLQuery is not converted, then the result of `getWhere` will not be parameterised. +This is because user code written for 3.1 expects this list to be a flat array +of strings. This format is inherently unsafe, and should be avoided where possible. + + + :::php + getWhere(); // Will be flattened (unsafe 3.1 compatible format) + $expression = $query->toAppropriateExpression(); // Either SQLSelect or SQLDelete + $expression->getWhere(); // Will be parameterised (preferred 3.2 compatible format) + } + + + +Alternatively: + + + :::php + setFrom('"SiteTree"') + ->setWhere(array('"SiteTree"."ShowInMenus"' => 0)) + ->setDelete(true) + ->toAppropriateExpression(); + $query->execute(); + + +### Update code that interacts with SQL strings to use parameters + +The Silverstripe ORM (object relation model) has moved from using escaped SQL strings +to query the database, to a combination of parameterised SQL expressions alongside +a related list of parameter values. As a result of this, it is necessary to assume +that any `SQLQuery` object may, and will usually, have un-injected parameters. + +All database queries performed through `DataList`, `DataQuery` and `SQLQuery` will continue +to work, as will those through `DataObject::get()` (which returns a filterable `DataList`). +However, any conditional expression that includes values escaped with `Convert::raw2sql()` +should use the new standard syntax. This new querying standard method enforces a much +higher level of security than was previously available, and all code using manual +escaping should be upgraded. + +See [the security topic](/topics/security#parameterised-queries) for details on why this is necessary, or +[the databamodel topic](/topics/datamodel#raw-sql-options-for-advanced-users) for more information. + +As a result of this upgrade there are now very few cases where `Convert::raw2sql` needs to be used. + +Examples of areas where queries should be upgraded are below: + +#### 1. Querying the database directly through DB, including non-SELECT queries + +Before: + + + :::php + where('"Name" = \''.Convert::raw2sql($name).'\''); + $list = DataList::create('Banner')->where(array( + '"ParentID" IS NOT NULL', + '"Title" = \'' . Convert::raw2sql($title) . '\'' + ); + + +After: + + + :::php + $details)); + $things = MyObject::get()->where(array('"MyObject"."Name" = ?' => $name)); + $list = DataList::create('Banner')->where(array( + '"ParentID" IS NOT NULL', + '"Title" = ?', $title + ); + + +#### 3. Interaction with `DataList::sql()`, `DataQuery::sql()`, `SQLQuery::sql()`, or `SQLQuery::getJoins()` methods + +The place where legacy code would almost certainly fail is any code that calls +DataList::sql`, `DataQuery::sql`, `SQLQuery::sql` or `SQLQuery::getJoins()`, as the api requires that user +code passes in an argument here to retrieve SQL parameters by value. + +User code that assumes parameterless queries will likely fail, and need to be +updated to handle this case properly. + +Before: + + + :::php + setFrom('"SiteTree"') + ->setWhere(array("\"SiteTree\".\"Title\" LIKE '" . Convert::raw2sql($argument) . "'")); + + // Inspect elements of the query + $sql = $query->sql(); + $sql = preg_replace('/LIKE \'(.+)\'/', 'LIKE \'%${1}%\'', $sql); // Adds %% around the argument + + // Pass new query to database connector + DB::query($sql); + + +After: + + + :::php + setFrom('"SiteTree"') + ->setWhere(array('"SiteTree"."Title" LIKE ?' => $argument)); + + // Inspect elements of the query + $sql = $query->sql($parameters); + foreach($parameters as $key => $value) { + // Adds %% around arguments + $parameters[$key] = "%{$value}%"; + } + + // Pass new query to database connector + // Note that DB::query($sql) would fail, as it would contain ? with missing parameters + DB::prepared_query($sql, $parameters); + + +Also note that the parameters may not be a single level array, as certain values +may be forced to be cast as a certain type (where supported by the current API). + +E.g. + + + :::php + 0, 'type' => 'boolean') // May also contain other database API specific options + ) + DB::prepared_query('DELETE FROM "MyObject" WHERE ParentID = ? OR IsValid = ?', $parameters); + + +#### 4. Interaction with `SQLSelect::getWhere()` method + +The `SQLSelect` class supercedes the old `SQLQuery` object for performing select queries. Although +both implement the `getWhere()` method, the results returned by `SQLSelect::getWhere()` will be +parameterised while `SQLQuery::getWhere()` will be a flattened array of strings. + +`SQLSelect::getWhere()` returns a list of conditions, each of which is an +associative array mapping the condition string to a list of parameters provided. + +Before: + + + :::php + getWhere(); + $new = array(); + foreach($conditions as $condition) { + if(preg_match('/\"Count\" = (?\d+)/', $condition, $matches)) { + $condition = '"Count" = '.($matches['count'] + 1); + } + $new[] = $condition; + } + $query->setWhere($new); + + +After: + + + :::php + // Increment value of a single condition + $query = new SQLSelect(/*...*/); + $conditions = $query->getWhere(); + $new = array(); + foreach($conditions as $condition) { + // $condition will be a single length array + foreach($condition as $predicate => $parameters) { + if('"Count" = ?' === $predicate) { + $parameters[0] = $parameters[0] + 1; + } + $new[] = array($predicate => $parameters); + } + } + $query->setWhere($new); + + +In cases where user code will manipulate the results of this value, it may be useful to +replace this method call with the new `getWhereParameterised($parameters)` method, where +applicable. + +This method returns a manipulated form of the where conditions stored by the query, so +that it matches the list of strings similar to the old 3.1 `SQLQuery::getWhere()` behaviour. +Additionally, the list of parameters is safely extracted, flattened, and can be passed out +through the `$parameters` argument which is passed by reference. + +Before: + + + :::php + public function filtersOnColumn($query, $column) { + $regexp = '/^(.*\.)?("|`)?' . $column . ' ("|`)?\s?=/'; + foreach($this->getWhere() as $predicate) { + if(preg_match($regexp, $predicate)) return true; + } + return false; + } + + +After: + + + :::php + public function filtersOnColumn($query, $column) { + $regexp = '/^(.*\.)?("|`)?' . $column . ' ("|`)?\s?=/'; + foreach($this->getWhereParameterised($parameters) as $predicate) { + if(preg_match($regexp, $predicate)) return true; + } + return false; + } + + +#### 5. Update code that interacts with the DB schema + +Updating database schema is now done by `updateSchema` with a callback, rather than relying +on user code to call `beginSchemaUpdate` and `endSchemaUpdate` around the call. + +Since the schema management object is separate from the database controller you +interact with it via `DB::get_schema` instead of `DB::get_conn` (previously named +`DB::getConn`) + +Before: + + + :::php + beginSchemaUpdate(); + foreach($dataClasses as $dataClass) { + singleton($dataClass)->requireTable(); + } + $conn->endSchemaUpdate(); + + +After: + + + :::php + schemaUpdate(function() use($dataClasses){ + foreach($dataClasses as $dataClass) { + singleton($dataClass)->requireTable(); + } + }); + + +Also should be noted is that many functions have been renamed to conform better with +coding conventions. E.g. `DB::requireTable` is now `DB::require_table` + +### Revert to legacy CMS page actions + +By default "delete from live" and "delete" actions are deprecated in favour of "unpublish" and "archive". +"unpublish" is an existing action which is functionally equivalent to "delete from live", and "archive" is a new +feature which performs both unpublish and deletion simultaneously. + +To restore "delete from live" add the following config to your site's config.yml. + + + :::yml + CMSMain: + enabled_legacy_actions: + - CMSBatchAction_DeleteFromLive + + +In order to remove the new "archive" action and restore the old "delete" action you can use the following config + + + :::yml + CMSMain: + enabled_legacy_actions: + - CMSBatchAction_Delete + + +## Changelog + +### API Changes + + * 2015-06-16 [f3e1472](https://github.com/silverstripe/silverstripe-cms/commit/f3e1472) Revert DataObject::validate to 3.1 method signature (protected) (Damian Mooyman) + * 2015-06-16 [58cc3da](https://github.com/silverstripe/sapphire/commit/58cc3da) Revert DataObject::validate to 3.1 method signature (protected) (Damian Mooyman) + * 2015-06-13 [e766658](https://github.com/silverstripe/sapphire/commit/e766658) Allow HTTP Cache Headers to be customized (Jeremy Shipman) + * 2015-06-12 [8389260](https://github.com/silverstripe/sapphire/commit/8389260) New and renamed image functions (Jonathon Menz) + * 2015-06-09 [a8ace75](https://github.com/silverstripe/sapphire/commit/a8ace75) Support for multiple HTMLEditorConfig per page (Damian Mooyman) + * 2015-05-15 [b169823](https://github.com/silverstripe/silverstripe-cms/commit/b169823) Deprecate delete in favour of archive Remove "delete from live" duplicate action in favour of existing "unpublish" which is more consistent with current terminology Add pop-up verification to destructive actions Fix bug preventing side-by-side preview of archived pages Fix bug in reporting publishing of error pages Restoring a page without an available parent will restore to root (Damian Mooyman) + * 2015-05-15 [a72bd16](https://github.com/silverstripe/sapphire/commit/a72bd16) Deprecate delete in favour of archive Remove "delete from live" duplicate action in favour of existing "unpublish" which is more consistent with current terminology Add pop-up verification to destructive actions Fix bug in reporting publishing of error pages Restoring a page also restores parents (Damian Mooyman) + * 2015-04-30 [c5e0c8f](https://github.com/silverstripe/silverstripe-cms/commit/c5e0c8f) Enable tree filter highlighting Decoupling of CMS / Framework (Damian Mooyman) + * 2015-04-30 [8863797](https://github.com/silverstripe/sapphire/commit/8863797) Enable tree filter highlighting Decoupling of CMS / Framework (Damian Mooyman) + * 2015-04-29 [e8d6f15](https://github.com/silverstripe/sapphire/commit/e8d6f15) Use mysql buffered statements Avoids the usage of any MySQL Native Driver specific API (Damian Mooyman) + * 2015-04-09 [e91606e](https://github.com/silverstripe/sapphire/commit/e91606e) Introduce $FromEnd variable for iterators (Damian Mooyman) + * 2015-03-31 [95c162e](https://github.com/silverstripe/sapphire/commit/95c162e) Security better respects BackURL on login BUG Restore missing authentication message not appearing in the login form $Content area (regression from #1807) (Damian Mooyman) + * 2015-03-05 [9367fd2](https://github.com/silverstripe/sapphire/commit/9367fd2) enable PaginatedList to be disabled by setting page length to 0 (Damian Mooyman) + * 2015-01-14 [5d4c2c4](https://github.com/silverstripe/sapphire/commit/5d4c2c4) Adding default_classes to FormField (Daniel Hensby) + * 2015-01-14 [6d00027](https://github.com/silverstripe/sapphire/commit/6d00027) Adding default_classes to Form (Daniel Hensby) + * 2014-09-25 [e478009](https://github.com/silverstripe/sapphire/commit/e478009) Mailer can be configured to use different encoding mechanisms, and added support for unicode quoted-string encoding API Mailer bounce email can now be configured API Mailer no longer calls Convert::xml2raw on all email subjects API Deprecate dead Mailer code and refactored duplicate or mis-documented code. (Damian Mooyman) + * 2014-09-25 [29e3347](https://github.com/silverstripe/sapphire/commit/29e3347) Convert::html2raw no longer wraps text automatically BUG Convert::html2raw now correctly decodes single quotes (Damian Mooyman) + * 2014-09-24 [5631553](https://github.com/silverstripe/sapphire/commit/5631553) Cookies set via Cookie::set() are now HTTP only by default (Sean Harvey) + * 2014-09-15 [062ad8e](https://github.com/silverstripe/sapphire/commit/062ad8e) Allow parameterised joins / subselects (Damian Mooyman) + * 2014-08-15 [2ba1c46](https://github.com/silverstripe/silverstripe-cms/commit/2ba1c46) broken link hihglighting to write to database. (Mateusz Uzdowski) + * 2014-08-14 [784e292](https://github.com/silverstripe/sapphire/commit/784e292) Add a getter for customisedObject property. (Mateusz Uzdowski) + * 2014-08-09 [18d6c53](https://github.com/silverstripe/silverstripe-cms/commit/18d6c53) Extract siteconfig out to an external module. (Will Rossiter) + * 2014-08-04 [1759d5d](https://github.com/silverstripe/sapphire/commit/1759d5d) Use "number" HTML5 type for NumericField by default (Sean Harvey) + * 2014-07-30 [26a0e91](https://github.com/silverstripe/sapphire/commit/26a0e91) SS_Filterable, SS_Limitable and SS_Sortable now explicitly extend SS_List (Damian Mooyman) + * 2014-04-23 [d16db2d](https://github.com/silverstripe/sapphire/commit/d16db2d) tinymce editor no longer transforms paragraphs with margin-left into blockquotes This is legacy behaviour which does not often reflect the expected behaviour of the current editor. indent and outdent can (in some situations) prefer to use margin instead of padding. sapphiremce_cleanup faultily assumes that such indented text should be block quoted, and replaces this with a block quote element. This is not necessary, since the blockquote element can be placed explicitly by the user when necessary. (Damian Mooyman) + * 2014-04-16 [5f7ebd3](https://github.com/silverstripe/sapphire/commit/5f7ebd3) UploadField: move replaceFile to the front end config (Devlin) + * 2014-04-11 [5b55361](https://github.com/silverstripe/sapphire/commit/5b55361) DateTime.Ago better infers significance of date units. BUG Fixes missing i18n translation in Date::TimeDiffIn BUG Fixes Date::TimeDiffIn not respecting mocked SS_Datetime::now This provides less vague date periods. I.e. "36 days" has a lot more relevance that "1 month" Reduced duplication of time period calculation code (ref: CWPBUG-141) (Damian Mooyman) + * 2014-04-09 [2e73dcb](https://github.com/silverstripe/sapphire/commit/2e73dcb) Remove swf,html,htm,xhtml,xml as default allowed upload able file types (Damian Mooyman) + * 2014-04-04 [bf4e9eb](https://github.com/silverstripe/sapphire/commit/bf4e9eb) Singleton method allowing type inference This pattern improves over the current usage of singleton by allowing type inference. This also better supports refactor, code usage detection, and auto-completion of classes. (Damian Mooyman) + * 2014-02-12 [6906c9b](https://github.com/silverstripe/sapphire/commit/6906c9b) Removed auto-detection for i18n date/time formats (Ingo Schommer) + * 2014-01-17 [973b967](https://github.com/silverstripe/sapphire/commit/973b967) Adding chaining to i18nTextCollector::write() (Daniel Hensby) + * 2014-01-02 [791ee71](https://github.com/silverstripe/sapphire/commit/791ee71) Prevent large images from repeatedly crashing PHP on resize (Loz Calver) + * 2013-12-23 [5fff5af](https://github.com/silverstripe/sapphire/commit/5fff5af) moved useTestTheme to base Sapphire test class so that it can be used elsewhere (eg CMS test) (micmania1) + * 2013-12-19 [6fc9db6](https://github.com/silverstripe/sapphire/commit/6fc9db6) DataObject::validate() visibility changed to public (issue #1659) (Sean Harvey) + * 2013-11-26 [b88a095](https://github.com/silverstripe/sapphire/commit/b88a095) Support string descriptors for unique indexes in Versioned (Fred Condo) + * 2013-10-18 [fee54c7](https://github.com/silverstripe/sapphire/commit/fee54c7) Change DropdownField::getSource() to not return the emptyString value. (Nathan J. Brauer) + * 2013-10-18 [1c983bc](https://github.com/silverstripe/sapphire/commit/1c983bc) LookupField::Field now returns an HTMLText instance. (Will Rossiter) + * 2013-10-17 [52f6581](https://github.com/silverstripe/sapphire/commit/52f6581) Better declaration of DataObject field change levels. Use of const named identifiers to represent each change level rather than numbers. (Damian Mooyman) + * 2013-10-11 [b6b3cd9](https://github.com/silverstripe/sapphire/commit/b6b3cd9) GridState_Data values can have default values specified during retrieval. Fixes issues with GridStata_Data being returned from various states when value types are necessary. Pruning of dead code from GridFieldAddExistingAutocompleter Documentation for GridState (Damian Mooyman) + * 2013-10-09 [b367dd6](https://github.com/silverstripe/sapphire/commit/b367dd6) Removed Member.LastVisited and Member.NumVisits (Ingo Schommer) + * 2013-09-27 [c7f656c](https://github.com/silverstripe/sapphire/commit/c7f656c) Removed "PastMember" cookie and template getter (Ingo Schommer) + * 2013-08-08 [4385264](https://github.com/silverstripe/sapphire/commit/4385264) Make GridFieldConfig objects decoratable (unclecheese) + * 2013-07-10 [7c60c73](https://github.com/silverstripe/sapphire/commit/7c60c73) Polymorphic has_one behaviour (Damian Mooyman) + * 2013-07-01 [47147eb](https://github.com/silverstripe/sapphire/commit/47147eb) delete simplepie from framework thirdparty (carlos barberis) + * 2013-06-21 [a395c53](https://github.com/silverstripe/silverstripe-cms/commit/a395c53) Move of codebase to parameterised query database abstraction layer API Renamed DB static methods to properly conform to naming convention (lowercase, underscored) API Replaced deprecated method (Damian Mooyman) + * 2013-06-21 [d8e9af8](https://github.com/silverstripe/sapphire/commit/d8e9af8) New Database abstraction layer. Ticket #7429 Database abstraction broken up into controller, connector, query builder, and schema manager, each independently configurable via YAML / Injector Creation of new DBQueryGenerator for database specific generation of SQL Support for parameterised queries, move of code base to use these over escaped conditions Refactor of SQLQuery into separate query classes for each of INSERT UPDATE DELETE and SELECT Support for PDO Installation process upgraded to use new ORM SS_DatabaseException created to handle database errors, maintaining details of raw sql and parameter details for user code designed interested in that data. Renamed DB static methods to conform correctly to naming conventions (e.g. DB::getConn -> DB::get_conn) 3.2 upgrade docs Performance Optimisation and simplification of code to use more concise API API Ability for database adapters to register extensions to ConfigureFromEnv.php (Damian Mooyman) + * 2013-05-31 [0c4ec47](https://github.com/silverstripe/sapphire/commit/0c4ec47) Using $HolderID for form field container templates (Ingo Schommer) + * 2013-05-26 [ca87b8b](https://github.com/silverstripe/sapphire/commit/ca87b8b) Form Field ID attribute should follow HTML specification (Will Rossiter) + * 2013-05-22 [cb1f95e](https://github.com/silverstripe/sapphire/commit/cb1f95e) Remove AjaxUniqueTextField, since its operation is very limited (#1947) (Ingo Schommer) + * 2013-01-29 [957469d](https://github.com/silverstripe/sapphire/commit/957469d) Removed auto-routing of controller name (Ingo Schommer) + * 2013-01-17 [56346a5](https://github.com/silverstripe/silverstripe-cms/commit/56346a5) moved reports API to separate module (Will Rossiter) + +### Features and Enhancements + + * 2015-06-03 [a9d22f1](https://github.com/silverstripe/sapphire/commit/a9d22f1) Files can be uploaded directly in the 'Insert Link' form (scott1702) + * 2015-05-29 [44b1ff1](https://github.com/silverstripe/sapphire/commit/44b1ff1) Configurable file version prefix (Jonathon Menz) + * 2015-05-11 [ce5a8f2](https://github.com/silverstripe/sapphire/commit/ce5a8f2) Cookie names with dots are now handled more gracefully (Daniel Hensby) + * 2015-03-31 [ae8dbe3](https://github.com/silverstripe/sapphire/commit/ae8dbe3) - Added maximum upload file size by type (Turnerj) + * 2015-03-24 [16f0e7b](https://github.com/silverstripe/sapphire/commit/16f0e7b) ViewableData_Debugger implements __toString (Daniel Hensby) + * 2015-03-03 [835ee69](https://github.com/silverstripe/sapphire/commit/835ee69) Only validate DataObject model definitions during a build (Loz Calver) + * 2015-02-24 [8ee9130](https://github.com/silverstripe/sapphire/commit/8ee9130) CMS site tree status icons (Jonathon Menz) + * 2015-02-08 [5f31983](https://github.com/silverstripe/sapphire/commit/5f31983) updateAttributes hook in FormField (Ingo Schommer) + * 2015-01-23 [3f1805b](https://github.com/silverstripe/sapphire/commit/3f1805b) Support multiple many_manys between the same classes (closes #1377) (Josh) + * 2014-12-15 [6ad8f7c](https://github.com/silverstripe/sapphire/commit/6ad8f7c) Subject line for email links in HtmlEditorField (Loz Calver) + * 2014-11-12 [41ea83b](https://github.com/silverstripe/sapphire/commit/41ea83b) add validation to form field subclasses (Stevie Mayhew) + * 2014-10-17 [dc7bc46](https://github.com/silverstripe/sapphire/commit/dc7bc46) Text - Limit characters to closest word (Anton Smith) + * 2014-10-03 [23fc498](https://github.com/silverstripe/sapphire/commit/23fc498) Allow 'null' limit for database queries (closes #3487) (Loz Calver) + * 2014-05-04 [3b9056f](https://github.com/silverstripe/sapphire/commit/3b9056f) Cookie_Backend for managing cookie state (Daniel Hensby) + * 2013-10-17 [e8287cd](https://github.com/silverstripe/sapphire/commit/e8287cd) Hook for `Member::registerFailedLogin` (Thomas Speak) + * 2013-08-23 [7d7c754](https://github.com/silverstripe/silverstripe-cms/commit/7d7c754) Track broken anchors (Russell Michell) + * 2013-06-05 [60333f6](https://github.com/silverstripe/sapphire/commit/60333f6) UploadField lists all files, shows path info (Ingo Schommer) + * 2013-06-03 [2a91d27](https://github.com/silverstripe/sapphire/commit/2a91d27) use Injector pattern to create ValidationResult in validate (Will Morgan) + * 2013-05-26 [736bde8](https://github.com/silverstripe/sapphire/commit/736bde8) Add Convert::raw2htmlid() (Will Rossiter) + * 2013-03-26 [64349fe](https://github.com/silverstripe/sapphire/commit/64349fe) Allow setting of ASSETS_DIR in _ss_environment.php (Loz Calver) + +### Bugfixes + + * 2015-06-16 [6169bf2](https://github.com/silverstripe/sapphire/commit/6169bf2) No longer caching has_one after ID change (Daniel Hensby) + * 2015-06-16 [ce3b5a5](https://github.com/silverstripe/sapphire/commit/ce3b5a5) Fix major segfault on PDOConnector after any DDL BUG Fix issue in PDOQuery::first() Refactor previewWrite and benchmarkQuery into SS_Database (Damian Mooyman) + * 2015-06-11 [6be0488](https://github.com/silverstripe/sapphire/commit/6be0488) TreeDropdownField doesnt change label on unselect (Daniel Hensby) + * 2015-06-09 [24a268a](https://github.com/silverstripe/sapphire/commit/24a268a) Image test cleanup (Jonathon Menz) + * 2015-06-09 [07c21e2](https://github.com/silverstripe/sapphire/commit/07c21e2) Fix deletion of orphaned versioned records when a parent _versions table has been deleted (Damian Mooyman) + * 2015-06-08 [acf19b7](https://github.com/silverstripe/sapphire/commit/acf19b7) Fix false values for many_many_ExtraFields not being saved Fixes #4067 (Damian Mooyman) + * 2015-06-05 [a819bcf](https://github.com/silverstripe/silverstripe-cms/commit/a819bcf) explicitly call get functions for site tree checks (Stevie Mayhew) + * 2015-05-29 [0319f78](https://github.com/silverstripe/sapphire/commit/0319f78) Incorrect env setting in 3.1.13 (Damian Mooyman) + * 2015-05-22 [68d8df4](https://github.com/silverstripe/sapphire/commit/68d8df4) DropdownField didn't consider disabled items (Loz Calver) + * 2015-05-22 [e0710ae](https://github.com/silverstripe/sapphire/commit/e0710ae) Fix DirectorTest failing when run with sake (Damian Mooyman) + * 2015-05-20 [94f6a13](https://github.com/silverstripe/sapphire/commit/94f6a13) Fixed setting LastEdited for DataObject with class ancestry (Gregory Smirnov) + * 2015-05-20 [869e69a](https://github.com/silverstripe/sapphire/commit/869e69a) Clicking icon in site tree link fails (Jonathon Menz) + * 2015-05-20 [f9bdf61](https://github.com/silverstripe/sapphire/commit/f9bdf61) Fixed handling of numbers in certain locales (Gregory Smirnov) + * 2015-05-19 [dbe2ad4](https://github.com/silverstripe/silverstripe-cms/commit/dbe2ad4) Folder expansion icons (Jonathon Menz) + * 2015-05-19 [a56d08b](https://github.com/silverstripe/sapphire/commit/a56d08b) TreeDropdownField Folder expansion (Jonathon Menz) + * 2015-05-16 [c6bcfea](https://github.com/silverstripe/sapphire/commit/c6bcfea) FieldList::changeFieldOrder() leftovers discarded (Jonathon Menz) + * 2015-05-11 [9e8a5c9](https://github.com/silverstripe/sapphire/commit/9e8a5c9) remove validation type constraint from form fields for 3.2 release (Stevie Mayhew) + * 2015-02-14 [bee642a](https://github.com/silverstripe/sapphire/commit/bee642a) make class loader classExists check interface_exists as per docs (Daniel Hensby) + * 2015-02-08 [6212b4b](https://github.com/silverstripe/sapphire/commit/6212b4b) Versioned not ignoring obsolete fields (Benjamin R. White) + * 2015-01-31 [e724d6f](https://github.com/silverstripe/sapphire/commit/e724d6f) notice level error when value is not set on CreditCardField (Will Rossiter) + * 2015-01-07 [cee7adc](https://github.com/silverstripe/sapphire/commit/cee7adc) . Placeholder isn't completely translated (Elvinas L) + * 2014-12-15 [c358ac6](https://github.com/silverstripe/sapphire/commit/c358ac6) How to folder on forms (Cam Findlay) + * 2014-12-09 [bdb3b7f](https://github.com/silverstripe/sapphire/commit/bdb3b7f) Feedback to name the fields section to "field types" to make it clearer what the section is about. (Cam Findlay) + * 2014-12-09 [aba9667](https://github.com/silverstripe/sapphire/commit/aba9667) use GFMD code blocks to fix code formatting consistency. (Cam Findlay) + * 2014-11-03 [51337ac](https://github.com/silverstripe/sapphire/commit/51337ac) Image backend ignoring config. (Michael Strong) + * 2014-10-26 [ec0c259](https://github.com/silverstripe/sapphire/commit/ec0c259) Reinstate tab and form focus states (fixes CMS #732 and #817) (Naomi Guyer) + * 2014-10-25 [28be51c](https://github.com/silverstripe/sapphire/commit/28be51c) Config state leaking between unit tests (Loz Calver) + * 2014-09-26 [db0cad4](https://github.com/silverstripe/sapphire/commit/db0cad4) ErrorControlChain now supports exception handling (Damian Mooyman) + * 2014-09-20 [bbc1cb8](https://github.com/silverstripe/sapphire/commit/bbc1cb8) #3458 iframe transport multi file upload FIX #3343, FIX #3148 (Thierry François) + * 2014-09-02 [c140459](https://github.com/silverstripe/sapphire/commit/c140459) Fix versioned Versioned is not writing Version to _version tables for subclasses of Version dataobjects which have their own DB fields - Fix disjoint of ID / RecordID (which should be the same) - Fix calculation of new record version - Fix use of empty vs !isset to check for existing version (Damian Mooyman) + * 2014-09-01 [3644110](https://github.com/silverstripe/sapphire/commit/3644110) Ensure that columns are unique within a gridfield (Will Rossiter) + * 2014-08-01 [b0239f4](https://github.com/silverstripe/sapphire/commit/b0239f4) Fix PDOConnector issues Travis support for PDO ATTR_EMULATE_PREPARES = false breaks some test cases Enable username sans password Remove unnecessary semicolons delimiting queries (Damian Mooyman) + * 2014-07-25 [81c0a34](https://github.com/silverstripe/sapphire/commit/81c0a34) Remove caching of statements due to risk of instability This would cause segfaults in rare situations where statements are reused (Damian Mooyman) + * 2014-07-15 [0433ba1](https://github.com/silverstripe/sapphire/commit/0433ba1) Revert some changes to ManyManyList BUG Fix incompatibility in Member_GroupList Fix regressions in merges from 3.1 BUG Fix Security failing on test classes BUG Fix postgresql compatibility Clarify sql encoding of table names (Damian Mooyman) + * 2014-05-22 [3213630](https://github.com/silverstripe/sapphire/commit/3213630) fix listview not working with IE9 (Igor) + * 2014-05-09 [8335de4](https://github.com/silverstripe/sapphire/commit/8335de4) remove redundant DB name switch in TestRunner (Will Morgan) + * 2014-05-02 [9cbfd14](https://github.com/silverstripe/sapphire/commit/9cbfd14) TemplateManifest prevent cache collision (Will Morgan) + * 2014-04-30 [5dd0583](https://github.com/silverstripe/silverstripe-cms/commit/5dd0583) Fix encoding of SearchForm::getSearchQuery This made it awkward for user code to extract the query value for use in other applications; This would otherwise have to be xml decoded again. Casting has been promoted to the templating level via DBField::create_field and a `SearchForm.casting` config setting. (Damian Mooyman) + * 2014-04-08 [438fe02](https://github.com/silverstripe/sapphire/commit/438fe02) change action variable source to getViewer (Will Morgan) + * 2014-03-28 [cf5d524](https://github.com/silverstripe/sapphire/commit/cf5d524) Fix regressions from #2206 in hasValue and dbObject (Damian Mooyman) + * 2014-03-25 [4b87b2e](https://github.com/silverstripe/silverstripe-cms/commit/4b87b2e) Fix ContentControllerTest (Damian Mooyman) + * 2014-02-28 [ab52b67](https://github.com/silverstripe/sapphire/commit/ab52b67) Log out current member when forgotten password (Daniel Hensby) + * 2014-02-20 [f6b72a2](https://github.com/silverstripe/sapphire/commit/f6b72a2) Fixed regression in ContentController template selection. (Sam Minnee) + * 2014-02-14 [d0a4fc2](https://github.com/silverstripe/silverstripe-cms/commit/d0a4fc2) Fix failover to index template in ContentController::getViewer() (Sam Minnee) + * 2014-02-04 [cd213ab](https://github.com/silverstripe/sapphire/commit/cd213ab) Fixed handing of false values in GridState_Data API Added ability to unset values (Damian Mooyman) + * 2014-01-31 [6df276c](https://github.com/silverstripe/sapphire/commit/6df276c) GridState_Data doesn't hold falsey values (Daniel Hensby) + * 2013-10-30 [4102cc6](https://github.com/silverstripe/sapphire/commit/4102cc6) Issues with CMSForm not consistently respecting new form naming scheme. Fixes for failing CMSFormTest cases (Damian Mooyman) + * 2013-10-23 [8534982](https://github.com/silverstripe/sapphire/commit/8534982) Debug error handler breaks error_get_last (Damian Mooyman) + * 2013-10-19 [ab10c2e](https://github.com/silverstripe/sapphire/commit/ab10c2e) An enum field in the search panel model admin misses an option to not filter on that field (Nico Haase) + * 2013-10-17 [d22ca62](https://github.com/silverstripe/sapphire/commit/d22ca62) FailedLoginCount reset (Thomas Speak) + * 2013-10-02 [fb5bb64](https://github.com/silverstripe/sapphire/commit/fb5bb64) Fixed cross-platform issues with test cases and file utilities (Damian Mooyman) + * 2013-05-30 [c7468ca](https://github.com/silverstripe/sapphire/commit/c7468ca) Generate Form::FormName() through (Will Rossiter) + * 2013-05-26 [831a507](https://github.com/silverstripe/sapphire/commit/831a507) Update references to ID values from 79c9433 (Will Rossiter) + * 2013-05-17 [3728907](https://github.com/silverstripe/sapphire/commit/3728907) allow children to be accessed via template (Will Morgan) + * 2013-01-23 [60c4d99](https://github.com/silverstripe/sapphire/commit/60c4d99) PHPUnit latest not working with composer installed builds (Hamish Friedlander) + * 2012-12-13 [31255fc](https://github.com/silverstripe/sapphire/commit/31255fc) Set visibility on login form methods to public. (Justin Martin) + * 2012-12-12 [379b561](https://github.com/silverstripe/sapphire/commit/379b561) RSSFeed now sets the Content-Type on the current HTTPResponse (Simon Welsh) From da4c31cd50d4b8dc351dfee592b06c6465b1d918 Mon Sep 17 00:00:00 2001 From: Devlin Date: Fri, 19 Jun 2015 12:36:49 +0200 Subject: [PATCH 035/110] Install - Check if mysite/_config/config.yml is writeable --- dev/install/install.php5 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dev/install/install.php5 b/dev/install/install.php5 index 9491e354f..91b5f4b06 100755 --- a/dev/install/install.php5 +++ b/dev/install/install.php5 @@ -415,6 +415,13 @@ class InstallRequirements { "Is the mysite/_config.php file writeable?", null )); + + $this->requireWriteable('mysite/_config/config.yml', array( + "File permissions", + "Is the mysite/_config/config.yml file writeable?", + null + )); + if(!$this->checkModuleExists('cms')) { $this->requireWriteable('mysite/code/RootURLController.php', array( "File permissions", From a58e59565b7b092451b084643d58ddb6ccfbee31 Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Fri, 19 Jun 2015 12:01:41 +0100 Subject: [PATCH 036/110] FIX: docs not included in composer package installs (through export-ignore git attribute) This change will improve the performance of package-download-based installs of composer packages, by excluding docs. It does this by exlcuding them from the output of the "git archive" command. The suggestion came from https://github.com/composer/composer/issues/1750 --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..d509cc6b9 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +docs/ export-ignore From 900a7b7ff9693866dc26d483d44b09ac544d02cb Mon Sep 17 00:00:00 2001 From: ezero Date: Sat, 20 Jun 2015 00:38:59 +1200 Subject: [PATCH 037/110] Unable to migrate down Possible bug? Running PHP 5.6.3 I had to override this method in MyMigrationTask. --- dev/MigrationTask.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/MigrationTask.php b/dev/MigrationTask.php index 1001465b2..276b62fd8 100644 --- a/dev/MigrationTask.php +++ b/dev/MigrationTask.php @@ -16,7 +16,7 @@ * protected $description = "Description"; // description of what it does * * public function run($request) { - * if ($request->param('Direction') == 'down') { + * if ($request->getVar('Direction') == 'down') { * $this->down(); * } else { * $this->up(); From 305801d015cbf5d13e5bdd48a846436eff83ce79 Mon Sep 17 00:00:00 2001 From: David Alexander Date: Sat, 20 Jun 2015 16:52:46 +1200 Subject: [PATCH 038/110] Update 07_Code_of_conduct.md Typos, grammar, rewording. --- docs/en/05_Contributing/07_Code_of_conduct.md | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/en/05_Contributing/07_Code_of_conduct.md b/docs/en/05_Contributing/07_Code_of_conduct.md index 290ddbb4f..2084c8b69 100644 --- a/docs/en/05_Contributing/07_Code_of_conduct.md +++ b/docs/en/05_Contributing/07_Code_of_conduct.md @@ -10,39 +10,39 @@ Honour the code of conduct whenever you participate formally and informally in o * Experiment with your code and share the results. * Ask questions if you get stuck. - * If you can answer questions be responsive and help guide others towards solutions + * If you can answer questions, be responsive and help guide others towards solutions. * Share code and knowledge that might help others. * The community is first and foremost about people sharing their knowledge to build something great together. ## Be empathetic, friendly and considerate. - * Welcome and encourage participation from everyone that wishes to join our community. - * Remember growing the community socially is as important as code related matters. + * Welcome and encourage participation from everyone that wishes to join and contribute to our community. + * Remember, growing the community socially is just as important as code related matters. * Be respectful and honour diversity in our community. Sexist, racist, and other exclusionary jokes can offend those around you and are not appropriate. * Keep your actions lawful, non-discriminatory, and unthreatening towards others. ## Respect the reader’s time. * Be concise and read over things before you post. - * Mind your words, you write something once that will be read by many - being abusive, mean spirited and swearing at others does nothing to help get points across and drive constructive contributions to open source. - * Be clear when responding who you are representing, are you speaking on behalf of another business or acting in your capacity as an individual community member? Either is fine and encouraged and you should aim to make it clear to the reader. + * Mind your words; you write a single time but what you write will be read by many. Being abusive, mean spirited and swearing at others do nothing to help get your points across nor do they drive constructive collaboration and hence stimulate contributions to open source. + * Be clear about who you are representing when responding; are you speaking on behalf of another business or acting in your capacity as an individual community member? Either is fine and both are encouraged. Just make it clear to the reader. ## Respect different levels of participation. - * Welcome newcomers, spend a little time helping orientate them in our community. + * Welcome newcomers. Spend some time helping them to get orientated in our community. * All contributors and core committers, module maintainers and knowledge sharers are participating in the community in a voluntary nature. Have respect for them and their time when making requests. You may need to exercise some patience. - * Whenever possible reference your comments to others with example code or links to documentation. This helps people learn and become more experienced community members and developers. - * If you manage to solve your own problem, tell others how you solved it. This will help people in the future that find they have the same problem as you. - * If you are reducing your input and potentially stepping away from the community please remember others might rely on your contributions. Be prepared to ensure these are kept open and available, spend some time handing over to another community member or core contributor to help continuity of SilverStripe open source. + * Whenever possible, reference your comments to others with example code or links to documentation. This helps people learn and become more experienced community members and developers. + * If you manage to solve your own problem, tell others how you solved it. This will help people in the future who have to solve the sort of problem. + * If you are reducing your input, and potentially stepping away from the community, please remember that others might be relying on your contributions. Be prepared to ensure your contributions remain open and available to the community. Spend some time handing your contributions over to another community member or core contributor to help with the continuity of SilverStripe open source development. ## Resolve conflicts directly - * Conflict may eventuate from time to time, we should view it as a constructive process. Understanding others positions without descending into ad hominem attacks is valuable. - * Involve a 3rd party or if necessary inform a core committer if conflicts continue to escalate. - * Breaches of the code of conduct by community members may first result in a reminder about the code of conduct (we realise we're all human and sometimes we have bad days). - * Repeated and deliberate breaching after this will be referred to the core committers team and may result in members being asked to leave the community channels. + * Conflict may eventuate from time to time. We should all try to view it as a constructive process. Understanding others' positions, without descending into ad hominem attacks, is valuable and may lead to better solutions to problems. + * Involve a 3rd party. If necessary, inform a core committer if a conflict continues to escalate. + * Breaches of the code of conduct by a community member may result in a first reminder about the code of conduct (we realise we're all human and sometimes we have bad days). + * Repeated and deliberate breachings of the code of conduct following this first reminder will be referred on to the team of core committers and may result in the member being asked to leave the community channels. * While we have a policy of not removing postings and comments from our digital channels, there may be times in which items are removed if deemed blatantly discriminatory towards individuals, groups or cultures. - * Call others on their behaviour within the community and remind them of this code where necessary. - * Refer to [these helpful guides on conflict resolution](http://www.crnhq.org/pages.php?pID=10) to aid you. + * If a member behaves inappropriately, politely bring this to their attention and gently remind them of the code of conduct when necessary. + * Refer to [these helpful guides on conflict resolution](http://www.crnhq.org/pages.php?pID=10) to aid you when dealing with a conflict. ## A living document - * This is a living document, as core committers we don't have all the answers and we attempt to make the community an innovative and valuable space for everyone that wishes to participate. + * This is a living document. As core committers, we know we don't have all the answers so we want to make the community an innovative and valuable space for everyone that wishes to contribute. * If you would like to improve the wording, add additional items, or simply fix typos, each contribution to the code of conduct will be considered on it's merit and agreed upon unanimously by the core committers. Any changes will be included in future revisions of the SilverStripe code of conduct. From a94103245d647cd31089191e68ec023b47929168 Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Sat, 20 Jun 2015 11:32:29 +0100 Subject: [PATCH 039/110] DOCS Bump PHP version in Server Requirements --- docs/en/00_Getting_Started/00_Server_Requirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/00_Getting_Started/00_Server_Requirements.md b/docs/en/00_Getting_Started/00_Server_Requirements.md index a45bff786..e4dcdfd82 100644 --- a/docs/en/00_Getting_Started/00_Server_Requirements.md +++ b/docs/en/00_Getting_Started/00_Server_Requirements.md @@ -8,7 +8,7 @@ Our web-based [PHP installer](installation/) can check if you meet the requireme ## Web server software requirements - * PHP 5.3.2+ + * PHP 5.3.3+ * We recommend using a PHP accelerator or opcode cache, such as [xcache](http://xcache.lighttpd.net/) or [WinCache](http://www.iis.net/download/wincacheforphp). * Allocate at least 48MB of memory to each PHP process. (SilverStripe can be resource hungry for some intensive operations.) * Required modules: dom, gd2, fileinfo, hash, iconv, mbstring, mysqli (or other database driver), session, simplexml, tokenizer, xml. From 4ba051409d71711415136adba347f30ab0e8de1e Mon Sep 17 00:00:00 2001 From: Christopher Pitt Date: Sat, 20 Jun 2015 13:55:58 +0100 Subject: [PATCH 040/110] Cleaned up FormField --- forms/FormField.php | 1038 +++++++++++++++++++++++++++---------------- 1 file changed, 664 insertions(+), 374 deletions(-) diff --git a/forms/FormField.php b/forms/FormField.php index 693c50253..0d0ebe525 100644 --- a/forms/FormField.php +++ b/forms/FormField.php @@ -1,19 +1,25 @@ Subclassing - * - * Define a {@link dataValue()} method that returns a value suitable for inserting into a single database field. - * For example, you might tidy up the format of a date or currency field. - * Define {@link saveInto()} to totally customise saving. - * For example, data might be saved to the filesystem instead of the data record, - * or saved to a component of the data record instead of the data record itself. - * + * + * In addition to single fields, FormField objects can be "composite", for example, the + * {@link TabSet} field. Composite fields let us define complex forms without having to resort to + * custom HTML. + * + * To subclass: + * + * Define a {@link dataValue()} method that returns a value suitable for inserting into a single + * database field. + * + * For example, you might tidy up the format of a date or currency field. Define {@link saveInto()} + * to totally customise saving. + * + * For example, data might be saved to the filesystem instead of the data record, or saved to a + * component of the data record instead of the data record itself. + * * @package forms * @subpackage core */ @@ -24,153 +30,244 @@ class FormField extends RequestHandler { */ protected $form; - protected $name, $title, $value ,$message, $messageType, $extraClass; - /** - * @var $description string Adds a "title"-attribute to the markup. + * @var string + */ + protected $name; + + /** + * @var null|string + */ + protected $title; + + /** + * @var mixed + */ + protected $value; + + /** + * @var string + */ + protected $message; + + /** + * @var string + */ + protected $messageType; + + /** + * @var string + */ + protected $extraClass; + + /** + * Adds a title attribute to the markup. + * + * @var string + * * @todo Implement in all subclasses */ protected $description; - + /** - * @var $extraClasses array Extra CSS-classes for the formfield-container + * Extra CSS classes for the FormField container. + * + * @var array */ protected $extraClasses; - - public $dontEscape; - + /** - * @var $rightTitle string Used in SmallFieldHolder to force a right-aligned label, or in FieldHolder - * to create contextual label. + * @var bool + */ + public $dontEscape; + + /** + * Right-aligned, contextual label for the field. + * + * @var string */ protected $rightTitle; - + /** - * @var $leftTitle string Used in SmallFieldHolder() to force a left-aligned label with correct spacing. - * Please use $title for FormFields rendered with FieldHolder(). + * Left-aligned, contextual label for the field. + * + * @var string */ protected $leftTitle; - + /** * Stores a reference to the FieldList that contains this object. + * * @var FieldList */ protected $containerFieldList; - + /** - * @var boolean + * @var bool */ protected $readonly = false; /** - * @var boolean + * @var bool */ protected $disabled = false; - + /** - * @var string custom validation message for the Field - */ - protected $customValidationMessage = ""; - - /** - * Name of the template used to render this form field. If not set, then - * will look up the class ancestry for the first matching template where - * the template name equals the class name. - * - * To explicitly use a custom template or one named other than the form - * field see {@link setTemplate()}, {@link setFieldHolderTemplate()} + * Custom validation message for the field. * * @var string */ - protected - $template, - $fieldHolderTemplate, - $smallFieldHolderTemplate; - + protected $customValidationMessage = ''; + /** - * @var array All attributes on the form field (not the field holder). - * Partially determined based on other instance properties, please use {@link getAttributes()}. + * Name of the template used to render this form field. If not set, then will look up the class + * ancestry for the first matching template where the template name equals the class name. + * + * To explicitly use a custom template or one named other than the form field see + * {@link setTemplate()}. + * + * @var string + */ + protected $template; + + /** + * Name of the template used to render this form field. If not set, then will look up the class + * ancestry for the first matching template where the template name equals the class name. + * + * To explicitly use a custom template or one named other than the form field see + * {@link setFieldHolderTemplate()}. + * + * @var string + */ + protected $fieldHolderTemplate; + + /** + * @var string + */ + protected $smallFieldHolderTemplate; + + /** + * All attributes on the form field (not the field holder). + * + * Partially determined based on other instance properties. + * + * @see getAttributes() + * + * @var array */ protected $attributes = array(); /** - * Takes a fieldname and converts camelcase to spaced - * words. Also resolves combined fieldnames with dot syntax - * to spaced words. + * Takes a field name and converts camelcase to spaced words. Also resolves combined field + * names with dot syntax to spaced words. * * Examples: + * * - 'TotalAmount' will return 'Total Amount' * - 'Organisation.ZipCode' will return 'Organisation Zip Code' * * @param string $fieldName + * * @return string */ public static function name_to_label($fieldName) { if(strpos($fieldName, '.') !== false) { $parts = explode('.', $fieldName); - $label = $parts[count($parts)-2] . ' ' . $parts[count($parts)-1]; + + $label = $parts[count($parts) - 2] . ' ' . $parts[count($parts) - 1]; } else { $label = $fieldName; } - $label = preg_replace("/([a-z]+)([A-Z])/","$1 $2", $label); - - return $label; + + return preg_replace('/([a-z]+)([A-Z])/', '$1 $2', $label); } /** * Construct and return HTML tag. + * + * @param string $tag + * @param array $attributes + * @param null|string $content + * + * @return string */ public static function create_tag($tag, $attributes, $content = null) { $preparedAttributes = ''; - foreach($attributes as $k => $v) { - // Note: as indicated by the $k == value item here; the decisions over what to include in the attributes - // can sometimes get finicky - if(!empty($v) || $v === '0' || ($k == 'value' && $v !== null) ) { - $preparedAttributes .= " $k=\"" . Convert::raw2att($v) . "\""; + + foreach($attributes as $attributeKey => $attributeValue) { + if(!empty($attributeValue) || $attributeValue === '0' || ($attributeKey == 'value' && $attributeValue !== null)) { + $preparedAttributes .= sprintf( + ' %s="%s"', $attributeKey, Convert::raw2att($attributeValue) + ); } } - if($content || $tag != 'input') return "<$tag$preparedAttributes>$content"; - else return "<$tag$preparedAttributes />"; + if($content || $tag != 'input') { + return sprintf( + '<%s%s>%s', $tag, $preparedAttributes, $content, $tag + ); + } + + return sprintf( + '<%s%s />', $tag, $preparedAttributes + ); } /** * Creates a new field. * * @param string $name The internal field name, passed to forms. - * @param string $title The human-readable field label. + * @param null|string $title The human-readable field label. * @param mixed $value The value of the field. */ public function __construct($name, $title = null, $value = null) { $this->name = $name; - $this->title = ($title === null) ? self::name_to_label($name) : $title; - if($value !== NULL) $this->setValue($value); + if($title === null) { + $this->title = self::name_to_label($name); + } else { + $this->title = $title; + } + + if($value !== null) { + $this->setValue($value); + } parent::__construct(); } - + /** - * Return a Link to this field + * Return a Link to this field. + * + * @param null|string $action + * + * @return string */ public function Link($action = null) { return Controller::join_links($this->form->FormAction(), 'field/' . $this->name, $action); } - + /** - * Returns the HTML ID of the field - used in the template by label tags. - * The ID is generated as FormName_FieldName. All Field functions should ensure - * that this ID is included in the field. + * Returns the HTML ID of the field. + * + * The ID is generated as FormName_FieldName. All Field functions should ensure that this ID is + * included in the field. */ public function ID() { - $name = preg_replace('/(^-)|(-$)/', '', preg_replace('/[^A-Za-z0-9_-]+/', '-', $this->name)); - if($this->form) return $this->form->FormName() . '_' . $name; - else return $name; + $name = $this->name; + $name = preg_replace('/[^A-Za-z0-9_-]+/', '-', $name); + $name = preg_replace('/(^-)|(-$)/', '', $name); + + if($this->form) { + return $this->form->FormName() . '_' . $name; + } + + return $name; } - + /** - * Returns the field name - used by templates. - * + * Returns the field name. + * * @return string */ public function getName() { @@ -179,130 +276,160 @@ class FormField extends RequestHandler { /** * Returns the field message, used by form validation. + * * Use {@link setError()} to set this property. - * + * * @return string */ public function Message() { return $this->message; - } - - /** - * Returns the field message type, used by form validation. - * Arbitrary value which is mostly used for CSS classes - * in the rendered HTML, e.g. "required". + } + + /** + * Returns the field message type. + * + * Arbitrary value which is mostly used for CSS classes in the rendered HTML, e.g "required". + * * Use {@link setError()} to set this property. - * + * * @return string */ public function MessageType() { return $this->messageType; - } - + } + /** - * Returns the field value - used by templates. + * Returns the field value. + * + * @return mixed */ public function Value() { return $this->value; } - + /** * Method to save this form field into the given data object. - * By default, makes use of $this->dataValue() - * - * @param DataObjectInterface $record DataObject to save data into + * + * @param DataObjectInterface $record */ public function saveInto(DataObjectInterface $record) { if($this->name) { $record->setCastedField($this->name, $this->dataValue()); } } - + /** - * Returns the field value suitable for insertion into the data object + * Returns the field value suitable for insertion into the data object. + * + * @return mixed */ public function dataValue() { return $this->value; } - + /** - * Returns the field label - used by templates. + * Returns the field label. */ public function Title() { return $this->title; } - - public function setTitle($val) { - $this->title = $val; + + /** + * @param string $title + * + * @return $this + */ + public function setTitle($title) { + $this->title = $title; + return $this; } /** - * Gets the contextual label than can be used for additional field description. - * Can be shown to the right or under the field in question. - * - * @return string Contextual label text. + * @return string */ public function RightTitle() { return $this->rightTitle; } /** - * Sets the contextual label. + * @param string $rightTitle * - * @param $val string Text to set on the label. + * @return $this */ - public function setRightTitle($val) { - $this->rightTitle = $val; - return $this; - } + public function setRightTitle($rightTitle) { + $this->rightTitle = $rightTitle; - public function LeftTitle() { - return $this->leftTitle; - } - - public function setLeftTitle($val) { - $this->leftTitle = $val; return $this; } /** - * Compiles all CSS-classes. Optionally includes a "nolabel"-class - * if no title was set on the formfield. - * Uses {@link Message()} and {@link MessageType()} to add validatoin - * error classes which can be used to style the contained tags. - * - * @return string CSS-classnames + * @return string + */ + public function LeftTitle() { + return $this->leftTitle; + } + + /** + * @param string $leftTitle + * + * @return $this + */ + public function setLeftTitle($leftTitle) { + $this->leftTitle = $leftTitle; + + return $this; + } + + /** + * Compiles all CSS-classes. Optionally includes a "nolabel" class if no title was set on the + * FormField. + * + * Uses {@link Message()} and {@link MessageType()} to add validation error classes which can + * be used to style the contained tags. + * + * @return string */ public function extraClass() { $classes = array(); $classes[] = $this->Type(); - if($this->extraClasses) $classes = array_merge($classes, array_values($this->extraClasses)); - - // Allow customization of label and field tag positioning - if(!$this->Title()) $classes[] = "nolabel"; - - // Allow custom styling of any element in the container based - // on validation errors, e.g. red borders on input tags. - // CSS-Class needs to be different from the one rendered - // through {@link FieldHolder()} - if($this->Message()) $classes[] .= "holder-" . $this->MessageType(); - + if($this->extraClasses) { + $classes = array_merge( + $classes, + array_values($this->extraClasses) + ); + } + + if(!$this->Title()) { + $classes[] = 'nolabel'; + } + + // Allow custom styling of any element in the container based on validation errors, + // e.g. red borders on input tags. + // + // CSS class needs to be different from the one rendered through {@link FieldHolder()}. + if($this->Message()) { + $classes[] .= 'holder-' . $this->MessageType(); + } + return implode(' ', $classes); } - + /** - * Add one or more CSS-classes to the formfield-container. Multiple class - * names should be space delimited. - * + * Add one or more CSS-classes to the FormField container. + * + * Multiple class names should be space delimited. + * * @param string $class + * + * @return $this */ public function addExtraClass($class) { $classes = preg_split('/\s+/', $class); - foreach ($classes as $class) { + foreach($classes as $class) { $this->extraClasses[$class] = $class; } @@ -310,199 +437,252 @@ class FormField extends RequestHandler { } /** - * Remove one or more CSS-classes from the formfield-container. - * + * Remove one or more CSS-classes from the FormField container. + * * @param string $class + * + * @return $this */ public function removeExtraClass($class) { $classes = preg_split('/\s+/', $class); - foreach ($classes as $class) { + foreach($classes as $class) { unset($this->extraClasses[$class]); } - + return $this; } /** * Set an HTML attribute on the field element, mostly an tag. - * - * Some attributes are best set through more specialized methods, to avoid interfering with built-in behaviour: + * + * Some attributes are best set through more specialized methods, to avoid interfering with + * built-in behaviour: + * * - 'class': {@link addExtraClass()} * - 'title': {@link setDescription()} * - 'value': {@link setValue} * - 'name': {@link setName} - * - * CAUTION Doesn't work on most fields which are composed of more than one HTML form field: - * AjaxUniqueTextField, CheckboxSetField, ComplexTableField, CompositeField, ConfirmedPasswordField, - * CountryDropdownField, CreditCardField, CurrencyField, DateField, DatetimeField, FieldGroup, GridField, - * HtmlEditorField, ImageField, ImageFormAction, InlineFormAction, ListBoxField, etc. - * - * @param string - * @param string + * + * Caution: this doesn't work on most fields which are composed of more than one HTML form + * field. + * + * @param string $name + * @param string $value + * + * @return $this */ public function setAttribute($name, $value) { $this->attributes[$name] = $value; + return $this; } /** * Get an HTML attribute defined by the field, or added through {@link setAttribute()}. - * Caution: Doesn't work on all fields, see {@link setAttribute()}. - * - * @return string + * + * Caution: this doesn't work on all fields, see {@link setAttribute()}. + * + * @return null|string */ public function getAttribute($name) { - $attrs = $this->getAttributes(); - if(isset($attrs[$name])) return $attrs[$name]; + $attributes = $this->getAttributes(); + + if(isset($attributes[$name])) { + return $attributes[$name]; + } + + return null; } - + /** * @return array */ public function getAttributes() { - $attrs = array( + $attributes = array( 'type' => 'text', 'name' => $this->getName(), - 'value' => $this->Value(), + 'value' => $this->Value(), 'class' => $this->extraClass(), 'id' => $this->ID(), 'disabled' => $this->isDisabled(), 'readonly' => $this->isReadonly() ); - - if ($this->Required()) { - $attrs['required'] = 'required'; - $attrs['aria-required'] = 'true'; + + if($this->Required()) { + $attributes['required'] = 'required'; + $attributes['aria-required'] = 'true'; } - return array_merge($attrs, $this->attributes); + return array_merge($attributes, $this->attributes); } /** - * @param Array Custom attributes to process. Falls back to {@link getAttributes()}. - * If at least one argument is passed as a string, all arguments act as excludes by name. - * @return string HTML attributes, ready for insertion into an HTML tag + * Custom attributes to process. Falls back to {@link getAttributes()}. + * + * If at least one argument is passed as a string, all arguments act as excludes, by name. + * + * @param array $attributes + * + * @return string */ - public function getAttributesHTML($attrs = null) { - $exclude = (is_string($attrs)) ? func_get_args() : null; + public function getAttributesHTML($attributes = null) { + $exclude = null; - if(!$attrs || is_string($attrs)) $attrs = $this->getAttributes(); + if(is_string($attributes)) { + $exclude = func_get_args(); + } - // Remove empty - $attrs = array_filter((array)$attrs, function($v) { + if(!$attributes || is_string($attributes)) { + $attributes = $this->getAttributes(); + } + + $attributes = (array) $attributes; + + $attributes = array_filter($attributes, function ($v) { return ($v || $v === 0 || $v === '0'); - }); + }); - // Remove excluded - if($exclude) $attrs = array_diff_key($attrs, array_flip($exclude)); + if($exclude) { + $attributes = array_diff_key( + $attributes, + array_flip($exclude) + ); + } - // Create markkup $parts = array(); - foreach($attrs as $name => $value) { - $parts[] = ($value === true) ? "{$name}=\"{$name}\"" : "{$name}=\"" . Convert::raw2att($value) . "\""; + + foreach($attributes as $name => $value) { + if($value === true) { + $parts[] = sprintf('%s="%s"', $name, $name); + } else { + $parts[] = sprintf('%s="%s"', $name, Convert::raw2att($value)); + } } return implode(' ', $parts); } /** - * Returns a version of a title suitable for insertion into an HTML attribute + * Returns a version of a title suitable for insertion into an HTML attribute. + * + * @return string */ public function attrTitle() { return Convert::raw2att($this->title); } + /** - * Returns a version of a title suitable for insertion into an HTML attribute + * Returns a version of a title suitable for insertion into an HTML attribute. + * + * @return string */ public function attrValue() { return Convert::raw2att($this->value); } - + /** * Set the field value. - * + * * @param mixed $value - * @param mixed $data Optional data source passed in by {@see Form::loadDataFrom} - * @return FormField Self reference + * @param null|array|DataObject $data {@see Form::loadDataFrom} + * + * @return $this */ public function setValue($value) { $this->value = $value; + return $this; } - + /** - * Set the field name + * Set the field name. + * + * @param string $name + * + * @return $this */ public function setName($name) { $this->name = $name; + return $this; } - + /** * Set the container form. - * This is called whenever you create a new form and put fields inside it, so that you don't - * have to worry about linking the two. + * + * This is called automatically when fields are added to forms. + * + * @param Form $form + * + * @return $this */ public function setForm($form) { $this->form = $form; + return $this; } - + /** * Get the currently used form. * * @return Form */ public function getForm() { - return $this->form; + return $this->form; } - + /** - * Return TRUE if security token protection is enabled on the parent {@link Form}. + * Return true if security token protection is enabled on the parent {@link Form}. * * @return bool */ public function securityTokenEnabled() { $form = $this->getForm(); - if(!$form) return false; - + + if(!$form) { + return false; + } + return $form->getSecurityToken()->isEnabled(); } - + /** - * Sets the error message to be displayed on the form field - * Set by php validation of the form. + * Sets the error message to be displayed on the form field. * - * @param string $message Message to show to the user. Allows HTML content, - * which means you need to use Convert::raw2xml() for any user supplied data. + * Allows HTML content, so remember to use Convert::raw2xml(). + * + * @param string $message + * @param string $messageType + * + * @return $this */ public function setError($message, $messageType) { - $this->message = $message; - $this->messageType = $messageType; - + $this->message = $message; + $this->messageType = $messageType; + return $this; } - + /** - * Set the custom error message to show instead of the default - * format of Please Fill In XXX. Different from setError() as - * that appends it to the standard error messaging - * - * @param string Message for the error - */ - public function setCustomValidationMessage($msg) { - $this->customValidationMessage = $msg; - - return $this; - } - - /** - * Get the custom error message for this form field. If a custom - * message has not been defined then just return blank. The default - * error is defined on {@link Validator}. + * Set the custom error message to show instead of the default format. + * + * Different from setError() as that appends it to the standard error messaging. + * + * @param string $customValidationMessage + * + * @return $this + */ + public function setCustomValidationMessage($customValidationMessage) { + $this->customValidationMessage = $customValidationMessage; + + return $this; + } + + /** + * Get the custom error message for this form field. If a custom message has not been defined + * then just return blank. The default error is defined on {@link Validator}. * - * @todo Should the default error message be stored here instead * @return string */ public function getCustomValidationMessage() { @@ -511,98 +691,120 @@ class FormField extends RequestHandler { /** * Set name of template (without path or extension). - * Caution: Not consistently implemented in all subclasses, - * please check the {@link Field()} method on the subclass for support. - * - * @param string + * + * Caution: Not consistently implemented in all subclasses, please check the {@link Field()} + * method on the subclass for support. + * + * @param string $template + * + * @return $this */ public function setTemplate($template) { $this->template = $template; - + return $this; } - + /** * @return string */ public function getTemplate() { return $this->template; } - + /** * @return string */ public function getFieldHolderTemplate() { return $this->fieldHolderTemplate; } - + /** - * Set name of template (without path or extension) for the holder, - * which in turn is responsible for rendering {@link Field()}. - * - * Caution: Not consistently implemented in all subclasses, - * please check the {@link Field()} method on the subclass for support. - * - * @param string + * Set name of template (without path or extension) for the holder, which in turn is + * responsible for rendering {@link Field()}. + * + * Caution: Not consistently implemented in all subclasses, please check the {@link Field()} + * method on the subclass for support. + * + * @param string $fieldHolderTemplate + * + * @return $this */ - public function setFieldHolderTemplate($template) { - $this->fieldHolderTemplate = $template; - + public function setFieldHolderTemplate($fieldHolderTemplate) { + $this->fieldHolderTemplate = $fieldHolderTemplate; + return $this; } - + /** * @return string */ public function getSmallFieldHolderTemplate() { return $this->smallFieldHolderTemplate; } - + /** - * Set name of template (without path or extension) for the small holder, - * which in turn is responsible for rendering {@link Field()}. - * - * Caution: Not consistently implemented in all subclasses, - * please check the {@link Field()} method on the subclass for support. - * - * @param string + * Set name of template (without path or extension) for the small holder, which in turn is + * responsible for rendering {@link Field()}. + * + * Caution: Not consistently implemented in all subclasses, please check the {@link Field()} + * method on the subclass for support. + * + * @param string $smallFieldHolderTemplate + * + * @return $this */ - public function setSmallFieldHolderTemplate($template) { - $this->smallFieldHolderTemplate = $template; - + public function setSmallFieldHolderTemplate($smallFieldHolderTemplate) { + $this->smallFieldHolderTemplate = $smallFieldHolderTemplate; + return $this; } - + /** - * Returns the form field - used by templates. + * Returns the form field. + * * Although FieldHolder is generally what is inserted into templates, all of the field holder - * templates make use of $Field. It's expected that FieldHolder will give you the "complete" + * templates make use of $Field. It's expected that FieldHolder will give you the "complete" * representation of the field on the form, whereas Field will give you the core editing widget, * such as an input tag. - * - * @param array $properties key value pairs of template variables + * + * @param array $properties + * * @return string */ public function Field($properties = array()) { - $obj = ($properties) ? $this->customise($properties) : $this; + $context = $this; + + if(count($properties)) { + $context = $context->customise($properties); + } + $this->extend('onBeforeRender', $this); - return $obj->renderWith($this->getTemplates()); + + return $context->renderWith($this->getTemplates()); } /** - * Returns a "field holder" for this field - used by templates. - * + * Returns a "field holder" for this field. + * * Forms are constructed by concatenating a number of these field holders. + * * The default field holder is a label and a form field inside a div. + * * @see FieldHolder.ss - * - * @param array $properties key value pairs of template variables + * + * @param array $properties + * * @return string */ public function FieldHolder($properties = array()) { - $obj = ($properties) ? $this->customise($properties) : $this; + $context = $this; - return $obj->renderWith($this->getFieldHolderTemplates()); + if(count($properties)) { + $context = $this->customise($properties); + } + + return $context->renderWith($this->getFieldHolderTemplates()); } /** @@ -613,71 +815,81 @@ class FormField extends RequestHandler { * @return string */ public function SmallFieldHolder($properties = array()) { - $obj = ($properties) ? $this->customise($properties) : $this; + $context = $this; - return $obj->renderWith($this->getSmallFieldHolderTemplates()); + if(count($properties)) { + $context = $this->customise($properties); + } + + return $context->renderWith($this->getSmallFieldHolderTemplates()); } - + /** - * Returns an array of templates to use for rendering {@link FieldH} + * Returns an array of templates to use for rendering {@link FieldHolder}. * * @return array */ public function getTemplates() { return $this->_templates($this->getTemplate()); } - + /** - * Returns an array of templates to use for rendering {@link FieldHolder} + * Returns an array of templates to use for rendering {@link FieldHolder}. * * @return array */ public function getFieldHolderTemplates() { return $this->_templates( - $this->getFieldHolderTemplate(), + $this->getFieldHolderTemplate(), '_holder' ); } /** - * Returns an array of templates to use for rendering {@link SmallFieldHolder} + * Returns an array of templates to use for rendering {@link SmallFieldHolder}. * * @return array - */ + */ public function getSmallFieldHolderTemplates() { return $this->_templates( - $this->getSmallFieldHolderTemplate(), + $this->getSmallFieldHolderTemplate(), '_holder_small' ); } /** - * Generate an array of classname strings to use for rendering this form - * field into HTML + * Generate an array of class name strings to use for rendering this form field into HTML. * - * @param string $custom custom template (if set) - * @param string $suffix template suffix + * @param string $customTemplate + * @param string $customTemplateSuffix * - * @return array $stack a stack of + * @return array */ - private function _templates($custom = null, $suffix = null) { + private function _templates($customTemplate = null, $customTemplateSuffix = null) { $matches = array(); - + foreach(array_reverse(ClassInfo::ancestry($this)) as $className) { - $matches[] = $className . $suffix; - - if($className == "FormField") break; + $matches[] = $className . $customTemplateSuffix; + + if($className == "FormField") { + break; + } } - - if($custom) array_unshift($matches, $custom); - + + if($customTemplate) { + array_unshift($matches, $customTemplate); + } + return $matches; } - + /** * Returns true if this field is a composite field. + * * To create composite field types, you should subclass {@link CompositeField}. + * + * @return bool */ public function isComposite() { return false; @@ -685,68 +897,91 @@ class FormField extends RequestHandler { /** * Returns true if this field has its own data. - * Some fields, such as titles and composite fields, don't actually have any data. It doesn't - * make sense for data-focused methods to look at them. By overloading hasData() to return false, - * you can prevent any data-focused methods from looking at it. + * + * Some fields, such as titles and composite fields, don't actually have any data. It doesn't + * make sense for data-focused methods to look at them. By overloading hasData() to return + * false, you can prevent any data-focused methods from looking at it. * * @see FieldList::collateDataFields() + * + * @return bool */ public function hasData() { return true; } /** - * @return boolean + * @return bool */ public function isReadonly() { - return $this->readonly; + return $this->readonly; } /** - * Sets readonly-flag on form-field. Please use performReadonlyTransformation() - * to actually transform this instance. - * @param $bool boolean Setting "false" has no effect on the field-state. + * Sets a read-only flag on this FormField. + * + * Use performReadonlyTransformation() to transform this instance. + * + * Setting this to false has no effect on the field. + * + * @param bool $readonly + * + * @return $this */ - public function setReadonly($bool) { - $this->readonly = $bool; + public function setReadonly($readonly) { + $this->readonly = $readonly; + return $this; } - + /** - * @return boolean + * @return bool */ public function isDisabled() { return $this->disabled; } /** - * Sets disabed-flag on form-field. Please use performDisabledTransformation() - * to actually transform this instance. - * @param $bool boolean Setting "false" has no effect on the field-state. + * Sets a disabled flag on this FormField. + * + * Use performDisabledTransformation() to transform this instance. + * + * Setting this to false has no effect on the field. + * + * @param bool $disabled + * + * @return $this */ - public function setDisabled($bool) { - $this->disabled = $bool; + public function setDisabled($disabled) { + $this->disabled = $disabled; + return $this; } - + /** - * Returns a readonly version of this field + * Returns a read-only version of this field. + * + * @return FormField */ public function performReadonlyTransformation() { $copy = $this->castedCopy('ReadonlyField'); + $copy->setReadonly(true); + return $copy; } - + /** * Return a disabled version of this field. - * Tries to find a class of the class name of this field suffixed with "_Disabled", - * failing that, finds a method {@link setDisabled()}. + * + * Tries to find a class of the class name of this field suffixed with "_Disabled", failing + * that, finds a method {@link setDisabled()}. * * @return FormField */ public function performDisabledTransformation() { $disabledClassName = $this->class . '_Disabled'; + if(ClassInfo::exists($disabledClassName)) { $clone = $this->castedCopy($disabledClassName); } else { @@ -754,46 +989,70 @@ class FormField extends RequestHandler { $clone->setDisabled(true); } - return $clone; - } - - public function transform(FormTransformation $trans) { - return $trans->transform($this); + return $clone; } - - public function hasClass($class){ - $patten = '/'.strtolower($class).'/i'; - $subject = strtolower($this->class." ".$this->extraClass()); + + /** + * @param FormTransformation $transformation + * + * @return mixed + */ + public function transform(FormTransformation $transformation) { + return $transformation->transform($this); + } + + /** + * @param string $class + * + * @return int + */ + public function hasClass($class) { + $patten = '/' . strtolower($class) . '/i'; + + $subject = strtolower($this->class . ' ' . $this->extraClass()); + return preg_match($patten, $subject); } - + /** - * Returns the field type - used by templates. + * Returns the field type. + * * The field type is the class name with the word Field dropped off the end, all lowercase. - * It's handy for assigning HTML classes. Doesn't signify the attribute, - * see {link getAttributes()}. - * + * + * It's handy for assigning HTML classes. Doesn't signify the attribute. + * + * @see {link getAttributes()}. + * * @return string */ public function Type() { - return strtolower(preg_replace('/Field$/', '', $this->class)); + return strtolower(preg_replace('/Field$/', '', $this->class)); } /** * @deprecated 3.2 Use FormField::create_tag() + * + * @param string $tag + * @param array $attributes + * @param null|string $content + * + * @return string */ public function createTag($tag, $attributes, $content = null) { Deprecation::notice('3.2', 'Use FormField::create_tag()'); + return self::create_tag($tag, $attributes, $content); - } + } /** - * Abstract method each {@link FormField} subclass must implement, - * determines whether the field is valid or not based on the value. + * Abstract method each {@link FormField} subclass must implement, determines whether the field + * is valid or not based on the value. + * * @todo Make this abstract. * - * @param Validator - * @return boolean + * @param Validator $validator + * + * @return bool */ public function validate($validator) { return true; @@ -801,13 +1060,16 @@ class FormField extends RequestHandler { /** * Describe this field, provide help text for it. - * By default, renders as a - * underneath the form field. - * - * @return string Description + * + * By default, renders as a underneath the form field. + * + * @param string $description + * + * @return $this */ public function setDescription($description) { $this->description = $description; + return $this; } @@ -817,38 +1079,52 @@ class FormField extends RequestHandler { public function getDescription() { return $this->description; } - - public function debug() { - return "$this->class ($this->name: $this->title : $this->message)" - . " = $this->value"; - } - + /** - * This function is used by the template processor. If you refer to a field as a $ variable, it + * @return string + */ + public function debug() { + return sprintf( + '%s (%s: %s : %s) = %s', + $this->class, + $this->name, + $this->title, + $this->message, + $this->value + ); + } + + /** + * This function is used by the template processor. If you refer to a field as a $ variable, it * will return the $Field value. + * + * @return string */ public function forTemplate() { return $this->Field(); } - + /** - * @uses Validator->fieldIsRequired() - * @return boolean + * @return bool */ public function Required() { if($this->form && ($validator = $this->form->Validator)) { return $validator->fieldIsRequired($this->name); } + + return false; } /** * Set the FieldList that contains this field. * - * @param FieldList $list + * @param FieldList $containerFieldList + * * @return FieldList */ - public function setContainerFieldList($list) { - $this->containerFieldList = $list; + public function setContainerFieldList($containerFieldList) { + $this->containerFieldList = $containerFieldList; + return $this; } @@ -861,47 +1137,61 @@ class FormField extends RequestHandler { return $this->containerFieldList; } - public function rootFieldList() { - if(is_object($this->containerFieldList)) return $this->containerFieldList->rootFieldList(); - else user_error("rootFieldList() called on $this->class object without a containerFieldList", E_USER_ERROR); - } - /** - * Returns another instance of this field, but "cast" to a different class. - * The logic tries to retain all of the instance properties, - * and may be overloaded by subclasses to set additional ones. + * @return null|FieldList + */ + public function rootFieldList() { + if(is_object($this->containerFieldList)) { + return $this->containerFieldList->rootFieldList(); + } + + user_error( + "rootFieldList() called on $this->class object without a containerFieldList", + E_USER_ERROR + ); + + return null; + } + + /** + * Returns another instance of this field, but "cast" to a different class. The logic tries to + * retain all of the instance properties, and may be overloaded by subclasses to set additional + * ones. * - * Assumes the standard FormField parameter signature with - * its name as the only mandatory argument. Mainly geared towards - * creating *_Readonly or *_Disabled subclasses of the same type, - * or casting to a {@link ReadonlyField}. + * Assumes the standard FormField parameter signature with its name as the only mandatory + * argument. Mainly geared towards creating *_Readonly or *_Disabled subclasses of the same + * type, or casting to a {@link ReadonlyField}. + * + * Does not copy custom field templates, since they probably won't apply to the new instance. + * + * @param mixed $classOrCopy Class name for copy, or existing copy instance to update * - * Does not copy custom field templates, since they probably won't apply to - * the new instance. - * - * @param String $classOrCopy Class name for copy, or existing copy instance to update * @return FormField */ public function castedCopy($classOrCopy) { - $field = (is_object($classOrCopy)) ? $classOrCopy : new $classOrCopy($this->name); + $field = $classOrCopy; + + if(!is_object($field)) { + $field = new $classOrCopy($this->name); + } + $field - ->setValue($this->value) // get value directly from property, avoid any conversions + ->setValue($this->value) ->setForm($this->form) ->setTitle($this->Title()) ->setLeftTitle($this->LeftTitle()) ->setRightTitle($this->RightTitle()) ->addExtraClass($this->extraClass()) ->setDescription($this->getDescription()); - - // Only include built-in attributes, ignore anything - // set through getAttributes(), since those might change important characteristics - // of the field, e.g. its "type" attribute. - foreach($this->attributes as $k => $v) { - $field->setAttribute($k, $v); -} + + // Only include built-in attributes, ignore anything set through getAttributes(). + // Those might change important characteristics of the field, e.g. its "type" attribute. + foreach($this->attributes as $attributeKey => $attributeValue) { + $field->setAttribute($attributeKey, $attributeValue); + } + $field->dontEscape = $this->dontEscape; return $field; } - } From 66391ab57ad49c2a40bad59fc1fc9e1f12e39d97 Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Fri, 13 Feb 2015 14:34:41 +0000 Subject: [PATCH 041/110] FIX Imported namespaces now correctly used to determine class inheritance Fixes #3707 --- core/manifest/ClassManifest.php | 225 +++++++++++++++--- .../manifest/NamespacedClassManifestTest.php | 154 +++++++++++- .../module/classes/ClassI.php | 12 + 3 files changed, 358 insertions(+), 33 deletions(-) create mode 100644 tests/core/manifest/fixtures/namespaced_classmanifest/module/classes/ClassI.php diff --git a/core/manifest/ClassManifest.php b/core/manifest/ClassManifest.php index 631415615..627f805cd 100644 --- a/core/manifest/ClassManifest.php +++ b/core/manifest/ClassManifest.php @@ -106,6 +106,33 @@ class SS_ClassManifest { )); } + /** + * Create a {@link TokenisedRegularExpression} that extracts the namespaces imported with the 'use' keyword + * + * This searches symbols for a `use` followed by 1 or more namespaces which are optionally aliased using the `as` + * keyword. The relevant matching tokens are added one-by-one into an array (using `save_to` param). + * + * eg: use Namespace\ClassName as Alias, OtherNamespace\ClassName; + * + * @return TokenisedRegularExpression + */ + public static function get_imported_namespace_parser() { + return new TokenisedRegularExpression(array( + 0 => T_USE, + 1 => T_WHITESPACE, + 2 => array(T_NS_SEPARATOR, 'save_to' => 'importString[]', 'optional' => true), + 3 => array(T_STRING, 'save_to' => 'importString[]', 'can_jump_to' => array(2, 8)), + 4 => array(T_WHITESPACE, 'save_to' => 'importString[]'), + 5 => array(T_AS, 'save_to' => 'importString[]'), + 6 => array(T_WHITESPACE, 'save_to' => 'importString[]'), + 7 => array(T_STRING, 'save_to' => 'importString[]'), + 8 => array(T_WHITESPACE, 'optional' => true), + 9 => array(',', 'save_to' => 'importString[]', 'optional' => true, 'can_jump_to' => 2), + 10 => array(T_WHITESPACE, 'optional' => true, 'can_jump_to' => 2), + 11 => ';', + )); + } + /** * Constructs and initialises a new class manifest, either loading the data * from the cache or re-scanning for classes. @@ -333,6 +360,124 @@ class SS_ClassManifest { } } + /** + * Find a the full namespaced declaration of a class (or interface) from a list of candidate imports + * + * This is typically used to determine the full class name in classes that have imported namesapced symbols (having + * used the `use` keyword) + * + * NB: remember the '\\' is an escaped backslash and is interpreted as a single \ + * + * @param string $class The class (or interface) name to find in the candidate imports + * @param string $namespace The namespace that was declared for the classes definition (if there was one) + * @param array $imports The list of imported symbols (Classes or Interfaces) to test against + * + * @return string The fully namespaced class name + */ + protected function findClassOrInterfaceFromCandidateImports($class, $namespace = '', $imports = array()) { + + //normalise the namespace + $namespace = rtrim($namespace, '\\'); + + //by default we'll use the $class as our candidate + $candidateClass = $class; + + if (!$class) { + return $candidateClass; + } + //if the class starts with a \ then it is explicitly in the global namespace and we don't need to do + // anything else + if (substr($class, 0, 1) == '\\') { + $candidateClass = substr($class, 1); + return $candidateClass; + } + //if there's a namespace, starting assumption is the class is defined in that namespace + if ($namespace) { + $candidateClass = $namespace . '\\' . $class; + } + + if (empty($imports)) { + return $candidateClass; + } + + //normalised class name (PHP is case insensitive for symbols/namespaces + $lClass = strtolower($class); + + //go through all the imports and see if the class exists within one of them + foreach ($imports as $alias => $import) { + //normalise import + $import = trim($import, '\\'); + + //if there is no string key, then there was no declared alias - we'll use the main declaration + if (is_int($alias)) { + $alias = strtolower($import); + } else { + $alias = strtolower($alias); + } + + //exact match? Then it's a class in the global namespace that was imported OR it's an alias of + // another namespace + // or if it ends with the \ClassName then it's the class we are looking for + if ($lClass == $alias + || substr_compare( + $alias, + '\\' . $lClass, + strlen($alias) - strlen($lClass) - 1, + // -1 because the $lClass length is 1 longer due to \ + strlen($alias) + ) === 0 + ) { + $candidateClass = $import; + break; + } + } + return $candidateClass; + } + + /** + * Return an array of array($alias => $import) from tokenizer's tokens of a PHP file + * + * NB: If there is no alias we don't set a key to the array + * + * @param array $tokens The parsed tokens from tokenizer's parsing of a PHP file + * + * @return array The array of imports as (optional) $alias => $import + */ + protected function getImportsFromTokens($tokens) { + //parse out the imports + $imports = self::get_imported_namespace_parser()->findAll($tokens); + + //if there are any imports, clean them up + // imports come to us as array('importString' => array([array of matching tokens])) + // we need to join this nested array into a string and split out the alias and the import + if (!empty($imports)) { + $cleanImports = array(); + foreach ($imports as $import) { + if (!empty($import['importString'])) { + //join the array up into a string + $importString = implode('', $import['importString']); + //split at , to get each import declaration + $importSet = explode(',', $importString); + foreach ($importSet as $importDeclaration) { + //split at ' as ' (any case) to see if we are aliasing the namespace + $importDeclaration = preg_split('/\s+as\s+/i', $importDeclaration); + //shift off the fully namespaced import + $qualifiedImport = array_shift($importDeclaration); + //if there are still items in the array, it's the alias + if (!empty($importDeclaration)) { + $cleanImports[array_shift($importDeclaration)] = $qualifiedImport; + } + else { + $cleanImports[] = $qualifiedImport; + } + } + } + } + $imports = $cleanImports; + } + return $imports; + } + public function handleFile($basename, $pathname, $depth) { if ($basename == self::CONF_FILE) { $this->configs[] = $pathname; @@ -342,6 +487,7 @@ class SS_ClassManifest { $classes = null; $interfaces = null; $namespace = null; + $imports = null; // The results of individual file parses are cached, since only a few // files will have changed and TokenisedRegularExpression is quite @@ -352,14 +498,17 @@ class SS_ClassManifest { if ($data = $this->cache->load($key)) { $valid = ( - isset($data['classes']) && isset($data['interfaces']) && isset($data['namespace']) - && is_array($data['classes']) && is_array($data['interfaces']) && is_string($data['namespace']) + isset($data['classes']) && is_array($data['classes']) + && isset($data['interfaces']) && is_array($data['interfaces']) + && isset($data['namespace']) && is_string($data['namespace']) + && isset($data['imports']) && is_array($data['imports']) ); if ($valid) { - $classes = $data['classes']; + $classes = $data['classes']; $interfaces = $data['interfaces']; $namespace = $data['namespace']; + $imports = $data['imports']; } } @@ -367,28 +516,52 @@ class SS_ClassManifest { $tokens = token_get_all($file); $classes = self::get_namespaced_class_parser()->findAll($tokens); + $namespace = self::get_namespace_parser()->findAll($tokens); + if($namespace) { - $namespace = implode('', $namespace[0]['namespaceName']) . '\\'; + $namespace = implode('', $namespace[0]['namespaceName']); } else { $namespace = ''; } + $imports = $this->getImportsFromTokens($tokens); + $interfaces = self::get_interface_parser()->findAll($tokens); - $cache = array('classes' => $classes, 'interfaces' => $interfaces, 'namespace' => $namespace); + $cache = array( + 'classes' => $classes, + 'interfaces' => $interfaces, + 'namespace' => $namespace, + 'imports' => $imports + ); $this->cache->save($cache, $key); } foreach ($classes as $class) { - $name = $namespace . $class['className']; - $extends = isset($class['extends']) ? implode('', $class['extends']) : null; + $name = $class['className']; + if ($namespace) { + $namespace = rtrim($namespace, '\\'); + $name = $namespace . '\\' . $name; + } + $extends = isset($class['extends']) ? implode('', $class['extends']) : null; $implements = isset($class['interfaces']) ? $class['interfaces'] : null; - if($extends && $extends[0] != '\\') { - $extends = $namespace . $extends; - } elseif($extends) { - $extends = substr($extends, 1); + if ($extends) { + $extends = $this->findClassOrInterfaceFromCandidateImports($extends, $namespace, $imports); + } + + if (!empty($implements)) { + //join all the tokens + $implements = implode('', $implements); + //split at comma + $implements = explode(',', $implements); + //normalise interfaces + foreach ($implements as &$interface) { + $interface = $this->findClassOrInterfaceFromCandidateImports($interface, $namespace, $imports); + } + //release the var name + unset($interface); } $lowercaseName = strtolower($name); @@ -414,32 +587,24 @@ class SS_ClassManifest { } if ($implements) { - $interface = $namespace; - for($i = 0; $i < count($implements); ++$i) { - if($implements[$i] == ',') { - $interface = $namespace; - continue; - } - if($implements[$i] == '\\' && $interface == $namespace) { - $interface = ''; - } else { - $interface .= $implements[$i]; - } - if($i == count($implements)-1 || $implements[$i+1] == ',') { - $interface = strtolower($interface); + foreach ($implements as $interface) { + $interface = strtolower($interface); - if (!isset($this->implementors[$interface])) { - $this->implementors[$interface] = array($name); - } else { - $this->implementors[$interface][] = $name; - } + if (!isset($this->implementors[$interface])) { + $this->implementors[$interface] = array($name); + } else { + $this->implementors[$interface][] = $name; } } } } + $interfaceBase = ''; + if ($namespace) { + $interfaceBase = $namespace . '\\'; + } foreach ($interfaces as $interface) { - $this->interfaces[strtolower($namespace . $interface['interfaceName'])] = $pathname; + $this->interfaces[strtolower($interfaceBase . $interface['interfaceName'])] = $pathname; } } diff --git a/tests/core/manifest/NamespacedClassManifestTest.php b/tests/core/manifest/NamespacedClassManifestTest.php index c87dea4e4..68e662f08 100644 --- a/tests/core/manifest/NamespacedClassManifestTest.php +++ b/tests/core/manifest/NamespacedClassManifestTest.php @@ -15,6 +15,152 @@ class NamespacedClassManifestTest extends SapphireTest { $this->base = dirname(__FILE__) . '/fixtures/namespaced_classmanifest'; $this->manifest = new SS_ClassManifest($this->base, false, true, false); + SS_ClassLoader::instance()->pushManifest($this->manifest, false); + } + + public function tearDown() { + parent::tearDown(); + SS_ClassLoader::instance()->popManifest(); + } + + public function testGetImportedNamespaceParser() { + $file = file_get_contents($this->base . DIRECTORY_SEPARATOR . 'module/classes/ClassI.php'); + $tokens = token_get_all($file); + $parsedTokens = SS_ClassManifest::get_imported_namespace_parser()->findAll($tokens); + + $expectedItems = array( + array('ModelAdmin'), + array('Controller', ' ', 'as', ' ', 'Cont'), + array( + 'SS_HTTPRequest', ' ', 'as', ' ', 'Request', ',', + 'SS_HTTPResponse', ' ', 'AS', ' ', 'Response', ',', + 'PermissionProvider', ' ', 'AS', ' ', 'P', + ), + array('silverstripe', '\\', 'test', '\\', 'ClassA'), + array('\\', 'DataObject'), + ); + + $this->assertEquals(count($expectedItems), count($parsedTokens)); + + foreach ($expectedItems as $i => $item) { + $this->assertEquals($item, $parsedTokens[$i]['importString']); + } + } + + public function testGetImportsFromTokens() { + $file = file_get_contents($this->base . DIRECTORY_SEPARATOR . 'module/classes/ClassI.php'); + $tokens = token_get_all($file); + + $method = new ReflectionMethod($this->manifest, 'getImportsFromTokens'); + $method->setAccessible(true); + + $expectedImports = array( + 'ModelAdmin', + 'Cont' => 'Controller', + 'Request' => 'SS_HTTPRequest', + 'Response' => 'SS_HTTPResponse', + 'P' => 'PermissionProvider', + 'silverstripe\test\ClassA', + '\DataObject', + ); + + $imports = $method->invoke($this->manifest, $tokens); + + $this->assertEquals($expectedImports, $imports); + + } + + public function testClassInfoIsCorrect() { + $this->assertContains('SilverStripe\Framework\Tests\ClassI', ClassInfo::implementorsOf('PermissionProvider')); + + //because we're using a nested manifest we have to "coalesce" the descendants again to correctly populate the + // descendants of the core classes we want to test against - this is a limitation of the test manifest not + // including all core classes + $method = new ReflectionMethod($this->manifest, 'coalesceDescendants'); + $method->setAccessible(true); + $method->invoke($this->manifest, 'ModelAdmin'); + + $this->assertContains('SilverStripe\Framework\Tests\ClassI', ClassInfo::subclassesFor('ModelAdmin')); + } + + public function testFindClassOrInterfaceFromCandidateImports() { + $method = new ReflectionMethod($this->manifest, 'findClassOrInterfaceFromCandidateImports'); + $method->setAccessible(true); + + $this->assertTrue(ClassInfo::exists('silverstripe\test\ClassA')); + + $this->assertEquals('PermissionProvider', $method->invokeArgs($this->manifest, array( + '\PermissionProvider', + 'Test\Namespace', + array( + 'TestOnly', + 'Controller', + ), + ))); + + $this->assertEquals('PermissionProvider', $method->invokeArgs($this->manifest, array( + 'PermissionProvider', + 'Test\NAmespace', + array( + 'PermissionProvider', + ) + ))); + + $this->assertEmpty($method->invokeArgs($this->manifest, array( + '', + 'TextNamespace', + array( + 'PermissionProvider', + ), + ))); + + $this->assertEmpty($method->invokeArgs($this->manifest, array( + '', + '', + array() + ))); + + $this->assertEquals('silverstripe\test\ClassA', $method->invokeArgs($this->manifest, array( + 'ClassA', + 'Test\Namespace', + array( + 'silverstripe\test\ClassA', + 'PermissionProvider', + ), + ))); + + $this->assertEquals('ClassA', $method->invokeArgs($this->manifest, array( + '\ClassA', + 'Test\Namespace', + array( + 'silverstripe\test', + ), + ))); + + $this->assertEquals('ClassA', $method->invokeArgs($this->manifest, array( + 'ClassA', + 'silverstripe\test', + array( + '\ClassA', + ), + ))); + + $this->assertEquals('ClassA', $method->invokeArgs($this->manifest, array( + 'Alias', + 'silverstripe\test', + array( + 'Alias' => '\ClassA', + ), + ))); + + $this->assertEquals('silverstripe\test\ClassA', $method->invokeArgs($this->manifest, array( + 'ClassA', + 'silverstripe\test', + array( + 'silverstripe\test\ClassB', + ), + ))); + } public function testGetItemPath() { @@ -43,7 +189,8 @@ class NamespacedClassManifestTest extends SapphireTest { 'silverstripe\test\classg' => "{$this->base}/module/classes/ClassG.php", 'silverstripe\test\classh' => "{$this->base}/module/classes/ClassH.php", 'sstemplateparser' => FRAMEWORK_PATH."/view/SSTemplateParser.php", - 'sstemplateparseexception' => FRAMEWORK_PATH."/view/SSTemplateParser.php" + 'sstemplateparseexception' => FRAMEWORK_PATH."/view/SSTemplateParser.php", + 'silverstripe\framework\tests\classi' => "{$this->base}/module/classes/ClassI.php", ); $this->assertEquals($expect, $this->manifest->getClasses()); @@ -54,7 +201,7 @@ class NamespacedClassManifestTest extends SapphireTest { array('sstemplateparser', 'sstemplateparseexception', 'silverstripe\test\classa', 'silverstripe\test\classb', 'silverstripe\test\classc', 'silverstripe\test\classd', 'silverstripe\test\classe', 'silverstripe\test\classf', 'silverstripe\test\classg', - 'silverstripe\test\classh'), + 'silverstripe\test\classh', 'silverstripe\framework\tests\classi'), $this->manifest->getClassNames()); } @@ -88,7 +235,8 @@ class NamespacedClassManifestTest extends SapphireTest { $expect = array( 'silverstripe\test\interfacea' => array('silverstripe\test\ClassE'), 'interfacea' => array('silverstripe\test\ClassF'), - 'silverstripe\test\subtest\interfacea' => array('silverstripe\test\ClassG') + 'silverstripe\test\subtest\interfacea' => array('silverstripe\test\ClassG'), + 'permissionprovider' => array('SilverStripe\Framework\Tests\ClassI'), ); $this->assertEquals($expect, $this->manifest->getImplementors()); } diff --git a/tests/core/manifest/fixtures/namespaced_classmanifest/module/classes/ClassI.php b/tests/core/manifest/fixtures/namespaced_classmanifest/module/classes/ClassI.php new file mode 100644 index 000000000..252aa3ef7 --- /dev/null +++ b/tests/core/manifest/fixtures/namespaced_classmanifest/module/classes/ClassI.php @@ -0,0 +1,12 @@ + Date: Sun, 21 Jun 2015 12:23:40 +1200 Subject: [PATCH 042/110] Update 01_Code.md Updated link. --- docs/en/05_Contributing/01_Code.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/05_Contributing/01_Code.md b/docs/en/05_Contributing/01_Code.md index d67af2b10..6f0792d8f 100644 --- a/docs/en/05_Contributing/01_Code.md +++ b/docs/en/05_Contributing/01_Code.md @@ -145,7 +145,7 @@ changes * Only submit a pull request for work you expect to be ready to merge. Work in progress is best discussed in an issue, or on your own repository fork. * Document your code inline through [PHPDoc](http://en.wikipedia.org/wiki/PHPDoc) syntax. See our [API documentation](http://api.silverstripe.org/3.1/) for good examples. -* Check and update documentation on [doc.silverstripe.org](http://doc.silverstripe.org). Check for any references to functionality deprecated or extended through your patch. Documentation changes should be included in the patch. +* Check and update documentation on [docs.silverstripe.org](http://docs.silverstripe.org). Check for any references to functionality deprecated or extended through your patch. Documentation changes should be included in the patch. * If you get stuck, please post to the [forum](http://silverstripe.org/forum) or for deeper core problems, to the [core mailinglist](https://groups.google.com/forum/#!forum/silverstripe-dev) * When working with the CMS, please read the ["CMS Architecture Guide"](cms_architecture) first From 8a4c51893b345f7653e77acdd3667bbe61346784 Mon Sep 17 00:00:00 2001 From: Stevie Mayhew Date: Fri, 12 Jun 2015 08:52:41 +1200 Subject: [PATCH 043/110] FIX: allow for increase_time_limit_to to work if $_increase_time_limit_max is not yet set --- core/Core.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/Core.php b/core/Core.php index e55706d86..756941a1c 100644 --- a/core/Core.php +++ b/core/Core.php @@ -27,6 +27,9 @@ error_reporting(E_ALL | E_STRICT); */ require_once dirname(__FILE__).'/Constants.php'; +global $_increase_time_limit_max; +$_increase_time_limit_max = -1; + /** * Priorities definition. These constants are used in calls to _t() as an optional argument */ @@ -255,7 +258,7 @@ function translate_memstring($memString) { */ function increase_time_limit_to($timeLimit = null) { $max = get_increase_time_limit_max(); - if($max != -1 && $timeLimit > $max) return false; + if($max != -1 && $max != null && $timeLimit > $max) return false; if(!ini_get('safe_mode')) { if(!$timeLimit) { @@ -274,8 +277,6 @@ function increase_time_limit_to($timeLimit = null) { } } -$_increase_time_limit_max = -1; - /** * Set the maximum allowed value for {@link increase_timeLimit_to()}; * From 449ee6296c21e19dd525e99e5adba9651b834c40 Mon Sep 17 00:00:00 2001 From: Cam Findlay Date: Mon, 22 Jun 2015 11:35:58 +1200 Subject: [PATCH 044/110] DOCS Remove duplicate core committers doc after forward port of branches for 3.2 beta1 release --- docs/en/05_Contributing/06_Core_commiters.md | 34 -------------------- 1 file changed, 34 deletions(-) delete mode 100644 docs/en/05_Contributing/06_Core_commiters.md diff --git a/docs/en/05_Contributing/06_Core_commiters.md b/docs/en/05_Contributing/06_Core_commiters.md deleted file mode 100644 index 431e2e124..000000000 --- a/docs/en/05_Contributing/06_Core_commiters.md +++ /dev/null @@ -1,34 +0,0 @@ -# Core Committers -The core committers team is reviewed approximately annually, new members are added based on quality contributions to SilverStipe code and outstanding community participation. - -## Core committer team -* [Damian Mooyman](https://github.com/tractorcow/) -* [Daniel Hensby](https://github.com/dhensby) -* [Hamish Friedlander](https://github.com/hafriedlander) -* [Ingo Schommer](https://github.com/chillu) -* [Loz Calver](https://github.com/kinglozzer) -* [Mateusz Uzdowski](https://github.com/mateusz/) -* [Sam Minnée](https://github.com/sminnee) -* [Sean Harvey](https://github.com/halkyon/) -* [Stig Lindqvist](https://github.com/stojg) -* [Will Morgan](https://github.com/willmorgan) -* [Will Rossiter](https://github.com/wilr/) - -## House rules for the core committer team - -The "core committers" consist of everybody with write permissions to our codebase. -With great power comes great responsibility, so we have agreed on certain expectations: - - * Be friendly, encouraging and constructive towards other community members - * Frequently review pull requests and new issues (in particular, respond quickly to @mentions) - * Treat issues according to our [issue guidelines](issues_and_bugs) - * Don't commit directly to core, raise pull requests instead (except trivial fixes) - * Only merge code you have tested and fully understand. If in doubt, ask for a second opinion. - * Ensure contributions have appropriate [test coverage](/topics/testing), are documented, and pass our [coding conventions](/getting_started/coding-conventions) - * Keep the codebase "releasable" at all times (check our [release process](release_process)) - * API changes and non-trivial features should not be merged into release branches. - * API changes on master should not be merged until they have the buy-in of at least two core committers (or better, through the [core mailing list](https://groups.google.com/forum/#!forum/silverstripe-dev)) - * Be inclusive. Ensure a wide range of SilverStripe developers can obtain an understanding of your code and docs, and you're not the only one who can maintain it. - * Avoid `git push --force`, and be careful with your git remotes (no accidental pushes) - * Use your own forks to create feature branches - From 6d05c57881ca1c26ea6a1bfd89cc8eb6edab297b Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Mon, 22 Jun 2015 09:44:00 +0100 Subject: [PATCH 045/110] Ensure that shortcodes inside script tags are parsed. Fixes #4332. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The problem is that the marker images aren’t picked up by DOMDocument if they are inserted into a ', + $this->parser->parse('') + ); + } + + public function testNumericShortcodes() { + $this->assertEqualsIgnoringWhitespace( + '[2]', + $this->parser->parse('[2]') + ); + $this->assertEqualsIgnoringWhitespace( + '', + $this->parser->parse('') + ); + + $this->parser->register('2', function($attributes, $content, $this, $tag, $extra) { + return 'this is 2'; + }); + + $this->assertEqualsIgnoringWhitespace( + 'this is 2', + $this->parser->parse('[2]') + ); + $this->assertEqualsIgnoringWhitespace( + '', + $this->parser->parse('') + ); + } + public function testExtraContext() { $this->parser->parse('Test'); From d7241958ff5091e7027b42d8cf2e864b43942c6d Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Mon, 22 Jun 2015 11:31:12 +0100 Subject: [PATCH 046/110] Performance/reliability improvement for leaving unrecognised tags. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit error_behaviour = self::LEAVE is the default behaviour. In this case, we don’t even need to bother recognising such tags. Rather than replacing with marker images and re-inserting the original text after we’re done, we can leave them alone. This should make the code faster and more reliable. --- parsers/ShortcodeParser.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/parsers/ShortcodeParser.php b/parsers/ShortcodeParser.php index 37996e50a..68b78fa91 100644 --- a/parsers/ShortcodeParser.php +++ b/parsers/ShortcodeParser.php @@ -320,7 +320,18 @@ class ShortcodeParser extends Object { } } } - + + // Step 3: remove any tags that don't have handlers registered + // Only do this if self::$error_behavior == self::LEAVE + // This is optional but speeds things up. + if(self::$error_behavior == self::LEAVE) { + foreach($tags as $i => $tag) { + if(empty($this->shortcodes[$tag['open']])) { + unset($tags[$i]); + } + } + } + return array_values($tags); } @@ -550,7 +561,7 @@ class ShortcodeParser extends Object { // Find the parents. Do this before DOM modification, since SPLIT might cause parents to move otherwise $parents = $this->findParentsForMarkers($shortcodes); - + foreach($shortcodes as $shortcode) { $tag = $tags[$shortcode->getAttribute('data-tagid')]; $parent = $parents[$shortcode->getAttribute('data-parentid')]; From 2125afb2f5e492b749098c718a602a8e8083fefb Mon Sep 17 00:00:00 2001 From: David Alexander Date: Tue, 23 Jun 2015 11:57:54 +1200 Subject: [PATCH 047/110] DOCS: fixed broken link --- docs/en/03_Upgrading/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/03_Upgrading/index.md b/docs/en/03_Upgrading/index.md index e051ff8ae..825876142 100644 --- a/docs/en/03_Upgrading/index.md +++ b/docs/en/03_Upgrading/index.md @@ -40,7 +40,7 @@ Never update a website on the live server without trying it on a development cop How easy will it be to update my project? It's a fair question, and sometimes a difficult one to answer. -* "Micro" releases (x.y.z) are explicitly backwards compatible, "minor" and "major" releases can deprecate features and change APIs (see our [/misc/release-process](release process) for details) +* "Micro" releases (x.y.z) are explicitly backwards compatible, "minor" and "major" releases can deprecate features and change APIs (see our [/misc/release-process](../contributing/release_process) for details) * If you've made custom branches of SilverStripe core, or any thirdparty module, it's going to be harder to upgrade. * The more custom features you have, the harder it will be to upgrade. You will have to re-test all of those features, and adapt to API changes in core. * Customizations of a well defined type - such as custom page types or custom blog widgets - are going to be easier to upgrade than customisations that modify deep system internals like rewriting SQL queries. From a6013ed1d0a9abd8514800ff0c2a85c681a21921 Mon Sep 17 00:00:00 2001 From: David Craig Date: Tue, 16 Jun 2015 10:52:42 +1200 Subject: [PATCH 048/110] Move filters from panel to header - The filter panel has been removed in favour of a search menu in the header. - The multi-select component has been updated: - Now called 'Bulk actions' - Styling updated - Added placeholder text / removed redundant option - Now also appears in SiteTree view --- admin/code/LeftAndMain.php | 10 +- admin/css/ie7.css | 140 ++-- admin/css/ie8.css | 12 +- admin/css/screen.css | 684 ++++++++++-------- admin/font/LICENSE.txt | 12 + admin/font/fontello.eot | Bin 0 -> 5156 bytes admin/font/fontello.svg | 13 + admin/font/fontello.ttf | Bin 0 -> 4988 bytes admin/font/fontello.woff | Bin 0 -> 2796 bytes admin/images/btn-icon-scb653ce8a9.png | Bin 22990 -> 0 bytes admin/images/btn-icon-se43cec5357.png | Bin 0 -> 22916 bytes .../menu-icons/16x16-2x-s9b8c49312e.png | Bin 0 -> 4147 bytes .../menu-icons/16x16-2x-sbe70081ef8.png | Bin 4135 -> 0 bytes admin/images/menu-icons/16x16-s3f4c846209.png | Bin 1637 -> 0 bytes admin/images/menu-icons/16x16-sf5b94bb49b.png | Bin 0 -> 1645 bytes .../menu-icons/24x24-2x-s7169efa003.png | Bin 0 -> 6015 bytes .../menu-icons/24x24-2x-sccfd928e17.png | Bin 5981 -> 0 bytes admin/images/menu-icons/24x24-s0dc15c36f9.png | Bin 2394 -> 0 bytes admin/images/menu-icons/24x24-s391afdd013.png | Bin 0 -> 2391 bytes admin/images/sprites-32x32-2x-s6ccfbe50f9.png | Bin 9066 -> 0 bytes admin/images/sprites-32x32-2x-s72b74f4cc4.png | Bin 0 -> 9088 bytes admin/images/sprites-32x32-s47450c5f5b.png | Bin 18703 -> 0 bytes admin/images/sprites-32x32-s7af51a6313.png | Bin 0 -> 20085 bytes admin/images/sprites-64x64-2x-s0fe1d92f9d.png | Bin 0 -> 2878 bytes admin/images/sprites-64x64-2x-se3e3f47b94.png | Bin 2876 -> 0 bytes admin/images/sprites-64x64-s45180e3c4f.png | Bin 3062 -> 0 bytes admin/images/sprites-64x64-s88957ee578.png | Bin 0 -> 3059 bytes admin/javascript/LeftAndMain.BatchActions.js | 165 ++--- admin/javascript/LeftAndMain.Tree.js | 21 - admin/javascript/LeftAndMain.js | 41 ++ admin/scss/_ModelAdmin.scss | 15 +- admin/scss/_fonts.scss | 37 + admin/scss/_forms.scss | 141 ++++ admin/scss/_ieShared.scss | 8 +- admin/scss/_style.scss | 273 ++++--- admin/scss/_tree.scss | 8 +- admin/scss/_uitheme.scss | 2 +- admin/scss/ie7.scss | 8 +- admin/scss/ie8.scss | 5 + admin/scss/screen.scss | 3 +- .../templates/Includes/ModelAdmin_Content.ss | 14 +- admin/templates/Includes/ModelAdmin_Tools.ss | 23 +- css/GridField.css | 28 +- .../Framework/Test/Behaviour/CmsUiContext.php | 21 + 44 files changed, 997 insertions(+), 687 deletions(-) create mode 100644 admin/font/LICENSE.txt create mode 100644 admin/font/fontello.eot create mode 100644 admin/font/fontello.svg create mode 100644 admin/font/fontello.ttf create mode 100644 admin/font/fontello.woff delete mode 100644 admin/images/btn-icon-scb653ce8a9.png create mode 100644 admin/images/btn-icon-se43cec5357.png create mode 100644 admin/images/menu-icons/16x16-2x-s9b8c49312e.png delete mode 100644 admin/images/menu-icons/16x16-2x-sbe70081ef8.png delete mode 100644 admin/images/menu-icons/16x16-s3f4c846209.png create mode 100644 admin/images/menu-icons/16x16-sf5b94bb49b.png create mode 100644 admin/images/menu-icons/24x24-2x-s7169efa003.png delete mode 100644 admin/images/menu-icons/24x24-2x-sccfd928e17.png delete mode 100644 admin/images/menu-icons/24x24-s0dc15c36f9.png create mode 100644 admin/images/menu-icons/24x24-s391afdd013.png delete mode 100644 admin/images/sprites-32x32-2x-s6ccfbe50f9.png create mode 100644 admin/images/sprites-32x32-2x-s72b74f4cc4.png delete mode 100644 admin/images/sprites-32x32-s47450c5f5b.png create mode 100644 admin/images/sprites-32x32-s7af51a6313.png create mode 100644 admin/images/sprites-64x64-2x-s0fe1d92f9d.png delete mode 100644 admin/images/sprites-64x64-2x-se3e3f47b94.png delete mode 100644 admin/images/sprites-64x64-s45180e3c4f.png create mode 100644 admin/images/sprites-64x64-s88957ee578.png create mode 100644 admin/scss/_fonts.scss diff --git a/admin/code/LeftAndMain.php b/admin/code/LeftAndMain.php index 33a90d323..1c64cd402 100644 --- a/admin/code/LeftAndMain.php +++ b/admin/code/LeftAndMain.php @@ -1397,8 +1397,10 @@ class LeftAndMain extends Controller implements PermissionProvider { */ public function BatchActionsForm() { $actions = $this->batchactions()->batchActionList(); - $actionsMap = array('-1' => _t('LeftAndMain.DropdownBatchActionsDefault', 'Actions')); - foreach($actions as $action) $actionsMap[$action->Link] = $action->Title; + $actionsMap = array(); + foreach($actions as $action) { + $actionsMap[$action->Link] = $action->Title; + } $form = new Form( $this, @@ -1409,7 +1411,9 @@ class LeftAndMain extends Controller implements PermissionProvider { 'Action', false, $actionsMap - )->setAttribute('autocomplete', 'off') + ) + ->setAttribute('autocomplete', 'off') + ->setAttribute('data-placeholder', _t('LeftAndMain.DropdownBatchActionsDefault', 'Actions')) ), new FieldList( // TODO i18n diff --git a/admin/css/ie7.css b/admin/css/ie7.css index 2e9b3705b..81b712ddf 100644 --- a/admin/css/ie7.css +++ b/admin/css/ie7.css @@ -9,7 +9,7 @@ /** ----------------------------------------------- Application Logo (CMS Logo) Must be 24px x 24px ------------------------------------------------ */ .cms .ss-ui-button { background-color: #e6e6e6; } .cms .ss-ui-button.ui-state-hover { background-color: #f3f3f3; } -.cms .ss-ui-button.ss-ui-action-constructive { background-color: #1F9433; } +.cms .ss-ui-button.ss-ui-action-constructive { background-color: #1f9433; } .cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover { background-color: #23a93a; } .cms .ss-ui-button.ss-gridfield-button-filter { background: #55a4d2 url(../../images/icons/filter-icons.png) no-repeat -14px 4px; } @@ -20,7 +20,7 @@ .ss-gridfield-button-filter.ss-ui-button.hover-alike { background-color: #338DC1; background-position: -16px 6px; filter: none; } .ss-gridfield-button-reset.ss-ui-button { background: #e6e6e6 url(../images/filter-icons.png) no-repeat 8px 5px; filter: none; } -.ss-gridfield-button-reset.ss-ui-button.filtered:hover { background: #f00 url(../images/filter-icons.png) no-repeat 8px -17px; filter: none; } +.ss-gridfield-button-reset.ss-ui-button.filtered:hover { background: red url(../images/filter-icons.png) no-repeat 8px -17px; filter: none; } .ss-gridfield-button-reset.ss-ui-button.filtered:active { background: #e60000 url(../images/filter-icons.png) no-repeat 9px -16px; filter: none; } .cms table.ss-gridfield-table tr td { border-right: 1px solid #9a9a9a; } @@ -35,6 +35,7 @@ .cms-menu-list li a .icon { filter: none; } +/** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. Fix for model admin filter styling */ .ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content #Form_ImportForm div.file { margin: 0px; } .ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content #Form_ImportForm div.file input.file { margin-left: -132px; } .ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content #Form_ImportForm div.checkbox { padding: 0px; } @@ -54,78 +55,78 @@ fieldset.switch-states .switch input.state-name { margin-left: -20px; } .cms-content-controls .preview-size-selector { display: none; } /** Helper SCSS file for generating sprites for the interface. */ -.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-image: url('../images/btn-icon-scb653ce8a9.png'); background-repeat: no-repeat; } +.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background: url('../images/btn-icon-se43cec5357.png') no-repeat; } -.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 0; } -.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -16px; } -.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 -32px; } -.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -48px; } -.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -68px; } -.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -84px; } -.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -100px; } -.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -116px; } -.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -132px; } -.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -148px; } -.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -164px; } -.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -180px; } -.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -196px; } -.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -212px; } -.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -228px; } -.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -244px; } -.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -260px; } -.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -276px; } -.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -292px; } -.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -308px; } -.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -324px; } -.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -340px; } -.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -355px; } -.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -371px; } -.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -387px; } -.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -403px; } -.ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk { background-position: 0 -420px; } -.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -436px; } -.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -452px; } -.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -468px; } -.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -484px; } -.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -500px; } -.ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information { background-position: 0 -516px; } -.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -532px; } -.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -548px; } -.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -564px; } -.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -580px; } -.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -596px; } -.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -612px; } -.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -628px; } -.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -644px; } -.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -660px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -676px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -692px; } -.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -708px; } -.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -724px; } -.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -740px; } -.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -756px; } -.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -772px; } -.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -788px; } +.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 -96px; } +.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -80px; } +.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 0; } +.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -208px; } +.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -32px; } +.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -144px; } +.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -516px; } +.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -356px; } +.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -340px; } +.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -372px; } +.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -16px; } +.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -740px; } +.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -532px; } +.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -756px; } +.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -692px; } +.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -724px; } +.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -788px; } +.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -500px; } +.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -772px; } +.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -468px; } +.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -580px; } +.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -276px; } +.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -128px; } +.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -192px; } +.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -484px; } +.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -307px; } +.ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk { background-position: 0 -291px; } +.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -564px; } +.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -48px; } +.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -436px; } +.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -596px; } +.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -260px; } +.ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information { background-position: 0 -388px; } +.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -548px; } +.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -644px; } +.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -660px; } +.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -404px; } +.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -452px; } +.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -628px; } +.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -708px; } +.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -228px; } +.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -612px; } +.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -244px; } +.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -676px; } +.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -64px; } +.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -160px; } +.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -324px; } +.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -420px; } +.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -112px; } +.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -176px; } .icon { text-indent: -9999px; border: none; outline: none; } -.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-s0dc15c36f9.png'); } -.icon.icon-24.icon-assetadmin { background-position: 0 -216px; } -.icon.icon-24.icon-cmsmain { background-position: 0 -192px; } -.icon.icon-24.icon-cmspagescontroller { background-position: 0 -168px; } -.icon.icon-24.icon-cmssettingscontroller { background-position: 0 -96px; } +.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-s391afdd013.png'); } +.icon.icon-24.icon-assetadmin { background-position: 0 -120px; } +.icon.icon-24.icon-cmsmain { background-position: 0 -48px; } +.icon.icon-24.icon-cmspagescontroller { background-position: 0 -216px; } +.icon.icon-24.icon-cmssettingscontroller { background-position: 0 0; } .icon.icon-24.icon-securityadmin { background-position: 0 -24px; } -.icon.icon-24.icon-reportadmin { background-position: 0 -240px; } -.icon.icon-24.icon-commentadmin { background-position: 0 0; } -.icon.icon-24.icon-help { background-position: 0 -144px; } -.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-s3f4c846209.png'); } -.icon.icon-16.icon-assetadmin { background-position: 0 -144px; } -.icon.icon-16.icon-cmsmain { background-position: 0 -128px; } +.icon.icon-24.icon-reportadmin { background-position: 0 -72px; } +.icon.icon-24.icon-commentadmin { background-position: 0 -192px; } +.icon.icon-24.icon-help { background-position: 0 -96px; } +.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-sf5b94bb49b.png'); } +.icon.icon-16.icon-assetadmin { background-position: 0 -80px; } +.icon.icon-16.icon-cmsmain { background-position: 0 -16px; } .icon.icon-16.icon-cmspagescontroller { background-position: 0 -112px; } -.icon.icon-16.icon-cmssettingscontroller { background-position: 0 -64px; } -.icon.icon-16.icon-securityadmin { background-position: 0 -16px; } -.icon.icon-16.icon-reportadmin { background-position: 0 -160px; } -.icon.icon-16.icon-commentadmin { background-position: 0 0; } -.icon.icon-16.icon-help { background-position: 0 -96px; } +.icon.icon-16.icon-cmssettingscontroller { background-position: 0 0; } +.icon.icon-16.icon-securityadmin { background-position: 0 -48px; } +.icon.icon-16.icon-reportadmin { background-position: 0 -32px; } +.icon.icon-16.icon-commentadmin { background-position: 0 -144px; } +.icon.icon-16.icon-help { background-position: 0 -64px; } html { overflow: hidden; } @@ -197,6 +198,7 @@ table.ss-gridfield-table tr.ss-gridfield-item.even { background: #F0F4F7; } .ss-ui-button.ss-gridfield-button-filter { border: none !important; } +/** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. Fix for model admin filter styling */ .ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content .cms-search-form { overflow: hidden; } .ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content .cms-search-form input { width: 160px; } diff --git a/admin/css/ie8.css b/admin/css/ie8.css index 15ce9fe1a..61de16efc 100644 --- a/admin/css/ie8.css +++ b/admin/css/ie8.css @@ -9,7 +9,7 @@ /** ----------------------------------------------- Application Logo (CMS Logo) Must be 24px x 24px ------------------------------------------------ */ .cms .ss-ui-button { background-color: #e6e6e6; } .cms .ss-ui-button.ui-state-hover { background-color: #f3f3f3; } -.cms .ss-ui-button.ss-ui-action-constructive { background-color: #1F9433; } +.cms .ss-ui-button.ss-ui-action-constructive { background-color: #1f9433; } .cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover { background-color: #23a93a; } .cms .ss-ui-button.ss-gridfield-button-filter { background: #55a4d2 url(../../images/icons/filter-icons.png) no-repeat -14px 4px; } @@ -20,7 +20,7 @@ .ss-gridfield-button-filter.ss-ui-button.hover-alike { background-color: #338DC1; background-position: -16px 6px; filter: none; } .ss-gridfield-button-reset.ss-ui-button { background: #e6e6e6 url(../images/filter-icons.png) no-repeat 8px 5px; filter: none; } -.ss-gridfield-button-reset.ss-ui-button.filtered:hover { background: #f00 url(../images/filter-icons.png) no-repeat 8px -17px; filter: none; } +.ss-gridfield-button-reset.ss-ui-button.filtered:hover { background: red url(../images/filter-icons.png) no-repeat 8px -17px; filter: none; } .ss-gridfield-button-reset.ss-ui-button.filtered:active { background: #e60000 url(../images/filter-icons.png) no-repeat 9px -16px; filter: none; } .cms table.ss-gridfield-table tr td { border-right: 1px solid #9a9a9a; } @@ -35,6 +35,7 @@ .cms-menu-list li a .icon { filter: none; } +/** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. Fix for model admin filter styling */ .ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content #Form_ImportForm div.file { margin: 0px; } .ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content #Form_ImportForm div.file input.file { margin-left: -132px; } .ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content #Form_ImportForm div.checkbox { padding: 0px; } @@ -58,6 +59,7 @@ fieldset.switch-states .switch input.state-name { margin-left: -20px; } .cms-content-toolbar .cms-tree-view-modes .checkboxAboveTree { margin-right: 1px; } +/** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. */ .cms .cms-content-tools .cms-panel-content .dropdown select { width: 152px; } .filter-buttons button { width: 23px !important; height: 23px !important; } @@ -68,6 +70,6 @@ fieldset.switch-states .switch input.state-name { margin-left: -20px; } /* fix for actions buttons on edit page content overlapping */ .cms-content-actions .ss-ui-buttonset button { margin-right: 0; } -.tree-holder.filtered-list li > a, .tree-holder.filtered-list li > a:link, .cms-tree.filtered-list li > a, .cms-tree.filtered-list li > a:link { color: #aaa; } -.tree-holder.filtered-list li.filtered-item > a, .tree-holder.filtered-list li.filtered-item > a:link, .cms-tree.filtered-list li.filtered-item > a, .cms-tree.filtered-list li.filtered-item > a:link { color: #0073C1; } -.tree-holder.filtered-list li.disabled > a, .tree-holder.filtered-list li.disabled > a:link, .tree-holder.filtered-list li.edit-disabled > a, .tree-holder.filtered-list li.edit-disabled > a:link, .cms-tree.filtered-list li.disabled > a, .cms-tree.filtered-list li.disabled > a:link, .cms-tree.filtered-list li.edit-disabled > a, .cms-tree.filtered-list li.edit-disabled > a:link { color: #aaa; background: transparent none; cursor: default; } +.tree-holder.filtered-list li > a, .tree-holder.filtered-list li > a:link, .cms-tree.filtered-list li > a, .cms-tree.filtered-list li > a:link { color: #aaaaaa; } +.tree-holder.filtered-list li.filtered-item > a, .tree-holder.filtered-list li.filtered-item > a:link, .cms-tree.filtered-list li.filtered-item > a, .cms-tree.filtered-list li.filtered-item > a:link { color: #0073c1; } +.tree-holder.filtered-list li.disabled > a, .tree-holder.filtered-list li.disabled > a:link, .tree-holder.filtered-list li.edit-disabled > a, .tree-holder.filtered-list li.edit-disabled > a:link, .cms-tree.filtered-list li.disabled > a, .cms-tree.filtered-list li.disabled > a:link, .cms-tree.filtered-list li.edit-disabled > a, .cms-tree.filtered-list li.edit-disabled > a:link { color: #aaaaaa; background: transparent none; cursor: default; } diff --git a/admin/css/screen.css b/admin/css/screen.css index 71c518995..896761b6d 100644 --- a/admin/css/screen.css +++ b/admin/css/screen.css @@ -15,7 +15,7 @@ q:before, q:after, blockquote:before, blockquote:after { content: ""; content: n a img { border: none; } -article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { display: block; } /*$experimental-support-for-svg variable comes from imported compass/support file and enables svg gradients in IE9. @@ -37,82 +37,90 @@ Used in side panels and action tabs */ /** ----------------------------- Sprite images ----------------------------- */ /** Helper SCSS file for generating sprites for the interface. */ -.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-image: url('../images/btn-icon-scb653ce8a9.png'); background-repeat: no-repeat; } +.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background: url('../images/btn-icon-se43cec5357.png') no-repeat; } -.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 0; } -.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -16px; } -.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 -32px; } -.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -48px; } -.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -68px; } -.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -84px; } -.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -100px; } -.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -116px; } -.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -132px; } -.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -148px; } -.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -164px; } -.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -180px; } -.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -196px; } -.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -212px; } -.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -228px; } -.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -244px; } -.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -260px; } -.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -276px; } -.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -292px; } -.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -308px; } -.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -324px; } -.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -340px; } -.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -355px; } -.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -371px; } -.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -387px; } -.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -403px; } -.ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk { background-position: 0 -420px; } -.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -436px; } -.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -452px; } -.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -468px; } -.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -484px; } -.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -500px; } -.ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information { background-position: 0 -516px; } -.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -532px; } -.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -548px; } -.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -564px; } -.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -580px; } -.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -596px; } -.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -612px; } -.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -628px; } -.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -644px; } -.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -660px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -676px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -692px; } -.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -708px; } -.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -724px; } -.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -740px; } -.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -756px; } -.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -772px; } -.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -788px; } +.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 -96px; } +.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -80px; } +.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 0; } +.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -208px; } +.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -32px; } +.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -144px; } +.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -516px; } +.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -356px; } +.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -340px; } +.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -372px; } +.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -16px; } +.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -740px; } +.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -532px; } +.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -756px; } +.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -692px; } +.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -724px; } +.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -788px; } +.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -500px; } +.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -772px; } +.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -468px; } +.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -580px; } +.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -276px; } +.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -128px; } +.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -192px; } +.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -484px; } +.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -307px; } +.ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk { background-position: 0 -291px; } +.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -564px; } +.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -48px; } +.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -436px; } +.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -596px; } +.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -260px; } +.ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information { background-position: 0 -388px; } +.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -548px; } +.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -644px; } +.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -660px; } +.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -404px; } +.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -452px; } +.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -628px; } +.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -708px; } +.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -228px; } +.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -612px; } +.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -244px; } +.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -676px; } +.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -64px; } +.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -160px; } +.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -324px; } +.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -420px; } +.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -112px; } +.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -176px; } .icon { text-indent: -9999px; border: none; outline: none; } -.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-s0dc15c36f9.png'); } -.icon.icon-24.icon-assetadmin { background-position: 0 -216px; } -.icon.icon-24.icon-cmsmain { background-position: 0 -192px; } -.icon.icon-24.icon-cmspagescontroller { background-position: 0 -168px; } -.icon.icon-24.icon-cmssettingscontroller { background-position: 0 -96px; } +.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-s391afdd013.png'); } +.icon.icon-24.icon-assetadmin { background-position: 0 -120px; } +.icon.icon-24.icon-cmsmain { background-position: 0 -48px; } +.icon.icon-24.icon-cmspagescontroller { background-position: 0 -216px; } +.icon.icon-24.icon-cmssettingscontroller { background-position: 0 0; } .icon.icon-24.icon-securityadmin { background-position: 0 -24px; } -.icon.icon-24.icon-reportadmin { background-position: 0 -240px; } -.icon.icon-24.icon-commentadmin { background-position: 0 0; } -.icon.icon-24.icon-help { background-position: 0 -144px; } -.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-s3f4c846209.png'); } -.icon.icon-16.icon-assetadmin { background-position: 0 -144px; } -.icon.icon-16.icon-cmsmain { background-position: 0 -128px; } +.icon.icon-24.icon-reportadmin { background-position: 0 -72px; } +.icon.icon-24.icon-commentadmin { background-position: 0 -192px; } +.icon.icon-24.icon-help { background-position: 0 -96px; } +.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-sf5b94bb49b.png'); } +.icon.icon-16.icon-assetadmin { background-position: 0 -80px; } +.icon.icon-16.icon-cmsmain { background-position: 0 -16px; } .icon.icon-16.icon-cmspagescontroller { background-position: 0 -112px; } -.icon.icon-16.icon-cmssettingscontroller { background-position: 0 -64px; } -.icon.icon-16.icon-securityadmin { background-position: 0 -16px; } -.icon.icon-16.icon-reportadmin { background-position: 0 -160px; } -.icon.icon-16.icon-commentadmin { background-position: 0 0; } -.icon.icon-16.icon-help { background-position: 0 -96px; } +.icon.icon-16.icon-cmssettingscontroller { background-position: 0 0; } +.icon.icon-16.icon-securityadmin { background-position: 0 -48px; } +.icon.icon-16.icon-reportadmin { background-position: 0 -32px; } +.icon.icon-16.icon-commentadmin { background-position: 0 -144px; } +.icon.icon-16.icon-help { background-position: 0 -64px; } /** ----------------------------- CMS Components ------------------------------ */ +@font-face { font-family: 'fontello'; src: url("../font/fontello.eot?33987583"); src: url("../font/fontello.eot?33987583#iefix") format("embedded-opentype"), url("../font/fontello.woff?33987583") format("woff"), url("../font/fontello.ttf?33987583") format("truetype"), url("../font/fontello.svg?33987583#fontello") format("svg"); font-weight: normal; font-style: normal; } + +[class^="font-icon-"]:before, [class*=" font-icon-"]:before { display: inline-block; width: 1em; margin-right: .2em; text-align: center; text-decoration: inherit; text-transform: none; font-family: "fontello"; font-style: normal; font-weight: normal; font-variant: normal; speak: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } + +.font-icon-search:before { content: '\e800'; } + +.font-icon-list:before { content: '\e801'; } + /** File: typography.scss Contains the basic typography related styles for the admin interface. */ -body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; color: #444; } +body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; color: #444444; } .cms h2, .cms h3, .cms h4, .cms h5 { font-weight: bold; margin: 16px 0 16px 0; line-height: 16px; } .cms h2 { font-size: 18px; line-height: 24px; } @@ -124,24 +132,24 @@ body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; .cms code { font-family: 'Bitstream Vera Sans Mono','Courier', monospace; } /** This file defines CMS-specific customizations to the jQuery UI theme. Every rule should contain ONLY overwritten jQuery UI rules (with 'ui-' prefix). This file should be fairly short, as we're using our own custom jQuery UI theme already. TODO Add theme reference Use _style.scss to add more generic style information, and read the jQuery UI theming API: http://jqueryui.com/docs/Theming/API */ -.ui-widget-content, .ui-widget { color: #444; font-size: 12px; font-family: Arial, sans-serif; border: 0; } +.ui-widget-content, .ui-widget { color: #444444; font-size: 12px; font-family: Arial, sans-serif; border: 0; } -.ui-widget-header { background-color: #b0bec7; padding: 8px 8px 6px 8px; border-bottom: 2px solid #8399a7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZTNlNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dde3e7), color-stop(100%, #92a5b2)); background-image: -moz-linear-gradient(#dde3e7, #92a5b2); background-image: -webkit-linear-gradient(#dde3e7, #92a5b2); background-image: linear-gradient(#dde3e7, #92a5b2); border-bottom: 3px solid #5c7382; padding: 8px; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } +.ui-widget-header { background-color: #b0bec7; padding: 8px 8px 6px 8px; border-bottom: 2px solid #8399a7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZTNlNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dde3e7), color-stop(100%, #92a5b2)); background-image: -webkit-linear-gradient(#dde3e7, #92a5b2); background-image: -moz-linear-gradient(#dde3e7, #92a5b2); background-image: -o-linear-gradient(#dde3e7, #92a5b2); background-image: linear-gradient(#dde3e7, #92a5b2); border-bottom: 3px solid #5c7382; padding: 8px; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; } .ui-widget-header .ui-dialog-title { padding: 6px 10px; text-shadow: #ced7dc 1px 1px 0; } .ui-widget-header a.ui-dialog-titlebar-close { position: absolute; top: -5px; right: -13px; width: 30px; height: 30px; z-index: 100000; } .ui-widget-header a.ui-state-hover { border-color: transparent; background: transparent; } -.ui-widget-header a.ui-state-hover .ui-icon-closethick { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -356px no-repeat; } -.ui-widget-header .ui-icon-closethick { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -396px no-repeat; width: 30px; height: 30px; } +.ui-widget-header a.ui-state-hover .ui-icon-closethick { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -292px no-repeat; } +.ui-widget-header .ui-icon-closethick { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -252px no-repeat; width: 30px; height: 30px; } .ui-state-hover { cursor: pointer; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { color: #444; font-size: 12px; font-family: Arial, sans-serif; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { color: #444444; font-size: 12px; font-family: Arial, sans-serif; } .ui-accordion .ui-accordion-header { border-color: #c0c0c2; margin-bottom: 0; } .ui-accordion .ui-accordion-content { border: 1px solid #c0c0c2; border-top: none; } .ui-autocomplete { max-height: 240px; overflow-x: hidden; overflow-y: auto; /** sorry about the !important but the specificity of other selectors mandates it over writing out very specific selectors **/ } -.ui-autocomplete-loading { background-image: url(../images/throbber.gif) !important; background-position: 97% center !important; background-repeat: no-repeat !important; background-size: auto !important; } +.ui-autocomplete .loading { background-image: url(../images/throbber.gif) !important; background-position: 97% center !important; background-repeat: no-repeat !important; background-size: auto !important; } /** This file defines common styles for form elements used throughout the CMS interface. It is an addition to the base styles defined in framework/css/Form.css. @package framework @subpackage admin */ /** ---------------------------------------------------- Basic form fields ---------------------------------------------------- */ @@ -152,11 +160,11 @@ form.nostyle .middleColumn { margin-left: 0; } form.nostyle input.text, form.nostyle textarea, form.nostyle select, form.nostyle .TreeDropdownField { width: auto; max-width: auto; } .field { display: block; border-bottom: 1px solid #d0d3d5; -webkit-box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); -moz-box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); -o-box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); padding: 0 0 7px 0; margin: 8px 0; *zoom: 1; } -.field.noborder, .field:last-child { padding-bottom: 0; border-bottom: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } +.field.noborder, .field:last-child { padding-bottom: 0; border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .field:after { content: "\0020"; display: block; height: 0; clear: both; overflow: hidden; visibility: hidden; } .field.nolabel .middleColumn { margin-left: 0; } .field.nolabel .description { margin-left: 0; } -.field.checkbox label.right { margin: 4px 0 0 0; display: inline; font-style: normal; color: #444; clear: none; } +.field.checkbox label.right { margin: 4px 0 0 0; display: inline; font-style: normal; color: #444444; clear: none; } .field label.left { float: left; display: block; width: 176px; padding: 8px 8px 8px 0; line-height: 16px; font-weight: bold; text-shadow: 1px 1px 0 white; } .field label.right { cursor: pointer; clear: both; color: #777777; display: block; font-style: italic; margin: 4px 0 0 184px; } .field .middleColumn { margin-left: 184px; } @@ -164,12 +172,12 @@ form.nostyle input.text, form.nostyle textarea, form.nostyle select, form.nostyl .field .fieldgroup .fieldgroup-field.last { /* This is used on page/settings/visibility */ padding-bottom: 8px; /* replicates li item spacing */ } .field .description { clear: both; color: #777777; display: block; font-style: italic; line-height: 16px; margin: 4px 0 0 184px; } .field.checkbox .description, .field.ss-gridfield .description { margin-left: 0; } -.field input.text, .field textarea, .field select, .field .TreeDropdownField { margin-left: 10px; width: 100%; max-width: 512px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } +.field input.text, .field textarea, .field select, .field .TreeDropdownField { margin-left: 10px; width: 100%; max-width: 512px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .field input.text.description, .field textarea.description, .field select.description, .field .TreeDropdownField.description { margin: 0; } .field input.text .description, .field textarea .description, .field select .description, .field .TreeDropdownField .description { max-width: 512px; } -.field input.text, .field textarea, .field .TreeDropdownField { background: #fff; border: 1px solid #b3b3b3; padding: 7px 7px; line-height: 16px; margin: 0; outline: none; -moz-transition: 0.2s box-shadow ease-in; -webkit-transition: 0.2s box-shadow ease-in; -o-transition: 0.2s box-shadow ease-in; transition: 0.2s box-shadow ease-in; -moz-transition: 0.2s border ease-in; -webkit-transition: 0.2s border ease-in; -o-transition: 0.2s border ease-in; transition: 0.2s border ease-in; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VhZWFlYSIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eaeaea), color-stop(10%, #ffffff)); background-image: -moz-linear-gradient(#eaeaea, #ffffff 10%); background-image: -webkit-linear-gradient(#eaeaea, #ffffff 10%); background-image: linear-gradient(#eaeaea, #ffffff 10%); } -.field input.text:focus, .field textarea:focus, .field .TreeDropdownField:focus { border: 1px solid #9a9a9a; border-top-color: #808080; -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; } -.field input[disabled], .field input.disabled, .field textarea[disabled], .field textarea.disabled, .field select[disabled], .field select.disabled { color: #777777; background: #efefef; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JjYmNiYyIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZWZlZmVmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiY2JjYmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bcbcbc), color-stop(10%, #efefef), color-stop(90%, #ffffff), color-stop(100%, #bcbcbc)); background-image: -moz-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -webkit-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); border: 1px solid #b3b3b3; } +.field input.text, .field textarea, .field .TreeDropdownField { background: #fff; border: 1px solid #b3b3b3; padding: 7px 7px; line-height: 16px; margin: 0; outline: none; -moz-transition: 0.2s box-shadow ease-in; -webkit-transition: 0.2s box-shadow ease-in; -o-transition: 0.2s box-shadow ease-in; transition: 0.2s box-shadow ease-in; -moz-transition: 0.2s border ease-in; -webkit-transition: 0.2s border ease-in; -o-transition: 0.2s border ease-in; transition: 0.2s border ease-in; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VhZWFlYSIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eaeaea), color-stop(10%, #ffffff)); background-image: -webkit-linear-gradient(#eaeaea, #ffffff 10%); background-image: -moz-linear-gradient(#eaeaea, #ffffff 10%); background-image: -o-linear-gradient(#eaeaea, #ffffff 10%); background-image: linear-gradient(#eaeaea, #ffffff 10%); } +.field input.text:focus, .field textarea:focus, .field .TreeDropdownField:focus { border: 1px solid #9a9a9a; border-top-color: gray; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; } +.field input[disabled], .field input.disabled, .field textarea[disabled], .field textarea.disabled, .field select[disabled], .field select.disabled { color: #777777; background: #efefef; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JjYmNiYyIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZWZlZmVmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiY2JjYmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bcbcbc), color-stop(10%, #efefef), color-stop(90%, #ffffff), color-stop(100%, #bcbcbc)); background-image: -webkit-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -moz-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -o-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); border: 1px solid #b3b3b3; } .field#Action { box-shadow: none; } .field.cms-description-toggle > .middleColumn { display: inline-block; vertical-align: middle; margin-left: 0; width: 36%; min-width: 300px; } .field.cms-description-toggle .right { display: inline-block; vertical-align: middle; height: 15px; margin: 0 0 0 7px; } @@ -203,11 +211,11 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .field .chzn-container { max-width: 512px; vertical-align: bottom; } .field .chzn-container .chzn-results li { font-size: 11px; line-height: 16px; padding: 4px 4px; } .field .chzn-container-active .chzn-single { border: 1px solid #9a9a9a; } -.field .chzn-container-single .chzn-single { height: 30px; line-height: 30px; /* not relative, as then we'd had to redo most of chzn */ font-size: 12px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VmZWZlZiIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlZmVmZWYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #efefef), color-stop(10%, #ffffff), color-stop(90%, #ffffff), color-stop(100%, #efefef)); background-image: -moz-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -webkit-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); } +.field .chzn-container-single .chzn-single { height: 30px; line-height: 30px; /* not relative, as then we'd had to redo most of chzn */ font-size: 12px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VmZWZlZiIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlZmVmZWYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #efefef), color-stop(10%, #ffffff), color-stop(90%, #ffffff), color-stop(100%, #efefef)); background-image: -webkit-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -moz-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -o-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); } .field .chzn-container-single .chzn-single:hover, .field .chzn-container-single .chzn-single:focus, .field .chzn-container-single .chzn-single:active { text-decoration: none; } .field .chzn-container-single .chzn-single div { width: 24px; } .field .chzn-container-single .chzn-single div b { background-position: 4px 3px; } -.field .chzn-choices { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } +.field .chzn-choices { -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } .field .chzn-choices .search-choice { line-height: 16px; } .field .chzn-choices .search-choice .search-choice-close { top: 5px; } .field .chzn-choices .search-field input { height: 18px; } @@ -216,10 +224,10 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .field.remove-splitter { border-bottom: none; box-shadow: none; } /** ---------------------------------------------------- Buttons ---------------------------------------------------- */ -.cms .button-no-style button, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: none; border: none; color: #0073C1; display: block; font-weight: normal; margin: 0; outline: none; padding-left: 10px; padding-right: 10px; text-align: left; text-shadow: none; white-space: normal; } +.cms .button-no-style button, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button { -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: none; border: none; color: #0073c1; display: block; font-weight: normal; margin: 0; outline: none; padding-left: 10px; padding-right: 10px; text-align: left; text-shadow: none; white-space: normal; } .cms .button-no-style button.ss-ui-action-destructive, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-action-destructive { color: #c22730; } .cms .button-no-style button span, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button span { padding-left: 0; padding-right: 0; } -.cms .button-no-style button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:hover, .cms .button-no-style button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:focus, .cms .button-no-style button:active, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; outline: none; background: none; border: none; } +.cms .button-no-style button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:hover, .cms .button-no-style button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:focus, .cms .button-no-style button:active, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; outline: none; background: none; border: none; } .cms .button-no-style button.loading, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.loading { background: transparent url(../../images/network-save.gif) no-repeat 8px center; } .cms .button-no-style button.loading .ui-button-text, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.loading .ui-button-text { padding-left: 20px; } .cms .Actions > *, .cms .cms-actions-row > * { display: block; float: left; margin-right: 8px; } @@ -229,17 +237,17 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .cms input.loading, .cms button.loading, .cms input.ui-state-default.loading, .cms .ui-widget-content input.ui-state-default.loading, .cms .ui-widget-header input.ui-state-default.loading { color: #525252; border-color: #d5d3d3; cursor: default; } .cms input.loading .ui-icon, .cms button.loading .ui-icon, .cms input.ui-state-default.loading .ui-icon, .cms .ui-widget-content input.ui-state-default.loading .ui-icon, .cms .ui-widget-header input.ui-state-default.loading .ui-icon { background: transparent url(../../images/network-save.gif) no-repeat 0 0; } .cms input.loading.ss-ui-action-constructive .ui-icon, .cms button.loading.ss-ui-action-constructive .ui-icon { background: transparent url(../../images/network-save-constructive.gif) no-repeat 0 0; } -.cms .ss-ui-button { margin-top: 0px; font-weight: bold; text-decoration: none; line-height: 16px; color: #393939; border: 1px solid #c0c0c2; border-bottom: 1px solid #a6a6a9; cursor: pointer; background-color: #e6e6e6; white-space: nowrap; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background: -moz-linear-gradient(#ffffff, #d9d9d9); background: -webkit-linear-gradient(#ffffff, #d9d9d9); background: linear-gradient(#ffffff, #d9d9d9); text-shadow: white 0 1px 1px; /* constructive */ /* destructive */ } -.cms .ss-ui-button.ui-state-hover, .cms .ss-ui-button:hover { text-decoration: none; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -moz-box-shadow: 0 0 5px #b3b3b3; -webkit-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; } -.cms .ss-ui-button:active, .cms .ss-ui-button:focus, .cms .ss-ui-button.ui-state-active, .cms .ss-ui-button.ui-state-focus { border: 1px solid #b3b3b3; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -moz-box-shadow: 0 0 5px #b3b3b3 inset; -webkit-box-shadow: 0 0 5px #b3b3b3 inset; box-shadow: 0 0 5px #b3b3b3 inset; } +.cms .ss-ui-button { margin-top: 0px; font-weight: bold; text-decoration: none; line-height: 16px; color: #393939; border: 1px solid #c0c0c2; border-bottom: 1px solid #a6a6a9; cursor: pointer; background-color: #e6e6e6; white-space: nowrap; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background: -webkit-linear-gradient(#ffffff, #d9d9d9); background: -moz-linear-gradient(#ffffff, #d9d9d9); background: -o-linear-gradient(#ffffff, #d9d9d9); background: linear-gradient(#ffffff, #d9d9d9); text-shadow: white 0 1px 1px; /* constructive */ /* destructive */ } +.cms .ss-ui-button.ui-state-hover, .cms .ss-ui-button:hover { text-decoration: none; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -o-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -webkit-box-shadow: 0 0 5px #b3b3b3; -moz-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; } +.cms .ss-ui-button:active, .cms .ss-ui-button:focus, .cms .ss-ui-button.ui-state-active, .cms .ss-ui-button.ui-state-focus { border: 1px solid #b3b3b3; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -o-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -webkit-box-shadow: 0 0 5px #b3b3b3 inset; -moz-box-shadow: 0 0 5px #b3b3b3 inset; box-shadow: 0 0 5px #b3b3b3 inset; } .cms .ss-ui-button.ss-ui-action-minor span { padding-left: 0; padding-right: 0; } -.cms .ss-ui-button.ss-ui-action-constructive { text-shadow: none; font-weight: bold; color: white; border-color: #1F9433; border-bottom-color: #166a24; background-color: #1F9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzk0YmU0MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFmOTQzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #94be42), color-stop(100%, #1f9433)); background: -moz-linear-gradient(#94be42, #1f9433); background: -webkit-linear-gradient(#94be42, #1f9433); background: linear-gradient(#94be42, #1f9433); text-shadow: #1c872f 0 -1px -1px; } -.cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover, .cms .ss-ui-button.ss-ui-action-constructive:hover { border-color: #166a24; background-color: #1F9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E0Y2EzYSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzIzYTkzYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a4ca3a), color-stop(100%, #23a93a)); background: -moz-linear-gradient(#a4ca3a, #23a93a); background: -webkit-linear-gradient(#a4ca3a, #23a93a); background: linear-gradient(#a4ca3a, #23a93a); } -.cms .ss-ui-button.ss-ui-action-constructive:active, .cms .ss-ui-button.ss-ui-action-constructive:focus, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-active, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-focus { background-color: #1d8c30; -moz-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); -webkit-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); } -.cms .ss-ui-button.ss-ui-action-destructive { color: #f00; background-color: #e6e6e6; } +.cms .ss-ui-button.ss-ui-action-constructive { text-shadow: none; font-weight: bold; color: white; border-color: #1f9433; border-bottom-color: #166a24; background-color: #1f9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkzYmU0MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFmOTQzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #93be42), color-stop(100%, #1f9433)); background: -webkit-linear-gradient(#93be42, #1f9433); background: -moz-linear-gradient(#93be42, #1f9433); background: -o-linear-gradient(#93be42, #1f9433); background: linear-gradient(#93be42, #1f9433); text-shadow: #1c872f 0 -1px -1px; } +.cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover, .cms .ss-ui-button.ss-ui-action-constructive:hover { border-color: #166a24; background-color: #1f9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E0Y2EzYSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzIzYTkzYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a4ca3a), color-stop(100%, #23a93a)); background: -webkit-linear-gradient(#a4ca3a, #23a93a); background: -moz-linear-gradient(#a4ca3a, #23a93a); background: -o-linear-gradient(#a4ca3a, #23a93a); background: linear-gradient(#a4ca3a, #23a93a); } +.cms .ss-ui-button.ss-ui-action-constructive:active, .cms .ss-ui-button.ss-ui-action-constructive:focus, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-active, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-focus { background-color: #1d8c30; -webkit-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); -moz-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); } +.cms .ss-ui-button.ss-ui-action-destructive { color: red; background-color: #e6e6e6; } .cms .ss-ui-button.ss-ui-button-small .ui-button-text { font-size: 10px; } .cms .ss-ui-button.ui-state-highlight { background-color: #e6e6e6; border: 1px solid #708284; } -.cms .ss-ui-button.ss-ui-action-minor { background: none; border: 0; color: #393939; text-decoration: underline; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } +.cms .ss-ui-button.ss-ui-action-minor { background: none; border: 0; color: #393939; text-decoration: underline; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .cms .ss-ui-button.ss-ui-action-minor:hover { text-decoration: none; color: #1f1f1f; } .cms .ss-ui-button.ss-ui-action-minor:focus, .cms .ss-ui-button.ss-ui-action-minor:active { text-decoration: none; color: #525252; } .cms .ss-ui-button.ss-ui-button-loading { opacity: 0.8; } @@ -258,10 +266,10 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .ss-toggle { margin: 8px 0; } .ss-toggle .ui-accordion-header { font-weight: bold; font-size: 12px; } -.ss-toggle .ui-accordion-header.ui-state-default { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2YxZjJmMiIgc3RvcC1vcGFjaXR5PSIwLjgiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNjOWNkY2UiIHN0b3Atb3BhY2l0eT0iMC44Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(241, 242, 242, 0.8)), color-stop(100%, rgba(201, 205, 206, 0.8))); background-image: -moz-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -webkit-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } +.ss-toggle .ui-accordion-header.ui-state-default { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyNDEsIDI0MiwgMjQyLCAwLjgpIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSJyZ2JhKDIwMSwgMjA1LCAyMDYsIDAuOCkiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(241, 242, 242, 0.8)), color-stop(100%, rgba(201, 205, 206, 0.8))); background-image: -webkit-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -moz-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -o-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .ss-toggle .ui-accordion-header .ui-accordion-header-icon { margin-top: -9px; } .ss-toggle .ui-accordion-content { padding: 8px 0 12px; } -.ss-toggle .ui-accordion-content .field { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; padding-left: 12px; padding-right: 12px; } +.ss-toggle .ui-accordion-content .field { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; padding-left: 12px; padding-right: 12px; } .ss-toggle .ui-accordion-content .field:last-child { margin-bottom: 0; } .ss-toggle .ui-accordion-content .field .middleColumn { margin-left: 0; } .ss-toggle .ui-accordion-content .field label { float: none; margin-left: 0; } @@ -317,13 +325,13 @@ fieldset.switch-states { padding: 0 20px 0 0; margin-right: 5px; /* Note: with a little adjustment the switch can take more than 5 items, but a dropdown would probably be more appropriate */ } -fieldset.switch-states .switch { -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; -webkit-animation: bugfix infinite 1s; background: #dee0e3; display: block; height: 25px; margin-top: 3px; padding: 0 10px; position: relative; width: 100%; z-index: 5; } +fieldset.switch-states .switch { -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; -webkit-animation: bugfix infinite 1s; background: #dee0e3; display: block; height: 25px; margin-top: 3px; padding: 0 10px; position: relative; width: 100%; z-index: 5; } fieldset.switch-states .switch label { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); color: #858585; color: rgba(31, 31, 31, 0.5); cursor: pointer; float: left; font-weight: bold; height: 100%; line-height: 25px; position: relative; z-index: 2; /* Make text unselectable in browsers that support that */ -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } fieldset.switch-states .switch label:hover { color: #6c6c6c; color: rgba(31, 31, 31, 0.7); } -fieldset.switch-states .switch label span { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; display: inline-block; padding: 0 10px; } +fieldset.switch-states .switch label span { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; display: inline-block; padding: 0 10px; } fieldset.switch-states .switch input { opacity: 0; filter: alpha(opacity=0); visibility: none; position: absolute; } fieldset.switch-states .switch input:checked + label { -moz-transition: all 0.3s ease-out 0s; -webkit-transition: all 0.3s ease-out 0s; -o-transition: all 0.3s ease-out 0s; transition: all 0.3s ease-out 0s; color: #fff; text-shadow: 0 -1px 0 #287099; } -fieldset.switch-states .switch .slide-button { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJiOWMzMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzY0YWIzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2b9c32), color-stop(100%, #64ab36)); background-image: -moz-linear-gradient(#2b9c32, #64ab36); background-image: -webkit-linear-gradient(#2b9c32, #64ab36); background-image: linear-gradient(#2b9c32, #64ab36); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -moz-transition: all 0.3s ease-out 0s; -webkit-transition: all 0.3s ease-out 0s; -o-transition: all 0.3s ease-out 0s; transition: all 0.3s ease-out 0s; background-color: #2b9c32; display: block; height: 100%; left: 0; padding: 0; position: absolute; top: 0; z-index: 1; } +fieldset.switch-states .switch .slide-button { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJiOWMzMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzY0YWIzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2b9c32), color-stop(100%, #64ab36)); background-image: -webkit-linear-gradient(#2b9c32, #64ab36); background-image: -moz-linear-gradient(#2b9c32, #64ab36); background-image: -o-linear-gradient(#2b9c32, #64ab36); background-image: linear-gradient(#2b9c32, #64ab36); -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -moz-transition: all 0.3s ease-out 0s; -webkit-transition: all 0.3s ease-out 0s; -o-transition: all 0.3s ease-out 0s; transition: all 0.3s ease-out 0s; background-color: #2b9c32; display: block; height: 100%; left: 0; padding: 0; position: absolute; top: 0; z-index: 1; } fieldset.switch-states.size_1 label, fieldset.switch-states.size_1 .slide-button { width: 100%; } fieldset.switch-states.size_1 label span { padding-right: 0; } fieldset.switch-states.size_1 input:checked:nth-of-type(2) ~ .slide-button { left: 100%; } @@ -353,6 +361,29 @@ fieldset.switch-states.size_5 input:checked:nth-of-type(5) ~ .slide-button { lef @-webkit-keyframes bugfix { from { position: relative; } to { position: relative; } } + +.cms-content-filters fieldset { margin-left: -16px; margin-right: -16px; } +.cms-content-filters .fieldgroup { width: 50%; display: inline-block; max-width: 440px; padding-right: 16px; padding-left: 16px; margin-bottom: 16px; box-sizing: border-box; margin-right: -2px; vertical-align: top; } +.cms-content-filters .fieldgroup .first label, .cms-content-filters .fieldgroup .first h1, .cms-content-filters .fieldgroup .first h2, .cms-content-filters .fieldgroup .first h3, .cms-content-filters .fieldgroup .first h4, .cms-content-filters .fieldgroup .first h5 { display: block; width: 176px; padding: 8px 8px 6px 0; line-height: 16px; font-weight: bold; margin: 0; font-size: 100%; } +.cms-content-filters .fieldgroup .field { width: 100%; padding-right: 0; padding-left: 0; } +.cms-content-filters .fieldgroup .fieldgroup-field { position: relative; margin-right: 0; width: 48%; display: inline-block; padding: 0; } +.cms-content-filters .fieldgroup .fieldgroup-field .description { margin-top: 24px; } +.cms-content-filters .fieldgroup .fieldgroup-field label { position: absolute; top: 28px; font-style: italic; color: #777; font-weight: normal; } +.cms-content-filters .fieldgroup .fieldgroup-field.first { width: 100%; float: left; } +.cms-content-filters .fieldgroup .fieldgroup-field.last { padding-right: 0; float: right; } +.cms-content-filters .fieldgroup .fieldgroup { margin: 0; padding: 0; } +.cms-content-filters .field { border: none; box-shadow: none; width: 50%; max-width: 440px; display: inline-block; margin: 0 0 8px 0; padding-right: 16px; padding-left: 16px; padding-bottom: 0; box-sizing: border-box; margin-right: -2px; vertical-align: top; } +.cms-content-filters .field label.left { text-shadow: none; padding-bottom: 6px; } +.cms-content-filters .field.dropdown { float: none; display: inline-block; } +.cms-content-filters .field .chzn-container { width: 100% !important; max-width: 100%; } +.cms-content-filters .field input.text { max-width: 100%; } +.cms-content-filters .field.checkbox { display: block; } +.cms-content-filters .importSpec { margin-bottom: 8px; padding-left: 16px; } +.cms-content-filters .description { margin-left: 0; } +.cms-content-filters .middleColumn { width: 100%; margin-left: 0; max-width: 100%; } +.cms-content-filters .Actions { margin: 8px 0 16px; } +@media screen and (max-width: 767px) { .cms-content-filters fieldset .field, .cms-content-filters fieldset .fieldgroup { width: 100%; max-width: 100%; } } + /** * This file defines most styles of the CMS: Colors, fonts, backgrounds, * alignments, dimensions. @@ -370,7 +401,7 @@ html, body { width: 100%; height: 100%; /* Removes RHS whitespace on iPad */ ove body.cms { overflow: hidden; } -.cms a { color: #0073C1; text-decoration: none; } +.cms a { color: #0073c1; text-decoration: none; } .cms a:hover, .cms a:focus { text-decoration: underline; } .cms body .ui-widget { font-family: Arial, sans-serif; font-size: 12px; } .cms strong { font-weight: bold; } @@ -379,12 +410,12 @@ body.cms { overflow: hidden; } .hide, .cms-helper-hide-actions .Actions { display: none; } /** -------------------------------------------- Panels Styles -------------------------------------------- */ -.cms-container { height: 100%; /*background: $tab-panel-texture-background;*/ background: #ECEFF1; } +.cms-container { height: 100%; /*background: $tab-panel-texture-background;*/ background: #eceff1; } -.cms-preview, .cms-menu, .cms-content, .cms-content-header, .cms-content-tools, .cms-content-fields, .cms-edit-form, .cms-preview, .cms-preview iframe, .cms-preview-controls { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; } +.cms-preview, .cms-menu, .cms-content, .cms-content-header, .cms-content-tools, .cms-content-fields, .cms-edit-form, .cms-preview, .cms-preview iframe, .cms-preview-controls { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; } -.cms-content-header { padding-left: 16px; z-index: 60; min-height: 40px; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; background-position: left bottom; background-color: #D4D6D8; } -.cms-content-header a { color: #0073C1; } +.cms-content-header { padding-left: 16px; z-index: 60; min-height: 40px; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; background-position: left bottom; background-color: #d4d6d8; } +.cms-content-header a { color: #0073c1; } .cms-content-header .backlink span.btn-icon-back { height: 16px; } .cms-content-header h2 { font-size: 14px; font-weight: bold; margin: 0; margin-bottom: 8px; } .cms-content-header h2 * { vertical-align: middle; } @@ -398,36 +429,54 @@ body.cms { overflow: hidden; } .cms-container .column-hidden { display: none; } +.cms-content-header-top { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; width: 100%; } + +/** ------------------------------------------------------------------ Filters available in the top bar. This is a togglable element that displays a form used for filtering content. ----------------------------------------------------------------- */ +.cms-content-filters { display: none; width: 100%; margin: 0 0 0 -16px; padding: 16px; background-color: #dddfe1; } +.cms-content-filters .cms-search-form { margin-bottom: 0; } + +.cms-content-view, .ui-tabs .cms-panel-padded .cms-content-view.ui-tabs-panel { padding-top: 16px; } + +.cms-content-fields { padding: 0 16px 16px; } + +.cms-tabset-nav-primary { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; vertical-align: middle; } + +/** ------------------------------------------------------------------ Buttons that use font icons ----------------------------------------------------------------- */ +.ss-ui-button.icon-button { vertical-align: middle; margin-right: 2px; padding: .3em; font-size: 1.4em; letter-spacing: -3px; text-shadow: none; line-height: 1em; background-color: transparent; background-image: none; border: 0; } +.ss-ui-button.icon-button:hover, .ss-ui-button.icon-button:active, .ss-ui-button.icon-button:focus { border: 0; box-shadow: none; background-image: none; outline: 0; } +.ss-ui-button.icon-button:hover, .ss-ui-button.icon-button:active { background-color: #b6b9bb; } +.ss-ui-button.icon-button.active { background-color: #b6b9bb; } +.ss-ui-button.icon-button .ui-button-text { display: none; } + /** -------------------------------------------- Tabs -------------------------------------------- */ .ui-tabs { padding: 0; background: none; } .ui-tabs .ui-tabs { position: static; } .ui-tabs .ui-tabs-panel { padding: 24px; background: transparent; border: 0; } .ui-tabs .ui-tabs-panel.cms-edit-form { padding: 0; } -.ui-tabs .ui-tabs-panel.cms-panel-padded { padding: 16px 16px; } .ui-tabs .ui-widget-header { border: 0; background: none; } .ui-tabs .ui-tabs-nav { float: right; margin: 16px 0 -1px 0; padding: 0 12px 0 0; border-bottom: none; } .ui-tabs .ui-tabs-nav ~ .ui-tabs-panel { border-top: 1px solid #c0c0c2; clear: both; } .ui-tabs .ui-tabs-nav li { top: 0; float: left; border-bottom: 0 !important; } -.ui-tabs .ui-tabs-nav li a { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; float: none; font-weight: bold; color: #444; line-height: 32px; padding: 0 16px 0; } +.ui-tabs .ui-tabs-nav li a { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; float: none; font-weight: bold; color: #444444; line-height: 32px; padding: 0 16px 0; } .ui-tabs .ui-tabs-nav li:last-child { margin-right: 0; } .ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: 0; } .ui-tabs .ui-tabs-nav .ui-state-default { border: 1px solid #c0c0c2; background: #ced7dc; } .ui-tabs .ui-tabs-nav .ui-state-default a { color: #5e5e5e; text-shadow: #e6e6e6 0 1px 0; } .ui-tabs .ui-tabs-nav .ui-state-active { padding-bottom: 1px; border: 1px solid #c0c0c2; background-color: #e6eaed; } -.ui-tabs .ui-tabs-nav .ui-state-active a { color: #444; } -.ui-tabs .ui-tabs-nav.ui-state-active { border-color: #808080; } +.ui-tabs .ui-tabs-nav .ui-state-active a { color: #444444; } +.ui-tabs .ui-tabs-nav.ui-state-active { border-color: gray; } .ui-tabs .ui-tabs-nav li.cms-tabset-icon { text-indent: -9999em; } .ui-tabs .ui-tabs-nav li.cms-tabset-icon a { display: block; padding-left: 40px; padding-right: 0; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -304px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -504px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -204px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -104px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -404px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -254px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -454px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -154px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -54px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -354px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -504px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -354px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -454px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -304px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -154px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -204px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -254px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -54px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -404px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -104px no-repeat; } .ui-tabs .cms-panel-padded .ui-tabs-panel { padding: 0; } .ui-tabs .cms-panel-padded .ui-tabs-panel .ui-tabs-panel { padding: 8px 0 0 0; } .ui-tabs .cms-panel-padded .Actions { padding: 0; } @@ -438,8 +487,8 @@ body.cms { overflow: hidden; } .ui-tabs.cms-tabset-primary .ui-tabs-nav li, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary li, .ui-tabs .cms-content-header-tabs .ui-tabs-nav li { margin-right: 0; margin-top: 0; } .ui-tabs.cms-tabset-primary .ui-tabs-nav li a, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary li a, .ui-tabs .cms-content-header-tabs .ui-tabs-nav li a { margin: 0; line-height: 39px; } .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-all, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-top, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-right, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-tr, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-tl, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-all, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-top, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-right, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-tr, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-tl, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-all, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-top, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-right, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-tr, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-tl { border-radius: 0; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-default, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-default, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-default { -moz-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; -webkit-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; background-color: #b0bec7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Q0ZGJlMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d4dbe0), color-stop(100%, #b0bec7)); background-image: -moz-linear-gradient(#d4dbe0, #b0bec7); background-image: -webkit-linear-gradient(#d4dbe0, #b0bec7); background-image: linear-gradient(#d4dbe0, #b0bec7); border-top: none; border-right-color: #8399a7; border-left-color: #ced7dc; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; background: #e6eaed; border-top: none; border-right-color: #b3b3b3; border-left-color: #ECEFF1; z-index: 2; } +.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-default, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-default, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-default { -webkit-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; -moz-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; background-color: #b0bec7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Q0ZGJlMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d4dbe0), color-stop(100%, #b0bec7)); background-image: -webkit-linear-gradient(#d4dbe0, #b0bec7); background-image: -moz-linear-gradient(#d4dbe0, #b0bec7); background-image: -o-linear-gradient(#d4dbe0, #b0bec7); background-image: linear-gradient(#d4dbe0, #b0bec7); border-top: none; border-right-color: #8399a7; border-left-color: #ced7dc; } +.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; background: #e6eaed; border-top: none; border-right-color: #b3b3b3; border-left-color: #eceff1; z-index: 2; } .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active a, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active a, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-active a { border-bottom: none; } .cms-content-header-tabs { float: right; } @@ -450,19 +499,19 @@ body.cms { overflow: hidden; } .cms-content-loading-spinner { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 9999; background: url(../images/spinner.gif) no-repeat 50% 50%; } /** ----------------------------------------------- Loading Screen ------------------------------------------------ */ -.ss-loading-screen { width: 100%; height: 100%; overflow: hidden; position: absolute; z-index: 100000; background: #fff; background: -moz-radial-gradient(50% 50% 180deg, circle cover, #FFFFFF, #EFEFEF, #C7C7C7 100%); background: -webkit-gradient(radial, 50% 50%, 350, 50% 50%, 0, from(#E3E3E3), to(white)); } +.ss-loading-screen { width: 100%; height: 100%; overflow: hidden; position: absolute; z-index: 100000; background: #fff; background: -moz-radial-gradient(50% 50% 180deg, circle cover, white, #efefef, #c7c7c7 100%); background: -webkit-gradient(radial, 50% 50%, 350, 50% 50%, 0, from(#e3e3e3), to(white)); } .ss-loading-screen .loading-logo { width: 100%; height: 100%; overflow: hidden; position: absolute; background: transparent url(../images/silverstripe_logo.png) no-repeat 50% 50%; } .ss-loading-screen p { width: 100%; text-align: center; position: absolute; bottom: 80px; z-index: 100001; } -.ss-loading-screen p span.notice { width: 300px; font-size: 14px; padding: 10px 20px; color: #dc7f00; border: none; background: none; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; display: inline-block; zoom: 1; *display: inline; } +.ss-loading-screen p span.notice { width: 300px; font-size: 14px; padding: 10px 20px; color: #dc7f00; border: none; background: none; -webkit-border-radius: 5px; -moz-border-radius: 5px; -ms-border-radius: 5px; -o-border-radius: 5px; border-radius: 5px; display: inline-block; zoom: 1; *display: inline; } .ss-loading-screen .loading-animation { display: none; position: absolute; left: 50%; margin-left: -21.5px; top: 80%; } /** -------------------------------------------- Actions -------------------------------------------- */ -.cms-content-actions, .cms-preview-controls { margin: 0; padding: 12px 12px; z-index: 999; border-top: 1px solid #cacacc; -moz-box-shadow: 1px 0 0 #ECEFF1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; -webkit-box-shadow: 1px 0 0 #ECEFF1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; box-shadow: 1px 0 0 #ECEFF1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; height: 28px; background-color: #ECEFF1; } +.cms-content-actions, .cms-preview-controls { margin: 0; padding: 12px 12px; z-index: 999; border-top: 1px solid #cacacc; -webkit-box-shadow: 1px 0 0 #eceff1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; -moz-box-shadow: 1px 0 0 #eceff1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; box-shadow: 1px 0 0 #eceff1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; height: 28px; background-color: #eceff1; } /** -------------------------------------------- Messages -------------------------------------------- */ -.message { display: block; clear: both; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #ccc solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -moz-border-radius: 3px 3px 3px 3px; -webkit-border-radius: 3px; border-radius: 3px 3px 3px 3px; } -.message.notice { background-color: #f0f8fc; border-color: #93CDE8; } -.message.warning { background-color: #fefbde; border-color: #E9D104; } +.message { display: block; clear: both; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #ccc solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -webkit-border-radius: 3px 3px 3px 3px; -moz-border-radius: 3px 3px 3px 3px; -ms-border-radius: 3px 3px 3px 3px; -o-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; } +.message.notice { background-color: #f0f8fc; border-color: #93cde8; } +.message.warning { background-color: #fefbde; border-color: #e9d104; } .message.error, .message.bad, .message.required, .message.validation { background-color: #fae8e9; border-color: #e68288; } .message.good { background-color: #eaf6e4; border-color: #72c34b; } .message p { margin: 0; } @@ -470,7 +519,7 @@ body.cms { overflow: hidden; } .cms-edit-form .message { margin: 16px; } .cms-edit-form .ui-tabs-panel .message { margin: 16px 0; } -.notice-item { border: 0; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; font-family: inherit; font-size: inherit; padding: 8px 10px 8px 10px; } +.notice-item { border: 0; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; font-family: inherit; font-size: inherit; padding: 8px 10px 8px 10px; } .notice-item-close { color: #333333; background: url(../images/filter-icons.png) no-repeat 0 -20px; width: 1px; height: 1px; overflow: hidden; padding: 0px 0 20px 15px; } @@ -496,7 +545,7 @@ body.cms { overflow: hidden; } #PageType ul li { float: none; width: 100%; padding: 9px 0 9px 15px; overflow: hidden; border-bottom-width: 2px; border-bottom: 2px groove rgba(255, 255, 255, 0.8); -webkit-border-image: url(../images/textures/bg_fieldset_elements_border.png) 2 stretch stretch; border-image: url(../images/textures/bg_fieldset_elements_border.png) 2 stretch stretch; } #PageType ul li:last-child { border-bottom: none; } #PageType ul li:hover, #PageType ul li.selected { background-color: rgba(255, 255, 102, 0.3); } -#PageType ul li.disabled { color: #aaa; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); opacity: 0.5; } +#PageType ul li.disabled { color: #aaaaaa; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); opacity: 0.5; } #PageType ul li.disabled:hover { background: none; } #PageType ul li input { margin: inherit; } #PageType ul li label { padding-left: 0; padding-bottom: 0; } @@ -506,26 +555,23 @@ body.cms { overflow: hidden; } #PageType ul li .description { font-style: italic; display: inline; clear: none; margin: 0; } /** -------------------------------------------- Content toolbar -------------------------------------------- */ -.cms-content-toolbar { min-height: 29px; display: block; margin: 0 0 12px 0; padding-bottom: 0; border-bottom: 1px solid #d0d3d5; -webkit-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); -o-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); *zoom: 1; /* smaller treedropdown */ } +.cms-content-toolbar { min-height: 29px; display: block; margin: 0 0 12px 0; padding-bottom: 0; border-bottom: 1px solid #d0d3d5; -webkit-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); -o-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); *zoom: 1; } .cms-content-toolbar:after { content: "\0020"; display: block; height: 0; clear: both; overflow: hidden; visibility: hidden; } .cms-content-toolbar .cms-tree-view-modes { float: right; padding-top: 5px; } .cms-content-toolbar .cms-tree-view-modes * { display: inline-block; } -.cms-content-toolbar .cms-tree-view-modes * label { color: #0073C1; } -.cms-content-toolbar .chzn-container-single .chzn-single { height: 26px; line-height: 26px; padding-left: 25px; color: #576468; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2NkY2RjZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e6e6e6), color-stop(100%, #cdcdcd)); background-image: -moz-linear-gradient(#e6e6e6, #cdcdcd); background-image: -webkit-linear-gradient(#e6e6e6, #cdcdcd); background-image: linear-gradient(#e6e6e6, #cdcdcd); font-size: 13px; font-weight: bold; text-shadow: #e6e6e6 0 -1px 1px; box-shadow: none; } -.cms-content-toolbar .chzn-container-single .chzn-single:hover { -moz-box-shadow: 0 0 5px #b3b3b3; -webkit-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ViZWJlYiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2QyZDJkMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ebebeb), color-stop(100%, #d2d2d2)); background-image: -moz-linear-gradient(#ebebeb, #d2d2d2); background-image: -webkit-linear-gradient(#ebebeb, #d2d2d2); background-image: linear-gradient(#ebebeb, #d2d2d2); } -.cms-content-toolbar .chzn-container-single .chzn-single:active { -moz-box-shadow: inset 0 1px 3px #4d4d4d; -webkit-box-shadow: inset 0 1px 3px #4d4d4d; box-shadow: inset 0 1px 3px #4d4d4d; } -.cms-content-toolbar .chzn-container-single .chzn-single span { padding-top: 1px; } -.cms-content-toolbar .chzn-container-single .chzn-single div { border-left: none; width: 100%; } -.cms-content-toolbar .chzn-container-single .chzn-single div b { background: url(../images/sprites-32x32/menu-arrow-deselected-down.png) no-repeat 9px 11px; float: right; width: 24px; } +.cms-content-toolbar .cms-tree-view-modes * label { color: #0073c1; } .cms-content-toolbar .ss-ui-button { margin-bottom: 8px; } +.cms-content-toolbar .cms-actions-buttons-row { clear: both; } +.cms-content-toolbar .cms-actions-tools-row { clear: both; } +.cms-content-toolbar .tool-action { display: none; } -/* -------------------------------------------------------- Content Tools is the sidebar on the left of the main content panel */ -.cms-content-tools { background: #ECEFF1; width: 288px; overflow-y: auto; overflow-x: hidden; z-index: 70; border-right: 1px solid #C0C0C2; -moz-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); -webkit-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); float: left; position: relative; } +/** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. Content Tools is the sidebar on the left of the main content panel */ +.cms-content-tools { background: #eceff1; width: 288px; overflow-y: auto; overflow-x: hidden; z-index: 70; border-right: 1px solid #c0c0c2; -webkit-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); -moz-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); float: left; position: relative; } .cms-content-tools.filter { padding: 0 !important; } .cms-content-tools .cms-panel-header { clear: both; margin: 10px 0 7px; padding-bottom: 2px; line-height: 24px; border-bottom: 1px solid #d0d3d5; -webkit-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); -o-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); } .cms-content-tools .cms-panel-content { width: 272px; padding: 8.8px 8px 0; overflow: auto; height: 100%; } .cms-content-tools .cms-panel-content .Actions .ss-ui-action-constructive { margin-right: 5px; } -.cms-content-tools .cms-content-header { background-color: #748d9d; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzc0OGQ5ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #748d9d)); background-image: -moz-linear-gradient(#b0bec7, #748d9d); background-image: -webkit-linear-gradient(#b0bec7, #748d9d); background-image: linear-gradient(#b0bec7, #748d9d); } +.cms-content-tools .cms-content-header { background-color: #748d9d; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzc0OGQ5ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #748d9d)); background-image: -webkit-linear-gradient(#b0bec7, #748d9d); background-image: -moz-linear-gradient(#b0bec7, #748d9d); background-image: -o-linear-gradient(#b0bec7, #748d9d); background-image: linear-gradient(#b0bec7, #748d9d); } .cms-content-tools .cms-content-header h2 { text-shadow: #5c7382 -1px -1px 0; width: 176px; color: white; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; } .cms-content-tools h3, .cms-content-tools h4, .cms-content-tools h5 { font-weight: bold; line-height: 16px; } .cms-content-tools h3 { font-size: 13px; } @@ -542,38 +588,35 @@ body.cms { overflow: hidden; } .cms-content-tools .fieldgroup .fieldgroup-field .field { margin: 0; padding: 0; } .cms-content-tools table { margin: 8px -4px; } .cms-content-tools table thead th { color: #1f1f1f; font-weight: bold; line-height: 16px; font-size: 11px; padding: 4px; } -.cms-content-tools table tr.active { background-color: #338DC1; color: white; } -.cms-content-tools table tr.active td.first-column { -moz-border-radius: 6px 0 0 6px; -webkit-border-radius: 6px; border-radius: 6px 0 0 6px; } -.cms-content-tools table tr.active td.last-column { -moz-border-radius: 0 6px 6px 0; -webkit-border-radius: 0; border-radius: 0 6px 6px 0; } +.cms-content-tools table tr.active { background-color: #338dc1; color: white; } +.cms-content-tools table tr.active td.first-column { -webkit-border-radius: 6px 0 0 6px; -moz-border-radius: 6px 0 0 6px; -ms-border-radius: 6px 0 0 6px; -o-border-radius: 6px 0 0 6px; border-radius: 6px 0 0 6px; } +.cms-content-tools table tr.active td.last-column { -webkit-border-radius: 0 6px 6px 0; -moz-border-radius: 0 6px 6px 0; -ms-border-radius: 0 6px 6px 0; -o-border-radius: 0 6px 6px 0; border-radius: 0 6px 6px 0; } .cms-content-tools table td { padding: 4px; line-height: 16px; vertical-align: top; } .cms-content-tools td { border-bottom: 1px solid #ced7dc; padding: 7px 2px; font-size: 11px; } /** ------------------------------------------------------------------ * CMS notice, used for filter messages, but generic enough to use elsewhere * ----------------------------------------------------------------- */ -.cms-notice { display: block; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #d0d3d5 solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } +.cms-notice { display: block; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #d0d3d5 solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } /** CMS Batch actions */ +.cms-content-batchactions-button { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; padding: 4px 6px; vertical-align: middle; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -o-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(top, #ffffff, #d9d9d9); border: 1px solid #aaa; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } + .cms-content-batchactions { float: left; position: relative; display: block; } -.cms-content-batchactions .view-mode-batchactions-wrapper { height: 18px; float: left; padding: 4px 6px; border: 1px solid #aaa; margin-bottom: 8px; margin-right: -1px; background-color: #D9D9D9; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(to bottom, #ffffff, #d9d9d9); border-top-left-radius: 4px; border-bottom-left-radius: 4px; } +.cms-content-batchactions .view-mode-batchactions-wrapper { height: 18px; float: left; padding: 4px 6px; border: 1px solid #aaa; margin-bottom: 8px; margin-right: -1px; background-color: #D9D9D9; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -o-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(top, #ffffff, #d9d9d9); border-top-left-radius: 4px; border-bottom-left-radius: 4px; } .cms-content-batchactions .view-mode-batchactions-wrapper input { vertical-align: middle; } .cms-content-batchactions .view-mode-batchactions-wrapper .view-mode-batchactions-label { vertical-align: middle; display: none; } -.cms-content-batchactions .view-mode-batchactions-wrapper fieldset, .cms-content-batchactions .view-mode-batchactions-wrapper .Actions { display: inline-block; } -.cms-content-batchactions .view-mode-batchactions-wrapper #view-mode-batchactions { margin-top: 2px; } -.cms-content-batchactions.inactive .view-mode-batchactions-wrapper { border-radius: 4px; } -.cms-content-batchactions.inactive .view-mode-batchactions-wrapper .view-mode-batchactions-label { display: inline; } -.cms-content-batchactions form > * { display: block; float: left; } -.cms-content-batchactions form.cms-batch-actions { float: left; } -.cms-content-batchactions.inactive form { display: none; } -.cms-content-batchactions .chzn-container-single { display: block; } -.cms-content-batchactions .chzn-container-single .chzn-single { border-radius: 0; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(to bottom, #ffffff, #d9d9d9); } -.cms-content-batchactions .chzn-container-single .chzn-single span { padding-top: 0; } -.cms-content-batchactions .cms-batch-actions .dropdown { margin: 0; } -.cms-content-batchactions .cms-batch-actions .dropdown .chzn-single { padding-left: 8px; /* use default size without icon */ } -.cms-content-batchactions .cms-batch-actions .Actions .ss-ui-button { padding-top: 4px; padding-bottom: 4px; height: 28px; margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; } -.cms-content-batchactions .cms-batch-actions .Actions .ss-ui-button.ui-state-disabled { opacity: 1; color: #ccc; } +.cms-content-batchactions .checkbox { margin-top: 2px; vertical-align: middle; } -#Form_BatchActionsForm select { width: 200px; } +.cms-content-batchactions-dropdown { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; } +.cms-content-tools .cms-content-batchactions-dropdown { width: 100%; } +.cms-content-batchactions-dropdown fieldset { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; width: 200px; } +.cms-content-batchactions-dropdown fieldset .view-mode-batchactions-label { display: inline; } +.cms-content-tools .cms-content-batchactions-dropdown fieldset { width: 82%; } +.cms-content-batchactions-dropdown .dropdown { width: 100%; height: 32px; } +.cms-content-batchactions-dropdown .Actions { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; padding: 0; } +.cms-content-tools .cms-content-batchactions-dropdown .Actions { width: 16%; } +.cms-content-batchactions-dropdown .action { width: 100%; height: 32px; margin-bottom: 0; } /** -------------------------------------------- Preview -------------------------------------------- */ .cms-switch-view a { padding-right: 1em; } @@ -599,7 +642,7 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .memberdatetimeoptionset .description { font-style: normal; } .memberdatetimeoptionset .toggle { font-size: 11px; } -.cms .cms-content { border-right: 1px solid #BBB; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: #ECEFF1; width: 800px; z-index: 40; } +.cms .cms-content { border-right: 1px solid #BBB; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: #eceff1; width: 800px; z-index: 40; } .cms .cms-content-fields { overflow-y: auto; overflow-x: auto; background: #e6eaed; width: 100%; } .cms .cms-content-fields #Root_Main .confirmedpassword { border-bottom: none; box-shadow: none; } .cms .cms-content-fields #Root_Main .customFormat { max-width: 80px; } @@ -614,29 +657,27 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; #ViewerGroups select, #EditorGroups select, #CreateTopLevelGroups select { width: 512px; } /** -------------------------------------------- Panels -------------------------------------------- */ -.cms-panel { overflow: hidden; } -.cms-panel .cms-panel-toggle { -moz-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); -webkit-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); } -.cms-panel .cms-panel-toggle.south { border-top: 1px solid #9eafba; -moz-box-shadow: #bcc8cf 0 1px 0px inset; -webkit-box-shadow: #bcc8cf 0 1px 0px inset; box-shadow: #bcc8cf 0 1px 0px inset; position: absolute; bottom: 0; width: 100%; } +.cms-panel { overflow: hidden; /** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. */ } +.cms-panel .cms-panel-toggle { -webkit-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); } +.cms-panel .cms-panel-toggle.south { border-top: 1px solid #9eafba; -webkit-box-shadow: #bcc8cf 0 1px 0px inset; -moz-box-shadow: #bcc8cf 0 1px 0px inset; box-shadow: #bcc8cf 0 1px 0px inset; position: absolute; bottom: 0; width: 100%; } .cms-panel .cms-panel-toggle a { display: block; text-align: right; padding: 4px 0; width: 100%; text-decoration: none; } .cms-panel .cms-panel-toggle a span { display: inline-block; margin: 0 5px; color: #555d60; font-size: 16px; } .cms-panel .cms-panel-toggle a.toggle-expand { width: 40px; display: none; } -.cms-panel.cms-content-tools .cms-panel-toggle.south { border-top: 1px solid #cfd6db; -moz-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; -webkit-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; } +.cms-panel.cms-content-tools .cms-panel-toggle.south { border-top: 1px solid #cfd6db; -webkit-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; -moz-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; } .cms-panel.collapsed { cursor: pointer; } .cms-panel.collapsed .cms-panel-header *, .cms-panel.collapsed .cms-panel-content, .cms-panel.collapsed .cms-panel-toggle a.toggle-collapse { display: none; } .cms-panel.collapsed .cms-panel-toggle a.toggle-expand { display: block; } .cms-panel .cms-panel-header { width: 100%; } .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed { width: 40px; display: none; } -.cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h2, .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -webkit-transform-origin: bottom right; transform-origin: bottom right; -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -webkit-transform: rotate(270deg); transform: rotate(270deg); } +.cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h2, .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -webkit-transform-origin: bottom right; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -o-transform-origin: bottom right; transform-origin: bottom right; -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); } .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed .cms-panel-header { width: 600px; position: relative; top: 24px; right: 577px; text-align: right; } .cms-panel .cms-panel-content-collapsed { width: 40px; display: none; } -.cms-panel .cms-panel-content-collapsed h2, .cms-panel .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -webkit-transform-origin: bottom right; transform-origin: bottom right; -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -webkit-transform: rotate(270deg); transform: rotate(270deg); } +.cms-panel .cms-panel-content-collapsed h2, .cms-panel .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -webkit-transform-origin: bottom right; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -o-transform-origin: bottom right; transform-origin: bottom right; -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); } .cms-panel .cms-panel-content-collapsed .cms-panel-header { width: 600px; position: relative; right: 577px; text-align: right; border-bottom: none; box-shadow: none; } .cms-panel .child-flyout-indicator { width: 0; height: 0; border-right: 3px dashed #1f1f1f; border-top: 3px solid transparent; border-left: 3px solid transparent; border-bottom: 3px dashed #1f1f1f; position: absolute; right: 1px; margin-top: -8px; display: none; /* To be shown by javascript, see LeftAndMain.Panel.js */ } .cms-panel .collapsed-flyout { display: block !important; left: 41px; margin-top: -40px; position: fixed; width: 191px; } .cms-panel .collapsed-flyout li a span { display: block !important; } -.cms .cms-panel-padded { padding: 16px 16px; margin: 0; } - /** ------------------------------------------------------------------ * Dialog * @@ -649,12 +690,12 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .cms .ui-dialog .ss-ui-dialog.ui-dialog-content { padding-top: 0px; } -.ui-dialog { background: url("../images/textures/bg_cms_main_content.png") repeat left top #F0F3F4; background-clip: content-box; border: 1px solid #666 !important; -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; overflow: visible; padding: 0; -moz-box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); -webkit-box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); } -.ui-dialog .ui-dialog-titlebar.ui-widget-header { font-size: 14px; padding: 0; border: none; background-color: transparent; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; -moz-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; -webkit-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; } +.ui-dialog { background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; background-clip: content-box; border: 1px solid #666 !important; -webkit-border-radius: 8px; -moz-border-radius: 8px; -ms-border-radius: 8px; -o-border-radius: 8px; border-radius: 8px; overflow: visible; padding: 0; -webkit-box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); } +.ui-dialog .ui-dialog-titlebar.ui-widget-header { font-size: 14px; padding: 0; border: none; background-color: transparent; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; -webkit-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; -moz-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; } .ui-dialog .ui-dialog-titlebar.ui-widget-header .ui-dialog-title { position: absolute; } -.ui-dialog .ui-dialog-content { -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; overflow: auto; } +.ui-dialog .ui-dialog-content { -webkit-border-radius: 8px; -moz-border-radius: 8px; -ms-border-radius: 8px; -o-border-radius: 8px; border-radius: 8px; overflow: auto; } .ui-dialog .ui-dialog-content.loading { background-image: url(../images/spinner.gif); background-position: 50% 50%; background-repeat: no-repeat; } -.ui-dialog .cms-dialog-content { background: url("../images/textures/bg_cms_main_content.png") repeat left top #F0F3F4; padding-bottom: 8px; padding-top: 0px; } +.ui-dialog .cms-dialog-content { background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; padding-bottom: 8px; padding-top: 0px; } .ui-dialog .cms-dialog-content .Actions { overflow: auto; margin: 8px 0; padding-bottom: 8px; float: right; } .ui-dialog .cms-dialog-content .ui-tabs { position: static; } .ui-dialog .cms-dialog-content .ui-tabs .ui-tabs-nav { position: absolute; top: 0; right: 40px; } @@ -662,7 +703,7 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .ui-dialog .cms-dialog-content .clear { clear: both; } .ui-dialog.loading { background-image: url(../images/spinner.gif); background-position: 50% 50%; background-repeat: no-repeat; } -body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_main_content.png") repeat left top #F0F3F4; position: relative; } +body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; position: relative; } /** -------------------------------------------- "Insert X" forms -------------------------------------------- */ .htmleditorfield-dialog.ui-dialog-content { padding: 0; position: relative; } @@ -682,9 +723,9 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai .htmleditorfield-dialog .ss-insert-media, .htmleditorfield-dialog .Actions, .htmleditorfield-dialog .ss-insert-link { padding: 8px 16px; } .htmleditorfield-dialog .ss-insert-media .ui-tabs-panel, .htmleditorfield-dialog .Actions .ui-tabs-panel, .htmleditorfield-dialog .ss-insert-link .ui-tabs-panel { padding: 0; } .htmleditorfield-dialog .details .file-url { display: block; width: 300px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; } -.htmleditorfield-dialog .details .cms-file-info .field { border: none; -moz-box-shadow: 0 0 0 transparent; -webkit-box-shadow: 0 0 0 transparent; box-shadow: 0 0 0 transparent; } -.htmleditorfield-dialog .details .field { border-bottom: 1px solid rgba(201, 205, 206, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); } -.htmleditorfield-dialog .details .field.last { border-bottom: none; -moz-box-shadow: 0 0 0 transparent; -webkit-box-shadow: 0 0 0 transparent; box-shadow: 0 0 0 transparent; margin-bottom: 0; } +.htmleditorfield-dialog .details .cms-file-info .field { border: none; -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0); box-shadow: 0 0 0 rgba(0, 0, 0, 0); } +.htmleditorfield-dialog .details .field { border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); } +.htmleditorfield-dialog .details .field.last { border-bottom: none; -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0); box-shadow: 0 0 0 rgba(0, 0, 0, 0); margin-bottom: 0; } .htmleditorfield-dialog .CompositeField .text select { margin: 5px 0 0 0; } .htmleditorfield-linkform .step2 { margin-bottom: 16px; } @@ -698,7 +739,7 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield h4 { float: left; margin-top: 4px; margin-bottom: 0; } .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield .middleColumn { margin-top: 16px; margin-left: 184px; min-width: 0; clear: none; } .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield .field.treedropdown { border-bottom: 0; padding: 0; } -.htmleditorfield-mediaform .ss-assetuploadfield .ss-uploadfield-editandorganize .ss-uploadfield-files .ss-uploadfield-item-info { background-color: #9e9e9e; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllOWU5ZSIvPjxzdG9wIG9mZnNldD0iOCUiIHN0b3AtY29sb3I9IiM5ZDlkOWQiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzg3ODc4NyIvPjxzdG9wIG9mZnNldD0iNTQlIiBzdG9wLWNvbG9yPSIjODY4Njg2Ii8+PHN0b3Agb2Zmc2V0PSI5NiUiIHN0b3AtY29sb3I9IiM2YjZiNmIiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM2YzZjNmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #9e9e9e), color-stop(8%, #9d9d9d), color-stop(50%, #878787), color-stop(54%, #868686), color-stop(96%, #6b6b6b), color-stop(100%, #6c6c6c)); background-image: -moz-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: -webkit-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: linear-gradient(to bottom, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); } +.htmleditorfield-mediaform .ss-assetuploadfield .ss-uploadfield-editandorganize .ss-uploadfield-files .ss-uploadfield-item-info { background-color: #9e9e9e; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllOWU5ZSIvPjxzdG9wIG9mZnNldD0iOCUiIHN0b3AtY29sb3I9IiM5ZDlkOWQiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzg3ODc4NyIvPjxzdG9wIG9mZnNldD0iNTQlIiBzdG9wLWNvbG9yPSIjODY4Njg2Ii8+PHN0b3Agb2Zmc2V0PSI5NiUiIHN0b3AtY29sb3I9IiM2YjZiNmIiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM2YzZjNmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #9e9e9e), color-stop(8%, #9d9d9d), color-stop(50%, #878787), color-stop(54%, #868686), color-stop(96%, #6b6b6b), color-stop(100%, #6c6c6c)); background-image: -webkit-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: -moz-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: -o-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); } /** -------------------------------------------- Search forms (used in AssetAdmin, ModelAdmin, etc) -------------------------------------------- */ .cms-search-form { margin-bottom: 16px; } @@ -708,11 +749,11 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai /** -------------------------------------------- Step labels -------------------------------------------- */ .step-label > * { display: inline-block; vertical-align: top; } .step-label .flyout { height: 18px; font-size: 14px; font-weight: bold; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; background-color: #667980; padding: 4px 3px 4px 6px; text-align: center; text-shadow: none; color: #fff; } -.step-label .arrow { height: 26px; width: 10px; background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -862px no-repeat; margin-right: 4px; } +.step-label .arrow { height: 26px; width: 10px; background: url('../images/sprites-32x32-s7af51a6313.png') 0 -216px no-repeat; margin-right: 4px; } .step-label .title { height: 18px; padding: 4px; } /** -------------------------------------------- Item Edit Form -------------------------------------------- */ -.cms-file-info { overflow: auto; border-bottom: 1px solid rgba(201, 205, 206, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); margin-bottom: 8px; } +.cms-file-info { overflow: auto; border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); margin-bottom: 8px; } .cms-file-info .cms-file-info-preview { float: left; width: 176px; margin-right: 8px; } .cms-file-info .cms-file-info-preview img { max-width: 176px; max-height: 128px; } .cms-file-info .cms-file-info-data { float: left; width: 55%; } @@ -755,10 +796,10 @@ form.import-form label.left { width: 250px; } /** -------------------------------------------- Buttons for FileUpload -------------------------------------------- */ .ss-uploadfield-item-edit-all .ui-button-text { padding-right: 0; } -.toggle-details-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -830px no-repeat; } -.ss-uploadfield-item-edit-all .toggle-details-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -798px no-repeat; display: inline-block; width: 8px; height: 8px; padding-left: 5px; } -.toggle-details-icon.opened { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -846px no-repeat; } -.ss-uploadfield-item-edit-all .toggle-details-icon.opened { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -814px no-repeat; } +.toggle-details-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -406px no-repeat; } +.ss-uploadfield-item-edit-all .toggle-details-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -348px no-repeat; display: inline-block; width: 8px; height: 8px; padding-left: 5px; } +.toggle-details-icon.opened { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1120px no-repeat; } +.ss-uploadfield-item-edit-all .toggle-details-icon.opened { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -332px no-repeat; } /** -------------------------------------------- Hide preview toggle link by default. May be shown in IE7 stylesheet and forced to show with js if needed -------------------------------------------- */ .cms .Actions > .cms-preview-toggle-link, .cms .cms-navigator > .cms-preview-toggle-link { display: none; } @@ -800,7 +841,7 @@ form.import-form label.left { width: 250px; } .cms .jstree-themeroller .jstree-no-icon, .TreeDropdownField .treedropdownfield-panel .jstree-themeroller .jstree-no-icon { display: none; } .cms #jstree-marker, .TreeDropdownField .treedropdownfield-panel #jstree-marker { padding: 0; margin: 0; overflow: hidden; position: absolute; top: -30px; background-repeat: no-repeat; display: none; line-height: 10px; font-size: 12px; height: 12px; width: 8px; z-index: 10001; background-color: transparent; text-shadow: 1px 1px 1px white; color: black; } .cms #jstree-marker-line, .TreeDropdownField .treedropdownfield-panel #jstree-marker-line { padding: 0; margin: 0; overflow: hidden; position: absolute; top: -30px; background-repeat: no-repeat; display: none; line-height: 0%; font-size: 1px; height: 1px; width: 100px; z-index: 10000; background-color: #456c43; cursor: pointer; border: 1px solid #eeeeee; border-left: 0; -moz-box-shadow: 0px 0px 2px #666; -webkit-box-shadow: 0px 0px 2px #666; box-shadow: 0px 0px 2px #666; -moz-border-radius: 1px; border-radius: 1px; -webkit-border-radius: 1px; } -.cms #vakata-contextmenu, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu { display: block; visibility: hidden; left: 0; top: -200px; position: absolute; margin: 0; padding: 0; min-width: 180px; background: #FFF; border: 1px solid silver; z-index: 10000; *width: 180px; -moz-box-shadow: 0 0 10px #CCC; -webkit-box-shadow: 0 0 10px #CCC; box-shadow: 0 0 10px #CCC; } +.cms #vakata-contextmenu, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu { display: block; visibility: hidden; left: 0; top: -200px; position: absolute; margin: 0; padding: 0; min-width: 180px; background: #FFF; border: 1px solid silver; z-index: 10000; *width: 180px; -webkit-box-shadow: 0 0 10px #cccccc; -moz-box-shadow: 0 0 10px #cccccc; box-shadow: 0 0 10px #cccccc; } .cms #vakata-contextmenu::before, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu::before { content: ""; display: block; /* reduce the damage in FF3.0 */ position: absolute; top: -10px; left: 24px; width: 0; border-width: 0 6px 10px 6px; border-color: #FFF transparent; border-style: solid; z-index: 10000; } .cms #vakata-contextmenu::after, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu::after { content: ""; display: block; /* reduce the damage in FF3.0 */ position: absolute; top: -11px; left: 23px; width: 0; border-width: 0 7px 11px 7px; border-color: #CCC transparent; border-style: solid; } .cms #vakata-contextmenu ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu ul { min-width: 180px; *width: 180px; } @@ -808,13 +849,13 @@ form.import-form label.left { width: 250px; } .cms #vakata-contextmenu li, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li { line-height: 20px; min-height: 23px; position: relative; padding: 0px; } .cms #vakata-contextmenu li:last-child, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li:last-child { margin-bottom: 1px; } .cms #vakata-contextmenu li a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a { padding: 1px 10px; line-height: 23px; display: block; text-decoration: none; margin: 1px 1px 0 1px; border: 0; } -.cms #vakata-contextmenu li a:hover, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a:hover { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(to bottom, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } +.cms #vakata-contextmenu li a:hover, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a:hover { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } .cms #vakata-contextmenu li ins, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ins { float: left; width: 0; height: 0; text-decoration: none; margin-right: 2px; } .cms #vakata-contextmenu li .jstree-pageicon, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li .jstree-pageicon { margin-top: 3px; margin-right: 5px; } -.cms #vakata-contextmenu li.vakata-hover > a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li.vakata-hover > a { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(to bottom, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } +.cms #vakata-contextmenu li.vakata-hover > a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li.vakata-hover > a { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } .cms #vakata-contextmenu .right, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu .right { right: 100%; left: auto; } .cms #vakata-contextmenu .bottom, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu .bottom { bottom: -1px; top: auto; } -.cms #vakata-contextmenu li ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul { display: none; position: absolute; top: -2px; left: 100%; background: #FFF; border: 1px solid silver; -moz-box-shadow: 0 0 10px #CCC; -webkit-box-shadow: 0 0 10px #CCC; box-shadow: 0 0 10px #CCC; } +.cms #vakata-contextmenu li ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul { display: none; position: absolute; top: -2px; left: 100%; background: #FFF; border: 1px solid silver; -webkit-box-shadow: 0 0 10px #cccccc; -moz-box-shadow: 0 0 10px #cccccc; box-shadow: 0 0 10px #cccccc; } .cms #vakata-contextmenu li ul.col-2, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul.col-2 { width: 360px; } .cms #vakata-contextmenu li ul.col-2 li, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul.col-2 li { width: 50%; } .cms #vakata-contextmenu li ul.col-3, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul.col-3 { width: 540px; } @@ -836,21 +877,21 @@ form.import-form label.left { width: 250px; } .tree-holder.jstree li.Root > a .jstree-icon, .cms-tree.jstree li.Root > a .jstree-icon { background-position: -56px -36px; } .tree-holder.jstree li.status-deletedonlive > a .text, .tree-holder.jstree li.status-deletedonlive > a:link .text, .tree-holder.jstree li.status-archived > a .text, .tree-holder.jstree li.status-archived > a:link .text, .cms-tree.jstree li.status-deletedonlive > a .text, .cms-tree.jstree li.status-deletedonlive > a:link .text, .cms-tree.jstree li.status-archived > a .text, .cms-tree.jstree li.status-archived > a:link .text { text-decoration: line-through; } .tree-holder.jstree li.jstree-checked > a, .tree-holder.jstree li.jstree-checked > a:link, .cms-tree.jstree li.jstree-checked > a, .cms-tree.jstree li.jstree-checked > a:link { background-color: #efe999; } -.tree-holder.jstree li.disabled > a, .tree-holder.jstree li.disabled > a:link, .tree-holder.jstree li.edit-disabled > a, .tree-holder.jstree li.edit-disabled > a:link, .cms-tree.jstree li.disabled > a, .cms-tree.jstree li.disabled > a:link, .cms-tree.jstree li.edit-disabled > a, .cms-tree.jstree li.edit-disabled > a:link { color: #aaa; background-color: transparent; cursor: default; } +.tree-holder.jstree li.disabled > a, .tree-holder.jstree li.disabled > a:link, .tree-holder.jstree li.edit-disabled > a, .tree-holder.jstree li.edit-disabled > a:link, .cms-tree.jstree li.disabled > a, .cms-tree.jstree li.disabled > a:link, .cms-tree.jstree li.edit-disabled > a, .cms-tree.jstree li.edit-disabled > a:link { color: #aaaaaa; background-color: transparent; cursor: default; } .tree-holder.jstree li.disabled > a > .jstree-checkbox, .tree-holder.jstree li.disabled > a:link > .jstree-checkbox, .tree-holder.jstree li.edit-disabled > a > .jstree-checkbox, .tree-holder.jstree li.edit-disabled > a:link > .jstree-checkbox, .cms-tree.jstree li.disabled > a > .jstree-checkbox, .cms-tree.jstree li.disabled > a:link > .jstree-checkbox, .cms-tree.jstree li.edit-disabled > a > .jstree-checkbox, .cms-tree.jstree li.edit-disabled > a:link > .jstree-checkbox { background-position: -57px -54px; } -.tree-holder.jstree li.readonly, .cms-tree.jstree li.readonly { color: #aaa; padding-left: 18px; } +.tree-holder.jstree li.readonly, .cms-tree.jstree li.readonly { color: #aaaaaa; padding-left: 18px; } .tree-holder.jstree li.readonly a, .tree-holder.jstree li.readonly a:link, .cms-tree.jstree li.readonly a, .cms-tree.jstree li.readonly a:link { margin: 0; padding: 0; } .tree-holder.jstree li.readonly .jstree-icon, .cms-tree.jstree li.readonly .jstree-icon { display: none; } -.tree-holder.jstree a, .tree-holder.jstree a:link, .cms-tree.jstree a, .cms-tree.jstree a:link { color: #0073C1; padding: 3px 6px 3px 3px; border: none; display: inline-block; margin-right: 5px; } +.tree-holder.jstree a, .tree-holder.jstree a:link, .cms-tree.jstree a, .cms-tree.jstree a:link { color: #0073c1; padding: 3px 6px 3px 3px; border: none; display: inline-block; margin-right: 5px; } .tree-holder.jstree ins, .cms-tree.jstree ins { background-color: transparent; background-image: url(../images/sitetree_ss_default_icons.png); } -.tree-holder.jstree span.badge, .cms-tree.jstree span.badge { clear: both; text-transform: uppercase; text-shadow: none; display: inline-block; position: relative; padding: 3px 3px 1px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-top: -1px; -moz-border-radius: 2px / 2px; -webkit-border-radius: 2px 2px; border-radius: 2px / 2px; } -.tree-holder.jstree span.comment-count, .cms-tree.jstree span.comment-count { clear: both; position: relative; text-transform: uppercase; display: inline-block; overflow: visible; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-right: 6px; -moz-border-radius: 2px / 2px; -webkit-border-radius: 2px 2px; border-radius: 2px / 2px; color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } +.tree-holder.jstree span.badge, .cms-tree.jstree span.badge { clear: both; text-transform: uppercase; text-shadow: none; display: inline-block; position: relative; padding: 3px 3px 1px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-top: -1px; -webkit-border-radius: 2px 2px; -moz-border-radius: 2px / 2px; border-radius: 2px / 2px; } +.tree-holder.jstree span.comment-count, .cms-tree.jstree span.comment-count { clear: both; position: relative; text-transform: uppercase; display: inline-block; overflow: visible; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-right: 6px; -webkit-border-radius: 2px 2px; -moz-border-radius: 2px / 2px; border-radius: 2px / 2px; color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } .tree-holder.jstree span.comment-count:before, .cms-tree.jstree span.comment-count:before { content: ""; position: absolute; border-style: solid; display: block; width: 0; bottom: -4px; /* value = - border-top-width - border-bottom-width */ left: 3px; /* controls horizontal position */ border-width: 4px 4px 0; border-color: #C9B800 transparent; } .tree-holder.jstree span.comment-count:after, .cms-tree.jstree span.comment-count:after { content: ""; position: absolute; border-style: solid; /* reduce the damage in FF3.0 */ display: block; width: 0; bottom: -3px; /* value = - border-top-width - border-bottom-width */ left: 4px; /* value = (:before left) + (:before border-left) - (:after border-left) */ border-width: 3px 3px 0; border-color: #FFF0BC transparent; } .tree-holder.jstree .jstree-hovered, .cms-tree.jstree .jstree-hovered { text-shadow: none; text-decoration: none; } .tree-holder.jstree .jstree-closed > ins, .cms-tree.jstree .jstree-closed > ins { background-position: 2px -1px; } .tree-holder.jstree .jstree-open > ins, .cms-tree.jstree .jstree-open > ins { background-position: -18px -1px; } -.tree-holder.filtered-list li:not(.filtered-item) > a, .cms-tree.filtered-list li:not(.filtered-item) > a { color: #aaa; } +.tree-holder.filtered-list li:not(.filtered-item) > a, .cms-tree.filtered-list li:not(.filtered-item) > a { color: #aaaaaa; } .cms-tree.jstree .jstree-no-checkboxes li a { padding-left: 12px; } .cms-tree.jstree .jstree-no-checkboxes li .jstree-hovered, .cms-tree.jstree .jstree-no-checkboxes li .jstree-clicked, .cms-tree.jstree .jstree-no-checkboxes li a:focus { padding-left: 0; } @@ -858,10 +899,10 @@ form.import-form label.left { width: 250px; } .jstree-default a .jstree-icon, .jstree-default-rtl a .jstree-icon, .jstree-classic a .jstree-icon, .jstree-apple a .jstree-icon { background-position: -60px -19px; } -/* ensure status is visible in sidebar */ +/** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. Ensure status is visible in sidebar */ .cms-content-tools .cms-tree.jstree li { min-width: 159px; } .cms-content-tools .cms-tree.jstree a { overflow: hidden; display: block; position: relative; } -.cms-content-tools .cms-tree.jstree span.badge { position: absolute; top: 0; right: 0; padding: 7px 9px 6px 5px; margin: 0; max-width: 40%; -moz-transition: max-width 0.75s linear; -o-transition: max-width 0.75s linear; -webkit-transition: max-width 0.75s linear; transition: max-width 0.75s linear; } +.cms-content-tools .cms-tree.jstree span.badge { position: absolute; top: 0; right: 0; padding: 7px 9px 6px 5px; margin: 0; max-width: 40%; -webkit-transition: max-width 0.75s linear; -moz-transition: max-width 0.75s linear; -o-transition: max-width 0.75s linear; transition: max-width 0.75s linear; } .cms-content-tools .cms-tree.jstree span.badge:hover { max-width: 150px; } a .jstree-pageicon { float: left; margin-right: 4px; position: relative; } @@ -873,41 +914,41 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } /* tree status icons and labels */ .cms-tree.jstree .status-modified > a .jstree-pageicon:before, .cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before, .cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before, .cms-tree.jstree .status-archived > a .jstree-pageicon:before, .cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before, .cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { content: ""; display: block; width: 5px; height: 5px; position: absolute; bottom: 0; right: 0; background: #fce2d0; border: 1px solid #ff9344; border-radius: 100px; box-shadow: 0px 0px 0px 1px #fff; } -.jstree .status-modified > .jstree-hovered, .jstree .status-modified > .jstree-clicked, .cms-tree.jstree span.badge.status-modified, .cms-tree.jstree .status-modified > a .jstree-pageicon:before { background-color: #FFF4ED; border-color: #EE6214; } +.jstree .status-modified > .jstree-hovered, .jstree .status-modified > .jstree-clicked, .cms-tree.jstree span.badge.status-modified, .cms-tree.jstree .status-modified > a .jstree-pageicon:before { background-color: #fff4ed; border-color: #ee6214; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-modified { box-shadow: 0px 0px 6px 2px #FFF4ED; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-modified { box-shadow: 0px 0px 6px 2px #fff4ed; } -.cms-tree.jstree span.badge.status-modified { color: #EE6214; } +.cms-tree.jstree span.badge.status-modified { color: #ee6214; } -.jstree .status-addedtodraft > .jstree-hovered, .jstree .status-addedtodraft > .jstree-clicked, .cms-tree.jstree span.badge.status-addedtodraft, .cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before { background-color: #FFF4ED; border-color: #EE6214; } +.jstree .status-addedtodraft > .jstree-hovered, .jstree .status-addedtodraft > .jstree-clicked, .cms-tree.jstree span.badge.status-addedtodraft, .cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before { background-color: #fff4ed; border-color: #ee6214; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-addedtodraft { box-shadow: 0px 0px 6px 2px #FFF4ED; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-addedtodraft { box-shadow: 0px 0px 6px 2px #fff4ed; } -.cms-tree.jstree span.badge.status-addedtodraft { color: #EE6214; } +.cms-tree.jstree span.badge.status-addedtodraft { color: #ee6214; } -.jstree .status-deletedonlive > .jstree-hovered, .jstree .status-deletedonlive > .jstree-clicked, .cms-tree.jstree span.badge.status-deletedonlive, .cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before { background-color: #F5F5F5; border-color: #5F7688; } +.jstree .status-deletedonlive > .jstree-hovered, .jstree .status-deletedonlive > .jstree-clicked, .cms-tree.jstree span.badge.status-deletedonlive, .cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before { background-color: whitesmoke; border-color: #5f7688; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-deletedonlive { box-shadow: 0px 0px 6px 2px #F5F5F5; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-deletedonlive { box-shadow: 0px 0px 6px 2px whitesmoke; } -.cms-tree.jstree span.badge.status-deletedonlive { color: #5F7688; } +.cms-tree.jstree span.badge.status-deletedonlive { color: #5f7688; } -.jstree .status-archived > .jstree-hovered, .jstree .status-archived > .jstree-clicked, .cms-tree.jstree span.badge.status-archived, .cms-tree.jstree .status-archived > a .jstree-pageicon:before { background-color: #F5F5F5; border-color: #5F7688; } +.jstree .status-archived > .jstree-hovered, .jstree .status-archived > .jstree-clicked, .cms-tree.jstree span.badge.status-archived, .cms-tree.jstree .status-archived > a .jstree-pageicon:before { background-color: whitesmoke; border-color: #5f7688; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-archived { box-shadow: 0px 0px 6px 2px #F5F5F5; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-archived { box-shadow: 0px 0px 6px 2px whitesmoke; } -.cms-tree.jstree span.badge.status-archived { color: #5F7688; } +.cms-tree.jstree span.badge.status-archived { color: #5f7688; } -.jstree .status-removedfromdraft > .jstree-hovered, .jstree .status-removedfromdraft > .jstree-clicked, .cms-tree.jstree span.badge.status-removedfromdraft, .cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before { background-color: #F5F5F5; border-color: #5F7688; } +.jstree .status-removedfromdraft > .jstree-hovered, .jstree .status-removedfromdraft > .jstree-clicked, .cms-tree.jstree span.badge.status-removedfromdraft, .cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before { background-color: whitesmoke; border-color: #5f7688; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-removedfromdraft { box-shadow: 0px 0px 6px 2px #F5F5F5; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-removedfromdraft { box-shadow: 0px 0px 6px 2px whitesmoke; } -.cms-tree.jstree span.badge.status-removedfromdraft { color: #5F7688; } +.cms-tree.jstree span.badge.status-removedfromdraft { color: #5f7688; } -.jstree .status-workflow-approval > .jstree-hovered, .jstree .status-workflow-approval > .jstree-clicked, .cms-tree.jstree span.badge.status-workflow-approval, .cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { background-color: #E8FAFF; border-color: #0070B4; } +.jstree .status-workflow-approval > .jstree-hovered, .jstree .status-workflow-approval > .jstree-clicked, .cms-tree.jstree span.badge.status-workflow-approval, .cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { background-color: #e8faff; border-color: #0070b4; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-workflow-approval { box-shadow: 0px 0px 6px 2px #E8FAFF; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-workflow-approval { box-shadow: 0px 0px 6px 2px #e8faff; } -.cms-tree.jstree span.badge.status-workflow-approval { color: #0070B4; } +.cms-tree.jstree span.badge.status-workflow-approval { color: #0070b4; } .cms-tree { visibility: hidden; } .cms-tree.multiple li > a > .jstree-icon { display: none; } @@ -918,9 +959,9 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-tree a.jstree-loading .jstree-pageicon { background: url(../images/throbber.gif) top left no-repeat; } /** Styles for the left hand side menu and header for the admin panels. Take into consideration CSS selector performance. @package framework @subpackage admin */ -.cms-logo-header { position: relative !important; top: auto !important; height: auto !important; padding: 0 8px; line-height: 24px; background-color: #22385b; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMwNGU4MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE0MjEzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #304e80), color-stop(100%, #142136)); background-image: -moz-linear-gradient(#304e80, #142136); background-image: -webkit-linear-gradient(#304e80, #142136); background-image: linear-gradient(#304e80, #142136); } +.cms-logo-header { position: relative !important; top: auto !important; height: auto !important; padding: 0 8px; line-height: 24px; background-color: #22385b; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMwNGU4MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE0MjEzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #304e80), color-stop(100%, #142136)); background-image: -webkit-linear-gradient(#304e80, #142136); background-image: -moz-linear-gradient(#304e80, #142136); background-image: -o-linear-gradient(#304e80, #142136); background-image: linear-gradient(#304e80, #142136); } .cms-logo-header span { color: white; display: block; padding-left: 26px; } -.cms-logo-header span a { color: #3EBAE0; display: inline; } +.cms-logo-header span a { color: #3ebae0; display: inline; } .cms-logo { border-bottom: 1px solid #1a2a45; overflow: hidden; padding: 10px 0 9px; /* should come to 40px with border bottom and line-height */ position: relative; vertical-align: middle; font-size: 12px; min-height: 20px; } .collapsed .cms-logo { padding: 0; } @@ -929,10 +970,10 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-logo span { font-weight: bold; font-size: 12px; line-height: 16px; padding: 2px 0; margin-left: 30px; } .cms-login-status { border-top: 1px solid #19435c; padding: 8px 0 9.6px; line-height: 16px; font-size: 11px; } -.cms-login-status .logout-link { display: inline-block; height: 16px; width: 16px; float: left; margin: 0 8px 0 5px; background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -772px no-repeat; text-indent: -9999em; opacity: 0.9; } +.cms-login-status .logout-link { display: inline-block; height: 16px; width: 16px; float: left; margin: 0 8px 0 5px; background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1094px no-repeat; text-indent: -9999em; opacity: 0.9; } .cms-login-status .logout-link:hover, .cms-login-status .logout-link:focus { opacity: 1; } -.cms-menu { z-index: 80; background: #b0bec7; width: 160px; -moz-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; -webkit-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; } +.cms-menu { z-index: 80; background: #b0bec7; width: 160px; -webkit-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; -moz-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; } .cms-menu a { text-decoration: none; } .cms-menu .cms-panel-content { width: 160px; overflow-x: hidden; overflow-y: auto; position: relative !important; top: auto !important; left: auto !important; } .cms-menu.collapsed { width: 40px !important; cursor: auto; z-index: 1000; } @@ -949,25 +990,25 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-menu.collapsed .ss-ui-button.sticky-toggle { width: 50%; } .cms-menu .cms-panel-toggle a, .cms-menu .cms-panel-toggle a.toggle-expand { float: right; width: 20px; } .cms-menu .ss-ui-button.sticky-toggle { float: left; width: 24px; height: 24px; margin: 0; text-indent: -999em; background-color: transparent; background-image: url(../images/sticky-toggle-off.png); background-repeat: no-repeat; background-position: 3px; border: 0; } -.cms-menu .ss-ui-button.sticky-toggle:hover { -moz-box-shadow: 0 0 0; -webkit-box-shadow: 0 0 0; box-shadow: 0 0 0; } +.cms-menu .ss-ui-button.sticky-toggle:hover { -webkit-box-shadow: 0 0 0; -moz-box-shadow: 0 0 0; box-shadow: 0 0 0; } .cms-menu .ss-ui-button.sticky-toggle.active { background-image: url(../images/sticky-toggle-on.png); } .cms-menu .ss-ui-button.sticky-toggle .ui-button-text { padding: 0; } .cms-menu .ss-ui-button.sticky-toggle:hover + .sticky-status-indicator { display: block; padding: 5px 6px 0; } .cms-menu .sticky-status-indicator { display: none; position: absolute; top: -22px; left: 2px; font-size: 9px; color: #555d60; text-transform: uppercase; background-color: #b0bec7; } .cms-menu-list li { /* Style applied to the menu flyout only when the collapsed setting */ } -.cms-menu-list li a { display: block; line-height: 16px; min-height: 16px; font-size: 12px; text-shadow: #bfcad2 1px 1px 0; color: #1f1f1f; padding: 11px 5px 11px 8px; background-color: #b0bec7; cursor: pointer; position: relative; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #92a5b2)); background-image: -moz-linear-gradient(#b0bec7, #92a5b2); background-image: -webkit-linear-gradient(#b0bec7, #92a5b2); background-image: linear-gradient(#b0bec7, #92a5b2); border-top: 1px solid #c2cdd4; border-bottom: 1px solid #748d9d; } -.cms-menu-list li a:hover { text-decoration: none; background-color: #b6c3cb; border-bottom: 1px solid #8399a7; color: #2c2c2c; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JmY2FkMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bfcad2), color-stop(100%, #b0bec7)); background-image: -moz-linear-gradient(#bfcad2, #b0bec7); background-image: -webkit-linear-gradient(#bfcad2, #b0bec7); background-image: linear-gradient(#bfcad2, #b0bec7); } -.cms-menu-list li a:focus, .cms-menu-list li a:active { border-top: 1px solid #a1b2bc; text-decoration: none; background-color: #a1b2bc; color: #393939; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ExYjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #92a5b2), color-stop(100%, #a1b2bc)); background-image: -moz-linear-gradient(#92a5b2, #a1b2bc); background-image: -webkit-linear-gradient(#92a5b2, #a1b2bc); background-image: linear-gradient(#92a5b2, #a1b2bc); } +.cms-menu-list li a { display: block; line-height: 16px; min-height: 16px; font-size: 12px; text-shadow: #bfcad2 1px 1px 0; color: #1f1f1f; padding: 11px 5px 11px 8px; background-color: #b0bec7; cursor: pointer; position: relative; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #92a5b2)); background-image: -webkit-linear-gradient(#b0bec7, #92a5b2); background-image: -moz-linear-gradient(#b0bec7, #92a5b2); background-image: -o-linear-gradient(#b0bec7, #92a5b2); background-image: linear-gradient(#b0bec7, #92a5b2); border-top: 1px solid #c2cdd4; border-bottom: 1px solid #748d9d; } +.cms-menu-list li a:hover { text-decoration: none; background-color: #b6c3cb; border-bottom: 1px solid #8399a7; color: #2c2c2c; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JmY2FkMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bfcad2), color-stop(100%, #b0bec7)); background-image: -webkit-linear-gradient(#bfcad2, #b0bec7); background-image: -moz-linear-gradient(#bfcad2, #b0bec7); background-image: -o-linear-gradient(#bfcad2, #b0bec7); background-image: linear-gradient(#bfcad2, #b0bec7); } +.cms-menu-list li a:focus, .cms-menu-list li a:active { border-top: 1px solid #a1b2bc; text-decoration: none; background-color: #a1b2bc; color: #393939; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ExYjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #92a5b2), color-stop(100%, #a1b2bc)); background-image: -webkit-linear-gradient(#92a5b2, #a1b2bc); background-image: -moz-linear-gradient(#92a5b2, #a1b2bc); background-image: -o-linear-gradient(#92a5b2, #a1b2bc); background-image: linear-gradient(#92a5b2, #a1b2bc); } .cms-menu-list li a .icon { display: block; position: absolute; top: 50%; margin-left: 4px; margin-top: -8px; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); opacity: 0.7; } .cms-menu-list li a .text { display: block; margin-left: 30px; } .cms-menu-list li a .toggle-children { display: inline-block; float: right; width: 20px; height: 100%; cursor: pointer; } -.cms-menu-list li a .toggle-children .toggle-children-icon { display: inline-block; width: 8px; height: 8px; background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -798px no-repeat; vertical-align: middle; } -.cms-menu-list li a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -814px no-repeat; } +.cms-menu-list li a .toggle-children .toggle-children-icon { display: inline-block; width: 8px; height: 8px; background: url('../images/sprites-32x32-s7af51a6313.png') 0 -348px no-repeat; vertical-align: middle; } +.cms-menu-list li a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -332px no-repeat; } .cms-menu-list li ul li a { border-top: 1px solid #b6c3cb; } -.cms-menu-list li.current a { color: white; text-shadow: #1e5270 0 -1px 0; border-top: 1px solid #55a4d2; border-bottom: 1px solid #236184; background-color: #338DC1; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI4NzA5OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #338dc1), color-stop(100%, #287099)); background-image: -moz-linear-gradient(#338dc1, #287099); background-image: -webkit-linear-gradient(#338dc1, #287099); background-image: linear-gradient(#338dc1, #287099); } -.cms-menu-list li.current a .toggle-children .toggle-children-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -830px no-repeat; } -.cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -846px no-repeat; } +.cms-menu-list li.current a { color: white; text-shadow: #1e5270 0 -1px 0; border-top: 1px solid #55a4d2; border-bottom: 1px solid #236184; background-color: #338dc1; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI4NzA5OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #338dc1), color-stop(100%, #287099)); background-image: -webkit-linear-gradient(#338dc1, #287099); background-image: -moz-linear-gradient(#338dc1, #287099); background-image: -o-linear-gradient(#338dc1, #287099); background-image: linear-gradient(#338dc1, #287099); } +.cms-menu-list li.current a .toggle-children .toggle-children-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -406px no-repeat; } +.cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1120px no-repeat; } .cms-menu-list li.current ul { border-top: none; display: block; } .cms-menu-list li.current li { background-color: #287099; } .cms-menu-list li.current li a { font-size: 11px; padding: 0 10px 0 40px; height: 32px; line-height: 32px; color: #e2f0f7; background: none; border-top: 1px solid #2f81b1; border-bottom: 1px solid #1e5270; } @@ -990,42 +1031,42 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-content-controls.cms-preview-controls { z-index: 1; background: #eceff1; height: 30px; /* should be set in js Layout to match page actions */ padding: 12px 12px; } .cms-content-controls .icon-view, .cms-content-controls .preview-selector.dropdown a.chzn-single { white-space: nowrap; } .cms-content-controls .icon-view:before, .cms-content-controls .preview-selector.dropdown a.chzn-single:before { display: inline-block; float: left; content: ''; width: 23px; height: 17px; overflow: hidden; } -.cms-content-controls .icon-auto:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -898px no-repeat; } -.cms-content-controls .icon-desktop:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -925px no-repeat; } -.cms-content-controls .icon-tablet:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -1087px no-repeat; } -.cms-content-controls .icon-mobile:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -1006px no-repeat; } -.cms-content-controls .icon-split:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -1060px no-repeat; } -.cms-content-controls .icon-edit:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -979px no-repeat; } -.cms-content-controls .icon-preview:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -1033px no-repeat; } -.cms-content-controls .icon-window:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -952px no-repeat; } +.cms-content-controls .icon-auto:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -108px no-repeat; } +.cms-content-controls .icon-desktop:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -81px no-repeat; } +.cms-content-controls .icon-tablet:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -162px no-repeat; } +.cms-content-controls .icon-mobile:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -189px no-repeat; } +.cms-content-controls .icon-split:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -135px no-repeat; } +.cms-content-controls .icon-edit:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -27px no-repeat; } +.cms-content-controls .icon-preview:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 0 no-repeat; } +.cms-content-controls .icon-window:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -54px no-repeat; } .cms-content-controls .cms-navigator { width: 100%; } .cms-content-controls .preview-selector.dropdown a.chzn-single { text-indent: -200px; } -.cms-content-controls .preview-selector { float: right; border-bottom: none; position: relative; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; margin: 3px 0 0 4px; padding: 0; height: 28px; } -.cms-content-controls .preview-selector a.chzn-single { width: 20px; padding: 6px 5px 5px; height: 18px; margin: -3px 0 0; filter: none; /* remove ie background */ background: none; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } -.cms-content-controls .preview-selector a.chzn-single:hover, .cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { background-color: #dae0e5; -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); } -.cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { -moz-border-radius: 0 0 3px 3px; -webkit-border-radius: 0; border-radius: 0 0 3px 3px; } +.cms-content-controls .preview-selector { float: right; border-bottom: none; position: relative; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; margin: 3px 0 0 4px; padding: 0; height: 28px; } +.cms-content-controls .preview-selector a.chzn-single { width: 20px; padding: 6px 5px 5px; height: 18px; margin: -3px 0 0; filter: none; /* remove ie background */ background: none; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } +.cms-content-controls .preview-selector a.chzn-single:hover, .cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { background-color: #dae0e5; -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); } +.cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { -webkit-border-radius: 0 0 3px 3px; -moz-border-radius: 0 0 3px 3px; -ms-border-radius: 0 0 3px 3px; -o-border-radius: 0 0 3px 3px; border-radius: 0 0 3px 3px; } .cms-content-controls .preview-selector a.chzn-single div { display: none; } .cms-content-controls .preview-selector.open .chzn-drop { position: absolute; left: auto !important; right: 0; } -.cms-content-controls .preview-selector .chzn-drop { -moz-border-radius: 3px 3px 0 3px; -webkit-border-radius: 3px; border-radius: 3px 3px 0 3px; -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); } +.cms-content-controls .preview-selector .chzn-drop { -webkit-border-radius: 3px 3px 0 3px; -moz-border-radius: 3px 3px 0 3px; -ms-border-radius: 3px 3px 0 3px; -o-border-radius: 3px 3px 0 3px; border-radius: 3px 3px 0 3px; -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); } .cms-content-controls .preview-selector .chzn-drop .chzn-results { width: 135px; } .cms-content-controls .preview-selector .chzn-drop .chzn-results .result-selected { background: #eceff1; } .cms-content-controls .preview-selector .chzn-container { width: auto !important; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop { padding: 0; border-bottom: 1px solid #aaa; margin-top: -5px; width: auto !important; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop .chzn-search { display: none; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul { padding: 0; margin: 0; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li { font-size: 12px; line-height: 16px; padding: 7px 16px 7px 6px; color: #0073C1; border-bottom: 1px solid #DDD; background-color: #FFF; /* Description styling */ } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li { font-size: 12px; line-height: 16px; padding: 7px 16px 7px 6px; color: #0073c1; border-bottom: 1px solid #DDD; background-color: #FFF; /* Description styling */ } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:before { margin-right: 2px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.description { padding-top: 5px; padding-bottom: 5px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.description:before { margin-top: 5px; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.highlighted, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:hover, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:focus { color: #0073C1; filter: none; background: #f2f4f6; text-decoration: none; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.first { -moz-border-radius: 3px 3px 0 0; -webkit-border-radius: 3px; border-radius: 3px 3px 0 0; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.last { border-bottom: none; -moz-border-radius: 0 0 0 3px; -webkit-border-radius: 0; border-radius: 0 0 0 3px; } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.highlighted, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:hover, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:focus { color: #0073c1; filter: none; background: #f2f4f6; text-decoration: none; } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.first { -webkit-border-radius: 3px 3px 0 0; -moz-border-radius: 3px 3px 0 0; -ms-border-radius: 3px 3px 0 0; -o-border-radius: 3px 3px 0 0; border-radius: 3px 3px 0 0; } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.last { border-bottom: none; -webkit-border-radius: 0 0 0 3px; -moz-border-radius: 0 0 0 3px; -ms-border-radius: 0 0 0 3px; -o-border-radius: 0 0 0 3px; border-radius: 0 0 0 3px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.restricted { /* disable option (eg.split mode for smaller screen sizes) */ color: #CCC; background-color: #EEE; pointer-events: none; /*text-decoration: line-through;*/ } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.restricted:before { opacity: 0.2; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li span { display: block; color: #6c6c6c; font-size: 0.85em; line-height: 1.1em; padding-left: 23px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li .icon-view { margin-right: 4px; } -.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected { background: #e6eaed; color: #444; } -.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected.highlighted, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:hover, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:focus { background: #e6eaed; color: #444; } +.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected { background: #e6eaed; color: #444444; } +.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected.highlighted, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:hover, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:focus { background: #e6eaed; color: #444444; } .cms-content-controls .cms-preview-states { float: right; } .cms-content-controls .cms-preview-states select { max-width: 150px; } .cms-content-controls .cms-preview-states.dropdown { max-width: 150px; } @@ -1033,28 +1074,28 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-content-controls .cms-preview-states.dropdown .chzn-container { max-width: 150px; } /* Styling for the preview screen sizes */ -.cms-preview { background-color: #ECEFF1; height: 100%; width: 100%; } +.cms-preview { background-color: #eceff1; height: 100%; width: 100%; } .cms-preview .cms-preview-overlay { width: 100%; height: 100%; } .cms-preview .preview-note { color: #CDD7DC; display: block; font-size: 22px; font-weight: bold; height: 82px; margin-top: -50px; margin-left: -150px; /* half of width */ position: absolute; text-align: center; text-shadow: 0 1px 0 #fff; top: 50%; left: 50%; width: 300px; } -.cms-preview .preview-note span { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 0 no-repeat; display: block; height: 41px; margin: 0 auto 20px; width: 50px; } +.cms-preview .preview-note span { background: url('../images/sprites-64x64-s88957ee578.png') 0 0 no-repeat; display: block; height: 41px; margin: 0 auto 20px; width: 50px; } .cms-preview .preview-scroll { height: 100%; overflow: auto; position: relative; width: 100%; } .cms-preview .preview-scroll .preview-device-outer { height: 100%; width: 100%; } -.cms-preview .preview-scroll .preview-device-outer .preview-device-inner { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; width: 100%; height: 100%; background-color: #FFF; } +.cms-preview .preview-scroll .preview-device-outer .preview-device-inner { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; height: 100%; background-color: #FFF; } .cms-preview .preview-scroll .preview-device-outer .preview-device-inner iframe { height: 100%; overflow-y: auto; width: 100%; } -.cms-preview.mobile .preview-scroll, .cms-preview.mobileLandscape .preview-scroll, .cms-preview.tablet .preview-scroll, .cms-preview.tabletLandscape .preview-scroll, .cms-preview.desktop .preview-scroll { background-color: #ECEFF1; /* cover website preview icon */ } -.cms-preview.mobile .preview-scroll .preview-device-outer, .cms-preview.mobileLandscape .preview-scroll .preview-device-outer, .cms-preview.tablet .preview-scroll .preview-device-outer, .cms-preview.tabletLandscape .preview-scroll .preview-device-outer, .cms-preview.desktop .preview-scroll .preview-device-outer { -moz-border-radius: 7px; -webkit-border-radius: 7px; border-radius: 7px; background: #d5dde2; border: 1px solid transparent; border-left: 1px solid #cfd9de; padding: 0 16px 16px; } +.cms-preview.mobile .preview-scroll, .cms-preview.mobileLandscape .preview-scroll, .cms-preview.tablet .preview-scroll, .cms-preview.tabletLandscape .preview-scroll, .cms-preview.desktop .preview-scroll { background-color: #eceff1; /* cover website preview icon */ } +.cms-preview.mobile .preview-scroll .preview-device-outer, .cms-preview.mobileLandscape .preview-scroll .preview-device-outer, .cms-preview.tablet .preview-scroll .preview-device-outer, .cms-preview.tabletLandscape .preview-scroll .preview-device-outer, .cms-preview.desktop .preview-scroll .preview-device-outer { -webkit-border-radius: 7px; -moz-border-radius: 7px; -ms-border-radius: 7px; -o-border-radius: 7px; border-radius: 7px; background: #d5dde2; border: 1px solid transparent; border-left: 1px solid #cfd9de; padding: 0 16px 16px; } .cms-preview.mobile .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.mobileLandscape .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.tablet .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.tabletLandscape .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.desktop .preview-scroll .preview-device-outer .preview-device-inner { border-top: 2px solid #e1e7ea; border-right: 1px solid transparent; border-bottom: 1px solid #e1e7ea; border-left: 1px solid #c3cfd6; } -.cms-preview.mobile .preview-scroll .preview-device-outer { -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -webkit-transform: rotate(0deg); transform: rotate(0deg); -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; transition: all 0.3s ease-in 1s; margin: 20px auto 20px; overflow: hidden; padding-top: 16px; } -.cms-preview.mobile .preview-scroll .preview-device-outer .preview-device-inner { -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -webkit-transform: rotate(0deg); transform: rotate(0deg); -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.mobile .preview-scroll .preview-device-outer.rotate { -moz-transform: rotate(-90deg); -ms-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg); -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; transition: all 0.3s ease-in 1s; height: 583px; margin: 0px auto 0px; width: 320px; } -.cms-preview.mobile .preview-scroll .preview-device-outer.rotate .preview-device-inner { -moz-transform-origin: 160px 160px; -ms-transform-origin: 160px 160px; -webkit-transform-origin: 160px 160px; transform-origin: 160px 160px; -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -webkit-transform: rotate(90deg); transform: rotate(90deg); -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; height: 320px; width: 583px; } -.cms-preview.mobileLandscape .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 12% auto; padding-top: 16px; } -.cms-preview.mobileLandscape .preview-scroll .preview-device-outer .preview-device-inner { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.tablet .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } -.cms-preview.tablet .preview-scroll .preview-device-outer .preview-device-inner { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.tabletLandscape .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } -.cms-preview.tabletLandscape .preview-scroll .preview-device-outer .preview-device-inner { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.desktop .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } +.cms-preview.mobile .preview-scroll .preview-device-outer { -webkit-transform: rotate(0deg); -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -o-transform: rotate(0deg); transform: rotate(0deg); -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; transition: all 0.3s ease-in 1s; margin: 20px auto 20px; overflow: hidden; padding-top: 16px; } +.cms-preview.mobile .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transform: rotate(0deg); -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -o-transform: rotate(0deg); transform: rotate(0deg); -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.mobile .preview-scroll .preview-device-outer.rotate { -webkit-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -ms-transform: rotate(-90deg); -o-transform: rotate(-90deg); transform: rotate(-90deg); -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; transition: all 0.3s ease-in 1s; height: 583px; margin: 0px auto 0px; width: 320px; } +.cms-preview.mobile .preview-scroll .preview-device-outer.rotate .preview-device-inner { -webkit-transform-origin: 160px 160px; -moz-transform-origin: 160px 160px; -ms-transform-origin: 160px 160px; -o-transform-origin: 160px 160px; transform-origin: 160px 160px; -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -o-transform: rotate(90deg); transform: rotate(90deg); -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; height: 320px; width: 583px; } +.cms-preview.mobileLandscape .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 12% auto; padding-top: 16px; } +.cms-preview.mobileLandscape .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.tablet .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } +.cms-preview.tablet .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.tabletLandscape .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } +.cms-preview.tabletLandscape .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.desktop .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } /******************************************** * Defines the styles for .ss-ui-action-tabset: @@ -1078,16 +1119,16 @@ visible. Added and removed with js in TabSet.js */ /*************************** of ss-ui-action-tabset ****************************************************************/ } .cms .ss-ui-action-tabset.multi { /* Style the tab panels */ } -.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; overflow: hidden; *zoom: 1; border: 1px solid #b3b3b3; float: left; overflow: visible; padding: 0; } +.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav { -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; overflow: hidden; *zoom: 1; border: 1px solid #b3b3b3; float: left; overflow: visible; padding: 0; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav:active { outline: none; box-shadow: none; -webkit-box-shadow: none; } -.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y4ZjhmOCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f8f8f8), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: -webkit-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: linear-gradient(to bottom, #f8f8f8, #d9d9d9); -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: #eaeaea; border: none; border-right: 1px solid #eee; border-left: 1px solid #b3b3b3; margin: 0; overflow: visible; min-width: 110px; } +.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y4ZjhmOCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f8f8f8), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: -moz-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: -o-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: linear-gradient(top, #f8f8f8, #d9d9d9); -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: #eaeaea; border: none; border-right: 1px solid #eee; border-left: 1px solid #b3b3b3; margin: 0; overflow: visible; min-width: 110px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li:active { outline: none; box-shadow: none; -webkit-box-shadow: none; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active { -moz-border-radius-bottomleft: 0px; -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; background: #f8f8f8; border-bottom: none !important; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active a { -moz-border-radius-bottomleft: 0px; -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active a:active, .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active a span:active { outline: none; box-shadow: none; -webkit-box-shadow: none; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.first { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-left: none; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.last { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-right: none; } -.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link { color: #444; display: inline-block; font-weight: bold; line-height: 16px; padding: 5px 10px; } +.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link { color: #444444; display: inline-block; font-weight: bold; line-height: 16px; padding: 5px 10px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link .ui-no-icon { display: inline-block; float: left; height: 16px; padding: 0 2px; width: 16px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link .title { display: inline-block; line-height: 18px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link.view-mode-batchactions-wrapper .title { margin-left: 22px; } @@ -1096,10 +1137,10 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel h3 { font-size: 13px; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel h4 { font-size: 12px; margin: 5px 0; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .ui-widget-content { background: none; } -.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label { float: none; width: auto; font-size: 12px; padding: 0 8px 4px 0; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label.extra-details { overflow: hidden; margin-top: 10px; display: block; color: #9d9d9d; font-style: italic; font-weight: normal; font-size: 1em; float: left; text-shadow: none; } -.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -moz-border-radius: 50px; -webkit-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } +.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -webkit-border-radius: 50px; -moz-border-radius: 50px; -ms-border-radius: 50px; -o-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field .middleColumn { margin: 0; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field input.text, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field select, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field textarea { padding: 5px; font-size: 11px; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field.checkbox { padding: 0 8px 0; } @@ -1109,7 +1150,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-content-fields { overflow: visible; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .chzn-container-single { width: 100% !important; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .chzn-container-single .chzn-single { padding: 0 0 0 5px; float: none; } -.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-edit-form { width: 100%; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .CompositeField { margin: 0; padding: 0; float: none; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .parent-mode { padding-top: 0; } @@ -1130,7 +1171,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset .batch-check { margin: 6px 0px 5px 9px; position: absolute; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar { min-width: 176px; /* for when the scrollbar is present & find dropdown open */ } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li { width: auto; } -.cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li a.tab-nav-link { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; transition-duration: 0.5s; overflow: hidden; padding-right: 0; width: 30px; } +.cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li a.tab-nav-link { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; transition-duration: 0.5s; overflow: hidden; padding-right: 0; width: 30px; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li a.tab-nav-link.active { -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; transition-duration: 0.5s; width: 110px; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open ul.ui-tabs-nav, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open ul.ui-tabs-nav li.first, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open ul.ui-tabs-nav li.last, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open-last ul.ui-tabs-nav, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open-last ul.ui-tabs-nav li.first, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open-last ul.ui-tabs-nav li.last { -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ui-tabs .ui-tabs-panel.ss-ui-action-tab { padding: 10px 6px; width: 162px; } @@ -1140,23 +1181,23 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.action-menus.ss-tabset { margin-top: 2px; /* Style the panel for actions-menu */ /* Re-align last tab */ } .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav { margin: 0; float: left; /* needed for ie but doesnt effect other browsers */ } .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li { background: none; border: none; border-bottom: none !important; display: inline; padding: 0; /* Make arrow point in up when nav open */ } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; outline: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a { text-shadow: #fff 0 1px 1px; color: #0073C1; font-size: 13px; font-weight: normal; line-height: 24px; padding: 0 25px 0 10px; /* Arrow */ } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; outline: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover { text-shadow: #fff 0 10px 10px; color: #005b98; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -26px no-repeat; border-bottom: 0; content: ""; display: inline-block; height: 16px; margin-left: 6px; width: 16px; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 0 no-repeat; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -78px no-repeat; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -52px no-repeat; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel { overflow: hidden; *zoom: 1; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; /* Restyle for smaller area*/ clear: both; display: block; background-color: #ECEFF1; border: 1px solid #ccc; border-bottom: 1px solid #ECEFF1; margin: 0; margin-top: 2px; max-width: 250px; padding: 8px 0 2px; position: absolute; z-index: 1; min-width: 190px; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; outline: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a { text-shadow: white 0 1px 1px; color: #0073c1; font-size: 13px; font-weight: normal; line-height: 24px; padding: 0 25px 0 10px; /* Arrow */ } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; outline: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover { text-shadow: white 0 10px 10px; color: #005b98; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1188px no-repeat; border-bottom: 0; content: ""; display: inline-block; height: 16px; margin-left: 6px; width: 16px; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1162px no-repeat; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1214px no-repeat; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1136px no-repeat; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel { overflow: hidden; *zoom: 1; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; /* Restyle for smaller area*/ clear: both; display: block; background-color: #eceff1; border: 1px solid #ccc; border-bottom: 1px solid #eceff1; margin: 0; margin-top: 2px; max-width: 250px; padding: 8px 0 2px; position: absolute; z-index: 1; min-width: 190px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h3, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h4, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h5 { font-weight: bold; line-height: 16px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h3 { font-size: 13px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h4 { font-size: 12px; margin: 5px 0; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .ui-widget-content { background: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label { float: none; width: auto; font-size: 12px; padding: 0 8px 4px 0; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label.extra-details { overflow: hidden; margin-top: 10px; display: block; color: #9d9d9d; font-style: italic; font-weight: normal; font-size: 1em; float: left; text-shadow: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -moz-border-radius: 50px; -webkit-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -webkit-border-radius: 50px; -moz-border-radius: 50px; -ms-border-radius: 50px; -o-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field .middleColumn { margin: 0; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field input.text, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field select, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field textarea { padding: 5px; font-size: 11px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field.checkbox { padding: 0 8px 0; } @@ -1166,7 +1207,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-content-fields { overflow: visible; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .chzn-container-single { width: 100% !important; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .chzn-container-single .chzn-single { padding: 0 0 0 5px; float: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-edit-form { width: 100%; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .CompositeField { margin: 0; padding: 0; float: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .parent-mode { padding-top: 0; } @@ -1179,14 +1220,15 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-sitetree-information { border-bottom: 1px solid #e6e7e8; margin-bottom: 8px; padding: 0 20px 0 0; margin-right: 10px; margin-left: 10px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-sitetree-information p.meta-info { color: #999; font-size: 11px; line-height: 16px; margin-bottom: 8px; white-space: nowrap; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button { width: 100%; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; background-color: #e0e5e8; outline: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; background-color: #e0e5e8; outline: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .last .ui-tabs-panel.ss-ui-action-tab { left: auto; right: -1px; } .cms .cms-content-actions .Actions { overflow: visible; } -.ModelAdmin .cms-content-fields { overflow: hidden; } +.ModelAdmin .cms-content-fields { /** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. Hide certain elements when shown in "sidebar mode" */ } .ModelAdmin .cms-content-fields .cms-edit-form { overflow-y: auto; overflow-x: hidden; } .ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content .cms-search-form .resetformaction { margin-right: 0px; } .ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content #Form_ImportForm { overflow: hidden; } +.ModelAdmin .cms-content-fields .cms-content-filters { padding-top: 16px; } .permissioncheckboxset h5, .permissioncheckboxsetfield_readonly h5 { margin: 0; } .permissioncheckboxset .optionset, .permissioncheckboxsetfield_readonly .optionset { overflow: auto; } @@ -1206,7 +1248,7 @@ green tick icon as a background this is created using compass generated classes .cms-security h1 { margin: 45px 40px 5px 25px; font-size: 1.9em; line-height: 1.2; font-weight: bold; } .cms-security .Content { margin: 0 50px 0 25px; } .cms-security .Form { margin: 0 25px; } -.cms-security .Form .field { border: 0 none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; margin: 0; padding: 0; } +.cms-security .Form .field { border: 0 none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; margin: 0; padding: 0; } .cms-security .Form .field label.left { float: none; width: auto; } .cms-security .Form .field .middleColumn { margin: 0; } .cms-security .Form #Password { width: 300px; float: left; } @@ -1229,51 +1271,51 @@ green tick icon as a background this is created using compass generated classes /* Default CMS logo */ .cms-logo a { background-image: url("../images/logo_small@2x.png"); background-size: 22px 22px; } /* Logout button */ - .cms-login-status .logout-link { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -184px; background-size: 30px auto; } - .cms-content-controls .icon-auto:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -274px; background-size: 30px auto; } - .cms-content-controls .icon-desktop:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -301px; background-size: 30px auto; } - .cms-content-controls .icon-tablet:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -436px; background-size: 30px auto; } - .cms-content-controls .icon-mobile:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -355px; background-size: 30px auto; } - .cms-content-controls .icon-split:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -409px; background-size: 30px auto; } - .cms-content-controls .icon-edit:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -328px; background-size: 30px auto; } - .cms-content-controls .icon-preview:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -382px; background-size: 30px auto; } - .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -26px; background-size: 30px auto; } - .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 0; background-size: 30px auto; } - .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -78px; background-size: 30px auto; } - .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -52px; background-size: 30px auto; } + .cms-login-status .logout-link { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -161px; background-size: 30px auto; } + .cms-content-controls .icon-auto:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -134px; background-size: 30px auto; } + .cms-content-controls .icon-desktop:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -241px; background-size: 30px auto; } + .cms-content-controls .icon-tablet:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -268px; background-size: 30px auto; } + .cms-content-controls .icon-mobile:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -214px; background-size: 30px auto; } + .cms-content-controls .icon-split:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -187px; background-size: 30px auto; } + .cms-content-controls .icon-edit:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -107px; background-size: 30px auto; } + .cms-content-controls .icon-preview:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -80px; background-size: 30px auto; } + .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -327px; background-size: 30px auto; } + .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -353px; background-size: 30px auto; } + .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -411px; background-size: 30px auto; } + .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -437px; background-size: 30px auto; } /* CMS menu */ - .cms-menu-list li a .toggle-children .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -210px; background-size: 30px auto; } - .cms-menu-list li a .toggle-children.opened .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -226px; background-size: 30px auto; } - .cms-menu-list li.current a .toggle-children .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -242px; background-size: 30px auto; } - .cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -258px; background-size: 30px auto; } + .cms-menu-list li a .toggle-children .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -395px; background-size: 30px auto; } + .cms-menu-list li a .toggle-children.opened .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -379px; background-size: 30px auto; } + .cms-menu-list li.current a .toggle-children .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -295px; background-size: 30px auto; } + .cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -311px; background-size: 30px auto; } /* Sitetree */ .tree-holder.jstree-apple ins, .cms-tree.jstree-apple ins { background-image: url(../images/sitetree_ss_default_icons@2x.png); background-size: 108px 72px; } /* UI widget "close" button */ - .ui-widget-header a.ui-state-hover .ui-icon-closethick { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -104px; background-size: 30px auto; } - .ui-widget-header .ui-icon-closethick { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -144px; background-size: 30px auto; } + .ui-widget-header a.ui-state-hover .ui-icon-closethick { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 0; background-size: 30px auto; } + .ui-widget-header .ui-icon-closethick { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -40px; background-size: 30px auto; } /* Tab icons */ - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -150px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -250px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -50px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -100px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -200px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 0; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -250px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -100px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 0; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -200px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -150px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -50px; background-size: 40px auto; } /* Menu icon classes */ - .icon.icon-24 { background-image: url('../images/menu-icons/24x24-2x-sccfd928e17.png'); background-size: 24px auto; } - .icon.icon-24.icon-assetadmin { background-position: 0 -216px; } - .icon.icon-24.icon-cmsmain { background-position: 0 -192px; } + .icon.icon-24 { background-image: url('../images/menu-icons/24x24-2x-s7169efa003.png'); background-size: 24px auto; } + .icon.icon-24.icon-assetadmin { background-position: 0 -144px; } + .icon.icon-24.icon-cmsmain { background-position: 0 -120px; } .icon.icon-24.icon-cmspagescontroller { background-position: 0 -168px; } - .icon.icon-24.icon-cmssettingscontroller { background-position: 0 -96px; } + .icon.icon-24.icon-cmssettingscontroller { background-position: 0 0; } .icon.icon-24.icon-securityadmin { background-position: 0 -24px; } - .icon.icon-24.icon-reportadmin { background-position: 0 -240px; } - .icon.icon-24.icon-commentadmin { background-position: 0 0; } - .icon.icon-24.icon-help { background-position: 0 -144px; } - .icon.icon-16 { background-image: url('../images/menu-icons/16x16-2x-sbe70081ef8.png'); background-size: 16px auto; } - .icon.icon-16.icon-assetadmin { background-position: 0 -144px; } - .icon.icon-16.icon-cmsmain { background-position: 0 -128px; } - .icon.icon-16.icon-cmspagescontroller { background-position: 0 -112px; } - .icon.icon-16.icon-cmssettingscontroller { background-position: 0 -64px; } + .icon.icon-24.icon-reportadmin { background-position: 0 -96px; } + .icon.icon-24.icon-commentadmin { background-position: 0 -240px; } + .icon.icon-24.icon-help { background-position: 0 -72px; } + .icon.icon-16 { background-image: url('../images/menu-icons/16x16-2x-s9b8c49312e.png'); background-size: 16px auto; } + .icon.icon-16.icon-assetadmin { background-position: 0 -80px; } + .icon.icon-16.icon-cmsmain { background-position: 0 -112px; } + .icon.icon-16.icon-cmspagescontroller { background-position: 0 -96px; } + .icon.icon-16.icon-cmssettingscontroller { background-position: 0 0; } .icon.icon-16.icon-securityadmin { background-position: 0 -16px; } - .icon.icon-16.icon-reportadmin { background-position: 0 -160px; } - .icon.icon-16.icon-commentadmin { background-position: 0 0; } - .icon.icon-16.icon-help { background-position: 0 -96px; } } + .icon.icon-16.icon-reportadmin { background-position: 0 -48px; } + .icon.icon-16.icon-commentadmin { background-position: 0 -160px; } + .icon.icon-16.icon-help { background-position: 0 -64px; } } diff --git a/admin/font/LICENSE.txt b/admin/font/LICENSE.txt new file mode 100644 index 000000000..de4205870 --- /dev/null +++ b/admin/font/LICENSE.txt @@ -0,0 +1,12 @@ +Font license info + + +## Entypo + + Copyright (C) 2012 by Daniel Bruce + + Author: Daniel Bruce + License: SIL (http://scripts.sil.org/OFL) + Homepage: http://www.entypo.com + + diff --git a/admin/font/fontello.eot b/admin/font/fontello.eot new file mode 100644 index 0000000000000000000000000000000000000000..ff77b6d364ba93632c4d820cd826eb2945549c1e GIT binary patch literal 5156 zcmd^CO>7&-6@J4dDO!{z*_LD{l#`)WQf+Zb{lr!jM|KqcNd8MgNw&*%+GbZI_2Wn) zOVNRy27wPvU=V2`^wLuiv_K2Ar&%RwlOk|~o|>Wsl6xEU(56PwQ-3Z!*!|vesXxmN zkZafCzVE&HX6DU%Z)VoL9Yn7kA`;{yetZ(Fhgz|uumV5!g=ExBw-!<3*QwCvR%W}dW_ZjnaT3$ueG zr$0ISTUh>%-BvZbDxt3YQn`wKDAO z&|iZLEiB)hfBWr!e2mqjUCb;N?Ly#Je?=U$Kcjtg5r!t8c8VrQPj)_2pozP5S7J zcit8BQR3c_+v;`vJ>S!vkn+yJ9YH_8b1QfLXSv(2Z@l?BX9JHm>#I?i4wFuU^fXP; zfr-}S_~_6;@6jU%TY?mf$3(Oz*wJ-3dPbb+KfDbK*P^?YCf(&c!JO?_+h+HDa__T_ zaJWPC;GMnqs*B&m``)}@(czljy2|ijFR|Vo>lOm9|1^MDXBB_nZ&=uI^rg1(e^Xey%jQpi^7*HA`QZ=UsLvwm*k|66<@Tx9JM-`VQ=8qYR_=#K;})$G zKX*h}c)#*|8lA1j*&VGN2NF?Fn9m1(4$^0vW1WP~J@_4>lOFa_6P@<327B7We&CB9 z4j_M*JRF4mB@Z`K42NQU%rG|p_jot@_hE)>^kWYTY8P!D_ED>N+`}5|aS!`}PkT5( zUE(SJ0&QO_LT?hJ8!Jry>{z+-)6g6Q@Hb1 z-Fwe=@5ciCsr$Z0uV8&6uvXy-ds%V4k~9gq{Wg_|2e)0rIC-!WZd9tUp27h!_`o_E z>qAx5uXx;uT*P}kxEX{`Xu-9jUCA%{mzUOXU*W;&k6WN^dk;m1RCGC)F{QllKDAC? zP{G-&IdvkUj+xfHtXvNH4RFSDDrKdMAUdl?wl`xdF=Htp|$bwWK zWtG4G>c%nAoXX@gGcV?%dNfkYNtMm!qH4m7NHxZ2%rvD_C)ovc3?@&LYKYs1nE6pQ zC*efRmZ~|MvtW_j*34*>(Wn)%Ow)`g5i?C)Q8rgJ&A8GGnUTuhXTzaDDw|UQJ*k3v z67HKySaIbyboeC;PGBx6xurfizZF@TywV1uu%~2A)-bj+6zIdUrgK&{V$Ya4-9+oe zYz|EkUX(X;Tm=l(l!|R2MQ&(`R3-8$YXvL7>KJTL$Z_MRQ`QG&4B_p zCoGdGR@!wkWNb8rDV0eML^p%I&)6CK=K3fi1{YFTu_ZG#-R4BNk)jAkQ^^RNYO8LtKu?-#KWj74_Ct%SHVo75hD0I)dAO}wQe0c;lol{$rz+H=3?_L$CR)&FFmUg9dgnFGz9=7WfLUeXu{*yRDx={W2b17S=_l#u&G6? zevw$u@%ESmj_^t7$L>b# z11Kb%+q*o$h&DR+xlZ7XYlM%mt+`MoPjU<-W)JjxG0?{mnlaa`LfE}hPU=%U8E5M$ zH)Om3FQRlQmyqMQ_}F95h{3i(9_)j54o#a^Yduj97MG=anSqaSb;|P~)kuxSckk{c zHd6Vtq00nEZ4#&MxS4Qbq5~UmeAA3kiHtL!FE@T6PTjjG;zjHPjFn zOAXucfr*ipgo)CZIgKTE);A}va_qxH2{nwpn0bhO5@)UG zIHX3vnKIM~h_f8E4B{#$ac4E+bk5*%RA&*^^Tr0zvj7(W1cQslhHx#<0l1dunUh4* z3(R4VWe$UB<}jFH&KZDN<}kR#90r$}!{7>YCIG(590ob&Fff_J;3{)c0539!!Pl6> z;Oop`@D1iX1Mm`a7+B08Y5Ffd+?c%p literal 0 HcmV?d00001 diff --git a/admin/font/fontello.svg b/admin/font/fontello.svg new file mode 100644 index 000000000..7910e869a --- /dev/null +++ b/admin/font/fontello.svg @@ -0,0 +1,13 @@ + + + +Copyright (C) 2015 by original authors @ fontello.com + + + + + + + + + \ No newline at end of file diff --git a/admin/font/fontello.ttf b/admin/font/fontello.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dcf2e67adce7aa71c7a21f6f73322b514d484a9f GIT binary patch literal 4988 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 literal 0 HcmV?d00001 diff --git a/admin/font/fontello.woff b/admin/font/fontello.woff new file mode 100644 index 0000000000000000000000000000000000000000..8d09cca4fb826bc35f41aebb0a7ce654062e8993 GIT binary patch literal 2796 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 btD#ej$*c>96I=>yBDq3t04qbP8Laak9X6&( literal 0 HcmV?d00001 diff --git a/admin/images/btn-icon-scb653ce8a9.png b/admin/images/btn-icon-scb653ce8a9.png deleted file mode 100644 index c4f0f31378de5468090c4df14b99b663307e2a2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22990 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 VC3^VV37!A|002ovPDHLkV1hdm+uQ&E diff --git a/admin/images/btn-icon-se43cec5357.png b/admin/images/btn-icon-se43cec5357.png new file mode 100644 index 0000000000000000000000000000000000000000..12727a91db6cb07dde57c0fe3b3b83716bdab1a0 GIT binary patch literal 22916 zcmV*NKw`g%P)79TA3M!}+5j0o;3n(B~kn#wKpwg5cdR0nj0zn{z z1QJq6?{$0opEEm~>~3Z^!RPru@B4k9qnDk`-20nz+qtLQA_TK*;>3wwJRUCwZ+$R0 zvybaAl>O;*JOKA(512?D#qHo3hYlSQ z6W>{N`t+IY$BrFy#WZJG$z;q?mX7_;JemMH8@*BS-qQY15|9pg{wt&42VEsIa75#I8_WTnx#* zjxdq>Tp0u2US7~3l0ahiQuwOhC)4iSx$_9qW*}&3BbY{`iA_kDFgYpzI8@u$gCjUW zWo0GEHy3LfA`7MSoKUo0y2OY zf`YGL;!+w)YYtW~5C|bg&=yi;Y0x8oIP-$1;lsT?7a4$d=X-%ppwFhrP6RQ~7Vr23 zR&SooqRh;!jLuG-qHosS#&*vKg<1(h1+S4BwTlYWwmK$(eYFjAa_$H@Ik_2>)*S5K zufP6w=;M!TuW)|2-Ty@aut`oa{?? z@7^tL)&uJ5>Mritv&&PZ(h7c>wrkvx+yjtYa1kyS>l=7)zkbjM!uw%!MNe2)9 zmZVfFFLL!weojsf&&I~)!j>%?co#38E0{O${o!l+Obs`VcaGB88_(T z2*zV-0ehn{7(Eo@OM7frX|=U~7QXh{i~ks2(s#F_?DrsZ*zF z_XuXXRBL+b{vg>wFvkrrd6AR^+T@F-QM2bS1OhAOG-*$;J|_K%rnn0 zeUmOKBjO&IZ9Zn-A1UlDm&<$Nt4roRpufMre;dq_h=7I-8wQwNP#_CBa^whHxNrfG zT7ADnaHP%#KOBPb`!)l^EVi|?vvb2jhUcDp4mx-440MlW1`ZAm(6eVxz{E_qDl034 zYuBz(O?qOwh-PJm52?&-h?2H#+fr{}I4w~@S*0d`*<=338ilJ@uM(rQp>$ke^_YJZ z)gX>G3?-Nqri@ZjQlPrJnxT*=qkAkf;$=!o#|8EfvlWj`K%9}0!6c#zAb|S%dcc8$ z;kwv#sF^Te$cZa4T_zXU`GSIizR}UqUJ(%yqDPM&F^L8Z8U*9Vk7p8Jx^#)5mM$!K z6?VHk%zE>Vj$gchWi$W-R;qtMR8$m?0IATQefC)#ndIQ;=*awyO-GCI3b9Lcuv|H9^=VEbl(x3{-zKtO;96Dl(^Gpn&C3-j{wE@AWd5kYgPmbto<0D~J+ zq9`gV`UM;A9ju6s_~kYRu7N!u4{P!ccC-7)f@m=CME+NezZ!EeEz6s9*wQ6f8D}Vf z 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 literal 0 HcmV?d00001 diff --git a/admin/images/menu-icons/16x16-2x-s9b8c49312e.png b/admin/images/menu-icons/16x16-2x-s9b8c49312e.png new file mode 100644 index 0000000000000000000000000000000000000000..bd311b1322ce1042770fc3480b2a3cc00c300ff7 GIT binary patch literal 4147 zcmV-35X|q1P)l}A z4`0gTC(s2C7{@UC2?WzEsDs7mh+l9OhV#6>2>?ZaHE4@;%(2e@<-Q>ppc-y-UHJ=c zRs(p5gFS+7DDJx6o-ec(nRpXRf&gN873cXtU&99E3kHbeT6~O>*7+2yM_1Ie&XYH{uqDa-x2s873KLJG*g+xFRY`P^6zPmLI*gg#)W&WqrUi%6WT<+yGG@4 zF*XMS#K^9p)>&O_!6vIaPz>wP0keZg@TBAH0yaD4Cxd4PbD=&(IGcLVI_a~al*UZ6 zyZ;E*vH_ov+sz!;N8l+{QSOOy7>tDy;3tmeLJAKsLtPhM=fA;H9_OMB|JI>mrQtHH z3+S}~ zkA|LimF4{Wr~)vM#tIyIy6xIg6h=|bKsyzHMV$S)oQt{`CM9AUrC~0+-j9E%y~5{I z8;urHpm*{A{<7mFHmHiSNxQKD6)+tsNhHjmi)urO1oB8C7W8RDN<|Elu{_!cZZw=) zFUBd;g8{11omV9bds7w@pG>rl-=3jVZHc?bZ)8B2Q(B?QIgsL<%F}#nRwyU{lNzYh?Ix>LvN&-~F zG(M#YXJRi0y-VKKiT*jAvB&`)x8oC!;~B%Cl;b#ilEFL3ql>UbU>qYd(2yKs+*620 z_i^@%8p?CA?aA+B0pafC6vhbm3-5iKS0@PB9XOv&r$-1-+>_-c3D8T%#D(OeH0mK- z+OLfTwkfldHo=En*NzI#s*}zHioW~P+`KE(*#MB~x{?`qzx&e+fqkwR@JFdIUX-8z zw%P(tsd9oE^&)PtF1#k=@O{)pw=f-%Lf(fFRBu~Ak|pT2M%w_ga6-D4#tg7J+PZ&& z#~A8?-TT@A#$dg0dBKYqlk1MXw*%l&{9qhaw_Pn4#D&U^vq~0#G8P~$foX>^L{~JxR##Vn1hem zl7mY-ZFa=7>r^Ij8*{ZAjpMm4IQt~V{oi&9+wbR{Yf{20QzpwYT0fsUSD2HSpDfEK zJ;7<(!xI$n!<@qXH2%Bzg5TjAeFQD&R<3qLsj9S%A<>(HOpHpE+3pY=URoZe;I!bo z$)M zM7a;Vp`lz zFb>LM%cV=(#=vPWjoPmq>QN5*6vaGO7M;>KI|cb#nS8wx)YuBtf+~7KD0p+Gys0W% zc*;I2B=LZ)=oX$BA6$XE88pIdRDwpK2Q$a=5jyX|GR?WpV-w_o>E269IZUUi%Wp_xu9U=+l*MfF zOmpu$8H|0$r0=vTi8)3IRHsr*^mOe=<1Gi6UasUrR;by7Y8c4WuCVP&af-|h7)*dM zcsCWmV;FA5fNpBc)&mc6=so~3YDN1L({?R`(k{-zYyw~v>Z`Dgfqxf!QOE?CrPSRF z|LWo2PJn@E8%hG^(G8wS0F=RVAw{SJd-P8L438j%Su}$Ob%3I_m4q<#Fox&=9TAHJ zaJvc6Dxx0Nq!r(;0n~}C%2(H?o zz(NgRI=;kJ5do&?2Bm{h!wX9v;D9j7&}|c|XCY`{!Y0nat@tox_rY3Rld#Gk(L=ry zAXLd>{fXrA8cixOk3dfE}qrxK$vKKKie)w14}S7Ij?b5Fg$0iD{9bpw5F5q#Q&GX zL+1+>@ipTWjkLwXW(;gX0^DVEH>EE$fHSz6A3o*zjE;1;VIN<_t5I^M7s=j)r>ae=2}lOsq^A5v7iFkL|dN6*1)VAB#u|;_U%UTdan*`n<-HiUqLGiAELB{&7kA7T<4o*;fZ)O!ox>u9z)pKA9@TH z7u>vP#<1!ZpB$khU42iw8)M~B_(X;s2=PMF^*_t4eRVi%ZGz;Wh_nKusDwgU z(;H62LTe%SN~X!Vsg$W3O1ZAgH}--&%7FJJWTgUlI%!1J@eH%;v3xZRWUAXfIRV<@ zA`h-SM&YSpMUJJd-8vosenqhw)=^WjM6_x03Se!7r!iL;j zz3jjw`CB`Hmd0*HBcCla$y7}4hOn)0Xqvqv^dd!W0-!q?7~Z5^paW=`adDpwM5!rL z(D&!ftjF*C!@IWM2q5NPY^j1vDIvFGyz7(fczKl(R3Mx6y(&K2j#2>}qS$Uv3jgE? z)BrT?xDLCmEx4g4QQL<$J1<<&s#@!ClCHc;GyrX?8qo@N@GDx1lsczvWIX0yzE%;W z{4$S1G&Y*_1q0r=qhfVD9KecHD_yf)n+#)|v=_oCQyY&gArwG%lC1AY7|v*dR7iey zUUYySjFe(|0f?z_$p5AZGV$4%s!;3?a7=FVJEJ;+Ob=V6=d6kVpCt*>>Tp)M<$v3( zH(*-sjOkD4*a+DMWJoE z-i`M9`et~5G-<7JlTwdRBdE*}utHR;ywg~bJYupfiH$NcXpTN;iULgN-eZbk-?Uu63_1zjkvW1-Pk7QZDelOlT5MUu|rwZA^&9Dga~g3X_Kh z*3%QaavQ0PLdb7#jFeNCczVK&q#T8i*&vdhZXZPx6>Y4CHNM6y5JFgnW0NgAOos5C z3lm@qY6iS-z+Bk1u}J`gFGrl}+$8)c-1Z>!D3T3I$WeG%q)?;qHfh15(6+|LQyJAD zh=y2@@aFzT)eqts2DwAzrzx$n7eo)afHZ^}e3gn>PllLpRI+-Zi0*Jx`2{;fPkbrA zsH3g?^}+3QQwQB7U0anV7Ae;U;3K- zQrgnd>HxqEXp2GU$F__HQ2V~y8r({^yG=d$p3PQ?;qL%^O1HC^-8Ey_FI@J%9Ru0A zkqcc7zVwfh{!eDB&1B$CMovSc)(_UBKN;H#ml^vHVz2U@G6K6Cq4T@R_6MD%s2hWpgeqzR_?Eb2`f9$cACxb1t`eqr8q93^SQ>kwL>@t>0cy2&g^+7 zeMc*-L<{@ZW$XY!`@;&#O`kVoJm-EDW2((jsyJG>t8K9y%(=J@Uxx)a$uYc4FMfpo z(kak4>g8EgfS8PAdf1})tZ)FQ$fE+r6vuHH#pqDDS2*L?KCqDh@w}A6DxQtiymJ8O z0L}sYPXQcL?sd!?AYBkbG7B2NcC|VQinv2n{e^ zkCsg?c$FX5T3a@r^QdlD)xXmeWKecvfpN6MzdSCK{7>Qk3-|5?RMg`rsi&}VqU@ww z_SlZHJ+e3*AZ}*kMFPgz;arrK+PxRX-ONVwhv;{jsy0dEjW&V?v~W?rTlOS6VYxtA ztVq2q=}8yhb5s-<5wW{rDTM9ERHD%J!c)%GDI@rcaj7XsMBLnHg}vu=;Vc2jm#6;u zeglAAo|_s~X`f(N`&=FX-V_Whx+-mK^rCebrg5Pm-jKfy7nUaDeqEVza1S0wExF1a z$8C((P3nuyKES8(t^OT1VMQamjiZVdz#zO5MUc#`OB2*4*H03cG5Cup%BN&j)-t*- xXkTA%s=VFP17HsR8RoZ9l7Am*;_s}^{{hz`@%STb9HRgL002ovPDHLkV1mcF@2vm; literal 0 HcmV?d00001 diff --git a/admin/images/menu-icons/16x16-2x-sbe70081ef8.png b/admin/images/menu-icons/16x16-2x-sbe70081ef8.png deleted file mode 100644 index 95459e2a1ee9e692c43157dbb8aebde89f346c90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4135 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 diff --git a/admin/images/menu-icons/16x16-s3f4c846209.png b/admin/images/menu-icons/16x16-s3f4c846209.png deleted file mode 100644 index 19780777575b257c74900e3b5941f4ce97e91e7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1637 zcmV-r2AcVaP)#ue-t=+ETI?k4`Z$cbLA133lA%1&pB-&1ef!@~SSj14hvvyv?>JVyIj? zKZ!;+pc2Jq=RO?fccUr!5|=P3PgDnOX>?9=)0Q2|c~T0oSzrm<@uJxo#)tTaq7mK? z5-=hsnm`F3V_1(9IAa1swCe<|3-k#khH}^@n{KZtF;Mm7&cm{+KW6^U3c7lLHy!-6 zV}}CI@-u=yh7(XN@V6O7QZTHdq&MBe?-l4U$#am4E=|&od|Gy1o~XU)&P%k)623Lm zLz%wKNxYyh@eKChO{}FK!dRmYZUPVaN#IWm;fBB>R=WnR<7KoOJQAAN*;cP$oA>cj zfc(Bl6^35+S2A@^ggWsJ&ZbiO;7|x#LY)Ffc|8n0P-Emsm@|d(EPqWyt&z8WN-m~% z?bQ|qp2Hgfmi$4GK6+E{dk+sik0yauw1$2mT32!{Hd;z<46@{-KyT1l>$17~FI>Uf z_=8ubMH%O__P}Y!xMSigID*d&h_}0!aUACjh&LdNlholmc|yGb@2M1(@LwWkGVRmK z7ylo?KD_QBi=xK@>`!-=qn1xc$g^$UOGF8%l^pG*LnVW-#JsN}nQwIiZjICzF=oD zqp5&T<9v3_FiqPR!>Y>qXe{kKlrpUp(nwRZK-BBN?BXX6Ka(lq{wHdIxg+b5+f81X z^aoTjB`$H9Nm?~ws484y!NWF0M_t7{HaG!>ShgHiXW9}Ov1?x8A%EdxvfJeAhz=2aj4;25GzGXILa|beTS*-kU7Rji+l@o`oe-NkjQ#aK{v$R&N3i-Rb*V|A^uGFWJKa`7&91SOQXFe!P6ru(6O6dyBBBb+VwP+N)%lK@%ccQ`%s<`^sDyGI z7jeN32(u2hS_e;g4xK$?WFBGGqhZ^|bJTY)HfI0{J&~}zW&!qaU9YxDvY%iqN1X+t zv)~Y3-1u1agP?KuuqKrX53{g;u jldZo7DG-TAEeb`{h8@+JQgV*nzd+&Sq-gC~IY4oB0<-L3FIlp_( z|NQ^I^E>BWfuL={ZtTG!6ylUqAVPo`0lRs=;uZJ-H8_k4_qrA%*cb-f!fD>8afHVj zwxzW&i*Z&=;B&UK1}Re)waSa%P{ebw4)_68Xu=LvJ%s~0Acg(7hD|t&UAT?GAfO48 z?0FY{!ExMYOVRK!OVFXt$N4*n%XAo~KqYfe1_48;d*MH8S=xmCwhb#QQ#I$)U3)u9^QydGkZC&Pdi`t4N96l)N{+hPvU8;u4L zib=cO77P%lxQB_hK)gaLB$sX-vXSlw_~3_3k$CN>4->|N%#c+Vv7Kp{4^KS@QqS-K z7tnwYg%hYpgX#Z|jB4=}Ul`E;n3y9S zaydz0s{%`9>1VJdop%cS>849o+*GpKoh{-2L-;UCl`Ntfge}2&F)lfomP+KBTyq!k zwc{RXqz!Wv&pb>VI!WT|Uea|yF@Spc$}@(kVIho-I)4nQZxduMMz{0n(oL1J0=Fe!~VRQCo~@ zjv{3SJg5FQ;SQ&L9e*0&mP_6e@?pl*LXta(Cek!X8Min&MrPGN(!?2B3Q$QVPFZSW zh{-OxTvdwF#hl5zb_d`k`$ufZ&dCO9#j2o_#~6dFT+p3q+#eoAv68Piw`}{=erVPc zLl3ZDaY-&^k}y~CDTUMrh*GIN>tL`8N!RR7&rp93UyqR?LQ06W;P z$;u>01W6Lhvoum4N*`MW{~@3nzcag5Kn+K~$ZhK=wJPaseMP8RhN+Kvxx~?x1_3qM zU09)iaTZ#2s9j;G_6SfR-4&K<$%#JcuCP=)z7Qff9|x2&nCvFD2pnY2Y=9P-te}-r zt48vLdis%)HSAYbwh?)(bT?67dXUL3(HbB)fsI|94Nd_a(9BtxS<1=bARy*WyhX~n zV^u-GIi<4jNM?7kkh&5J2U`TLOKfk8p4z@|?&7q|;*>4a{aWc4?s<a(QWUaxOb+lg$Y{g;(rO;(NjDb!Xl*KOT7+t%7@=laYHw>rSq~TF=R~`6Brs zZ#I~$m0G&}PBPtp;7cBPx+uWw+<6oj>QbBzy@IbC&DO`a=+*5y<00000NkvXXu0mjf*{luy literal 0 HcmV?d00001 diff --git a/admin/images/menu-icons/24x24-2x-s7169efa003.png b/admin/images/menu-icons/24x24-2x-s7169efa003.png new file mode 100644 index 0000000000000000000000000000000000000000..e9564f78e13ddf5e9246836803fb1167adaee1a2 GIT binary patch literal 6015 zcmV-_7l7!AP)iz+fQm>B~C?g zP{5U_ha#48KXh_D=Oiq`Smg2w_u*-OfHru^)AhB-bnVsts2nauMZ@tb)V8%S#vkBvOZKW|xWeK5(d^Cl`vGkB-O;xCyMiSc zjAPjoeq&L!aXIfhOk@#N<(W_Wt%HR1dWKco(&3yRa2j@nRoDA@1>dvfSYch%T(ih=`bDA|L$^F3C#n*B)a zvm#99|GEAFHCPx4DbW7@m4IG&2yZa^3hZXG6@CiG;ZJzMzJi?qxzveQ@Rv=Z#;HfQ zD&b~z$DKKl>UPV>z>y!B3dKt3xvot#Po z85r;Ym6o}$n$6*upmk6Yf1nM}%TDUi&)MF`poi}0F>IbwoSb$iKs#o2DcinY%Gp#` zE10usCY$I!8IECill^6Zcfi9q$8yFOO7^NehX)OxRp8I*#B1{mu(Mv(48>xVjed$~ z2(?Wgb}zjtZ%$qGqVnoEstBWeidUF?0QS&Vn8iBy!cY${(4Ae3hAi`HhO^IcFMa1` zTF8!epW(<|OlDc-C3~lSFdR4AmbYF8h3UyLD!TMBa|pmAG&t$xDOP_#KvQb{^wNxN zYDzG`vD)9Ic#TcAtI7YF#IWOP<@E_cuV5jrr=5KQZ}IggbmZ?;qpmXa=CMPH|M_>S zj(dXF!E;P0*KrulyezXYM?3a4F81oJd2w43LDED75HEl-W?jJ2UmO|`cRK54rhp6ZImLvVBF3i%LowBiJj(V!mrj#6gI4SAXEuz6R z4+@-U$*hIVc*f#n1k@TIQr{*4-3)_B)fp2^af^L5!)lgGli90E|2)h~09v?>S!u&k z_gWO9Sl9$M>7$jFFRx{Z-*0fyto8J@>HU|fB3g{)=#c#2XS{6d5U;1DYpwj8 zaW=mnn5~TqC%lgL^_AR(^?$bJD)!P3bSK?_IHoh5%vWD4S}|tPjivN$|D}x}Eu;%= zXr>40MzyDF`xD!cwTs=MjLelY_K{=Hqv(LiKE)1B_%U=G(QaZ)QGQudwSGY~0A+!ti zIuP1QvA_LXHNgM{kWJmx+BTPb$u@hnSLWk;<;&^auLic+%hE%_e#dw$N2?t-IjB3+ zc7#T98kPrKKJk9$p^VAQ05Sj>;5@F9<2e`SGb>BfqSYKe+@=kVxJgA#O*^U*3D+`K zw=1aIw2{PvXOiN66 zYk)PT>|m+Oqx>|}a?6pp*nW^Lb|~S@-$a#8?uc~%et$W8&KvrFjZnLvQ4 z33pMGX(_;`j7P4a+KbcUJV^iYWe@7iT6?df4=$m0l5;7hQ~9C(w0D`(D>c2?Y2len z0b9{j(=egOy9We#?2u!Ow?H#CIl{4ux{Q(QFw&}nS~!LZw>qjYM5)YHRDnMxOX-s3 zOl54&CCaRv-xzfKO6&JCO>80mZ8HYAlIGucq)BPR(D}H4YC<2WZN+ztVoGYnIGC73Gix5zp>1Y{%2tX{-{9}^k zzN=WND&Z;oIYPix2{++MI`7@kiYi*1{ETn#G2XyRN%7-XDSksUrY2}am0g<-y*#ev zRdtst(VjJo%S{Sb;g1Ah8pTVyc5va57HB3G9uvs6~UxUMlQDY`_|N*I%ltGEvFf zb#Z2%79AXe8p<3%Sz*iZL5^m@A}gZN5Y~#6+i8(W z4~Yfy38pjFUt@cdH24p1fzG%JT_x6b7bf}E;cBd9(QIVp>{OI>+((8nMPb)ugqKf^ z+yX7N=^v#M6|p+DQjh8E+qLGjAphTbUL-xMY(Ge%nWvU-~Fr(lwGsi^C!iepttQP$boa86vA5?!hc=*UjlK5aN> zJG0)Z_=PTGc7>{c>LGAD4Fjmo8c~(3zzocG8jcTI#dj*}&}6B`E4~OXI^8D;1~?;` zeL@Pb(snseK)_&|WA};##B5!8fkpHrdRvY?C=##`LrodZu+&P(Rx}ceaWkE^8jLbm zVVdLIix8UVVKzCF2o0Bt81p#K6 z-v3!_9ZWafwO!}MZT1ehlCG>#?h@IGnpxJD{-DhS76Qn%nfZ0M$bPWcvZiI5?Nqsd zfDg54mU!ud!qtFQ=0RNk8h6hbIu>T=O zo9@Cn_yzJ(!%Ge3@c`9NUcGDkkXVD0Wx9|2xXo12P=H~E zC3~=$sT>MW#kioH4%a@hfKetV@jkIezYYc(-aqHO`Z5^6++XhjL;{+b9Nd|~?j|?` zCL7+Bdoz&U0j+VC;r(2iNTC4pRN{SrSU?YpZatNeuko8@VE~QIV-8qCHTRCPp0^&l zq9Ohg4q&G-|H_nVQzhYwXthCy+V$~}b?~AqV28GyL5S zB6{-YxDc;9%vYNy0suD36EV&-^9*dLxBKaK?)G2cFIyPyGb7*VdnY)tZJG}Enx zs)nj;GaC>`Exu}trnr%T(>E-@&&=92=KBhIpf3x^xI!}zbk^uy9nP=flT!aI2PkQuUc$IKf6B$VYzp}C3xQFREUmPh9OQ4rDO?=e0px0 zjA6}OpB^yMu)mc*xsE|@FL%J*A+lGE(o2?5R|mKtVBr{J={4r)ApxkKT4WbWMo>>J zvjfZ&Hq-8n2cWPUe=l~NTQbu5G${~;eodn-eu1Kf(2|eI15G{lC zfJ)w1OM8|kG*xR7fYXKF3s)o4B%mvzkkeB|)HV`8^Aw;_B!K!fwtH1T%}4;1iO>L5 ze0?$QdE#H?L=pL!DcFTxk=OILB>=@f4CIQ$E@74Jws-DLaFgen*ehYN*L{3+Lpg6NVCf|mCMv{FQ=Bt30aj(r%|L`(TUOueK#aJ5wU~J0q`j*8s zR&e$k<%RSq-}G_Xw!T6EgUsIbwe(PX3CsQyhQXHj;9|U}ZCevwdfP`h1q|zk3&_4t z%HUW%%SH56!!_EGsa0L}oAb0}v~#-;Lu8ck7@9s#ei#!N(-)Zb)Qoxh^+UZy`uo^$ z<)(WMO?`6)6?q;2rMN-clFQ>@h`cq%N+q1Aj@rnz-RDHF7;aWJKkx-e$R6jth!y#g zA>=Io!#PeSQ(shjF(1>E-I^c@aEMm01Uu=3ea-&*v2KG#SHRiq!<|r<74;qFVv5UH z`;Q(r;W7a#V!CcHza}~}<{!@Xygz)GmXv>ASi-)Pkt27 zQa`58J`h4xc3!g&fY956ws-|iJ$%O(LJ#QbDSMv?J>Ur(<@uhyXN1vY4hKXd%r;p# z!fNydBka5ip$Mn#M};Ar{32lpXU9tr!p*Z2f^c^o1t8M-rlAq(o!^iMFW$93#Bw!0 z_UFEPLF~c{47GYPN(}%=k9djU(;n1gkkt-N^wV^`2Ow^U_1gGAA^r6BxJ$pAx}ONg z8BwSUVqZgFUQKDR5XuhmJ=XAFj+W(Y#%$GaJ)R00qnQyi(Z`g}1l)rm!2w1@k(NDl z6KTd1&?GgNCrFez9C58Xjkfu88w2w5=*nFj93YR#s8`a44yW~I`$Giuq64uzI3R(z zl<6ZpjaLoZiG74EXn;ZLjo;w2_eWqYZbEl-V;Y00?8m97ZU7_y!C?VV_9s6D{n*Ls zVJOq<4Bu5XA#Yz=o6+4n;nyF0iGi%pt8oKS7b~N$qZyPvtbBI22!J{g^CVMuUP~Xe z(9LH)1IObBaVsc3V7d#};yT@}zah9q>=KPFtojjbSvTT*<^7GK0jj*l)QXv3$%-Bs z)gqJCxQ*><5IRV4L?-*?$#R*6pZ^Vj*hIVMQ3;a+l4+y42#TmE(%lk@{@*Hj3pJlu zc?9`-z>ai}+wd*78UfRdH&IQz#`Oyd<`r<;zW4}FaoizYeDcqyP` zZq!->G1;+wxc~+^ZqhIli<9>>bJ;(-(pewqAK>=Pv-h;e7qn#d$7|unJN^JyTDBI} zODpz|zp>T4nY^d@FDi(gegNqv=ibd`d4)ljzVGyqLOZ~D9`-viKdJF#jHSEl5%6$8 z3%0=U^iM}Xr@*rx-=y8xnI14Qu#t@M8rr4MxAQ} z)I}AnM3|r_hY|D3`kU}Zz%N4PNma1B0(Ietm@SeH>T*m1YAVZNL~SA&SH>y~fQEu5 z*Z&?NROEZ9O^P^#iVw_$u^E6UfF~_6P%)>&wRPjKXai?M-v5re8 ztsSh0igo|P`GLT4gnw99@-N!o-=YGvLuaK;G>8h&-^(+559>Nug>M)cmovnz9}Qrl zwgP^p=>fLF07q$mD@RpCS$?!jm`aX$`78{;?UB02iU1772@U~lR_cat7{J^9>Yy8gQGXZJ*?cUq-QdP2z|FHR6`?BJ9&S`30`R*kyTr2j!l(c(=ugNG9_$_! zpn33Fvxi9?tjAMI5p}hhfGh;CTJz<8hzgKcHCX?!u7e!c0RjO4Hw#-u1Yj^~Ihv1O zMF76lJrnIPiEz$FLq`*}G4c4|Fo01uyTm2rv&3!}VE~0LfNdg*sNBnEK>%^n-^e1I z{ZRq><5a~p>>L%KJ=2jL;Y`I#iurlai#rws@VVAYH$?@gWimrYQXNz_SdMBgXXXV1 z>`?|e5_c=Nr-nQ%vcm%K)bA%6hVCyvV*9~i2Jkte{{$-7+y)kQ1-C1Eb#L~wjgKF| zE!r+iBN?-e5f2!Eamm-CQHICG0{WRI49L6VsM|80hFg=JD2B=ELoEFQuEW!oW8+y+ z@_qa^h7PwR2;gdmow_FTDxNjXL)h)Vi29gU9P4BXzQM|Hb-Z0OL#DW3Nb6(UeLRIug^Ay&QfNoe2rMm7CU?-G>6r~4rWYY^S zwbKFGyX@xZMIOQmV-7|@8+vWw?kVTtQ~KV^>;bK)szjL3&(Q&2S^>?;6*D0*i$An| zVs>Ey&;-i`KK3OCOVLi<$x8*~GkdYmY^=ocXeSTn%76y=BJjhq+{QPSG0fc{;e5=E z$R(;a}gW2fu6 zx}690YoR`K9X~P3%}kkABpeW1A85|q({@v+-nLuB5x$w$!SmRqJihEqe1LP!4=o4}kYkEBaiy|xqa5G$Fiy=14^Sr* z%wYiY7Mh|pKEYYevzCL%F(^=a){j({^2Rbv8AA0?p7bCHP|Nf{4|!6}!jzvI29V{b zTIz`@q7u646-_EAhC#F{`$Pfk1~)G^nl16_x`OC_kTIDVKn9QjWB?gJ29N<{02x3u zfH=bLbyFVo6~x>D^-?#e0!n>nKvm^^GXYmo)gDkNYzbwNEg;?`(+_?hK(g5mKyS1R zGe0>g`>_VEVWQgQ)GKI(SpuIyk%u}s6Spv8Ua11|*|~CrmrYZw;E(=R2D}$R_NvmD zhkOZ_dEVXEzcfT&$?|kkvC>a++6F?9G?xV52{%iwBl#`5>pFvUJGHp1V^v6!QnNCMt z+g+2x$}l{W=m%r44EI`|-yTL5VuZSwCehJ8V#+tT@6DC{l=U*rdA~7>`@X@hCvQs4 zEmOi#Bj8+e75)_3;5d5kOMJ{W${77H@^67iV-V)K{#^h7002ovPDHLkV1k3ersn_v literal 0 HcmV?d00001 diff --git a/admin/images/menu-icons/24x24-2x-sccfd928e17.png b/admin/images/menu-icons/24x24-2x-sccfd928e17.png deleted file mode 100644 index 82d45839cbfe86ef292cfcd7f9f6f05f3068df8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5981 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 LNkvXXu0mjfYpF#C diff --git a/admin/images/menu-icons/24x24-s0dc15c36f9.png b/admin/images/menu-icons/24x24-s0dc15c36f9.png deleted file mode 100644 index 5ed8fc993d6a0e5f19bfe5ac601a1813baafa79b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2394 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 M07*qoM6N<$f;py>RsaA1 diff --git a/admin/images/menu-icons/24x24-s391afdd013.png b/admin/images/menu-icons/24x24-s391afdd013.png new file mode 100644 index 0000000000000000000000000000000000000000..b1fd07bb9eca0ddba7032d48f8546b0a1682843b GIT binary patch literal 2391 zcmV-d38?moP)qq`Z84>WIcC?1wlQ0zmd2T2iYZ3osHG`Y z)LBtMo47`*XlOzmHTy#aDvRs(VxV_towNg z1q``>88e{XB>~>Vet+h6kMT;tVG7b2D{c5=lrJ)nVmU%(tUBQ5Ed z>h3hQ<5b*gyph8QHY##CYSi6votY)^Bg}wR^neZO?mC{rcW_YMpTH5E(*rL0>KY>C zIwe%A3~|T=XrYXH)L&b1jVsiur<3kV8o(?qvr%oT3BUEfeF{@aY?WX!M97ObQV%(o z7w7Itu3-es(yXsix4XITS*)g>AHj`eJvb(Iie4~Ca^M%qTMCT%3wAtM4n5#Gbdv4; zCR?h*OO!}IM%`!2lnR&NKnU<-?4TNVI)L3O5}oz|b?&+~p}=sG&zd|yO>A>hxU6)3 z+J90L-O^Dit&!#ie}$cR1s~$iw5WpXE4}1u!U5D{FWvsvSjYP_Dxkc{{W~L%uc*&G zrW1az9X_QTXI$L5C@_i=?#Fqpf zW-P69&j6^SDXa%MMya-bH&AaDoVVx#{-XY$U@Y>q-Wvge3NGn*C?$o3o08HDBe!IE z&Peq>*K#P;$D??GY!3OSXXTinoSMnWJ_k^gju9HC7;si9vf)rfxnSlYkFPDVX*7_B zCT{E!k6a7DO8m~%>?%9JF_*lgQU*bXFD3)BKKU^JdW~-Ra1ul)^#|meR8o=v5sU^K zBjirpFhT^nsN>NPc?v|(g63l6i4ft2-)zM<28eJ&;r$F~^)?XCG-hlefh}1=!p3I> ziCU`#ByQej$U`cv)A&Orq`(8~L8eD%Ob!%>^w4Q%m@J+#dt3l1Fs$8BK7EiS!lci}t zlB}DYOws2%(g4oxPw`qq4i*?+92}jkCl}9h&$E0ssx$8fyg{aP1>guZusv8uxR2kiFt}iB<8%*s5TSPdMgqAU z>zIXa4*+{B@{P*T&K&$LFa7DX66|wW>i`}L=UWLQ>uqUMwFk=bY610&kL7}a9_DZ_O}r_Ed|C!I;b$;wS%mev*&nnyPK%7+A{0)JGMubu<*?jO3d2FI zg;A=)G#2RaqngNcglS9BCSS@kYFwhG@-_)p4qwJ$dUHGD(K)+}tj}%hoVEqj>S&Sx z`)FeuxV4kEfH`cwg#|~SYrz>ifL8_<>{eL9bW6AbwE)QM%?ewtREzXSfN*wTldQvjy`68yUO>S*C zYX>;&_xh}CX%+p;@wF*CzytmvzneZ*l%c`@F$aEm0|Z`~T%-hR&9p>mMddFU@x0`|uE5q|7$ z;yP_{Kz#mq_C4)s#{=w1vD+GVz!O#MCxa(G9Szzau<*MV zcUsW?6Yt`PC||_IjG!gfrRZTE@0D4=ip=`*7;pY)DcAJ^S2FMMw7fx02D25*Wqz4q z)Cg8wN^4ky6_V){yjmj@{VVei{{KbXVJoFOLZ$wHF4pQQ#k{~bSW&O0CZt&JG-^PK z^<9=$7ex85IOYrO^Ljm$KMHLr^9p{3Ka@XK=Kc}qnK$a-bND)bA{aH>@L}fn5k1HY zG0iXK=I`>PbQivTJDK;-jX|Jtl<}%4w`O)#7iMH2AJb=Fy0EcGOv@@_4qdi@po83H zThch>oeHv>hc76}33Evkw0AnyQ6<|IU)2LD+u5C_CbOR0sf!E%J-LzTH1cfpmk8;z z%byl>c>uf3I6@||<=#DrJ-GuZ38sXX$x^!oc|T@kTpD(nN*`mgm#DYaS!D>#x|pa3 zOsJG?+#YZn9J}#XD@F5D2QaLSOfCO2sRQsN4kUEn!rh<_*%;gs?H?tKWi0*I3RXDP zj6FizfH#jd)iPc8>B#wRH^72mGE!FsU|L|v@`Z&nhJ^Z&kZoV!JdVpB7Tk~Z1j+8Y z*Z-c>^ks^;Cc~R>gW#B3^*5@x_dR_FPA?_dHqYCOwZv`BRHKKESOXyi(Dq+6jh7fB zj;b6inl2dub>?^Mi)O9+^)E`yfI*ckjN1cp&il7p?s50%0j&|^8;)#D3mA-$4BukY zs8wyLMpOHu5>TT&yxx9=yn5R=u*f`wr8I8?Xj?o@TRYHAtWc|c37G)s)CXxZ;D`zW zAJ_v5dgHiBrd#FvNKHFXdPi@#7aFY4ZD<1zUd8nplb002ov JPDHLkV1m+?m^}ah literal 0 HcmV?d00001 diff --git a/admin/images/sprites-32x32-2x-s6ccfbe50f9.png b/admin/images/sprites-32x32-2x-s6ccfbe50f9.png deleted file mode 100644 index 9b3a8bc255f45a5461e2d0169fa3aff36d68e39d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9066 zcmbW7Wn5fOmiOt#g1c*QcMooXAi>>Tg1ghfg9U5c-5YlajRXts1P!hU?#s-7=GmQ{ z-F@-Ay7jqrKd0=T^F8&eic(R2kA_T)3Jo-^YLP+LJO7r}t0eD{#u5FD&N&+S-3M{2S;t2Ajn5|N8OI8Ug8mtGJKIn!@Jf z&wsWhYX=}iCUHLJ#8p3?7MXa4guO*l(GkZvF%GoQ3Bs3d_#nxJTKTrNSpR6}6Hb~r z`I~=??VmRPQFqMyYRM$=zrB6^HlnQ7=vlD{8YZy>Tz=r16?fk)8jgS{5v6a~etE(B=-n^#1iU@4MMD7vcm+q&V)y~NmnaLs`1bS9 zQqQ@f+p(1v+_H_OHiZnSu$>?qh3cULd#`9VoB+wwmjY&U9dU}}@g|{-z~PY*wQBtq zHP#G%?KVNd3YTr!=XHP4?K)mwUc0lku8MlsmWstT^%SR{6?_iMG3)0AaRg5ht2bCn z%2?-hH85ZpL-x!ErAY)d;<6vvLKSgj@5*+^Gh{mP_axnZSvK0b&4Sij99K%_t8^L7Ko2x_w!If9Am_d11T3V{mj`yEyvQLHOB&^(!k$51R(GGYC zh|;V7l)l_hip=hw7`)Cl*_DXQk{4om;S`FN?IHr#=yYb}5`v&$WmR&x)|Gj<+Lol( zX;H3MXI5NMS$V`bx$^5=4)DUV*$aH9#^*#Otdzl{DusZdF`mJv^huS9y*{YNT%#17 zY~Rm7neDto znY*vAN4-06K$@8tSoVdwY>4alm%_%0DHj(w5!H#ff2X_}&^E4|tLz#2Si1tc)(sUQ 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 diff --git a/admin/images/sprites-32x32-2x-s72b74f4cc4.png b/admin/images/sprites-32x32-2x-s72b74f4cc4.png new file mode 100644 index 0000000000000000000000000000000000000000..7fdbaca555391f9aaa5298d8d9ca78a3e058b1ab GIT binary patch literal 9088 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 literal 0 HcmV?d00001 diff --git a/admin/images/sprites-32x32-s47450c5f5b.png b/admin/images/sprites-32x32-s47450c5f5b.png deleted file mode 100644 index 8c9df7eaf21a6dc1d52235bffe4fc3f5b720e5d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18703 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 literal 0 HcmV?d00001 diff --git a/admin/images/sprites-64x64-2x-s0fe1d92f9d.png b/admin/images/sprites-64x64-2x-s0fe1d92f9d.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3a166575db110c317eb95541576c384a571cf7 GIT binary patch literal 2878 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 diff --git a/admin/images/sprites-64x64-s88957ee578.png b/admin/images/sprites-64x64-s88957ee578.png new file mode 100644 index 0000000000000000000000000000000000000000..458b7520ae1f01132854d861b70cabb4cef11c4b GIT binary patch literal 3059 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 literal 0 HcmV?d00001 diff --git a/admin/javascript/LeftAndMain.BatchActions.js b/admin/javascript/LeftAndMain.BatchActions.js index 7eed870a3..5fcf1b5f4 100644 --- a/admin/javascript/LeftAndMain.BatchActions.js +++ b/admin/javascript/LeftAndMain.BatchActions.js @@ -40,7 +40,8 @@ }, /** - * Register default bulk confirmation dialogs + * @func registerDefault + * @desc Register default bulk confirmation dialogs */ registerDefault: function() { // Publish selected pages action @@ -115,60 +116,15 @@ }); }, - /** - * Constructor: onmatch - */ onadd: function() { - this._updateStateFromViewMode(); this.registerDefault(); this._super(); }, - 'from .cms-content-batchactions :input[name=view-mode-batchactions]': { - onclick: function(e){ - var checkbox = $(e.target), dropdown = this.find(':input[name=Action]'), tree = this.getTree(); - - if(checkbox.is(':checked')) { - tree.addClass('multiple'); - tree.removeClass('draggable'); - this.serializeFromTree(); - } else { - tree.removeClass('multiple'); - tree.addClass('draggable'); - } - - this._updateStateFromViewMode(); - } - }, - /** - * Updates the select box state according to the current view mode. - */ - _updateStateFromViewMode: function() { - var viewMode = $('.cms-content-batchactions :input[name=view-mode-batchactions]'); - var batchactions = $('.cms-content-batchactions'); - var dropdown = this.find(':input[name=Action]'); - - // Batch actions only make sense when multiselect is enabled. - if(viewMode.is(':checked')) { - dropdown.trigger("liszt:updated"); - batchactions.removeClass('inactive'); - } - else { - dropdown.trigger("liszt:updated"); - // Used timeout to make sure when it shows up you won't see - // the native dropdown - setTimeout(function() { batchactions.addClass('inactive'); }, 100); - } - }, - - /** - * Function: register - * - * Parameters: - * - * (String) type - ... - * (Function) callback - ... + * @func register + * @param {string} type + * @param {function} callback */ register: function(type, callback) { this.trigger('register', {type: type, callback: callback}); @@ -176,46 +132,24 @@ actions[type] = callback; this.setActions(actions); }, - + /** - * Function: unregister - * - * Remove an existing action. - * - * Parameters: - * - * {String} type + * @func unregister + * @param {string} type + * @desc Remove an existing action. */ unregister: function(type) { this.trigger('unregister', {type: type}); - + var actions = this.getActions(); if(actions[type]) delete actions[type]; this.setActions(actions); }, - + /** - * Function: _isActive - * - * Determines if we should allow and track tree selections. - * - * Todo: - * Too much coupling with tabset - * - * Returns: - * (boolean) - */ - _isActive: function() { - return $('.cms-content-batchactions').is(':visible'); - }, - - /** - * Function: refreshSelected - * - * Ajax callbacks determine which pages is selectable in a certain batch action. - * - * Parameters: - * {Object} rootNode + * @func refreshSelected + * @param {object} rootNode + * @desc Ajax callbacks determine which pages is selectable in a certain batch action. */ refreshSelected : function(rootNode) { var self = this, @@ -232,7 +166,7 @@ } // If no action is selected, enable all nodes - if(selectedAction == -1) { + if(!selectedAction || selectedAction == -1) { $(rootNode).find('li').each(function() { $(this).setEnabled(true); }); @@ -267,10 +201,8 @@ }, /** - * Function: serializeFromTree - * - * Returns: - * (boolean) + * @func serializeFromTree + * @return {boolean} */ serializeFromTree: function() { var tree = this.getTree(), ids = tree.getSelectedIDs(); @@ -282,20 +214,16 @@ }, /** - * Function: setIDS - * - * Parameters: - * {Array} ids + * @func setIDS + * @param {array} ids */ setIDs: function(ids) { this.find(':input[name=csvIDs]').val(ids ? ids.join(',') : null); }, /** - * Function: getIDS - * - * Returns: - * {Array} + * @func getIDS + * @return {array} */ getIDs: function() { // Map empty value to empty array @@ -304,13 +232,7 @@ ? value.split(',') : []; }, - - /** - * Function: onsubmit - * - * Parameters: - * (Event) e - */ + onsubmit: function(e) { var self = this, ids = this.getIDs(), tree = this.getTree(), actions = this.getActions(); @@ -395,12 +317,39 @@ } }); - + + $('.cms-content-batchactions-button').entwine({ + onmatch: function () { + this._super(); + this.updateTree(); + }, + onunmatch: function () { + this._super(); + }, + onclick: function (e) { + this.updateTree(); + }, + updateTree: function () { + var tree = $('.cms-tree'), + form = $('#Form_BatchActionsForm'); + + this._super(); + + if(this.data('active')) { + tree.addClass('multiple'); + tree.removeClass('draggable'); + form.serializeFromTree(); + } else { + tree.removeClass('multiple'); + tree.addClass('draggable'); + } + } + }); + /** * Class: #Form_BatchActionsForm :select[name=Action] */ $('#Form_BatchActionsForm select[name=Action]').entwine({ - onmatch: function() { this.trigger('change'); this._super(); @@ -408,15 +357,11 @@ onunmatch: function() { this._super(); }, - /** - * Function: onchange - * - * Parameters: - * (Event) e - */ onchange: function(e) { - var form = $(e.target.form), btn = form.find(':submit'); - if($(e.target).val() == -1) { + var form = $(e.target.form), + btn = form.find(':submit'), + selected = $(e.target).val(); + if(!selected || selected == -1) { btn.attr('disabled', 'disabled').button('refresh'); } else { btn.removeAttr('disabled').button('refresh'); diff --git a/admin/javascript/LeftAndMain.Tree.js b/admin/javascript/LeftAndMain.Tree.js index 625a4b353..ad198238c 100644 --- a/admin/javascript/LeftAndMain.Tree.js +++ b/admin/javascript/LeftAndMain.Tree.js @@ -487,26 +487,5 @@ return this.data('id'); } }); - - $('.cms-content-batchactions input[name=view-mode-batchactions]').entwine({ - onmatch: function() { - // set active by default - this.redraw(); - this._super(); - }, - onunmatch: function() { - this._super(); - }, - onclick: function(e) { - this.redraw(); - }, - redraw: function(type) { - if(window.debug) console.log('redraw', this.attr('class'), this.get(0)); - - $('.cms-tree') - .toggleClass('draggable', !this.is(':checked')) - .toggleClass('multiple', this.is(':checked')); - } - }); }); }(jQuery)); diff --git a/admin/javascript/LeftAndMain.js b/admin/javascript/LeftAndMain.js index 8e424f123..f6802874d 100644 --- a/admin/javascript/LeftAndMain.js +++ b/admin/javascript/LeftAndMain.js @@ -1401,6 +1401,47 @@ jQuery.noConflict(); }); } }); + + /** + * CMS content filters + */ + $('#filters-button').entwine({ + onmatch: function () { + this._super(); + + this.data('collapsed', true); // The current colapsed state of the element. + this.data('animating', false); // True if the element is currently animating. + }, + onunmatch: function () { + this._super(); + }, + showHide: function () { + var self = this, + $filters = $('.cms-content-filters').first(), + $container = $filters.closest('.cms-content-fields'), + collapsed = this.data('collapsed'); + + // Prevent the user from spamming the UI with animation requests. + if (this.data('animating')) { + return; + } + + // Slide the element down / up based on it's current collapsed state. + $filters[collapsed ? 'slideDown' : 'slideUp']({ + complete: function () { + // Update the element's state. + self.data('collapsed', !collapsed); + self.data('animating', false); + } + }); + + this.data('animating', true); + }, + onclick: function () { + this.toggleClass('active'); + this.showHide(); + } + }); }); }(jQuery)); diff --git a/admin/scss/_ModelAdmin.scss b/admin/scss/_ModelAdmin.scss index ff019de8b..be339e6fb 100644 --- a/admin/scss/_ModelAdmin.scss +++ b/admin/scss/_ModelAdmin.scss @@ -1,9 +1,16 @@ .ModelAdmin .cms-content-fields { - overflow:hidden; //removes scrolling from filter panel .cms-edit-form { overflow-y:auto; //adds scrolling only to the datagrid overflow-x:hidden; } + + /** + * DEPRECATED: + * .cms-content-tools will be removed in 4.0 + * Use .cms-content-filters instead. + * + * Hide certain elements when shown in "sidebar mode" + */ .cms-content-tools .cms-panel-content { .cms-search-form { .resetformaction { @@ -13,5 +20,9 @@ #Form_ImportForm { overflow:hidden; } - } + } + + .cms-content-filters { + padding-top: 16px; + } } diff --git a/admin/scss/_fonts.scss b/admin/scss/_fonts.scss new file mode 100644 index 000000000..b5d540d5b --- /dev/null +++ b/admin/scss/_fonts.scss @@ -0,0 +1,37 @@ +@font-face { + font-family: 'fontello'; + src: url('../font/fontello.eot?33987583'); + src: url('../font/fontello.eot?33987583#iefix') format('embedded-opentype'), + url('../font/fontello.woff?33987583') format('woff'), + url('../font/fontello.ttf?33987583') format('truetype'), + url('../font/fontello.svg?33987583#fontello') format('svg'); + font-weight: normal; + font-style: normal; +} + +[class^="font-icon-"], +[class*=" font-icon-"] { + &:before { + display: inline-block; + width: 1em; + margin-right: .2em; + text-align: center; + text-decoration: inherit; + text-transform: none; + font-family: "fontello"; + font-style: normal; + font-weight: normal; + font-variant: normal; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } +} + +.font-icon-search:before { + content: '\e800'; +} + +.font-icon-list:before { + content: '\e801'; +} diff --git a/admin/scss/_forms.scss b/admin/scss/_forms.scss index 2f2f2dd9f..3da0c8ec7 100644 --- a/admin/scss/_forms.scss +++ b/admin/scss/_forms.scss @@ -911,3 +911,144 @@ fieldset.switch-states{ } //old web-kit browser fix @-webkit-keyframes bugfix { from { position: relative; } to { position: relative; } } + +//Styling for filter/search dropdown +.cms-content-filters { + fieldset { + margin-left: -16px; + margin-right: -16px; + } + + .fieldgroup { + width: 50%; + display: inline-block; + max-width: 440px; + padding-right: 16px; + padding-left: 16px; + margin-bottom: 16px; + box-sizing: border-box; + margin-right: -2px; + vertical-align: top; + + .first { + label, h1, h2, h3, h4, h5 { + display: block; + width: 176px; + padding: 8px 8px 6px 0; + line-height: 16px; + font-weight: bold; + margin: 0; + font-size: 100%; + } + } + + .field { + width: 100%; + padding-right: 0; + padding-left: 0; + } + + .fieldgroup-field { + position: relative; + margin-right: 0; + width: 48%; + display: inline-block; + padding: 0; + + .description { + margin-top: 24px; + } + + label { + position: absolute; + top: 28px; + font-style: italic; + color: #777; + font-weight: normal; + } + + &.first { + width: 100%; + float: left; + } + + &.last { + padding-right: 0; + float: right; + } + } + + .fieldgroup { + margin: 0; + padding: 0; + } + } + + .field { + border: none; + box-shadow: none; + width: 50%; + max-width: 440px; + display: inline-block; + margin: 0 0 8px 0; + padding-right: 16px; + padding-left: 16px; + padding-bottom: 0; + box-sizing: border-box; + margin-right: -2px; + vertical-align: top; + + label.left { + text-shadow: none; + padding-bottom: 6px; + } + + &.dropdown { + float: none; + display: inline-block; + } + + .chzn-container { + width: 100% !important; + max-width: 100%; + } + + input.text { + max-width: 100%; + } + + &.checkbox { + display: block; + } + } + + .importSpec { + margin-bottom: 8px; + padding-left: 16px; + } + + .description { + margin-left: 0; + } + + .middleColumn { + width: 100%; + margin-left: 0; + max-width: 100%; + } + + .Actions { + margin: 8px 0 16px; + } + + @media screen and (max-width:767px) { + fieldset { + .field, + .fieldgroup { + width: 100%; + max-width: 100%; + } + } + } +} + diff --git a/admin/scss/_ieShared.scss b/admin/scss/_ieShared.scss index 342344de9..6af668540 100644 --- a/admin/scss/_ieShared.scss +++ b/admin/scss/_ieShared.scss @@ -117,7 +117,13 @@ } -//fix for model admin filter styling +/** + * DEPRECATED: + * .cms-content-tools will be removed in 4.0 + * Use .cms-content-filters instead. + * + * Fix for model admin filter styling + */ .ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content { #Form_ImportForm { div.file { diff --git a/admin/scss/_style.scss b/admin/scss/_style.scss index 3a4f776b4..241bd9715 100644 --- a/admin/scss/_style.scss +++ b/admin/scss/_style.scss @@ -79,6 +79,11 @@ body.cms { .cms-menu, .cms-content, .cms-content-header, +/** + * DEPRECATED: + * .cms-content-tools will be removed in 4.0 + * Use .cms-content-filters instead. + */ .cms-content-tools, .cms-content-fields, .cms-edit-form, @@ -157,6 +162,80 @@ body.cms { } } +.cms-content-header-top { + @include inline-block; + width: 100%; +} + +/** ------------------------------------------------------------------ + * Filters available in the top bar. + * This is a togglable element that displays a form + * used for filtering content. + * ----------------------------------------------------------------- */ +.cms-content-filters { + display: none; + width: 100%; + margin: 0 0 0 -16px; + padding: 16px; + background-color: #dddfe1; + + .cms-search-form { + margin-bottom: 0; + } +} + +.cms-content-view, +.ui-tabs .cms-panel-padded .cms-content-view.ui-tabs-panel { + padding-top: 16px; +} + +.cms-content-fields { + padding: 0 16px 16px; +} + +.cms-tabset-nav-primary { + @include inline-block; + vertical-align: middle; +} + +/** ------------------------------------------------------------------ + * Buttons that use font icons + * ----------------------------------------------------------------- */ +.ss-ui-button.icon-button { + vertical-align: middle; + margin-right: 2px; + padding: .3em; + font-size: 1.4em; + letter-spacing: -3px; + text-shadow: none; + line-height: 1em; + background-color: transparent; + background-image: none; + border: 0; + + &:hover, + &:active, + &:focus { + border: 0; + box-shadow: none; + background-image: none; + outline: 0; + } + + &:hover, + &:active { + background-color: #b6b9bb; + } + + &.active { + background-color: #b6b9bb; + } + + .ui-button-text { + display: none; + } +} + /** -------------------------------------------- * Tabs * -------------------------------------------- */ @@ -177,9 +256,6 @@ body.cms { &.cms-edit-form { padding: 0; } - &.cms-panel-padded { - padding: $grid-y*2 $grid-x*2; - } } .ui-widget-header { @@ -659,55 +735,28 @@ body.cms { } } - /* smaller treedropdown */ - .chzn-container-single .chzn-single { - height: 26px; - line-height: 26px; - padding-left:25px; - color: darken($color-dark-grey, 15%); - @include background-image( - linear-gradient($color-button-generic, darken($color-button-generic, 10%)) - ); - font: { - size:13px; - weight:bold; - } - text-shadow:darken($color-text-shadow, 10%) 0 -1px 1px; - box-shadow:none; - &:hover { - @include box-shadow(0 0 5px darken($color-button-generic, 20%)); - @include background-image( - linear-gradient(lighten($color-button-generic, 2%), darken($color-button-generic, 8%)) - ); - } - - &:active { - @include box-shadow(inset 0 1px 3px darken($color-button-generic, 60%)); - } - - span { - padding-top:1px; - } - - div { - border-left:none; - width:100%; - } - - div b { - background: url(../images/sprites-32x32/menu-arrow-deselected-down.png) no-repeat 9px 11px; - float:right; - width:24px; - } - } - .ss-ui-button { margin-bottom: $grid-y; } + + .cms-actions-buttons-row { + clear: both; + } + + .cms-actions-tools-row { + clear: both; + } + + .tool-action { + display: none; + } } - -/* -------------------------------------------------------- +/** + * DEPRECATED: + * .cms-content-tools will be removed in 4.0 + * Use .cms-content-filters instead. + * * Content Tools is the sidebar on the left of the main content * panel */ @@ -885,6 +934,14 @@ body.cms { /** * CMS Batch actions */ +.cms-content-batchactions-button { + @include inline-block; + padding: 4px 6px; + vertical-align: middle; + @include background-image(linear-gradient(top, #fff, #D9D9D9)); + border: 1px solid #aaa; + @include border-radius(4px); +} .cms-content-batchactions { float: left; @@ -911,75 +968,56 @@ body.cms { vertical-align: middle; display: none; } - - fieldset, .Actions { - display: inline-block; - } - #view-mode-batchactions { - margin-top: 2px; - } } - &.inactive .view-mode-batchactions-wrapper { - border-radius: 4px; - - .view-mode-batchactions-label { - display: inline; - } - } - - form > * { - display: block; - float: left; - } - - form.cms-batch-actions { - float: left; - } - - &.inactive form { - display: none; - } - - .chzn-container-single { - display: block; - - .chzn-single { - border-radius: 0; - @include background-image(linear-gradient(top, #fff, #D9D9D9)); - - span { - padding-top: 0; - } - } - } - - - .cms-batch-actions { - .dropdown { - margin: 0; - .chzn-single { - padding-left: 8px; /* use default size without icon */ - } - } - .Actions .ss-ui-button { - padding-top: 4px; - padding-bottom: 4px; - height: 28px; - margin-left: -1px; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - - &.ui-state-disabled { - opacity: 1; - color: #ccc; - } - } + .checkbox { + margin-top: 2px; + vertical-align: middle; } } +.cms-content-batchactions-dropdown { + @include inline-block; -#Form_BatchActionsForm select { - width: 200px; + // Context specific rules for when batch actions are in the SiteTree panel. + .cms-content-tools & { + width: 100%; + } + + fieldset { // The dropdown element wrapper + @include inline-block; + width: 200px; + + .view-mode-batchactions-label { + display: inline; + } + + // Context specific rules for when batch actions are in the SiteTree panel. + .cms-content-tools & { + width: 82%; + } + } + + .dropdown { // The 'select' element + width: 100%; + height: 32px; + } + + .Actions { + @include inline-block; + + // Context specific rules for when batch actions are in the SiteTree panel. + .cms-content-tools & { + width: 16%; + } + + padding: 0; + } + + .action { + width: 100%; + height: 32px; + margin-bottom: 0; + } } /** -------------------------------------------- @@ -1188,6 +1226,12 @@ form.member-profile-form { } } } + + /** + * DEPRECATED: + * .cms-content-tools will be removed in 4.0 + * Use .cms-content-filters instead. + */ &.cms-content-tools .cms-panel-toggle { &.south { border-top: 1px solid darken($tab-panel-texture-color,10%); @@ -1277,13 +1321,6 @@ form.member-profile-form { } } -.cms { - .cms-panel-padded { - padding: $grid-y*2 $grid-x*2; - margin:0; - } -} - /** ------------------------------------------------------------------ * Dialog * diff --git a/admin/scss/_tree.scss b/admin/scss/_tree.scss index 35c89e729..097548429 100644 --- a/admin/scss/_tree.scss +++ b/admin/scss/_tree.scss @@ -593,7 +593,13 @@ background-position:-60px -19px; } -/* ensure status is visible in sidebar */ +/** + * DEPRECATED: + * .cms-content-tools will be removed in 4.0 + * Use .cms-content-filters instead. + * + * Ensure status is visible in sidebar + */ .cms-content-tools .cms-tree.jstree { li { min-width: 159px; diff --git a/admin/scss/_uitheme.scss b/admin/scss/_uitheme.scss index 11a57139b..ba4a10501 100644 --- a/admin/scss/_uitheme.scss +++ b/admin/scss/_uitheme.scss @@ -91,7 +91,7 @@ overflow-y: auto; /** sorry about the !important but the specificity of other selectors mandates it over writing out very specific selectors **/ - &-loading { + & .loading { background-image: url(../images/throbber.gif) !important; background-position: 97% center !important; background-repeat: no-repeat !important; diff --git a/admin/scss/ie7.scss b/admin/scss/ie7.scss index 0cff041d2..e6c31cad2 100644 --- a/admin/scss/ie7.scss +++ b/admin/scss/ie7.scss @@ -240,7 +240,13 @@ table.ss-gridfield-table { -//fix for model admin filter styling +/** + * DEPRECATED: + * .cms-content-tools will be removed in 4.0 + * Use .cms-content-filters instead. + * + * Fix for model admin filter styling + */ .ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content { .cms-search-form { overflow:hidden; diff --git a/admin/scss/ie8.scss b/admin/scss/ie8.scss index b56e5b3bf..9fe7ebb83 100644 --- a/admin/scss/ie8.scss +++ b/admin/scss/ie8.scss @@ -17,6 +17,11 @@ } } +/** + * DEPRECATED: + * .cms-content-tools will be removed in 4.0 + * Use .cms-content-filters instead. + */ .cms .cms-content-tools { //fix for width of dropdowns in filter panel diff --git a/admin/scss/screen.scss b/admin/scss/screen.scss index acfae3df9..157460b5f 100644 --- a/admin/scss/screen.scss +++ b/admin/scss/screen.scss @@ -28,7 +28,7 @@ imported compass/support file and enables svg gradients in IE9. It was put here because there didn't seem to be a more logical place to put it. If more variables exist in the future, consider creating a variables file.*/ -$experimental-support-for-svg: true; +$experimental-support-for-svg: true; /** ----------------------------- * Theme @@ -48,6 +48,7 @@ $experimental-support-for-svg: true; /** ----------------------------- * CMS Components * ------------------------------ */ +@import "fonts.scss"; @import "typography.scss"; @import "uitheme.scss"; @import "forms.scss"; diff --git a/admin/templates/Includes/ModelAdmin_Content.ss b/admin/templates/Includes/ModelAdmin_Content.ss index e5d160f6d..3b3f685ad 100644 --- a/admin/templates/Includes/ModelAdmin_Content.ss +++ b/admin/templates/Includes/ModelAdmin_Content.ss @@ -13,19 +13,23 @@

-
+
$Tools - $EditForm + +
+ $EditForm +
diff --git a/admin/templates/Includes/ModelAdmin_Tools.ss b/admin/templates/Includes/ModelAdmin_Tools.ss index 8aad934b0..2aee25916 100644 --- a/admin/templates/Includes/ModelAdmin_Tools.ss +++ b/admin/templates/Includes/ModelAdmin_Tools.ss @@ -1,16 +1,11 @@ -
-
- <% if $SearchForm %> -

<% _t('ModelAdmin_Tools_ss.FILTER', 'Filter') %>

- $SearchForm - <% end_if %> +
+ <% if $SearchForm %> +

<% _t('ModelAdmin_Tools_ss.FILTER', 'Filter') %>

+ $SearchForm + <% end_if %> - <% if $ImportForm %> -

<% _t('ModelAdmin_Tools_ss.IMPORT', 'Import') %>

- $ImportForm - <% end_if %> -
-
-

<% _t('ModelAdmin_Tools_ss.FILTER', 'Filter') %>

-
+ <% if $ImportForm %> +

<% _t('ModelAdmin_Tools_ss.IMPORT', 'Import') %>

+ $ImportForm + <% end_if %>
diff --git a/css/GridField.css b/css/GridField.css index c671c0695..5beaca099 100644 --- a/css/GridField.css +++ b/css/GridField.css @@ -30,10 +30,10 @@ Used in side panels and action tabs .cms .ss-gridfield .ss-gridfield-buttonrow { font-size: 14.4px; } .cms .ss-gridfield .grid-levelup { text-indent: -9999em; margin-bottom: 6px; } .cms .ss-gridfield .grid-levelup a.list-parent-link { background: transparent url(../images/gridfield-level-up.png) no-repeat 0 0; display: block; } -.cms .ss-gridfield .add-existing-autocompleter span { float: left; display: inline-block; vertical-align: top; *vertical-align: auto; *zoom: 1; *display: inline; } +.cms .ss-gridfield .add-existing-autocompleter span { float: left; display: -moz-inline-stack; display: inline-block; vertical-align: top; *vertical-align: auto; zoom: 1; *display: inline; } .cms .ss-gridfield .add-existing-autocompleter input.relation-search { width: 270px; height: 32px; margin-bottom: 12px; border-top-right-radius: 0; border-bottom-right-radius: 0; } .cms .ss-gridfield .add-existing-autocompleter button#action_gridfield_relationadd { height: 32px; margin-left: 0; border-top-left-radius: 0; border-bottom-left-radius: 0; border-left: none; } -.cms .ss-gridfield .grid-csv-button, .cms .ss-gridfield .grid-print-button { margin-bottom: 0; font-size: 12px; display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; } +.cms .ss-gridfield .grid-csv-button, .cms .ss-gridfield .grid-print-button { margin-bottom: 0; font-size: 12px; display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; } .cms table.ss-gridfield-table { display: table; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; padding: 0; border-collapse: separate; border-bottom: 0 none; width: 100%; } .cms table.ss-gridfield-table thead { color: #323e46; background: transparent; } .cms table.ss-gridfield-table thead tr.filter-header .fieldgroup { max-width: 512px; } @@ -46,8 +46,8 @@ Used in side panels and action tabs .cms table.ss-gridfield-table tbody td.col-buttons { width: 1px; padding: 0 8px; text-align: right; white-space: nowrap; } .cms table.ss-gridfield-table tbody td.col-listChildrenLink { width: 16px; border-right: none; text-indent: -9999em; padding: 0; } .cms table.ss-gridfield-table tbody td.col-listChildrenLink .list-children-link { background: transparent url(../images/sitetree_ss_default_icons.png) no-repeat 3px -4px; display: block; } -.cms table.ss-gridfield-table tbody td.col-getTreeTitle span.item { color: #0073C1; } -.cms table.ss-gridfield-table tbody td.col-getTreeTitle span.badge { clear: both; text-transform: uppercase; display: inline-block; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 10px; margin-right: 6px; margin-top: -1px; -moz-border-radius: 2px / 2px; -webkit-border-radius: 2px 2px; border-radius: 2px / 2px; } +.cms table.ss-gridfield-table tbody td.col-getTreeTitle span.item { color: #0073c1; } +.cms table.ss-gridfield-table tbody td.col-getTreeTitle span.badge { clear: both; text-transform: uppercase; display: inline-block; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 10px; margin-right: 6px; margin-top: -1px; -webkit-border-radius: 2px 2px; -moz-border-radius: 2px / 2px; border-radius: 2px / 2px; } .cms table.ss-gridfield-table tbody td.col-getTreeTitle span.badge.status-modified { color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } .cms table.ss-gridfield-table tbody td.col-getTreeTitle span.badge.status-addedtodraft { color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } .cms table.ss-gridfield-table tbody td.col-getTreeTitle span.badge.status-deletedonlive { color: #636363; border: 1px solid #E49393; background-color: #F2DADB; } @@ -63,7 +63,7 @@ Used in side panels and action tabs .cms table.ss-gridfield-table tbody td a.edit-link { background: url(../admin/images/btn-icon/document--pencil.png) no-repeat 2px 0px; } .cms table.ss-gridfield-table tfoot { color: #323e46; } .cms table.ss-gridfield-table tfoot tr td { background: #b0bec7; padding: .7em; border-bottom: 1px solid rgba(0, 0, 0, 0.1); } -.cms table.ss-gridfield-table tr.title th { position: relative; background: #98aab6; border-bottom: 1px solid #899eab; padding: 5px; min-height: 40px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzk4YWFiNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #98aab6)); background-image: -moz-linear-gradient(#b0bec7, #98aab6); background-image: -webkit-linear-gradient(#b0bec7, #98aab6); background-image: linear-gradient(#b0bec7, #98aab6); text-shadow: 0px -1px 0 rgba(0, 0, 0, 0.4); } +.cms table.ss-gridfield-table tr.title th { position: relative; background: #98aab6; border-bottom: 1px solid #899eab; padding: 5px; min-height: 40px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzk4YWFiNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #98aab6)); background-image: -webkit-linear-gradient(#b0bec7, #98aab6); background-image: -moz-linear-gradient(#b0bec7, #98aab6); background-image: -o-linear-gradient(#b0bec7, #98aab6); background-image: linear-gradient(#b0bec7, #98aab6); text-shadow: 0px -1px 0 rgba(0, 0, 0, 0.4); } .cms table.ss-gridfield-table tr.title th h2 { padding: 0px; font-size: 16.8px; color: #fff; margin: 1px 8px 0; display: inline-block; float: left; } .cms table.ss-gridfield-table tr.sortable-header { background: #dbe3e8; } .cms table.ss-gridfield-table tr.sortable-header th { padding: 0; font-weight: normal; } @@ -71,10 +71,10 @@ Used in side panels and action tabs .cms table.ss-gridfield-table tr:hover { background: #FFFAD6; } .cms table.ss-gridfield-table tr:first-child { background: transparent; } .cms table.ss-gridfield-table tr:first-child:hover { background: #FFFAD6; } -.cms table.ss-gridfield-table tr.ss-gridfield-even { background: #F0F4F7; } +.cms table.ss-gridfield-table tr.ss-gridfield-even { background: #f0f4f7; } .cms table.ss-gridfield-table tr.ss-gridfield-even.ss-gridfield-last { border-bottom: none; } .cms table.ss-gridfield-table tr.ss-gridfield-even:hover { background: #FFFAD6; } -.cms table.ss-gridfield-table tr.even { background: #F0F4F7; } +.cms table.ss-gridfield-table tr.even { background: #f0f4f7; } .cms table.ss-gridfield-table tr.even:hover { background: #FFFAD6; } .cms table.ss-gridfield-table tr th { font-weight: bold; font-size: 12px; color: #FFF; padding: 5px; border-right: 1px solid rgba(0, 0, 0, 0.1); } .cms table.ss-gridfield-table tr th div.fieldgroup, .cms table.ss-gridfield-table tr th div.fieldgroup-field { width: 100%; position: relative; } @@ -87,25 +87,25 @@ Used in side panels and action tabs .cms table.ss-gridfield-table tr th.extra, .cms table.ss-gridfield-table tr th.action { padding: 0; cursor: default; } .cms table.ss-gridfield-table tr th.extra { position: relative; background: #637276; background: rgba(0, 0, 0, 0.7); padding: 5px; border-top: rgba(0, 0, 0, 0.2); } .cms table.ss-gridfield-table tr th.extra input { height: 28px; } -.cms table.ss-gridfield-table tr th.extra button.ss-ui-button { padding: .3em; line-height: 1; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; position: relative; border-bottom-width: 0; -moz-border-radius: 2px / 2px; -webkit-border-radius: 2px 2px; border-radius: 2px / 2px; } +.cms table.ss-gridfield-table tr th.extra button.ss-ui-button { padding: .3em; line-height: 1; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; position: relative; border-bottom-width: 0; -webkit-border-radius: 2px 2px; -moz-border-radius: 2px / 2px; border-radius: 2px / 2px; } .cms table.ss-gridfield-table tr th.extra select { margin: 0; } .cms table.ss-gridfield-table tr th.first { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; } .cms table.ss-gridfield-table tr th.last { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; } .cms table.ss-gridfield-table tr th button#action_gridfield_relationadd:hover { color: #444 !important; /* Not sure why IE think it needs this */ } .cms table.ss-gridfield-table tr th button:hover { color: #ccc !important; /* Not sure why IE think it needs this */ } .cms table.ss-gridfield-table tr th button.ss-gridfield-sort:hover { color: #fff !important; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } -.cms table.ss-gridfield-table tr th button.ss-gridfield-sort { background: transparent url(../images/arrows.png) no-repeat right 6px; border: none; width: 100%; text-align: left; padding: 2px 8px 2px 0; text-shadow: 0px -1px 0 rgba(0, 0, 0, 0.2); color: #fff; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } +.cms table.ss-gridfield-table tr th button.ss-gridfield-sort { background: transparent url(../images/arrows.png) no-repeat right 6px; border: none; width: 100%; text-align: left; padding: 2px 8px 2px 0; text-shadow: 0px -1px 0 rgba(0, 0, 0, 0.2); color: #fff; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; } .cms table.ss-gridfield-table tr th button.ss-gridfield-sort:hover { background-position: right -34px; } .cms table.ss-gridfield-table tr th button.ss-gridfield-sort.ss-gridfield-sorted-desc { background-position: right -72px; } .cms table.ss-gridfield-table tr th button.ss-gridfield-sort.ss-gridfield-sorted-asc { background-position: right -116px; } -.cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter { background-color: #55a4d2; border: none; display: block; text-indent: -9999em; width: 30px; height: 25px; background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI4NzA5OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #338dc1), color-stop(100%, #287099)); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -moz-linear-gradient(#338dc1, #287099); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -webkit-linear-gradient(#338dc1, #287099); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, linear-gradient(#338dc1, #287099); width: 26px; border-top: 1px solid #4199cd; } -.cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter.hover-alike:active, .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter:active, .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter.hover-alike, .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter:hover { background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzU1YTRkMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #55a4d2), color-stop(100%, #338dc1)); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -moz-linear-gradient(#55a4d2, #338dc1); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -webkit-linear-gradient(#55a4d2, #338dc1); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, linear-gradient(#55a4d2, #338dc1); } +.cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter { background-color: #55a4d2; border: none; display: block; text-indent: -9999em; width: 30px; height: 25px; background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI4NzA5OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #338dc1), color-stop(100%, #287099)); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -webkit-linear-gradient(#338dc1, #287099); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -moz-linear-gradient(#338dc1, #287099); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -o-linear-gradient(#338dc1, #287099); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, linear-gradient(#338dc1, #287099); width: 26px; border-top: 1px solid #4199cd; } +.cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter.hover-alike:active, .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter:active, .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter.hover-alike, .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter:hover { background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzU1YTRkMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #55a4d2), color-stop(100%, #338dc1)); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -webkit-linear-gradient(#55a4d2, #338dc1); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -moz-linear-gradient(#55a4d2, #338dc1); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, -o-linear-gradient(#55a4d2, #338dc1); background: url(../images/icons/filter-icons.png) no-repeat -15px 4px, linear-gradient(#55a4d2, #338dc1); } .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter.trigger { margin-left: 12px; border: none; background: url(../images/icons/filter-icons.png) no-repeat -17px 6px; padding-right: 46px; margin: 0 6px; } .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter.trigger span { opacity: 0.4; position: absolute; width: 10px; left: 30px; top: 40%; background: url(../admin/images/btn_arrow_down_grey.png) no-repeat 0px 0px; } .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter.trigger:hover { background: url(../images/icons/filter-icons.png) no-repeat -17px -38px; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-filter.trigger:hover span { opacity: 0.9; } .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-close { background: url(../images/icons/filter-icons.png) no-repeat 8px -17px; border: none; display: block; text-indent: -9999em; width: 30px; height: 25px; width: 25px; opacity: 0.8; margin-right: -5px; } -.cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-close.hover-alike:active, .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-close:active, .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-close.hover-alike, .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-close:hover { opacity: 1; background: url(../images/icons/filter-icons.png) no-repeat 8px -17px, url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjEiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiIHN0b3Atb3BhY2l0eT0iMC4xIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background: url(../images/icons/filter-icons.png) no-repeat 8px -17px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.1)), color-stop(100%, rgba(255, 255, 255, 0.1))); background: url(../images/icons/filter-icons.png) no-repeat 8px -17px, -moz-linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.1)); background: url(../images/icons/filter-icons.png) no-repeat 8px -17px, -webkit-linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.1)); background: url(../images/icons/filter-icons.png) no-repeat 8px -17px, linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.1)); } +.cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-close.hover-alike:active, .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-close:active, .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-close.hover-alike, .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-close:hover { opacity: 1; background: url(../images/icons/filter-icons.png) no-repeat 8px -17px, url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background: url(../images/icons/filter-icons.png) no-repeat 8px -17px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.1)), color-stop(100%, rgba(255, 255, 255, 0.1))); background: url(../images/icons/filter-icons.png) no-repeat 8px -17px, -webkit-linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.1)); background: url(../images/icons/filter-icons.png) no-repeat 8px -17px, -moz-linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.1)); background: url(../images/icons/filter-icons.png) no-repeat 8px -17px, -o-linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.1)); background: url(../images/icons/filter-icons.png) no-repeat 8px -17px, linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.1)); } .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-reset { border: none; display: block; text-indent: -9999em; width: 30px; height: 25px; position: absolute; top: -21px; right: -1px; width: 20px; height: 20px; display: none; } .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-reset.filtered { display: block; background: url(../admin/images/btn-icon/cross.png) no-repeat 0px 0px; opacity: 0.5; } .cms table.ss-gridfield-table tr th button.ss-ui-button.ss-gridfield-button-reset.filtered:hover { opacity: 0.8; } @@ -117,8 +117,8 @@ Used in side panels and action tabs .cms table.ss-gridfield-table tr th input.ss-gridfield-sort:placeholder { font-style: italic; color: #ced5d7; } .cms table.ss-gridfield-table tr th input.ss-gridfield-sort:focus { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .cms table.ss-gridfield-table tr th span.non-sortable { display: block; padding: 6px 8px; } -.cms table.ss-gridfield-table tr td { border-right: 1px solid rgba(0, 0, 0, 0.1); padding: 8px 8px; color: #666; } -.cms table.ss-gridfield-table tr td.bottom-all { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzk4YWFiNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #98aab6)); background-image: -moz-linear-gradient(#b0bec7, #98aab6); background-image: -webkit-linear-gradient(#b0bec7, #98aab6); background-image: linear-gradient(#b0bec7, #98aab6); padding: 4px 12px; } +.cms table.ss-gridfield-table tr td { border-right: 1px solid rgba(0, 0, 0, 0.1); padding: 8px 8px; color: #666666; } +.cms table.ss-gridfield-table tr td.bottom-all { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzk4YWFiNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #98aab6)); background-image: -webkit-linear-gradient(#b0bec7, #98aab6); background-image: -moz-linear-gradient(#b0bec7, #98aab6); background-image: -o-linear-gradient(#b0bec7, #98aab6); background-image: linear-gradient(#b0bec7, #98aab6); padding: 4px 12px; } .cms table.ss-gridfield-table tr td.bottom-all .datagrid-footer-message { text-align: center; padding-top: 6px; color: white; } .cms table.ss-gridfield-table tr td.bottom-all .datagrid-pagination { padding-top: 1px; position: absolute; left: 50%; margin-left: -116px; z-index: 5; } .cms table.ss-gridfield-table tr td.bottom-all .datagrid-pagination .pagination-page-number { color: white; text-align: center; text-shadow: 0px -1px 0 rgba(0, 0, 0, 0.2); } diff --git a/tests/behat/features/bootstrap/SilverStripe/Framework/Test/Behaviour/CmsUiContext.php b/tests/behat/features/bootstrap/SilverStripe/Framework/Test/Behaviour/CmsUiContext.php index 1bbf63009..61f39457e 100644 --- a/tests/behat/features/bootstrap/SilverStripe/Framework/Test/Behaviour/CmsUiContext.php +++ b/tests/behat/features/bootstrap/SilverStripe/Framework/Test/Behaviour/CmsUiContext.php @@ -213,6 +213,27 @@ class CmsUiContext extends BehatContext { } } + /** + * @When /^I (expand|collapse) the content filters$/ + */ + public function iExpandTheContentFilters($action) { + $page = $this->getSession()->getPage(); + $filterButton = $page->find('css', '#filters-button'); + assertNotNull($filterButton, sprintf('Filter button link not found')); + + $filterButtonCssClass = $filterButton->getAttribute('class'); + + if($action == 'expand') { + if(strpos($filterButtonCssClass, 'active') === false) { + $filterButton->click(); + } + } else { + if(strpos($filterButtonCssClass, 'active') !== false) { + $filterButton->click(); + } + } + } + /** * @When /^I (expand|collapse) "([^"]*)" in the tree$/ */ From 71c2729aeb023c664e452fc19a3ac241dfb25391 Mon Sep 17 00:00:00 2001 From: David Alexander Date: Tue, 23 Jun 2015 14:30:41 +1200 Subject: [PATCH 049/110] DOCS: typos, rewording, updated links. --- docs/en/05_Contributing/03_Documentation.md | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/en/05_Contributing/03_Documentation.md b/docs/en/05_Contributing/03_Documentation.md index 0006befb9..0dd3a48c8 100644 --- a/docs/en/05_Contributing/03_Documentation.md +++ b/docs/en/05_Contributing/03_Documentation.md @@ -3,30 +3,30 @@ summary: Writing guide for contributing to SilverStripe developer and CMS user h # Contributing documentation -Documentation for a software project is a continued and collaborative effort. We encourage everybody to contribute in any way they can, from simply fixing spelling mistakes, to writing recipes, to reviewing existing documentation and translating it to another language. +Documentation for a software project is a continuing, collaborative effort. We encourage everybody to contribute in any way they can, from simply fixing spelling mistakes, to writing recipes, reviewing existing documentation and translation to other languages. -Modifying documentation requires basic [PHPDoc](http://en.wikipedia.org/wiki/PHPDoc) and -[Markdown](http://daringfireball.net/projects/markdown/) knowledge, and a GitHub user account. +Modifying documentation requires basic knowledge of [PHPDoc](http://en.wikipedia.org/wiki/PHPDoc) and +[Markdown](http://daringfireball.net/projects/markdown/) as well as a GitHub user account. ## Editing online -The easiest way of editing any documentation is by clicking the "Edit this page" link at the bottom of the +The easiest way of editing any documentation is by clicking the "Edit this page" button at the bottom of the page you want to edit. Alternatively, locate the appropriate .md file in the [github.com/silverstripe/silverstripe-framework](https://github.com/silverstripe/silverstripe-framework/tree/master/docs/) repository and press the "edit" button. **You will need a free GitHub account to do this**. * After editing the documentation, describe your changes in the "commit summary" and "extended description" fields below then press "Commit Changes". - * After that you will see a form to submit a Pull Request: "[pull requests](http://help.github.com/pull-requests/)". You should be able to adjust the version your documentation changes apply to and then submit the form. Your changes will be sent to the core committers for approval. + * After committing you changes, you will see a form to submit a Pull Request: "[pull requests](http://help.github.com/pull-requests/)". You should be able to adjust the version to which your documentation changes apply before submitting the form. Any changes submitted in a pull request will be sent to the core committers for approval.
-You should make your changes in the lowest branch they apply to. For instance, if you fix a spelling issue that you found in the 3.1 documentation, submit your fix to that branch in Github and it'll be copied to the master (3.2) version of the documentation automatically. *Don't submit multiple pull requests*. +You should make your changes in the lowest branch they apply to. For instance, if you fix a spelling issue that you found in the 3.2 documentation, submit your fix to that branch in Github and it'll be copied to the master (3.2) version of the documentation automatically. *Don't submit multiple pull requests*.
## Editing on your computer If you prefer to edit content on your local machine, you can "[fork](http://help.github.com/forking/)" the [github.com/silverstripe/silverstripe-framework](http://github.com/silverstripe/silverstripe-framework) and -[github.com/silverstripe/silverstripe-cms](http://github.com/silverstripe/silverstripe-cms) repositories, and send us "[pull requests](http://help.github.com/pull-requests/)" to incorporate your changes. If you have previously downloaded SilverStripe or a module, chances are that you already have these repositories on your machine. +[github.com/silverstripe/silverstripe-cms](http://github.com/silverstripe/silverstripe-cms) repositories, make changes locally, and then send us a "[pull request](http://help.github.com/pull-requests/)" to incorporate your changes. If you have previously downloaded SilverStripe or a module, chances are that you already have these repositories on your machine. The documentation is kept alongside the source code in the `docs/` subfolder of any SilverStripe module, framework or CMS folder. @@ -36,8 +36,8 @@ If you submit a new feature or an API change, we strongly recommend that your pa ## Repositories -* End-user: [userhelp.silverstripe.org](http://github.com/silverstripe/userhelp.silverstripe.org) -* Developer guides: [doc.silverstripe.org](http://github.com/silverstripe/doc.silverstripe.org) +* End-user help: [userhelp.silverstripe.org](http://github.com/silverstripe/userhelp.silverstripe.org) +* Developer guides: [docs.silverstripe.org](http://github.com/silverstripe/docs.silverstripe.org) * Developer API documentation: [api.silverstripe.org](http://github.com/silverstripe/api.silverstripe.org) ## Source control @@ -51,7 +51,7 @@ for documenting open source software. ## Structure -* Keep documentation lines to 120 characters. +* Keep documentation lines shorter than 120 characters. * Don't duplicate: Search for existing places to put your documentation. Do you really require a new page, or just a new paragraph of text somewhere? * Use PHPDoc in source code: Leave low level technical documentation to code comments within PHP, in [PHPDoc](http://en.wikipedia.org/wiki/PHPDoc) format. * API and developer guides are two forms of source code documentation that complement each other. @@ -64,7 +64,7 @@ as "related content" on other resource (e.g. `/tutorials/site_search` might link * Write in second person plural form: Use "we" instead of "I". It gives the text an instructive and collaborative style. * It's okay to address the reader: For example "First you'll install a webserver" is good style. * Write in an active and direct voice. -* Mark up correctly: Use preformatted text. Emphasis and bold make technical writing more easily "scannable". +* Mark up correctly: The use of preformatted text, emphasis and bold make technical writing easier to scan. * Avoid FAQs: FAQs are not a replacement for coherent, well explained documentation. If you've done a good job documenting, there shouldn't be any "frequently asked questions" left. * "SilverStripe" should always appear without a space with both "S"s capitalised. @@ -73,7 +73,7 @@ documenting, there shouldn't be any "frequently asked questions" left. * We use sentence case for titles so only capitalise the first letter of the first word of a title. The only exceptions to this are when using brand names (e.g. SilverStripe), acronyms (e.g. PHP) and class names (e.g. ModelAdmin). * Use gender neutral language throughout the document, unless referencing a specific person. Use them, they, their, instead of he and she, his or her. * URLs: if the end of your sentence is a URL then you don't need to use a full stop. -* Bullet points: Sentence case your bullet points. If a bullet point is a full sentence then end with a full stop. If it is a short point or a list, full stops are not required. +* Bullet points: Sentence case your bullet points. If a bullet point is a full sentence then end with a full stop. If it is a sentence fragment or a comma separated list, full stops are not required. ## Highlighted blocks @@ -117,7 +117,7 @@ on placing HTML blocks inside Markdown. Documentation is kept alongside the source code, typically in a module subdirectory like `framework/docs/en/`. Each language has its own subfolder, which can duplicate parts of or the entire body of documentation. German documentation would, for example, live in `framework/docs/de/`. The [docsviewer](https://github.com/silverstripe/silverstripe-docsviewer) module that drives -[doc.silverstripe.org](http://doc.silverstripe.org) automatically resolves these subfolders into a language dropdown. +[docs.silverstripe.org](http://docs.silverstripe.org) automatically resolves these subfolders into a language dropdown. ## Further reading From ca039e15ef7306d7b56d64d93892d2fb6173fcf7 Mon Sep 17 00:00:00 2001 From: David Craig Date: Tue, 16 Jun 2015 10:52:42 +1200 Subject: [PATCH 050/110] BUG Fix regressions in changes to batch action feature --- admin/code/CMSBatchActionHandler.php | 6 +++++- admin/javascript/LeftAndMain.BatchActions.js | 8 +------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/admin/code/CMSBatchActionHandler.php b/admin/code/CMSBatchActionHandler.php index 57f00f999..7a1cb3fc5 100644 --- a/admin/code/CMSBatchActionHandler.php +++ b/admin/code/CMSBatchActionHandler.php @@ -131,7 +131,11 @@ class CMSBatchActionHandler extends RequestHandler { $ids = $this->cleanIDs($csvIDs); // Filter by applicable pages - $applicableIDs = $actionHandler->applicablePages($ids); + if($ids) { + $applicableIDs = $actionHandler->applicablePages($ids); + } else { + $applicableIDs = array(); + } $response = new SS_HTTPResponse(json_encode($applicableIDs)); $response->addHeader("Content-type", "application/json"); diff --git a/admin/javascript/LeftAndMain.BatchActions.js b/admin/javascript/LeftAndMain.BatchActions.js index 5fcf1b5f4..d4c7bb399 100644 --- a/admin/javascript/LeftAndMain.BatchActions.js +++ b/admin/javascript/LeftAndMain.BatchActions.js @@ -339,6 +339,7 @@ tree.addClass('multiple'); tree.removeClass('draggable'); form.serializeFromTree(); + $('#Form_BatchActionsForm').refreshSelected(); } else { tree.removeClass('multiple'); tree.addClass('draggable'); @@ -350,13 +351,6 @@ * Class: #Form_BatchActionsForm :select[name=Action] */ $('#Form_BatchActionsForm select[name=Action]').entwine({ - onmatch: function() { - this.trigger('change'); - this._super(); - }, - onunmatch: function() { - this._super(); - }, onchange: function(e) { var form = $(e.target.form), btn = form.find(':submit'), From f6745a3febc15cf679c2065f362e53a198dea084 Mon Sep 17 00:00:00 2001 From: David Craig Date: Tue, 23 Jun 2015 16:53:38 +1200 Subject: [PATCH 051/110] Fix new page SiteTree nesting --- admin/javascript/LeftAndMain.Tree.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/javascript/LeftAndMain.Tree.js b/admin/javascript/LeftAndMain.Tree.js index 625a4b353..2eef76fd0 100644 --- a/admin/javascript/LeftAndMain.Tree.js +++ b/admin/javascript/LeftAndMain.Tree.js @@ -250,7 +250,7 @@ */ createNode: function(html, data, callback) { var self = this, - parentNode = data.ParentID ? self.getNodeByID(data.ParentID) : false, + parentNode = data.ParentID !== void 0 ? self.getNodeByID(data.ParentID) : false, // Explicitly check for undefined as 0 is a valid ParentID newNode = $(html); // Extract the state for the new node from the properties taken from the provided HTML template. From 3bdae22f6372190b007852667f3ea632399f5f00 Mon Sep 17 00:00:00 2001 From: scott1702 Date: Wed, 24 Jun 2015 11:53:38 +1200 Subject: [PATCH 052/110] Fix padding bug pushing out the 'post options' panel --- admin/css/screen.css | 600 +++++++++--------- admin/images/btn-icon-scb653ce8a9.png | Bin 0 -> 22990 bytes admin/images/btn-icon-se43cec5357.png | Bin 22916 -> 0 bytes .../menu-icons/16x16-2x-s9b8c49312e.png | Bin 4147 -> 0 bytes .../menu-icons/16x16-2x-sbe70081ef8.png | Bin 0 -> 4135 bytes admin/images/menu-icons/16x16-s3f4c846209.png | Bin 0 -> 1637 bytes admin/images/menu-icons/16x16-sf5b94bb49b.png | Bin 1645 -> 0 bytes .../menu-icons/24x24-2x-s7169efa003.png | Bin 6015 -> 0 bytes .../menu-icons/24x24-2x-sccfd928e17.png | Bin 0 -> 5981 bytes admin/images/menu-icons/24x24-s0dc15c36f9.png | Bin 0 -> 2394 bytes admin/images/menu-icons/24x24-s391afdd013.png | Bin 2391 -> 0 bytes admin/images/sprites-32x32-2x-s6ccfbe50f9.png | Bin 0 -> 9066 bytes admin/images/sprites-32x32-2x-s72b74f4cc4.png | Bin 9088 -> 0 bytes admin/images/sprites-32x32-s47450c5f5b.png | Bin 0 -> 18703 bytes admin/images/sprites-32x32-s7af51a6313.png | Bin 20085 -> 0 bytes admin/images/sprites-64x64-2x-s0fe1d92f9d.png | Bin 2878 -> 0 bytes admin/images/sprites-64x64-2x-se3e3f47b94.png | Bin 0 -> 2876 bytes admin/images/sprites-64x64-s45180e3c4f.png | Bin 0 -> 3062 bytes admin/images/sprites-64x64-s88957ee578.png | Bin 3059 -> 0 bytes admin/scss/_style.scss | 10 +- 20 files changed, 305 insertions(+), 305 deletions(-) create mode 100644 admin/images/btn-icon-scb653ce8a9.png delete mode 100644 admin/images/btn-icon-se43cec5357.png delete mode 100644 admin/images/menu-icons/16x16-2x-s9b8c49312e.png create mode 100644 admin/images/menu-icons/16x16-2x-sbe70081ef8.png create mode 100644 admin/images/menu-icons/16x16-s3f4c846209.png delete mode 100644 admin/images/menu-icons/16x16-sf5b94bb49b.png delete mode 100644 admin/images/menu-icons/24x24-2x-s7169efa003.png create mode 100644 admin/images/menu-icons/24x24-2x-sccfd928e17.png create mode 100644 admin/images/menu-icons/24x24-s0dc15c36f9.png delete mode 100644 admin/images/menu-icons/24x24-s391afdd013.png create mode 100644 admin/images/sprites-32x32-2x-s6ccfbe50f9.png delete mode 100644 admin/images/sprites-32x32-2x-s72b74f4cc4.png create mode 100644 admin/images/sprites-32x32-s47450c5f5b.png delete mode 100644 admin/images/sprites-32x32-s7af51a6313.png delete mode 100644 admin/images/sprites-64x64-2x-s0fe1d92f9d.png create mode 100644 admin/images/sprites-64x64-2x-se3e3f47b94.png create mode 100644 admin/images/sprites-64x64-s45180e3c4f.png delete mode 100644 admin/images/sprites-64x64-s88957ee578.png diff --git a/admin/css/screen.css b/admin/css/screen.css index 896761b6d..f6d0dbeeb 100644 --- a/admin/css/screen.css +++ b/admin/css/screen.css @@ -15,7 +15,7 @@ q:before, q:after, blockquote:before, blockquote:after { content: ""; content: n a img { border: none; } -article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { display: block; } +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } /*$experimental-support-for-svg variable comes from imported compass/support file and enables svg gradients in IE9. @@ -37,82 +37,81 @@ Used in side panels and action tabs */ /** ----------------------------- Sprite images ----------------------------- */ /** Helper SCSS file for generating sprites for the interface. */ -.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background: url('../images/btn-icon-se43cec5357.png') no-repeat; } +.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-image: url('../images/btn-icon-scb653ce8a9.png'); background-repeat: no-repeat; } -.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 -96px; } -.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -80px; } -.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 0; } -.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -208px; } -.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -32px; } -.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -144px; } -.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -516px; } -.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -356px; } -.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -340px; } -.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -372px; } -.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -16px; } -.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -740px; } -.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -532px; } -.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -756px; } -.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -692px; } -.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -724px; } -.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -788px; } -.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -500px; } -.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -772px; } -.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -468px; } -.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -580px; } -.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -276px; } -.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -128px; } -.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -192px; } -.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -484px; } -.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -307px; } -.ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk { background-position: 0 -291px; } -.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -564px; } -.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -48px; } -.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -436px; } -.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -596px; } -.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -260px; } -.ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information { background-position: 0 -388px; } -.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -548px; } -.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -644px; } -.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -660px; } -.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -404px; } -.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -452px; } -.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -628px; } -.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -708px; } -.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -228px; } -.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -612px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -244px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -676px; } -.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -64px; } -.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -160px; } -.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -324px; } -.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -420px; } -.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -112px; } -.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -176px; } +.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 0; } +.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -16px; } +.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 -32px; } +.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -48px; } +.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -68px; } +.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -84px; } +.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -100px; } +.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -116px; } +.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -132px; } +.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -148px; } +.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -164px; } +.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -180px; } +.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -196px; } +.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -212px; } +.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -228px; } +.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -244px; } +.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -260px; } +.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -276px; } +.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -292px; } +.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -308px; } +.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -324px; } +.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -340px; } +.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -355px; } +.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -371px; } +.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -387px; } +.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -403px; } +.ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk { background-position: 0 -420px; } +.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -436px; } +.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -452px; } +.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -468px; } +.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -484px; } +.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -500px; } +.ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information { background-position: 0 -516px; } +.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -532px; } +.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -548px; } +.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -564px; } +.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -580px; } +.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -596px; } +.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -612px; } +.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -628px; } +.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -644px; } +.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -660px; } +.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -676px; } +.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -692px; } +.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -708px; } +.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -724px; } +.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -740px; } +.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -756px; } +.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -772px; } +.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -788px; } .icon { text-indent: -9999px; border: none; outline: none; } -.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-s391afdd013.png'); } -.icon.icon-24.icon-assetadmin { background-position: 0 -120px; } -.icon.icon-24.icon-cmsmain { background-position: 0 -48px; } -.icon.icon-24.icon-cmspagescontroller { background-position: 0 -216px; } -.icon.icon-24.icon-cmssettingscontroller { background-position: 0 0; } +.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-s0dc15c36f9.png'); } +.icon.icon-24.icon-assetadmin { background-position: 0 -216px; } +.icon.icon-24.icon-cmsmain { background-position: 0 -192px; } +.icon.icon-24.icon-cmspagescontroller { background-position: 0 -168px; } +.icon.icon-24.icon-cmssettingscontroller { background-position: 0 -96px; } .icon.icon-24.icon-securityadmin { background-position: 0 -24px; } -.icon.icon-24.icon-reportadmin { background-position: 0 -72px; } -.icon.icon-24.icon-commentadmin { background-position: 0 -192px; } -.icon.icon-24.icon-help { background-position: 0 -96px; } -.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-sf5b94bb49b.png'); } -.icon.icon-16.icon-assetadmin { background-position: 0 -80px; } -.icon.icon-16.icon-cmsmain { background-position: 0 -16px; } +.icon.icon-24.icon-reportadmin { background-position: 0 -240px; } +.icon.icon-24.icon-commentadmin { background-position: 0 0; } +.icon.icon-24.icon-help { background-position: 0 -144px; } +.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-s3f4c846209.png'); } +.icon.icon-16.icon-assetadmin { background-position: 0 -144px; } +.icon.icon-16.icon-cmsmain { background-position: 0 -128px; } .icon.icon-16.icon-cmspagescontroller { background-position: 0 -112px; } -.icon.icon-16.icon-cmssettingscontroller { background-position: 0 0; } -.icon.icon-16.icon-securityadmin { background-position: 0 -48px; } -.icon.icon-16.icon-reportadmin { background-position: 0 -32px; } -.icon.icon-16.icon-commentadmin { background-position: 0 -144px; } -.icon.icon-16.icon-help { background-position: 0 -64px; } +.icon.icon-16.icon-cmssettingscontroller { background-position: 0 -64px; } +.icon.icon-16.icon-securityadmin { background-position: 0 -16px; } +.icon.icon-16.icon-reportadmin { background-position: 0 -160px; } +.icon.icon-16.icon-commentadmin { background-position: 0 0; } +.icon.icon-16.icon-help { background-position: 0 -96px; } /** ----------------------------- CMS Components ------------------------------ */ @font-face { font-family: 'fontello'; src: url("../font/fontello.eot?33987583"); src: url("../font/fontello.eot?33987583#iefix") format("embedded-opentype"), url("../font/fontello.woff?33987583") format("woff"), url("../font/fontello.ttf?33987583") format("truetype"), url("../font/fontello.svg?33987583#fontello") format("svg"); font-weight: normal; font-style: normal; } - [class^="font-icon-"]:before, [class*=" font-icon-"]:before { display: inline-block; width: 1em; margin-right: .2em; text-align: center; text-decoration: inherit; text-transform: none; font-family: "fontello"; font-style: normal; font-weight: normal; font-variant: normal; speak: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .font-icon-search:before { content: '\e800'; } @@ -120,7 +119,7 @@ Used in side panels and action tabs .font-icon-list:before { content: '\e801'; } /** File: typography.scss Contains the basic typography related styles for the admin interface. */ -body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; color: #444444; } +body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; color: #444; } .cms h2, .cms h3, .cms h4, .cms h5 { font-weight: bold; margin: 16px 0 16px 0; line-height: 16px; } .cms h2 { font-size: 18px; line-height: 24px; } @@ -132,18 +131,18 @@ body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; .cms code { font-family: 'Bitstream Vera Sans Mono','Courier', monospace; } /** This file defines CMS-specific customizations to the jQuery UI theme. Every rule should contain ONLY overwritten jQuery UI rules (with 'ui-' prefix). This file should be fairly short, as we're using our own custom jQuery UI theme already. TODO Add theme reference Use _style.scss to add more generic style information, and read the jQuery UI theming API: http://jqueryui.com/docs/Theming/API */ -.ui-widget-content, .ui-widget { color: #444444; font-size: 12px; font-family: Arial, sans-serif; border: 0; } +.ui-widget-content, .ui-widget { color: #444; font-size: 12px; font-family: Arial, sans-serif; border: 0; } -.ui-widget-header { background-color: #b0bec7; padding: 8px 8px 6px 8px; border-bottom: 2px solid #8399a7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZTNlNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dde3e7), color-stop(100%, #92a5b2)); background-image: -webkit-linear-gradient(#dde3e7, #92a5b2); background-image: -moz-linear-gradient(#dde3e7, #92a5b2); background-image: -o-linear-gradient(#dde3e7, #92a5b2); background-image: linear-gradient(#dde3e7, #92a5b2); border-bottom: 3px solid #5c7382; padding: 8px; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; } +.ui-widget-header { background-color: #b0bec7; padding: 8px 8px 6px 8px; border-bottom: 2px solid #8399a7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZTNlNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dde3e7), color-stop(100%, #92a5b2)); background-image: -moz-linear-gradient(#dde3e7, #92a5b2); background-image: -webkit-linear-gradient(#dde3e7, #92a5b2); background-image: linear-gradient(#dde3e7, #92a5b2); border-bottom: 3px solid #5c7382; padding: 8px; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .ui-widget-header .ui-dialog-title { padding: 6px 10px; text-shadow: #ced7dc 1px 1px 0; } .ui-widget-header a.ui-dialog-titlebar-close { position: absolute; top: -5px; right: -13px; width: 30px; height: 30px; z-index: 100000; } .ui-widget-header a.ui-state-hover { border-color: transparent; background: transparent; } -.ui-widget-header a.ui-state-hover .ui-icon-closethick { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -292px no-repeat; } -.ui-widget-header .ui-icon-closethick { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -252px no-repeat; width: 30px; height: 30px; } +.ui-widget-header a.ui-state-hover .ui-icon-closethick { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -356px no-repeat; } +.ui-widget-header .ui-icon-closethick { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -396px no-repeat; width: 30px; height: 30px; } .ui-state-hover { cursor: pointer; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { color: #444444; font-size: 12px; font-family: Arial, sans-serif; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { color: #444; font-size: 12px; font-family: Arial, sans-serif; } .ui-accordion .ui-accordion-header { border-color: #c0c0c2; margin-bottom: 0; } .ui-accordion .ui-accordion-content { border: 1px solid #c0c0c2; border-top: none; } @@ -160,11 +159,11 @@ form.nostyle .middleColumn { margin-left: 0; } form.nostyle input.text, form.nostyle textarea, form.nostyle select, form.nostyle .TreeDropdownField { width: auto; max-width: auto; } .field { display: block; border-bottom: 1px solid #d0d3d5; -webkit-box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); -moz-box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); -o-box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); padding: 0 0 7px 0; margin: 8px 0; *zoom: 1; } -.field.noborder, .field:last-child { padding-bottom: 0; border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.field.noborder, .field:last-child { padding-bottom: 0; border-bottom: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .field:after { content: "\0020"; display: block; height: 0; clear: both; overflow: hidden; visibility: hidden; } .field.nolabel .middleColumn { margin-left: 0; } .field.nolabel .description { margin-left: 0; } -.field.checkbox label.right { margin: 4px 0 0 0; display: inline; font-style: normal; color: #444444; clear: none; } +.field.checkbox label.right { margin: 4px 0 0 0; display: inline; font-style: normal; color: #444; clear: none; } .field label.left { float: left; display: block; width: 176px; padding: 8px 8px 8px 0; line-height: 16px; font-weight: bold; text-shadow: 1px 1px 0 white; } .field label.right { cursor: pointer; clear: both; color: #777777; display: block; font-style: italic; margin: 4px 0 0 184px; } .field .middleColumn { margin-left: 184px; } @@ -172,12 +171,12 @@ form.nostyle input.text, form.nostyle textarea, form.nostyle select, form.nostyl .field .fieldgroup .fieldgroup-field.last { /* This is used on page/settings/visibility */ padding-bottom: 8px; /* replicates li item spacing */ } .field .description { clear: both; color: #777777; display: block; font-style: italic; line-height: 16px; margin: 4px 0 0 184px; } .field.checkbox .description, .field.ss-gridfield .description { margin-left: 0; } -.field input.text, .field textarea, .field select, .field .TreeDropdownField { margin-left: 10px; width: 100%; max-width: 512px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } +.field input.text, .field textarea, .field select, .field .TreeDropdownField { margin-left: 10px; width: 100%; max-width: 512px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } .field input.text.description, .field textarea.description, .field select.description, .field .TreeDropdownField.description { margin: 0; } .field input.text .description, .field textarea .description, .field select .description, .field .TreeDropdownField .description { max-width: 512px; } -.field input.text, .field textarea, .field .TreeDropdownField { background: #fff; border: 1px solid #b3b3b3; padding: 7px 7px; line-height: 16px; margin: 0; outline: none; -moz-transition: 0.2s box-shadow ease-in; -webkit-transition: 0.2s box-shadow ease-in; -o-transition: 0.2s box-shadow ease-in; transition: 0.2s box-shadow ease-in; -moz-transition: 0.2s border ease-in; -webkit-transition: 0.2s border ease-in; -o-transition: 0.2s border ease-in; transition: 0.2s border ease-in; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VhZWFlYSIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eaeaea), color-stop(10%, #ffffff)); background-image: -webkit-linear-gradient(#eaeaea, #ffffff 10%); background-image: -moz-linear-gradient(#eaeaea, #ffffff 10%); background-image: -o-linear-gradient(#eaeaea, #ffffff 10%); background-image: linear-gradient(#eaeaea, #ffffff 10%); } -.field input.text:focus, .field textarea:focus, .field .TreeDropdownField:focus { border: 1px solid #9a9a9a; border-top-color: gray; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; } -.field input[disabled], .field input.disabled, .field textarea[disabled], .field textarea.disabled, .field select[disabled], .field select.disabled { color: #777777; background: #efefef; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JjYmNiYyIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZWZlZmVmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiY2JjYmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bcbcbc), color-stop(10%, #efefef), color-stop(90%, #ffffff), color-stop(100%, #bcbcbc)); background-image: -webkit-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -moz-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -o-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); border: 1px solid #b3b3b3; } +.field input.text, .field textarea, .field .TreeDropdownField { background: #fff; border: 1px solid #b3b3b3; padding: 7px 7px; line-height: 16px; margin: 0; outline: none; -moz-transition: 0.2s box-shadow ease-in; -webkit-transition: 0.2s box-shadow ease-in; -o-transition: 0.2s box-shadow ease-in; transition: 0.2s box-shadow ease-in; -moz-transition: 0.2s border ease-in; -webkit-transition: 0.2s border ease-in; -o-transition: 0.2s border ease-in; transition: 0.2s border ease-in; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VhZWFlYSIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eaeaea), color-stop(10%, #ffffff)); background-image: -moz-linear-gradient(#eaeaea, #ffffff 10%); background-image: -webkit-linear-gradient(#eaeaea, #ffffff 10%); background-image: linear-gradient(#eaeaea, #ffffff 10%); } +.field input.text:focus, .field textarea:focus, .field .TreeDropdownField:focus { border: 1px solid #9a9a9a; border-top-color: #808080; -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; } +.field input[disabled], .field input.disabled, .field textarea[disabled], .field textarea.disabled, .field select[disabled], .field select.disabled { color: #777777; background: #efefef; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JjYmNiYyIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZWZlZmVmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiY2JjYmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bcbcbc), color-stop(10%, #efefef), color-stop(90%, #ffffff), color-stop(100%, #bcbcbc)); background-image: -moz-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -webkit-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); border: 1px solid #b3b3b3; } .field#Action { box-shadow: none; } .field.cms-description-toggle > .middleColumn { display: inline-block; vertical-align: middle; margin-left: 0; width: 36%; min-width: 300px; } .field.cms-description-toggle .right { display: inline-block; vertical-align: middle; height: 15px; margin: 0 0 0 7px; } @@ -211,11 +210,11 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .field .chzn-container { max-width: 512px; vertical-align: bottom; } .field .chzn-container .chzn-results li { font-size: 11px; line-height: 16px; padding: 4px 4px; } .field .chzn-container-active .chzn-single { border: 1px solid #9a9a9a; } -.field .chzn-container-single .chzn-single { height: 30px; line-height: 30px; /* not relative, as then we'd had to redo most of chzn */ font-size: 12px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VmZWZlZiIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlZmVmZWYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #efefef), color-stop(10%, #ffffff), color-stop(90%, #ffffff), color-stop(100%, #efefef)); background-image: -webkit-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -moz-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -o-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); } +.field .chzn-container-single .chzn-single { height: 30px; line-height: 30px; /* not relative, as then we'd had to redo most of chzn */ font-size: 12px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VmZWZlZiIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlZmVmZWYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #efefef), color-stop(10%, #ffffff), color-stop(90%, #ffffff), color-stop(100%, #efefef)); background-image: -moz-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -webkit-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); } .field .chzn-container-single .chzn-single:hover, .field .chzn-container-single .chzn-single:focus, .field .chzn-container-single .chzn-single:active { text-decoration: none; } .field .chzn-container-single .chzn-single div { width: 24px; } .field .chzn-container-single .chzn-single div b { background-position: 4px 3px; } -.field .chzn-choices { -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } +.field .chzn-choices { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .field .chzn-choices .search-choice { line-height: 16px; } .field .chzn-choices .search-choice .search-choice-close { top: 5px; } .field .chzn-choices .search-field input { height: 18px; } @@ -224,10 +223,10 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .field.remove-splitter { border-bottom: none; box-shadow: none; } /** ---------------------------------------------------- Buttons ---------------------------------------------------- */ -.cms .button-no-style button, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button { -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: none; border: none; color: #0073c1; display: block; font-weight: normal; margin: 0; outline: none; padding-left: 10px; padding-right: 10px; text-align: left; text-shadow: none; white-space: normal; } +.cms .button-no-style button, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: none; border: none; color: #0073C1; display: block; font-weight: normal; margin: 0; outline: none; padding-left: 10px; padding-right: 10px; text-align: left; text-shadow: none; white-space: normal; } .cms .button-no-style button.ss-ui-action-destructive, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-action-destructive { color: #c22730; } .cms .button-no-style button span, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button span { padding-left: 0; padding-right: 0; } -.cms .button-no-style button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:hover, .cms .button-no-style button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:focus, .cms .button-no-style button:active, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; outline: none; background: none; border: none; } +.cms .button-no-style button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:hover, .cms .button-no-style button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:focus, .cms .button-no-style button:active, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; outline: none; background: none; border: none; } .cms .button-no-style button.loading, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.loading { background: transparent url(../../images/network-save.gif) no-repeat 8px center; } .cms .button-no-style button.loading .ui-button-text, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.loading .ui-button-text { padding-left: 20px; } .cms .Actions > *, .cms .cms-actions-row > * { display: block; float: left; margin-right: 8px; } @@ -237,17 +236,17 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .cms input.loading, .cms button.loading, .cms input.ui-state-default.loading, .cms .ui-widget-content input.ui-state-default.loading, .cms .ui-widget-header input.ui-state-default.loading { color: #525252; border-color: #d5d3d3; cursor: default; } .cms input.loading .ui-icon, .cms button.loading .ui-icon, .cms input.ui-state-default.loading .ui-icon, .cms .ui-widget-content input.ui-state-default.loading .ui-icon, .cms .ui-widget-header input.ui-state-default.loading .ui-icon { background: transparent url(../../images/network-save.gif) no-repeat 0 0; } .cms input.loading.ss-ui-action-constructive .ui-icon, .cms button.loading.ss-ui-action-constructive .ui-icon { background: transparent url(../../images/network-save-constructive.gif) no-repeat 0 0; } -.cms .ss-ui-button { margin-top: 0px; font-weight: bold; text-decoration: none; line-height: 16px; color: #393939; border: 1px solid #c0c0c2; border-bottom: 1px solid #a6a6a9; cursor: pointer; background-color: #e6e6e6; white-space: nowrap; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background: -webkit-linear-gradient(#ffffff, #d9d9d9); background: -moz-linear-gradient(#ffffff, #d9d9d9); background: -o-linear-gradient(#ffffff, #d9d9d9); background: linear-gradient(#ffffff, #d9d9d9); text-shadow: white 0 1px 1px; /* constructive */ /* destructive */ } -.cms .ss-ui-button.ui-state-hover, .cms .ss-ui-button:hover { text-decoration: none; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -o-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -webkit-box-shadow: 0 0 5px #b3b3b3; -moz-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; } -.cms .ss-ui-button:active, .cms .ss-ui-button:focus, .cms .ss-ui-button.ui-state-active, .cms .ss-ui-button.ui-state-focus { border: 1px solid #b3b3b3; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -o-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -webkit-box-shadow: 0 0 5px #b3b3b3 inset; -moz-box-shadow: 0 0 5px #b3b3b3 inset; box-shadow: 0 0 5px #b3b3b3 inset; } +.cms .ss-ui-button { margin-top: 0px; font-weight: bold; text-decoration: none; line-height: 16px; color: #393939; border: 1px solid #c0c0c2; border-bottom: 1px solid #a6a6a9; cursor: pointer; background-color: #e6e6e6; white-space: nowrap; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background: -moz-linear-gradient(#ffffff, #d9d9d9); background: -webkit-linear-gradient(#ffffff, #d9d9d9); background: linear-gradient(#ffffff, #d9d9d9); text-shadow: white 0 1px 1px; /* constructive */ /* destructive */ } +.cms .ss-ui-button.ui-state-hover, .cms .ss-ui-button:hover { text-decoration: none; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -moz-box-shadow: 0 0 5px #b3b3b3; -webkit-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; } +.cms .ss-ui-button:active, .cms .ss-ui-button:focus, .cms .ss-ui-button.ui-state-active, .cms .ss-ui-button.ui-state-focus { border: 1px solid #b3b3b3; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -moz-box-shadow: 0 0 5px #b3b3b3 inset; -webkit-box-shadow: 0 0 5px #b3b3b3 inset; box-shadow: 0 0 5px #b3b3b3 inset; } .cms .ss-ui-button.ss-ui-action-minor span { padding-left: 0; padding-right: 0; } -.cms .ss-ui-button.ss-ui-action-constructive { text-shadow: none; font-weight: bold; color: white; border-color: #1f9433; border-bottom-color: #166a24; background-color: #1f9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkzYmU0MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFmOTQzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #93be42), color-stop(100%, #1f9433)); background: -webkit-linear-gradient(#93be42, #1f9433); background: -moz-linear-gradient(#93be42, #1f9433); background: -o-linear-gradient(#93be42, #1f9433); background: linear-gradient(#93be42, #1f9433); text-shadow: #1c872f 0 -1px -1px; } -.cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover, .cms .ss-ui-button.ss-ui-action-constructive:hover { border-color: #166a24; background-color: #1f9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E0Y2EzYSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzIzYTkzYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a4ca3a), color-stop(100%, #23a93a)); background: -webkit-linear-gradient(#a4ca3a, #23a93a); background: -moz-linear-gradient(#a4ca3a, #23a93a); background: -o-linear-gradient(#a4ca3a, #23a93a); background: linear-gradient(#a4ca3a, #23a93a); } -.cms .ss-ui-button.ss-ui-action-constructive:active, .cms .ss-ui-button.ss-ui-action-constructive:focus, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-active, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-focus { background-color: #1d8c30; -webkit-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); -moz-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); } -.cms .ss-ui-button.ss-ui-action-destructive { color: red; background-color: #e6e6e6; } +.cms .ss-ui-button.ss-ui-action-constructive { text-shadow: none; font-weight: bold; color: white; border-color: #1F9433; border-bottom-color: #166a24; background-color: #1F9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzk0YmU0MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFmOTQzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #94be42), color-stop(100%, #1f9433)); background: -moz-linear-gradient(#94be42, #1f9433); background: -webkit-linear-gradient(#94be42, #1f9433); background: linear-gradient(#94be42, #1f9433); text-shadow: #1c872f 0 -1px -1px; } +.cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover, .cms .ss-ui-button.ss-ui-action-constructive:hover { border-color: #166a24; background-color: #1F9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E0Y2EzYSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzIzYTkzYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a4ca3a), color-stop(100%, #23a93a)); background: -moz-linear-gradient(#a4ca3a, #23a93a); background: -webkit-linear-gradient(#a4ca3a, #23a93a); background: linear-gradient(#a4ca3a, #23a93a); } +.cms .ss-ui-button.ss-ui-action-constructive:active, .cms .ss-ui-button.ss-ui-action-constructive:focus, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-active, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-focus { background-color: #1d8c30; -moz-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); -webkit-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); } +.cms .ss-ui-button.ss-ui-action-destructive { color: #f00; background-color: #e6e6e6; } .cms .ss-ui-button.ss-ui-button-small .ui-button-text { font-size: 10px; } .cms .ss-ui-button.ui-state-highlight { background-color: #e6e6e6; border: 1px solid #708284; } -.cms .ss-ui-button.ss-ui-action-minor { background: none; border: 0; color: #393939; text-decoration: underline; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.cms .ss-ui-button.ss-ui-action-minor { background: none; border: 0; color: #393939; text-decoration: underline; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .cms .ss-ui-button.ss-ui-action-minor:hover { text-decoration: none; color: #1f1f1f; } .cms .ss-ui-button.ss-ui-action-minor:focus, .cms .ss-ui-button.ss-ui-action-minor:active { text-decoration: none; color: #525252; } .cms .ss-ui-button.ss-ui-button-loading { opacity: 0.8; } @@ -266,10 +265,10 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .ss-toggle { margin: 8px 0; } .ss-toggle .ui-accordion-header { font-weight: bold; font-size: 12px; } -.ss-toggle .ui-accordion-header.ui-state-default { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyNDEsIDI0MiwgMjQyLCAwLjgpIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSJyZ2JhKDIwMSwgMjA1LCAyMDYsIDAuOCkiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(241, 242, 242, 0.8)), color-stop(100%, rgba(201, 205, 206, 0.8))); background-image: -webkit-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -moz-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -o-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } +.ss-toggle .ui-accordion-header.ui-state-default { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2YxZjJmMiIgc3RvcC1vcGFjaXR5PSIwLjgiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNjOWNkY2UiIHN0b3Atb3BhY2l0eT0iMC44Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(241, 242, 242, 0.8)), color-stop(100%, rgba(201, 205, 206, 0.8))); background-image: -moz-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -webkit-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .ss-toggle .ui-accordion-header .ui-accordion-header-icon { margin-top: -9px; } .ss-toggle .ui-accordion-content { padding: 8px 0 12px; } -.ss-toggle .ui-accordion-content .field { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; padding-left: 12px; padding-right: 12px; } +.ss-toggle .ui-accordion-content .field { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; padding-left: 12px; padding-right: 12px; } .ss-toggle .ui-accordion-content .field:last-child { margin-bottom: 0; } .ss-toggle .ui-accordion-content .field .middleColumn { margin-left: 0; } .ss-toggle .ui-accordion-content .field label { float: none; margin-left: 0; } @@ -325,13 +324,13 @@ fieldset.switch-states { padding: 0 20px 0 0; margin-right: 5px; /* Note: with a little adjustment the switch can take more than 5 items, but a dropdown would probably be more appropriate */ } -fieldset.switch-states .switch { -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; -webkit-animation: bugfix infinite 1s; background: #dee0e3; display: block; height: 25px; margin-top: 3px; padding: 0 10px; position: relative; width: 100%; z-index: 5; } +fieldset.switch-states .switch { -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; -webkit-animation: bugfix infinite 1s; background: #dee0e3; display: block; height: 25px; margin-top: 3px; padding: 0 10px; position: relative; width: 100%; z-index: 5; } fieldset.switch-states .switch label { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); color: #858585; color: rgba(31, 31, 31, 0.5); cursor: pointer; float: left; font-weight: bold; height: 100%; line-height: 25px; position: relative; z-index: 2; /* Make text unselectable in browsers that support that */ -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } fieldset.switch-states .switch label:hover { color: #6c6c6c; color: rgba(31, 31, 31, 0.7); } -fieldset.switch-states .switch label span { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; display: inline-block; padding: 0 10px; } +fieldset.switch-states .switch label span { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; display: inline-block; padding: 0 10px; } fieldset.switch-states .switch input { opacity: 0; filter: alpha(opacity=0); visibility: none; position: absolute; } fieldset.switch-states .switch input:checked + label { -moz-transition: all 0.3s ease-out 0s; -webkit-transition: all 0.3s ease-out 0s; -o-transition: all 0.3s ease-out 0s; transition: all 0.3s ease-out 0s; color: #fff; text-shadow: 0 -1px 0 #287099; } -fieldset.switch-states .switch .slide-button { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJiOWMzMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzY0YWIzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2b9c32), color-stop(100%, #64ab36)); background-image: -webkit-linear-gradient(#2b9c32, #64ab36); background-image: -moz-linear-gradient(#2b9c32, #64ab36); background-image: -o-linear-gradient(#2b9c32, #64ab36); background-image: linear-gradient(#2b9c32, #64ab36); -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -moz-transition: all 0.3s ease-out 0s; -webkit-transition: all 0.3s ease-out 0s; -o-transition: all 0.3s ease-out 0s; transition: all 0.3s ease-out 0s; background-color: #2b9c32; display: block; height: 100%; left: 0; padding: 0; position: absolute; top: 0; z-index: 1; } +fieldset.switch-states .switch .slide-button { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJiOWMzMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzY0YWIzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2b9c32), color-stop(100%, #64ab36)); background-image: -moz-linear-gradient(#2b9c32, #64ab36); background-image: -webkit-linear-gradient(#2b9c32, #64ab36); background-image: linear-gradient(#2b9c32, #64ab36); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -moz-transition: all 0.3s ease-out 0s; -webkit-transition: all 0.3s ease-out 0s; -o-transition: all 0.3s ease-out 0s; transition: all 0.3s ease-out 0s; background-color: #2b9c32; display: block; height: 100%; left: 0; padding: 0; position: absolute; top: 0; z-index: 1; } fieldset.switch-states.size_1 label, fieldset.switch-states.size_1 .slide-button { width: 100%; } fieldset.switch-states.size_1 label span { padding-right: 0; } fieldset.switch-states.size_1 input:checked:nth-of-type(2) ~ .slide-button { left: 100%; } @@ -361,7 +360,6 @@ fieldset.switch-states.size_5 input:checked:nth-of-type(5) ~ .slide-button { lef @-webkit-keyframes bugfix { from { position: relative; } to { position: relative; } } - .cms-content-filters fieldset { margin-left: -16px; margin-right: -16px; } .cms-content-filters .fieldgroup { width: 50%; display: inline-block; max-width: 440px; padding-right: 16px; padding-left: 16px; margin-bottom: 16px; box-sizing: border-box; margin-right: -2px; vertical-align: top; } .cms-content-filters .fieldgroup .first label, .cms-content-filters .fieldgroup .first h1, .cms-content-filters .fieldgroup .first h2, .cms-content-filters .fieldgroup .first h3, .cms-content-filters .fieldgroup .first h4, .cms-content-filters .fieldgroup .first h5 { display: block; width: 176px; padding: 8px 8px 6px 0; line-height: 16px; font-weight: bold; margin: 0; font-size: 100%; } @@ -401,7 +399,7 @@ html, body { width: 100%; height: 100%; /* Removes RHS whitespace on iPad */ ove body.cms { overflow: hidden; } -.cms a { color: #0073c1; text-decoration: none; } +.cms a { color: #0073C1; text-decoration: none; } .cms a:hover, .cms a:focus { text-decoration: underline; } .cms body .ui-widget { font-family: Arial, sans-serif; font-size: 12px; } .cms strong { font-weight: bold; } @@ -410,12 +408,12 @@ body.cms { overflow: hidden; } .hide, .cms-helper-hide-actions .Actions { display: none; } /** -------------------------------------------- Panels Styles -------------------------------------------- */ -.cms-container { height: 100%; /*background: $tab-panel-texture-background;*/ background: #eceff1; } +.cms-container { height: 100%; /*background: $tab-panel-texture-background;*/ background: #ECEFF1; } -.cms-preview, .cms-menu, .cms-content, .cms-content-header, .cms-content-tools, .cms-content-fields, .cms-edit-form, .cms-preview, .cms-preview iframe, .cms-preview-controls { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; } +.cms-preview, .cms-menu, .cms-content, .cms-content-header, .cms-content-tools, .cms-content-fields, .cms-edit-form, .cms-preview, .cms-preview iframe, .cms-preview-controls { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; } -.cms-content-header { padding-left: 16px; z-index: 60; min-height: 40px; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; background-position: left bottom; background-color: #d4d6d8; } -.cms-content-header a { color: #0073c1; } +.cms-content-header { padding-left: 16px; z-index: 60; min-height: 40px; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; background-position: left bottom; background-color: #D4D6D8; } +.cms-content-header a { color: #0073C1; } .cms-content-header .backlink span.btn-icon-back { height: 16px; } .cms-content-header h2 { font-size: 14px; font-weight: bold; margin: 0; margin-bottom: 8px; } .cms-content-header h2 * { vertical-align: middle; } @@ -429,7 +427,7 @@ body.cms { overflow: hidden; } .cms-container .column-hidden { display: none; } -.cms-content-header-top { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; width: 100%; } +.cms-content-header-top { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; width: 100%; } /** ------------------------------------------------------------------ Filters available in the top bar. This is a togglable element that displays a form used for filtering content. ----------------------------------------------------------------- */ .cms-content-filters { display: none; width: 100%; margin: 0 0 0 -16px; padding: 16px; background-color: #dddfe1; } @@ -437,9 +435,7 @@ body.cms { overflow: hidden; } .cms-content-view, .ui-tabs .cms-panel-padded .cms-content-view.ui-tabs-panel { padding-top: 16px; } -.cms-content-fields { padding: 0 16px 16px; } - -.cms-tabset-nav-primary { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; vertical-align: middle; } +.cms-tabset-nav-primary { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; vertical-align: middle; } /** ------------------------------------------------------------------ Buttons that use font icons ----------------------------------------------------------------- */ .ss-ui-button.icon-button { vertical-align: middle; margin-right: 2px; padding: .3em; font-size: 1.4em; letter-spacing: -3px; text-shadow: none; line-height: 1em; background-color: transparent; background-image: none; border: 0; } @@ -457,26 +453,26 @@ body.cms { overflow: hidden; } .ui-tabs .ui-tabs-nav { float: right; margin: 16px 0 -1px 0; padding: 0 12px 0 0; border-bottom: none; } .ui-tabs .ui-tabs-nav ~ .ui-tabs-panel { border-top: 1px solid #c0c0c2; clear: both; } .ui-tabs .ui-tabs-nav li { top: 0; float: left; border-bottom: 0 !important; } -.ui-tabs .ui-tabs-nav li a { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; float: none; font-weight: bold; color: #444444; line-height: 32px; padding: 0 16px 0; } +.ui-tabs .ui-tabs-nav li a { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; float: none; font-weight: bold; color: #444; line-height: 32px; padding: 0 16px 0; } .ui-tabs .ui-tabs-nav li:last-child { margin-right: 0; } .ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: 0; } .ui-tabs .ui-tabs-nav .ui-state-default { border: 1px solid #c0c0c2; background: #ced7dc; } .ui-tabs .ui-tabs-nav .ui-state-default a { color: #5e5e5e; text-shadow: #e6e6e6 0 1px 0; } .ui-tabs .ui-tabs-nav .ui-state-active { padding-bottom: 1px; border: 1px solid #c0c0c2; background-color: #e6eaed; } -.ui-tabs .ui-tabs-nav .ui-state-active a { color: #444444; } -.ui-tabs .ui-tabs-nav.ui-state-active { border-color: gray; } +.ui-tabs .ui-tabs-nav .ui-state-active a { color: #444; } +.ui-tabs .ui-tabs-nav.ui-state-active { border-color: #808080; } .ui-tabs .ui-tabs-nav li.cms-tabset-icon { text-indent: -9999em; } .ui-tabs .ui-tabs-nav li.cms-tabset-icon a { display: block; padding-left: 40px; padding-right: 0; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -504px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -354px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -454px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -304px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -154px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -204px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -254px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -54px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -404px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -104px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -304px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -504px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -204px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -104px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -404px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -254px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -454px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -154px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -54px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -354px no-repeat; } .ui-tabs .cms-panel-padded .ui-tabs-panel { padding: 0; } .ui-tabs .cms-panel-padded .ui-tabs-panel .ui-tabs-panel { padding: 8px 0 0 0; } .ui-tabs .cms-panel-padded .Actions { padding: 0; } @@ -487,8 +483,8 @@ body.cms { overflow: hidden; } .ui-tabs.cms-tabset-primary .ui-tabs-nav li, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary li, .ui-tabs .cms-content-header-tabs .ui-tabs-nav li { margin-right: 0; margin-top: 0; } .ui-tabs.cms-tabset-primary .ui-tabs-nav li a, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary li a, .ui-tabs .cms-content-header-tabs .ui-tabs-nav li a { margin: 0; line-height: 39px; } .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-all, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-top, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-right, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-tr, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-tl, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-all, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-top, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-right, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-tr, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-tl, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-all, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-top, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-right, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-tr, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-tl { border-radius: 0; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-default, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-default, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-default { -webkit-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; -moz-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; background-color: #b0bec7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Q0ZGJlMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d4dbe0), color-stop(100%, #b0bec7)); background-image: -webkit-linear-gradient(#d4dbe0, #b0bec7); background-image: -moz-linear-gradient(#d4dbe0, #b0bec7); background-image: -o-linear-gradient(#d4dbe0, #b0bec7); background-image: linear-gradient(#d4dbe0, #b0bec7); border-top: none; border-right-color: #8399a7; border-left-color: #ced7dc; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; background: #e6eaed; border-top: none; border-right-color: #b3b3b3; border-left-color: #eceff1; z-index: 2; } +.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-default, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-default, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-default { -moz-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; -webkit-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; background-color: #b0bec7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Q0ZGJlMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d4dbe0), color-stop(100%, #b0bec7)); background-image: -moz-linear-gradient(#d4dbe0, #b0bec7); background-image: -webkit-linear-gradient(#d4dbe0, #b0bec7); background-image: linear-gradient(#d4dbe0, #b0bec7); border-top: none; border-right-color: #8399a7; border-left-color: #ced7dc; } +.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; background: #e6eaed; border-top: none; border-right-color: #b3b3b3; border-left-color: #ECEFF1; z-index: 2; } .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active a, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active a, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-active a { border-bottom: none; } .cms-content-header-tabs { float: right; } @@ -499,19 +495,19 @@ body.cms { overflow: hidden; } .cms-content-loading-spinner { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 9999; background: url(../images/spinner.gif) no-repeat 50% 50%; } /** ----------------------------------------------- Loading Screen ------------------------------------------------ */ -.ss-loading-screen { width: 100%; height: 100%; overflow: hidden; position: absolute; z-index: 100000; background: #fff; background: -moz-radial-gradient(50% 50% 180deg, circle cover, white, #efefef, #c7c7c7 100%); background: -webkit-gradient(radial, 50% 50%, 350, 50% 50%, 0, from(#e3e3e3), to(white)); } +.ss-loading-screen { width: 100%; height: 100%; overflow: hidden; position: absolute; z-index: 100000; background: #fff; background: -moz-radial-gradient(50% 50% 180deg, circle cover, #FFFFFF, #EFEFEF, #C7C7C7 100%); background: -webkit-gradient(radial, 50% 50%, 350, 50% 50%, 0, from(#E3E3E3), to(white)); } .ss-loading-screen .loading-logo { width: 100%; height: 100%; overflow: hidden; position: absolute; background: transparent url(../images/silverstripe_logo.png) no-repeat 50% 50%; } .ss-loading-screen p { width: 100%; text-align: center; position: absolute; bottom: 80px; z-index: 100001; } -.ss-loading-screen p span.notice { width: 300px; font-size: 14px; padding: 10px 20px; color: #dc7f00; border: none; background: none; -webkit-border-radius: 5px; -moz-border-radius: 5px; -ms-border-radius: 5px; -o-border-radius: 5px; border-radius: 5px; display: inline-block; zoom: 1; *display: inline; } +.ss-loading-screen p span.notice { width: 300px; font-size: 14px; padding: 10px 20px; color: #dc7f00; border: none; background: none; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; display: inline-block; zoom: 1; *display: inline; } .ss-loading-screen .loading-animation { display: none; position: absolute; left: 50%; margin-left: -21.5px; top: 80%; } /** -------------------------------------------- Actions -------------------------------------------- */ -.cms-content-actions, .cms-preview-controls { margin: 0; padding: 12px 12px; z-index: 999; border-top: 1px solid #cacacc; -webkit-box-shadow: 1px 0 0 #eceff1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; -moz-box-shadow: 1px 0 0 #eceff1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; box-shadow: 1px 0 0 #eceff1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; height: 28px; background-color: #eceff1; } +.cms-content-actions, .cms-preview-controls { margin: 0; padding: 12px 12px; z-index: 999; border-top: 1px solid #cacacc; -moz-box-shadow: 1px 0 0 #ECEFF1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; -webkit-box-shadow: 1px 0 0 #ECEFF1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; box-shadow: 1px 0 0 #ECEFF1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; height: 28px; background-color: #ECEFF1; } /** -------------------------------------------- Messages -------------------------------------------- */ -.message { display: block; clear: both; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #ccc solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -webkit-border-radius: 3px 3px 3px 3px; -moz-border-radius: 3px 3px 3px 3px; -ms-border-radius: 3px 3px 3px 3px; -o-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; } -.message.notice { background-color: #f0f8fc; border-color: #93cde8; } -.message.warning { background-color: #fefbde; border-color: #e9d104; } +.message { display: block; clear: both; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #ccc solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -moz-border-radius: 3px 3px 3px 3px; -webkit-border-radius: 3px; border-radius: 3px 3px 3px 3px; } +.message.notice { background-color: #f0f8fc; border-color: #93CDE8; } +.message.warning { background-color: #fefbde; border-color: #E9D104; } .message.error, .message.bad, .message.required, .message.validation { background-color: #fae8e9; border-color: #e68288; } .message.good { background-color: #eaf6e4; border-color: #72c34b; } .message p { margin: 0; } @@ -519,7 +515,7 @@ body.cms { overflow: hidden; } .cms-edit-form .message { margin: 16px; } .cms-edit-form .ui-tabs-panel .message { margin: 16px 0; } -.notice-item { border: 0; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; font-family: inherit; font-size: inherit; padding: 8px 10px 8px 10px; } +.notice-item { border: 0; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; font-family: inherit; font-size: inherit; padding: 8px 10px 8px 10px; } .notice-item-close { color: #333333; background: url(../images/filter-icons.png) no-repeat 0 -20px; width: 1px; height: 1px; overflow: hidden; padding: 0px 0 20px 15px; } @@ -545,7 +541,7 @@ body.cms { overflow: hidden; } #PageType ul li { float: none; width: 100%; padding: 9px 0 9px 15px; overflow: hidden; border-bottom-width: 2px; border-bottom: 2px groove rgba(255, 255, 255, 0.8); -webkit-border-image: url(../images/textures/bg_fieldset_elements_border.png) 2 stretch stretch; border-image: url(../images/textures/bg_fieldset_elements_border.png) 2 stretch stretch; } #PageType ul li:last-child { border-bottom: none; } #PageType ul li:hover, #PageType ul li.selected { background-color: rgba(255, 255, 102, 0.3); } -#PageType ul li.disabled { color: #aaaaaa; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); opacity: 0.5; } +#PageType ul li.disabled { color: #aaa; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); opacity: 0.5; } #PageType ul li.disabled:hover { background: none; } #PageType ul li input { margin: inherit; } #PageType ul li label { padding-left: 0; padding-bottom: 0; } @@ -559,19 +555,19 @@ body.cms { overflow: hidden; } .cms-content-toolbar:after { content: "\0020"; display: block; height: 0; clear: both; overflow: hidden; visibility: hidden; } .cms-content-toolbar .cms-tree-view-modes { float: right; padding-top: 5px; } .cms-content-toolbar .cms-tree-view-modes * { display: inline-block; } -.cms-content-toolbar .cms-tree-view-modes * label { color: #0073c1; } +.cms-content-toolbar .cms-tree-view-modes * label { color: #0073C1; } .cms-content-toolbar .ss-ui-button { margin-bottom: 8px; } .cms-content-toolbar .cms-actions-buttons-row { clear: both; } .cms-content-toolbar .cms-actions-tools-row { clear: both; } .cms-content-toolbar .tool-action { display: none; } /** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. Content Tools is the sidebar on the left of the main content panel */ -.cms-content-tools { background: #eceff1; width: 288px; overflow-y: auto; overflow-x: hidden; z-index: 70; border-right: 1px solid #c0c0c2; -webkit-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); -moz-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); float: left; position: relative; } +.cms-content-tools { background: #ECEFF1; width: 288px; overflow-y: auto; overflow-x: hidden; z-index: 70; border-right: 1px solid #C0C0C2; -moz-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); -webkit-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); float: left; position: relative; } .cms-content-tools.filter { padding: 0 !important; } .cms-content-tools .cms-panel-header { clear: both; margin: 10px 0 7px; padding-bottom: 2px; line-height: 24px; border-bottom: 1px solid #d0d3d5; -webkit-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); -o-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); } .cms-content-tools .cms-panel-content { width: 272px; padding: 8.8px 8px 0; overflow: auto; height: 100%; } .cms-content-tools .cms-panel-content .Actions .ss-ui-action-constructive { margin-right: 5px; } -.cms-content-tools .cms-content-header { background-color: #748d9d; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzc0OGQ5ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #748d9d)); background-image: -webkit-linear-gradient(#b0bec7, #748d9d); background-image: -moz-linear-gradient(#b0bec7, #748d9d); background-image: -o-linear-gradient(#b0bec7, #748d9d); background-image: linear-gradient(#b0bec7, #748d9d); } +.cms-content-tools .cms-content-header { background-color: #748d9d; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzc0OGQ5ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #748d9d)); background-image: -moz-linear-gradient(#b0bec7, #748d9d); background-image: -webkit-linear-gradient(#b0bec7, #748d9d); background-image: linear-gradient(#b0bec7, #748d9d); } .cms-content-tools .cms-content-header h2 { text-shadow: #5c7382 -1px -1px 0; width: 176px; color: white; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; } .cms-content-tools h3, .cms-content-tools h4, .cms-content-tools h5 { font-weight: bold; line-height: 16px; } .cms-content-tools h3 { font-size: 13px; } @@ -588,33 +584,33 @@ body.cms { overflow: hidden; } .cms-content-tools .fieldgroup .fieldgroup-field .field { margin: 0; padding: 0; } .cms-content-tools table { margin: 8px -4px; } .cms-content-tools table thead th { color: #1f1f1f; font-weight: bold; line-height: 16px; font-size: 11px; padding: 4px; } -.cms-content-tools table tr.active { background-color: #338dc1; color: white; } -.cms-content-tools table tr.active td.first-column { -webkit-border-radius: 6px 0 0 6px; -moz-border-radius: 6px 0 0 6px; -ms-border-radius: 6px 0 0 6px; -o-border-radius: 6px 0 0 6px; border-radius: 6px 0 0 6px; } -.cms-content-tools table tr.active td.last-column { -webkit-border-radius: 0 6px 6px 0; -moz-border-radius: 0 6px 6px 0; -ms-border-radius: 0 6px 6px 0; -o-border-radius: 0 6px 6px 0; border-radius: 0 6px 6px 0; } +.cms-content-tools table tr.active { background-color: #338DC1; color: white; } +.cms-content-tools table tr.active td.first-column { -moz-border-radius: 6px 0 0 6px; -webkit-border-radius: 6px; border-radius: 6px 0 0 6px; } +.cms-content-tools table tr.active td.last-column { -moz-border-radius: 0 6px 6px 0; -webkit-border-radius: 0; border-radius: 0 6px 6px 0; } .cms-content-tools table td { padding: 4px; line-height: 16px; vertical-align: top; } .cms-content-tools td { border-bottom: 1px solid #ced7dc; padding: 7px 2px; font-size: 11px; } /** ------------------------------------------------------------------ * CMS notice, used for filter messages, but generic enough to use elsewhere * ----------------------------------------------------------------- */ -.cms-notice { display: block; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #d0d3d5 solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } +.cms-notice { display: block; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #d0d3d5 solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } /** CMS Batch actions */ -.cms-content-batchactions-button { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; padding: 4px 6px; vertical-align: middle; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -o-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(top, #ffffff, #d9d9d9); border: 1px solid #aaa; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } +.cms-content-batchactions-button { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; padding: 4px 6px; vertical-align: middle; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(to bottom, #ffffff, #d9d9d9); border: 1px solid #aaa; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } .cms-content-batchactions { float: left; position: relative; display: block; } -.cms-content-batchactions .view-mode-batchactions-wrapper { height: 18px; float: left; padding: 4px 6px; border: 1px solid #aaa; margin-bottom: 8px; margin-right: -1px; background-color: #D9D9D9; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -o-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(top, #ffffff, #d9d9d9); border-top-left-radius: 4px; border-bottom-left-radius: 4px; } +.cms-content-batchactions .view-mode-batchactions-wrapper { height: 18px; float: left; padding: 4px 6px; border: 1px solid #aaa; margin-bottom: 8px; margin-right: -1px; background-color: #D9D9D9; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(to bottom, #ffffff, #d9d9d9); border-top-left-radius: 4px; border-bottom-left-radius: 4px; } .cms-content-batchactions .view-mode-batchactions-wrapper input { vertical-align: middle; } .cms-content-batchactions .view-mode-batchactions-wrapper .view-mode-batchactions-label { vertical-align: middle; display: none; } .cms-content-batchactions .checkbox { margin-top: 2px; vertical-align: middle; } -.cms-content-batchactions-dropdown { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; } +.cms-content-batchactions-dropdown { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; } .cms-content-tools .cms-content-batchactions-dropdown { width: 100%; } -.cms-content-batchactions-dropdown fieldset { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; width: 200px; } +.cms-content-batchactions-dropdown fieldset { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; width: 200px; } .cms-content-batchactions-dropdown fieldset .view-mode-batchactions-label { display: inline; } .cms-content-tools .cms-content-batchactions-dropdown fieldset { width: 82%; } .cms-content-batchactions-dropdown .dropdown { width: 100%; height: 32px; } -.cms-content-batchactions-dropdown .Actions { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; padding: 0; } +.cms-content-batchactions-dropdown .Actions { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; padding: 0; } .cms-content-tools .cms-content-batchactions-dropdown .Actions { width: 16%; } .cms-content-batchactions-dropdown .action { width: 100%; height: 32px; margin-bottom: 0; } @@ -642,7 +638,7 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .memberdatetimeoptionset .description { font-style: normal; } .memberdatetimeoptionset .toggle { font-size: 11px; } -.cms .cms-content { border-right: 1px solid #BBB; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: #eceff1; width: 800px; z-index: 40; } +.cms .cms-content { border-right: 1px solid #BBB; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: #ECEFF1; width: 800px; z-index: 40; } .cms .cms-content-fields { overflow-y: auto; overflow-x: auto; background: #e6eaed; width: 100%; } .cms .cms-content-fields #Root_Main .confirmedpassword { border-bottom: none; box-shadow: none; } .cms .cms-content-fields #Root_Main .customFormat { max-width: 80px; } @@ -658,26 +654,28 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; /** -------------------------------------------- Panels -------------------------------------------- */ .cms-panel { overflow: hidden; /** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. */ } -.cms-panel .cms-panel-toggle { -webkit-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); } -.cms-panel .cms-panel-toggle.south { border-top: 1px solid #9eafba; -webkit-box-shadow: #bcc8cf 0 1px 0px inset; -moz-box-shadow: #bcc8cf 0 1px 0px inset; box-shadow: #bcc8cf 0 1px 0px inset; position: absolute; bottom: 0; width: 100%; } +.cms-panel .cms-panel-toggle { -moz-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); -webkit-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); } +.cms-panel .cms-panel-toggle.south { border-top: 1px solid #9eafba; -moz-box-shadow: #bcc8cf 0 1px 0px inset; -webkit-box-shadow: #bcc8cf 0 1px 0px inset; box-shadow: #bcc8cf 0 1px 0px inset; position: absolute; bottom: 0; width: 100%; } .cms-panel .cms-panel-toggle a { display: block; text-align: right; padding: 4px 0; width: 100%; text-decoration: none; } .cms-panel .cms-panel-toggle a span { display: inline-block; margin: 0 5px; color: #555d60; font-size: 16px; } .cms-panel .cms-panel-toggle a.toggle-expand { width: 40px; display: none; } -.cms-panel.cms-content-tools .cms-panel-toggle.south { border-top: 1px solid #cfd6db; -webkit-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; -moz-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; } +.cms-panel.cms-content-tools .cms-panel-toggle.south { border-top: 1px solid #cfd6db; -moz-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; -webkit-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; } .cms-panel.collapsed { cursor: pointer; } .cms-panel.collapsed .cms-panel-header *, .cms-panel.collapsed .cms-panel-content, .cms-panel.collapsed .cms-panel-toggle a.toggle-collapse { display: none; } .cms-panel.collapsed .cms-panel-toggle a.toggle-expand { display: block; } .cms-panel .cms-panel-header { width: 100%; } .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed { width: 40px; display: none; } -.cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h2, .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -webkit-transform-origin: bottom right; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -o-transform-origin: bottom right; transform-origin: bottom right; -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); } +.cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h2, .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -webkit-transform-origin: bottom right; transform-origin: bottom right; -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -webkit-transform: rotate(270deg); transform: rotate(270deg); } .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed .cms-panel-header { width: 600px; position: relative; top: 24px; right: 577px; text-align: right; } .cms-panel .cms-panel-content-collapsed { width: 40px; display: none; } -.cms-panel .cms-panel-content-collapsed h2, .cms-panel .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -webkit-transform-origin: bottom right; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -o-transform-origin: bottom right; transform-origin: bottom right; -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); } +.cms-panel .cms-panel-content-collapsed h2, .cms-panel .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -webkit-transform-origin: bottom right; transform-origin: bottom right; -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -webkit-transform: rotate(270deg); transform: rotate(270deg); } .cms-panel .cms-panel-content-collapsed .cms-panel-header { width: 600px; position: relative; right: 577px; text-align: right; border-bottom: none; box-shadow: none; } .cms-panel .child-flyout-indicator { width: 0; height: 0; border-right: 3px dashed #1f1f1f; border-top: 3px solid transparent; border-left: 3px solid transparent; border-bottom: 3px dashed #1f1f1f; position: absolute; right: 1px; margin-top: -8px; display: none; /* To be shown by javascript, see LeftAndMain.Panel.js */ } .cms-panel .collapsed-flyout { display: block !important; left: 41px; margin-top: -40px; position: fixed; width: 191px; } .cms-panel .collapsed-flyout li a span { display: block !important; } +.cms .cms-panel-padded { padding: 0 16px 16px; } + /** ------------------------------------------------------------------ * Dialog * @@ -690,12 +688,12 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .cms .ui-dialog .ss-ui-dialog.ui-dialog-content { padding-top: 0px; } -.ui-dialog { background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; background-clip: content-box; border: 1px solid #666 !important; -webkit-border-radius: 8px; -moz-border-radius: 8px; -ms-border-radius: 8px; -o-border-radius: 8px; border-radius: 8px; overflow: visible; padding: 0; -webkit-box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); } -.ui-dialog .ui-dialog-titlebar.ui-widget-header { font-size: 14px; padding: 0; border: none; background-color: transparent; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; -webkit-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; -moz-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; } +.ui-dialog { background: url("../images/textures/bg_cms_main_content.png") repeat left top #F0F3F4; background-clip: content-box; border: 1px solid #666 !important; -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; overflow: visible; padding: 0; -moz-box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); -webkit-box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); } +.ui-dialog .ui-dialog-titlebar.ui-widget-header { font-size: 14px; padding: 0; border: none; background-color: transparent; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; -moz-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; -webkit-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; } .ui-dialog .ui-dialog-titlebar.ui-widget-header .ui-dialog-title { position: absolute; } -.ui-dialog .ui-dialog-content { -webkit-border-radius: 8px; -moz-border-radius: 8px; -ms-border-radius: 8px; -o-border-radius: 8px; border-radius: 8px; overflow: auto; } +.ui-dialog .ui-dialog-content { -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; overflow: auto; } .ui-dialog .ui-dialog-content.loading { background-image: url(../images/spinner.gif); background-position: 50% 50%; background-repeat: no-repeat; } -.ui-dialog .cms-dialog-content { background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; padding-bottom: 8px; padding-top: 0px; } +.ui-dialog .cms-dialog-content { background: url("../images/textures/bg_cms_main_content.png") repeat left top #F0F3F4; padding-bottom: 8px; padding-top: 0px; } .ui-dialog .cms-dialog-content .Actions { overflow: auto; margin: 8px 0; padding-bottom: 8px; float: right; } .ui-dialog .cms-dialog-content .ui-tabs { position: static; } .ui-dialog .cms-dialog-content .ui-tabs .ui-tabs-nav { position: absolute; top: 0; right: 40px; } @@ -703,7 +701,7 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .ui-dialog .cms-dialog-content .clear { clear: both; } .ui-dialog.loading { background-image: url(../images/spinner.gif); background-position: 50% 50%; background-repeat: no-repeat; } -body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; position: relative; } +body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_main_content.png") repeat left top #F0F3F4; position: relative; } /** -------------------------------------------- "Insert X" forms -------------------------------------------- */ .htmleditorfield-dialog.ui-dialog-content { padding: 0; position: relative; } @@ -723,9 +721,9 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai .htmleditorfield-dialog .ss-insert-media, .htmleditorfield-dialog .Actions, .htmleditorfield-dialog .ss-insert-link { padding: 8px 16px; } .htmleditorfield-dialog .ss-insert-media .ui-tabs-panel, .htmleditorfield-dialog .Actions .ui-tabs-panel, .htmleditorfield-dialog .ss-insert-link .ui-tabs-panel { padding: 0; } .htmleditorfield-dialog .details .file-url { display: block; width: 300px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; } -.htmleditorfield-dialog .details .cms-file-info .field { border: none; -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0); box-shadow: 0 0 0 rgba(0, 0, 0, 0); } -.htmleditorfield-dialog .details .field { border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); } -.htmleditorfield-dialog .details .field.last { border-bottom: none; -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0); box-shadow: 0 0 0 rgba(0, 0, 0, 0); margin-bottom: 0; } +.htmleditorfield-dialog .details .cms-file-info .field { border: none; -moz-box-shadow: 0 0 0 transparent; -webkit-box-shadow: 0 0 0 transparent; box-shadow: 0 0 0 transparent; } +.htmleditorfield-dialog .details .field { border-bottom: 1px solid rgba(201, 205, 206, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); } +.htmleditorfield-dialog .details .field.last { border-bottom: none; -moz-box-shadow: 0 0 0 transparent; -webkit-box-shadow: 0 0 0 transparent; box-shadow: 0 0 0 transparent; margin-bottom: 0; } .htmleditorfield-dialog .CompositeField .text select { margin: 5px 0 0 0; } .htmleditorfield-linkform .step2 { margin-bottom: 16px; } @@ -739,7 +737,7 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield h4 { float: left; margin-top: 4px; margin-bottom: 0; } .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield .middleColumn { margin-top: 16px; margin-left: 184px; min-width: 0; clear: none; } .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield .field.treedropdown { border-bottom: 0; padding: 0; } -.htmleditorfield-mediaform .ss-assetuploadfield .ss-uploadfield-editandorganize .ss-uploadfield-files .ss-uploadfield-item-info { background-color: #9e9e9e; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllOWU5ZSIvPjxzdG9wIG9mZnNldD0iOCUiIHN0b3AtY29sb3I9IiM5ZDlkOWQiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzg3ODc4NyIvPjxzdG9wIG9mZnNldD0iNTQlIiBzdG9wLWNvbG9yPSIjODY4Njg2Ii8+PHN0b3Agb2Zmc2V0PSI5NiUiIHN0b3AtY29sb3I9IiM2YjZiNmIiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM2YzZjNmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #9e9e9e), color-stop(8%, #9d9d9d), color-stop(50%, #878787), color-stop(54%, #868686), color-stop(96%, #6b6b6b), color-stop(100%, #6c6c6c)); background-image: -webkit-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: -moz-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: -o-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); } +.htmleditorfield-mediaform .ss-assetuploadfield .ss-uploadfield-editandorganize .ss-uploadfield-files .ss-uploadfield-item-info { background-color: #9e9e9e; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllOWU5ZSIvPjxzdG9wIG9mZnNldD0iOCUiIHN0b3AtY29sb3I9IiM5ZDlkOWQiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzg3ODc4NyIvPjxzdG9wIG9mZnNldD0iNTQlIiBzdG9wLWNvbG9yPSIjODY4Njg2Ii8+PHN0b3Agb2Zmc2V0PSI5NiUiIHN0b3AtY29sb3I9IiM2YjZiNmIiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM2YzZjNmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #9e9e9e), color-stop(8%, #9d9d9d), color-stop(50%, #878787), color-stop(54%, #868686), color-stop(96%, #6b6b6b), color-stop(100%, #6c6c6c)); background-image: -moz-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: -webkit-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: linear-gradient(to bottom, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); } /** -------------------------------------------- Search forms (used in AssetAdmin, ModelAdmin, etc) -------------------------------------------- */ .cms-search-form { margin-bottom: 16px; } @@ -749,11 +747,11 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai /** -------------------------------------------- Step labels -------------------------------------------- */ .step-label > * { display: inline-block; vertical-align: top; } .step-label .flyout { height: 18px; font-size: 14px; font-weight: bold; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; background-color: #667980; padding: 4px 3px 4px 6px; text-align: center; text-shadow: none; color: #fff; } -.step-label .arrow { height: 26px; width: 10px; background: url('../images/sprites-32x32-s7af51a6313.png') 0 -216px no-repeat; margin-right: 4px; } +.step-label .arrow { height: 26px; width: 10px; background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -862px no-repeat; margin-right: 4px; } .step-label .title { height: 18px; padding: 4px; } /** -------------------------------------------- Item Edit Form -------------------------------------------- */ -.cms-file-info { overflow: auto; border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); margin-bottom: 8px; } +.cms-file-info { overflow: auto; border-bottom: 1px solid rgba(201, 205, 206, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); margin-bottom: 8px; } .cms-file-info .cms-file-info-preview { float: left; width: 176px; margin-right: 8px; } .cms-file-info .cms-file-info-preview img { max-width: 176px; max-height: 128px; } .cms-file-info .cms-file-info-data { float: left; width: 55%; } @@ -796,10 +794,10 @@ form.import-form label.left { width: 250px; } /** -------------------------------------------- Buttons for FileUpload -------------------------------------------- */ .ss-uploadfield-item-edit-all .ui-button-text { padding-right: 0; } -.toggle-details-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -406px no-repeat; } -.ss-uploadfield-item-edit-all .toggle-details-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -348px no-repeat; display: inline-block; width: 8px; height: 8px; padding-left: 5px; } -.toggle-details-icon.opened { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1120px no-repeat; } -.ss-uploadfield-item-edit-all .toggle-details-icon.opened { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -332px no-repeat; } +.toggle-details-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -830px no-repeat; } +.ss-uploadfield-item-edit-all .toggle-details-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -798px no-repeat; display: inline-block; width: 8px; height: 8px; padding-left: 5px; } +.toggle-details-icon.opened { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -846px no-repeat; } +.ss-uploadfield-item-edit-all .toggle-details-icon.opened { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -814px no-repeat; } /** -------------------------------------------- Hide preview toggle link by default. May be shown in IE7 stylesheet and forced to show with js if needed -------------------------------------------- */ .cms .Actions > .cms-preview-toggle-link, .cms .cms-navigator > .cms-preview-toggle-link { display: none; } @@ -841,7 +839,7 @@ form.import-form label.left { width: 250px; } .cms .jstree-themeroller .jstree-no-icon, .TreeDropdownField .treedropdownfield-panel .jstree-themeroller .jstree-no-icon { display: none; } .cms #jstree-marker, .TreeDropdownField .treedropdownfield-panel #jstree-marker { padding: 0; margin: 0; overflow: hidden; position: absolute; top: -30px; background-repeat: no-repeat; display: none; line-height: 10px; font-size: 12px; height: 12px; width: 8px; z-index: 10001; background-color: transparent; text-shadow: 1px 1px 1px white; color: black; } .cms #jstree-marker-line, .TreeDropdownField .treedropdownfield-panel #jstree-marker-line { padding: 0; margin: 0; overflow: hidden; position: absolute; top: -30px; background-repeat: no-repeat; display: none; line-height: 0%; font-size: 1px; height: 1px; width: 100px; z-index: 10000; background-color: #456c43; cursor: pointer; border: 1px solid #eeeeee; border-left: 0; -moz-box-shadow: 0px 0px 2px #666; -webkit-box-shadow: 0px 0px 2px #666; box-shadow: 0px 0px 2px #666; -moz-border-radius: 1px; border-radius: 1px; -webkit-border-radius: 1px; } -.cms #vakata-contextmenu, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu { display: block; visibility: hidden; left: 0; top: -200px; position: absolute; margin: 0; padding: 0; min-width: 180px; background: #FFF; border: 1px solid silver; z-index: 10000; *width: 180px; -webkit-box-shadow: 0 0 10px #cccccc; -moz-box-shadow: 0 0 10px #cccccc; box-shadow: 0 0 10px #cccccc; } +.cms #vakata-contextmenu, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu { display: block; visibility: hidden; left: 0; top: -200px; position: absolute; margin: 0; padding: 0; min-width: 180px; background: #FFF; border: 1px solid silver; z-index: 10000; *width: 180px; -moz-box-shadow: 0 0 10px #CCC; -webkit-box-shadow: 0 0 10px #CCC; box-shadow: 0 0 10px #CCC; } .cms #vakata-contextmenu::before, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu::before { content: ""; display: block; /* reduce the damage in FF3.0 */ position: absolute; top: -10px; left: 24px; width: 0; border-width: 0 6px 10px 6px; border-color: #FFF transparent; border-style: solid; z-index: 10000; } .cms #vakata-contextmenu::after, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu::after { content: ""; display: block; /* reduce the damage in FF3.0 */ position: absolute; top: -11px; left: 23px; width: 0; border-width: 0 7px 11px 7px; border-color: #CCC transparent; border-style: solid; } .cms #vakata-contextmenu ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu ul { min-width: 180px; *width: 180px; } @@ -849,13 +847,13 @@ form.import-form label.left { width: 250px; } .cms #vakata-contextmenu li, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li { line-height: 20px; min-height: 23px; position: relative; padding: 0px; } .cms #vakata-contextmenu li:last-child, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li:last-child { margin-bottom: 1px; } .cms #vakata-contextmenu li a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a { padding: 1px 10px; line-height: 23px; display: block; text-decoration: none; margin: 1px 1px 0 1px; border: 0; } -.cms #vakata-contextmenu li a:hover, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a:hover { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } +.cms #vakata-contextmenu li a:hover, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a:hover { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(to bottom, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } .cms #vakata-contextmenu li ins, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ins { float: left; width: 0; height: 0; text-decoration: none; margin-right: 2px; } .cms #vakata-contextmenu li .jstree-pageicon, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li .jstree-pageicon { margin-top: 3px; margin-right: 5px; } -.cms #vakata-contextmenu li.vakata-hover > a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li.vakata-hover > a { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } +.cms #vakata-contextmenu li.vakata-hover > a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li.vakata-hover > a { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(to bottom, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } .cms #vakata-contextmenu .right, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu .right { right: 100%; left: auto; } .cms #vakata-contextmenu .bottom, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu .bottom { bottom: -1px; top: auto; } -.cms #vakata-contextmenu li ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul { display: none; position: absolute; top: -2px; left: 100%; background: #FFF; border: 1px solid silver; -webkit-box-shadow: 0 0 10px #cccccc; -moz-box-shadow: 0 0 10px #cccccc; box-shadow: 0 0 10px #cccccc; } +.cms #vakata-contextmenu li ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul { display: none; position: absolute; top: -2px; left: 100%; background: #FFF; border: 1px solid silver; -moz-box-shadow: 0 0 10px #CCC; -webkit-box-shadow: 0 0 10px #CCC; box-shadow: 0 0 10px #CCC; } .cms #vakata-contextmenu li ul.col-2, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul.col-2 { width: 360px; } .cms #vakata-contextmenu li ul.col-2 li, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul.col-2 li { width: 50%; } .cms #vakata-contextmenu li ul.col-3, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul.col-3 { width: 540px; } @@ -877,21 +875,21 @@ form.import-form label.left { width: 250px; } .tree-holder.jstree li.Root > a .jstree-icon, .cms-tree.jstree li.Root > a .jstree-icon { background-position: -56px -36px; } .tree-holder.jstree li.status-deletedonlive > a .text, .tree-holder.jstree li.status-deletedonlive > a:link .text, .tree-holder.jstree li.status-archived > a .text, .tree-holder.jstree li.status-archived > a:link .text, .cms-tree.jstree li.status-deletedonlive > a .text, .cms-tree.jstree li.status-deletedonlive > a:link .text, .cms-tree.jstree li.status-archived > a .text, .cms-tree.jstree li.status-archived > a:link .text { text-decoration: line-through; } .tree-holder.jstree li.jstree-checked > a, .tree-holder.jstree li.jstree-checked > a:link, .cms-tree.jstree li.jstree-checked > a, .cms-tree.jstree li.jstree-checked > a:link { background-color: #efe999; } -.tree-holder.jstree li.disabled > a, .tree-holder.jstree li.disabled > a:link, .tree-holder.jstree li.edit-disabled > a, .tree-holder.jstree li.edit-disabled > a:link, .cms-tree.jstree li.disabled > a, .cms-tree.jstree li.disabled > a:link, .cms-tree.jstree li.edit-disabled > a, .cms-tree.jstree li.edit-disabled > a:link { color: #aaaaaa; background-color: transparent; cursor: default; } +.tree-holder.jstree li.disabled > a, .tree-holder.jstree li.disabled > a:link, .tree-holder.jstree li.edit-disabled > a, .tree-holder.jstree li.edit-disabled > a:link, .cms-tree.jstree li.disabled > a, .cms-tree.jstree li.disabled > a:link, .cms-tree.jstree li.edit-disabled > a, .cms-tree.jstree li.edit-disabled > a:link { color: #aaa; background-color: transparent; cursor: default; } .tree-holder.jstree li.disabled > a > .jstree-checkbox, .tree-holder.jstree li.disabled > a:link > .jstree-checkbox, .tree-holder.jstree li.edit-disabled > a > .jstree-checkbox, .tree-holder.jstree li.edit-disabled > a:link > .jstree-checkbox, .cms-tree.jstree li.disabled > a > .jstree-checkbox, .cms-tree.jstree li.disabled > a:link > .jstree-checkbox, .cms-tree.jstree li.edit-disabled > a > .jstree-checkbox, .cms-tree.jstree li.edit-disabled > a:link > .jstree-checkbox { background-position: -57px -54px; } -.tree-holder.jstree li.readonly, .cms-tree.jstree li.readonly { color: #aaaaaa; padding-left: 18px; } +.tree-holder.jstree li.readonly, .cms-tree.jstree li.readonly { color: #aaa; padding-left: 18px; } .tree-holder.jstree li.readonly a, .tree-holder.jstree li.readonly a:link, .cms-tree.jstree li.readonly a, .cms-tree.jstree li.readonly a:link { margin: 0; padding: 0; } .tree-holder.jstree li.readonly .jstree-icon, .cms-tree.jstree li.readonly .jstree-icon { display: none; } -.tree-holder.jstree a, .tree-holder.jstree a:link, .cms-tree.jstree a, .cms-tree.jstree a:link { color: #0073c1; padding: 3px 6px 3px 3px; border: none; display: inline-block; margin-right: 5px; } +.tree-holder.jstree a, .tree-holder.jstree a:link, .cms-tree.jstree a, .cms-tree.jstree a:link { color: #0073C1; padding: 3px 6px 3px 3px; border: none; display: inline-block; margin-right: 5px; } .tree-holder.jstree ins, .cms-tree.jstree ins { background-color: transparent; background-image: url(../images/sitetree_ss_default_icons.png); } -.tree-holder.jstree span.badge, .cms-tree.jstree span.badge { clear: both; text-transform: uppercase; text-shadow: none; display: inline-block; position: relative; padding: 3px 3px 1px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-top: -1px; -webkit-border-radius: 2px 2px; -moz-border-radius: 2px / 2px; border-radius: 2px / 2px; } -.tree-holder.jstree span.comment-count, .cms-tree.jstree span.comment-count { clear: both; position: relative; text-transform: uppercase; display: inline-block; overflow: visible; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-right: 6px; -webkit-border-radius: 2px 2px; -moz-border-radius: 2px / 2px; border-radius: 2px / 2px; color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } +.tree-holder.jstree span.badge, .cms-tree.jstree span.badge { clear: both; text-transform: uppercase; text-shadow: none; display: inline-block; position: relative; padding: 3px 3px 1px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-top: -1px; -moz-border-radius: 2px / 2px; -webkit-border-radius: 2px 2px; border-radius: 2px / 2px; } +.tree-holder.jstree span.comment-count, .cms-tree.jstree span.comment-count { clear: both; position: relative; text-transform: uppercase; display: inline-block; overflow: visible; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-right: 6px; -moz-border-radius: 2px / 2px; -webkit-border-radius: 2px 2px; border-radius: 2px / 2px; color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } .tree-holder.jstree span.comment-count:before, .cms-tree.jstree span.comment-count:before { content: ""; position: absolute; border-style: solid; display: block; width: 0; bottom: -4px; /* value = - border-top-width - border-bottom-width */ left: 3px; /* controls horizontal position */ border-width: 4px 4px 0; border-color: #C9B800 transparent; } .tree-holder.jstree span.comment-count:after, .cms-tree.jstree span.comment-count:after { content: ""; position: absolute; border-style: solid; /* reduce the damage in FF3.0 */ display: block; width: 0; bottom: -3px; /* value = - border-top-width - border-bottom-width */ left: 4px; /* value = (:before left) + (:before border-left) - (:after border-left) */ border-width: 3px 3px 0; border-color: #FFF0BC transparent; } .tree-holder.jstree .jstree-hovered, .cms-tree.jstree .jstree-hovered { text-shadow: none; text-decoration: none; } .tree-holder.jstree .jstree-closed > ins, .cms-tree.jstree .jstree-closed > ins { background-position: 2px -1px; } .tree-holder.jstree .jstree-open > ins, .cms-tree.jstree .jstree-open > ins { background-position: -18px -1px; } -.tree-holder.filtered-list li:not(.filtered-item) > a, .cms-tree.filtered-list li:not(.filtered-item) > a { color: #aaaaaa; } +.tree-holder.filtered-list li:not(.filtered-item) > a, .cms-tree.filtered-list li:not(.filtered-item) > a { color: #aaa; } .cms-tree.jstree .jstree-no-checkboxes li a { padding-left: 12px; } .cms-tree.jstree .jstree-no-checkboxes li .jstree-hovered, .cms-tree.jstree .jstree-no-checkboxes li .jstree-clicked, .cms-tree.jstree .jstree-no-checkboxes li a:focus { padding-left: 0; } @@ -902,7 +900,7 @@ form.import-form label.left { width: 250px; } /** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. Ensure status is visible in sidebar */ .cms-content-tools .cms-tree.jstree li { min-width: 159px; } .cms-content-tools .cms-tree.jstree a { overflow: hidden; display: block; position: relative; } -.cms-content-tools .cms-tree.jstree span.badge { position: absolute; top: 0; right: 0; padding: 7px 9px 6px 5px; margin: 0; max-width: 40%; -webkit-transition: max-width 0.75s linear; -moz-transition: max-width 0.75s linear; -o-transition: max-width 0.75s linear; transition: max-width 0.75s linear; } +.cms-content-tools .cms-tree.jstree span.badge { position: absolute; top: 0; right: 0; padding: 7px 9px 6px 5px; margin: 0; max-width: 40%; -moz-transition: max-width 0.75s linear; -o-transition: max-width 0.75s linear; -webkit-transition: max-width 0.75s linear; transition: max-width 0.75s linear; } .cms-content-tools .cms-tree.jstree span.badge:hover { max-width: 150px; } a .jstree-pageicon { float: left; margin-right: 4px; position: relative; } @@ -914,41 +912,41 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } /* tree status icons and labels */ .cms-tree.jstree .status-modified > a .jstree-pageicon:before, .cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before, .cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before, .cms-tree.jstree .status-archived > a .jstree-pageicon:before, .cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before, .cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { content: ""; display: block; width: 5px; height: 5px; position: absolute; bottom: 0; right: 0; background: #fce2d0; border: 1px solid #ff9344; border-radius: 100px; box-shadow: 0px 0px 0px 1px #fff; } -.jstree .status-modified > .jstree-hovered, .jstree .status-modified > .jstree-clicked, .cms-tree.jstree span.badge.status-modified, .cms-tree.jstree .status-modified > a .jstree-pageicon:before { background-color: #fff4ed; border-color: #ee6214; } +.jstree .status-modified > .jstree-hovered, .jstree .status-modified > .jstree-clicked, .cms-tree.jstree span.badge.status-modified, .cms-tree.jstree .status-modified > a .jstree-pageicon:before { background-color: #FFF4ED; border-color: #EE6214; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-modified { box-shadow: 0px 0px 6px 2px #fff4ed; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-modified { box-shadow: 0px 0px 6px 2px #FFF4ED; } -.cms-tree.jstree span.badge.status-modified { color: #ee6214; } +.cms-tree.jstree span.badge.status-modified { color: #EE6214; } -.jstree .status-addedtodraft > .jstree-hovered, .jstree .status-addedtodraft > .jstree-clicked, .cms-tree.jstree span.badge.status-addedtodraft, .cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before { background-color: #fff4ed; border-color: #ee6214; } +.jstree .status-addedtodraft > .jstree-hovered, .jstree .status-addedtodraft > .jstree-clicked, .cms-tree.jstree span.badge.status-addedtodraft, .cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before { background-color: #FFF4ED; border-color: #EE6214; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-addedtodraft { box-shadow: 0px 0px 6px 2px #fff4ed; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-addedtodraft { box-shadow: 0px 0px 6px 2px #FFF4ED; } -.cms-tree.jstree span.badge.status-addedtodraft { color: #ee6214; } +.cms-tree.jstree span.badge.status-addedtodraft { color: #EE6214; } -.jstree .status-deletedonlive > .jstree-hovered, .jstree .status-deletedonlive > .jstree-clicked, .cms-tree.jstree span.badge.status-deletedonlive, .cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before { background-color: whitesmoke; border-color: #5f7688; } +.jstree .status-deletedonlive > .jstree-hovered, .jstree .status-deletedonlive > .jstree-clicked, .cms-tree.jstree span.badge.status-deletedonlive, .cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before { background-color: #F5F5F5; border-color: #5F7688; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-deletedonlive { box-shadow: 0px 0px 6px 2px whitesmoke; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-deletedonlive { box-shadow: 0px 0px 6px 2px #F5F5F5; } -.cms-tree.jstree span.badge.status-deletedonlive { color: #5f7688; } +.cms-tree.jstree span.badge.status-deletedonlive { color: #5F7688; } -.jstree .status-archived > .jstree-hovered, .jstree .status-archived > .jstree-clicked, .cms-tree.jstree span.badge.status-archived, .cms-tree.jstree .status-archived > a .jstree-pageicon:before { background-color: whitesmoke; border-color: #5f7688; } +.jstree .status-archived > .jstree-hovered, .jstree .status-archived > .jstree-clicked, .cms-tree.jstree span.badge.status-archived, .cms-tree.jstree .status-archived > a .jstree-pageicon:before { background-color: #F5F5F5; border-color: #5F7688; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-archived { box-shadow: 0px 0px 6px 2px whitesmoke; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-archived { box-shadow: 0px 0px 6px 2px #F5F5F5; } -.cms-tree.jstree span.badge.status-archived { color: #5f7688; } +.cms-tree.jstree span.badge.status-archived { color: #5F7688; } -.jstree .status-removedfromdraft > .jstree-hovered, .jstree .status-removedfromdraft > .jstree-clicked, .cms-tree.jstree span.badge.status-removedfromdraft, .cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before { background-color: whitesmoke; border-color: #5f7688; } +.jstree .status-removedfromdraft > .jstree-hovered, .jstree .status-removedfromdraft > .jstree-clicked, .cms-tree.jstree span.badge.status-removedfromdraft, .cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before { background-color: #F5F5F5; border-color: #5F7688; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-removedfromdraft { box-shadow: 0px 0px 6px 2px whitesmoke; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-removedfromdraft { box-shadow: 0px 0px 6px 2px #F5F5F5; } -.cms-tree.jstree span.badge.status-removedfromdraft { color: #5f7688; } +.cms-tree.jstree span.badge.status-removedfromdraft { color: #5F7688; } -.jstree .status-workflow-approval > .jstree-hovered, .jstree .status-workflow-approval > .jstree-clicked, .cms-tree.jstree span.badge.status-workflow-approval, .cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { background-color: #e8faff; border-color: #0070b4; } +.jstree .status-workflow-approval > .jstree-hovered, .jstree .status-workflow-approval > .jstree-clicked, .cms-tree.jstree span.badge.status-workflow-approval, .cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { background-color: #E8FAFF; border-color: #0070B4; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-workflow-approval { box-shadow: 0px 0px 6px 2px #e8faff; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-workflow-approval { box-shadow: 0px 0px 6px 2px #E8FAFF; } -.cms-tree.jstree span.badge.status-workflow-approval { color: #0070b4; } +.cms-tree.jstree span.badge.status-workflow-approval { color: #0070B4; } .cms-tree { visibility: hidden; } .cms-tree.multiple li > a > .jstree-icon { display: none; } @@ -959,9 +957,9 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-tree a.jstree-loading .jstree-pageicon { background: url(../images/throbber.gif) top left no-repeat; } /** Styles for the left hand side menu and header for the admin panels. Take into consideration CSS selector performance. @package framework @subpackage admin */ -.cms-logo-header { position: relative !important; top: auto !important; height: auto !important; padding: 0 8px; line-height: 24px; background-color: #22385b; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMwNGU4MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE0MjEzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #304e80), color-stop(100%, #142136)); background-image: -webkit-linear-gradient(#304e80, #142136); background-image: -moz-linear-gradient(#304e80, #142136); background-image: -o-linear-gradient(#304e80, #142136); background-image: linear-gradient(#304e80, #142136); } +.cms-logo-header { position: relative !important; top: auto !important; height: auto !important; padding: 0 8px; line-height: 24px; background-color: #22385b; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMwNGU4MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE0MjEzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #304e80), color-stop(100%, #142136)); background-image: -moz-linear-gradient(#304e80, #142136); background-image: -webkit-linear-gradient(#304e80, #142136); background-image: linear-gradient(#304e80, #142136); } .cms-logo-header span { color: white; display: block; padding-left: 26px; } -.cms-logo-header span a { color: #3ebae0; display: inline; } +.cms-logo-header span a { color: #3EBAE0; display: inline; } .cms-logo { border-bottom: 1px solid #1a2a45; overflow: hidden; padding: 10px 0 9px; /* should come to 40px with border bottom and line-height */ position: relative; vertical-align: middle; font-size: 12px; min-height: 20px; } .collapsed .cms-logo { padding: 0; } @@ -970,10 +968,10 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-logo span { font-weight: bold; font-size: 12px; line-height: 16px; padding: 2px 0; margin-left: 30px; } .cms-login-status { border-top: 1px solid #19435c; padding: 8px 0 9.6px; line-height: 16px; font-size: 11px; } -.cms-login-status .logout-link { display: inline-block; height: 16px; width: 16px; float: left; margin: 0 8px 0 5px; background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1094px no-repeat; text-indent: -9999em; opacity: 0.9; } +.cms-login-status .logout-link { display: inline-block; height: 16px; width: 16px; float: left; margin: 0 8px 0 5px; background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -772px no-repeat; text-indent: -9999em; opacity: 0.9; } .cms-login-status .logout-link:hover, .cms-login-status .logout-link:focus { opacity: 1; } -.cms-menu { z-index: 80; background: #b0bec7; width: 160px; -webkit-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; -moz-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; } +.cms-menu { z-index: 80; background: #b0bec7; width: 160px; -moz-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; -webkit-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; } .cms-menu a { text-decoration: none; } .cms-menu .cms-panel-content { width: 160px; overflow-x: hidden; overflow-y: auto; position: relative !important; top: auto !important; left: auto !important; } .cms-menu.collapsed { width: 40px !important; cursor: auto; z-index: 1000; } @@ -990,25 +988,25 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-menu.collapsed .ss-ui-button.sticky-toggle { width: 50%; } .cms-menu .cms-panel-toggle a, .cms-menu .cms-panel-toggle a.toggle-expand { float: right; width: 20px; } .cms-menu .ss-ui-button.sticky-toggle { float: left; width: 24px; height: 24px; margin: 0; text-indent: -999em; background-color: transparent; background-image: url(../images/sticky-toggle-off.png); background-repeat: no-repeat; background-position: 3px; border: 0; } -.cms-menu .ss-ui-button.sticky-toggle:hover { -webkit-box-shadow: 0 0 0; -moz-box-shadow: 0 0 0; box-shadow: 0 0 0; } +.cms-menu .ss-ui-button.sticky-toggle:hover { -moz-box-shadow: 0 0 0; -webkit-box-shadow: 0 0 0; box-shadow: 0 0 0; } .cms-menu .ss-ui-button.sticky-toggle.active { background-image: url(../images/sticky-toggle-on.png); } .cms-menu .ss-ui-button.sticky-toggle .ui-button-text { padding: 0; } .cms-menu .ss-ui-button.sticky-toggle:hover + .sticky-status-indicator { display: block; padding: 5px 6px 0; } .cms-menu .sticky-status-indicator { display: none; position: absolute; top: -22px; left: 2px; font-size: 9px; color: #555d60; text-transform: uppercase; background-color: #b0bec7; } .cms-menu-list li { /* Style applied to the menu flyout only when the collapsed setting */ } -.cms-menu-list li a { display: block; line-height: 16px; min-height: 16px; font-size: 12px; text-shadow: #bfcad2 1px 1px 0; color: #1f1f1f; padding: 11px 5px 11px 8px; background-color: #b0bec7; cursor: pointer; position: relative; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #92a5b2)); background-image: -webkit-linear-gradient(#b0bec7, #92a5b2); background-image: -moz-linear-gradient(#b0bec7, #92a5b2); background-image: -o-linear-gradient(#b0bec7, #92a5b2); background-image: linear-gradient(#b0bec7, #92a5b2); border-top: 1px solid #c2cdd4; border-bottom: 1px solid #748d9d; } -.cms-menu-list li a:hover { text-decoration: none; background-color: #b6c3cb; border-bottom: 1px solid #8399a7; color: #2c2c2c; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JmY2FkMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bfcad2), color-stop(100%, #b0bec7)); background-image: -webkit-linear-gradient(#bfcad2, #b0bec7); background-image: -moz-linear-gradient(#bfcad2, #b0bec7); background-image: -o-linear-gradient(#bfcad2, #b0bec7); background-image: linear-gradient(#bfcad2, #b0bec7); } -.cms-menu-list li a:focus, .cms-menu-list li a:active { border-top: 1px solid #a1b2bc; text-decoration: none; background-color: #a1b2bc; color: #393939; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ExYjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #92a5b2), color-stop(100%, #a1b2bc)); background-image: -webkit-linear-gradient(#92a5b2, #a1b2bc); background-image: -moz-linear-gradient(#92a5b2, #a1b2bc); background-image: -o-linear-gradient(#92a5b2, #a1b2bc); background-image: linear-gradient(#92a5b2, #a1b2bc); } +.cms-menu-list li a { display: block; line-height: 16px; min-height: 16px; font-size: 12px; text-shadow: #bfcad2 1px 1px 0; color: #1f1f1f; padding: 11px 5px 11px 8px; background-color: #b0bec7; cursor: pointer; position: relative; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #92a5b2)); background-image: -moz-linear-gradient(#b0bec7, #92a5b2); background-image: -webkit-linear-gradient(#b0bec7, #92a5b2); background-image: linear-gradient(#b0bec7, #92a5b2); border-top: 1px solid #c2cdd4; border-bottom: 1px solid #748d9d; } +.cms-menu-list li a:hover { text-decoration: none; background-color: #b6c3cb; border-bottom: 1px solid #8399a7; color: #2c2c2c; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JmY2FkMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bfcad2), color-stop(100%, #b0bec7)); background-image: -moz-linear-gradient(#bfcad2, #b0bec7); background-image: -webkit-linear-gradient(#bfcad2, #b0bec7); background-image: linear-gradient(#bfcad2, #b0bec7); } +.cms-menu-list li a:focus, .cms-menu-list li a:active { border-top: 1px solid #a1b2bc; text-decoration: none; background-color: #a1b2bc; color: #393939; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ExYjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #92a5b2), color-stop(100%, #a1b2bc)); background-image: -moz-linear-gradient(#92a5b2, #a1b2bc); background-image: -webkit-linear-gradient(#92a5b2, #a1b2bc); background-image: linear-gradient(#92a5b2, #a1b2bc); } .cms-menu-list li a .icon { display: block; position: absolute; top: 50%; margin-left: 4px; margin-top: -8px; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); opacity: 0.7; } .cms-menu-list li a .text { display: block; margin-left: 30px; } .cms-menu-list li a .toggle-children { display: inline-block; float: right; width: 20px; height: 100%; cursor: pointer; } -.cms-menu-list li a .toggle-children .toggle-children-icon { display: inline-block; width: 8px; height: 8px; background: url('../images/sprites-32x32-s7af51a6313.png') 0 -348px no-repeat; vertical-align: middle; } -.cms-menu-list li a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -332px no-repeat; } +.cms-menu-list li a .toggle-children .toggle-children-icon { display: inline-block; width: 8px; height: 8px; background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -798px no-repeat; vertical-align: middle; } +.cms-menu-list li a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -814px no-repeat; } .cms-menu-list li ul li a { border-top: 1px solid #b6c3cb; } -.cms-menu-list li.current a { color: white; text-shadow: #1e5270 0 -1px 0; border-top: 1px solid #55a4d2; border-bottom: 1px solid #236184; background-color: #338dc1; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI4NzA5OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #338dc1), color-stop(100%, #287099)); background-image: -webkit-linear-gradient(#338dc1, #287099); background-image: -moz-linear-gradient(#338dc1, #287099); background-image: -o-linear-gradient(#338dc1, #287099); background-image: linear-gradient(#338dc1, #287099); } -.cms-menu-list li.current a .toggle-children .toggle-children-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -406px no-repeat; } -.cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1120px no-repeat; } +.cms-menu-list li.current a { color: white; text-shadow: #1e5270 0 -1px 0; border-top: 1px solid #55a4d2; border-bottom: 1px solid #236184; background-color: #338DC1; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI4NzA5OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #338dc1), color-stop(100%, #287099)); background-image: -moz-linear-gradient(#338dc1, #287099); background-image: -webkit-linear-gradient(#338dc1, #287099); background-image: linear-gradient(#338dc1, #287099); } +.cms-menu-list li.current a .toggle-children .toggle-children-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -830px no-repeat; } +.cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -846px no-repeat; } .cms-menu-list li.current ul { border-top: none; display: block; } .cms-menu-list li.current li { background-color: #287099; } .cms-menu-list li.current li a { font-size: 11px; padding: 0 10px 0 40px; height: 32px; line-height: 32px; color: #e2f0f7; background: none; border-top: 1px solid #2f81b1; border-bottom: 1px solid #1e5270; } @@ -1031,42 +1029,42 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-content-controls.cms-preview-controls { z-index: 1; background: #eceff1; height: 30px; /* should be set in js Layout to match page actions */ padding: 12px 12px; } .cms-content-controls .icon-view, .cms-content-controls .preview-selector.dropdown a.chzn-single { white-space: nowrap; } .cms-content-controls .icon-view:before, .cms-content-controls .preview-selector.dropdown a.chzn-single:before { display: inline-block; float: left; content: ''; width: 23px; height: 17px; overflow: hidden; } -.cms-content-controls .icon-auto:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -108px no-repeat; } -.cms-content-controls .icon-desktop:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -81px no-repeat; } -.cms-content-controls .icon-tablet:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -162px no-repeat; } -.cms-content-controls .icon-mobile:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -189px no-repeat; } -.cms-content-controls .icon-split:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -135px no-repeat; } -.cms-content-controls .icon-edit:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -27px no-repeat; } -.cms-content-controls .icon-preview:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 0 no-repeat; } -.cms-content-controls .icon-window:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -54px no-repeat; } +.cms-content-controls .icon-auto:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -898px no-repeat; } +.cms-content-controls .icon-desktop:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -925px no-repeat; } +.cms-content-controls .icon-tablet:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -1087px no-repeat; } +.cms-content-controls .icon-mobile:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -1006px no-repeat; } +.cms-content-controls .icon-split:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -1060px no-repeat; } +.cms-content-controls .icon-edit:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -979px no-repeat; } +.cms-content-controls .icon-preview:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -1033px no-repeat; } +.cms-content-controls .icon-window:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -952px no-repeat; } .cms-content-controls .cms-navigator { width: 100%; } .cms-content-controls .preview-selector.dropdown a.chzn-single { text-indent: -200px; } -.cms-content-controls .preview-selector { float: right; border-bottom: none; position: relative; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; margin: 3px 0 0 4px; padding: 0; height: 28px; } -.cms-content-controls .preview-selector a.chzn-single { width: 20px; padding: 6px 5px 5px; height: 18px; margin: -3px 0 0; filter: none; /* remove ie background */ background: none; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } -.cms-content-controls .preview-selector a.chzn-single:hover, .cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { background-color: #dae0e5; -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); } -.cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { -webkit-border-radius: 0 0 3px 3px; -moz-border-radius: 0 0 3px 3px; -ms-border-radius: 0 0 3px 3px; -o-border-radius: 0 0 3px 3px; border-radius: 0 0 3px 3px; } +.cms-content-controls .preview-selector { float: right; border-bottom: none; position: relative; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; margin: 3px 0 0 4px; padding: 0; height: 28px; } +.cms-content-controls .preview-selector a.chzn-single { width: 20px; padding: 6px 5px 5px; height: 18px; margin: -3px 0 0; filter: none; /* remove ie background */ background: none; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } +.cms-content-controls .preview-selector a.chzn-single:hover, .cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { background-color: #dae0e5; -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); } +.cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { -moz-border-radius: 0 0 3px 3px; -webkit-border-radius: 0; border-radius: 0 0 3px 3px; } .cms-content-controls .preview-selector a.chzn-single div { display: none; } .cms-content-controls .preview-selector.open .chzn-drop { position: absolute; left: auto !important; right: 0; } -.cms-content-controls .preview-selector .chzn-drop { -webkit-border-radius: 3px 3px 0 3px; -moz-border-radius: 3px 3px 0 3px; -ms-border-radius: 3px 3px 0 3px; -o-border-radius: 3px 3px 0 3px; border-radius: 3px 3px 0 3px; -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); } +.cms-content-controls .preview-selector .chzn-drop { -moz-border-radius: 3px 3px 0 3px; -webkit-border-radius: 3px; border-radius: 3px 3px 0 3px; -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); } .cms-content-controls .preview-selector .chzn-drop .chzn-results { width: 135px; } .cms-content-controls .preview-selector .chzn-drop .chzn-results .result-selected { background: #eceff1; } .cms-content-controls .preview-selector .chzn-container { width: auto !important; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop { padding: 0; border-bottom: 1px solid #aaa; margin-top: -5px; width: auto !important; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop .chzn-search { display: none; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul { padding: 0; margin: 0; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li { font-size: 12px; line-height: 16px; padding: 7px 16px 7px 6px; color: #0073c1; border-bottom: 1px solid #DDD; background-color: #FFF; /* Description styling */ } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li { font-size: 12px; line-height: 16px; padding: 7px 16px 7px 6px; color: #0073C1; border-bottom: 1px solid #DDD; background-color: #FFF; /* Description styling */ } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:before { margin-right: 2px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.description { padding-top: 5px; padding-bottom: 5px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.description:before { margin-top: 5px; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.highlighted, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:hover, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:focus { color: #0073c1; filter: none; background: #f2f4f6; text-decoration: none; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.first { -webkit-border-radius: 3px 3px 0 0; -moz-border-radius: 3px 3px 0 0; -ms-border-radius: 3px 3px 0 0; -o-border-radius: 3px 3px 0 0; border-radius: 3px 3px 0 0; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.last { border-bottom: none; -webkit-border-radius: 0 0 0 3px; -moz-border-radius: 0 0 0 3px; -ms-border-radius: 0 0 0 3px; -o-border-radius: 0 0 0 3px; border-radius: 0 0 0 3px; } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.highlighted, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:hover, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:focus { color: #0073C1; filter: none; background: #f2f4f6; text-decoration: none; } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.first { -moz-border-radius: 3px 3px 0 0; -webkit-border-radius: 3px; border-radius: 3px 3px 0 0; } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.last { border-bottom: none; -moz-border-radius: 0 0 0 3px; -webkit-border-radius: 0; border-radius: 0 0 0 3px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.restricted { /* disable option (eg.split mode for smaller screen sizes) */ color: #CCC; background-color: #EEE; pointer-events: none; /*text-decoration: line-through;*/ } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.restricted:before { opacity: 0.2; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li span { display: block; color: #6c6c6c; font-size: 0.85em; line-height: 1.1em; padding-left: 23px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li .icon-view { margin-right: 4px; } -.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected { background: #e6eaed; color: #444444; } -.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected.highlighted, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:hover, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:focus { background: #e6eaed; color: #444444; } +.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected { background: #e6eaed; color: #444; } +.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected.highlighted, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:hover, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:focus { background: #e6eaed; color: #444; } .cms-content-controls .cms-preview-states { float: right; } .cms-content-controls .cms-preview-states select { max-width: 150px; } .cms-content-controls .cms-preview-states.dropdown { max-width: 150px; } @@ -1074,28 +1072,28 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-content-controls .cms-preview-states.dropdown .chzn-container { max-width: 150px; } /* Styling for the preview screen sizes */ -.cms-preview { background-color: #eceff1; height: 100%; width: 100%; } +.cms-preview { background-color: #ECEFF1; height: 100%; width: 100%; } .cms-preview .cms-preview-overlay { width: 100%; height: 100%; } .cms-preview .preview-note { color: #CDD7DC; display: block; font-size: 22px; font-weight: bold; height: 82px; margin-top: -50px; margin-left: -150px; /* half of width */ position: absolute; text-align: center; text-shadow: 0 1px 0 #fff; top: 50%; left: 50%; width: 300px; } -.cms-preview .preview-note span { background: url('../images/sprites-64x64-s88957ee578.png') 0 0 no-repeat; display: block; height: 41px; margin: 0 auto 20px; width: 50px; } +.cms-preview .preview-note span { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 0 no-repeat; display: block; height: 41px; margin: 0 auto 20px; width: 50px; } .cms-preview .preview-scroll { height: 100%; overflow: auto; position: relative; width: 100%; } .cms-preview .preview-scroll .preview-device-outer { height: 100%; width: 100%; } -.cms-preview .preview-scroll .preview-device-outer .preview-device-inner { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; height: 100%; background-color: #FFF; } +.cms-preview .preview-scroll .preview-device-outer .preview-device-inner { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; width: 100%; height: 100%; background-color: #FFF; } .cms-preview .preview-scroll .preview-device-outer .preview-device-inner iframe { height: 100%; overflow-y: auto; width: 100%; } -.cms-preview.mobile .preview-scroll, .cms-preview.mobileLandscape .preview-scroll, .cms-preview.tablet .preview-scroll, .cms-preview.tabletLandscape .preview-scroll, .cms-preview.desktop .preview-scroll { background-color: #eceff1; /* cover website preview icon */ } -.cms-preview.mobile .preview-scroll .preview-device-outer, .cms-preview.mobileLandscape .preview-scroll .preview-device-outer, .cms-preview.tablet .preview-scroll .preview-device-outer, .cms-preview.tabletLandscape .preview-scroll .preview-device-outer, .cms-preview.desktop .preview-scroll .preview-device-outer { -webkit-border-radius: 7px; -moz-border-radius: 7px; -ms-border-radius: 7px; -o-border-radius: 7px; border-radius: 7px; background: #d5dde2; border: 1px solid transparent; border-left: 1px solid #cfd9de; padding: 0 16px 16px; } +.cms-preview.mobile .preview-scroll, .cms-preview.mobileLandscape .preview-scroll, .cms-preview.tablet .preview-scroll, .cms-preview.tabletLandscape .preview-scroll, .cms-preview.desktop .preview-scroll { background-color: #ECEFF1; /* cover website preview icon */ } +.cms-preview.mobile .preview-scroll .preview-device-outer, .cms-preview.mobileLandscape .preview-scroll .preview-device-outer, .cms-preview.tablet .preview-scroll .preview-device-outer, .cms-preview.tabletLandscape .preview-scroll .preview-device-outer, .cms-preview.desktop .preview-scroll .preview-device-outer { -moz-border-radius: 7px; -webkit-border-radius: 7px; border-radius: 7px; background: #d5dde2; border: 1px solid transparent; border-left: 1px solid #cfd9de; padding: 0 16px 16px; } .cms-preview.mobile .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.mobileLandscape .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.tablet .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.tabletLandscape .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.desktop .preview-scroll .preview-device-outer .preview-device-inner { border-top: 2px solid #e1e7ea; border-right: 1px solid transparent; border-bottom: 1px solid #e1e7ea; border-left: 1px solid #c3cfd6; } -.cms-preview.mobile .preview-scroll .preview-device-outer { -webkit-transform: rotate(0deg); -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -o-transform: rotate(0deg); transform: rotate(0deg); -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; transition: all 0.3s ease-in 1s; margin: 20px auto 20px; overflow: hidden; padding-top: 16px; } -.cms-preview.mobile .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transform: rotate(0deg); -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -o-transform: rotate(0deg); transform: rotate(0deg); -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.mobile .preview-scroll .preview-device-outer.rotate { -webkit-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -ms-transform: rotate(-90deg); -o-transform: rotate(-90deg); transform: rotate(-90deg); -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; transition: all 0.3s ease-in 1s; height: 583px; margin: 0px auto 0px; width: 320px; } -.cms-preview.mobile .preview-scroll .preview-device-outer.rotate .preview-device-inner { -webkit-transform-origin: 160px 160px; -moz-transform-origin: 160px 160px; -ms-transform-origin: 160px 160px; -o-transform-origin: 160px 160px; transform-origin: 160px 160px; -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -o-transform: rotate(90deg); transform: rotate(90deg); -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; height: 320px; width: 583px; } -.cms-preview.mobileLandscape .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 12% auto; padding-top: 16px; } -.cms-preview.mobileLandscape .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.tablet .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } -.cms-preview.tablet .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.tabletLandscape .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } -.cms-preview.tabletLandscape .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.desktop .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } +.cms-preview.mobile .preview-scroll .preview-device-outer { -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -webkit-transform: rotate(0deg); transform: rotate(0deg); -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; transition: all 0.3s ease-in 1s; margin: 20px auto 20px; overflow: hidden; padding-top: 16px; } +.cms-preview.mobile .preview-scroll .preview-device-outer .preview-device-inner { -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -webkit-transform: rotate(0deg); transform: rotate(0deg); -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.mobile .preview-scroll .preview-device-outer.rotate { -moz-transform: rotate(-90deg); -ms-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg); -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; transition: all 0.3s ease-in 1s; height: 583px; margin: 0px auto 0px; width: 320px; } +.cms-preview.mobile .preview-scroll .preview-device-outer.rotate .preview-device-inner { -moz-transform-origin: 160px 160px; -ms-transform-origin: 160px 160px; -webkit-transform-origin: 160px 160px; transform-origin: 160px 160px; -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -webkit-transform: rotate(90deg); transform: rotate(90deg); -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; height: 320px; width: 583px; } +.cms-preview.mobileLandscape .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 12% auto; padding-top: 16px; } +.cms-preview.mobileLandscape .preview-scroll .preview-device-outer .preview-device-inner { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.tablet .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } +.cms-preview.tablet .preview-scroll .preview-device-outer .preview-device-inner { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.tabletLandscape .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } +.cms-preview.tabletLandscape .preview-scroll .preview-device-outer .preview-device-inner { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.desktop .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } /******************************************** * Defines the styles for .ss-ui-action-tabset: @@ -1119,16 +1117,16 @@ visible. Added and removed with js in TabSet.js */ /*************************** of ss-ui-action-tabset ****************************************************************/ } .cms .ss-ui-action-tabset.multi { /* Style the tab panels */ } -.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav { -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; overflow: hidden; *zoom: 1; border: 1px solid #b3b3b3; float: left; overflow: visible; padding: 0; } +.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; overflow: hidden; *zoom: 1; border: 1px solid #b3b3b3; float: left; overflow: visible; padding: 0; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav:active { outline: none; box-shadow: none; -webkit-box-shadow: none; } -.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y4ZjhmOCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f8f8f8), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: -moz-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: -o-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: linear-gradient(top, #f8f8f8, #d9d9d9); -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: #eaeaea; border: none; border-right: 1px solid #eee; border-left: 1px solid #b3b3b3; margin: 0; overflow: visible; min-width: 110px; } +.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y4ZjhmOCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f8f8f8), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: -webkit-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: linear-gradient(to bottom, #f8f8f8, #d9d9d9); -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: #eaeaea; border: none; border-right: 1px solid #eee; border-left: 1px solid #b3b3b3; margin: 0; overflow: visible; min-width: 110px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li:active { outline: none; box-shadow: none; -webkit-box-shadow: none; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active { -moz-border-radius-bottomleft: 0px; -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; background: #f8f8f8; border-bottom: none !important; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active a { -moz-border-radius-bottomleft: 0px; -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active a:active, .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active a span:active { outline: none; box-shadow: none; -webkit-box-shadow: none; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.first { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-left: none; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.last { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-right: none; } -.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link { color: #444444; display: inline-block; font-weight: bold; line-height: 16px; padding: 5px 10px; } +.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link { color: #444; display: inline-block; font-weight: bold; line-height: 16px; padding: 5px 10px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link .ui-no-icon { display: inline-block; float: left; height: 16px; padding: 0 2px; width: 16px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link .title { display: inline-block; line-height: 18px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link.view-mode-batchactions-wrapper .title { margin-left: 22px; } @@ -1137,10 +1135,10 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel h3 { font-size: 13px; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel h4 { font-size: 12px; margin: 5px 0; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .ui-widget-content { background: none; } -.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label { float: none; width: auto; font-size: 12px; padding: 0 8px 4px 0; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label.extra-details { overflow: hidden; margin-top: 10px; display: block; color: #9d9d9d; font-style: italic; font-weight: normal; font-size: 1em; float: left; text-shadow: none; } -.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -webkit-border-radius: 50px; -moz-border-radius: 50px; -ms-border-radius: 50px; -o-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } +.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -moz-border-radius: 50px; -webkit-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field .middleColumn { margin: 0; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field input.text, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field select, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field textarea { padding: 5px; font-size: 11px; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field.checkbox { padding: 0 8px 0; } @@ -1150,7 +1148,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-content-fields { overflow: visible; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .chzn-container-single { width: 100% !important; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .chzn-container-single .chzn-single { padding: 0 0 0 5px; float: none; } -.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-edit-form { width: 100%; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .CompositeField { margin: 0; padding: 0; float: none; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .parent-mode { padding-top: 0; } @@ -1171,7 +1169,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset .batch-check { margin: 6px 0px 5px 9px; position: absolute; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar { min-width: 176px; /* for when the scrollbar is present & find dropdown open */ } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li { width: auto; } -.cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li a.tab-nav-link { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; transition-duration: 0.5s; overflow: hidden; padding-right: 0; width: 30px; } +.cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li a.tab-nav-link { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; transition-duration: 0.5s; overflow: hidden; padding-right: 0; width: 30px; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li a.tab-nav-link.active { -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; transition-duration: 0.5s; width: 110px; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open ul.ui-tabs-nav, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open ul.ui-tabs-nav li.first, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open ul.ui-tabs-nav li.last, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open-last ul.ui-tabs-nav, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open-last ul.ui-tabs-nav li.first, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open-last ul.ui-tabs-nav li.last { -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ui-tabs .ui-tabs-panel.ss-ui-action-tab { padding: 10px 6px; width: 162px; } @@ -1181,23 +1179,23 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.action-menus.ss-tabset { margin-top: 2px; /* Style the panel for actions-menu */ /* Re-align last tab */ } .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav { margin: 0; float: left; /* needed for ie but doesnt effect other browsers */ } .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li { background: none; border: none; border-bottom: none !important; display: inline; padding: 0; /* Make arrow point in up when nav open */ } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; outline: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a { text-shadow: white 0 1px 1px; color: #0073c1; font-size: 13px; font-weight: normal; line-height: 24px; padding: 0 25px 0 10px; /* Arrow */ } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; outline: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover { text-shadow: white 0 10px 10px; color: #005b98; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1188px no-repeat; border-bottom: 0; content: ""; display: inline-block; height: 16px; margin-left: 6px; width: 16px; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1162px no-repeat; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1214px no-repeat; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1136px no-repeat; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel { overflow: hidden; *zoom: 1; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; /* Restyle for smaller area*/ clear: both; display: block; background-color: #eceff1; border: 1px solid #ccc; border-bottom: 1px solid #eceff1; margin: 0; margin-top: 2px; max-width: 250px; padding: 8px 0 2px; position: absolute; z-index: 1; min-width: 190px; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; outline: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a { text-shadow: #fff 0 1px 1px; color: #0073C1; font-size: 13px; font-weight: normal; line-height: 24px; padding: 0 25px 0 10px; /* Arrow */ } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; outline: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover { text-shadow: #fff 0 10px 10px; color: #005b98; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -26px no-repeat; border-bottom: 0; content: ""; display: inline-block; height: 16px; margin-left: 6px; width: 16px; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 0 no-repeat; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -78px no-repeat; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -52px no-repeat; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel { overflow: hidden; *zoom: 1; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; /* Restyle for smaller area*/ clear: both; display: block; background-color: #ECEFF1; border: 1px solid #ccc; border-bottom: 1px solid #ECEFF1; margin: 0; margin-top: 2px; max-width: 250px; padding: 8px 0 2px; position: absolute; z-index: 1; min-width: 190px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h3, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h4, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h5 { font-weight: bold; line-height: 16px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h3 { font-size: 13px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h4 { font-size: 12px; margin: 5px 0; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .ui-widget-content { background: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label { float: none; width: auto; font-size: 12px; padding: 0 8px 4px 0; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label.extra-details { overflow: hidden; margin-top: 10px; display: block; color: #9d9d9d; font-style: italic; font-weight: normal; font-size: 1em; float: left; text-shadow: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -webkit-border-radius: 50px; -moz-border-radius: 50px; -ms-border-radius: 50px; -o-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -moz-border-radius: 50px; -webkit-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field .middleColumn { margin: 0; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field input.text, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field select, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field textarea { padding: 5px; font-size: 11px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field.checkbox { padding: 0 8px 0; } @@ -1207,7 +1205,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-content-fields { overflow: visible; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .chzn-container-single { width: 100% !important; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .chzn-container-single .chzn-single { padding: 0 0 0 5px; float: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-edit-form { width: 100%; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .CompositeField { margin: 0; padding: 0; float: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .parent-mode { padding-top: 0; } @@ -1220,7 +1218,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-sitetree-information { border-bottom: 1px solid #e6e7e8; margin-bottom: 8px; padding: 0 20px 0 0; margin-right: 10px; margin-left: 10px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-sitetree-information p.meta-info { color: #999; font-size: 11px; line-height: 16px; margin-bottom: 8px; white-space: nowrap; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button { width: 100%; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; background-color: #e0e5e8; outline: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; background-color: #e0e5e8; outline: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .last .ui-tabs-panel.ss-ui-action-tab { left: auto; right: -1px; } .cms .cms-content-actions .Actions { overflow: visible; } @@ -1248,7 +1246,7 @@ green tick icon as a background this is created using compass generated classes .cms-security h1 { margin: 45px 40px 5px 25px; font-size: 1.9em; line-height: 1.2; font-weight: bold; } .cms-security .Content { margin: 0 50px 0 25px; } .cms-security .Form { margin: 0 25px; } -.cms-security .Form .field { border: 0 none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; margin: 0; padding: 0; } +.cms-security .Form .field { border: 0 none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; margin: 0; padding: 0; } .cms-security .Form .field label.left { float: none; width: auto; } .cms-security .Form .field .middleColumn { margin: 0; } .cms-security .Form #Password { width: 300px; float: left; } @@ -1271,51 +1269,51 @@ green tick icon as a background this is created using compass generated classes /* Default CMS logo */ .cms-logo a { background-image: url("../images/logo_small@2x.png"); background-size: 22px 22px; } /* Logout button */ - .cms-login-status .logout-link { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -161px; background-size: 30px auto; } - .cms-content-controls .icon-auto:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -134px; background-size: 30px auto; } - .cms-content-controls .icon-desktop:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -241px; background-size: 30px auto; } - .cms-content-controls .icon-tablet:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -268px; background-size: 30px auto; } - .cms-content-controls .icon-mobile:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -214px; background-size: 30px auto; } - .cms-content-controls .icon-split:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -187px; background-size: 30px auto; } - .cms-content-controls .icon-edit:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -107px; background-size: 30px auto; } - .cms-content-controls .icon-preview:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -80px; background-size: 30px auto; } - .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -327px; background-size: 30px auto; } - .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -353px; background-size: 30px auto; } - .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -411px; background-size: 30px auto; } - .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -437px; background-size: 30px auto; } + .cms-login-status .logout-link { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -184px; background-size: 30px auto; } + .cms-content-controls .icon-auto:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -274px; background-size: 30px auto; } + .cms-content-controls .icon-desktop:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -301px; background-size: 30px auto; } + .cms-content-controls .icon-tablet:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -436px; background-size: 30px auto; } + .cms-content-controls .icon-mobile:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -355px; background-size: 30px auto; } + .cms-content-controls .icon-split:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -409px; background-size: 30px auto; } + .cms-content-controls .icon-edit:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -328px; background-size: 30px auto; } + .cms-content-controls .icon-preview:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -382px; background-size: 30px auto; } + .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -26px; background-size: 30px auto; } + .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 0; background-size: 30px auto; } + .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -78px; background-size: 30px auto; } + .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -52px; background-size: 30px auto; } /* CMS menu */ - .cms-menu-list li a .toggle-children .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -395px; background-size: 30px auto; } - .cms-menu-list li a .toggle-children.opened .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -379px; background-size: 30px auto; } - .cms-menu-list li.current a .toggle-children .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -295px; background-size: 30px auto; } - .cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -311px; background-size: 30px auto; } + .cms-menu-list li a .toggle-children .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -210px; background-size: 30px auto; } + .cms-menu-list li a .toggle-children.opened .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -226px; background-size: 30px auto; } + .cms-menu-list li.current a .toggle-children .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -242px; background-size: 30px auto; } + .cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -258px; background-size: 30px auto; } /* Sitetree */ .tree-holder.jstree-apple ins, .cms-tree.jstree-apple ins { background-image: url(../images/sitetree_ss_default_icons@2x.png); background-size: 108px 72px; } /* UI widget "close" button */ - .ui-widget-header a.ui-state-hover .ui-icon-closethick { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 0; background-size: 30px auto; } - .ui-widget-header .ui-icon-closethick { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -40px; background-size: 30px auto; } + .ui-widget-header a.ui-state-hover .ui-icon-closethick { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -104px; background-size: 30px auto; } + .ui-widget-header .ui-icon-closethick { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -144px; background-size: 30px auto; } /* Tab icons */ - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -250px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -100px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 0; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -200px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -150px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -50px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -150px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -250px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -50px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -100px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -200px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 0; background-size: 40px auto; } /* Menu icon classes */ - .icon.icon-24 { background-image: url('../images/menu-icons/24x24-2x-s7169efa003.png'); background-size: 24px auto; } - .icon.icon-24.icon-assetadmin { background-position: 0 -144px; } - .icon.icon-24.icon-cmsmain { background-position: 0 -120px; } + .icon.icon-24 { background-image: url('../images/menu-icons/24x24-2x-sccfd928e17.png'); background-size: 24px auto; } + .icon.icon-24.icon-assetadmin { background-position: 0 -216px; } + .icon.icon-24.icon-cmsmain { background-position: 0 -192px; } .icon.icon-24.icon-cmspagescontroller { background-position: 0 -168px; } - .icon.icon-24.icon-cmssettingscontroller { background-position: 0 0; } + .icon.icon-24.icon-cmssettingscontroller { background-position: 0 -96px; } .icon.icon-24.icon-securityadmin { background-position: 0 -24px; } - .icon.icon-24.icon-reportadmin { background-position: 0 -96px; } - .icon.icon-24.icon-commentadmin { background-position: 0 -240px; } - .icon.icon-24.icon-help { background-position: 0 -72px; } - .icon.icon-16 { background-image: url('../images/menu-icons/16x16-2x-s9b8c49312e.png'); background-size: 16px auto; } - .icon.icon-16.icon-assetadmin { background-position: 0 -80px; } - .icon.icon-16.icon-cmsmain { background-position: 0 -112px; } - .icon.icon-16.icon-cmspagescontroller { background-position: 0 -96px; } - .icon.icon-16.icon-cmssettingscontroller { background-position: 0 0; } + .icon.icon-24.icon-reportadmin { background-position: 0 -240px; } + .icon.icon-24.icon-commentadmin { background-position: 0 0; } + .icon.icon-24.icon-help { background-position: 0 -144px; } + .icon.icon-16 { background-image: url('../images/menu-icons/16x16-2x-sbe70081ef8.png'); background-size: 16px auto; } + .icon.icon-16.icon-assetadmin { background-position: 0 -144px; } + .icon.icon-16.icon-cmsmain { background-position: 0 -128px; } + .icon.icon-16.icon-cmspagescontroller { background-position: 0 -112px; } + .icon.icon-16.icon-cmssettingscontroller { background-position: 0 -64px; } .icon.icon-16.icon-securityadmin { background-position: 0 -16px; } - .icon.icon-16.icon-reportadmin { background-position: 0 -48px; } - .icon.icon-16.icon-commentadmin { background-position: 0 -160px; } - .icon.icon-16.icon-help { background-position: 0 -64px; } } + .icon.icon-16.icon-reportadmin { background-position: 0 -160px; } + .icon.icon-16.icon-commentadmin { background-position: 0 0; } + .icon.icon-16.icon-help { background-position: 0 -96px; } } diff --git a/admin/images/btn-icon-scb653ce8a9.png b/admin/images/btn-icon-scb653ce8a9.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f0f31378de5468090c4df14b99b663307e2a2e GIT binary patch literal 22990 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 VC3^VV37!A|002ovPDHLkV1hdm+uQ&E literal 0 HcmV?d00001 diff --git a/admin/images/btn-icon-se43cec5357.png b/admin/images/btn-icon-se43cec5357.png deleted file mode 100644 index 12727a91db6cb07dde57c0fe3b3b83716bdab1a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22916 zcmV*NKw`g%P)79TA3M!}+5j0o;3n(B~kn#wKpwg5cdR0nj0zn{z z1QJq6?{$0opEEm~>~3Z^!RPru@B4k9qnDk`-20nz+qtLQA_TK*;>3wwJRUCwZ+$R0 zvybaAl>O;*JOKA(512?D#qHo3hYlSQ z6W>{N`t+IY$BrFy#WZJG$z;q?mX7_;JemMH8@*BS-qQY15|9pg{wt&42VEsIa75#I8_WTnx#* zjxdq>Tp0u2US7~3l0ahiQuwOhC)4iSx$_9qW*}&3BbY{`iA_kDFgYpzI8@u$gCjUW zWo0GEHy3LfA`7MSoKUo0y2OY zf`YGL;!+w)YYtW~5C|bg&=yi;Y0x8oIP-$1;lsT?7a4$d=X-%ppwFhrP6RQ~7Vr23 zR&SooqRh;!jLuG-qHosS#&*vKg<1(h1+S4BwTlYWwmK$(eYFjAa_$H@Ik_2>)*S5K zufP6w=;M!TuW)|2-Ty@aut`oa{?? z@7^tL)&uJ5>Mritv&&PZ(h7c>wrkvx+yjtYa1kyS>l=7)zkbjM!uw%!MNe2)9 zmZVfFFLL!weojsf&&I~)!j>%?co#38E0{O${o!l+Obs`VcaGB88_(T z2*zV-0ehn{7(Eo@OM7frX|=U~7QXh{i~ks2(s#F_?DrsZ*zF z_XuXXRBL+b{vg>wFvkrrd6AR^+T@F-QM2bS1OhAOG-*$;J|_K%rnn0 zeUmOKBjO&IZ9Zn-A1UlDm&<$Nt4roRpufMre;dq_h=7I-8wQwNP#_CBa^whHxNrfG zT7ADnaHP%#KOBPb`!)l^EVi|?vvb2jhUcDp4mx-440MlW1`ZAm(6eVxz{E_qDl034 zYuBz(O?qOwh-PJm52?&-h?2H#+fr{}I4w~@S*0d`*<=338ilJ@uM(rQp>$ke^_YJZ z)gX>G3?-Nqri@ZjQlPrJnxT*=qkAkf;$=!o#|8EfvlWj`K%9}0!6c#zAb|S%dcc8$ z;kwv#sF^Te$cZa4T_zXU`GSIizR}UqUJ(%yqDPM&F^L8Z8U*9Vk7p8Jx^#)5mM$!K z6?VHk%zE>Vj$gchWi$W-R;qtMR8$m?0IATQefC)#ndIQ;=*awyO-GCI3b9Lcuv|H9^=VEbl(x3{-zKtO;96Dl(^Gpn&C3-j{wE@AWd5kYgPmbto<0D~J+ zq9`gV`UM;A9ju6s_~kYRu7N!u4{P!ccC-7)f@m=CME+NezZ!EeEz6s9*wQ6f8D}Vf z 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 diff --git a/admin/images/menu-icons/16x16-2x-s9b8c49312e.png b/admin/images/menu-icons/16x16-2x-s9b8c49312e.png deleted file mode 100644 index bd311b1322ce1042770fc3480b2a3cc00c300ff7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4147 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 diff --git a/admin/images/menu-icons/16x16-2x-sbe70081ef8.png b/admin/images/menu-icons/16x16-2x-sbe70081ef8.png new file mode 100644 index 0000000000000000000000000000000000000000..95459e2a1ee9e692c43157dbb8aebde89f346c90 GIT binary patch literal 4135 zcmV+?5ZLdDP)+GDoK(Ml|rdZPRb>hM>?l-LZp;b(#fNgCtVeigON+f zHK&tXnG`0s+?g>LWA=Iff33atT6^8s?m17%x1O23*52!X*T4Sn`@iq~zI9QeNKOQUFB?lCz{}@`iK<;CBI#l2rSY-vD3-E=U64R|OOBLJ|OPD;SN= zxFTfpb$C{2p%LCfH$(zApMr*HN=f%q?}-1`P>?D<6lr%Aw4XX49R=F@0XnM!eTox5#;AT$Phk^1%UEP$8`_xI!fKAoebmB- zCetqFM4N;2a1;ZvQ3a@j={(AL9EsiR^bWb(o#bHY*u~C+u+?x3&*3BaOEva0iwgdQ zI=TRx6^zHD{Q3~j{VAkz?IDhSIeaR2{)^$rA7Vb?x^f63ggeN6-xY30k$4ydnX5NgtUe4<)3B!Xu}fb~_|prk#iZKAiB~QH7&wmQ${#pZII>8G<1IG84YZ zblpGGN_BtbR5i+0IbrNXBqUqV%=Fy>g)?f5fw8|qdn9e(Tud~kd}-u;aD-kXCiBo= zVU!(f0O*h7{9k~^7{%Ebm(TH}NO0J^uK{2j){8-`ZrJexte2lT+|3B^1b)`mE;M{w z%}oonOk3yb0KU~2aoI`$$VeDzcQI-xLj_oG_$t>EU7NU zJC-&zOEXOO%ecSDbk-s}HU^(@NtDf|tsE1%TjysGx8W|vCRMT%;9U7ZT&8mQ|3&Az zw6I#V$*QPC_nOIkzBE;uD#yE+KC+M|UO+=WguQhBJ9vUW;(N6RH!!SR$EXlowlVo8 z*cG_K+p*j*mepodN#JCGZ$3 z?8q0K?;C>T2vVvu&$|U}6!M_{T#6aewvjmPrc*n_t{!El3u)%XB0uJ-l;rFz!&5tp zr&yJvRg2TFgn9~jQjsa7bhSfhA@8)X#C>|M8b-(uF30^O4GjX9BzG}7EWu=j`X9+f zp$^WaZY#4tg(XT$ETkpo)2SX{kA)>}W3(6cr5=~W z8pTNifZ{OKk0_4ZBh{C;j{F9eSURcprIe(?3OSWRr_h6$WAzY?cVVdruJgDk)Ilt~ zSCn>`PFGh_v&3R)i6>}_dDNK*@7qbneq_>jGR9DfB3ZcGME8tRf~T2AL*9(r4H>jn zPmXD!5}QX!AtH{nGlK!(YqUsAyJ7$$W4;$N9RW&nrc}ViOt_oTS{*!6zTPjZ9HSv` zr@6Pl3UZoUdw?=7BVJk#>K%BKx$8<#%53g{J=JPL| z7H}K=Q2>Aln=@067h@TW0s$0KN2RnOj^a`bh^f;rz$s=;aoI?KXflDN=4qBYp8+@n za0cM_2Ti~mRBCoQP%!u5UzakaiSOQZkmHGuv8wD6$5))yahK%40G-0Dm= zJV;iA>Kd+ZH6%yfWGDxhXTH`BbKHCIv}x;{gxYgSDtL~&7OtiV=W!m~V)<=2tuZs! z+_?v9MY)r_Xt8m`r7r&A*OarE%MQf?39yH~IbTx$nf~X(1pW<`_Lz-U{NI2RE0qLq zg*(9Q?DP?Ss@`D~US^Uz5sk@@*P$h6!WZs6=#Q7^X(m!}ZRGY~rsk7rk)Pc)M}R#{sNTULEg5f%Eev$=%OM?UN<=%>IYzuyvAw10(q4AWI2vN8$SSxIQrQfi-vesTEsS5LpGZ}tX)F&1o)cMM#ush zw79M{KsKDrB``;;>|HIHc4^}mvhj=7>4+hK2+PPF}D1iQSs%j`X ziRVT6lX_7lH|`sp0s7Fv#$*(e?-ykSCFUvTc~hKMOxvUBS{50Cug585aqtpl7N+R4 z#PL>RC+Um5Wsf~TJ32Ifa$WqAWgMUlru**q zcv8LTW`I`K!0js2Vxe9IXc6Z;zGWs_i&g^QCVUxcCeLOnFjt}8Cx>4u(^Y=Hoo<8C_6DZN7D&Zc zep=>Fk^b8Om9ts1v{ZCjmuJ~!mtoENt5#)?-9E4$WnKE&?hm8|hfsSFQ~&0qoU8e{ zI2yPIHSwLSYpdk{dM3UB0lI0;V@xhEz;e^pm%#^dA=%mpjRKFsYhko72JfRO2XT$K zA26I6cRNu{Z-7`9QI^(P92{UY2I>y(vfw?ar#Bb*d^9+~Y<(@qbb-Prz+{}OulEZ+ znFi{)i=h3pg93Cn1)70Dr}IO2%VYyng8-zHA@)d!f`J@L2eiZrQrQ;T_CfdPZ3UQ4 zLJ2bT7{F6OUD{DuY8$6*9m2oD_{4E~%KP^)PPL+T^Q*`pUk?NDhQ2m5j9ag*7eNY{ zBZL5$XefFW2M4H!8x3Wz5RvHt6ZQUBTT5~7OCmsB!}>=glB*!@USFfzg(tv{gsP@m z*PP=26ej345SP7fR5%gfzqEoxi0oi$?1duqc2KNOOYFmJAPY@U9{E^?SJmsw9srTV zXt+?12D5Mpnd-gd#%2zY7p?9mu+(72tlrD&a9gq$z+s+9u0_4F2mS!W4d^$Mc3&Qr zWF3}yNfIng+<~)>q_U#ZU7TJ3VyLdAXKLq^ReAwLB~vbN&KUeKl#+nWjbEAm0felk zK}SuD^jI)}<5oi52?=uu7WztweZ$9`uKi zWB?-mG~~R~MCsTz;{31x1@bX~Q+|7pY2%C3nB)^+p~a9^1xvboKS>uhU$};0*G#sL ztMt<^Kw}0RD;f3)Aa14H7uGAMXpN7A9RtyD8PB(JSOD<|(iO>Qp`5Jq?L=D)3kQ%Y zy;U))Cewpj*rJ!D1AFD|P#SctWn3k8bQm6F;-@3g!e(&de1;(H+MoIhalmj$;u6*vwqT`Fvf* z!Z;h7xIj2+#5|pw1n)(nKM33lt3wIc3puG20Z5s`x7s%lpIH>Vx2Q_v>J3?5q z_rJcLBzUt^n8c&P@&ZZwMa0VFRV6<@tS%whJ zod6p7dd*QYp5`<50MGlJME_)1S!e}lX6~A+EWpJ~5ext#Gu*-m?DvH}su0FeV%aCm`K^=0SuBJM61v-@0j0ejx4)1#bJjn^2;>Z;nlWL2H104V&n1Qw)CwwEh zQ77|_-*JGI@(o#DQWBpN;!`WYY+ub)nM%j=tr=htCsPoa$BA?*4p1fVOW)3Bive+f z5h3iSKSrw0F^D%fJ{ZabA5+V73VnVg6u`YPfEFPqL0yvnTmjG^^gOy!1*jGppuU>& zxIJIHSKhPlG)CInNZek7xda`(9m;-}o2g3s@kpCpt{|wLAHtXwbtc;@(9+`|9XZ}E zJ(!m8%!*xI)fr%;!io7kV{KU3pvZHa9vWbQ0GPqF{;H4wQ&or3&gP=5ANdITRDhlI zNOM8}42t{2xlE=%4%mFCpd@jx{0W-kJ+I4BCNqB~F|aJ7I-f-!!@CxoUCr89B`NU< zia~gVF0P$sI<*{{&yT-dPO-7O;aqB?9zD(;+vdZ_6g|WH&xY4p#V@0sWO#jE^#eip l!Co#qun~(f%lh7y{{hzQ@3r1#(&7LB002ovPDHLkV1g#!+5`Xq literal 0 HcmV?d00001 diff --git a/admin/images/menu-icons/16x16-s3f4c846209.png b/admin/images/menu-icons/16x16-s3f4c846209.png new file mode 100644 index 0000000000000000000000000000000000000000..19780777575b257c74900e3b5941f4ce97e91e7c GIT binary patch literal 1637 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 diff --git a/admin/images/menu-icons/24x24-2x-s7169efa003.png b/admin/images/menu-icons/24x24-2x-s7169efa003.png deleted file mode 100644 index e9564f78e13ddf5e9246836803fb1167adaee1a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6015 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 diff --git a/admin/images/menu-icons/24x24-2x-sccfd928e17.png b/admin/images/menu-icons/24x24-2x-sccfd928e17.png new file mode 100644 index 0000000000000000000000000000000000000000..82d45839cbfe86ef292cfcd7f9f6f05f3068df8d GIT binary patch literal 5981 zcmV-j7ozBiP)R3^ZAP0+k!Tr2Qz}!@#w5u^5iOFWMM6fAr4VJU zl#GaMiKN1l=XuY2^F7PG_ndRjIrl98Gn485{-5{mz2~0$`=0Y(e%t^5{~f6q;gWWA-rzt;WJ+J zW*J~%2<&BwU;%O@TuZF5s5W{@xHZ&HbgP7Bp#n6JP$pD>EJ^LHp;3{9aHU;wO4y|U zQUED{-w8l^sQl9<6od*;AYnV2hX}Ao!mLmM-jy&O!$JgjQo=9jiC05ne;W?S-Ei%$559mV^lN|&(o!c^}7m*EV2k2#jMUX>Vo zm0rPOo@-$$qAO}rVa_!JRHjNiTT`5W!iIz&_DqbUP|hZVKJXqdQl<^O%RPF456~p0 zDwm@g@=QNX47fE+I8q8LP*Ho|6iZM)4$wZvUZ%2CF_X+TW&*pt2}iDuv6rbHF2;f= zfca{gB>ebw+D%4!IpLf}rq4~|02@tTtxx#z*R1h}b)QFCw9}WS&!5MuXa&~coY)sX z;th-b@d&nJ5U)zUoTn|WAGFiIr!^I&4Qy9kBe!MycT(Pc%8r(w@Z$)IX~Ry#S$y}U z5@U)aM4AfF0{=oQ&2+rn*iDb4Gg_i9uVJ~x5WAb^F;GM$`U_vnQP-vMbw9@7HN%-d zpfxX59tUgV;~*1biJXRC*;De7!MZL>R^O26UQIx}X){P`@s9Rmk@CJGxilb`!@R@- zlt2xXA(t<3mxLJ{!HIMZK^xf=S*_{XIBhbqLqc1Y^U_Td=cX6&b$Au+y(H;sECQ zEFlCSJq|F9Lqbn4`U037H5WCS5(oH%{>Y6Kd&RUkkJG+7rz^7nR_}q$xwPh^3I-IUmPpoBv9u;}>ebAE{#Z@^7Ef!Id=ozBN@!GrG<-1FsS( zpr^Eje%u-sMd7r?P;_xCd|e5Q9F{JM##n?A5}m$CNYx)9Oc!}wMVM1{g|Z8k9U?$p zYM`Y6L;yrW?zUqYCpw38CDi-87G7pNMWcivHF1keawQZj*2?%eyr5*3rw_D~NGb z)I&>LL|ZjYLN4q1a>Z;dWCLyI-)?+Q&-Z86YcA_Jk9BRg*e{JOlf_obW`{UcF&1i3 zUDn}Ww0q=AhU%)zlGqY*$)^=jsMr&-Doi7T3^sfzvd`rIh<{lmn=C1DebNJDhsr-& z!bZx`@MyC{qjw;>qD7LxlXp6f&oBq$B@UudELCte&cc~Eoujc5rKmqTOo6=@-(nN3 z>(5nD8Exbrbbe;G<{eZ(d5Qp4V9WkNhNi)bIi?F(RB?S+^A8SC$?WHQ7riK#WvjSe zq)exUMja(q%*U8UUw@O(1#uD@;ym1db`o2=EsH#LxDj8oYPPd+4k*If%Yx~MBCspc z!^@#WZiq&xp=xW1f>@2MRAcEB`@s=H93;qLO(*2D6i^ozDOw<%4PJr`pGm7q)&-}q zJCwH^vd8R1MH!aUQo`>41t2q2{-val?;%4%2Mpz3IJ69pNwn#faP*yz)@VYLse0gG zNFmL(?KIxkV7Y9Psud(JLY$_J=UN=()oJ`yRK#@|#jq-+22>W%K8$bpWA`9kDA#nWwH^~N|mF=z1#tK*_D&0+-sgPRIee#wQc~?EY?fd z`oM|_um;nWDXvTLp4Iw*;N!RoUSTJdmquKO579-NSrZ5#8*FoNy|SjWHCCV_HK0%c zb(zW>G@z$f4^3%8T%@cY5e85}Sv^%u7ks6%b*>&(@h-j-2T%#mnU2)N(zve|1R%{; zv{VyQMfrHxWRuI2D+6f691#UzHEGe!IHxIIpOr|NEh&H$KnfrQkOD{nqySO?DS(p$ zpg3^$hoZ3WAmR*AP2KkpfU4UAluJ8w8wohf8GO-##RZLcn%PXY> z4YVJ%UNX^eRGt$T1Yq3_`LPb613pvkZn3gUDoV#V#>e{UMU&72?RB5;R@loM$8N@Zy5s*gvv=Q3jVs?j zh`n3taF!w=zu+I)LRr7EE0FNZBqdk_O4oCZKgOa$M zIzUecC`VVZzmGQL2dcpCIVt(-NFzWCvbx$duUy2gx>14YL^Y{jsyGZoF_+_Iv3r1# z=$vrIr@Bq{FXJ)8cO`f^ZFq040j#vwDTZoEr0rg+=pIU&?i^lvRo)<$W2z=agpoeM zTPz*`4$)Sa!8Z8R&<;~+&aOah*12)lUuWmqx9_HVInaz7lLoVxX@eW~cH>|eZnvy& zJq-vlk|Qp5wFKI9_yiSBGJ2lP?-QUNrG9d%&ptKDA3zQ5bq!{+%eFJwKNIP8^ibZP z?)MIsq7U`#GkBNpN1-*ZQ}wzEaSe~1Q0&h~DLNkT-v%%15?-vP#Cb<~Hv@CDV_%v! z>jsS3MV+JxVFd*X$+{wZYuqh6ZL-u0#$d+P#w7?b>pcb9JvJg$B32`>QmGDQ*56L7t z1>5i^iSFqHMJpBaT^~WLr;@eY-7BHCr07+ZstN;mIG&PN-|y=RtDG~e0i0Lz}J3Rp`(bE3wX{fl7`~faZIQBDM5(AJ$_H8U3Z6UI#5f+)(fh&|7TlEzP;Lovc zc-*vG^dDlR>CfnlpCB(CyV{^0k7*MvfdQ85B&MF8@Q|+ERWIsG%^RmeFEdbX0MbnJ zO=B${T@VOhsOeF)kBU{9rA<#HdRD)8S_Hr-lact4SfyVD{SBXAwqH%>55PQL9{@xG z)HfNp)BR<)vj;G4?=NzvAl(Br#YKkC^Qj_*0+=6daRd+x&@n-_w!#|IFAIYJoMHN0 z3acsR<|*qltDzlg<8Q$LtR&{&S>k;vKUfuQG{{h^F&?lDUUdZ6uWb(q0Pq}!J4{+E z2;Ped@JELkwK*b2@+xJzw?tTXAk#dYiKk7O(7}#6$jh*E)(79>3MC_2Thu}ZJ<4w| z3lqI5O(|)F=o8)A-u@VgVJxbiev9p77r>ZP+|!Q>RaOaZmW?SS`yF_d{rPBly8p0W zP!HX_@^3OI_>{)V))(Q*YHaBbDf75NS0bkK(Ekb)s_e21|1kK`@Zdw2? z44|C$ni*CVr6rRtq8d5k=DQ#OPD|2jhyWOZ(`_=BrN!f5K>*(K)&^(bRGTS)2oA{$ z7=jM8@kaGwpw$kWR$T))B_AyiAu606Zj>(q;D0LYqGrn8umBp;o{$sibqEWf0bTHu zyA8JDd8LZl(b5YAV54Ts?FtJZIz3(eH{AwK6Yd!z05TopMgjl^qLQup_(cT3X5BN< z{>O$_lseJhw^LEuqmK^`0x-%VDj%hlG>`)W>~#RxC!&gq+pnul{VJO`we zVj7+o7C=juliS0YjMo(P^OzfR%n!gSZItc^3!suo4V_GFkZI5yPV1?%{Q(?Of*jF2 zIX^h8^NOtqi|>W%gdS|Ps#) z$=g7}rwRFGvM>@;L;=jQNMDnSa~+IvXH3u`SG=lJ)^%m8;dvaf?n{ae;5KwAg) zSy)2FUV#lB0HBfs`?X}R&i)Pa4{%(!t-;Jbnt~(%goJHqo`iiM2>H>v%`Mok!eF2Qg=0LdX< z!|n7Ns^NRIKwbSZUH1-%6U0_6P03!`=`Ar>KU3(%!?A~m$FxUaCVKI13jDcHRuJ2; ziGLXy%UL)~->px4E2CF0(+n{k-A#PP;{n{`AHWEatFeb}AdBN)%Jbl|;oM?>9u<_mBdc8Lq;e8@5wH=#FO z-zeRKJH*C|cC+b+vuE9+&5Pb58bGC)ERD(hdN%Zkup(X?aToj50GuNgBQ!cHFP2N~ z3H&_(L?&3}7ZygxB>TtLiK?R9P@mqL`(JD1-IRP{=?UcM0rn?LpXizHGy;?qUN@!O zj)RW8yA4UtN=IiDVWFRaHlOxQvSg}lXt>BrmbOzXf8h%Qt> zIjR~%>Qd6apgKnL_33I%bcJqTY&LzIneGAV$8x1FKtY;?&EoHDV*|X^d52#VBS*lEEXxb(i3SmoA)wS;T%)C z07rnb7K!mbv|VHRoi6{2O8_g`RFgLJjbb#KWRr=wCk=C>)asAtoF?Dx00!8u6q$|{ zu}9BlaeTC+vEJW1fKv|Zg<3MtMr41Q=5EaM25`M;ld6##b9~&-UNbi~-S;mFhyz{# zlI=OWkKOV*gDm~PF6q1#z{M_}zirOEe-_5j+;s^s(x(PnY_)zXOw0h@j&-jxm6W%66Ct#85F}yFj7VPeQGRB`{5 z8=C?M?CCpye+o6+xs>yD=!TS`AMh&$;!b>pRaoh6x3A>ro%N!GGG?yJrbus0OIsFZ z3u#Ec?HAxOJdk9mVM%&6S6~Z$pvhhVYG9n}tmyUe5^kfRxz0VnRd~f?8qC)8-|n$X za3CevY>)fuETh>neUbx=Fg!oc8}+6=+tnH1z5wiH`ZH~k8|(ot^;tPat9+9=n}rnf z$i%43;q<82S^-RV`$UGM^iF)ERUDulO?FXK9rx;Ir&NFmLgm|VB_p{GppB0Q-8l=9 z{&+?Y@HgQydY~Sll>4VKxTd8M#2?d}! zmF-~_pkgQhnS{^)ylsIgcI`uCMytq+)6o{+xjuhi6d=!og8WRMHPfx(^^<8ys}oi6 z{!l*&yA1i=+)%pfU0o3rN!VcdSWV|HxWjcz9G0-c?Q_Cnl;%M>m6Cj9sW0--S$9Y{ zh{fm>nsL2H)(20A2=Ijr@GgE}2MmXnNm>x*^-$OsVv!2)1|Ad=XEDw%#l_U1ROx z^rTxiOaS}tafOp;SuUro8m!ZfptbJcWiCY{dOL$WC?X?`!;s{D@<@!wEv&E>CI#Z= z>W8@V^pCLP%3ZfJReb|G71=HT3UIUe={d=QA?sP5R9vje$coL~*a?Q)vCVI^<&gce z&K3HcF60bR;hZ!>RUO76OtF8ojURv$)PngqKqKr+j@OTzcQ5}3Hu7SGjtJR%00000 LNkvXXu0mjfYpF#C literal 0 HcmV?d00001 diff --git a/admin/images/menu-icons/24x24-s0dc15c36f9.png b/admin/images/menu-icons/24x24-s0dc15c36f9.png new file mode 100644 index 0000000000000000000000000000000000000000..5ed8fc993d6a0e5f19bfe5ac601a1813baafa79b GIT binary patch literal 2394 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 M07*qoM6N<$f;py>RsaA1 literal 0 HcmV?d00001 diff --git a/admin/images/menu-icons/24x24-s391afdd013.png b/admin/images/menu-icons/24x24-s391afdd013.png deleted file mode 100644 index b1fd07bb9eca0ddba7032d48f8546b0a1682843b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2391 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 JPDHLkV1m+?m^}ah diff --git a/admin/images/sprites-32x32-2x-s6ccfbe50f9.png b/admin/images/sprites-32x32-2x-s6ccfbe50f9.png new file mode 100644 index 0000000000000000000000000000000000000000..9b3a8bc255f45a5461e2d0169fa3aff36d68e39d GIT binary patch literal 9066 zcmbW7Wn5fOmiOt#g1c*QcMooXAi>>Tg1ghfg9U5c-5YlajRXts1P!hU?#s-7=GmQ{ z-F@-Ay7jqrKd0=T^F8&eic(R2kA_T)3Jo-^YLP+LJO7r}t0eD{#u5FD&N&+S-3M{2S;t2Ajn5|N8OI8Ug8mtGJKIn!@Jf z&wsWhYX=}iCUHLJ#8p3?7MXa4guO*l(GkZvF%GoQ3Bs3d_#nxJTKTrNSpR6}6Hb~r z`I~=??VmRPQFqMyYRM$=zrB6^HlnQ7=vlD{8YZy>Tz=r16?fk)8jgS{5v6a~etE(B=-n^#1iU@4MMD7vcm+q&V)y~NmnaLs`1bS9 zQqQ@f+p(1v+_H_OHiZnSu$>?qh3cULd#`9VoB+wwmjY&U9dU}}@g|{-z~PY*wQBtq zHP#G%?KVNd3YTr!=XHP4?K)mwUc0lku8MlsmWstT^%SR{6?_iMG3)0AaRg5ht2bCn z%2?-hH85ZpL-x!ErAY)d;<6vvLKSgj@5*+^Gh{mP_axnZSvK0b&4Sij99K%_t8^L7Ko2x_w!If9Am_d11T3V{mj`yEyvQLHOB&^(!k$51R(GGYC zh|;V7l)l_hip=hw7`)Cl*_DXQk{4om;S`FN?IHr#=yYb}5`v&$WmR&x)|Gj<+Lol( zX;H3MXI5NMS$V`bx$^5=4)DUV*$aH9#^*#Otdzl{DusZdF`mJv^huS9y*{YNT%#17 zY~Rm7neDto znY*vAN4-06K$@8tSoVdwY>4alm%_%0DHj(w5!H#ff2X_}&^E4|tLz#2Si1tc)(sUQ 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 literal 0 HcmV?d00001 diff --git a/admin/images/sprites-32x32-2x-s72b74f4cc4.png b/admin/images/sprites-32x32-2x-s72b74f4cc4.png deleted file mode 100644 index 7fdbaca555391f9aaa5298d8d9ca78a3e058b1ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9088 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 diff --git a/admin/images/sprites-32x32-s47450c5f5b.png b/admin/images/sprites-32x32-s47450c5f5b.png new file mode 100644 index 0000000000000000000000000000000000000000..8c9df7eaf21a6dc1d52235bffe4fc3f5b720e5d9 GIT binary patch literal 18703 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 diff --git a/admin/images/sprites-64x64-2x-s0fe1d92f9d.png b/admin/images/sprites-64x64-2x-s0fe1d92f9d.png deleted file mode 100644 index 2c3a166575db110c317eb95541576c384a571cf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2878 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 literal 0 HcmV?d00001 diff --git a/admin/images/sprites-64x64-s88957ee578.png b/admin/images/sprites-64x64-s88957ee578.png deleted file mode 100644 index 458b7520ae1f01132854d861b70cabb4cef11c4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3059 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 diff --git a/admin/scss/_style.scss b/admin/scss/_style.scss index 241bd9715..0ed761a44 100644 --- a/admin/scss/_style.scss +++ b/admin/scss/_style.scss @@ -189,10 +189,6 @@ body.cms { padding-top: 16px; } -.cms-content-fields { - padding: 0 16px 16px; -} - .cms-tabset-nav-primary { @include inline-block; vertical-align: middle; @@ -1321,6 +1317,12 @@ form.member-profile-form { } } +.cms { + .cms-panel-padded { + padding: 0 $grid-y*2 $grid-x*2; + } +} + /** ------------------------------------------------------------------ * Dialog * From fda2ad66002c9ae5dd14010a8ae769bef8ea5583 Mon Sep 17 00:00:00 2001 From: David Alexander Date: Wed, 24 Jun 2015 21:07:32 +1200 Subject: [PATCH 053/110] DOCS: Corrected version of master in line 22. --- docs/en/05_Contributing/03_Documentation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/05_Contributing/03_Documentation.md b/docs/en/05_Contributing/03_Documentation.md index 0dd3a48c8..6c0c36552 100644 --- a/docs/en/05_Contributing/03_Documentation.md +++ b/docs/en/05_Contributing/03_Documentation.md @@ -19,7 +19,7 @@ page you want to edit. Alternatively, locate the appropriate .md file in the * After committing you changes, you will see a form to submit a Pull Request: "[pull requests](http://help.github.com/pull-requests/)". You should be able to adjust the version to which your documentation changes apply before submitting the form. Any changes submitted in a pull request will be sent to the core committers for approval.

-You should make your changes in the lowest branch they apply to. For instance, if you fix a spelling issue that you found in the 3.2 documentation, submit your fix to that branch in Github and it'll be copied to the master (3.2) version of the documentation automatically. *Don't submit multiple pull requests*. +You should make your changes in the lowest branch they apply to. For instance, if you fix a spelling issue that you found in the 3.2 documentation, submit your fix to that branch in Github and it'll be copied to the master (4.0) version of the documentation automatically. *Don't submit multiple pull requests*.
## Editing on your computer From b2024107a9dc07d12a43bb39ed3e4aa33e3af428 Mon Sep 17 00:00:00 2001 From: Phill Price Date: Wed, 24 Jun 2015 11:57:12 +0100 Subject: [PATCH 054/110] DOCS: Typo in a block --- security/Security.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security/Security.php b/security/Security.php index a17a4bc75..736464791 100644 --- a/security/Security.php +++ b/security/Security.php @@ -1118,7 +1118,7 @@ class Security extends Controller implements TemplateGlobalProvider { /** - * Defines global accesible templates variables. + * Defines global accessible templates variables. * * @return array */ From 3ebb73a6756e53ef5cbb1afb4e96d8abf4c2f908 Mon Sep 17 00:00:00 2001 From: Loz Calver Date: Wed, 24 Jun 2015 12:04:21 +0100 Subject: [PATCH 055/110] Fix background size for spinner @2x --- admin/css/screen.css | 4 ++-- admin/scss/_retina.scss | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/admin/css/screen.css b/admin/css/screen.css index 71c518995..14adbe988 100644 --- a/admin/css/screen.css +++ b/admin/css/screen.css @@ -233,7 +233,7 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .cms .ss-ui-button.ui-state-hover, .cms .ss-ui-button:hover { text-decoration: none; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -moz-box-shadow: 0 0 5px #b3b3b3; -webkit-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; } .cms .ss-ui-button:active, .cms .ss-ui-button:focus, .cms .ss-ui-button.ui-state-active, .cms .ss-ui-button.ui-state-focus { border: 1px solid #b3b3b3; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -moz-box-shadow: 0 0 5px #b3b3b3 inset; -webkit-box-shadow: 0 0 5px #b3b3b3 inset; box-shadow: 0 0 5px #b3b3b3 inset; } .cms .ss-ui-button.ss-ui-action-minor span { padding-left: 0; padding-right: 0; } -.cms .ss-ui-button.ss-ui-action-constructive { text-shadow: none; font-weight: bold; color: white; border-color: #1F9433; border-bottom-color: #166a24; background-color: #1F9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzk0YmU0MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFmOTQzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #94be42), color-stop(100%, #1f9433)); background: -moz-linear-gradient(#94be42, #1f9433); background: -webkit-linear-gradient(#94be42, #1f9433); background: linear-gradient(#94be42, #1f9433); text-shadow: #1c872f 0 -1px -1px; } +.cms .ss-ui-button.ss-ui-action-constructive { text-shadow: none; font-weight: bold; color: white; border-color: #1F9433; border-bottom-color: #166a24; background-color: #1F9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkzYmU0MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFmOTQzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #93be42), color-stop(100%, #1f9433)); background: -moz-linear-gradient(#93be42, #1f9433); background: -webkit-linear-gradient(#93be42, #1f9433); background: linear-gradient(#93be42, #1f9433); text-shadow: #1c872f 0 -1px -1px; } .cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover, .cms .ss-ui-button.ss-ui-action-constructive:hover { border-color: #166a24; background-color: #1F9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E0Y2EzYSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzIzYTkzYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a4ca3a), color-stop(100%, #23a93a)); background: -moz-linear-gradient(#a4ca3a, #23a93a); background: -webkit-linear-gradient(#a4ca3a, #23a93a); background: linear-gradient(#a4ca3a, #23a93a); } .cms .ss-ui-button.ss-ui-action-constructive:active, .cms .ss-ui-button.ss-ui-action-constructive:focus, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-active, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-focus { background-color: #1d8c30; -moz-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); -webkit-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); } .cms .ss-ui-button.ss-ui-action-destructive { color: #f00; background-color: #e6e6e6; } @@ -1225,7 +1225,7 @@ green tick icon as a background this is created using compass generated classes @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { /* Loading spinner */ .cms-content-loading-spinner { background-image: url(../images/spinner@2x.gif); background-size: 43px 43px; } .ui-dialog .ui-dialog-content.loading { background-image: url(../images/spinner@2x.gif); background-size: 43px 43px; } - .ui-dialog.loading { background-image: url(../images/spinner@2x.gif); background-size: 43px 22px; } + .ui-dialog.loading { background-image: url(../images/spinner@2x.gif); background-size: 43px 43px; } /* Default CMS logo */ .cms-logo a { background-image: url("../images/logo_small@2x.png"); background-size: 22px 22px; } /* Logout button */ diff --git a/admin/scss/_retina.scss b/admin/scss/_retina.scss index 577dee41d..762d99732 100644 --- a/admin/scss/_retina.scss +++ b/admin/scss/_retina.scss @@ -71,7 +71,7 @@ &.loading { background-image: url(../images/spinner@2x.gif); - background-size: 43px 22px; + background-size: 43px 43px; } } From 3507ddb0e8f85cb2a2cb20595590b1c89cc27c67 Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Wed, 24 Jun 2015 21:04:23 +0100 Subject: [PATCH 056/110] FIX MemberPassword history removed with with Members Currently Members that were deleted would still have their passwords stored in the DB even though they were deleted. This seems unnecessary and just increases data that could potentially be compromised later. --- security/Member.php | 24 +++++++++++++++++++++++- tests/security/MemberTest.php | 7 +++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/security/Member.php b/security/Member.php index 86c34b821..08b4ab75d 100644 --- a/security/Member.php +++ b/security/Member.php @@ -59,7 +59,9 @@ class Member extends DataObject implements TemplateGlobalProvider { private static $has_one = array(); - private static $has_many = array(); + private static $has_many = array( + 'LoggedPasswords' => 'MemberPassword', + ); private static $many_many = array(); @@ -879,6 +881,26 @@ class Member extends DataObject implements TemplateGlobalProvider { } } + public function onAfterDelete() { + parent::onAfterDelete(); + + //prevent orphaned records remaining in the DB + $this->deletePasswordLogs(); + } + + /** + * Delete the MemberPassword objects that are associated to this user + * + * @return self + */ + protected function deletePasswordLogs() { + foreach ($this->LoggedPasswords() as $password) { + $password->delete(); + $password->destroy(); + } + return $this; + } + /** * If any admin groups are requested, deny the whole save operation. * diff --git a/tests/security/MemberTest.php b/tests/security/MemberTest.php index d044441e4..575dc40bd 100644 --- a/tests/security/MemberTest.php +++ b/tests/security/MemberTest.php @@ -172,6 +172,13 @@ class MemberTest extends FunctionalTest { $this->assertInstanceOf('DataObject', $passwords->current()); $this->assertTrue($passwords->current()->checkPassword('1nitialPassword'), "Password 1nitialPassword not found in MemberRecord"); + + //check we don't retain orphaned records when a member is deleted + $member->delete(); + + $passwords = MemberPassword::get()->filter('MemberID', $member->OldID); + + $this->assertCount(0, $passwords); } /** From 1bbcde908af4d8128a913c59ab42206e327107e5 Mon Sep 17 00:00:00 2001 From: Phill Price Date: Thu, 25 Jun 2015 14:20:42 +0100 Subject: [PATCH 057/110] Broken link in using custom code for tracking member logging --- docs/en/04_Changelogs/beta/3.2.0-beta1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/04_Changelogs/beta/3.2.0-beta1.md b/docs/en/04_Changelogs/beta/3.2.0-beta1.md index 206dfb1f0..e7db421de 100644 --- a/docs/en/04_Changelogs/beta/3.2.0-beta1.md +++ b/docs/en/04_Changelogs/beta/3.2.0-beta1.md @@ -49,7 +49,7 @@ Use `set*()` and `add*()` methods instead. * Template `<% control $MyList %>` syntax removed. Use `<% loop $MyList %>` instead. * Removed `Member.LastVisited` and `Member.NumVisits` properties, see - [Howto: Track Member Logins](/extending/how_tos/track_member_logins) to restore functionality as custom code + [Howto: Track Member Logins](/developer_guides/extending/how_tos/track_member_logins) to restore functionality as custom code ## New and changed API From b5f88af1f05012430565e5755984b4003cf58138 Mon Sep 17 00:00:00 2001 From: Jason Date: Mon, 22 Jun 2015 12:39:40 +1000 Subject: [PATCH 058/110] Add extension hook for getManyManyComponents() Call extension after DataModel is set --- model/DataObject.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/model/DataObject.php b/model/DataObject.php index bf836bab8..67f180a50 100644 --- a/model/DataObject.php +++ b/model/DataObject.php @@ -1771,7 +1771,10 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity $componentClass, $table, $componentField, $parentField, $this->manyManyExtraFieldsForComponent($componentName) ); + if($this->model) $result->setDataModel($this->model); + + $this->extend('updateManyManyComponents', $result); // If this is called on a singleton, then we return an 'orphaned relation' that can have the // foreignID set elsewhere. From bee638eb6a643d938b81de8d8fcb7dce96f0d83a Mon Sep 17 00:00:00 2001 From: Cam Findlay Date: Fri, 26 Jun 2015 15:36:49 +1200 Subject: [PATCH 059/110] DOCS Missing closing perenthesis --- .../02_Developer_Guides/01_Templates/04_Rendering_Templates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/02_Developer_Guides/01_Templates/04_Rendering_Templates.md b/docs/en/02_Developer_Guides/01_Templates/04_Rendering_Templates.md index c49b6f1eb..d61b1d9b8 100644 --- a/docs/en/02_Developer_Guides/01_Templates/04_Rendering_Templates.md +++ b/docs/en/02_Developer_Guides/01_Templates/04_Rendering_Templates.md @@ -80,7 +80,7 @@ does, such as `ArrayData` or `ArrayList`. 'Name' => 'John', 'Role' => 'Head Coach', 'Experience' => $experience - ))->renderWith("AjaxTemplate"); + )))->renderWith("AjaxTemplate"); } else { return $this->httpError(404); } From 85967b8c168c9d5d4b1091ff774bd6359962f3cb Mon Sep 17 00:00:00 2001 From: David Alexander Date: Fri, 26 Jun 2015 21:39:54 +1200 Subject: [PATCH 060/110] Update 07_Code_of_conduct.md Missed word...:) --- docs/en/05_Contributing/07_Code_of_conduct.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/05_Contributing/07_Code_of_conduct.md b/docs/en/05_Contributing/07_Code_of_conduct.md index 2084c8b69..ae8ffb246 100644 --- a/docs/en/05_Contributing/07_Code_of_conduct.md +++ b/docs/en/05_Contributing/07_Code_of_conduct.md @@ -29,7 +29,7 @@ Honour the code of conduct whenever you participate formally and informally in o * Welcome newcomers. Spend some time helping them to get orientated in our community. * All contributors and core committers, module maintainers and knowledge sharers are participating in the community in a voluntary nature. Have respect for them and their time when making requests. You may need to exercise some patience. * Whenever possible, reference your comments to others with example code or links to documentation. This helps people learn and become more experienced community members and developers. - * If you manage to solve your own problem, tell others how you solved it. This will help people in the future who have to solve the sort of problem. + * If you manage to solve your own problem, tell others how you solved it. This will help people in the future who have to solve similar problems. * If you are reducing your input, and potentially stepping away from the community, please remember that others might be relying on your contributions. Be prepared to ensure your contributions remain open and available to the community. Spend some time handing your contributions over to another community member or core contributor to help with the continuity of SilverStripe open source development. ## Resolve conflicts directly From 74e6a67cfa04dcef12bb7a45cc8fac651f91cab1 Mon Sep 17 00:00:00 2001 From: Jonathon Menz Date: Fri, 26 Jun 2015 11:00:48 -0700 Subject: [PATCH 061/110] Different status dots for draft and modified Added a colour difference for status dots so status of draft vs modified can be distinguished at a glance --- admin/css/screen.css | 54 ++++++++++++++++++++++++++++--------------- admin/scss/_tree.scss | 49 ++++++++++++++++++++++++--------------- 2 files changed, 65 insertions(+), 38 deletions(-) diff --git a/admin/css/screen.css b/admin/css/screen.css index 14adbe988..3d1a63b5e 100644 --- a/admin/css/screen.css +++ b/admin/css/screen.css @@ -858,6 +858,8 @@ form.import-form label.left { width: 250px; } .jstree-default a .jstree-icon, .jstree-default-rtl a .jstree-icon, .jstree-classic a .jstree-icon, .jstree-apple a .jstree-icon { background-position: -60px -19px; } +.jstree-apple a { border-radius: 3px; } + /* ensure status is visible in sidebar */ .cms-content-tools .cms-tree.jstree li { min-width: 159px; } .cms-content-tools .cms-tree.jstree a { overflow: hidden; display: block; position: relative; } @@ -870,45 +872,59 @@ li.class-RedirectorPage > a .jstree-pageicon { background-position: 0 -16px; } li.class-VirtualPage > a .jstree-pageicon { background-position: 0 -32px; } li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } -/* tree status icons and labels */ -.cms-tree.jstree .status-modified > a .jstree-pageicon:before, .cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before, .cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before, .cms-tree.jstree .status-archived > a .jstree-pageicon:before, .cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before, .cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { content: ""; display: block; width: 5px; height: 5px; position: absolute; bottom: 0; right: 0; background: #fce2d0; border: 1px solid #ff9344; border-radius: 100px; box-shadow: 0px 0px 0px 1px #fff; } +/* Tree status labels and dots */ +.jstree-apple .jstree-clicked, .jstree-apple .jstree-hovered { background: #ebfbff; } -.jstree .status-modified > .jstree-hovered, .jstree .status-modified > .jstree-clicked, .cms-tree.jstree span.badge.status-modified, .cms-tree.jstree .status-modified > a .jstree-pageicon:before { background-color: #FFF4ED; border-color: #EE6214; } +.cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before, .cms-tree.jstree .status-modified > a .jstree-pageicon:before, .cms-tree.jstree .status-archived > a .jstree-pageicon:before, .cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before, .cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before, .cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { content: ""; display: block; width: 6px; height: 6px; position: absolute; bottom: 0; right: 0; background: #fce2d0; border: 1px solid #fff; border-radius: 100px; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-modified { box-shadow: 0px 0px 6px 2px #FFF4ED; } +.jstree .status-addedtodraft > .jstree-hovered, .jstree .status-addedtodraft > .jstree-clicked, .cms-tree.jstree span.badge.status-addedtodraft { background-color: #fff7f2; border-color: #F46B00; } -.cms-tree.jstree span.badge.status-modified { color: #EE6214; } +.cms-tree.jstree span.badge.status-addedtodraft { color: #F46B00; } -.jstree .status-addedtodraft > .jstree-hovered, .jstree .status-addedtodraft > .jstree-clicked, .cms-tree.jstree span.badge.status-addedtodraft, .cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before { background-color: #FFF4ED; border-color: #EE6214; } +.cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before { background-color: #ff7f22; -moz-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #F46B00; -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #F46B00; box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #F46B00; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-addedtodraft { box-shadow: 0px 0px 6px 2px #FFF4ED; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-addedtodraft { -moz-box-shadow: 0px 0px 6px 2px #fff7f2; -webkit-box-shadow: 0px 0px 6px 2px #fff7f2; box-shadow: 0px 0px 6px 2px #fff7f2; } -.cms-tree.jstree span.badge.status-addedtodraft { color: #EE6214; } +.jstree .status-modified > .jstree-hovered, .jstree .status-modified > .jstree-clicked, .cms-tree.jstree span.badge.status-modified { background-color: #fff7f2; border-color: #F46B00; } -.jstree .status-deletedonlive > .jstree-hovered, .jstree .status-deletedonlive > .jstree-clicked, .cms-tree.jstree span.badge.status-deletedonlive, .cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before { background-color: #F5F5F5; border-color: #5F7688; } +.cms-tree.jstree span.badge.status-modified { color: #F46B00; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-deletedonlive { box-shadow: 0px 0px 6px 2px #F5F5F5; } +.cms-tree.jstree .status-modified > a .jstree-pageicon:before { background-color: #fff2e8; -moz-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #F46B00; -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #F46B00; box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #F46B00; } -.cms-tree.jstree span.badge.status-deletedonlive { color: #5F7688; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-modified { -moz-box-shadow: 0px 0px 6px 2px #fff7f2; -webkit-box-shadow: 0px 0px 6px 2px #fff7f2; box-shadow: 0px 0px 6px 2px #fff7f2; } -.jstree .status-archived > .jstree-hovered, .jstree .status-archived > .jstree-clicked, .cms-tree.jstree span.badge.status-archived, .cms-tree.jstree .status-archived > a .jstree-pageicon:before { background-color: #F5F5F5; border-color: #5F7688; } +.jstree .status-archived > .jstree-hovered, .jstree .status-archived > .jstree-clicked, .cms-tree.jstree span.badge.status-archived { background-color: #f7f7f7; border-color: #455b6c; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-archived { box-shadow: 0px 0px 6px 2px #F5F5F5; } +.cms-tree.jstree span.badge.status-archived { color: #455b6c; } -.cms-tree.jstree span.badge.status-archived { color: #5F7688; } +.cms-tree.jstree .status-archived > a .jstree-pageicon:before { background-color: #5F7688; -moz-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #455b6c; -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #455b6c; box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #455b6c; } -.jstree .status-removedfromdraft > .jstree-hovered, .jstree .status-removedfromdraft > .jstree-clicked, .cms-tree.jstree span.badge.status-removedfromdraft, .cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before { background-color: #F5F5F5; border-color: #5F7688; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-archived { -moz-box-shadow: 0px 0px 6px 2px #f7f7f7; -webkit-box-shadow: 0px 0px 6px 2px #f7f7f7; box-shadow: 0px 0px 6px 2px #f7f7f7; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-removedfromdraft { box-shadow: 0px 0px 6px 2px #F5F5F5; } +.jstree .status-deletedonlive > .jstree-hovered, .jstree .status-deletedonlive > .jstree-clicked, .cms-tree.jstree span.badge.status-deletedonlive { background-color: #f7f7f7; border-color: #455b6c; } -.cms-tree.jstree span.badge.status-removedfromdraft { color: #5F7688; } +.cms-tree.jstree span.badge.status-deletedonlive { color: #455b6c; } -.jstree .status-workflow-approval > .jstree-hovered, .jstree .status-workflow-approval > .jstree-clicked, .cms-tree.jstree span.badge.status-workflow-approval, .cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { background-color: #E8FAFF; border-color: #0070B4; } +.cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before { background-color: #f7f7f7; -moz-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #455b6c; -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #455b6c; box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #455b6c; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-workflow-approval { box-shadow: 0px 0px 6px 2px #E8FAFF; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-deletedonlive { -moz-box-shadow: 0px 0px 6px 2px #f7f7f7; -webkit-box-shadow: 0px 0px 6px 2px #f7f7f7; box-shadow: 0px 0px 6px 2px #f7f7f7; } + +.jstree .status-removedfromdraft > .jstree-hovered, .jstree .status-removedfromdraft > .jstree-clicked, .cms-tree.jstree span.badge.status-removedfromdraft { background-color: #f7f7f7; border-color: #455b6c; } + +.cms-tree.jstree span.badge.status-removedfromdraft { color: #455b6c; } + +.cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before { background-color: #f7f7f7; -moz-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #455b6c; -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #455b6c; box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #455b6c; } + +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-removedfromdraft { -moz-box-shadow: 0px 0px 6px 2px #f7f7f7; -webkit-box-shadow: 0px 0px 6px 2px #f7f7f7; box-shadow: 0px 0px 6px 2px #f7f7f7; } + +.jstree .status-workflow-approval > .jstree-hovered, .jstree .status-workflow-approval > .jstree-clicked, .cms-tree.jstree span.badge.status-workflow-approval { background-color: #E8FAFF; border-color: #0070B4; } .cms-tree.jstree span.badge.status-workflow-approval { color: #0070B4; } +.cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { background-color: #0070B4; -moz-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #0070B4; -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #0070B4; box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px #0070B4; } + +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-workflow-approval { -moz-box-shadow: 0px 0px 6px 2px #E8FAFF; -webkit-box-shadow: 0px 0px 6px 2px #E8FAFF; box-shadow: 0px 0px 6px 2px #E8FAFF; } + .cms-tree { visibility: hidden; } .cms-tree.multiple li > a > .jstree-icon { display: none; } .cms-tree.multiple li > a > .jstree-icon.jstree-checkbox { display: inline-block; } diff --git a/admin/scss/_tree.scss b/admin/scss/_tree.scss index 35c89e729..fd44e1ab3 100644 --- a/admin/scss/_tree.scss +++ b/admin/scss/_tree.scss @@ -592,6 +592,9 @@ .jstree-apple a .jstree-icon { background-position:-60px -19px; } +.jstree-apple a { + border-radius: 3px; +} /* ensure status is visible in sidebar */ .cms-content-tools .cms-tree.jstree { @@ -635,44 +638,52 @@ a .jstree-pageicon { } } -/* tree status icons and labels */ +/* Tree status labels and dots */ +.jstree-apple .jstree-clicked, +.jstree-apple .jstree-hovered { + background: #ebfbff; +} %tree-status-icon-before { content:""; display: block; - width:5px; - height: 5px; + width:6px; + height: 6px; position: absolute; bottom: 0; right: 0; background: #fce2d0; - border: 1px solid #ff9344; + border: 1px solid #fff; border-radius: 100px; - box-shadow: 0px 0px 0px 1px #fff; } -@mixin tree-status-icon($label, $color, $bgColor) { +@mixin tree-status-icon($label, $dotColor, $textColor, $bgColor) { .cms-tree.jstree .status-#{$label} > a .jstree-pageicon:before { @extend %tree-status-icon-before; } + // Labels .jstree .status-#{$label} > .jstree-hovered, .jstree .status-#{$label} > .jstree-clicked, - .cms-tree.jstree span.badge.status-#{$label}, - .cms-tree.jstree .status-#{$label} > a .jstree-pageicon:before { + .cms-tree.jstree span.badge.status-#{$label} { background-color:$bgColor; - border-color:$color; - } - #cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-#{$label} { - box-shadow: 0px 0px 6px 2px $bgColor; + border-color:$textColor; } .cms-tree.jstree span.badge.status-#{$label} { - color: $color; + color: $textColor; + } + // Dots + .cms-tree.jstree .status-#{$label} > a .jstree-pageicon:before { + background-color:$dotColor; + @include box-shadow(0px 1px 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px $textColor); + } + #cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-#{$label} { + @include box-shadow(0px 0px 6px 2px $bgColor); } } -@include tree-status-icon('modified', #EE6214, #FFF4ED); -@include tree-status-icon('addedtodraft', #EE6214, #FFF4ED); -@include tree-status-icon('deletedonlive', #5F7688, #F5F5F5); -@include tree-status-icon('archived', #5F7688, #F5F5F5); -@include tree-status-icon('removedfromdraft', #5F7688, #F5F5F5); -@include tree-status-icon('workflow-approval', #0070B4, #E8FAFF); +@include tree-status-icon('addedtodraft', #ff7f22, #F46B00, #fff7f2); +@include tree-status-icon('modified', #fff2e8, #F46B00, #fff7f2); +@include tree-status-icon('archived', #5F7688, #455b6c, #f7f7f7); +@include tree-status-icon('deletedonlive', #f7f7f7, #455b6c, #f7f7f7); +@include tree-status-icon('removedfromdraft', #f7f7f7, #455b6c, #f7f7f7); +@include tree-status-icon('workflow-approval', #0070B4, #0070B4, #E8FAFF); .cms-tree { visibility: hidden; // enabled by JS to avoid layout glitches From a39c2bd473494b225a3b1f7a342a9a36ffe2c400 Mon Sep 17 00:00:00 2001 From: Jonathon Menz Date: Mon, 15 Jun 2015 09:31:20 -0700 Subject: [PATCH 062/110] DOCS Contributing code cleanup Fixed a few typos and formatting issues, and made git workflow diagram easier to read by hyperlinking it to itself. Also included a few lines from 3.2 branch. --- docs/en/05_Contributing/01_Code.md | 122 ++++++++++++++++------------- 1 file changed, 67 insertions(+), 55 deletions(-) diff --git a/docs/en/05_Contributing/01_Code.md b/docs/en/05_Contributing/01_Code.md index 9f513f779..ee85ab1a6 100644 --- a/docs/en/05_Contributing/01_Code.md +++ b/docs/en/05_Contributing/01_Code.md @@ -1,6 +1,9 @@ +title: Contributing Code +summary: Fix bugs and add new features to help make SilverStripe better. + # Contributing Code - Submiting Bugfixes and Enhancements -SilverStripe will never be finished, and we need your help to keep making it better. If you're a developer a great way to get involved is to contribute patches to our modules and core codebase, fixing bugs or adding feautres. +SilverStripe will never be finished, and we need your help to keep making it better. If you're a developer a great way to get involved is to contribute patches to our modules and core codebase, fixing bugs or adding features. The SilverStripe core modules (`framework` and `cms`), as well as some of the more popular modules are in git version control. SilverStripe hosts its modules on [github.com/silverstripe](http://github.com/silverstripe) and [github.com/silverstripe-labs](http://github.com/silverstripe-labs). After [installing git](http://help.github.com/git-installation-redirect) and creating a [free github.com account](https://github.com/signup/free), you can "fork" a module, @@ -16,11 +19,15 @@ We ask for this so that the ownership in the license is clear and unambiguous, a ## Step-by-step: From forking to sending the pull request +
+**Note:** Please adjust the commands below to the version of SilverStripe that you're targeting. +
+ 1. Install the project through composer. The process is described in detail in "[Installation through Composer](../getting_started/composer#contributing)". - composer create-project --keep-vcs --dev silverstripe/installer ./my/website/folder 3.1.x-dev + composer create-project --keep-vcs --dev silverstripe/installer ./my/website/folder 3.1.x-dev -2. Edit the `composer.json`. Remove the `@stable` markers from the core modules in there. +2. Edit the `composer.json`. Remove any `@stable` markers from the core modules in there. Add your fork URLs, in this example a fork of the `cms` module on the `sminnee` github account (replace with your own fork URL). Run a `composer update` afterwards. @@ -38,14 +45,15 @@ We ask for this so that the ownership in the license is clear and unambiguous, a 4. [Branch for new issue and develop on issue branch](code#branch-for-new-issue-and-develop-on-issue-branch) + # verify current branch 'base' then branch and switch + git status git branch ###-description git checkout ###-description -5. As time passes, the upstream repository accumulates new commits. Keep your working copy's master branch and issue branch up to date by periodically [rebasing your development branch on the latest upstream](code#rebase-your-development-branch-on-the-latest-upstream). +5. As time passes, the upstream repository accumulates new commits. Keep your working copy's branches up to date by periodically [rebasing your development branch on the latest upstream](code#rebase-your-development-branch-on-the-latest-upstream). - # [make sure all your changes are committed as necessary in branch] - git fetch upstream - git rebase upstream/master + # make sure all your changes are committed as necessary in branch + git pull --rebase upstream master 6. When development is complete, [squash all commit related to a single issue into a single commit](code#squash-all-commits-related-to-a-single-issue-into-a-single-commit). @@ -56,7 +64,7 @@ We ask for this so that the ownership in the license is clear and unambiguous, a git push origin ###-description -8. Issue pull request on GitHub. Visit your forked respoistory on GitHub.com and click the "Create Pull Request" button nex tot the new branch. +8. Issue pull request on GitHub. Visit your forked repository on GitHub.com and click the "Create Pull Request" button next to the new branch. The core team is then responsible for reviewing patches and deciding if they will make it into core. If there are any problems they will follow up with you, so please ensure they have a way to contact you! @@ -74,11 +82,11 @@ A core committer will also "label" your PR using the labels defined in GitHub, t The current GitHub labels are grouped into 5 sections: - 1. Changes - These are designed to signal what kind of change they are and how they fit into the [Semantic Versioning](http://semver.org/) schema - 2. Impact - What impact does this bug/issue/fix have, does it break a feature completely, is it just a side effect or is it trivial and not a bit problem (but a bit annoying) - 3. Effort - How much effort is required to fix this issue? - 4. Type - What aspect of the system the PR/issue covers - 5. Feedback - Are we waiting on feedback, if so who from? Typically used for issues that are likely to take a while to have feedback given +1. *Changes* - These are designed to signal what kind of change they are and how they fit into the [Semantic Versioning](http://semver.org/) schema +2. *Impact* - What impact does this bug/issue/fix have, does it break a feature completely, is it just a side effect or is it trivial and not a bit problem (but a bit annoying) +3. *Effort* - How much effort is required to fix this issue? +4. *Type* - What aspect of the system the PR/issue covers +5. *Feedback* - Are we waiting on feedback, if so who from? Typically used for issues that are likely to take a while to have feedback given | Label | Purpose | | ----- | ------- | @@ -97,9 +105,9 @@ The current GitHub labels are grouped into 5 sections: | feedback-required/core-team | Core team members need to give an in-depth consideration | | feedback-required/author | This issue is awaiting feedback from the original author of the PR | -### Workflow Diagram ### +### Workflow Diagram -![Workflow diagram](http://www.silverstripe.org/assets/doc-silverstripe-org/collaboration-on-github.png) +[![Workflow diagram](http://www.silverstripe.org/assets/doc-silverstripe-org/collaboration-on-github.png)](http://www.silverstripe.org/assets/doc-silverstripe-org/collaboration-on-github.png) ### Quickfire Do's and Don't's @@ -107,18 +115,18 @@ If you aren't familiar with git and GitHub, try reading the ["GitHub bootcamp do We also found the [free online git book](http://git-scm.com/book/) and the [git crash course](http://gitref.org/) useful. If you're familiar with it, here's the short version of what you need to know. Once you fork and download the code: - * **Don't develop on the master branch.** Always create a development branch specific to "the issue" you're working on (on our [GitHub repository's issues](https://github.com/silverstripe/silverstripe-framework/issues)). Name it by issue number and description. For example, if you're working on Issue #100, a `DataObject::get_one()` bugfix, your development branch should be called 100-dataobject-get-one. If you decide to work on another issue mid-stream, create a new branch for that issue--don't work on both in one branch. +* **Don't develop on the master branch.** Always create a development branch specific to "the issue" you're working on (on our [GitHub repository's issues](https://github.com/silverstripe/silverstripe-framework/issues)). Name it by issue number and description. For example, if you're working on Issue #100, a `DataObject::get_one()` bugfix, your development branch should be called 100-dataobject-get-one. If you decide to work on another issue mid-stream, create a new branch for that issue--don't work on both in one branch. - * **Do not merge the upstream master** with your development branch; *rebase* your branch on top of the upstream master. +* **Do not merge the upstream master** with your development branch; *rebase* your branch on top of the upstream master. - * **A single development branch should represent changes related to a single issue.** If you decide to work on another issue, create another branch. +* **A single development branch should represent changes related to a single issue.** If you decide to work on another issue, create another branch. - * **Squash your commits, so that each commit addresses a single issue.** After you rebase your work on top of the upstream master, you can squash multiple commits into one. Say, for instance, you've got three commits in related to Issue #100. Squash all three into one with the message "Issue #100 Description of the issue here." We won't accept pull requests for multiple commits related to a single issue; it's up to you to squash and clean your commit tree. (Remember, if you squash commits you've already pushed to GitHub, you won't be able to push that same branch again. Create a new local branch, squash, and push the new squashed branch.) +* **Squash your commits, so that each commit addresses a single issue.** After you rebase your work on top of the upstream master, you can squash multiple commits into one. Say, for instance, you've got three commits in related to Issue #100. Squash all three into one with the message "Description of the issue here (fixes #100)" We won't accept pull requests for multiple commits related to a single issue; it's up to you to squash and clean your commit tree. (Remember, if you squash commits you've already pushed to GitHub, you won't be able to push that same branch again. Create a new local branch, squash, and push the new squashed branch.) - * **Choose the correct branch**: Assume the current release is 3.0.3, and 3.1.0 is in beta state. - Most pull requests should go against the `3.1.x-dev` *pre-release branch*, only critical bugfixes - against the `3.0.x-dev` *release branch*. If you're changing an API or introducing a major feature, - the pull request should go against `master` (read more about our [release process](release_process)). Branches are periodically merged "upwards" (3.0 into 3.1, 3.1 into master). +* **Choose the correct branch**: Assume the current release is 3.0.3, and 3.1.0 is in beta state. +Most pull requests should go against the `3.1.x-dev` *pre-release branch*, only critical bugfixes +against the `3.0.x-dev` *release branch*. If you're changing an API or introducing a major feature, +the pull request should go against `master` (read more about our [release process](release_process)). Branches are periodically merged "upwards" (3.0 into 3.1, 3.1 into master). ### Editing files directly on GitHub.com @@ -128,17 +136,16 @@ After you have edited the file, GitHub will offer to create a pull request for y ## Check List -* Adhere to our [coding conventions](/getting_started/coding_conventions) -* If your patch is extensive, discuss it first on the [silverstripe-dev google group](https://groups.google.com/group/silverstripe-dev) (ideally before doing any serious coding) -* When working on existing tickets, provide status updates through ticket comments -* Check your patches against the "master" branch, as well as the latest release branch -* Write [unit tests](../developer_guides/testing/unit_testing) -* Write [Behat integration tests](https://github.com/silverstripe-labs/silverstripe-behat-extension) for any interface changes -* Describe specifics on how to test the effects of the patch -* It's better to submit multiple patches with separate bits of functionality than a big patch containing lots of -changes -* Only submit a pull request for work you expect to be ready to merge. Work in progress is best discussed in an issue, or on your own repository fork. -* Document your code inline through [PHPDoc](http://en.wikipedia.org/wiki/PHPDoc) syntax. See our +* Adhere to our [coding conventions](/getting_started/coding_conventions) +* If your patch is extensive, discuss it first on the [silverstripe-dev google group](https://groups.google.com/group/silverstripe-dev) (ideally before doing any serious coding) +* When working on existing tickets, provide status updates through ticket comments +* Check your patches against the "master" branch, as well as the latest release branch +* Write [unit tests](../developer_guides/testing/unit_testing) +* Write [Behat integration tests](https://github.com/silverstripe-labs/silverstripe-behat-extension) for any interface changes +* Describe specifics on how to test the effects of the patch +* It's better to submit multiple patches with separate bits of functionality than a big patch containing lots of changes +* Only submit a pull request for work you expect to be ready to merge. Work in progress is best discussed in an issue, or on your own repository fork. +* Document your code inline through [PHPDoc](http://en.wikipedia.org/wiki/PHPDoc) syntax. See our [API documentation](http://api.silverstripe.org/3.1/) for good examples. * Check and update documentation on [doc.silverstripe.org](http://doc.silverstripe.org). Check for any references to functionality deprecated or extended through your patch. Documentation changes should be included in the patch. * If you get stuck, please post to the [forum](http://silverstripe.org/forum) or for deeper core problems, to the [core mailinglist](https://groups.google.com/forum/#!forum/silverstripe-dev) @@ -154,10 +161,9 @@ This ensures commits are easy to browse, and look nice on github.com As we automatically generate [changelogs](http://doc.silverstripe.org/sapphire/en/trunk/changelogs/) from them, we need a way to categorize and filter. Please prefix **noteworthy** commit messages with one of the following tags: -* `NEW`: New feature or major enhancement (both for users and developers) -* `API`: Addition of a new API, or modification/removal/deprecation of an existing API. - Includes any change developers should be aware of when upgrading. -* `BUG`: Bugfix or minor enhancement on something developers or users are likely to encounter. +* `NEW` New feature or major enhancement (both for users and developers) +* `API` Addition of a new API, or modification/removal/deprecation of an existing API. Includes any change developers should be aware of when upgrading. +* `BUG` Bugfix or minor enhancement on something developers or users are likely to encounter. All other commits should not be tagged if they are so trivial that most developers can ignore them during upgrades or when reviewing changes to the codebase. @@ -168,6 +174,7 @@ Further guidelines: * Each commit should form a logical unit - if you fix two unrelated bugs, commit each one separately * If you are fixing a issue from our bugtracker ([cms](http://github.com/silverstripe/silverstripe-framework) and [framework](http://github.com/silverstripe/silverstripe-framework)), please append `(fixes #)` +* When fixing issues across repos (e.g. a commit to `framework` fixes an issue raised in the `cms` bugtracker), include the short or full URL to the issue on github e.g. `(fixes silverstripe/silverstripe-cms#342)` or `(fixes https://github.com/silverstripe/silverstripe-cms/issues/342)` ([details](https://github.com/blog/1439-closing-issues-across-repositories)) * If your change is related to another commit, reference it with its abbreviated commit hash. * Mention important changed classes and methods in the commit summary. @@ -188,15 +195,14 @@ Example: Good commit message ### Branch for new issue and develop on issue branch -Before you start working on a new feature or bugfix, create a new branch dedicated to that one change named by issue number and description. If you're working on Issue #100, a retweet bugfix, create a new branch with the issue number and description, like this: +Before you start working on a new feature or bugfix, create a new branch dedicated to that one change named by issue number and description. If you're working on Issue #100, a `DataObject::get_one()` bugfix, create a new branch with the issue number and description, like this: - $ git branch 100-dataobject-get-one - $ git checkout 100-dataobject-get-one + $ git checkout -b 100-dataobject-get-one Edit and test the files on your development environment. When you've got something the way you want and established that it works, commit the changes to your branch on your local git repo. $ git add - $ git commit -m 'Issue #100: Some kind of descriptive message' + $ git commit -m 'Some kind of descriptive message (fixes #100)' You'll need to use git add for each file that you created or modified. There are ways to add multiple files, but I highly recommend a more deliberate approach unless you know what you're doing. @@ -212,13 +218,13 @@ To keep your development branch up to date, rebase your changes on top of the cu If you've set up an upstream branch as detailed above, and a development branch called `100-dataobject-get-one`, you can update `upstream` and rebase your branch from it like so: - # [make sure all your changes are committed as necessary in branch] + # make sure all your changes are committed as necessary in branch $ git fetch upstream $ git rebase upstream/master Note that the example doesn't keep your own master branch up to date. If you wanted to that, you might take the following approach instead: - # [make sure all your changes are committed as necessary in branch] + # make sure all your changes are committed as necessary in branch $ git fetch upstream $ git checkout master $ git rebase upstream/master @@ -240,11 +246,15 @@ To squash four commits into one, do the following: $ git rebase -i upstream/master -In the text editor that comes up, replace the words "pick" with "squash" next to the commits you want to squash into the commit before it. Save and close the editor, and git will combine the "squash"'ed commits with the one before it. Git will then give you the opportunity to change your commit message to something like, "BUGFIX Issue #100: Fixed DataObject::get_one() parameter order" +In the text editor that comes up, replace the words "pick" with "squash" or just "s" next to the commits you want to squash into the commit before it. +Save and close the editor, and git will combine the "squash"'ed commits with the one before it. +Git will then give you the opportunity to change your commit message to something like, `BUG DataObject::get_one() parameter order (fixes #100)`. + +If you want to discard the commit messages from the commits you're squashing and just use the message from your "pick" commit(s) you can use "fixup" or "f" instead of "squash" to bypass the message editing and make the process a bit quicker. Important: If you've already pushed commits to GitHub, and then squash them locally, you will have to force-push to your GitHub again. Add the `-f` argument to your git push command: - $ git push -f origin 100-dataobject-get-one + $ git push -f origin 100-dataobject-get-one Helpful hint: You can always edit your last commit message by using: @@ -262,21 +272,23 @@ One thing you do not want to do is to issue a git commit with the -a option. Thi $ git commit -a +Sometimes, you might correct an issue which was reported in a different repo. In these cases, don't simply refer to the issue number as GitHub will infer that as correcting an issue in the current repo. See [Commit Messages](code#commit-messages) above for the correct way to reference these issues. + ## What is git rebase? Using `git rebase` helps create clean commit trees and makes keeping your code up-to-date with the current state of the upstream master easy. Here's how it works. Let's say you're working on Issue #212 a new plugin in your own branch and you start with something like this: - 1---2---3 #212-my-new-plugin - / - A---B #master + 1---2---3 #212-my-new-plugin + / + A---B #master You keep coding for a few days and then pull the latest upstream stuff and you end up like this: - 1---2---3 #212-my-new-plugin - / - A---B--C--D--E--F #master + 1---2---3 #212-my-new-plugin + / + A---B--C--D--E--F #master So all these new things (C,D,..F) have happened since you started. Normally you would just keep going (let's say you're not finished with the plugin yet) and then deal with a merge later on, which becomes a commit, which get moved upstream and ends up grafted on the tree forever. @@ -286,9 +298,9 @@ git rebase master 212-my-new-plugin git will rewrite your commits like this: - 1---2---3 #212-my-new-plugin - / - A---B--C--D--E--F #master + 1---2---3 #212-my-new-plugin + / + A---B--C--D--E--F #master It's as if you had just started your branch. One immediate advantage you get is that you can test your branch now to see if C, D, E, or F had any impact on your code (you don't need to wait until you're finished with your plugin and merge to find this out). And, since you can keep doing this over and over again as you develop your plugin, at the end your merge will just be a fast-forward (in other words no merge at all). From 33d93c2a31b7b557510e8da9a6d9da2b901256c1 Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Sat, 20 Jun 2015 17:57:18 +0100 Subject: [PATCH 063/110] Fixing issues with HTTP cache control --- control/HTTP.php | 17 ++++++++--------- tests/control/HTTPTest.php | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/control/HTTP.php b/control/HTTP.php index 97dcb84f7..45abaec4f 100644 --- a/control/HTTP.php +++ b/control/HTTP.php @@ -308,7 +308,7 @@ class HTTP { /** * Add the appropriate caching headers to the response, including If-Modified-Since / 304 handling. * - * @param SS_HTTPResponse The SS_HTTPResponse object to augment. Omitted the argument or passing a string is + * @param SS_HTTPResponse $body The SS_HTTPResponse object to augment. Omitted the argument or passing a string is * deprecated; in these cases, the headers are output directly. */ public static function add_cache_headers($body = null) { @@ -328,21 +328,17 @@ class HTTP { // us trying. if(headers_sent() && !$body) return; - // Popuplate $responseHeaders with all the headers that we want to build + // Populate $responseHeaders with all the headers that we want to build $responseHeaders = array(); $config = Config::inst(); $cacheControlHeaders = Config::inst()->get('HTTP', 'cache_control'); - // currently using a config setting to cancel this, seems to be so taht the CMS caches ajax requests + // currently using a config setting to cancel this, seems to be so that the CMS caches ajax requests if(function_exists('apache_request_headers') && $config->get(get_called_class(), 'cache_ajax_requests')) { - $requestHeaders = apache_request_headers(); + $requestHeaders = array_change_key_case(apache_request_headers(), CASE_LOWER); - if(isset($requestHeaders['X-Requested-With']) && $requestHeaders['X-Requested-With']=='XMLHttpRequest') { - $cacheAge = 0; - } - // bdc: now we must check for DUMB IE6: if(isset($requestHeaders['x-requested-with']) && $requestHeaders['x-requested-with']=='XMLHttpRequest') { $cacheAge = 0; } @@ -383,13 +379,16 @@ class HTTP { foreach($cacheControlHeaders as $header => $value) { if(is_null($value)) { unset($cacheControlHeaders[$header]); - } elseif(is_bool($value) || $value === "true") { + } elseif((is_bool($value) && $value) || $value === "true") { $cacheControlHeaders[$header] = $header; } else { $cacheControlHeaders[$header] = $header."=".$value; } } + $responseHeaders['Cache-Control'] = implode(', ', $cacheControlHeaders); + unset($cacheControlHeaders, $header, $value); + if(self::$modification_date && $cacheAge > 0) { $responseHeaders["Last-Modified"] = self::gmt_date(self::$modification_date); diff --git a/tests/control/HTTPTest.php b/tests/control/HTTPTest.php index ffede9e32..42d6e2d88 100644 --- a/tests/control/HTTPTest.php +++ b/tests/control/HTTPTest.php @@ -7,6 +7,26 @@ */ class HTTPTest extends FunctionalTest { + public function testAddCacheHeaders() { + $body = "

Mysite

"; + $response = new SS_HTTPResponse($body, 200); + $this->assertEmpty($response->getHeader('Cache-Control')); + + HTTP::set_cache_age(30); + HTTP::add_cache_headers($response); + + $this->assertNotEmpty($response->getHeader('Cache-Control')); + + Config::inst()->update('Director', 'environment_type', 'dev'); + HTTP::add_cache_headers($response); + $this->assertContains('max-age=0', $response->getHeader('Cache-Control')); + + Config::inst()->update('Director', 'environment_type', 'live'); + HTTP::add_cache_headers($response); + $this->assertContains('max-age=30', explode(', ', $response->getHeader('Cache-Control'))); + $this->assertNotContains('max-age=0', $response->getHeader('Cache-Control')); + } + /** * Tests {@link HTTP::getLinksIn()} */ From 9cb64d48e36591027a8a47bdd474fd4bccf87dc6 Mon Sep 17 00:00:00 2001 From: Jackson Date: Tue, 30 Jun 2015 11:29:26 +1200 Subject: [PATCH 064/110] Define function as static (line 59) Not defining function on line 59 as static triggers php error: [Strict Notice] call_user_func() expects parameter 1 to be a valid callback, non-static method Page::ShortcodeColumns() should not be called statically Note: PHP 5.5.12 --- docs/en/02_Developer_Guides/05_Extending/04_Shortcodes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/02_Developer_Guides/05_Extending/04_Shortcodes.md b/docs/en/02_Developer_Guides/05_Extending/04_Shortcodes.md index 42484385d..91e22794a 100644 --- a/docs/en/02_Developer_Guides/05_Extending/04_Shortcodes.md +++ b/docs/en/02_Developer_Guides/05_Extending/04_Shortcodes.md @@ -56,7 +56,7 @@ First we need to define a callback for the shortcode. 'MyShortCodeMethod' => 'HTMLText' ); - public function MyShortCodeMethod($arguments, $content = null, $parser = null, $tagName) { + public static function MyShortCodeMethod($arguments, $content = null, $parser = null, $tagName) { return "" . $tagName . " " . $content . "; " . count($arguments) . " arguments."; } } From fd755a7ff9de69802f04763570f69e4c3b68c08c Mon Sep 17 00:00:00 2001 From: Sean Harvey Date: Mon, 24 Mar 2014 14:02:09 +1300 Subject: [PATCH 065/110] BUG ChangePasswordForm validation message should render HTML correctly. HTML shows up in the form message escaped, but it shouldn't be. --- security/ChangePasswordForm.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/security/ChangePasswordForm.php b/security/ChangePasswordForm.php index 4ed58fc5b..f4ae9fc06 100644 --- a/security/ChangePasswordForm.php +++ b/security/ChangePasswordForm.php @@ -131,7 +131,8 @@ class ChangePasswordForm extends Form { "We couldn't accept that password: {password}", array('password' => nl2br("\n".$isValid->starredList())) ), - "bad" + "bad", + false ); // redirect back to the form, instead of using redirectBack() which could send the user elsewhere. From 6fabd0122be37faa671923b534a74e5684d58220 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Wed, 1 Jul 2015 17:41:07 +1200 Subject: [PATCH 066/110] BUG Fix potential XSS injection --- security/ChangePasswordForm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security/ChangePasswordForm.php b/security/ChangePasswordForm.php index f4ae9fc06..5a1f9d868 100644 --- a/security/ChangePasswordForm.php +++ b/security/ChangePasswordForm.php @@ -129,7 +129,7 @@ class ChangePasswordForm extends Form { _t( 'Member.INVALIDNEWPASSWORD', "We couldn't accept that password: {password}", - array('password' => nl2br("\n".$isValid->starredList())) + array('password' => nl2br("\n".Convert::raw2xml($isValid->starredList()))) ), "bad", false From 74d0622d430188c15f61e0c8fc60a81ed90d107f Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Wed, 1 Jul 2015 10:00:39 +0100 Subject: [PATCH 067/110] Fix docs clobbered by 3.1 -> 3.2 merge. --- docs/en/00_Getting_Started/index.md | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/docs/en/00_Getting_Started/index.md b/docs/en/00_Getting_Started/index.md index bd891249d..575969450 100644 --- a/docs/en/00_Getting_Started/index.md +++ b/docs/en/00_Getting_Started/index.md @@ -9,8 +9,8 @@ lets you install and upgrade SilverStripe and its modules. Although installing Other ways to get SilverStripe: - * If you just want to get the code as quickly as possible, you can [download SilverStripe from our website](http://silverstripe.org/download). - * If you already have an installed version of SilverStripe, and you haven't used Composer to get it, please see our [upgrading](upgrading) guide. Note that [Composer](composer) provides its own tools for upgrading. + * If you just want to get the code as quickly as possible, you can [download SilverStripe from our website](http://www.silverstripe.org/software/download/). + * If you already have an installed version of SilverStripe, and you haven't used Composer to get it, please see our [upgrading](/upgrading) guide. Note that [Composer](composer) provides its own tools for upgrading. ## Setting up a server @@ -18,25 +18,25 @@ Other ways to get SilverStripe: To run SilverStripe on Linux/Unix, set up one of the following web servers: -* [Install using Apache](webserver) - our preferred platform -* [Install using Lighttpd](lighttpd) - fast, but a bit tricker to get going -* [Install using Nginx](nginx) - Super fast at serving static files. Great for large traffic sites. -* [Install using nginx and HHVM](nginx-hhvm) - nginx and [HHVM](http://hhvm.com/) as a faster alternative to PHP +* [Install using Apache](installation) - our preferred platform +* [Install using Lighttpd](installation/how_to/configure_lighttpd) - fast, but a bit tricker to get going +* [Install using Nginx](installation/how_to/configure_nginx) - Super fast at serving static files. Great for large traffic sites. +* [Install using nginx and HHVM](installation/how_to/setup_nginx_and_hhvm) - nginx and [HHVM](http://hhvm.com/) as a faster alternative to PHP ### Windows -The most straightforward way to get SilverStripe running on Windows is with the [Microsoft Web Platform installer](windows-pi). You can skip the "getting the code" step. +The most straightforward way to get SilverStripe running on Windows is with the [Microsoft Web Platform installer](installation/other_installation_options/windows_platform_installer). You can skip the "getting the code" step. For more flexibility, you can set up either of the following web servers, and use Composer to get the code: - * [Install using IIS](windows-manual-iis) - * [Install using Apache/WAMP](windows-wamp) + * [Install using IIS](installation/other_installation_options/windows_iis7) + * [Install using Apache/WAMP](installation/windows) ### Mac OS X Mac OS X comes with a built-in webserver, but there are a number of other options: - * [Install using MAMP](mac-osx) + * [Install using MAMP](installation/mac_osx) * [Install using Homebrew](installation/other_installation_options/mac_osx_homebrew) ### Virtual Machines through Vagrant @@ -61,10 +61,9 @@ ready for download or installation on a cloud platform. ## Troubleshooting -If you run into trouble, see [common-problems](common-problems) or post to the -[SilverStripe forums](http://silverstripe.com/silverstripe-forum/). +If you run into trouble, see [common-problems](installation/common_problems) or post to the +[SilverStripe forums](http://silverstripe.org/community/forums/). ## Related - * [Module installation](../topics/modules) - * [Suggested web hosts](http://doc.silverstripe.org/old/suggested-web-hosts) + * [Module installation](/developer_guides/extending/modules) From ae3fc84181fc24b2c4cbf364d515a13c521c8d9a Mon Sep 17 00:00:00 2001 From: David Craig Date: Fri, 26 Jun 2015 12:45:02 +1200 Subject: [PATCH 068/110] Add three column layout to Page content view - Content filters included in SiteTree view - View (tree/list) buttons included in SiteTree view - Update view button styles for new layout - Updated breadcrumbs for new layout --- admin/css/screen.css | 670 ++++++++++-------- admin/font/fontello.eot | Bin 5156 -> 6772 bytes admin/font/fontello.svg | 10 +- admin/font/fontello.ttf | Bin 4988 -> 6604 bytes admin/font/fontello.woff | Bin 2796 -> 3876 bytes admin/images/btn-icon-scb653ce8a9.png | Bin 22990 -> 0 bytes admin/images/btn-icon-se43cec5357.png | Bin 0 -> 22916 bytes .../menu-icons/16x16-2x-s9b8c49312e.png | Bin 0 -> 4147 bytes .../menu-icons/16x16-2x-sbe70081ef8.png | Bin 4135 -> 0 bytes admin/images/menu-icons/16x16-s3f4c846209.png | Bin 1637 -> 0 bytes admin/images/menu-icons/16x16-sf5b94bb49b.png | Bin 0 -> 1645 bytes .../menu-icons/24x24-2x-s7169efa003.png | Bin 0 -> 6015 bytes .../menu-icons/24x24-2x-sccfd928e17.png | Bin 5981 -> 0 bytes admin/images/menu-icons/24x24-s0dc15c36f9.png | Bin 2394 -> 0 bytes admin/images/menu-icons/24x24-s391afdd013.png | Bin 0 -> 2391 bytes admin/images/sprites-32x32-2x-s6ccfbe50f9.png | Bin 9066 -> 0 bytes admin/images/sprites-32x32-2x-s72b74f4cc4.png | Bin 0 -> 9088 bytes admin/images/sprites-32x32-s47450c5f5b.png | Bin 18703 -> 0 bytes admin/images/sprites-32x32-s7af51a6313.png | Bin 0 -> 20085 bytes admin/images/sprites-64x64-2x-s0fe1d92f9d.png | Bin 0 -> 2878 bytes admin/images/sprites-64x64-2x-se3e3f47b94.png | Bin 2876 -> 0 bytes admin/images/sprites-64x64-s45180e3c4f.png | Bin 3062 -> 0 bytes admin/images/sprites-64x64-s88957ee578.png | Bin 0 -> 3059 bytes admin/javascript/LeftAndMain.js | 11 +- admin/scss/_fonts.scss | 19 +- admin/scss/_forms.scss | 23 + admin/scss/_style.scss | 275 ++++++- admin/templates/CMSBreadcrumbs.ss | 8 - .../Includes/LeftAndMain_EditForm.ss | 1 - .../templates/Includes/ModelAdmin_Content.ss | 19 +- javascript/TabSet.js | 43 +- .../Framework/Test/Behaviour/CmsUiContext.php | 2 + 32 files changed, 702 insertions(+), 379 deletions(-) delete mode 100644 admin/images/btn-icon-scb653ce8a9.png create mode 100644 admin/images/btn-icon-se43cec5357.png create mode 100644 admin/images/menu-icons/16x16-2x-s9b8c49312e.png delete mode 100644 admin/images/menu-icons/16x16-2x-sbe70081ef8.png delete mode 100644 admin/images/menu-icons/16x16-s3f4c846209.png create mode 100644 admin/images/menu-icons/16x16-sf5b94bb49b.png create mode 100644 admin/images/menu-icons/24x24-2x-s7169efa003.png delete mode 100644 admin/images/menu-icons/24x24-2x-sccfd928e17.png delete mode 100644 admin/images/menu-icons/24x24-s0dc15c36f9.png create mode 100644 admin/images/menu-icons/24x24-s391afdd013.png delete mode 100644 admin/images/sprites-32x32-2x-s6ccfbe50f9.png create mode 100644 admin/images/sprites-32x32-2x-s72b74f4cc4.png delete mode 100644 admin/images/sprites-32x32-s47450c5f5b.png create mode 100644 admin/images/sprites-32x32-s7af51a6313.png create mode 100644 admin/images/sprites-64x64-2x-s0fe1d92f9d.png delete mode 100644 admin/images/sprites-64x64-2x-se3e3f47b94.png delete mode 100644 admin/images/sprites-64x64-s45180e3c4f.png create mode 100644 admin/images/sprites-64x64-s88957ee578.png diff --git a/admin/css/screen.css b/admin/css/screen.css index f6d0dbeeb..9d9681047 100644 --- a/admin/css/screen.css +++ b/admin/css/screen.css @@ -15,7 +15,7 @@ q:before, q:after, blockquote:before, blockquote:after { content: ""; content: n a img { border: none; } -article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { display: block; } /*$experimental-support-for-svg variable comes from imported compass/support file and enables svg gradients in IE9. @@ -37,89 +37,106 @@ Used in side panels and action tabs */ /** ----------------------------- Sprite images ----------------------------- */ /** Helper SCSS file for generating sprites for the interface. */ -.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-image: url('../images/btn-icon-scb653ce8a9.png'); background-repeat: no-repeat; } +.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background: url('../images/btn-icon-se43cec5357.png') no-repeat; } -.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 0; } -.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -16px; } -.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 -32px; } -.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -48px; } -.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -68px; } -.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -84px; } -.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -100px; } -.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -116px; } -.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -132px; } -.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -148px; } -.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -164px; } -.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -180px; } -.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -196px; } -.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -212px; } -.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -228px; } -.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -244px; } -.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -260px; } -.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -276px; } -.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -292px; } -.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -308px; } -.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -324px; } -.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -340px; } -.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -355px; } -.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -371px; } -.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -387px; } -.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -403px; } -.ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk { background-position: 0 -420px; } -.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -436px; } -.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -452px; } -.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -468px; } -.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -484px; } -.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -500px; } -.ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information { background-position: 0 -516px; } -.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -532px; } -.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -548px; } -.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -564px; } -.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -580px; } -.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -596px; } -.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -612px; } -.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -628px; } -.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -644px; } -.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -660px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -676px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -692px; } -.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -708px; } -.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -724px; } -.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -740px; } -.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -756px; } -.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -772px; } -.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -788px; } +.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 -96px; } +.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -80px; } +.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 0; } +.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -208px; } +.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -32px; } +.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -144px; } +.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -516px; } +.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -356px; } +.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -340px; } +.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -372px; } +.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -16px; } +.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -740px; } +.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -532px; } +.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -756px; } +.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -692px; } +.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -724px; } +.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -788px; } +.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -500px; } +.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -772px; } +.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -468px; } +.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -580px; } +.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -276px; } +.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -128px; } +.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -192px; } +.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -484px; } +.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -307px; } +.ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk { background-position: 0 -291px; } +.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -564px; } +.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -48px; } +.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -436px; } +.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -596px; } +.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -260px; } +.ui-state-default .btn-icon-information, .ui-widget-content .btn-icon-information { background-position: 0 -388px; } +.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -548px; } +.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -644px; } +.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -660px; } +.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -404px; } +.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -452px; } +.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -628px; } +.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -708px; } +.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -228px; } +.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -612px; } +.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -244px; } +.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -676px; } +.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -64px; } +.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -160px; } +.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -324px; } +.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -420px; } +.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -112px; } +.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -176px; } .icon { text-indent: -9999px; border: none; outline: none; } -.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-s0dc15c36f9.png'); } -.icon.icon-24.icon-assetadmin { background-position: 0 -216px; } -.icon.icon-24.icon-cmsmain { background-position: 0 -192px; } -.icon.icon-24.icon-cmspagescontroller { background-position: 0 -168px; } -.icon.icon-24.icon-cmssettingscontroller { background-position: 0 -96px; } +.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-s391afdd013.png'); } +.icon.icon-24.icon-assetadmin { background-position: 0 -120px; } +.icon.icon-24.icon-cmsmain { background-position: 0 -48px; } +.icon.icon-24.icon-cmspagescontroller { background-position: 0 -216px; } +.icon.icon-24.icon-cmssettingscontroller { background-position: 0 0; } .icon.icon-24.icon-securityadmin { background-position: 0 -24px; } -.icon.icon-24.icon-reportadmin { background-position: 0 -240px; } -.icon.icon-24.icon-commentadmin { background-position: 0 0; } -.icon.icon-24.icon-help { background-position: 0 -144px; } -.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-s3f4c846209.png'); } -.icon.icon-16.icon-assetadmin { background-position: 0 -144px; } -.icon.icon-16.icon-cmsmain { background-position: 0 -128px; } +.icon.icon-24.icon-reportadmin { background-position: 0 -72px; } +.icon.icon-24.icon-commentadmin { background-position: 0 -192px; } +.icon.icon-24.icon-help { background-position: 0 -96px; } +.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-sf5b94bb49b.png'); } +.icon.icon-16.icon-assetadmin { background-position: 0 -80px; } +.icon.icon-16.icon-cmsmain { background-position: 0 -16px; } .icon.icon-16.icon-cmspagescontroller { background-position: 0 -112px; } -.icon.icon-16.icon-cmssettingscontroller { background-position: 0 -64px; } -.icon.icon-16.icon-securityadmin { background-position: 0 -16px; } -.icon.icon-16.icon-reportadmin { background-position: 0 -160px; } -.icon.icon-16.icon-commentadmin { background-position: 0 0; } -.icon.icon-16.icon-help { background-position: 0 -96px; } +.icon.icon-16.icon-cmssettingscontroller { background-position: 0 0; } +.icon.icon-16.icon-securityadmin { background-position: 0 -48px; } +.icon.icon-16.icon-reportadmin { background-position: 0 -32px; } +.icon.icon-16.icon-commentadmin { background-position: 0 -144px; } +.icon.icon-16.icon-help { background-position: 0 -64px; } /** ----------------------------- CMS Components ------------------------------ */ @font-face { font-family: 'fontello'; src: url("../font/fontello.eot?33987583"); src: url("../font/fontello.eot?33987583#iefix") format("embedded-opentype"), url("../font/fontello.woff?33987583") format("woff"), url("../font/fontello.ttf?33987583") format("truetype"), url("../font/fontello.svg?33987583#fontello") format("svg"); font-weight: normal; font-style: normal; } -[class^="font-icon-"]:before, [class*=" font-icon-"]:before { display: inline-block; width: 1em; margin-right: .2em; text-align: center; text-decoration: inherit; text-transform: none; font-family: "fontello"; font-style: normal; font-weight: normal; font-variant: normal; speak: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } + +[class^="font-icon-"]:before, [class*=" font-icon-"]:before { display: inline-block; content: ''; width: 1em; margin-top: 2px; margin-right: .2em; text-align: center; text-decoration: inherit; text-transform: none; font-family: "fontello"; font-style: normal; font-weight: normal; font-variant: normal; speak: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .font-icon-search:before { content: '\e800'; } -.font-icon-list:before { content: '\e801'; } +.font-icon-tree:before { content: '\e801'; } + +.font-icon-list2:before { content: '\e802'; } + +.font-icon-cog:before { content: '\e803'; } + +.font-icon-check:before { content: '\e804'; } + +.font-icon-plus-solid:before { content: '\e805'; } + +.font-icon-list:before { content: '\e806'; } + +.font-icon-plus:before { content: '\e807'; } + +.font-icon-search2:before { content: '\e808'; } + +.font-icon-pencil:before { content: '\e80b'; } /** File: typography.scss Contains the basic typography related styles for the admin interface. */ -body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; color: #444; } +body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; color: #444444; } .cms h2, .cms h3, .cms h4, .cms h5 { font-weight: bold; margin: 16px 0 16px 0; line-height: 16px; } .cms h2 { font-size: 18px; line-height: 24px; } @@ -131,18 +148,18 @@ body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; .cms code { font-family: 'Bitstream Vera Sans Mono','Courier', monospace; } /** This file defines CMS-specific customizations to the jQuery UI theme. Every rule should contain ONLY overwritten jQuery UI rules (with 'ui-' prefix). This file should be fairly short, as we're using our own custom jQuery UI theme already. TODO Add theme reference Use _style.scss to add more generic style information, and read the jQuery UI theming API: http://jqueryui.com/docs/Theming/API */ -.ui-widget-content, .ui-widget { color: #444; font-size: 12px; font-family: Arial, sans-serif; border: 0; } +.ui-widget-content, .ui-widget { color: #444444; font-size: 12px; font-family: Arial, sans-serif; border: 0; } -.ui-widget-header { background-color: #b0bec7; padding: 8px 8px 6px 8px; border-bottom: 2px solid #8399a7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZTNlNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dde3e7), color-stop(100%, #92a5b2)); background-image: -moz-linear-gradient(#dde3e7, #92a5b2); background-image: -webkit-linear-gradient(#dde3e7, #92a5b2); background-image: linear-gradient(#dde3e7, #92a5b2); border-bottom: 3px solid #5c7382; padding: 8px; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } +.ui-widget-header { background-color: #b0bec7; padding: 8px 8px 6px 8px; border-bottom: 2px solid #8399a7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZTNlNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dde3e7), color-stop(100%, #92a5b2)); background-image: -webkit-linear-gradient(#dde3e7, #92a5b2); background-image: -moz-linear-gradient(#dde3e7, #92a5b2); background-image: -o-linear-gradient(#dde3e7, #92a5b2); background-image: linear-gradient(#dde3e7, #92a5b2); border-bottom: 3px solid #5c7382; padding: 8px; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; } .ui-widget-header .ui-dialog-title { padding: 6px 10px; text-shadow: #ced7dc 1px 1px 0; } .ui-widget-header a.ui-dialog-titlebar-close { position: absolute; top: -5px; right: -13px; width: 30px; height: 30px; z-index: 100000; } .ui-widget-header a.ui-state-hover { border-color: transparent; background: transparent; } -.ui-widget-header a.ui-state-hover .ui-icon-closethick { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -356px no-repeat; } -.ui-widget-header .ui-icon-closethick { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -396px no-repeat; width: 30px; height: 30px; } +.ui-widget-header a.ui-state-hover .ui-icon-closethick { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -292px no-repeat; } +.ui-widget-header .ui-icon-closethick { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -252px no-repeat; width: 30px; height: 30px; } .ui-state-hover { cursor: pointer; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { color: #444; font-size: 12px; font-family: Arial, sans-serif; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { color: #444444; font-size: 12px; font-family: Arial, sans-serif; } .ui-accordion .ui-accordion-header { border-color: #c0c0c2; margin-bottom: 0; } .ui-accordion .ui-accordion-content { border: 1px solid #c0c0c2; border-top: none; } @@ -159,11 +176,11 @@ form.nostyle .middleColumn { margin-left: 0; } form.nostyle input.text, form.nostyle textarea, form.nostyle select, form.nostyle .TreeDropdownField { width: auto; max-width: auto; } .field { display: block; border-bottom: 1px solid #d0d3d5; -webkit-box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); -moz-box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); -o-box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); padding: 0 0 7px 0; margin: 8px 0; *zoom: 1; } -.field.noborder, .field:last-child { padding-bottom: 0; border-bottom: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } +.field.noborder, .field:last-child { padding-bottom: 0; border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .field:after { content: "\0020"; display: block; height: 0; clear: both; overflow: hidden; visibility: hidden; } .field.nolabel .middleColumn { margin-left: 0; } .field.nolabel .description { margin-left: 0; } -.field.checkbox label.right { margin: 4px 0 0 0; display: inline; font-style: normal; color: #444; clear: none; } +.field.checkbox label.right { margin: 4px 0 0 0; display: inline; font-style: normal; color: #444444; clear: none; } .field label.left { float: left; display: block; width: 176px; padding: 8px 8px 8px 0; line-height: 16px; font-weight: bold; text-shadow: 1px 1px 0 white; } .field label.right { cursor: pointer; clear: both; color: #777777; display: block; font-style: italic; margin: 4px 0 0 184px; } .field .middleColumn { margin-left: 184px; } @@ -171,12 +188,12 @@ form.nostyle input.text, form.nostyle textarea, form.nostyle select, form.nostyl .field .fieldgroup .fieldgroup-field.last { /* This is used on page/settings/visibility */ padding-bottom: 8px; /* replicates li item spacing */ } .field .description { clear: both; color: #777777; display: block; font-style: italic; line-height: 16px; margin: 4px 0 0 184px; } .field.checkbox .description, .field.ss-gridfield .description { margin-left: 0; } -.field input.text, .field textarea, .field select, .field .TreeDropdownField { margin-left: 10px; width: 100%; max-width: 512px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } +.field input.text, .field textarea, .field select, .field .TreeDropdownField { margin-left: 10px; width: 100%; max-width: 512px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .field input.text.description, .field textarea.description, .field select.description, .field .TreeDropdownField.description { margin: 0; } .field input.text .description, .field textarea .description, .field select .description, .field .TreeDropdownField .description { max-width: 512px; } -.field input.text, .field textarea, .field .TreeDropdownField { background: #fff; border: 1px solid #b3b3b3; padding: 7px 7px; line-height: 16px; margin: 0; outline: none; -moz-transition: 0.2s box-shadow ease-in; -webkit-transition: 0.2s box-shadow ease-in; -o-transition: 0.2s box-shadow ease-in; transition: 0.2s box-shadow ease-in; -moz-transition: 0.2s border ease-in; -webkit-transition: 0.2s border ease-in; -o-transition: 0.2s border ease-in; transition: 0.2s border ease-in; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VhZWFlYSIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eaeaea), color-stop(10%, #ffffff)); background-image: -moz-linear-gradient(#eaeaea, #ffffff 10%); background-image: -webkit-linear-gradient(#eaeaea, #ffffff 10%); background-image: linear-gradient(#eaeaea, #ffffff 10%); } -.field input.text:focus, .field textarea:focus, .field .TreeDropdownField:focus { border: 1px solid #9a9a9a; border-top-color: #808080; -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; } -.field input[disabled], .field input.disabled, .field textarea[disabled], .field textarea.disabled, .field select[disabled], .field select.disabled { color: #777777; background: #efefef; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JjYmNiYyIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZWZlZmVmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiY2JjYmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bcbcbc), color-stop(10%, #efefef), color-stop(90%, #ffffff), color-stop(100%, #bcbcbc)); background-image: -moz-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -webkit-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); border: 1px solid #b3b3b3; } +.field input.text, .field textarea, .field .TreeDropdownField { background: #fff; border: 1px solid #b3b3b3; padding: 7px 7px; line-height: 16px; margin: 0; outline: none; -moz-transition: 0.2s box-shadow ease-in; -webkit-transition: 0.2s box-shadow ease-in; -o-transition: 0.2s box-shadow ease-in; transition: 0.2s box-shadow ease-in; -moz-transition: 0.2s border ease-in; -webkit-transition: 0.2s border ease-in; -o-transition: 0.2s border ease-in; transition: 0.2s border ease-in; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VhZWFlYSIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eaeaea), color-stop(10%, #ffffff)); background-image: -webkit-linear-gradient(#eaeaea, #ffffff 10%); background-image: -moz-linear-gradient(#eaeaea, #ffffff 10%); background-image: -o-linear-gradient(#eaeaea, #ffffff 10%); background-image: linear-gradient(#eaeaea, #ffffff 10%); } +.field input.text:focus, .field textarea:focus, .field .TreeDropdownField:focus { border: 1px solid #9a9a9a; border-top-color: gray; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; } +.field input[disabled], .field input.disabled, .field textarea[disabled], .field textarea.disabled, .field select[disabled], .field select.disabled { color: #777777; background: #efefef; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JjYmNiYyIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZWZlZmVmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiY2JjYmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bcbcbc), color-stop(10%, #efefef), color-stop(90%, #ffffff), color-stop(100%, #bcbcbc)); background-image: -webkit-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -moz-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -o-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); border: 1px solid #b3b3b3; } .field#Action { box-shadow: none; } .field.cms-description-toggle > .middleColumn { display: inline-block; vertical-align: middle; margin-left: 0; width: 36%; min-width: 300px; } .field.cms-description-toggle .right { display: inline-block; vertical-align: middle; height: 15px; margin: 0 0 0 7px; } @@ -210,11 +227,11 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .field .chzn-container { max-width: 512px; vertical-align: bottom; } .field .chzn-container .chzn-results li { font-size: 11px; line-height: 16px; padding: 4px 4px; } .field .chzn-container-active .chzn-single { border: 1px solid #9a9a9a; } -.field .chzn-container-single .chzn-single { height: 30px; line-height: 30px; /* not relative, as then we'd had to redo most of chzn */ font-size: 12px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VmZWZlZiIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlZmVmZWYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #efefef), color-stop(10%, #ffffff), color-stop(90%, #ffffff), color-stop(100%, #efefef)); background-image: -moz-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -webkit-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); } +.field .chzn-container-single .chzn-single { height: 30px; line-height: 30px; /* not relative, as then we'd had to redo most of chzn */ font-size: 12px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VmZWZlZiIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlZmVmZWYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #efefef), color-stop(10%, #ffffff), color-stop(90%, #ffffff), color-stop(100%, #efefef)); background-image: -webkit-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -moz-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -o-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); } .field .chzn-container-single .chzn-single:hover, .field .chzn-container-single .chzn-single:focus, .field .chzn-container-single .chzn-single:active { text-decoration: none; } .field .chzn-container-single .chzn-single div { width: 24px; } .field .chzn-container-single .chzn-single div b { background-position: 4px 3px; } -.field .chzn-choices { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } +.field .chzn-choices { -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } .field .chzn-choices .search-choice { line-height: 16px; } .field .chzn-choices .search-choice .search-choice-close { top: 5px; } .field .chzn-choices .search-field input { height: 18px; } @@ -223,10 +240,10 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .field.remove-splitter { border-bottom: none; box-shadow: none; } /** ---------------------------------------------------- Buttons ---------------------------------------------------- */ -.cms .button-no-style button, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: none; border: none; color: #0073C1; display: block; font-weight: normal; margin: 0; outline: none; padding-left: 10px; padding-right: 10px; text-align: left; text-shadow: none; white-space: normal; } +.cms .button-no-style button, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button { -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: none; border: none; color: #0073c1; display: block; font-weight: normal; margin: 0; outline: none; padding-left: 10px; padding-right: 10px; text-align: left; text-shadow: none; white-space: normal; } .cms .button-no-style button.ss-ui-action-destructive, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-action-destructive { color: #c22730; } .cms .button-no-style button span, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button span { padding-left: 0; padding-right: 0; } -.cms .button-no-style button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:hover, .cms .button-no-style button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:focus, .cms .button-no-style button:active, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; outline: none; background: none; border: none; } +.cms .button-no-style button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:hover, .cms .button-no-style button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:focus, .cms .button-no-style button:active, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; outline: none; background: none; border: none; } .cms .button-no-style button.loading, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.loading { background: transparent url(../../images/network-save.gif) no-repeat 8px center; } .cms .button-no-style button.loading .ui-button-text, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.loading .ui-button-text { padding-left: 20px; } .cms .Actions > *, .cms .cms-actions-row > * { display: block; float: left; margin-right: 8px; } @@ -236,17 +253,17 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .cms input.loading, .cms button.loading, .cms input.ui-state-default.loading, .cms .ui-widget-content input.ui-state-default.loading, .cms .ui-widget-header input.ui-state-default.loading { color: #525252; border-color: #d5d3d3; cursor: default; } .cms input.loading .ui-icon, .cms button.loading .ui-icon, .cms input.ui-state-default.loading .ui-icon, .cms .ui-widget-content input.ui-state-default.loading .ui-icon, .cms .ui-widget-header input.ui-state-default.loading .ui-icon { background: transparent url(../../images/network-save.gif) no-repeat 0 0; } .cms input.loading.ss-ui-action-constructive .ui-icon, .cms button.loading.ss-ui-action-constructive .ui-icon { background: transparent url(../../images/network-save-constructive.gif) no-repeat 0 0; } -.cms .ss-ui-button { margin-top: 0px; font-weight: bold; text-decoration: none; line-height: 16px; color: #393939; border: 1px solid #c0c0c2; border-bottom: 1px solid #a6a6a9; cursor: pointer; background-color: #e6e6e6; white-space: nowrap; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background: -moz-linear-gradient(#ffffff, #d9d9d9); background: -webkit-linear-gradient(#ffffff, #d9d9d9); background: linear-gradient(#ffffff, #d9d9d9); text-shadow: white 0 1px 1px; /* constructive */ /* destructive */ } -.cms .ss-ui-button.ui-state-hover, .cms .ss-ui-button:hover { text-decoration: none; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -moz-box-shadow: 0 0 5px #b3b3b3; -webkit-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; } -.cms .ss-ui-button:active, .cms .ss-ui-button:focus, .cms .ss-ui-button.ui-state-active, .cms .ss-ui-button.ui-state-focus { border: 1px solid #b3b3b3; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -moz-box-shadow: 0 0 5px #b3b3b3 inset; -webkit-box-shadow: 0 0 5px #b3b3b3 inset; box-shadow: 0 0 5px #b3b3b3 inset; } +.cms .ss-ui-button { margin-top: 0px; font-weight: bold; text-decoration: none; line-height: 16px; color: #393939; border: 1px solid #c0c0c2; border-bottom: 1px solid #a6a6a9; cursor: pointer; background-color: #e6e6e6; white-space: nowrap; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background: -webkit-linear-gradient(#ffffff, #d9d9d9); background: -moz-linear-gradient(#ffffff, #d9d9d9); background: -o-linear-gradient(#ffffff, #d9d9d9); background: linear-gradient(#ffffff, #d9d9d9); text-shadow: white 0 1px 1px; /* constructive */ /* destructive */ } +.cms .ss-ui-button.ui-state-hover, .cms .ss-ui-button:hover { text-decoration: none; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -o-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -webkit-box-shadow: 0 0 5px #b3b3b3; -moz-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; } +.cms .ss-ui-button:active, .cms .ss-ui-button:focus, .cms .ss-ui-button.ui-state-active, .cms .ss-ui-button.ui-state-focus { border: 1px solid #b3b3b3; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -o-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -webkit-box-shadow: 0 0 5px #b3b3b3 inset; -moz-box-shadow: 0 0 5px #b3b3b3 inset; box-shadow: 0 0 5px #b3b3b3 inset; } .cms .ss-ui-button.ss-ui-action-minor span { padding-left: 0; padding-right: 0; } -.cms .ss-ui-button.ss-ui-action-constructive { text-shadow: none; font-weight: bold; color: white; border-color: #1F9433; border-bottom-color: #166a24; background-color: #1F9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzk0YmU0MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFmOTQzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #94be42), color-stop(100%, #1f9433)); background: -moz-linear-gradient(#94be42, #1f9433); background: -webkit-linear-gradient(#94be42, #1f9433); background: linear-gradient(#94be42, #1f9433); text-shadow: #1c872f 0 -1px -1px; } -.cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover, .cms .ss-ui-button.ss-ui-action-constructive:hover { border-color: #166a24; background-color: #1F9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E0Y2EzYSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzIzYTkzYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a4ca3a), color-stop(100%, #23a93a)); background: -moz-linear-gradient(#a4ca3a, #23a93a); background: -webkit-linear-gradient(#a4ca3a, #23a93a); background: linear-gradient(#a4ca3a, #23a93a); } -.cms .ss-ui-button.ss-ui-action-constructive:active, .cms .ss-ui-button.ss-ui-action-constructive:focus, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-active, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-focus { background-color: #1d8c30; -moz-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); -webkit-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); } -.cms .ss-ui-button.ss-ui-action-destructive { color: #f00; background-color: #e6e6e6; } +.cms .ss-ui-button.ss-ui-action-constructive { text-shadow: none; font-weight: bold; color: white; border-color: #1f9433; border-bottom-color: #166a24; background-color: #1f9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkzYmU0MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFmOTQzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #93be42), color-stop(100%, #1f9433)); background: -webkit-linear-gradient(#93be42, #1f9433); background: -moz-linear-gradient(#93be42, #1f9433); background: -o-linear-gradient(#93be42, #1f9433); background: linear-gradient(#93be42, #1f9433); text-shadow: #1c872f 0 -1px -1px; } +.cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover, .cms .ss-ui-button.ss-ui-action-constructive:hover { border-color: #166a24; background-color: #1f9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E0Y2EzYSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzIzYTkzYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a4ca3a), color-stop(100%, #23a93a)); background: -webkit-linear-gradient(#a4ca3a, #23a93a); background: -moz-linear-gradient(#a4ca3a, #23a93a); background: -o-linear-gradient(#a4ca3a, #23a93a); background: linear-gradient(#a4ca3a, #23a93a); } +.cms .ss-ui-button.ss-ui-action-constructive:active, .cms .ss-ui-button.ss-ui-action-constructive:focus, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-active, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-focus { background-color: #1d8c30; -webkit-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); -moz-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); } +.cms .ss-ui-button.ss-ui-action-destructive { color: red; background-color: #e6e6e6; } .cms .ss-ui-button.ss-ui-button-small .ui-button-text { font-size: 10px; } .cms .ss-ui-button.ui-state-highlight { background-color: #e6e6e6; border: 1px solid #708284; } -.cms .ss-ui-button.ss-ui-action-minor { background: none; border: 0; color: #393939; text-decoration: underline; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } +.cms .ss-ui-button.ss-ui-action-minor { background: none; border: 0; color: #393939; text-decoration: underline; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .cms .ss-ui-button.ss-ui-action-minor:hover { text-decoration: none; color: #1f1f1f; } .cms .ss-ui-button.ss-ui-action-minor:focus, .cms .ss-ui-button.ss-ui-action-minor:active { text-decoration: none; color: #525252; } .cms .ss-ui-button.ss-ui-button-loading { opacity: 0.8; } @@ -265,10 +282,10 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .ss-toggle { margin: 8px 0; } .ss-toggle .ui-accordion-header { font-weight: bold; font-size: 12px; } -.ss-toggle .ui-accordion-header.ui-state-default { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2YxZjJmMiIgc3RvcC1vcGFjaXR5PSIwLjgiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNjOWNkY2UiIHN0b3Atb3BhY2l0eT0iMC44Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(241, 242, 242, 0.8)), color-stop(100%, rgba(201, 205, 206, 0.8))); background-image: -moz-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -webkit-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } +.ss-toggle .ui-accordion-header.ui-state-default { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyNDEsIDI0MiwgMjQyLCAwLjgpIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSJyZ2JhKDIwMSwgMjA1LCAyMDYsIDAuOCkiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(241, 242, 242, 0.8)), color-stop(100%, rgba(201, 205, 206, 0.8))); background-image: -webkit-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -moz-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -o-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .ss-toggle .ui-accordion-header .ui-accordion-header-icon { margin-top: -9px; } .ss-toggle .ui-accordion-content { padding: 8px 0 12px; } -.ss-toggle .ui-accordion-content .field { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; padding-left: 12px; padding-right: 12px; } +.ss-toggle .ui-accordion-content .field { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; padding-left: 12px; padding-right: 12px; } .ss-toggle .ui-accordion-content .field:last-child { margin-bottom: 0; } .ss-toggle .ui-accordion-content .field .middleColumn { margin-left: 0; } .ss-toggle .ui-accordion-content .field label { float: none; margin-left: 0; } @@ -324,13 +341,13 @@ fieldset.switch-states { padding: 0 20px 0 0; margin-right: 5px; /* Note: with a little adjustment the switch can take more than 5 items, but a dropdown would probably be more appropriate */ } -fieldset.switch-states .switch { -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; -webkit-animation: bugfix infinite 1s; background: #dee0e3; display: block; height: 25px; margin-top: 3px; padding: 0 10px; position: relative; width: 100%; z-index: 5; } +fieldset.switch-states .switch { -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; -webkit-animation: bugfix infinite 1s; background: #dee0e3; display: block; height: 25px; margin-top: 3px; padding: 0 10px; position: relative; width: 100%; z-index: 5; } fieldset.switch-states .switch label { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); color: #858585; color: rgba(31, 31, 31, 0.5); cursor: pointer; float: left; font-weight: bold; height: 100%; line-height: 25px; position: relative; z-index: 2; /* Make text unselectable in browsers that support that */ -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } fieldset.switch-states .switch label:hover { color: #6c6c6c; color: rgba(31, 31, 31, 0.7); } -fieldset.switch-states .switch label span { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; display: inline-block; padding: 0 10px; } +fieldset.switch-states .switch label span { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; display: inline-block; padding: 0 10px; } fieldset.switch-states .switch input { opacity: 0; filter: alpha(opacity=0); visibility: none; position: absolute; } fieldset.switch-states .switch input:checked + label { -moz-transition: all 0.3s ease-out 0s; -webkit-transition: all 0.3s ease-out 0s; -o-transition: all 0.3s ease-out 0s; transition: all 0.3s ease-out 0s; color: #fff; text-shadow: 0 -1px 0 #287099; } -fieldset.switch-states .switch .slide-button { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJiOWMzMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzY0YWIzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2b9c32), color-stop(100%, #64ab36)); background-image: -moz-linear-gradient(#2b9c32, #64ab36); background-image: -webkit-linear-gradient(#2b9c32, #64ab36); background-image: linear-gradient(#2b9c32, #64ab36); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -moz-transition: all 0.3s ease-out 0s; -webkit-transition: all 0.3s ease-out 0s; -o-transition: all 0.3s ease-out 0s; transition: all 0.3s ease-out 0s; background-color: #2b9c32; display: block; height: 100%; left: 0; padding: 0; position: absolute; top: 0; z-index: 1; } +fieldset.switch-states .switch .slide-button { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJiOWMzMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzY0YWIzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2b9c32), color-stop(100%, #64ab36)); background-image: -webkit-linear-gradient(#2b9c32, #64ab36); background-image: -moz-linear-gradient(#2b9c32, #64ab36); background-image: -o-linear-gradient(#2b9c32, #64ab36); background-image: linear-gradient(#2b9c32, #64ab36); -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -moz-transition: all 0.3s ease-out 0s; -webkit-transition: all 0.3s ease-out 0s; -o-transition: all 0.3s ease-out 0s; transition: all 0.3s ease-out 0s; background-color: #2b9c32; display: block; height: 100%; left: 0; padding: 0; position: absolute; top: 0; z-index: 1; } fieldset.switch-states.size_1 label, fieldset.switch-states.size_1 .slide-button { width: 100%; } fieldset.switch-states.size_1 label span { padding-right: 0; } fieldset.switch-states.size_1 input:checked:nth-of-type(2) ~ .slide-button { left: 100%; } @@ -360,6 +377,7 @@ fieldset.switch-states.size_5 input:checked:nth-of-type(5) ~ .slide-button { lef @-webkit-keyframes bugfix { from { position: relative; } to { position: relative; } } + .cms-content-filters fieldset { margin-left: -16px; margin-right: -16px; } .cms-content-filters .fieldgroup { width: 50%; display: inline-block; max-width: 440px; padding-right: 16px; padding-left: 16px; margin-bottom: 16px; box-sizing: border-box; margin-right: -2px; vertical-align: top; } .cms-content-filters .fieldgroup .first label, .cms-content-filters .fieldgroup .first h1, .cms-content-filters .fieldgroup .first h2, .cms-content-filters .fieldgroup .first h3, .cms-content-filters .fieldgroup .first h4, .cms-content-filters .fieldgroup .first h5 { display: block; width: 176px; padding: 8px 8px 6px 0; line-height: 16px; font-weight: bold; margin: 0; font-size: 100%; } @@ -381,6 +399,10 @@ fieldset.switch-states.size_5 input:checked:nth-of-type(5) ~ .slide-button { lef .cms-content-filters .middleColumn { width: 100%; margin-left: 0; max-width: 100%; } .cms-content-filters .Actions { margin: 8px 0 16px; } @media screen and (max-width: 767px) { .cms-content-filters fieldset .field, .cms-content-filters fieldset .fieldgroup { width: 100%; max-width: 100%; } } +.cms-panel .cms-content-filters .field, .cms-panel .cms-content-filters .fieldgroup { width: 100%; margin-bottom: 16px; } +.cms-panel .cms-content-filters .fieldgroup-field h4 { padding-top: 0; } +.cms-panel .cms-content-filters .fieldgroup-field label { position: static; } +.cms-panel .cms-content-filters .Actions { margin-bottom: 0; } /** * This file defines most styles of the CMS: Colors, fonts, backgrounds, @@ -399,7 +421,7 @@ html, body { width: 100%; height: 100%; /* Removes RHS whitespace on iPad */ ove body.cms { overflow: hidden; } -.cms a { color: #0073C1; text-decoration: none; } +.cms a { color: #0073c1; text-decoration: none; } .cms a:hover, .cms a:focus { text-decoration: underline; } .cms body .ui-widget { font-family: Arial, sans-serif; font-size: 12px; } .cms strong { font-weight: bold; } @@ -408,12 +430,12 @@ body.cms { overflow: hidden; } .hide, .cms-helper-hide-actions .Actions { display: none; } /** -------------------------------------------- Panels Styles -------------------------------------------- */ -.cms-container { height: 100%; /*background: $tab-panel-texture-background;*/ background: #ECEFF1; } +.cms-container { height: 100%; /*background: $tab-panel-texture-background;*/ background: #eceff1; } -.cms-preview, .cms-menu, .cms-content, .cms-content-header, .cms-content-tools, .cms-content-fields, .cms-edit-form, .cms-preview, .cms-preview iframe, .cms-preview-controls { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; } +.cms-preview, .cms-menu, .cms-content, .cms-content-header, .cms-content-tools, .cms-content-fields, .cms-edit-form, .cms-preview, .cms-preview iframe, .cms-preview-controls { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; } -.cms-content-header { padding-left: 16px; z-index: 60; min-height: 40px; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; background-position: left bottom; background-color: #D4D6D8; } -.cms-content-header a { color: #0073C1; } +.cms-content-header { padding-left: 16px; z-index: 60; min-height: 48px; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; background-position: left bottom; background-color: #d4d6d8; } +.cms-content-header a { color: #0073c1; } .cms-content-header .backlink span.btn-icon-back { height: 16px; } .cms-content-header h2 { font-size: 14px; font-weight: bold; margin: 0; margin-bottom: 8px; } .cms-content-header h2 * { vertical-align: middle; } @@ -427,7 +449,29 @@ body.cms { overflow: hidden; } .cms-container .column-hidden { display: none; } -.cms-content-header-top { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; width: 100%; } +.cms-content-header-top { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; width: 100%; } + +.has-panel .cms-content-header.north { padding-left: 8px; } +.has-panel .cms-content-header.north.collapsed .cms-content-header-info { width: 24px; text-align: right; } +.has-panel .cms-content-header.north.collapsed .view-controls, .has-panel .cms-content-header.north.collapsed .section-label { display: none; } +.has-panel .cms-content-header.north.collapsed .cms-content-header-nav { margin-left: 31px; } +.has-panel .cms-content-header-info { position: absolute; top: 0; left: 0; bottom: 1px; width: 272px; margin-left: -8px; padding-bottom: 8px; padding-left: 16px; padding-right: 8px; background-color: #eceff1; border-right: 1px solid #c0c0c2; } +.has-panel .cms-content-header-nav { margin-left: 280px; } +.has-panel .section-heading { margin-top: 8px; } +.has-panel .section-icon { vertical-align: middle; } +.has-panel .section-label { vertical-align: middle; font-size: 1.2em; font-weight: bold; } +.has-panel .breadcrumbs-wrapper { float: left; padding-top: 6px; padding-left: 24px; } +.has-panel .cms-content-header-tabs { margin-top: 9px; } +.has-panel .cms-tabset-nav-primary.ui-tabs-nav .ui-state-default.ui-corner-top { border-top: 1px solid #b3b3b3; } +.has-panel .view-controls { float: right; margin-top: 4px; } +.has-panel .cms-content-tools .cms-panel-content { padding-top: 0; overflow-x: hidden; } + +#page-title-heading { line-height: 1.2em; } + +/** ------------------------------------------------------------------ CMS Breadcrumbs ----------------------------------------------------------------- */ +.breadcrumbs-wrapper .crumb, .breadcrumbs-wrapper .sep { font-size: .8em; line-height: 1.2em; } +.breadcrumbs-wrapper .crumb.last { display: block; padding: 8px 0; font-size: 1.2em; } +.breadcrumbs-wrapper .sep + .crumb.last { padding-top: 0; padding-bottom: 0; } /** ------------------------------------------------------------------ Filters available in the top bar. This is a togglable element that displays a form used for filtering content. ----------------------------------------------------------------- */ .cms-content-filters { display: none; width: 100%; margin: 0 0 0 -16px; padding: 16px; background-color: #dddfe1; } @@ -435,14 +479,27 @@ body.cms { overflow: hidden; } .cms-content-view, .ui-tabs .cms-panel-padded .cms-content-view.ui-tabs-panel { padding-top: 16px; } -.cms-tabset-nav-primary { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; vertical-align: middle; } +.cms-tabset-nav-primary { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; vertical-align: middle; } -/** ------------------------------------------------------------------ Buttons that use font icons ----------------------------------------------------------------- */ -.ss-ui-button.icon-button { vertical-align: middle; margin-right: 2px; padding: .3em; font-size: 1.4em; letter-spacing: -3px; text-shadow: none; line-height: 1em; background-color: transparent; background-image: none; border: 0; } -.ss-ui-button.icon-button:hover, .ss-ui-button.icon-button:active, .ss-ui-button.icon-button:focus { border: 0; box-shadow: none; background-image: none; outline: 0; } -.ss-ui-button.icon-button:hover, .ss-ui-button.icon-button:active { background-color: #b6b9bb; } -.ss-ui-button.icon-button.active { background-color: #b6b9bb; } -.ss-ui-button.icon-button .ui-button-text { display: none; } +/** ------------------------------------------------------------------ Buttons that use font icons. There are !important rules here because we need to override some Tab styling. It's tidier to have some !important rules here than have the Tab styles littered with load of context specific rules for icon-buttons. Icon buttons styles should always take presedence over Tab styles. Tabs should be refactored to use weaker selectors. ----------------------------------------------------------------- */ +a.icon-button, .ui-tabs .ui-tabs-nav li a.icon-button, button.ss-ui-button.icon-button { vertical-align: middle; margin-right: 2px; padding: .4em; font-size: 1.2em; letter-spacing: -3px; text-indent: 0; text-shadow: none; line-height: 1em; color: #393939; background-color: transparent; background-image: none; border: 0; } +a.icon-button:hover, .ui-tabs .ui-tabs-nav li a.icon-button:hover, a.icon-button:active, .ui-tabs .ui-tabs-nav li a.icon-button:active, a.icon-button:focus, .ui-tabs .ui-tabs-nav li a.icon-button:focus, button.ss-ui-button.icon-button:hover, button.ss-ui-button.icon-button:active, button.ss-ui-button.icon-button:focus { border: 0; box-shadow: none; background-image: none; text-decoration: none; } +a.icon-button:hover, .ui-tabs .ui-tabs-nav li a.icon-button:hover, a.icon-button:active, .ui-tabs .ui-tabs-nav li a.icon-button:active, button.ss-ui-button.icon-button:hover, button.ss-ui-button.icon-button:active { background-color: #b6b9bb; } +a.icon-button.active, .ui-tabs .ui-tabs-nav li a.active.icon-button, button.ss-ui-button.icon-button.active { background-color: #b6b9bb; } +a.icon-button .ui-button-text, .ui-tabs .ui-tabs-nav li a.icon-button .ui-button-text, button.ss-ui-button.icon-button .ui-button-text { display: none; } +.ui-tabs.ui-tabs-nav a.icon-button, .ui-tabs.ui-tabs-nav .ui-tabs-nav li a.icon-button, .ui-tabs.ui-tabs-nav button.ss-ui-button.icon-button { padding: 9px 8px 5px !important; line-height: 1em !important; background-color: transparent !important; background-image: none !important; border: 0 !important; } +.ui-tabs.ui-tabs-nav a.icon-button:before, .ui-tabs.ui-tabs-nav button.ss-ui-button.icon-button:before { margin-top: 2px; } + +.icon-button-group { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; margin-top: 0; vertical-align: middle; border: 1px solid #CDCCD0; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } +.icon-button-group a.icon-button, .icon-button-group .ui-tabs .ui-tabs-nav li a.icon-button, .ui-tabs .ui-tabs-nav li .icon-button-group a.icon-button, .icon-button-group button.ss-ui-button.icon-button { margin-right: 0; line-height: 13px; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; -ms-border-radius: 0 0 0 0; -o-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } +.icon-button-group a.icon-button:first-child, .icon-button-group .ui-tabs .ui-tabs-nav li a.icon-button:first-child, .ui-tabs .ui-tabs-nav li .icon-button-group a.icon-button:first-child, .icon-button-group button.ss-ui-button.icon-button:first-child { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; -ms-border-radius: 3px 0 0 3px; -o-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } +.icon-button-group a.icon-button:last-child, .icon-button-group .ui-tabs .ui-tabs-nav li a.icon-button:last-child, .ui-tabs .ui-tabs-nav li .icon-button-group a.icon-button:last-child, .icon-button-group button.ss-ui-button.icon-button:last-child { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; -ms-border-radius: 0 3px 3px 0; -o-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } +.icon-button-group a.icon-button + a.icon-button, .icon-button-group a.icon-button + button.ss-ui-button.icon-button, .icon-button-group button.ss-ui-button.icon-button + a.icon-button, .icon-button-group button.ss-ui-button.icon-button + button.ss-ui-button.icon-button { border-left: 1px solid #CDCCD0; } +.icon-button-group .ui-tabs.ui-tabs-nav { border-left: 0 !important; margin-top: -2px !important; padding-right: 0 !important; overflow: hidden; } +.icon-button-group .ui-tabs.ui-tabs-nav .cms-tabset-icon.ui-state-default { background-color: transparent; background-image: none; border-left: 0; border-right: 0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.icon-button-group .ui-tabs.ui-tabs-nav .cms-tabset-icon.ui-state-default + .cms-tabset-icon.ui-state-default { border-left: 1px solid #CDCCD0; } +.icon-button-group .ui-tabs.ui-tabs-nav .cms-tabset-icon.ui-state-active { background-color: #b6b9bb; } +.cms-content-header-tabs .icon-button-group { overflow: hidden; } /** -------------------------------------------- Tabs -------------------------------------------- */ .ui-tabs { padding: 0; background: none; } @@ -453,26 +510,26 @@ body.cms { overflow: hidden; } .ui-tabs .ui-tabs-nav { float: right; margin: 16px 0 -1px 0; padding: 0 12px 0 0; border-bottom: none; } .ui-tabs .ui-tabs-nav ~ .ui-tabs-panel { border-top: 1px solid #c0c0c2; clear: both; } .ui-tabs .ui-tabs-nav li { top: 0; float: left; border-bottom: 0 !important; } -.ui-tabs .ui-tabs-nav li a { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; float: none; font-weight: bold; color: #444; line-height: 32px; padding: 0 16px 0; } +.ui-tabs .ui-tabs-nav li a { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; float: none; font-weight: bold; color: #444444; line-height: 32px; padding: 0 16px 0; } .ui-tabs .ui-tabs-nav li:last-child { margin-right: 0; } .ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: 0; } .ui-tabs .ui-tabs-nav .ui-state-default { border: 1px solid #c0c0c2; background: #ced7dc; } .ui-tabs .ui-tabs-nav .ui-state-default a { color: #5e5e5e; text-shadow: #e6e6e6 0 1px 0; } .ui-tabs .ui-tabs-nav .ui-state-active { padding-bottom: 1px; border: 1px solid #c0c0c2; background-color: #e6eaed; } -.ui-tabs .ui-tabs-nav .ui-state-active a { color: #444; } -.ui-tabs .ui-tabs-nav.ui-state-active { border-color: #808080; } +.ui-tabs .ui-tabs-nav .ui-state-active a { color: #444444; } +.ui-tabs .ui-tabs-nav.ui-state-active { border-color: gray; } .ui-tabs .ui-tabs-nav li.cms-tabset-icon { text-indent: -9999em; } .ui-tabs .ui-tabs-nav li.cms-tabset-icon a { display: block; padding-left: 40px; padding-right: 0; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -304px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -504px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -204px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -104px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -404px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -254px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -454px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -154px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -54px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -354px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -504px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -354px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -454px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -304px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -154px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -204px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -254px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -54px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -404px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -104px no-repeat; } .ui-tabs .cms-panel-padded .ui-tabs-panel { padding: 0; } .ui-tabs .cms-panel-padded .ui-tabs-panel .ui-tabs-panel { padding: 8px 0 0 0; } .ui-tabs .cms-panel-padded .Actions { padding: 0; } @@ -483,11 +540,12 @@ body.cms { overflow: hidden; } .ui-tabs.cms-tabset-primary .ui-tabs-nav li, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary li, .ui-tabs .cms-content-header-tabs .ui-tabs-nav li { margin-right: 0; margin-top: 0; } .ui-tabs.cms-tabset-primary .ui-tabs-nav li a, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary li a, .ui-tabs .cms-content-header-tabs .ui-tabs-nav li a { margin: 0; line-height: 39px; } .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-all, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-top, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-right, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-tr, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-tl, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-all, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-top, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-right, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-tr, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-tl, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-all, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-top, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-right, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-tr, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-tl { border-radius: 0; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-default, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-default, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-default { -moz-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; -webkit-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; background-color: #b0bec7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Q0ZGJlMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d4dbe0), color-stop(100%, #b0bec7)); background-image: -moz-linear-gradient(#d4dbe0, #b0bec7); background-image: -webkit-linear-gradient(#d4dbe0, #b0bec7); background-image: linear-gradient(#d4dbe0, #b0bec7); border-top: none; border-right-color: #8399a7; border-left-color: #ced7dc; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; background: #e6eaed; border-top: none; border-right-color: #b3b3b3; border-left-color: #ECEFF1; z-index: 2; } +.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-default, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-default, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-default { -webkit-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; -moz-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; background-color: #b0bec7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Q0ZGJlMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d4dbe0), color-stop(100%, #b0bec7)); background-image: -webkit-linear-gradient(#d4dbe0, #b0bec7); background-image: -moz-linear-gradient(#d4dbe0, #b0bec7); background-image: -o-linear-gradient(#d4dbe0, #b0bec7); background-image: linear-gradient(#d4dbe0, #b0bec7); border-top: none; border-right-color: #8399a7; border-left-color: #ced7dc; } +.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; background: #e6eaed; border-top: none; border-right-color: #b3b3b3; border-left-color: #eceff1; z-index: 2; } .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active a, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active a, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-active a { border-bottom: none; } -.cms-content-header-tabs { float: right; } +.cms-content-header-tabs { float: right; margin-top: 11px; } +.cms-content-header-tabs .icon-button-group { margin-right: 16px; } /** ------------------------------------------------------- Loading Interface ------------------------------------------------------- */ .cms-content-loading-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 9998; } @@ -495,19 +553,19 @@ body.cms { overflow: hidden; } .cms-content-loading-spinner { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 9999; background: url(../images/spinner.gif) no-repeat 50% 50%; } /** ----------------------------------------------- Loading Screen ------------------------------------------------ */ -.ss-loading-screen { width: 100%; height: 100%; overflow: hidden; position: absolute; z-index: 100000; background: #fff; background: -moz-radial-gradient(50% 50% 180deg, circle cover, #FFFFFF, #EFEFEF, #C7C7C7 100%); background: -webkit-gradient(radial, 50% 50%, 350, 50% 50%, 0, from(#E3E3E3), to(white)); } +.ss-loading-screen { width: 100%; height: 100%; overflow: hidden; position: absolute; z-index: 100000; background: #fff; background: -moz-radial-gradient(50% 50% 180deg, circle cover, white, #efefef, #c7c7c7 100%); background: -webkit-gradient(radial, 50% 50%, 350, 50% 50%, 0, from(#e3e3e3), to(white)); } .ss-loading-screen .loading-logo { width: 100%; height: 100%; overflow: hidden; position: absolute; background: transparent url(../images/silverstripe_logo.png) no-repeat 50% 50%; } .ss-loading-screen p { width: 100%; text-align: center; position: absolute; bottom: 80px; z-index: 100001; } -.ss-loading-screen p span.notice { width: 300px; font-size: 14px; padding: 10px 20px; color: #dc7f00; border: none; background: none; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; display: inline-block; zoom: 1; *display: inline; } +.ss-loading-screen p span.notice { width: 300px; font-size: 14px; padding: 10px 20px; color: #dc7f00; border: none; background: none; -webkit-border-radius: 5px; -moz-border-radius: 5px; -ms-border-radius: 5px; -o-border-radius: 5px; border-radius: 5px; display: inline-block; zoom: 1; *display: inline; } .ss-loading-screen .loading-animation { display: none; position: absolute; left: 50%; margin-left: -21.5px; top: 80%; } /** -------------------------------------------- Actions -------------------------------------------- */ -.cms-content-actions, .cms-preview-controls { margin: 0; padding: 12px 12px; z-index: 999; border-top: 1px solid #cacacc; -moz-box-shadow: 1px 0 0 #ECEFF1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; -webkit-box-shadow: 1px 0 0 #ECEFF1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; box-shadow: 1px 0 0 #ECEFF1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; height: 28px; background-color: #ECEFF1; } +.cms-content-actions, .cms-preview-controls { margin: 0; padding: 12px 12px; z-index: 999; border-top: 1px solid #cacacc; -webkit-box-shadow: 1px 0 0 #eceff1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; -moz-box-shadow: 1px 0 0 #eceff1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; box-shadow: 1px 0 0 #eceff1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; height: 28px; background-color: #eceff1; } /** -------------------------------------------- Messages -------------------------------------------- */ -.message { display: block; clear: both; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #ccc solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -moz-border-radius: 3px 3px 3px 3px; -webkit-border-radius: 3px; border-radius: 3px 3px 3px 3px; } -.message.notice { background-color: #f0f8fc; border-color: #93CDE8; } -.message.warning { background-color: #fefbde; border-color: #E9D104; } +.message { display: block; clear: both; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #ccc solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -webkit-border-radius: 3px 3px 3px 3px; -moz-border-radius: 3px 3px 3px 3px; -ms-border-radius: 3px 3px 3px 3px; -o-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; } +.message.notice { background-color: #f0f8fc; border-color: #93cde8; } +.message.warning { background-color: #fefbde; border-color: #e9d104; } .message.error, .message.bad, .message.required, .message.validation { background-color: #fae8e9; border-color: #e68288; } .message.good { background-color: #eaf6e4; border-color: #72c34b; } .message p { margin: 0; } @@ -515,7 +573,7 @@ body.cms { overflow: hidden; } .cms-edit-form .message { margin: 16px; } .cms-edit-form .ui-tabs-panel .message { margin: 16px 0; } -.notice-item { border: 0; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; font-family: inherit; font-size: inherit; padding: 8px 10px 8px 10px; } +.notice-item { border: 0; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; font-family: inherit; font-size: inherit; padding: 8px 10px 8px 10px; } .notice-item-close { color: #333333; background: url(../images/filter-icons.png) no-repeat 0 -20px; width: 1px; height: 1px; overflow: hidden; padding: 0px 0 20px 15px; } @@ -541,7 +599,7 @@ body.cms { overflow: hidden; } #PageType ul li { float: none; width: 100%; padding: 9px 0 9px 15px; overflow: hidden; border-bottom-width: 2px; border-bottom: 2px groove rgba(255, 255, 255, 0.8); -webkit-border-image: url(../images/textures/bg_fieldset_elements_border.png) 2 stretch stretch; border-image: url(../images/textures/bg_fieldset_elements_border.png) 2 stretch stretch; } #PageType ul li:last-child { border-bottom: none; } #PageType ul li:hover, #PageType ul li.selected { background-color: rgba(255, 255, 102, 0.3); } -#PageType ul li.disabled { color: #aaa; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); opacity: 0.5; } +#PageType ul li.disabled { color: #aaaaaa; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); opacity: 0.5; } #PageType ul li.disabled:hover { background: none; } #PageType ul li input { margin: inherit; } #PageType ul li label { padding-left: 0; padding-bottom: 0; } @@ -555,19 +613,19 @@ body.cms { overflow: hidden; } .cms-content-toolbar:after { content: "\0020"; display: block; height: 0; clear: both; overflow: hidden; visibility: hidden; } .cms-content-toolbar .cms-tree-view-modes { float: right; padding-top: 5px; } .cms-content-toolbar .cms-tree-view-modes * { display: inline-block; } -.cms-content-toolbar .cms-tree-view-modes * label { color: #0073C1; } +.cms-content-toolbar .cms-tree-view-modes * label { color: #0073c1; } .cms-content-toolbar .ss-ui-button { margin-bottom: 8px; } .cms-content-toolbar .cms-actions-buttons-row { clear: both; } .cms-content-toolbar .cms-actions-tools-row { clear: both; } .cms-content-toolbar .tool-action { display: none; } /** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. Content Tools is the sidebar on the left of the main content panel */ -.cms-content-tools { background: #ECEFF1; width: 288px; overflow-y: auto; overflow-x: hidden; z-index: 70; border-right: 1px solid #C0C0C2; -moz-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); -webkit-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); float: left; position: relative; } +.cms-content-tools { background: #eceff1; width: 288px; overflow-y: auto; overflow-x: hidden; z-index: 70; border-right: 1px solid #c0c0c2; -webkit-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); -moz-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); float: left; position: relative; } .cms-content-tools.filter { padding: 0 !important; } .cms-content-tools .cms-panel-header { clear: both; margin: 10px 0 7px; padding-bottom: 2px; line-height: 24px; border-bottom: 1px solid #d0d3d5; -webkit-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); -o-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); } .cms-content-tools .cms-panel-content { width: 272px; padding: 8.8px 8px 0; overflow: auto; height: 100%; } .cms-content-tools .cms-panel-content .Actions .ss-ui-action-constructive { margin-right: 5px; } -.cms-content-tools .cms-content-header { background-color: #748d9d; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzc0OGQ5ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #748d9d)); background-image: -moz-linear-gradient(#b0bec7, #748d9d); background-image: -webkit-linear-gradient(#b0bec7, #748d9d); background-image: linear-gradient(#b0bec7, #748d9d); } +.cms-content-tools .cms-content-header { background-color: #748d9d; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzc0OGQ5ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #748d9d)); background-image: -webkit-linear-gradient(#b0bec7, #748d9d); background-image: -moz-linear-gradient(#b0bec7, #748d9d); background-image: -o-linear-gradient(#b0bec7, #748d9d); background-image: linear-gradient(#b0bec7, #748d9d); } .cms-content-tools .cms-content-header h2 { text-shadow: #5c7382 -1px -1px 0; width: 176px; color: white; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; } .cms-content-tools h3, .cms-content-tools h4, .cms-content-tools h5 { font-weight: bold; line-height: 16px; } .cms-content-tools h3 { font-size: 13px; } @@ -584,33 +642,33 @@ body.cms { overflow: hidden; } .cms-content-tools .fieldgroup .fieldgroup-field .field { margin: 0; padding: 0; } .cms-content-tools table { margin: 8px -4px; } .cms-content-tools table thead th { color: #1f1f1f; font-weight: bold; line-height: 16px; font-size: 11px; padding: 4px; } -.cms-content-tools table tr.active { background-color: #338DC1; color: white; } -.cms-content-tools table tr.active td.first-column { -moz-border-radius: 6px 0 0 6px; -webkit-border-radius: 6px; border-radius: 6px 0 0 6px; } -.cms-content-tools table tr.active td.last-column { -moz-border-radius: 0 6px 6px 0; -webkit-border-radius: 0; border-radius: 0 6px 6px 0; } +.cms-content-tools table tr.active { background-color: #338dc1; color: white; } +.cms-content-tools table tr.active td.first-column { -webkit-border-radius: 6px 0 0 6px; -moz-border-radius: 6px 0 0 6px; -ms-border-radius: 6px 0 0 6px; -o-border-radius: 6px 0 0 6px; border-radius: 6px 0 0 6px; } +.cms-content-tools table tr.active td.last-column { -webkit-border-radius: 0 6px 6px 0; -moz-border-radius: 0 6px 6px 0; -ms-border-radius: 0 6px 6px 0; -o-border-radius: 0 6px 6px 0; border-radius: 0 6px 6px 0; } .cms-content-tools table td { padding: 4px; line-height: 16px; vertical-align: top; } .cms-content-tools td { border-bottom: 1px solid #ced7dc; padding: 7px 2px; font-size: 11px; } /** ------------------------------------------------------------------ * CMS notice, used for filter messages, but generic enough to use elsewhere * ----------------------------------------------------------------- */ -.cms-notice { display: block; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #d0d3d5 solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } +.cms-notice { display: block; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #d0d3d5 solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } /** CMS Batch actions */ -.cms-content-batchactions-button { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; padding: 4px 6px; vertical-align: middle; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(to bottom, #ffffff, #d9d9d9); border: 1px solid #aaa; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } +.cms-content-batchactions-button { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; padding: 4px 6px; vertical-align: middle; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -o-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(top, #ffffff, #d9d9d9); border: 1px solid #aaa; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .cms-content-batchactions { float: left; position: relative; display: block; } -.cms-content-batchactions .view-mode-batchactions-wrapper { height: 18px; float: left; padding: 4px 6px; border: 1px solid #aaa; margin-bottom: 8px; margin-right: -1px; background-color: #D9D9D9; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(to bottom, #ffffff, #d9d9d9); border-top-left-radius: 4px; border-bottom-left-radius: 4px; } +.cms-content-batchactions .view-mode-batchactions-wrapper { height: 18px; float: left; padding: 4px 6px; border: 1px solid #aaa; margin-bottom: 8px; margin-right: -1px; background-color: #D9D9D9; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -o-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(top, #ffffff, #d9d9d9); border-top-left-radius: 4px; border-bottom-left-radius: 4px; } .cms-content-batchactions .view-mode-batchactions-wrapper input { vertical-align: middle; } .cms-content-batchactions .view-mode-batchactions-wrapper .view-mode-batchactions-label { vertical-align: middle; display: none; } .cms-content-batchactions .checkbox { margin-top: 2px; vertical-align: middle; } -.cms-content-batchactions-dropdown { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; } +.cms-content-batchactions-dropdown { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; } .cms-content-tools .cms-content-batchactions-dropdown { width: 100%; } -.cms-content-batchactions-dropdown fieldset { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; width: 200px; } +.cms-content-batchactions-dropdown fieldset { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; width: 200px; } .cms-content-batchactions-dropdown fieldset .view-mode-batchactions-label { display: inline; } .cms-content-tools .cms-content-batchactions-dropdown fieldset { width: 82%; } .cms-content-batchactions-dropdown .dropdown { width: 100%; height: 32px; } -.cms-content-batchactions-dropdown .Actions { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; padding: 0; } +.cms-content-batchactions-dropdown .Actions { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; padding: 0; } .cms-content-tools .cms-content-batchactions-dropdown .Actions { width: 16%; } .cms-content-batchactions-dropdown .action { width: 100%; height: 32px; margin-bottom: 0; } @@ -638,7 +696,7 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .memberdatetimeoptionset .description { font-style: normal; } .memberdatetimeoptionset .toggle { font-size: 11px; } -.cms .cms-content { border-right: 1px solid #BBB; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: #ECEFF1; width: 800px; z-index: 40; } +.cms .cms-content { border-right: 1px solid #BBB; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: #eceff1; width: 800px; z-index: 40; } .cms .cms-content-fields { overflow-y: auto; overflow-x: auto; background: #e6eaed; width: 100%; } .cms .cms-content-fields #Root_Main .confirmedpassword { border-bottom: none; box-shadow: none; } .cms .cms-content-fields #Root_Main .customFormat { max-width: 80px; } @@ -654,21 +712,21 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; /** -------------------------------------------- Panels -------------------------------------------- */ .cms-panel { overflow: hidden; /** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. */ } -.cms-panel .cms-panel-toggle { -moz-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); -webkit-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); } -.cms-panel .cms-panel-toggle.south { border-top: 1px solid #9eafba; -moz-box-shadow: #bcc8cf 0 1px 0px inset; -webkit-box-shadow: #bcc8cf 0 1px 0px inset; box-shadow: #bcc8cf 0 1px 0px inset; position: absolute; bottom: 0; width: 100%; } +.cms-panel .cms-panel-toggle { -webkit-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); } +.cms-panel .cms-panel-toggle.south { border-top: 1px solid #9eafba; -webkit-box-shadow: #bcc8cf 0 1px 0px inset; -moz-box-shadow: #bcc8cf 0 1px 0px inset; box-shadow: #bcc8cf 0 1px 0px inset; position: absolute; bottom: 0; width: 100%; } .cms-panel .cms-panel-toggle a { display: block; text-align: right; padding: 4px 0; width: 100%; text-decoration: none; } .cms-panel .cms-panel-toggle a span { display: inline-block; margin: 0 5px; color: #555d60; font-size: 16px; } .cms-panel .cms-panel-toggle a.toggle-expand { width: 40px; display: none; } -.cms-panel.cms-content-tools .cms-panel-toggle.south { border-top: 1px solid #cfd6db; -moz-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; -webkit-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; } +.cms-panel.cms-content-tools .cms-panel-toggle.south { border-top: 1px solid #cfd6db; -webkit-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; -moz-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; } .cms-panel.collapsed { cursor: pointer; } .cms-panel.collapsed .cms-panel-header *, .cms-panel.collapsed .cms-panel-content, .cms-panel.collapsed .cms-panel-toggle a.toggle-collapse { display: none; } .cms-panel.collapsed .cms-panel-toggle a.toggle-expand { display: block; } .cms-panel .cms-panel-header { width: 100%; } .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed { width: 40px; display: none; } -.cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h2, .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -webkit-transform-origin: bottom right; transform-origin: bottom right; -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -webkit-transform: rotate(270deg); transform: rotate(270deg); } +.cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h2, .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -webkit-transform-origin: bottom right; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -o-transform-origin: bottom right; transform-origin: bottom right; -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); } .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed .cms-panel-header { width: 600px; position: relative; top: 24px; right: 577px; text-align: right; } .cms-panel .cms-panel-content-collapsed { width: 40px; display: none; } -.cms-panel .cms-panel-content-collapsed h2, .cms-panel .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -webkit-transform-origin: bottom right; transform-origin: bottom right; -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -webkit-transform: rotate(270deg); transform: rotate(270deg); } +.cms-panel .cms-panel-content-collapsed h2, .cms-panel .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -webkit-transform-origin: bottom right; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -o-transform-origin: bottom right; transform-origin: bottom right; -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); } .cms-panel .cms-panel-content-collapsed .cms-panel-header { width: 600px; position: relative; right: 577px; text-align: right; border-bottom: none; box-shadow: none; } .cms-panel .child-flyout-indicator { width: 0; height: 0; border-right: 3px dashed #1f1f1f; border-top: 3px solid transparent; border-left: 3px solid transparent; border-bottom: 3px dashed #1f1f1f; position: absolute; right: 1px; margin-top: -8px; display: none; /* To be shown by javascript, see LeftAndMain.Panel.js */ } .cms-panel .collapsed-flyout { display: block !important; left: 41px; margin-top: -40px; position: fixed; width: 191px; } @@ -688,12 +746,12 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .cms .ui-dialog .ss-ui-dialog.ui-dialog-content { padding-top: 0px; } -.ui-dialog { background: url("../images/textures/bg_cms_main_content.png") repeat left top #F0F3F4; background-clip: content-box; border: 1px solid #666 !important; -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; overflow: visible; padding: 0; -moz-box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); -webkit-box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); } -.ui-dialog .ui-dialog-titlebar.ui-widget-header { font-size: 14px; padding: 0; border: none; background-color: transparent; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; -moz-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; -webkit-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; } +.ui-dialog { background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; background-clip: content-box; border: 1px solid #666 !important; -webkit-border-radius: 8px; -moz-border-radius: 8px; -ms-border-radius: 8px; -o-border-radius: 8px; border-radius: 8px; overflow: visible; padding: 0; -webkit-box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.3); } +.ui-dialog .ui-dialog-titlebar.ui-widget-header { font-size: 14px; padding: 0; border: none; background-color: transparent; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; -webkit-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; -moz-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; } .ui-dialog .ui-dialog-titlebar.ui-widget-header .ui-dialog-title { position: absolute; } -.ui-dialog .ui-dialog-content { -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; overflow: auto; } +.ui-dialog .ui-dialog-content { -webkit-border-radius: 8px; -moz-border-radius: 8px; -ms-border-radius: 8px; -o-border-radius: 8px; border-radius: 8px; overflow: auto; } .ui-dialog .ui-dialog-content.loading { background-image: url(../images/spinner.gif); background-position: 50% 50%; background-repeat: no-repeat; } -.ui-dialog .cms-dialog-content { background: url("../images/textures/bg_cms_main_content.png") repeat left top #F0F3F4; padding-bottom: 8px; padding-top: 0px; } +.ui-dialog .cms-dialog-content { background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; padding-bottom: 8px; padding-top: 0px; } .ui-dialog .cms-dialog-content .Actions { overflow: auto; margin: 8px 0; padding-bottom: 8px; float: right; } .ui-dialog .cms-dialog-content .ui-tabs { position: static; } .ui-dialog .cms-dialog-content .ui-tabs .ui-tabs-nav { position: absolute; top: 0; right: 40px; } @@ -701,7 +759,7 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .ui-dialog .cms-dialog-content .clear { clear: both; } .ui-dialog.loading { background-image: url(../images/spinner.gif); background-position: 50% 50%; background-repeat: no-repeat; } -body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_main_content.png") repeat left top #F0F3F4; position: relative; } +body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; position: relative; } /** -------------------------------------------- "Insert X" forms -------------------------------------------- */ .htmleditorfield-dialog.ui-dialog-content { padding: 0; position: relative; } @@ -721,9 +779,9 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai .htmleditorfield-dialog .ss-insert-media, .htmleditorfield-dialog .Actions, .htmleditorfield-dialog .ss-insert-link { padding: 8px 16px; } .htmleditorfield-dialog .ss-insert-media .ui-tabs-panel, .htmleditorfield-dialog .Actions .ui-tabs-panel, .htmleditorfield-dialog .ss-insert-link .ui-tabs-panel { padding: 0; } .htmleditorfield-dialog .details .file-url { display: block; width: 300px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; } -.htmleditorfield-dialog .details .cms-file-info .field { border: none; -moz-box-shadow: 0 0 0 transparent; -webkit-box-shadow: 0 0 0 transparent; box-shadow: 0 0 0 transparent; } -.htmleditorfield-dialog .details .field { border-bottom: 1px solid rgba(201, 205, 206, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); } -.htmleditorfield-dialog .details .field.last { border-bottom: none; -moz-box-shadow: 0 0 0 transparent; -webkit-box-shadow: 0 0 0 transparent; box-shadow: 0 0 0 transparent; margin-bottom: 0; } +.htmleditorfield-dialog .details .cms-file-info .field { border: none; -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0); box-shadow: 0 0 0 rgba(0, 0, 0, 0); } +.htmleditorfield-dialog .details .field { border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); } +.htmleditorfield-dialog .details .field.last { border-bottom: none; -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0); box-shadow: 0 0 0 rgba(0, 0, 0, 0); margin-bottom: 0; } .htmleditorfield-dialog .CompositeField .text select { margin: 5px 0 0 0; } .htmleditorfield-linkform .step2 { margin-bottom: 16px; } @@ -737,7 +795,7 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield h4 { float: left; margin-top: 4px; margin-bottom: 0; } .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield .middleColumn { margin-top: 16px; margin-left: 184px; min-width: 0; clear: none; } .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield .field.treedropdown { border-bottom: 0; padding: 0; } -.htmleditorfield-mediaform .ss-assetuploadfield .ss-uploadfield-editandorganize .ss-uploadfield-files .ss-uploadfield-item-info { background-color: #9e9e9e; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllOWU5ZSIvPjxzdG9wIG9mZnNldD0iOCUiIHN0b3AtY29sb3I9IiM5ZDlkOWQiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzg3ODc4NyIvPjxzdG9wIG9mZnNldD0iNTQlIiBzdG9wLWNvbG9yPSIjODY4Njg2Ii8+PHN0b3Agb2Zmc2V0PSI5NiUiIHN0b3AtY29sb3I9IiM2YjZiNmIiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM2YzZjNmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #9e9e9e), color-stop(8%, #9d9d9d), color-stop(50%, #878787), color-stop(54%, #868686), color-stop(96%, #6b6b6b), color-stop(100%, #6c6c6c)); background-image: -moz-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: -webkit-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: linear-gradient(to bottom, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); } +.htmleditorfield-mediaform .ss-assetuploadfield .ss-uploadfield-editandorganize .ss-uploadfield-files .ss-uploadfield-item-info { background-color: #9e9e9e; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllOWU5ZSIvPjxzdG9wIG9mZnNldD0iOCUiIHN0b3AtY29sb3I9IiM5ZDlkOWQiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzg3ODc4NyIvPjxzdG9wIG9mZnNldD0iNTQlIiBzdG9wLWNvbG9yPSIjODY4Njg2Ii8+PHN0b3Agb2Zmc2V0PSI5NiUiIHN0b3AtY29sb3I9IiM2YjZiNmIiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM2YzZjNmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #9e9e9e), color-stop(8%, #9d9d9d), color-stop(50%, #878787), color-stop(54%, #868686), color-stop(96%, #6b6b6b), color-stop(100%, #6c6c6c)); background-image: -webkit-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: -moz-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: -o-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); } /** -------------------------------------------- Search forms (used in AssetAdmin, ModelAdmin, etc) -------------------------------------------- */ .cms-search-form { margin-bottom: 16px; } @@ -747,11 +805,11 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai /** -------------------------------------------- Step labels -------------------------------------------- */ .step-label > * { display: inline-block; vertical-align: top; } .step-label .flyout { height: 18px; font-size: 14px; font-weight: bold; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; background-color: #667980; padding: 4px 3px 4px 6px; text-align: center; text-shadow: none; color: #fff; } -.step-label .arrow { height: 26px; width: 10px; background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -862px no-repeat; margin-right: 4px; } +.step-label .arrow { height: 26px; width: 10px; background: url('../images/sprites-32x32-s7af51a6313.png') 0 -216px no-repeat; margin-right: 4px; } .step-label .title { height: 18px; padding: 4px; } /** -------------------------------------------- Item Edit Form -------------------------------------------- */ -.cms-file-info { overflow: auto; border-bottom: 1px solid rgba(201, 205, 206, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); margin-bottom: 8px; } +.cms-file-info { overflow: auto; border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); margin-bottom: 8px; } .cms-file-info .cms-file-info-preview { float: left; width: 176px; margin-right: 8px; } .cms-file-info .cms-file-info-preview img { max-width: 176px; max-height: 128px; } .cms-file-info .cms-file-info-data { float: left; width: 55%; } @@ -794,10 +852,10 @@ form.import-form label.left { width: 250px; } /** -------------------------------------------- Buttons for FileUpload -------------------------------------------- */ .ss-uploadfield-item-edit-all .ui-button-text { padding-right: 0; } -.toggle-details-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -830px no-repeat; } -.ss-uploadfield-item-edit-all .toggle-details-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -798px no-repeat; display: inline-block; width: 8px; height: 8px; padding-left: 5px; } -.toggle-details-icon.opened { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -846px no-repeat; } -.ss-uploadfield-item-edit-all .toggle-details-icon.opened { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -814px no-repeat; } +.toggle-details-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -406px no-repeat; } +.ss-uploadfield-item-edit-all .toggle-details-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -348px no-repeat; display: inline-block; width: 8px; height: 8px; padding-left: 5px; } +.toggle-details-icon.opened { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1120px no-repeat; } +.ss-uploadfield-item-edit-all .toggle-details-icon.opened { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -332px no-repeat; } /** -------------------------------------------- Hide preview toggle link by default. May be shown in IE7 stylesheet and forced to show with js if needed -------------------------------------------- */ .cms .Actions > .cms-preview-toggle-link, .cms .cms-navigator > .cms-preview-toggle-link { display: none; } @@ -839,7 +897,7 @@ form.import-form label.left { width: 250px; } .cms .jstree-themeroller .jstree-no-icon, .TreeDropdownField .treedropdownfield-panel .jstree-themeroller .jstree-no-icon { display: none; } .cms #jstree-marker, .TreeDropdownField .treedropdownfield-panel #jstree-marker { padding: 0; margin: 0; overflow: hidden; position: absolute; top: -30px; background-repeat: no-repeat; display: none; line-height: 10px; font-size: 12px; height: 12px; width: 8px; z-index: 10001; background-color: transparent; text-shadow: 1px 1px 1px white; color: black; } .cms #jstree-marker-line, .TreeDropdownField .treedropdownfield-panel #jstree-marker-line { padding: 0; margin: 0; overflow: hidden; position: absolute; top: -30px; background-repeat: no-repeat; display: none; line-height: 0%; font-size: 1px; height: 1px; width: 100px; z-index: 10000; background-color: #456c43; cursor: pointer; border: 1px solid #eeeeee; border-left: 0; -moz-box-shadow: 0px 0px 2px #666; -webkit-box-shadow: 0px 0px 2px #666; box-shadow: 0px 0px 2px #666; -moz-border-radius: 1px; border-radius: 1px; -webkit-border-radius: 1px; } -.cms #vakata-contextmenu, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu { display: block; visibility: hidden; left: 0; top: -200px; position: absolute; margin: 0; padding: 0; min-width: 180px; background: #FFF; border: 1px solid silver; z-index: 10000; *width: 180px; -moz-box-shadow: 0 0 10px #CCC; -webkit-box-shadow: 0 0 10px #CCC; box-shadow: 0 0 10px #CCC; } +.cms #vakata-contextmenu, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu { display: block; visibility: hidden; left: 0; top: -200px; position: absolute; margin: 0; padding: 0; min-width: 180px; background: #FFF; border: 1px solid silver; z-index: 10000; *width: 180px; -webkit-box-shadow: 0 0 10px #cccccc; -moz-box-shadow: 0 0 10px #cccccc; box-shadow: 0 0 10px #cccccc; } .cms #vakata-contextmenu::before, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu::before { content: ""; display: block; /* reduce the damage in FF3.0 */ position: absolute; top: -10px; left: 24px; width: 0; border-width: 0 6px 10px 6px; border-color: #FFF transparent; border-style: solid; z-index: 10000; } .cms #vakata-contextmenu::after, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu::after { content: ""; display: block; /* reduce the damage in FF3.0 */ position: absolute; top: -11px; left: 23px; width: 0; border-width: 0 7px 11px 7px; border-color: #CCC transparent; border-style: solid; } .cms #vakata-contextmenu ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu ul { min-width: 180px; *width: 180px; } @@ -847,13 +905,13 @@ form.import-form label.left { width: 250px; } .cms #vakata-contextmenu li, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li { line-height: 20px; min-height: 23px; position: relative; padding: 0px; } .cms #vakata-contextmenu li:last-child, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li:last-child { margin-bottom: 1px; } .cms #vakata-contextmenu li a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a { padding: 1px 10px; line-height: 23px; display: block; text-decoration: none; margin: 1px 1px 0 1px; border: 0; } -.cms #vakata-contextmenu li a:hover, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a:hover { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(to bottom, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } +.cms #vakata-contextmenu li a:hover, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a:hover { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } .cms #vakata-contextmenu li ins, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ins { float: left; width: 0; height: 0; text-decoration: none; margin-right: 2px; } .cms #vakata-contextmenu li .jstree-pageicon, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li .jstree-pageicon { margin-top: 3px; margin-right: 5px; } -.cms #vakata-contextmenu li.vakata-hover > a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li.vakata-hover > a { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(to bottom, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } +.cms #vakata-contextmenu li.vakata-hover > a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li.vakata-hover > a { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } .cms #vakata-contextmenu .right, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu .right { right: 100%; left: auto; } .cms #vakata-contextmenu .bottom, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu .bottom { bottom: -1px; top: auto; } -.cms #vakata-contextmenu li ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul { display: none; position: absolute; top: -2px; left: 100%; background: #FFF; border: 1px solid silver; -moz-box-shadow: 0 0 10px #CCC; -webkit-box-shadow: 0 0 10px #CCC; box-shadow: 0 0 10px #CCC; } +.cms #vakata-contextmenu li ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul { display: none; position: absolute; top: -2px; left: 100%; background: #FFF; border: 1px solid silver; -webkit-box-shadow: 0 0 10px #cccccc; -moz-box-shadow: 0 0 10px #cccccc; box-shadow: 0 0 10px #cccccc; } .cms #vakata-contextmenu li ul.col-2, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul.col-2 { width: 360px; } .cms #vakata-contextmenu li ul.col-2 li, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul.col-2 li { width: 50%; } .cms #vakata-contextmenu li ul.col-3, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul.col-3 { width: 540px; } @@ -875,21 +933,21 @@ form.import-form label.left { width: 250px; } .tree-holder.jstree li.Root > a .jstree-icon, .cms-tree.jstree li.Root > a .jstree-icon { background-position: -56px -36px; } .tree-holder.jstree li.status-deletedonlive > a .text, .tree-holder.jstree li.status-deletedonlive > a:link .text, .tree-holder.jstree li.status-archived > a .text, .tree-holder.jstree li.status-archived > a:link .text, .cms-tree.jstree li.status-deletedonlive > a .text, .cms-tree.jstree li.status-deletedonlive > a:link .text, .cms-tree.jstree li.status-archived > a .text, .cms-tree.jstree li.status-archived > a:link .text { text-decoration: line-through; } .tree-holder.jstree li.jstree-checked > a, .tree-holder.jstree li.jstree-checked > a:link, .cms-tree.jstree li.jstree-checked > a, .cms-tree.jstree li.jstree-checked > a:link { background-color: #efe999; } -.tree-holder.jstree li.disabled > a, .tree-holder.jstree li.disabled > a:link, .tree-holder.jstree li.edit-disabled > a, .tree-holder.jstree li.edit-disabled > a:link, .cms-tree.jstree li.disabled > a, .cms-tree.jstree li.disabled > a:link, .cms-tree.jstree li.edit-disabled > a, .cms-tree.jstree li.edit-disabled > a:link { color: #aaa; background-color: transparent; cursor: default; } +.tree-holder.jstree li.disabled > a, .tree-holder.jstree li.disabled > a:link, .tree-holder.jstree li.edit-disabled > a, .tree-holder.jstree li.edit-disabled > a:link, .cms-tree.jstree li.disabled > a, .cms-tree.jstree li.disabled > a:link, .cms-tree.jstree li.edit-disabled > a, .cms-tree.jstree li.edit-disabled > a:link { color: #aaaaaa; background-color: transparent; cursor: default; } .tree-holder.jstree li.disabled > a > .jstree-checkbox, .tree-holder.jstree li.disabled > a:link > .jstree-checkbox, .tree-holder.jstree li.edit-disabled > a > .jstree-checkbox, .tree-holder.jstree li.edit-disabled > a:link > .jstree-checkbox, .cms-tree.jstree li.disabled > a > .jstree-checkbox, .cms-tree.jstree li.disabled > a:link > .jstree-checkbox, .cms-tree.jstree li.edit-disabled > a > .jstree-checkbox, .cms-tree.jstree li.edit-disabled > a:link > .jstree-checkbox { background-position: -57px -54px; } -.tree-holder.jstree li.readonly, .cms-tree.jstree li.readonly { color: #aaa; padding-left: 18px; } +.tree-holder.jstree li.readonly, .cms-tree.jstree li.readonly { color: #aaaaaa; padding-left: 18px; } .tree-holder.jstree li.readonly a, .tree-holder.jstree li.readonly a:link, .cms-tree.jstree li.readonly a, .cms-tree.jstree li.readonly a:link { margin: 0; padding: 0; } .tree-holder.jstree li.readonly .jstree-icon, .cms-tree.jstree li.readonly .jstree-icon { display: none; } -.tree-holder.jstree a, .tree-holder.jstree a:link, .cms-tree.jstree a, .cms-tree.jstree a:link { color: #0073C1; padding: 3px 6px 3px 3px; border: none; display: inline-block; margin-right: 5px; } +.tree-holder.jstree a, .tree-holder.jstree a:link, .cms-tree.jstree a, .cms-tree.jstree a:link { color: #0073c1; padding: 3px 6px 3px 3px; border: none; display: inline-block; margin-right: 5px; } .tree-holder.jstree ins, .cms-tree.jstree ins { background-color: transparent; background-image: url(../images/sitetree_ss_default_icons.png); } -.tree-holder.jstree span.badge, .cms-tree.jstree span.badge { clear: both; text-transform: uppercase; text-shadow: none; display: inline-block; position: relative; padding: 3px 3px 1px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-top: -1px; -moz-border-radius: 2px / 2px; -webkit-border-radius: 2px 2px; border-radius: 2px / 2px; } -.tree-holder.jstree span.comment-count, .cms-tree.jstree span.comment-count { clear: both; position: relative; text-transform: uppercase; display: inline-block; overflow: visible; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-right: 6px; -moz-border-radius: 2px / 2px; -webkit-border-radius: 2px 2px; border-radius: 2px / 2px; color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } +.tree-holder.jstree span.badge, .cms-tree.jstree span.badge { clear: both; text-transform: uppercase; text-shadow: none; display: inline-block; position: relative; padding: 3px 3px 1px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-top: -1px; -webkit-border-radius: 2px 2px; -moz-border-radius: 2px / 2px; border-radius: 2px / 2px; } +.tree-holder.jstree span.comment-count, .cms-tree.jstree span.comment-count { clear: both; position: relative; text-transform: uppercase; display: inline-block; overflow: visible; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-right: 6px; -webkit-border-radius: 2px 2px; -moz-border-radius: 2px / 2px; border-radius: 2px / 2px; color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } .tree-holder.jstree span.comment-count:before, .cms-tree.jstree span.comment-count:before { content: ""; position: absolute; border-style: solid; display: block; width: 0; bottom: -4px; /* value = - border-top-width - border-bottom-width */ left: 3px; /* controls horizontal position */ border-width: 4px 4px 0; border-color: #C9B800 transparent; } .tree-holder.jstree span.comment-count:after, .cms-tree.jstree span.comment-count:after { content: ""; position: absolute; border-style: solid; /* reduce the damage in FF3.0 */ display: block; width: 0; bottom: -3px; /* value = - border-top-width - border-bottom-width */ left: 4px; /* value = (:before left) + (:before border-left) - (:after border-left) */ border-width: 3px 3px 0; border-color: #FFF0BC transparent; } .tree-holder.jstree .jstree-hovered, .cms-tree.jstree .jstree-hovered { text-shadow: none; text-decoration: none; } .tree-holder.jstree .jstree-closed > ins, .cms-tree.jstree .jstree-closed > ins { background-position: 2px -1px; } .tree-holder.jstree .jstree-open > ins, .cms-tree.jstree .jstree-open > ins { background-position: -18px -1px; } -.tree-holder.filtered-list li:not(.filtered-item) > a, .cms-tree.filtered-list li:not(.filtered-item) > a { color: #aaa; } +.tree-holder.filtered-list li:not(.filtered-item) > a, .cms-tree.filtered-list li:not(.filtered-item) > a { color: #aaaaaa; } .cms-tree.jstree .jstree-no-checkboxes li a { padding-left: 12px; } .cms-tree.jstree .jstree-no-checkboxes li .jstree-hovered, .cms-tree.jstree .jstree-no-checkboxes li .jstree-clicked, .cms-tree.jstree .jstree-no-checkboxes li a:focus { padding-left: 0; } @@ -900,7 +958,7 @@ form.import-form label.left { width: 250px; } /** DEPRECATED: .cms-content-tools will be removed in 4.0 Use .cms-content-filters instead. Ensure status is visible in sidebar */ .cms-content-tools .cms-tree.jstree li { min-width: 159px; } .cms-content-tools .cms-tree.jstree a { overflow: hidden; display: block; position: relative; } -.cms-content-tools .cms-tree.jstree span.badge { position: absolute; top: 0; right: 0; padding: 7px 9px 6px 5px; margin: 0; max-width: 40%; -moz-transition: max-width 0.75s linear; -o-transition: max-width 0.75s linear; -webkit-transition: max-width 0.75s linear; transition: max-width 0.75s linear; } +.cms-content-tools .cms-tree.jstree span.badge { position: absolute; top: 0; right: 0; padding: 7px 9px 6px 5px; margin: 0; max-width: 40%; -webkit-transition: max-width 0.75s linear; -moz-transition: max-width 0.75s linear; -o-transition: max-width 0.75s linear; transition: max-width 0.75s linear; } .cms-content-tools .cms-tree.jstree span.badge:hover { max-width: 150px; } a .jstree-pageicon { float: left; margin-right: 4px; position: relative; } @@ -912,41 +970,41 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } /* tree status icons and labels */ .cms-tree.jstree .status-modified > a .jstree-pageicon:before, .cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before, .cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before, .cms-tree.jstree .status-archived > a .jstree-pageicon:before, .cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before, .cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { content: ""; display: block; width: 5px; height: 5px; position: absolute; bottom: 0; right: 0; background: #fce2d0; border: 1px solid #ff9344; border-radius: 100px; box-shadow: 0px 0px 0px 1px #fff; } -.jstree .status-modified > .jstree-hovered, .jstree .status-modified > .jstree-clicked, .cms-tree.jstree span.badge.status-modified, .cms-tree.jstree .status-modified > a .jstree-pageicon:before { background-color: #FFF4ED; border-color: #EE6214; } +.jstree .status-modified > .jstree-hovered, .jstree .status-modified > .jstree-clicked, .cms-tree.jstree span.badge.status-modified, .cms-tree.jstree .status-modified > a .jstree-pageicon:before { background-color: #fff4ed; border-color: #ee6214; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-modified { box-shadow: 0px 0px 6px 2px #FFF4ED; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-modified { box-shadow: 0px 0px 6px 2px #fff4ed; } -.cms-tree.jstree span.badge.status-modified { color: #EE6214; } +.cms-tree.jstree span.badge.status-modified { color: #ee6214; } -.jstree .status-addedtodraft > .jstree-hovered, .jstree .status-addedtodraft > .jstree-clicked, .cms-tree.jstree span.badge.status-addedtodraft, .cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before { background-color: #FFF4ED; border-color: #EE6214; } +.jstree .status-addedtodraft > .jstree-hovered, .jstree .status-addedtodraft > .jstree-clicked, .cms-tree.jstree span.badge.status-addedtodraft, .cms-tree.jstree .status-addedtodraft > a .jstree-pageicon:before { background-color: #fff4ed; border-color: #ee6214; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-addedtodraft { box-shadow: 0px 0px 6px 2px #FFF4ED; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-addedtodraft { box-shadow: 0px 0px 6px 2px #fff4ed; } -.cms-tree.jstree span.badge.status-addedtodraft { color: #EE6214; } +.cms-tree.jstree span.badge.status-addedtodraft { color: #ee6214; } -.jstree .status-deletedonlive > .jstree-hovered, .jstree .status-deletedonlive > .jstree-clicked, .cms-tree.jstree span.badge.status-deletedonlive, .cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before { background-color: #F5F5F5; border-color: #5F7688; } +.jstree .status-deletedonlive > .jstree-hovered, .jstree .status-deletedonlive > .jstree-clicked, .cms-tree.jstree span.badge.status-deletedonlive, .cms-tree.jstree .status-deletedonlive > a .jstree-pageicon:before { background-color: whitesmoke; border-color: #5f7688; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-deletedonlive { box-shadow: 0px 0px 6px 2px #F5F5F5; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-deletedonlive { box-shadow: 0px 0px 6px 2px whitesmoke; } -.cms-tree.jstree span.badge.status-deletedonlive { color: #5F7688; } +.cms-tree.jstree span.badge.status-deletedonlive { color: #5f7688; } -.jstree .status-archived > .jstree-hovered, .jstree .status-archived > .jstree-clicked, .cms-tree.jstree span.badge.status-archived, .cms-tree.jstree .status-archived > a .jstree-pageicon:before { background-color: #F5F5F5; border-color: #5F7688; } +.jstree .status-archived > .jstree-hovered, .jstree .status-archived > .jstree-clicked, .cms-tree.jstree span.badge.status-archived, .cms-tree.jstree .status-archived > a .jstree-pageicon:before { background-color: whitesmoke; border-color: #5f7688; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-archived { box-shadow: 0px 0px 6px 2px #F5F5F5; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-archived { box-shadow: 0px 0px 6px 2px whitesmoke; } -.cms-tree.jstree span.badge.status-archived { color: #5F7688; } +.cms-tree.jstree span.badge.status-archived { color: #5f7688; } -.jstree .status-removedfromdraft > .jstree-hovered, .jstree .status-removedfromdraft > .jstree-clicked, .cms-tree.jstree span.badge.status-removedfromdraft, .cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before { background-color: #F5F5F5; border-color: #5F7688; } +.jstree .status-removedfromdraft > .jstree-hovered, .jstree .status-removedfromdraft > .jstree-clicked, .cms-tree.jstree span.badge.status-removedfromdraft, .cms-tree.jstree .status-removedfromdraft > a .jstree-pageicon:before { background-color: whitesmoke; border-color: #5f7688; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-removedfromdraft { box-shadow: 0px 0px 6px 2px #F5F5F5; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-removedfromdraft { box-shadow: 0px 0px 6px 2px whitesmoke; } -.cms-tree.jstree span.badge.status-removedfromdraft { color: #5F7688; } +.cms-tree.jstree span.badge.status-removedfromdraft { color: #5f7688; } -.jstree .status-workflow-approval > .jstree-hovered, .jstree .status-workflow-approval > .jstree-clicked, .cms-tree.jstree span.badge.status-workflow-approval, .cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { background-color: #E8FAFF; border-color: #0070B4; } +.jstree .status-workflow-approval > .jstree-hovered, .jstree .status-workflow-approval > .jstree-clicked, .cms-tree.jstree span.badge.status-workflow-approval, .cms-tree.jstree .status-workflow-approval > a .jstree-pageicon:before { background-color: #e8faff; border-color: #0070b4; } -#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-workflow-approval { box-shadow: 0px 0px 6px 2px #E8FAFF; } +#cms-content-tools-CMSMain .cms-tree.jstree span.badge.status-workflow-approval { box-shadow: 0px 0px 6px 2px #e8faff; } -.cms-tree.jstree span.badge.status-workflow-approval { color: #0070B4; } +.cms-tree.jstree span.badge.status-workflow-approval { color: #0070b4; } .cms-tree { visibility: hidden; } .cms-tree.multiple li > a > .jstree-icon { display: none; } @@ -957,9 +1015,9 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-tree a.jstree-loading .jstree-pageicon { background: url(../images/throbber.gif) top left no-repeat; } /** Styles for the left hand side menu and header for the admin panels. Take into consideration CSS selector performance. @package framework @subpackage admin */ -.cms-logo-header { position: relative !important; top: auto !important; height: auto !important; padding: 0 8px; line-height: 24px; background-color: #22385b; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMwNGU4MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE0MjEzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #304e80), color-stop(100%, #142136)); background-image: -moz-linear-gradient(#304e80, #142136); background-image: -webkit-linear-gradient(#304e80, #142136); background-image: linear-gradient(#304e80, #142136); } +.cms-logo-header { position: relative !important; top: auto !important; height: auto !important; padding: 0 8px; line-height: 24px; background-color: #22385b; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMwNGU4MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE0MjEzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #304e80), color-stop(100%, #142136)); background-image: -webkit-linear-gradient(#304e80, #142136); background-image: -moz-linear-gradient(#304e80, #142136); background-image: -o-linear-gradient(#304e80, #142136); background-image: linear-gradient(#304e80, #142136); } .cms-logo-header span { color: white; display: block; padding-left: 26px; } -.cms-logo-header span a { color: #3EBAE0; display: inline; } +.cms-logo-header span a { color: #3ebae0; display: inline; } .cms-logo { border-bottom: 1px solid #1a2a45; overflow: hidden; padding: 10px 0 9px; /* should come to 40px with border bottom and line-height */ position: relative; vertical-align: middle; font-size: 12px; min-height: 20px; } .collapsed .cms-logo { padding: 0; } @@ -968,10 +1026,10 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-logo span { font-weight: bold; font-size: 12px; line-height: 16px; padding: 2px 0; margin-left: 30px; } .cms-login-status { border-top: 1px solid #19435c; padding: 8px 0 9.6px; line-height: 16px; font-size: 11px; } -.cms-login-status .logout-link { display: inline-block; height: 16px; width: 16px; float: left; margin: 0 8px 0 5px; background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -772px no-repeat; text-indent: -9999em; opacity: 0.9; } +.cms-login-status .logout-link { display: inline-block; height: 16px; width: 16px; float: left; margin: 0 8px 0 5px; background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1094px no-repeat; text-indent: -9999em; opacity: 0.9; } .cms-login-status .logout-link:hover, .cms-login-status .logout-link:focus { opacity: 1; } -.cms-menu { z-index: 80; background: #b0bec7; width: 160px; -moz-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; -webkit-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; } +.cms-menu { z-index: 80; background: #b0bec7; width: 160px; -webkit-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; -moz-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; } .cms-menu a { text-decoration: none; } .cms-menu .cms-panel-content { width: 160px; overflow-x: hidden; overflow-y: auto; position: relative !important; top: auto !important; left: auto !important; } .cms-menu.collapsed { width: 40px !important; cursor: auto; z-index: 1000; } @@ -988,25 +1046,25 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-menu.collapsed .ss-ui-button.sticky-toggle { width: 50%; } .cms-menu .cms-panel-toggle a, .cms-menu .cms-panel-toggle a.toggle-expand { float: right; width: 20px; } .cms-menu .ss-ui-button.sticky-toggle { float: left; width: 24px; height: 24px; margin: 0; text-indent: -999em; background-color: transparent; background-image: url(../images/sticky-toggle-off.png); background-repeat: no-repeat; background-position: 3px; border: 0; } -.cms-menu .ss-ui-button.sticky-toggle:hover { -moz-box-shadow: 0 0 0; -webkit-box-shadow: 0 0 0; box-shadow: 0 0 0; } +.cms-menu .ss-ui-button.sticky-toggle:hover { -webkit-box-shadow: 0 0 0; -moz-box-shadow: 0 0 0; box-shadow: 0 0 0; } .cms-menu .ss-ui-button.sticky-toggle.active { background-image: url(../images/sticky-toggle-on.png); } .cms-menu .ss-ui-button.sticky-toggle .ui-button-text { padding: 0; } .cms-menu .ss-ui-button.sticky-toggle:hover + .sticky-status-indicator { display: block; padding: 5px 6px 0; } .cms-menu .sticky-status-indicator { display: none; position: absolute; top: -22px; left: 2px; font-size: 9px; color: #555d60; text-transform: uppercase; background-color: #b0bec7; } .cms-menu-list li { /* Style applied to the menu flyout only when the collapsed setting */ } -.cms-menu-list li a { display: block; line-height: 16px; min-height: 16px; font-size: 12px; text-shadow: #bfcad2 1px 1px 0; color: #1f1f1f; padding: 11px 5px 11px 8px; background-color: #b0bec7; cursor: pointer; position: relative; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #92a5b2)); background-image: -moz-linear-gradient(#b0bec7, #92a5b2); background-image: -webkit-linear-gradient(#b0bec7, #92a5b2); background-image: linear-gradient(#b0bec7, #92a5b2); border-top: 1px solid #c2cdd4; border-bottom: 1px solid #748d9d; } -.cms-menu-list li a:hover { text-decoration: none; background-color: #b6c3cb; border-bottom: 1px solid #8399a7; color: #2c2c2c; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JmY2FkMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bfcad2), color-stop(100%, #b0bec7)); background-image: -moz-linear-gradient(#bfcad2, #b0bec7); background-image: -webkit-linear-gradient(#bfcad2, #b0bec7); background-image: linear-gradient(#bfcad2, #b0bec7); } -.cms-menu-list li a:focus, .cms-menu-list li a:active { border-top: 1px solid #a1b2bc; text-decoration: none; background-color: #a1b2bc; color: #393939; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ExYjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #92a5b2), color-stop(100%, #a1b2bc)); background-image: -moz-linear-gradient(#92a5b2, #a1b2bc); background-image: -webkit-linear-gradient(#92a5b2, #a1b2bc); background-image: linear-gradient(#92a5b2, #a1b2bc); } +.cms-menu-list li a { display: block; line-height: 16px; min-height: 16px; font-size: 12px; text-shadow: #bfcad2 1px 1px 0; color: #1f1f1f; padding: 11px 5px 11px 8px; background-color: #b0bec7; cursor: pointer; position: relative; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #92a5b2)); background-image: -webkit-linear-gradient(#b0bec7, #92a5b2); background-image: -moz-linear-gradient(#b0bec7, #92a5b2); background-image: -o-linear-gradient(#b0bec7, #92a5b2); background-image: linear-gradient(#b0bec7, #92a5b2); border-top: 1px solid #c2cdd4; border-bottom: 1px solid #748d9d; } +.cms-menu-list li a:hover { text-decoration: none; background-color: #b6c3cb; border-bottom: 1px solid #8399a7; color: #2c2c2c; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JmY2FkMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bfcad2), color-stop(100%, #b0bec7)); background-image: -webkit-linear-gradient(#bfcad2, #b0bec7); background-image: -moz-linear-gradient(#bfcad2, #b0bec7); background-image: -o-linear-gradient(#bfcad2, #b0bec7); background-image: linear-gradient(#bfcad2, #b0bec7); } +.cms-menu-list li a:focus, .cms-menu-list li a:active { border-top: 1px solid #a1b2bc; text-decoration: none; background-color: #a1b2bc; color: #393939; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ExYjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #92a5b2), color-stop(100%, #a1b2bc)); background-image: -webkit-linear-gradient(#92a5b2, #a1b2bc); background-image: -moz-linear-gradient(#92a5b2, #a1b2bc); background-image: -o-linear-gradient(#92a5b2, #a1b2bc); background-image: linear-gradient(#92a5b2, #a1b2bc); } .cms-menu-list li a .icon { display: block; position: absolute; top: 50%; margin-left: 4px; margin-top: -8px; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); opacity: 0.7; } .cms-menu-list li a .text { display: block; margin-left: 30px; } .cms-menu-list li a .toggle-children { display: inline-block; float: right; width: 20px; height: 100%; cursor: pointer; } -.cms-menu-list li a .toggle-children .toggle-children-icon { display: inline-block; width: 8px; height: 8px; background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -798px no-repeat; vertical-align: middle; } -.cms-menu-list li a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -814px no-repeat; } +.cms-menu-list li a .toggle-children .toggle-children-icon { display: inline-block; width: 8px; height: 8px; background: url('../images/sprites-32x32-s7af51a6313.png') 0 -348px no-repeat; vertical-align: middle; } +.cms-menu-list li a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -332px no-repeat; } .cms-menu-list li ul li a { border-top: 1px solid #b6c3cb; } -.cms-menu-list li.current a { color: white; text-shadow: #1e5270 0 -1px 0; border-top: 1px solid #55a4d2; border-bottom: 1px solid #236184; background-color: #338DC1; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI4NzA5OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #338dc1), color-stop(100%, #287099)); background-image: -moz-linear-gradient(#338dc1, #287099); background-image: -webkit-linear-gradient(#338dc1, #287099); background-image: linear-gradient(#338dc1, #287099); } -.cms-menu-list li.current a .toggle-children .toggle-children-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -830px no-repeat; } -.cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -846px no-repeat; } +.cms-menu-list li.current a { color: white; text-shadow: #1e5270 0 -1px 0; border-top: 1px solid #55a4d2; border-bottom: 1px solid #236184; background-color: #338dc1; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI4NzA5OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #338dc1), color-stop(100%, #287099)); background-image: -webkit-linear-gradient(#338dc1, #287099); background-image: -moz-linear-gradient(#338dc1, #287099); background-image: -o-linear-gradient(#338dc1, #287099); background-image: linear-gradient(#338dc1, #287099); } +.cms-menu-list li.current a .toggle-children .toggle-children-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -406px no-repeat; } +.cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1120px no-repeat; } .cms-menu-list li.current ul { border-top: none; display: block; } .cms-menu-list li.current li { background-color: #287099; } .cms-menu-list li.current li a { font-size: 11px; padding: 0 10px 0 40px; height: 32px; line-height: 32px; color: #e2f0f7; background: none; border-top: 1px solid #2f81b1; border-bottom: 1px solid #1e5270; } @@ -1029,42 +1087,42 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-content-controls.cms-preview-controls { z-index: 1; background: #eceff1; height: 30px; /* should be set in js Layout to match page actions */ padding: 12px 12px; } .cms-content-controls .icon-view, .cms-content-controls .preview-selector.dropdown a.chzn-single { white-space: nowrap; } .cms-content-controls .icon-view:before, .cms-content-controls .preview-selector.dropdown a.chzn-single:before { display: inline-block; float: left; content: ''; width: 23px; height: 17px; overflow: hidden; } -.cms-content-controls .icon-auto:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -898px no-repeat; } -.cms-content-controls .icon-desktop:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -925px no-repeat; } -.cms-content-controls .icon-tablet:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -1087px no-repeat; } -.cms-content-controls .icon-mobile:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -1006px no-repeat; } -.cms-content-controls .icon-split:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -1060px no-repeat; } -.cms-content-controls .icon-edit:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -979px no-repeat; } -.cms-content-controls .icon-preview:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -1033px no-repeat; } -.cms-content-controls .icon-window:before { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -952px no-repeat; } +.cms-content-controls .icon-auto:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -108px no-repeat; } +.cms-content-controls .icon-desktop:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -81px no-repeat; } +.cms-content-controls .icon-tablet:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -162px no-repeat; } +.cms-content-controls .icon-mobile:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -189px no-repeat; } +.cms-content-controls .icon-split:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -135px no-repeat; } +.cms-content-controls .icon-edit:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -27px no-repeat; } +.cms-content-controls .icon-preview:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 0 no-repeat; } +.cms-content-controls .icon-window:before { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -54px no-repeat; } .cms-content-controls .cms-navigator { width: 100%; } .cms-content-controls .preview-selector.dropdown a.chzn-single { text-indent: -200px; } -.cms-content-controls .preview-selector { float: right; border-bottom: none; position: relative; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; margin: 3px 0 0 4px; padding: 0; height: 28px; } -.cms-content-controls .preview-selector a.chzn-single { width: 20px; padding: 6px 5px 5px; height: 18px; margin: -3px 0 0; filter: none; /* remove ie background */ background: none; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } -.cms-content-controls .preview-selector a.chzn-single:hover, .cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { background-color: #dae0e5; -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); } -.cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { -moz-border-radius: 0 0 3px 3px; -webkit-border-radius: 0; border-radius: 0 0 3px 3px; } +.cms-content-controls .preview-selector { float: right; border-bottom: none; position: relative; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; margin: 3px 0 0 4px; padding: 0; height: 28px; } +.cms-content-controls .preview-selector a.chzn-single { width: 20px; padding: 6px 5px 5px; height: 18px; margin: -3px 0 0; filter: none; /* remove ie background */ background: none; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } +.cms-content-controls .preview-selector a.chzn-single:hover, .cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { background-color: #dae0e5; -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); } +.cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { -webkit-border-radius: 0 0 3px 3px; -moz-border-radius: 0 0 3px 3px; -ms-border-radius: 0 0 3px 3px; -o-border-radius: 0 0 3px 3px; border-radius: 0 0 3px 3px; } .cms-content-controls .preview-selector a.chzn-single div { display: none; } .cms-content-controls .preview-selector.open .chzn-drop { position: absolute; left: auto !important; right: 0; } -.cms-content-controls .preview-selector .chzn-drop { -moz-border-radius: 3px 3px 0 3px; -webkit-border-radius: 3px; border-radius: 3px 3px 0 3px; -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); } +.cms-content-controls .preview-selector .chzn-drop { -webkit-border-radius: 3px 3px 0 3px; -moz-border-radius: 3px 3px 0 3px; -ms-border-radius: 3px 3px 0 3px; -o-border-radius: 3px 3px 0 3px; border-radius: 3px 3px 0 3px; -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); } .cms-content-controls .preview-selector .chzn-drop .chzn-results { width: 135px; } .cms-content-controls .preview-selector .chzn-drop .chzn-results .result-selected { background: #eceff1; } .cms-content-controls .preview-selector .chzn-container { width: auto !important; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop { padding: 0; border-bottom: 1px solid #aaa; margin-top: -5px; width: auto !important; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop .chzn-search { display: none; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul { padding: 0; margin: 0; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li { font-size: 12px; line-height: 16px; padding: 7px 16px 7px 6px; color: #0073C1; border-bottom: 1px solid #DDD; background-color: #FFF; /* Description styling */ } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li { font-size: 12px; line-height: 16px; padding: 7px 16px 7px 6px; color: #0073c1; border-bottom: 1px solid #DDD; background-color: #FFF; /* Description styling */ } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:before { margin-right: 2px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.description { padding-top: 5px; padding-bottom: 5px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.description:before { margin-top: 5px; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.highlighted, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:hover, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:focus { color: #0073C1; filter: none; background: #f2f4f6; text-decoration: none; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.first { -moz-border-radius: 3px 3px 0 0; -webkit-border-radius: 3px; border-radius: 3px 3px 0 0; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.last { border-bottom: none; -moz-border-radius: 0 0 0 3px; -webkit-border-radius: 0; border-radius: 0 0 0 3px; } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.highlighted, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:hover, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:focus { color: #0073c1; filter: none; background: #f2f4f6; text-decoration: none; } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.first { -webkit-border-radius: 3px 3px 0 0; -moz-border-radius: 3px 3px 0 0; -ms-border-radius: 3px 3px 0 0; -o-border-radius: 3px 3px 0 0; border-radius: 3px 3px 0 0; } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.last { border-bottom: none; -webkit-border-radius: 0 0 0 3px; -moz-border-radius: 0 0 0 3px; -ms-border-radius: 0 0 0 3px; -o-border-radius: 0 0 0 3px; border-radius: 0 0 0 3px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.restricted { /* disable option (eg.split mode for smaller screen sizes) */ color: #CCC; background-color: #EEE; pointer-events: none; /*text-decoration: line-through;*/ } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.restricted:before { opacity: 0.2; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li span { display: block; color: #6c6c6c; font-size: 0.85em; line-height: 1.1em; padding-left: 23px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li .icon-view { margin-right: 4px; } -.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected { background: #e6eaed; color: #444; } -.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected.highlighted, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:hover, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:focus { background: #e6eaed; color: #444; } +.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected { background: #e6eaed; color: #444444; } +.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected.highlighted, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:hover, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:focus { background: #e6eaed; color: #444444; } .cms-content-controls .cms-preview-states { float: right; } .cms-content-controls .cms-preview-states select { max-width: 150px; } .cms-content-controls .cms-preview-states.dropdown { max-width: 150px; } @@ -1072,28 +1130,28 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-content-controls .cms-preview-states.dropdown .chzn-container { max-width: 150px; } /* Styling for the preview screen sizes */ -.cms-preview { background-color: #ECEFF1; height: 100%; width: 100%; } +.cms-preview { background-color: #eceff1; height: 100%; width: 100%; } .cms-preview .cms-preview-overlay { width: 100%; height: 100%; } .cms-preview .preview-note { color: #CDD7DC; display: block; font-size: 22px; font-weight: bold; height: 82px; margin-top: -50px; margin-left: -150px; /* half of width */ position: absolute; text-align: center; text-shadow: 0 1px 0 #fff; top: 50%; left: 50%; width: 300px; } -.cms-preview .preview-note span { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 0 no-repeat; display: block; height: 41px; margin: 0 auto 20px; width: 50px; } +.cms-preview .preview-note span { background: url('../images/sprites-64x64-s88957ee578.png') 0 0 no-repeat; display: block; height: 41px; margin: 0 auto 20px; width: 50px; } .cms-preview .preview-scroll { height: 100%; overflow: auto; position: relative; width: 100%; } .cms-preview .preview-scroll .preview-device-outer { height: 100%; width: 100%; } -.cms-preview .preview-scroll .preview-device-outer .preview-device-inner { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; width: 100%; height: 100%; background-color: #FFF; } +.cms-preview .preview-scroll .preview-device-outer .preview-device-inner { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; height: 100%; background-color: #FFF; } .cms-preview .preview-scroll .preview-device-outer .preview-device-inner iframe { height: 100%; overflow-y: auto; width: 100%; } -.cms-preview.mobile .preview-scroll, .cms-preview.mobileLandscape .preview-scroll, .cms-preview.tablet .preview-scroll, .cms-preview.tabletLandscape .preview-scroll, .cms-preview.desktop .preview-scroll { background-color: #ECEFF1; /* cover website preview icon */ } -.cms-preview.mobile .preview-scroll .preview-device-outer, .cms-preview.mobileLandscape .preview-scroll .preview-device-outer, .cms-preview.tablet .preview-scroll .preview-device-outer, .cms-preview.tabletLandscape .preview-scroll .preview-device-outer, .cms-preview.desktop .preview-scroll .preview-device-outer { -moz-border-radius: 7px; -webkit-border-radius: 7px; border-radius: 7px; background: #d5dde2; border: 1px solid transparent; border-left: 1px solid #cfd9de; padding: 0 16px 16px; } +.cms-preview.mobile .preview-scroll, .cms-preview.mobileLandscape .preview-scroll, .cms-preview.tablet .preview-scroll, .cms-preview.tabletLandscape .preview-scroll, .cms-preview.desktop .preview-scroll { background-color: #eceff1; /* cover website preview icon */ } +.cms-preview.mobile .preview-scroll .preview-device-outer, .cms-preview.mobileLandscape .preview-scroll .preview-device-outer, .cms-preview.tablet .preview-scroll .preview-device-outer, .cms-preview.tabletLandscape .preview-scroll .preview-device-outer, .cms-preview.desktop .preview-scroll .preview-device-outer { -webkit-border-radius: 7px; -moz-border-radius: 7px; -ms-border-radius: 7px; -o-border-radius: 7px; border-radius: 7px; background: #d5dde2; border: 1px solid transparent; border-left: 1px solid #cfd9de; padding: 0 16px 16px; } .cms-preview.mobile .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.mobileLandscape .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.tablet .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.tabletLandscape .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.desktop .preview-scroll .preview-device-outer .preview-device-inner { border-top: 2px solid #e1e7ea; border-right: 1px solid transparent; border-bottom: 1px solid #e1e7ea; border-left: 1px solid #c3cfd6; } -.cms-preview.mobile .preview-scroll .preview-device-outer { -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -webkit-transform: rotate(0deg); transform: rotate(0deg); -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; transition: all 0.3s ease-in 1s; margin: 20px auto 20px; overflow: hidden; padding-top: 16px; } -.cms-preview.mobile .preview-scroll .preview-device-outer .preview-device-inner { -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -webkit-transform: rotate(0deg); transform: rotate(0deg); -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.mobile .preview-scroll .preview-device-outer.rotate { -moz-transform: rotate(-90deg); -ms-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg); -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; transition: all 0.3s ease-in 1s; height: 583px; margin: 0px auto 0px; width: 320px; } -.cms-preview.mobile .preview-scroll .preview-device-outer.rotate .preview-device-inner { -moz-transform-origin: 160px 160px; -ms-transform-origin: 160px 160px; -webkit-transform-origin: 160px 160px; transform-origin: 160px 160px; -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -webkit-transform: rotate(90deg); transform: rotate(90deg); -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; height: 320px; width: 583px; } -.cms-preview.mobileLandscape .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 12% auto; padding-top: 16px; } -.cms-preview.mobileLandscape .preview-scroll .preview-device-outer .preview-device-inner { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.tablet .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } -.cms-preview.tablet .preview-scroll .preview-device-outer .preview-device-inner { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.tabletLandscape .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } -.cms-preview.tabletLandscape .preview-scroll .preview-device-outer .preview-device-inner { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.desktop .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } +.cms-preview.mobile .preview-scroll .preview-device-outer { -webkit-transform: rotate(0deg); -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -o-transform: rotate(0deg); transform: rotate(0deg); -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; transition: all 0.3s ease-in 1s; margin: 20px auto 20px; overflow: hidden; padding-top: 16px; } +.cms-preview.mobile .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transform: rotate(0deg); -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -o-transform: rotate(0deg); transform: rotate(0deg); -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.mobile .preview-scroll .preview-device-outer.rotate { -webkit-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -ms-transform: rotate(-90deg); -o-transform: rotate(-90deg); transform: rotate(-90deg); -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; transition: all 0.3s ease-in 1s; height: 583px; margin: 0px auto 0px; width: 320px; } +.cms-preview.mobile .preview-scroll .preview-device-outer.rotate .preview-device-inner { -webkit-transform-origin: 160px 160px; -moz-transform-origin: 160px 160px; -ms-transform-origin: 160px 160px; -o-transform-origin: 160px 160px; transform-origin: 160px 160px; -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -o-transform: rotate(90deg); transform: rotate(90deg); -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; height: 320px; width: 583px; } +.cms-preview.mobileLandscape .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 12% auto; padding-top: 16px; } +.cms-preview.mobileLandscape .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.tablet .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } +.cms-preview.tablet .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.tabletLandscape .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } +.cms-preview.tabletLandscape .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.desktop .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } /******************************************** * Defines the styles for .ss-ui-action-tabset: @@ -1117,16 +1175,16 @@ visible. Added and removed with js in TabSet.js */ /*************************** of ss-ui-action-tabset ****************************************************************/ } .cms .ss-ui-action-tabset.multi { /* Style the tab panels */ } -.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; overflow: hidden; *zoom: 1; border: 1px solid #b3b3b3; float: left; overflow: visible; padding: 0; } +.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav { -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; overflow: hidden; *zoom: 1; border: 1px solid #b3b3b3; float: left; overflow: visible; padding: 0; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav:active { outline: none; box-shadow: none; -webkit-box-shadow: none; } -.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y4ZjhmOCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f8f8f8), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: -webkit-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: linear-gradient(to bottom, #f8f8f8, #d9d9d9); -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: #eaeaea; border: none; border-right: 1px solid #eee; border-left: 1px solid #b3b3b3; margin: 0; overflow: visible; min-width: 110px; } +.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y4ZjhmOCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f8f8f8), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: -moz-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: -o-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: linear-gradient(top, #f8f8f8, #d9d9d9); -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: #eaeaea; border: none; border-right: 1px solid #eee; border-left: 1px solid #b3b3b3; margin: 0; overflow: visible; min-width: 110px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li:active { outline: none; box-shadow: none; -webkit-box-shadow: none; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active { -moz-border-radius-bottomleft: 0px; -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; background: #f8f8f8; border-bottom: none !important; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active a { -moz-border-radius-bottomleft: 0px; -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active a:active, .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active a span:active { outline: none; box-shadow: none; -webkit-box-shadow: none; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.first { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-left: none; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.last { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-right: none; } -.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link { color: #444; display: inline-block; font-weight: bold; line-height: 16px; padding: 5px 10px; } +.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link { color: #444444; display: inline-block; font-weight: bold; line-height: 16px; padding: 5px 10px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link .ui-no-icon { display: inline-block; float: left; height: 16px; padding: 0 2px; width: 16px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link .title { display: inline-block; line-height: 18px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link.view-mode-batchactions-wrapper .title { margin-left: 22px; } @@ -1135,10 +1193,10 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel h3 { font-size: 13px; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel h4 { font-size: 12px; margin: 5px 0; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .ui-widget-content { background: none; } -.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label { float: none; width: auto; font-size: 12px; padding: 0 8px 4px 0; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label.extra-details { overflow: hidden; margin-top: 10px; display: block; color: #9d9d9d; font-style: italic; font-weight: normal; font-size: 1em; float: left; text-shadow: none; } -.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -moz-border-radius: 50px; -webkit-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } +.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -webkit-border-radius: 50px; -moz-border-radius: 50px; -ms-border-radius: 50px; -o-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field .middleColumn { margin: 0; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field input.text, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field select, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field textarea { padding: 5px; font-size: 11px; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field.checkbox { padding: 0 8px 0; } @@ -1148,7 +1206,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-content-fields { overflow: visible; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .chzn-container-single { width: 100% !important; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .chzn-container-single .chzn-single { padding: 0 0 0 5px; float: none; } -.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-edit-form { width: 100%; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .CompositeField { margin: 0; padding: 0; float: none; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .parent-mode { padding-top: 0; } @@ -1169,7 +1227,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset .batch-check { margin: 6px 0px 5px 9px; position: absolute; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar { min-width: 176px; /* for when the scrollbar is present & find dropdown open */ } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li { width: auto; } -.cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li a.tab-nav-link { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; transition-duration: 0.5s; overflow: hidden; padding-right: 0; width: 30px; } +.cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li a.tab-nav-link { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; transition-duration: 0.5s; overflow: hidden; padding-right: 0; width: 30px; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li a.tab-nav-link.active { -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; transition-duration: 0.5s; width: 110px; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open ul.ui-tabs-nav, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open ul.ui-tabs-nav li.first, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open ul.ui-tabs-nav li.last, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open-last ul.ui-tabs-nav, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open-last ul.ui-tabs-nav li.first, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open-last ul.ui-tabs-nav li.last { -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ui-tabs .ui-tabs-panel.ss-ui-action-tab { padding: 10px 6px; width: 162px; } @@ -1179,23 +1237,23 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.action-menus.ss-tabset { margin-top: 2px; /* Style the panel for actions-menu */ /* Re-align last tab */ } .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav { margin: 0; float: left; /* needed for ie but doesnt effect other browsers */ } .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li { background: none; border: none; border-bottom: none !important; display: inline; padding: 0; /* Make arrow point in up when nav open */ } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; outline: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a { text-shadow: #fff 0 1px 1px; color: #0073C1; font-size: 13px; font-weight: normal; line-height: 24px; padding: 0 25px 0 10px; /* Arrow */ } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; outline: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover { text-shadow: #fff 0 10px 10px; color: #005b98; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -26px no-repeat; border-bottom: 0; content: ""; display: inline-block; height: 16px; margin-left: 6px; width: 16px; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 0 no-repeat; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -78px no-repeat; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background: url('../images/sprites-32x32-s47450c5f5b.png') 0 -52px no-repeat; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel { overflow: hidden; *zoom: 1; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; /* Restyle for smaller area*/ clear: both; display: block; background-color: #ECEFF1; border: 1px solid #ccc; border-bottom: 1px solid #ECEFF1; margin: 0; margin-top: 2px; max-width: 250px; padding: 8px 0 2px; position: absolute; z-index: 1; min-width: 190px; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; outline: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a { text-shadow: white 0 1px 1px; color: #0073c1; font-size: 13px; font-weight: normal; line-height: 24px; padding: 0 25px 0 10px; /* Arrow */ } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; outline: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover { text-shadow: white 0 10px 10px; color: #005b98; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1188px no-repeat; border-bottom: 0; content: ""; display: inline-block; height: 16px; margin-left: 6px; width: 16px; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1162px no-repeat; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1214px no-repeat; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background: url('../images/sprites-32x32-s7af51a6313.png') 0 -1136px no-repeat; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel { overflow: hidden; *zoom: 1; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; /* Restyle for smaller area*/ clear: both; display: block; background-color: #eceff1; border: 1px solid #ccc; border-bottom: 1px solid #eceff1; margin: 0; margin-top: 2px; max-width: 250px; padding: 8px 0 2px; position: absolute; z-index: 1; min-width: 190px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h3, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h4, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h5 { font-weight: bold; line-height: 16px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h3 { font-size: 13px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h4 { font-size: 12px; margin: 5px 0; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .ui-widget-content { background: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label { float: none; width: auto; font-size: 12px; padding: 0 8px 4px 0; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label.extra-details { overflow: hidden; margin-top: 10px; display: block; color: #9d9d9d; font-style: italic; font-weight: normal; font-size: 1em; float: left; text-shadow: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -moz-border-radius: 50px; -webkit-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -webkit-border-radius: 50px; -moz-border-radius: 50px; -ms-border-radius: 50px; -o-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field .middleColumn { margin: 0; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field input.text, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field select, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field textarea { padding: 5px; font-size: 11px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field.checkbox { padding: 0 8px 0; } @@ -1205,7 +1263,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-content-fields { overflow: visible; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .chzn-container-single { width: 100% !important; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .chzn-container-single .chzn-single { padding: 0 0 0 5px; float: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-edit-form { width: 100%; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .CompositeField { margin: 0; padding: 0; float: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .parent-mode { padding-top: 0; } @@ -1218,7 +1276,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-sitetree-information { border-bottom: 1px solid #e6e7e8; margin-bottom: 8px; padding: 0 20px 0 0; margin-right: 10px; margin-left: 10px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-sitetree-information p.meta-info { color: #999; font-size: 11px; line-height: 16px; margin-bottom: 8px; white-space: nowrap; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button { width: 100%; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; background-color: #e0e5e8; outline: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; background-color: #e0e5e8; outline: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .last .ui-tabs-panel.ss-ui-action-tab { left: auto; right: -1px; } .cms .cms-content-actions .Actions { overflow: visible; } @@ -1246,7 +1304,7 @@ green tick icon as a background this is created using compass generated classes .cms-security h1 { margin: 45px 40px 5px 25px; font-size: 1.9em; line-height: 1.2; font-weight: bold; } .cms-security .Content { margin: 0 50px 0 25px; } .cms-security .Form { margin: 0 25px; } -.cms-security .Form .field { border: 0 none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; margin: 0; padding: 0; } +.cms-security .Form .field { border: 0 none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; margin: 0; padding: 0; } .cms-security .Form .field label.left { float: none; width: auto; } .cms-security .Form .field .middleColumn { margin: 0; } .cms-security .Form #Password { width: 300px; float: left; } @@ -1269,51 +1327,51 @@ green tick icon as a background this is created using compass generated classes /* Default CMS logo */ .cms-logo a { background-image: url("../images/logo_small@2x.png"); background-size: 22px 22px; } /* Logout button */ - .cms-login-status .logout-link { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -184px; background-size: 30px auto; } - .cms-content-controls .icon-auto:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -274px; background-size: 30px auto; } - .cms-content-controls .icon-desktop:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -301px; background-size: 30px auto; } - .cms-content-controls .icon-tablet:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -436px; background-size: 30px auto; } - .cms-content-controls .icon-mobile:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -355px; background-size: 30px auto; } - .cms-content-controls .icon-split:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -409px; background-size: 30px auto; } - .cms-content-controls .icon-edit:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -328px; background-size: 30px auto; } - .cms-content-controls .icon-preview:before { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -382px; background-size: 30px auto; } - .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -26px; background-size: 30px auto; } - .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 0; background-size: 30px auto; } - .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -78px; background-size: 30px auto; } - .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -52px; background-size: 30px auto; } + .cms-login-status .logout-link { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -161px; background-size: 30px auto; } + .cms-content-controls .icon-auto:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -134px; background-size: 30px auto; } + .cms-content-controls .icon-desktop:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -241px; background-size: 30px auto; } + .cms-content-controls .icon-tablet:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -268px; background-size: 30px auto; } + .cms-content-controls .icon-mobile:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -214px; background-size: 30px auto; } + .cms-content-controls .icon-split:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -187px; background-size: 30px auto; } + .cms-content-controls .icon-edit:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -107px; background-size: 30px auto; } + .cms-content-controls .icon-preview:before { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -80px; background-size: 30px auto; } + .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -327px; background-size: 30px auto; } + .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -353px; background-size: 30px auto; } + .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -411px; background-size: 30px auto; } + .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -437px; background-size: 30px auto; } /* CMS menu */ - .cms-menu-list li a .toggle-children .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -210px; background-size: 30px auto; } - .cms-menu-list li a .toggle-children.opened .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -226px; background-size: 30px auto; } - .cms-menu-list li.current a .toggle-children .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -242px; background-size: 30px auto; } - .cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -258px; background-size: 30px auto; } + .cms-menu-list li a .toggle-children .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -395px; background-size: 30px auto; } + .cms-menu-list li a .toggle-children.opened .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -379px; background-size: 30px auto; } + .cms-menu-list li.current a .toggle-children .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -295px; background-size: 30px auto; } + .cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -311px; background-size: 30px auto; } /* Sitetree */ .tree-holder.jstree-apple ins, .cms-tree.jstree-apple ins { background-image: url(../images/sitetree_ss_default_icons@2x.png); background-size: 108px 72px; } /* UI widget "close" button */ - .ui-widget-header a.ui-state-hover .ui-icon-closethick { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -104px; background-size: 30px auto; } - .ui-widget-header .ui-icon-closethick { background-image: url('../images/sprites-32x32-2x-s6ccfbe50f9.png'); background-position: 0 -144px; background-size: 30px auto; } + .ui-widget-header a.ui-state-hover .ui-icon-closethick { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 0; background-size: 30px auto; } + .ui-widget-header .ui-icon-closethick { background-image: url('../images/sprites-32x32-2x-s72b74f4cc4.png'); background-position: 0 -40px; background-size: 30px auto; } /* Tab icons */ - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -150px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -250px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -50px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -100px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 -200px; background-size: 40px auto; } - .ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background-image: url('../images/sprites-64x64-2x-se3e3f47b94.png'); background-position: 0 0; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -250px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -100px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 0; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -200px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -150px; background-size: 40px auto; } + .ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background-image: url('../images/sprites-64x64-2x-s0fe1d92f9d.png'); background-position: 0 -50px; background-size: 40px auto; } /* Menu icon classes */ - .icon.icon-24 { background-image: url('../images/menu-icons/24x24-2x-sccfd928e17.png'); background-size: 24px auto; } - .icon.icon-24.icon-assetadmin { background-position: 0 -216px; } - .icon.icon-24.icon-cmsmain { background-position: 0 -192px; } + .icon.icon-24 { background-image: url('../images/menu-icons/24x24-2x-s7169efa003.png'); background-size: 24px auto; } + .icon.icon-24.icon-assetadmin { background-position: 0 -144px; } + .icon.icon-24.icon-cmsmain { background-position: 0 -120px; } .icon.icon-24.icon-cmspagescontroller { background-position: 0 -168px; } - .icon.icon-24.icon-cmssettingscontroller { background-position: 0 -96px; } + .icon.icon-24.icon-cmssettingscontroller { background-position: 0 0; } .icon.icon-24.icon-securityadmin { background-position: 0 -24px; } - .icon.icon-24.icon-reportadmin { background-position: 0 -240px; } - .icon.icon-24.icon-commentadmin { background-position: 0 0; } - .icon.icon-24.icon-help { background-position: 0 -144px; } - .icon.icon-16 { background-image: url('../images/menu-icons/16x16-2x-sbe70081ef8.png'); background-size: 16px auto; } - .icon.icon-16.icon-assetadmin { background-position: 0 -144px; } - .icon.icon-16.icon-cmsmain { background-position: 0 -128px; } - .icon.icon-16.icon-cmspagescontroller { background-position: 0 -112px; } - .icon.icon-16.icon-cmssettingscontroller { background-position: 0 -64px; } + .icon.icon-24.icon-reportadmin { background-position: 0 -96px; } + .icon.icon-24.icon-commentadmin { background-position: 0 -240px; } + .icon.icon-24.icon-help { background-position: 0 -72px; } + .icon.icon-16 { background-image: url('../images/menu-icons/16x16-2x-s9b8c49312e.png'); background-size: 16px auto; } + .icon.icon-16.icon-assetadmin { background-position: 0 -80px; } + .icon.icon-16.icon-cmsmain { background-position: 0 -112px; } + .icon.icon-16.icon-cmspagescontroller { background-position: 0 -96px; } + .icon.icon-16.icon-cmssettingscontroller { background-position: 0 0; } .icon.icon-16.icon-securityadmin { background-position: 0 -16px; } - .icon.icon-16.icon-reportadmin { background-position: 0 -160px; } - .icon.icon-16.icon-commentadmin { background-position: 0 0; } - .icon.icon-16.icon-help { background-position: 0 -96px; } } + .icon.icon-16.icon-reportadmin { background-position: 0 -48px; } + .icon.icon-16.icon-commentadmin { background-position: 0 -160px; } + .icon.icon-16.icon-help { background-position: 0 -64px; } } diff --git a/admin/font/fontello.eot b/admin/font/fontello.eot index ff77b6d364ba93632c4d820cd826eb2945549c1e..e030f99ebd3a214d3e219fc16bb3fd37dd0fa5eb 100644 GIT binary patch delta 2339 zcmZuyeQZ-z6u;-**Z11Beci`!4v% zzWylw0isbdvVij|fyIC^n5c{2{9%m7gbag5BgD@re~iQ^e`x$j)_LyhIu^rg@44sq zJLi79d(OGV(W$=j;m$rbdcdHMkeJ?@W}A zK^~Qb_t+auARR=U2{LGIghUG3!3QfqhDM0NdI(i0TKgU77(^;UYRRiKie7?%cFf}g zzjoB)d(Y)OvmC#q8*pxk$fE~6v=yBL>J3jF^4kjAovw#X^@d4rg;hbgSakWZ$ne(@ zxnS?oOQeF-lQpE943a#l*dXuE?0l%Jy+!v{T8Y@)SQV71;-f~gEd}uyWuhd5s%UN> za4HXRJ))Z=a+=%p(jzgz_YMVuq7)QY01j^rpm!p!OD5;S8E$hCBxPE1OVRaw&Y*rq z4R~BGPaqm_mfNvcqaKIL<#2L>E1oD4`I2H<7!d?E|0)WBQb`c#PE^5FWB_hcf}L~H zk`rozV1-NOa=5CwipK>6YMtQ<6?foplsf|}gO1t)Mb6X!Y90CDN^XQ}xS$|fdig9M z3|qv1L13%|aTouBRS*yt*F;6I@B~}5-() zMIs(awrOoiE{!(LExI+7c@e`9*Mp*>(Z9PL+Pxc-N<&lZVyvk_$@a)fPmdyRN+p$O z6uD?rNp8GXb95IjZXO<<8Xkt;E~6n@nOeI=DevhiSGxBqHEZJCUGX(Fm8mt|=!sKq zS(~biHW&+Jcq*Hn8s=%kH~tSh%j_f{Bb~VO)M^LgJ69DEqpl|^;>osvfjQy=F%*pG zW-4G2xG@bdyd98iHQZVih`|=nIW+3P6q>>+dpirOI(vIN;cCcdV^XasQRZ|MR@KKL z8HTI%aZ6Z~m|%aRaF;V5mT$@OdO0jl!X9T>PC4QJH;aQe_JS-_iCzn^c>Ut&XRVfy zNCmJI*2?lN)8EMlI&lW`t){V*Ye*HT!l zZ*2^FtLy@nUp*eF6bkB*L_FzkHM9!Ekwx6rYUDM3=2$>Qhk#+?MkwNTDB{SX9b=+Z zEyjpXh*hb9&#%3OkwU5Ym#Or!Uz@*a8mQatn{T_LEw6DS4qoQ^LRLdY&1!zU1jP~F zxktED;mR@#4Wq@caZ#9E<^yJVpeG^d2#0n?svh=m;5<1VX8?O6DH_&@r1G9 zCiE7({6l!Zr=ZOTZVV9~0A^A|1_^Nr*b5F%jn{T9nod6d852G^bNW-E&U4)Zg>Tu@ znZYM1J)X%t-Q~2|oYy=);qvJ-p9tuc+^t`)>44ud$GOAc@jQ0LdVGpa<5#W>)5-d_ zY-a>FqE;=|lmw9uh)C<`n7U3mq^k4JeEo6t>FNXEq2sD@SY3;Zt;ut`8f%+>1+h&} zY&x;aweC-1XLG#dzj$Z%mtsFXgQ@!zrfwtR$q$8^U32CjZY@3LAf{pfaj@C&v(C;g z!zF%tafm@q!WMXqDs&V5jz!sCHfhdkCr4)li;X>M$8AwyfW-?UNMHpUl!09w8|d4g z9umg)4-8ncd&b5Mmfn}Kq=yF5BW1blV`I%@`?7ob1#S{JmWl%mF*mR`y(c^4w+fE` E0OKObN&o-= delta 750 zcmZ`%O=uHQ5dLQ0b`!gyHqB}(CeSuPibWJHd$HC;O0D9dwjx+4vZVQ`X6@1hiCV}- zMa09F9P}c=9|X@mco76|ib8rw?Sl3(bzZ)^4BZ(gYd>(^E6iO$ zcd}N&VZE363VVMxe=Ae1{{8?coTr&w+FIy(_fr7kJLkDMLX)lrrRi>4$N>VJ8HCZKQm50y~Mhr)B5@!)i^qd(pj~$Lj`}+bKv?C)l zIHVc-!-L~AdMMlxlc&Ty#TWBxPRN?hSaj%0t?|v!b%TZ&ryJ$l9=Xrh$dGhKLrRb4 zWcWWIH!>0-V%Tm4pTAKGobmN zXR^uMFQ@4(ere}cWPS6Gm~GE=w?fE_*vIDW$g2D| - + + + + + + + + + \ No newline at end of file diff --git a/admin/font/fontello.ttf b/admin/font/fontello.ttf index dcf2e67adce7aa71c7a21f6f73322b514d484a9f..cbd496bed058e64544b34bfd362e7f7cf224878d 100644 GIT binary patch delta 2343 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 NLQNaXWZ63V{{xck6_x-1 delta 707 zcmZ1?_eNBt+~3WOfsp|SxZW`EfoS2Hi6R;jwii53CFdpnQ_6PJS{--5wyH1B{IrR^}#F0Bz(r0^}=z@qF%6d5O8HK(Qx4JIfgun9iOt znky|^kY8K^baD((ktz_IJqvWaQ&5x&)Xdca%DM(02Ye|3%dWOx18CSE`CnqE&{HX7U>;#&t&@94yJd9IN zPE0K}H`K7s&8*hVELGK%(U{dRP_Qgi&`{Y}*i_XlP0W(hR3%}Jb zZd}OM@n=fP7ZH(fnQxO*Zfskxcqlv6#r^KGZB}e-W^4)xd}*(e9;6AR2c%s{-;h?2 zE>QBIcvHQh@r9s?Qw1I+CMR6Jnidk0BrGT#z9rctP}n`mxXCkh1IKQoh&vK0O=r^F zl8j@2l>4{Lj&2F$^kDn5nrZXxh9~C1RXYp`e2*$4B)^_NMJ}ZZ&a@Q_{S_>a>q=?cm`JqJ-zBOL8teTCk}l0FHmf7 zSzBRxb0en;7ei_xum0ph9x=^l32X~ExDwbHTJ2c_nO`t4FpB~)kOl)_%!AV)GlR$G y3p|q;Re*uoz@W$WreS7d-eU?DXpl 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 VC3^VV37!A|002ovPDHLkV1hdm+uQ&E diff --git a/admin/images/btn-icon-se43cec5357.png b/admin/images/btn-icon-se43cec5357.png new file mode 100644 index 0000000000000000000000000000000000000000..12727a91db6cb07dde57c0fe3b3b83716bdab1a0 GIT binary patch literal 22916 zcmV*NKw`g%P)79TA3M!}+5j0o;3n(B~kn#wKpwg5cdR0nj0zn{z z1QJq6?{$0opEEm~>~3Z^!RPru@B4k9qnDk`-20nz+qtLQA_TK*;>3wwJRUCwZ+$R0 zvybaAl>O;*JOKA(512?D#qHo3hYlSQ z6W>{N`t+IY$BrFy#WZJG$z;q?mX7_;JemMH8@*BS-qQY15|9pg{wt&42VEsIa75#I8_WTnx#* zjxdq>Tp0u2US7~3l0ahiQuwOhC)4iSx$_9qW*}&3BbY{`iA_kDFgYpzI8@u$gCjUW zWo0GEHy3LfA`7MSoKUo0y2OY zf`YGL;!+w)YYtW~5C|bg&=yi;Y0x8oIP-$1;lsT?7a4$d=X-%ppwFhrP6RQ~7Vr23 zR&SooqRh;!jLuG-qHosS#&*vKg<1(h1+S4BwTlYWwmK$(eYFjAa_$H@Ik_2>)*S5K zufP6w=;M!TuW)|2-Ty@aut`oa{?? z@7^tL)&uJ5>Mritv&&PZ(h7c>wrkvx+yjtYa1kyS>l=7)zkbjM!uw%!MNe2)9 zmZVfFFLL!weojsf&&I~)!j>%?co#38E0{O${o!l+Obs`VcaGB88_(T z2*zV-0ehn{7(Eo@OM7frX|=U~7QXh{i~ks2(s#F_?DrsZ*zF z_XuXXRBL+b{vg>wFvkrrd6AR^+T@F-QM2bS1OhAOG-*$;J|_K%rnn0 zeUmOKBjO&IZ9Zn-A1UlDm&<$Nt4roRpufMre;dq_h=7I-8wQwNP#_CBa^whHxNrfG zT7ADnaHP%#KOBPb`!)l^EVi|?vvb2jhUcDp4mx-440MlW1`ZAm(6eVxz{E_qDl034 zYuBz(O?qOwh-PJm52?&-h?2H#+fr{}I4w~@S*0d`*<=338ilJ@uM(rQp>$ke^_YJZ z)gX>G3?-Nqri@ZjQlPrJnxT*=qkAkf;$=!o#|8EfvlWj`K%9}0!6c#zAb|S%dcc8$ z;kwv#sF^Te$cZa4T_zXU`GSIizR}UqUJ(%yqDPM&F^L8Z8U*9Vk7p8Jx^#)5mM$!K z6?VHk%zE>Vj$gchWi$W-R;qtMR8$m?0IATQefC)#ndIQ;=*awyO-GCI3b9Lcuv|H9^=VEbl(x3{-zKtO;96Dl(^Gpn&C3-j{wE@AWd5kYgPmbto<0D~J+ zq9`gV`UM;A9ju6s_~kYRu7N!u4{P!ccC-7)f@m=CME+NezZ!EeEz6s9*wQ6f8D}Vf z z7N7Z>Hw{3+<(F$k=Ini?8D!Bjq@0ffG) zP{kg+W+rLeR3L)1|>bTv3*Jn4L|Oe$|}QYBf-Xkp|sFy~s`n5~U98MOu)^QESm) z^T0u{DzE~~^&k7cNlF*>NLvn$n)g>0(S zJPr0k8$J)b9e5y6h`_@|43gRg(4rdXjw5#|3V$}p5FKo>IijqlRI9nOi7bduWriPz zYN-x~Xw*9;a@6e9SWa4~L2>F)jR5YIs=$d~55r^KFuP!-0!Ud!%A9R^*dqBzfgRK; zNg(EdosAtls#QS-xPd>f0cxZwlqWQnz*IaX7FxBE4^;{s$TTQfV*x6VliFhg73fsJ z$Kc?Aq$8ihFN3X!&z((Vzczl3LWo1=8R2LHp*kP%a8`jQPk|@!-#LB_np;%U9W*x?9WFAwv{~I-s;Ig@HLhGHje!^f*#zwdFc**GjK}-J?d0=;RjYAgGmN zZ#aB5ujb~j*SF6f(;Q4zS$X(&e*R%rPBXp`TOi{3WXEMYIlbp%>-C&8BQ>Y$+}1C( zr8iG-W|J=v)M|-c=u9~fuzXKfdgo&8i8W63>9=xpRauX8Ipaj#YuEQEN=3~v|GXla9=zUL5&p>3~C$TYaXpAHj z2BKcD2uFNhlxvUUqm34YJ)#N|grfx1300gZl)wvdhzmloAsnBI zkw`$6sp{%FF)A0~qzRMWL;{UoZLEXp%IanUi}AQAMtL>}DX^=ptwDK=LN%in=H%$@ zW@M3i`0ybk8psrK0hX^T$!1t?Mdp+RVJ*IbW#W(83{q7?a)uUbPeJk;iB70c@bTA{ zWLuq1gH#7~%gxPs0n@HA2NR=e6VbPCU+?PbDxg8Sq@+xNQVywrc^Dk9BBFcu?(I(k zjE9G(t-HHd2!aK1l^OCtEuRFq`uaMgL=9rGGY_*yYTzP#*8#=O?}*BZigFB8b~51T zetIy>mVmMDH3b5bVc|azBQoCejo)jv8Xi|AG*U(dOJ5SnRq^iU@d5C_M>LO@@(QQ~tN&z$g=xQPt2hkaDVP=;~T_}l=f zGNw$8+U=R6M~?;>2|RKvKVmr{^f7#Y^2m`RzD6<<$!7GPY#UX^l#wKO!-}$+is7`S zmz?%9!_}ru8-Ko#KLNkr6X|Tj(((lFuWHrWgHN73DQZ!9Ww>K-z-R}1hs3U3yGBGu z$Dm~3#0dY`!Q;}?AN09->t+JRSzVY{c+@JGZ-DP;FAuL}lb)XxgY8I6J)*o^-Y9}b zM@QR7Mn-z<+rMua#)Xo?lB1kp*!TR!4&ubI-qJ{iUFGK^2`sDkBr%_uXNy@*#;<6r4| zHO?qzllZ1#<7zFH8NFy=!{5Gy<_wOv$2$(Qw3uvZWIi->Plkc&V3qELvcHUc2$uO7 z{N}kF1+{rm0ntuDo}GH34*aLrVKs@kx9>Dc}W2kQMlFbT%(K;dy>3~I3lACMQJR6;r}R@d=T*# z<3PAQ=nsfI(+yI3pKEmfwfns{FkUGt6`|V96=MX(SLtdhCFRa<7cGJ0s3Q!|zult= zsQsnhOp7zLDimaxG~E154S$xF7YFctg@Rrgqv3X(5k=Q}1K-d-Kv^QIr!?GPA2$4@TWY_d;(BqSV{cD; zVK5Kc-{}pyU^C^c7FE()sL9LJ8{kvvU$DdyKl@bru_i$T^%ceQgfaF`Hc|Eh8-f0{ zvPKQchf<9?U0ScrL7)RFtKEs1U<5|GrS(^@RJK!$Qh8U0Hwg45FVt)6bY<`u9_Wri zk&bv?M{-Dz=*0y_%|4fyDn`DEVYiNxm6`A}C6|U`V2&;EGiMZN1|r*$V4z{HJ*FkO z?ukYD% zj9BceKOkUTYr)9F^LnRForaJT2GvCY$+t8xlbnVW_QX-^0LCk64OlH|D49q_*N~79 z9|I7^dZrFE#hQkl)9X%*Ncs>}yqV=x<(dM3uj#ZACOY5Dp2JB+eGOt1pWZc}DvCK;6E z2=vfecXGlS^A-w4;*gNAPMD<{6n=Bqc0{uo$n5YJQfTl{S6c!jm1U@(pTAFiJvDBg zC@3hTABv!Ys;bKKtiL>!?NudKM|8}8LU?%O+|ba7wlbNLr&P+x6d{U;u~m9$dmQEJTV5P=&r|Vm{|&Bu!=35!+4vg9rEPQK9HiP>^$8DwX`ewj%}0 zvus(`qho(HmcXb9+(l-fdi3Z%&5XE>e?MS>bVdMLqrja_tiD}Ff1iC?nXH+-OBp7@bfkCUdj`l`@0A=^N9|-YYE3qRcinSW$i0-@B7(r}g;`2y5P zi4u7{O|u|SvaFZ`F~&(0hXg7$lZF#aMIMi`vN&CBg?+~0{#MJ(5y4bC1^I8d^-awG zm9mnOUOqyRy**#mVyn+r$*a_s^i6zmFjrBL;3M?*wC6K^JBwF?RwFA>$+IX8C)kH| zP_)!ZyZV}>Vp(rT=NKmofVCR6?3T14U8dEp{V7o+9~9HyzAw$0-j#q#713Q zrbX3U1Ia}?6uSTzebdso*{E+~5>C4KJdNJ_D`Oeo~*9i`U6G)g5eyHHP=KT%fLoU&zkA3~b+K9seu zeBRtcVO|0J@IZSep&Tg-4-zx?hK5TNK7N=6y?S+l?Pa?Itx|>s%qPl7tnfq1ath^* z6n&Dh2-52Au`CFcUxk*(`^obbU#Cma%&45z989I+g$L-Vkr8EqVumWZvToc1pFW<< zeWkh*dXMixKBs{52Yc4B1P@t{s}#0{J}g(-;q(IwpA4K z`MMM?$pFre?4<0%EAKd8wHcyfg6}I>$4E-(?BFQt)MMFpfr04LVo zA!BEG87^W!^nvF7O$=wSDVX>-S^s4S`!Slt*0O(-^=-Dszezo%H~UL738PpQvg&E< zX9AYG-k7a-Sl4bEo4tLlHF;4>@4-45$aWl$V5BdR4%!ZX_Z!bxZ3&FVw;2d9&Zr65 zv0cg)0iVU&P}VTeA{f9jR$Ev2v~ zLjt{tAgkCWQ(#F$v1PO9j*&4D&knynkeyp_n$?l+u!*0vq@fJQ#B*qPBT18`9{D|g z5Z+UP|IC(Oi)JqZqlsiRq0(8;g&LV7y^CfCUrlR$b${X4DJ$MQJ=3D;6?YM^jGd{P zYy{S#{ft;onNCj<$r*Rpn!C-m@JhA~@>vkAHTxNby{yTU`r9?oPrj{U6Z4FM)p8^G z%y=OE`QNsmnZ5MK{7m5Sp(oPShApWlIxSp9vJP@NmN~&t@EDDHc_I&Z5k5Y??mj*~ zcBFHbmX^kqmzDLwu|5IgtXAuE*6n8mgjKN2+siu!6)rJNWXR8NG^*J92L#xo66;Y@ zTeA$~0vDh`a`Y#PoE#iuDk>^CZ5kwpFs2|LKL&M|L`;*yB?SRfMwm5;R4Q&ZtFU>Y z;>UOqe9&>*&#*pvVI+5*H6YV>?o1jkFoUqiSXWRQq9qWtOqG;XS`y*u>Df4OK7?6k z!3fkrR%?^4ix)34mOM&q4%8|?I$5zWi`e0H_G3qnYDF@}1I=we!_v5-F9V)^>)O4p ziqddfT(D&ebh-qr1Wz7Vx1XV$geo6oQ5uW$HK=9d?=n^g5L*JmN=?TPTA!~$Et*<3 zD)x!k?jrEkovk&dj1Z&>sma23*1MDWd<`s*K3W~bV#D-fivhJzNWN2zC>I zmjfR>Fcj8np;D@Y%nHr8hh^$<7;rV z1>k_y;pZZR_5n8VXRb1&pjv$%(-Gj$O<*iVT>=C!34v5vUL%l_`Q@>{dSDw7AG(Fx z0WU`Z`IV}lFntXICK)I@6zeU3iLo}I)bLCwdU(AA>MG=95e1iUH*gMhV}L2NYhw#C zwGJw3)dYA!NZAt$c_E{sL?#pwkP`p?_N^@t=^o2`aeu~M`0c@7J(!M+F92ZyVyJFt zaMfsZuMlM~#~@XXMrBl2s{}d5rhB!rsRbycYN)G}GeBA!A*gL_fJ}3)E+VL`Qoc-J z{iD1Dre#v=1wyHaCTxLF-DJLZR5*cuoj>!u!buLLA~{2yNK7!w&P+kLZxt397OnfMfKm^(vFCUgW10=;XGM%xN$_R+En_HX1 zL?*W1-m8hil+p)qvowu)cctV315{6dYCW3JP3)NSs9X{1?jT@60k+-!Sr3eVADg(p z5sZM=u~{Ra2Idz(Dp3RB2*W-658f-uT-YH%M0y%Sp`q%P+U8l4;d=rgAQ=Hs8A(+T z?jLec_;%0nzr1?j+u2uhl@47(>`Z_Zn2@rjWw}O9eK`X}StIJ0(XT=V4no_q*Pk8! zqwvMf12WEK-Tvn1+h>=$I;g?dUC2~7QAl7j&n^Rn8AS|`Ru4o}&Fnd1)vT@~GKdAy zvffP+mBMvj>ZJvKbs`Ayvjq*0$AD5oxsKOJ5k1pU;Z`D$Oa+rV^j*7l)SPYWU~VI) zEkVF!3Kv7-odHUdU_sK)|R$dIvOVG}i!wfX%gto?k*t2;1# zoe2xV2Q+qWo)FtR?W;@s23*QX9rWZ$b$j#n73}JLy=!drpL?e)q19`D8GxEGM_MgU zToge`o+Xd0@4Bl=p(PE~j$H!UmQIN6RmjS?CG>GFF_hC!Wf-yN_Z(+Ij?saoF~H*0 zA&Li6#$bMOCo+Gp*}p#)ODz%ewjFhzizAFcg)M=!XD3_ym8&nZ3{TI*K?@hoxVm_8 zpjMy$cZ*==AVyb&N~IdyGcRw3A~6vO6B%-W%1n9vX4**+E}mHsLfd@%RTg~QGr>jPo&duh%33V(rMcZ5ik z4o2(6gda{bT2E&IXu_0L!!#Ndv)jPIt+9tC65;-bJYM=k+AzQv%!=&P2&7O*p`;`W zZeKreF(L%kYqk8lEh-gUKoUs}itUAP`H$a{k&qPvA@BEAX(;AEH8rImkyOK}qq{EK zh+w%;24RDsK^6_LIwx-Y`=;^_h&kx=_Cho!Kus^>j}AliiB|78FSlxn3kd6_y!Z}1U!BO~^IhFM zUXp(I^{cmSZFMWI+~u9VbW8VCimb4*9!7N=@Jhd<`_|t(e|G<$j|<_%`M*d%*Lj#t zMKPb6qBHu{gRR`ITT)utZ%al#{CPJE?$t{f?Zb;TFsayI<9n6Sq#2zF7%|u%kGDEI z!!WEQ*E{<+-N(1q=4gD;rZ}H3Sg@e;+O=y9voDvl)=Ws(2n>xbq_^IBs{{EAX3m`1 zdF$4#sbIE_vn8;v7cN}bjv6WH?6g@2t=6Ks90>^t9S$5g@HNIc(OR$%zQt?KoH=c2 zz8(RQb)NK31fm(3A3P0Z$0#csH*WlH>eQ)WL?I18Nl8hh7QM^9ZxO6LtD#VBkap5uVaSl-v1iVl{Dw6*kj}Y30VQ`-k!N8T%BqZHkKAl* zMJ6zk#aB<8_DV!{_7fmIwx*^5`t=(eeevSig(MM707%8*bfH~T)Us#3{@T$aJ|0q6 ztmyG*BjZf`));Kvj2W+ogAx{ZO7S|kD+?}Qw5gMiH#edV|mzVSA7MT2z$ncp6^=dUSG1I z@mg-p=J@Yiw7Y=00dus$J!y3PuGMIo&Ai#ae7PwY#}cl9&7XX-QHt#5=FOXsFmNCw zeEjhogGO*( zzWB~(pM3_Ysj1huY}t~F&;Q^A!z;3F+qT_l!C4_@)!W;fS;eMMD4Dt1^h@H^$~G%u z{DZ08@k6xFS935LB*+pQ(gqUne<8L6V8j0slfZpdUpT4K^% zq^hrPlb@g8Fn;`ara5D|*;H3oH;#u|*0t;D?*8Q;fBeDJ3Vv8Z>40N;dM%dK0fP_N zrE}*I0lj-STgleh(xpL(nrKP0}YAbz{hd{b{^X5G}YSgH2QJ&~y7C9XM z4sX+@%`4lsZA&_I=+JvV{`g~-T0alXL`oE5_tCxf+G}0Mj2W{BMWqm;luJ9No`Mq4 zxQP=dhU4#qojZ4Ck(gxyW^ZrrjzHgG_X(ku-OQw1R@yPv$7w1oJ(EZz9Z)v=3@Lnr zR(_a(EnBv1Bqr`bOp+21AZyb&QG3?OxKaxh?pF#VP!M~X+Qz#}3eXtM}YFnrP3I6Jf!jHskFo5VS& z&k_)Qh!$ux+N3p__FT2;WbQ5_4ng~!(UMDS5)2SWr8skeRhqx>^73MwF$PfbqZnr9 z7+qD(z_1K%BFUkK2ef&bKMpK3Lz)Vl*1FQ)R0OOeOFtKl&%f0S3=4WU7WnhTrYR9| zS#qlxX5vtxQzNE#RA%%y@;y~rTH4`eU`v-Sy|81)j^jw-NNQuoK#lofCx>geQ(>-h1!8&5@CjqYyBT zl{xZ|(yLfTr@#F2%e&>}M~~jbMxb!`@3IGX0z?))e#IcWW3iL4p+1t_)U3Cn_UjzCU#65Q_^rI z0V5_zd<+|=e!z8fvU3 z{XY(7X}EuCFdDj)97~}878pv7Cv0tPN3_=Q-soymC{A!?b1J@Y{TqbTv_{x#^;8t= zZruMwZL*^}O@TUP#*X{5?(ip114iq9XMlc|V2(j1#xRW)PIk5yY%rN4plPbpi|kCL zZ`cn^WG5N@)EY2SQ4H>$0j#u5TE#2uv-;Ln5P{KLsj2Lj`>>`#!$sMC9mD0PDYM6H zmMD>7R}MLAqPYCDwMm8&GIeK_tkG#FYgl@HY%klUh`QO(GUAn zBcxO9*|X<+8dG0->7}{&?g_pdLlY`dy1Z&NnW?#qyPZ{dFfxtJP;?_Uzej zM@L6T&^wAVYu2pCU}=^YYmzyHRJncp@kgK1zFqCw#YAYedg+kvN$w@30^=;DxE8aC z0&qVZ)w`e;C%JRy&g1y_`0(r3uV;Mz`6|W|wPeZSfhc81r=+Ajra1WM1x!PV*hMbE zrP~ibZ2ppjJ{s96d#hG`m4u@`nFi^8)vjGT7Gar&fByN(Z^+X3#v8Lf-~_`FT|mc2 z(8j;CNfQ~%Q3h!gjp&}9(L0JmaVd=@$??`Jue`$SnXzEO+cSIj?jQ2mXJ3t8wrmLl zxNOk#6?DbudS^_ znKuXMowKtuZFRf>RmogywK-$MhHVRJhc-7icQ||YWM0>80`ON=u6yPMk<)+-LOM$H&ic=gvd(KltFS zT@=@952&fBIeGp16<+`T@%b2ei%2AT-ObIDQ6i`Zf5mp_3$^Zekh z{_PZH3Vs_;TknkAnm*=kNqt9GD0+D~2;G$m72M0Ie2jlz|M}1ZgZ4lcnA=E&@4c*w z_!xiZ08b~O0^{`K1XIc7kpe#06K8mwQ(lAA%+qN!FOd{P0}3rhwzIcCk)2ciL8PB! z0PXpRY3jIHkU}AmsdaTKwT`*hN~ItaiFRVW?nEGJHp!B@x}5@{&_SZsIg5aa=fDjn zm)|U}S2$~U0$VRn2W4S?#RyqL!wHcs<6wD20joVpX1OO3oi zxi@9+sXh^tM>`iuZGqpdyVkE4&nbWVUZ@q=KxVxbLfu7hck5p2VstE1k?P`?9Hxj} zQ-SXtovnx(BfGy%7UR-3%uy5;Vx#c$)ltLM+K52R*Fg!ggP1ul#@}1ZC@UH2(g!;^ znWMHW!vTY>M(kEw<`u05M}HAdS;qtKj*lL#Z4w|04L6mULs^9+k4tbNHc+FJRV(1h zH69q$yR5VCa!FN2zR%`XDwcyPxis9?D6)-UUDrLPM#^lr#TN)@jhzQ8&eN9{TjF)+ zU-h14O>*=T@^vvG{$fXePg@&L7n}0^e-y`0Mn0!Mo&rE@&x4)Ei&BuJWXocxP8Vh? z()AhJ&)d1Kmf7rFTU(>5&>sh&frfewxVa1A=fn9atj4^PdkoNOUHLrC^P_tQ`j!?+ zpzStpd7Kc63nVbUuW$UJ^ZE5EwbmcF_9Q`m)+Z*!y<>5HopVi{ zLVNvTB`vi)!xIQ@YiWaEHyhZvGcDzXp<(e=WfExH#v$TvMx}*4Fp)QTyV}ImR!MEs z^J@yRpdly%+Yk6_iRLtsbNnJfKJPj$tY)|#_b9co! zfN`zzvnx6I6}{~O1MGuhf&+^3N)p*#u^Zn}VBTlY$WJKyWmaelQ$Nu@JaQD-750HC-0~T|^uUnK^KSR9 zI`_Fg;2s$Z0+HSnuTf<~Rc4wl`&_cF>_O}IB*Dnl82z$QOxWR=ez$Z!=?Oev zWG^(ehnA-r)@;(8mmBz1jHoLC(y8$K>eNwIHQ{0QV&R)zItNCz4fphMbg*@x=GM@l zkUV@`-v9Q!!m(1B>R&7ivZ_`Ob9b>@GGSDQIITwOh;1BdtM${wTwGk7+lIP3hljZP z9XXliQeDGLnmlCzOy_5BCzv;OSWH}9ZM~yG&;0H45WQmiRw^^ig3sqU4jB*;cjUzV zc`~`?uDJxs?gFbB)v3K-R9#)YBh5FU>+qTwz2D?sxqd?m)@3Ua2_4&pyGPwkEgEHR zMA6r#M%~@t*U_i8MlU6u`o1&caJc$c3CvlpKT}4dX1B-|3NYJlK9q(N47BP%lF!I# zaBN+Bpe+e#BN#tdJ{-rtjgRH)JL4AlQS2!VcbRF`wC6TYhJ31}Gya4&h(mkNYMXDt z!tNWYE~u=MNhL~wjvvSaD@-Pug0=!T0&A@m|IS1EKzni|54635C0%<5ppa79Q#25 zoL(CYacyaoZvcA6II*3%TJ=<&T032#RQam$J4kK`60%*R*6zNvsORHW zfsNago}g5!)`z<2{JI9ag0qd@s8TCaMB`9U8 zUj|3oJG2jQg2GBAq*pY62HBB|y#R*C`ay(Gz2BkVAOF(z?IUpGyD-?kroZ;%DN*vkL3`L{6=v&60nPrT8omNl-9fRGWZG^M`!+YhV^?lY{aM5U{ zbqn!=oRS9pTo&4o3d6x`PxPBesPqg|iE?djc^&lb91M?c6;9&@lPLq-oP>~BT*GW9 zrP8Pvu$TIWF<{ryiDuUaiNf3TEi^48s9SnV%oUThy-tq?*yy&++cu1eO=)9WSSVQ+rbScm+ef? zsGk+?=jz|JtruKQD}cQhAHuJHJOG_a&8!z7s^X%8AQuOn?6k}xo+Ult#+q^2&(8d9 z{*irmei<>Ly+e<7{*aMZ4&_z#phe2uU7a8@$OC~I;E(<1B|M&J{*6QLXItz6H@8kc z@azje!^wlU*N4aY`StD=4xOTWnXJ(XH)pRtgePg4#XO$yEd)ByV&A;E=amCpCvCd( zIQ7ZY$Mkm@);S;kFW2*yq&xx7igm9-E$y$ zz7kf=a)C~fwhU1JS?S>D7Wnk?8MC92uC5Vi(3_9J*)#0#%V$D6$42>#WVQcI@|i!% zXChWUQ=xoT^na6lW@KdR!RPZC|0a&1_wa+)o(c>BdLlq4Ond}?J4+;z?@2}U@bH+6 z@1EeZG5GE-yZMl1FxrgC%gbxh_3PIcL`Fu^DG;?ZbCtaihyQYBX6DN7-Mg=)ooEoy zvP%*pKXdBTsReW%Zfa`k%0q_^Wf>+PefHUBZx0$YD1zQmoM)eX*1CTa$v=dV+>RbS z`YG)XH+b;i2*audx~FNJG))ZSETy;>vx!ubZNCdfk|0HoCrz3ZzGKIZjPJkyp7C$a zojZ5n=+UF2_wC#FnBtIslN^7T)r(w|bvtk2>PJ`S@;^*(8zX zV6=xLPd}+PpB=(pCkol6Z*-d1T6{+oCA0fIT5M;AJxLnbu&Z(mksOM67f81X4yb{^by6%1eFI%}+1ZBpd!IFemb#ow#e37<%?>8TZpn!chG zaOYLEdfcRSVl)%Z$pbSxUUUZF2lixh5i^f3ip^O)>kH;Q?cOjtjY~{S{MgyqIZ`gC z_9bP`ELAgxOCIawx1lvEnLBrGqOQ_hd8OqJwDyF!Lbq<+A_<(ps2}R5U>m@MP+ctn zCnvYaAAXR!vC}e4!BSFEAT~CZjJhIPu|SjN)6&vFsbr2S0X^YlBD96-FY;iMc|OAsJ0Asv}(aPa zfMM{)K_vU-mtWr98qoD&7DMUxD3_ox(;uayu`-#gb^4}@i_4M`BStU> z(2$kAq@<)#-wX{6bq)>=_B(z0vuR2{I9Xv_;=GwJu zjr2`Eqb4f!&Oekhexc0(=tK6DhFjgyY8ic#61Ajn(o{PVBPfj}u!5?pDk*|Fe)Q2t zCK29x>n*1563}a}y~flo#*L+|K+!TdAI!cHEnmv2AfxA$X zDQC|~=L9>9ve!6YUte$hvV&nKW&_Z?dGnYRT67`DkRaQ7L}@HZj>Xs{)}cb-(xXR@ z4k#o$P<9qBT*yQ+9Ak)0M}jOXl@9g6V&m2~NfW{Bov^pJ=bbro<{hLc5}ShuYAj+F zM22xHQA5eZT3&&SJ6OlF^))YJr}Otu=Jg)?Lb zNbKsmtlLOSXUN3p&yYEJa+yT`oO|O5+UZ|lXO|c^M1O`%+k*!oW1Q(mP0>k7@NoQi zar^%LV{V>0m53sPg)?NZjM}to$DAS4@x+P7#5V^GV(y>)UB3}e)S*LgXV@^YcX)V2 z-UCZ#$N-%oa1u{9H+MByJwt}ioFU`n z-~c~+dP1kOXPH%`l$hAgMFg_Zb4`#-t(_qQO=rkRkvaz)1B`(v7_ZF|(EJTcwb^)v zOhtvg7@I=Sg$pJ?jLGZaL%6{n?x|8Lt(+kPhBIV@_O6&c1JGS|bygn)BEX)gBHjrP zhkTi=N^Qw{fG-Z_R#qnXczJo|4HzJ9cjE>;Kp=yY=_wW_oc`h8Tf zQ_O7{qehvzBx%QVPfyQbs0B~=_Vx}%*;c^r2SJ*M2F3Io)J(P)78a5+debU%L^-wd zi!V-n`OKNqrR&zMKZe3^qvhDy*;zDy{##w?{qp52N?HU%vEB*$ZQxHo{j?Jmv1JBT znV2FeX83$rLc+vF0p}PP=M=9+wvCb0g@u*HFTebH*LCZ@O+q1LzF zQrl~so=!V5v}@O{(J*J+_6+(besq(ywr9LViTq85JtNH9p2F}^Y!bGX+MY=TkYOY} zJ)LyV#|}qGm6c_+Xg@| zol;P5-{j!rG>5vCB|yU@aNh0Px0xwVd?fo34!T$e6jPP0^9?L?LYmM!>{&e*XFA>Xte>@9w>O%uFt#EDZ-Wl9`*R z(^F`4T$6RM&e%7J)f5*MVL$EI2x3ej>tVDGh65O%_Vm)STh%c43=lM@(85Vw#+31? zoG5Y$Qf9bkjZTde65EDWfbs6%PeaPIz(dN?9z4(kGy(x^*}4VA(M+(h6B14R!XJ%krtc%hN!tz5B^Ipc51;w6?%UbOSF;d;Q7 znT{#Lpuiy5yh*<~;`5WAhcCYPvIxg}IyQm(j6XU7+Q72Ob3s%ZYI5IR{drIkZ6g?S zD==qu!U!Fg4~6Xdn5c#)5PV@>lF$y{uzrINc7m4A_-lnax%j_7neBfk7|FE8a)r4p z%kp{7cO>Uplxcl@e8LczkE}?GvTW|+#f!I5q?IdIzGD6kNA;hZ$r@ZT?TQsE-g9$v z3!6N7GQ*x}q`!3O5`6U0M_*f$bDPPun5D0J_UyrknVz0r%uq(2vYO%@u2R^k30)QCvFHhcj%qDGhThUlF~GjHL|m_ z?=M>P?#aZ&#iNfMyEw$v)m zgRd7eyt2P{P=_`})i>byvG<@{eiIyh{n~Vo%NcZLJ8%Dx=`HMq|Hb<}=n%#1HQK|` z)w7dMSmuQ*dI2)xRA=f@;cs1 z3#w!yOzUC-W`Q!PRwb_ofvpP{5R+YvvL4e)%@uyGxCQCAuNAfLKG0pI)@ejSp2_qu zBKZF8tA&`>#FHqbZ7GdqFbYV1=HWd*6~uMv8l}{T?LQA6bks>@1>w|@U!I`Xrd zR!1iU3l@n)W9Q78z2ddWqraFlKe5e(@#BN-9UR={GHLaxqsI!q`r`BZrKKe&oSd90 ztj%$0=iuNtAu;j2<e#Mz0d@8=YqPw%dwKbcS-5cV z;%U>K{}zF^gMN#o2b_u%asry;*Q^I%7#SWOHTa!(7B84KEn#DR{*zx3Jd@sW&9pJz zDja0N|X%Ak4gG? zd*I&cUuE>S!CtO4E;BW1bobb@F{mM0j-WC7H90$g0h{>AC-jvvb~o!5&y~mW$|7xr zvY&DJGGrtto5&i5vhm-(bm=A~vqA;~7P7|ZTzQ(CvHk4X*{r(5sEEA2Z z(D3jzQ*^phrrB&7P#P)I8q{4Qz`F7)kbi#-jP4c(&-DHLbg5kaGitH-%ng`LU_=?| z>1KenC6^#Cbu~O29|y-zU5Bt}n>@KT^xjR{y8V8W@F=V;E(QlLFO%BT8UfaoCPU7> z)zIac&T#zXHR#xT2^5_8A=^0=N8j>t)7s3scoBlScL%YXTjRc7e9&*&Evd|e$9KPh z_-8u72?T22<9!GW8vruN8lem&@O*4%&E}usLnoi^-EEC6Pej?nls(Y1-x^5THyb+l z{tyDf2QZ>!ZFRM6>GkWD=bzP;mNq+AUh?3 ztz$N`pOKl_XlrZ|>^S|Kp!et$83t>bNN?4@X=i7bi28a&SXh|5qobo8%gf?$;OUc| zo}M6=%UkE)L?vt4;K74quz!lF{TWTvvX6*}uy50*jmIB<{IQIko^J7=5Pwwv68rV* z7lTxYKmYu5ShQ%7sW|_|7l10GxM$CvF~9%*dm^iA7I8V4CqzX>(H>{w)vH%GCVunH zH<|l?{Y!ta{i;=~XzG|aI5;@s(W6J){!Iky<&GDzX7bn^J9dn*JAU%XCno;QY15`L zemsgxX*j{?oNug2#=l86|2}>CFjMS|-ICL%PiFvW%)k%Wv1fyG`q3FnC>f5Z&?%9* ze^X$@Ae)wBa)aepR#wvFKW1-;_3PI+^Kb6ozrWGIgdZmLG2haZu`8verM+xzZSASx z4M1d0rHfQU0z7cw0J8-zezc0xSfcD8f+b)rc~Wg{*|G&*fBp5wB@sjs0VO2Rv8Fs3 zHlHj?W2v1LVY^wKmzTFJFfcG?)~s1#Xky@@dnUwUB3Mt~KVs1KG|ES>Fb zm^p`(r=dQdjKHn;Z(`(X41dqRX;>c+5D?JNy?gfta$vEOOQ{C?vcm8sQa-3xWM*c< zb!6AH=XwjPe{X$&hFu?kAGtz}mDy%o zDpg>A?PcI57S{(bhFo^Yq7F_xjXYx{VPaMV1SX;N0p!3#5!Ar0I9ZT{-K~heN}Pcx zW2X+^CeIip!oLfQY#ps%A3%|*V`G=PhZH0-fxv2iEj$Tj1;@4gE}Q0wP!nu8d>qVqSCl9Fa@-MSS z%$qlF7>(?`QI)3iH?fv?<5*!b@CaXe=_QLS#Q=nHhEWrt^EXjeJB;mYKQ``k^J5?_ zR)8@OwKwW1*q|>41qH3Ab+4`Vp%?=Zzat?KW!YpbqZPikcz=`=FAyR6F_Kw3-YU*1cc!Xv83x} zs-Q(Mq$nO6;Y93nt~lIFQ4GC};?xQpa8H}-MlFINw-_~W;J|*^y6>S(@h6toi92`h z&{pD4fBq(p-b=6@Z9#taCn^v3WHQ;`KYx=wzU6OUy#L?Mt9$Ob`Hd@K==2}MoTH#1 z?{V(#&Wz+(RaJK>KfjD7YgHMBM*UG?YRf%#n;zEB#|iL$&>P_ z$;r3-UAdC_4saYR#0f^-11TCma%7Jw!NIWo6x^ z+}z?Mb6}xywmdyu`vwGfws&`T5y|ChBl&{|E-ucZS6>}DnugKB!t$vnPF(4C{(OoF zrDVQwA21*uv(;~ktE-EM4*DS=jYelQ`AEjBucLi1sq%b$JQzyT)3fP_ovn>vzP@hb z2M+8u#m&u4L?gIFE)yQg7874I!PJM010kV0QzI-!_E-J2Zni ztmYQmxpUb2o2+rY+!&0^Dm0jq&V8Ppo+yA|-b;tR-=mKe%xr~f*ttl?=AfRPwrFA~ zH`w^itIu?D$A8(c6~sfD_0o7j#L@qXLKGX+0@9;#1s@tkF8!GkdcwWP(dS>IS{ZKNUPTeWDFQ! zwal2!kz2byz`hk{J+*p$fIU_}Sn(V-Jni}bCkueJ2z2Z3tPhAXTOaW7pY=}v_yZcO z^0TM%2egKtwb~zG%+JVzMUsy>KWnu=fRuS_{EVjlwAvrg5+_%=T5f zkN-Qu9xX`te8GYRo!72iYnURpFI@GPvwfojvZ*`!PXlKrx*%`ZCDsY{@Y32HQ z;lhROsIyb;(L5ls!cf0WNJ!{#;J|^eG0utBf_?BUUUTNmX-lS50@ARv@ezoO=N~)` zWi%aww{hdf@1{Gur ztSxf1vW+sy=pC&n;vYVIc;nEaLw#6<&FX;i#T#$D(eZ~Let3)JpyqycntCZZefsn- z_&cBY90l40g$qnTw%AFNCUxAmZ{GrTusDu^cGXP4gv{r6%;>?MzdVFx!ZFj~4N zpem;@WXO=%GiT1wQHDY6ET;Xm_Xb|GFbp-A(m;O%U4tHZ`9B5bU%$*jBdpYY~V#HSJ4F#t&y>yIFpI{!f?#T5j_k ztJj~#;@E7i2^-Id{;q}Y^(7nrPt=6}V_^TR4=`CDK#R^8-KnABos{((w!D~pxqEa$ zLFcn({>>KG2N+rAYw;s1y7cYeHzK+%|Jlz!A8Jx&tyv#H@1mpI`%RtLb4Bu>WxAO& zU*ZjG7n>^3={B0%wymxYpc{JEBMu@HhHAUbn)^X0UKfx}CCOE)J?8Dq>iPhh+CQiV zsJeB6USlRL3f;W^i>n>O`D@Qy(Od;+<@$iw5P*sO0eTIDeo_g%Jap`$f!j8HabBU& zeU82HT&sJ)(pLc51v9gt+al2W2sDC#8X9z;BWpX?>hARRL}dEzs3+Fb8b#ie`R`|p z`2MTt7J)dyzT0oo7?!0!iQezx3hP|mxXaYMJ6SdNb3I)2U*TuuhUD@GpwvAMRV3CQ zP<07MufOLH=+&#&nh_&LOu_L|L@E&S|EX85TeZ+72Ove`hYue<1r-d|A7D$* zMW|=8{(y!mlpZgk&S2ReK-t1h+!y7E_GE!K?1N^|mx%RDpFVvwRTyf0Q%{{b)ei^g z=KcU2xz~&wIdTdr5{$E*WH4iGn4THRh-wcRB||Cd?56$zd@&xu%=`f*%=+^te?UW{ zN=PFe?Xq8Kj6@zLmMz5r#}E|lJN)N2hIEeIt7*+Rf4HM z0NHU0N;A#;0Vt0_ad9!@55W5kcyHnlz`>>U{s3%eo3ZQ|RR-Ie2PzS>%+$qZN1~Wwqo>o3X z-71md{_XXf2KnsCFv*I)YVW`m^&QpzMSFgH>h+rj`HbGFzj2=a+Vq(|KknRGA$VAO zk!!CAtMVChz3Vgv+6tpFqouW)S|6~}m1{OSFM&+;Q24rjMvL-UlUU>k5Gn{CFnR#9 zm3@V}0u1-(5B{NQeGeFlT)Yi7CAl``{4TvT)&BWT@%Q)MO<~2Fl&9}bI+(>AeWTLd zs?y+?E7Q_~&@Le4{ms5vs-%NzQi{HMM24~y1}MPxspK>BYgRK(`|dyb=0E)Ge=$Fs zHf`RDUvq_^t9o3wXwmFl{}w-^`wmMlPUrFXT1nIxsDJSJ)A6&gnLn&?2#t?!oTq`k zbndIqbo?G{dxbdrPssgc-jA)~XZ};y0na-o{PmarzZvP>0Jf1nLqq5o(4B4}MtU0- zegkbMoI@}N@S4XkFbJzLeEa<6Y+E~OgeXLN8SkFC?JOe`(*%;T)Bk_}(qY@>K)VBf z{rq|6>hu+0gSdEjmXMt{KLgVn?A}*)Ztf+d_BRQZX^hiG+h?QY*&r{^U~)h`n<*~O zkmRnC)jq3cVDJMLXc}naI{r6+?Id6f5#K&5giKc`hs4F{q022?w21ij8EAN295VNK zwsX-UY}w~5Ii*HAE{U4a{^n?THd>wykMayUdW8U>R2 z4cRGErXB+tCgbAbVx5zdZFT+njmN-3l374NpqHS_KtuM=pFihTQBjvwSJ&u1bLMhf zZEc&?qel;3g7{aiTrUO5<6F1|H|*lYi=e3u<~w(uJw9^eZ0UpveaDt8nZGC|Cea$i z2Z@6=hl11*H0;ZlFJi#L?s!0eGi--8=+2Wt+5&9lOaVi8u00000NkvXXu0mjf5{#n# literal 0 HcmV?d00001 diff --git a/admin/images/menu-icons/16x16-2x-s9b8c49312e.png b/admin/images/menu-icons/16x16-2x-s9b8c49312e.png new file mode 100644 index 0000000000000000000000000000000000000000..bd311b1322ce1042770fc3480b2a3cc00c300ff7 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/admin/images/menu-icons/16x16-2x-sbe70081ef8.png b/admin/images/menu-icons/16x16-2x-sbe70081ef8.png deleted file mode 100644 index 95459e2a1ee9e692c43157dbb8aebde89f346c90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4135 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 diff --git a/admin/images/menu-icons/16x16-s3f4c846209.png b/admin/images/menu-icons/16x16-s3f4c846209.png deleted file mode 100644 index 19780777575b257c74900e3b5941f4ce97e91e7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1637 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 literal 0 HcmV?d00001 diff --git a/admin/images/menu-icons/24x24-2x-s7169efa003.png b/admin/images/menu-icons/24x24-2x-s7169efa003.png new file mode 100644 index 0000000000000000000000000000000000000000..e9564f78e13ddf5e9246836803fb1167adaee1a2 GIT binary patch literal 6015 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 literal 0 HcmV?d00001 diff --git a/admin/images/menu-icons/24x24-2x-sccfd928e17.png b/admin/images/menu-icons/24x24-2x-sccfd928e17.png deleted file mode 100644 index 82d45839cbfe86ef292cfcd7f9f6f05f3068df8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5981 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 LNkvXXu0mjfYpF#C diff --git a/admin/images/menu-icons/24x24-s0dc15c36f9.png b/admin/images/menu-icons/24x24-s0dc15c36f9.png deleted file mode 100644 index 5ed8fc993d6a0e5f19bfe5ac601a1813baafa79b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2394 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 M07*qoM6N<$f;py>RsaA1 diff --git a/admin/images/menu-icons/24x24-s391afdd013.png b/admin/images/menu-icons/24x24-s391afdd013.png new file mode 100644 index 0000000000000000000000000000000000000000..b1fd07bb9eca0ddba7032d48f8546b0a1682843b GIT binary patch literal 2391 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 JPDHLkV1m+?m^}ah literal 0 HcmV?d00001 diff --git a/admin/images/sprites-32x32-2x-s6ccfbe50f9.png b/admin/images/sprites-32x32-2x-s6ccfbe50f9.png deleted file mode 100644 index 9b3a8bc255f45a5461e2d0169fa3aff36d68e39d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9066 zcmbW7Wn5fOmiOt#g1c*QcMooXAi>>Tg1ghfg9U5c-5YlajRXts1P!hU?#s-7=GmQ{ z-F@-Ay7jqrKd0=T^F8&eic(R2kA_T)3Jo-^YLP+LJO7r}t0eD{#u5FD&N&+S-3M{2S;t2Ajn5|N8OI8Ug8mtGJKIn!@Jf z&wsWhYX=}iCUHLJ#8p3?7MXa4guO*l(GkZvF%GoQ3Bs3d_#nxJTKTrNSpR6}6Hb~r z`I~=??VmRPQFqMyYRM$=zrB6^HlnQ7=vlD{8YZy>Tz=r16?fk)8jgS{5v6a~etE(B=-n^#1iU@4MMD7vcm+q&V)y~NmnaLs`1bS9 zQqQ@f+p(1v+_H_OHiZnSu$>?qh3cULd#`9VoB+wwmjY&U9dU}}@g|{-z~PY*wQBtq zHP#G%?KVNd3YTr!=XHP4?K)mwUc0lku8MlsmWstT^%SR{6?_iMG3)0AaRg5ht2bCn z%2?-hH85ZpL-x!ErAY)d;<6vvLKSgj@5*+^Gh{mP_axnZSvK0b&4Sij99K%_t8^L7Ko2x_w!If9Am_d11T3V{mj`yEyvQLHOB&^(!k$51R(GGYC zh|;V7l)l_hip=hw7`)Cl*_DXQk{4om;S`FN?IHr#=yYb}5`v&$WmR&x)|Gj<+Lol( zX;H3MXI5NMS$V`bx$^5=4)DUV*$aH9#^*#Otdzl{DusZdF`mJv^huS9y*{YNT%#17 zY~Rm7neDto znY*vAN4-06K$@8tSoVdwY>4alm%_%0DHj(w5!H#ff2X_}&^E4|tLz#2Si1tc)(sUQ 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 diff --git a/admin/images/sprites-32x32-2x-s72b74f4cc4.png b/admin/images/sprites-32x32-2x-s72b74f4cc4.png new file mode 100644 index 0000000000000000000000000000000000000000..7fdbaca555391f9aaa5298d8d9ca78a3e058b1ab GIT binary patch literal 9088 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 literal 0 HcmV?d00001 diff --git a/admin/images/sprites-32x32-s47450c5f5b.png b/admin/images/sprites-32x32-s47450c5f5b.png deleted file mode 100644 index 8c9df7eaf21a6dc1d52235bffe4fc3f5b720e5d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18703 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 literal 0 HcmV?d00001 diff --git a/admin/images/sprites-64x64-2x-s0fe1d92f9d.png b/admin/images/sprites-64x64-2x-s0fe1d92f9d.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3a166575db110c317eb95541576c384a571cf7 GIT binary patch literal 2878 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 diff --git a/admin/images/sprites-64x64-s88957ee578.png b/admin/images/sprites-64x64-s88957ee578.png new file mode 100644 index 0000000000000000000000000000000000000000..458b7520ae1f01132854d861b70cabb4cef11c4b GIT binary patch literal 3059 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 literal 0 HcmV?d00001 diff --git a/admin/javascript/LeftAndMain.js b/admin/javascript/LeftAndMain.js index f6802874d..4a11a9b9d 100644 --- a/admin/javascript/LeftAndMain.js +++ b/admin/javascript/LeftAndMain.js @@ -1290,7 +1290,7 @@ jQuery.noConflict(); form.find(".dropdown select").prop('selectedIndex', 0).trigger("liszt:updated"); // Reset chosen.js form.submit(); } - }) + }); /** * Allows to lazy load a panel, by leaving it empty @@ -1409,7 +1409,7 @@ jQuery.noConflict(); onmatch: function () { this._super(); - this.data('collapsed', true); // The current colapsed state of the element. + this.data('collapsed', true); // The current collapsed state of the element. this.data('animating', false); // True if the element is currently animating. }, onunmatch: function () { @@ -1418,7 +1418,6 @@ jQuery.noConflict(); showHide: function () { var self = this, $filters = $('.cms-content-filters').first(), - $container = $filters.closest('.cms-content-fields'), collapsed = this.data('collapsed'); // Prevent the user from spamming the UI with animation requests. @@ -1426,6 +1425,9 @@ jQuery.noConflict(); return; } + this.toggleClass('active'); + this.data('animating', true); + // Slide the element down / up based on it's current collapsed state. $filters[collapsed ? 'slideDown' : 'slideUp']({ complete: function () { @@ -1434,11 +1436,8 @@ jQuery.noConflict(); self.data('animating', false); } }); - - this.data('animating', true); }, onclick: function () { - this.toggleClass('active'); this.showHide(); } }); diff --git a/admin/scss/_fonts.scss b/admin/scss/_fonts.scss index b5d540d5b..da8f662cd 100644 --- a/admin/scss/_fonts.scss +++ b/admin/scss/_fonts.scss @@ -13,7 +13,9 @@ [class*=" font-icon-"] { &:before { display: inline-block; + content: ''; width: 1em; + margin-top: 2px; margin-right: .2em; text-align: center; text-decoration: inherit; @@ -28,10 +30,13 @@ } } -.font-icon-search:before { - content: '\e800'; -} - -.font-icon-list:before { - content: '\e801'; -} +.font-icon-search:before { content: '\e800'; } +.font-icon-tree:before { content: '\e801'; } +.font-icon-list2:before { content: '\e802'; } +.font-icon-cog:before { content: '\e803'; } +.font-icon-check:before { content: '\e804'; } +.font-icon-plus-solid:before { content: '\e805'; } +.font-icon-list:before { content: '\e806'; } +.font-icon-plus:before { content: '\e807'; } +.font-icon-search2:before { content: '\e808'; } +.font-icon-pencil:before { content: '\e80b'; } diff --git a/admin/scss/_forms.scss b/admin/scss/_forms.scss index 3da0c8ec7..dbd407aae 100644 --- a/admin/scss/_forms.scss +++ b/admin/scss/_forms.scss @@ -1050,5 +1050,28 @@ fieldset.switch-states{ } } } + + // Context specific rules for when the filters are in a panel + .cms-panel & { + .field, + .fieldgroup { + width: 100%; + margin-bottom: 16px; + } + + .fieldgroup-field { + h4 { + padding-top: 0; + } + + label { + position: static; + } + } + + .Actions { + margin-bottom: 0; + } + } } diff --git a/admin/scss/_style.scss b/admin/scss/_style.scss index 0ed761a44..661a2fc02 100644 --- a/admin/scss/_style.scss +++ b/admin/scss/_style.scss @@ -97,7 +97,7 @@ body.cms { .cms-content-header { padding-left: $grid-x * 2; z-index: 60; - min-height: 40px; + min-height: 48px; background: { image: url(../images/textures/cms_content_header.png); repeat: repeat; @@ -167,6 +167,117 @@ body.cms { width: 100%; } +// We have a faux three column layout when displaying Page content in the CMS. +.has-panel { + .cms-content-header.north { + padding-left: $grid-x; + + &.collapsed { + .cms-content-header-info { + width: 24px; + text-align: right; + } + + .view-controls, + .section-label { + display: none; + } + + .cms-content-header-nav { + margin-left: 31px; + } + } + } + + .cms-content-header-info { + position: absolute; + top: 0; + left: 0; + bottom: 1px; + width: $grid-x * 34; + margin-left: -$grid-x; + padding-bottom: $grid-y; + padding-left: $grid-x * 2; + padding-right: $grid-x; + background-color: #eceff1; + border-right: 1px solid $color-separator; + } + + .cms-content-header-nav { + margin-left: 280px; + } + + .section-heading { + margin-top: 8px; + } + + .section-icon { + vertical-align: middle; + } + + .section-label { + vertical-align: middle; + font-size: 1.2em; + font-weight: bold; + } + + .breadcrumbs-wrapper { + float: left; + padding-top: 6px; + padding-left: $grid-x * 3; + } + + .cms-content-header-tabs { + margin-top: 9px; + } + + .cms-tabset-nav-primary.ui-tabs-nav .ui-state-default.ui-corner-top { + border-top: 1px solid #b3b3b3; + } + + .view-controls { + float: right; + margin-top: 4px; + } + + .cms-content-tools { + .cms-panel-content { + padding-top: 0; + overflow-x: hidden; + } + } +} + +#page-title-heading { + line-height: 1.2em; +} + +/** ------------------------------------------------------------------ + * CMS Breadcrumbs + * ----------------------------------------------------------------- */ +.breadcrumbs-wrapper { + .crumb, + .sep { + font-size: .8em; + line-height: 1.2em; + } + + .crumb { + &.last { + display: block; + padding: 8px 0; + font-size: 1.2em; + } + } + + .sep { + + .crumb.last { + padding-top: 0; + padding-bottom: 0; + } + } +} + /** ------------------------------------------------------------------ * Filters available in the top bar. * This is a togglable element that displays a form @@ -195,16 +306,24 @@ body.cms { } /** ------------------------------------------------------------------ - * Buttons that use font icons + * Buttons that use font icons. + * There are !important rules here because we need to override some Tab styling. + * It's tidier to have some !important rules here than have the Tab styles + * littered with load of context specific rules for icon-buttons. + * Icon buttons styles should always take presedence over Tab styles. + * Tabs should be refactored to use weaker selectors. * ----------------------------------------------------------------- */ -.ss-ui-button.icon-button { +a.icon-button, +button.ss-ui-button.icon-button { vertical-align: middle; margin-right: 2px; - padding: .3em; - font-size: 1.4em; + padding: .4em; + font-size: 1.2em; letter-spacing: -3px; + text-indent: 0; text-shadow: none; line-height: 1em; + color: #393939; background-color: transparent; background-image: none; border: 0; @@ -215,7 +334,7 @@ body.cms { border: 0; box-shadow: none; background-image: none; - outline: 0; + text-decoration: none; } &:hover, @@ -230,6 +349,74 @@ body.cms { .ui-button-text { display: none; } + + // Context specific overrides for Tabs. + .ui-tabs.ui-tabs-nav & { + padding: 9px 8px 5px !important; + line-height: 1em !important; + background-color: transparent !important; + background-image: none !important; + border: 0 !important; + + &:before { + margin-top: 2px; + } + } +} + +.icon-button-group { + @include inline-block; + margin-top: 0; + vertical-align: middle; + border: 1px solid #CDCCD0; + @include border-radius(4px); + + a.icon-button, + button.ss-ui-button.icon-button { + margin-right: 0; + line-height: 13px; + @include border-radius(0 0 0 0); + + &:first-child { + @include border-radius(3px 0 0 3px); + } + + &:last-child { + @include border-radius(0 3px 3px 0); + } + + + a.icon-button, + + button.ss-ui-button.icon-button { + border-left: 1px solid #CDCCD0; + } + } + + // Context specific overrides for Tabs. + .ui-tabs.ui-tabs-nav { + border-left: 0 !important; + margin-top: -2px !important; + padding-right: 0 !important; + overflow: hidden; + + .cms-tabset-icon.ui-state-default { + background-color: transparent; + background-image: none; + border-left: 0; + border-right: 0; + @include box-shadow(none); + + + .cms-tabset-icon.ui-state-default { + border-left: 1px solid #CDCCD0; + } + } + + .cms-tabset-icon.ui-state-active { + background-color: #b6b9bb; + } + } + .cms-content-header-tabs & { + overflow: hidden; + } } /** -------------------------------------------- @@ -259,41 +446,45 @@ body.cms { background: none; } - .ui-tabs-nav { - float: right; - margin: $grid-x*2 0 -1px 0; - padding: 0 $grid-x*1.5 0 0; - border-bottom: none; + .ui-tabs-nav { + float: right; + margin: $grid-x*2 0 -1px 0; + padding: 0 $grid-x*1.5 0 0; + border-bottom: none; - ~ .ui-tabs-panel { - border-top:1px solid $color-button-generic-border; - clear: both; - } + ~ .ui-tabs-panel { + border-top:1px solid $color-button-generic-border; + clear: both; + } - li { - top: 0; - float: left; - border-bottom: 0 !important; - - a { - @include inline-block; - float: none; - font-weight: bold; - color: $color-text; - line-height: $grid-y * 4; - padding: 0 $grid-x*2 0; - } + li { + top: 0; + float: left; + border-bottom: 0 !important; - &:last-child { - // correctly right-align last tab - margin-right: 0; - } + a { + @include inline-block; + float: none; + font-weight: bold; + color: $color-text; + line-height: $grid-y * 4; + padding: 0 $grid-x*2 0; - &.ui-tabs-active { - margin-bottom: 0; + &.icon-button { + @extend a.icon-button; } } + &:last-child { + // correctly right-align last tab + margin-right: 0; + } + + &.ui-tabs-active { + margin-bottom: 0; + } + } + .ui-state-default { border:1px solid $color-button-generic-border; background: darken($color-widget-bg, 10%); @@ -340,7 +531,7 @@ body.cms { &.search.ui-state-active a {background: sprite($sprites64, tab-search-hover) no-repeat;} } } - + .cms-panel-padded { .ui-tabs-panel { padding: 0; // Avoid double padding with parent @@ -348,15 +539,16 @@ body.cms { .ui-tabs-panel { padding: $grid-x 0 0 0; } - } + } + .Actions { padding: 0; // Avoid double padding with parent } - } + } &.ss-tabset-tabshidden .ui-tabs-panel { border-top: none; -} + } } /** @@ -415,8 +607,13 @@ body.cms { } .cms-content-header-tabs { - float: right; + float: right; + margin-top: 11px; + + .icon-button-group { + margin-right: 16px; } + } /** ------------------------------------------------------- * Loading Interface diff --git a/admin/templates/CMSBreadcrumbs.ss b/admin/templates/CMSBreadcrumbs.ss index e0d9f13e5..2c8f51b40 100644 --- a/admin/templates/CMSBreadcrumbs.ss +++ b/admin/templates/CMSBreadcrumbs.ss @@ -1,13 +1,5 @@

- +
    <% loop $ManagedModelTabs %>
  • diff --git a/admin/templates/Includes/ModelAdmin_ImportSpec.ss b/admin/templates/Includes/ModelAdmin_ImportSpec.ss index 7afe2d2ed..4e726efd3 100644 --- a/admin/templates/Includes/ModelAdmin_ImportSpec.ss +++ b/admin/templates/Includes/ModelAdmin_ImportSpec.ss @@ -1,8 +1,8 @@
    - <% sprintf(_t('ModelAdmin_ImportSpec_ss.IMPORTSPECLINK', 'Show Specification for %s'),$ModelName) %> + <%t ModelAdmin_ImportSpec_ss.IMPORTSPECLINK 'Show Specification for %s' s=$ModelName %>
    -

    <% sprintf(_t('ModelAdmin_ImportSpec_ss.IMPORTSPECTITLE', 'Specification for %s'),$ModelName) %>

    -
    <% _t('ModelAdmin_ImportSpec_ss.IMPORTSPECFIELDS', 'Database columns') %>
    +

    <%t ModelAdmin_ImportSpec_ss.IMPORTSPECTITLE 'Specification for %s' s=$ModelName %>

    +
    <%t ModelAdmin_ImportSpec_ss.IMPORTSPECFIELDS 'Database columns' %>
    <% loop $Fields %>
    $Name
    @@ -10,7 +10,7 @@
    <% end_loop %> -
    <% _t('ModelAdmin_ImportSpec_ss.IMPORTSPECRELATIONS', 'Relations') %>
    +
    <%t ModelAdmin_ImportSpec_ss.IMPORTSPECRELATIONS 'Relations' %>
    <% loop $Relations %>
    $Name
    diff --git a/admin/templates/Includes/ModelAdmin_Tools.ss b/admin/templates/Includes/ModelAdmin_Tools.ss index 2aee25916..753c81f5a 100644 --- a/admin/templates/Includes/ModelAdmin_Tools.ss +++ b/admin/templates/Includes/ModelAdmin_Tools.ss @@ -1,11 +1,11 @@
    <% if $SearchForm %> -

    <% _t('ModelAdmin_Tools_ss.FILTER', 'Filter') %>

    +

    <%t ModelAdmin_Tools_ss.FILTER 'Filter' %>

    $SearchForm <% end_if %> <% if $ImportForm %> -

    <% _t('ModelAdmin_Tools_ss.IMPORT', 'Import') %>

    +

    <%t ModelAdmin_Tools_ss.IMPORT 'Import' %>

    $ImportForm <% end_if %>
    diff --git a/admin/templates/LeftAndMain.ss b/admin/templates/LeftAndMain.ss index bb286762f..39e826d5f 100644 --- a/admin/templates/LeftAndMain.ss +++ b/admin/templates/LeftAndMain.ss @@ -16,7 +16,7 @@ $Content
    -
    <% _t('CMSPageHistoryController_versions_ss.PREVIEW','Website preview') %>
    +
    <%t CMSPageHistoryController_versions_ss.PREVIEW 'Website preview' %>
    diff --git a/admin/templates/ModelSidebar.ss b/admin/templates/ModelSidebar.ss index 3599fba12..19f3d2985 100644 --- a/admin/templates/ModelSidebar.ss +++ b/admin/templates/ModelSidebar.ss @@ -1,7 +1,7 @@ -

    <% _t('ModelSidebar_ss.SEARCHLISTINGS','Search') %>

    +

    <%t ModelSidebar_ss.SEARCHLISTINGS 'Search' %>

    $SearchForm <% if $ImportForm %> -

    <% _t('ModelSidebar_ss.IMPORT_TAB_HEADER', 'Import') %>

    +

    <%t ModelSidebar_ss.IMPORT_TAB_HEADER 'Import' %>

    $ImportForm <% end_if %> diff --git a/i18n/i18n.php b/i18n/i18n.php index 336899b16..171bc9e16 100644 --- a/i18n/i18n.php +++ b/i18n/i18n.php @@ -19,8 +19,9 @@ require_once 'i18nSSLegacyAdapter.php'; * * Templates: * - * <% _t('MyNamespace.MYENTITY', 'My default natural language value') %> - * <% sprintf(_t('MyNamespace.MYENTITY','Counting %s things'),$ThingsCount) %> + * <%t MyNamespace.MYENTITY 'My default natural language value' %> + * <%t MyNamespace.MYENTITY 'Counting %s things' s=$ThingsCount %> + * <%t MyNamespace.MYENTITY 'Counting {count} things' count=$ThingsCount %> * * * Javascript (see framework/javascript/i18n.js): diff --git a/templates/AssetUploadField.ss b/templates/AssetUploadField.ss index 9fb6960ca..db2cdb6ed 100644 --- a/templates/AssetUploadField.ss +++ b/templates/AssetUploadField.ss @@ -3,34 +3,34 @@

    1 - <% _t('AssetUploadField.ChooseFiles', 'Choose files') %> + <%t AssetUploadField.ChooseFiles 'Choose files' %>

    -
    - <% _t('AssetUploadField.UPLOADOR', 'OR') %> + <%t AssetUploadField.UPLOADOR 'OR' %>
    - <% _t('AssetUploadField.DROPAREA', 'Drop Area') %> - <% _t('AssetUploadField.DRAGFILESHERE', 'Drag files here') %> + <%t AssetUploadField.DROPAREA 'Drop Area' %> + <%t AssetUploadField.DRAGFILESHERE 'Drag files here' %>
    - <% _t('AssetAdmin.SHOWALLOWEDEXTS', 'Show allowed extensions') %> + <%t AssetAdmin.SHOWALLOWEDEXTS 'Show allowed extensions' %>

    $Extensions

    @@ -42,13 +42,13 @@

    2 - <% _t('AssetUploadField.EDITANDORGANIZE', 'Edit & organize') %> + <%t AssetUploadField.EDITANDORGANIZE 'Edit & organize' %>

    -
    @@ -56,9 +56,9 @@
      -
      <% _t('AssetUploadField.UPLOADINPROGRESS', 'Please wait… upload in progress') %>
      -
      <% _t('AssetUploadField.TOTAL', 'Total') %>: - <% _t('AssetUploadField.FILES', 'Files') %> +
      <%t AssetUploadField.UPLOADINPROGRESS 'Please wait… upload in progress' %>
      +
      <%t AssetUploadField.TOTAL 'Total' %>: + <%t AssetUploadField.FILES 'Files' %>
      diff --git a/templates/HtmlEditorField_UploadField.ss b/templates/HtmlEditorField_UploadField.ss index bcf3a352a..854437ab1 100644 --- a/templates/HtmlEditorField_UploadField.ss +++ b/templates/HtmlEditorField_UploadField.ss @@ -3,24 +3,24 @@

      1 - <% _t('AssetUploadField.ChooseFiles', 'Choose files') %> + <%t AssetUploadField.ChooseFiles 'Choose files' %>

      -
      - <% _t('AssetUploadField.UPLOADOR', 'OR') %> + <%t AssetUploadField.UPLOADOR 'OR' %>
      - <% _t('AssetUploadField.DRAGFILESHERE', 'Drag files here') %> + <%t AssetUploadField.DRAGFILESHERE 'Drag files here' %>
      diff --git a/templates/Image_iframe.ss b/templates/Image_iframe.ss index e30bb92f5..70432523b 100644 --- a/templates/Image_iframe.ss +++ b/templates/Image_iframe.ss @@ -2,7 +2,7 @@ <% base_tag %> - <% _t('Image_iframe_ss.TITLE', 'Image Uploading Iframe') %> + <%t Image_iframe_ss.TITLE 'Image Uploading Iframe' %> diff --git a/templates/Includes/GridFieldEditButton.ss b/templates/Includes/GridFieldEditButton.ss index e9b8bd2bc..3391ac5ba 100644 --- a/templates/Includes/GridFieldEditButton.ss +++ b/templates/Includes/GridFieldEditButton.ss @@ -1 +1 @@ -<% _t('GridFieldEditButton_ss.EDIT', 'Edit') %> +<%t GridFieldEditButton_ss.EDIT 'Edit' %> diff --git a/templates/Includes/GridFieldFooter.ss b/templates/Includes/GridFieldFooter.ss index b85a70bb8..33843d19f 100644 --- a/templates/Includes/GridFieldFooter.ss +++ b/templates/Includes/GridFieldFooter.ss @@ -4,7 +4,7 @@ $FirstShownRecord - $LastShownRecord - <% _t('TableListField_PageControls_ss.OF', 'of', 'Example: View 1 of 2') %> + <%t TableListField_PageControls_ss.OF 'of' is 'Example: View 1 of 2' %> $NumRecords <% end_if %> diff --git a/templates/Includes/GridFieldItemEditView.ss b/templates/Includes/GridFieldItemEditView.ss index 9b79ee019..4e8a1b99b 100644 --- a/templates/Includes/GridFieldItemEditView.ss +++ b/templates/Includes/GridFieldItemEditView.ss @@ -1,5 +1,5 @@ <% if Backlink %> - <% _t('GridFieldItemEditView.Go_back', 'Go back' ) %> + <%t GridFieldItemEditView.Go_back 'Go back' %> <% end_if %> $ItemEditForm diff --git a/templates/Includes/GridFieldPageCount.ss b/templates/Includes/GridFieldPageCount.ss index b3eb47f17..bd6b5481f 100644 --- a/templates/Includes/GridFieldPageCount.ss +++ b/templates/Includes/GridFieldPageCount.ss @@ -1,6 +1,6 @@ - <% _t('Pagination.View', 'View', 'Verb. Example: View 1 of 2') %> + <%t Pagination.View 'View' is 'Verb. Example: View 1 of 2' %> {$FirstShownRecord}–{$LastShownRecord} - <% _t('TableListField_PageControls_ss.OF', 'of', 'Example: View 1 of 2') %> + <%t TableListField_PageControls_ss.OF 'of' is 'Example: View 1 of 2' %> $NumRecords \ No newline at end of file diff --git a/templates/Includes/GridFieldPaginator_Row.ss b/templates/Includes/GridFieldPaginator_Row.ss index 0b6911d5a..d6152447b 100644 --- a/templates/Includes/GridFieldPaginator_Row.ss +++ b/templates/Includes/GridFieldPaginator_Row.ss @@ -5,18 +5,18 @@
      $FirstPage $PreviousPage - <% _t('Pagination.Page', 'Page') %> + <%t Pagination.Page 'Page' %> - <% _t('TableListField_PageControls_ss.OF', 'of', 'Example: View 1 of 2') %> + <%t TableListField_PageControls_ss.OF 'of' is 'Example: View 1 of 2' %> $NumPages $NextPage $LastPage
      <% end_if %> - <% _t('Pagination.View', 'View', 'Verb. Example: View 1 of 2') %> + <%t Pagination.View 'View' is 'Verb. Example: View 1 of 2' %> {$FirstShownRecord}–{$LastShownRecord} - <% _t('TableListField_PageControls_ss.OF', 'of', 'Example: View 1 of 2') %> + <%t TableListField_PageControls_ss.OF 'of' is 'Example: View 1 of 2' %> $NumRecords diff --git a/templates/Includes/GridField_print.ss b/templates/Includes/GridField_print.ss index be23e8bba..129642223 100644 --- a/templates/Includes/GridField_print.ss +++ b/templates/Includes/GridField_print.ss @@ -16,15 +16,15 @@ <% end_loop %> <% else %> -

      <% _t('GridField.NoItemsFound', 'No items found') %>

      +

      <%t GridField.NoItemsFound 'No items found' %>

      <% end_if %>

      - <% _t('GridField.PRINTEDAT', 'Printed at') %> $Datetime.Time, $Datetime.Date + <%t GridField.PRINTEDAT 'Printed at' %> $Datetime.Time, $Datetime.Date
      - <% _t('GridField.PRINTEDBY', 'Printed by') %> $Member.Name + <%t GridField.PRINTEDBY 'Printed by' %> $Member.Name

      diff --git a/templates/Includes/HtmlEditorField_viewfile.ss b/templates/Includes/HtmlEditorField_viewfile.ss index b2c3251dd..0e5f42590 100644 --- a/templates/Includes/HtmlEditorField_viewfile.ss +++ b/templates/Includes/HtmlEditorField_viewfile.ss @@ -15,7 +15,7 @@ $Name <% if $Width %> -
      +
      {$Width} x {$Height} (px)
      <% end_if %> @@ -23,13 +23,13 @@
      -
      - <% end_if %> - + <% if $canDelete %> - + <% end_if %> <% if $UploadField.canAttachExisting %> - + <% end_if %> diff --git a/templates/UploadField.ss b/templates/UploadField.ss index 143344a1b..12b43da96 100644 --- a/templates/UploadField.ss +++ b/templates/UploadField.ss @@ -30,26 +30,26 @@ <% if canUpload %>
      <% if $multiple %> - <% _t('UploadField.DROPFILES', 'drop files') %> + <%t UploadField.DROPFILES 'drop files' %> <% else %> - <% _t('UploadField.DROPFILE', 'drop a file') %> + <%t UploadField.DROPFILE 'drop a file' %> <% end_if %>
      <% end_if %>
      <% if $canUpload %> -