From 99e4913a7e9ad19a73e63d2e2863df5f34edc45d Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Thu, 11 May 2017 07:42:08 +1000 Subject: [PATCH 001/112] Update composer to Laravel 5.5 @ dev --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 5870b4bbe..e57b6bb77 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,7 @@ "october/system": "~1.0", "october/backend": "~1.0", "october/cms": "~1.0", - "laravel/framework": "5.1.*", + "laravel/framework": "5.5.*@dev", "wikimedia/composer-merge-plugin": "dev-master" }, "require-dev": { From 30289f03f3dee2d75186780a0d0386f735a197ba Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Fri, 12 May 2017 07:18:02 +1000 Subject: [PATCH 002/112] Mail::pretend is gone --- config/mail.php | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/config/mail.php b/config/mail.php index f983b6938..96bd8f75d 100644 --- a/config/mail.php +++ b/config/mail.php @@ -108,17 +108,4 @@ return [ 'sendmail' => '/usr/sbin/sendmail -bs', - /* - |-------------------------------------------------------------------------- - | Mail "Pretend" - |-------------------------------------------------------------------------- - | - | When this option is enabled, e-mail will not actually be sent over the - | web and will instead be written to your application's logs files so - | you may inspect the message. This is great for local development. - | - */ - - 'pretend' => false, - ]; From 5ea79489af36d6c6e7e4a467ad1fdb2613b8ffcd Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Fri, 12 May 2017 07:19:06 +1000 Subject: [PATCH 003/112] pluck -> value This is an odd one from Laravel, pluck is now value and lists is now pluck. We'll need a release note about this one. --- modules/cms/classes/Theme.php | 4 ++-- modules/system/classes/VersionManager.php | 8 ++++++-- modules/system/reportwidgets/Status.php | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/modules/cms/classes/Theme.php b/modules/cms/classes/Theme.php index 1833d3730..8e7c29070 100644 --- a/modules/cms/classes/Theme.php +++ b/modules/cms/classes/Theme.php @@ -153,12 +153,12 @@ class Theme try { try { $dbResult = Cache::remember(self::ACTIVE_KEY, 1440, function () { - return Parameter::applyKey(self::ACTIVE_KEY)->pluck('value'); + return Parameter::applyKey(self::ACTIVE_KEY)->value('value'); }); } catch (Exception $ex) { // Cache failed - $dbResult = Parameter::applyKey(self::ACTIVE_KEY)->pluck('value'); + $dbResult = Parameter::applyKey(self::ACTIVE_KEY)->value('value'); } } catch (Exception $ex) { diff --git a/modules/system/classes/VersionManager.php b/modules/system/classes/VersionManager.php index 05576e27e..1e40beb7c 100644 --- a/modules/system/classes/VersionManager.php +++ b/modules/system/classes/VersionManager.php @@ -318,7 +318,7 @@ class VersionManager if (!isset($this->databaseVersions[$code])) { $this->databaseVersions[$code] = Db::table('system_plugin_versions') ->where('code', $code) - ->pluck('version') + ->value('version') ; } @@ -428,7 +428,11 @@ class VersionManager return $this->databaseHistory[$code]; } - $historyInfo = Db::table('system_plugin_history')->where('code', $code)->orderBy('id')->get(); + $historyInfo = Db::table('system_plugin_history') + ->where('code', $code) + ->orderBy('id') + ->get() + ->all(); return $this->databaseHistory[$code] = $historyInfo; } diff --git a/modules/system/reportwidgets/Status.php b/modules/system/reportwidgets/Status.php index 488825291..a956526d4 100644 --- a/modules/system/reportwidgets/Status.php +++ b/modules/system/reportwidgets/Status.php @@ -61,7 +61,7 @@ class Status extends ReportWidgetBase $this->vars['coreBuild'] = Parameter::get('system::core.build'); $this->vars['eventLog'] = EventLog::count(); $this->vars['requestLog'] = RequestLog::count(); - $this->vars['appBirthday'] = PluginVersion::orderBy('created_at')->pluck('created_at'); + $this->vars['appBirthday'] = PluginVersion::orderBy('created_at')->value('created_at'); } public function onLoadWarningsForm() From 165d50d9718f90c8a0280729be847d174494ad76 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Fri, 12 May 2017 07:19:45 +1000 Subject: [PATCH 004/112] Changed the logic to use the container binding event Validator is now deferred so this won't be available early --- modules/system/ServiceProvider.php | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/modules/system/ServiceProvider.php b/modules/system/ServiceProvider.php index 83a50ff98..4de9d8f3d 100644 --- a/modules/system/ServiceProvider.php +++ b/modules/system/ServiceProvider.php @@ -472,18 +472,19 @@ class ServiceProvider extends ModuleServiceProvider */ protected function registerValidator() { - /* - * Allowed file extensions, as opposed to mime types. - * - extensions: png,jpg,txt - */ - Validator::extend('extensions', function ($attribute, $value, $parameters) { - $extension = strtolower($value->getClientOriginalExtension()); - return in_array($extension, $parameters); - }); + $this->app->resolving('validator', function($validator) { + /* + * Allowed file extensions, as opposed to mime types. + * - extensions: png,jpg,txt + */ + $validator->extend('extensions', function ($attribute, $value, $parameters) { + $extension = strtolower($value->getClientOriginalExtension()); + return in_array($extension, $parameters); + }); - Validator::replacer('extensions', function ($message, $attribute, $rule, $parameters) { - return strtr($message, [':values' => implode(', ', $parameters)]); + $validator->replacer('extensions', function ($message, $attribute, $rule, $parameters) { + return strtr($message, [':values' => implode(', ', $parameters)]); + }); }); } - } From 8d658ea7eb4f452da25538192ed1defdb4c829ba Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Fri, 12 May 2017 07:20:10 +1000 Subject: [PATCH 005/112] Remove as per upgrade guide ControllerServiceProvider is no more --- modules/system/providers.php | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/system/providers.php b/modules/system/providers.php index bfed784eb..cc2ed6283 100644 --- a/modules/system/providers.php +++ b/modules/system/providers.php @@ -9,7 +9,6 @@ return [ Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, - Illuminate\Routing\ControllerServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class, From 5f2f9137326b546d9108dd785bdf5273e59de334 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Fri, 12 May 2017 07:20:59 +1000 Subject: [PATCH 006/112] Fixes unit tests Clearing the cache to allow failures Substitute mail pretend with log mode --- tests/PluginTestCase.php | 10 +++++----- tests/unit/cms/classes/CodeParserTest.php | 12 ++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/tests/PluginTestCase.php b/tests/PluginTestCase.php index 0a25dd2ec..0e3269ee1 100644 --- a/tests/PluginTestCase.php +++ b/tests/PluginTestCase.php @@ -34,6 +34,11 @@ abstract class PluginTestCase extends Illuminate\Foundation\Testing\TestCase 'prefix' => '' ]); + /* + * Mailer pretend + */ + $app['config']->set('mail.driver', 'log'); + /* * Modify the plugin path away from the test context */ @@ -73,11 +78,6 @@ abstract class PluginTestCase extends Illuminate\Foundation\Testing\TestCase if ($pluginCode !== false) { $this->runPluginRefreshCommand($pluginCode, false); } - - /* - * Disable mailer - */ - Mail::pretend(); } /** diff --git a/tests/unit/cms/classes/CodeParserTest.php b/tests/unit/cms/classes/CodeParserTest.php index da9443dbe..706d08a39 100644 --- a/tests/unit/cms/classes/CodeParserTest.php +++ b/tests/unit/cms/classes/CodeParserTest.php @@ -8,6 +8,18 @@ use Cms\Classes\Controller; class CodeParserTest extends TestCase { + public function setUp() + { + parent::setup(); + + /* + * Clear cache + */ + foreach (File::directories(storage_path().'/cms/cache') as $directory) { + File::deleteDirectory($directory); + } + } + public static function getProperty($name) { $class = new ReflectionClass('\Cms\Classes\CodeParser'); From bc23bc8fe63a67b41565694aece403aa33e37c9b Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 13 May 2017 06:49:29 +1000 Subject: [PATCH 007/112] getRelatedIds -> allRelatedIds Create a running document of breaking changes --- CHANGELOG.md | 9 +++++++++ tests/unit/plugins/database/BelongsToManyModelTest.php | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d38bebc5..a876485f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1 +1,10 @@ Changelog can be found here: http://octobercms.com/changelog + +### Breaking changes Laravel 5.5 + +- Database queries now return Collections instead of arrays! +- `pluck()` should be renamed to `value()` +- `getRelatedIds()` called from BelongsToMany is renamed to `allRelatedIds()` +- `Mail::pretend()` has been removed, use `Config::set('mail.driver', 'log');` instead + + diff --git a/tests/unit/plugins/database/BelongsToManyModelTest.php b/tests/unit/plugins/database/BelongsToManyModelTest.php index 5aef63778..8915eac11 100644 --- a/tests/unit/plugins/database/BelongsToManyModelTest.php +++ b/tests/unit/plugins/database/BelongsToManyModelTest.php @@ -102,7 +102,7 @@ class BelongsToManyModelTest extends PluginTestCase $this->assertEquals([$role1->id, $role2->id], $author->getRelationValue('roles')); // Get simple value (explicit) - $relatedIds = $author->roles()->getRelatedIds($sessionKey); + $relatedIds = $author->roles()->allRelatedIds($sessionKey)->all(); $this->assertEquals([$role1->id, $role2->id], $relatedIds); // Commit deferred @@ -162,5 +162,7 @@ class BelongsToManyModelTest extends PluginTestCase $author->roles()->add($role3, null, ['is_executive' => 0]); $this->assertEquals([1, 2], $author->executive_authors->lists('id')); + $this->assertEquals([1, 2], $author->executive_authors()->lists('id')); + $this->assertEquals([1, 2], $author->executive_authors()->get()->lists('id')); } } From 59d1e7736ce6fce19b9a0d046204cf1f1c31b3fa Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 13 May 2017 09:04:22 +1000 Subject: [PATCH 008/112] Bump min version to PHP 7 Restore tinker command --- composer.json | 4 +++- modules/backend/composer.json | 2 +- modules/cms/composer.json | 2 +- modules/system/composer.json | 2 +- modules/system/providers.php | 1 + 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index e57b6bb77..80dcaca8a 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,9 @@ "source": "https://github.com/octobercms/october" }, "require": { - "php": ">=5.5.9", + "php": ">=7.0", + "ext-mbstring": "*", + "ext-openssl": "*", "october/rain": "~1.0", "october/system": "~1.0", "october/backend": "~1.0", diff --git a/modules/backend/composer.json b/modules/backend/composer.json index 5690fe8cc..4d14827e1 100644 --- a/modules/backend/composer.json +++ b/modules/backend/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=5.5.9", + "php": ">=7.0", "composer/installers": "~1.0", "october/rain": "~1.0" }, diff --git a/modules/cms/composer.json b/modules/cms/composer.json index 18d6c1445..327e5d316 100644 --- a/modules/cms/composer.json +++ b/modules/cms/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=5.5.9", + "php": ">=7.0", "composer/installers": "~1.0", "october/rain": "~1.0" }, diff --git a/modules/system/composer.json b/modules/system/composer.json index ff3b30b28..0648b2041 100644 --- a/modules/system/composer.json +++ b/modules/system/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=5.5.9", + "php": ">=7.0", "composer/installers": "~1.0", "october/rain": "~1.0" }, diff --git a/modules/system/providers.php b/modules/system/providers.php index cc2ed6283..31ea6e7b0 100644 --- a/modules/system/providers.php +++ b/modules/system/providers.php @@ -20,6 +20,7 @@ return [ Illuminate\Session\SessionServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, + Laravel\Tinker\TinkerServiceProvider::class, /* * October Rain providers From 2b5709adb9453fb57f4447b424e826c9bfdd1e2a Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 13 May 2017 09:34:20 +1000 Subject: [PATCH 009/112] Bump Twig to v2, refit code --- CHANGELOG.md | 3 +-- modules/cms/twig/ComponentNode.php | 5 ++--- modules/cms/twig/ComponentTokenParser.php | 2 +- modules/cms/twig/ContentNode.php | 5 ++--- modules/cms/twig/ContentTokenParser.php | 2 +- modules/cms/twig/DefaultTokenParser.php | 2 +- modules/cms/twig/FlashNode.php | 3 +-- modules/cms/twig/FlashTokenParser.php | 2 +- modules/cms/twig/FrameworkTokenParser.php | 2 +- modules/cms/twig/Loader.php | 7 ++++--- modules/cms/twig/PageNode.php | 2 +- modules/cms/twig/PageTokenParser.php | 2 +- modules/cms/twig/PartialNode.php | 5 ++--- modules/cms/twig/PartialTokenParser.php | 2 +- modules/cms/twig/PlaceholderNode.php | 5 ++--- modules/cms/twig/PlaceholderTokenParser.php | 2 +- modules/cms/twig/PutNode.php | 7 +++---- modules/cms/twig/PutTokenParser.php | 2 +- modules/cms/twig/ScriptsNode.php | 4 ++-- modules/cms/twig/ScriptsTokenParser.php | 2 +- modules/cms/twig/StylesNode.php | 4 ++-- modules/cms/twig/StylesTokenParser.php | 2 +- modules/system/twig/Loader.php | 5 +++-- 23 files changed, 36 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a876485f2..9e0ce24af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,7 @@ Changelog can be found here: http://octobercms.com/changelog ### Breaking changes Laravel 5.5 - Database queries now return Collections instead of arrays! +- Twig has been updated to v2.0 - `pluck()` should be renamed to `value()` - `getRelatedIds()` called from BelongsToMany is renamed to `allRelatedIds()` - `Mail::pretend()` has been removed, use `Config::set('mail.driver', 'log');` instead - - diff --git a/modules/cms/twig/ComponentNode.php b/modules/cms/twig/ComponentNode.php index a7c0c11c8..db3ae85da 100644 --- a/modules/cms/twig/ComponentNode.php +++ b/modules/cms/twig/ComponentNode.php @@ -2,7 +2,6 @@ use Twig_Node; use Twig_Compiler; -use Twig_NodeInterface; /** * Represents a component node @@ -12,7 +11,7 @@ use Twig_NodeInterface; */ class ComponentNode extends Twig_Node { - public function __construct(Twig_NodeInterface $nodes, $paramNames, $lineno, $tag = 'component') + public function __construct(Twig_Node $nodes, $paramNames, $lineno, $tag = 'component') { parent::__construct(['nodes' => $nodes], ['names' => $paramNames], $lineno, $tag); } @@ -35,7 +34,7 @@ class ComponentNode extends Twig_Node } $compiler - ->write("echo \$this->env->getExtension('CMS')->componentFunction(") + ->write("echo \$this->env->getExtension('Cms\Twig\Extension')->componentFunction(") ->subcompile($this->getNode('nodes')->getNode(0)) ->write(", \$context['__cms_component_params']") ->write(");\n") diff --git a/modules/cms/twig/ComponentTokenParser.php b/modules/cms/twig/ComponentTokenParser.php index e40161003..fd7720435 100644 --- a/modules/cms/twig/ComponentTokenParser.php +++ b/modules/cms/twig/ComponentTokenParser.php @@ -19,7 +19,7 @@ class ComponentTokenParser extends Twig_TokenParser * Parses a token and returns a node. * * @param Twig_Token $token A Twig_Token instance - * @return Twig_NodeInterface A Twig_NodeInterface instance + * @return Twig_Node A Twig_Node instance */ public function parse(Twig_Token $token) { diff --git a/modules/cms/twig/ContentNode.php b/modules/cms/twig/ContentNode.php index 61d02b677..280ea2ce2 100644 --- a/modules/cms/twig/ContentNode.php +++ b/modules/cms/twig/ContentNode.php @@ -2,7 +2,6 @@ use Twig_Node; use Twig_Compiler; -use Twig_NodeInterface; /** * Represents a content node @@ -12,7 +11,7 @@ use Twig_NodeInterface; */ class ContentNode extends Twig_Node { - public function __construct(Twig_NodeInterface $nodes, $paramNames, $lineno, $tag = 'content') + public function __construct(Twig_Node $nodes, $paramNames, $lineno, $tag = 'content') { parent::__construct(['nodes' => $nodes], ['names' => $paramNames], $lineno, $tag); } @@ -37,7 +36,7 @@ class ContentNode extends Twig_Node } $compiler - ->write("echo \$this->env->getExtension('CMS')->contentFunction(") + ->write("echo \$this->env->getExtension('Cms\Twig\Extension')->contentFunction(") ->subcompile($this->getNode('nodes')->getNode(0)) ->write(", \$context['__cms_content_params']") ->write(");\n") diff --git a/modules/cms/twig/ContentTokenParser.php b/modules/cms/twig/ContentTokenParser.php index 207488ff5..9ca952123 100644 --- a/modules/cms/twig/ContentTokenParser.php +++ b/modules/cms/twig/ContentTokenParser.php @@ -23,7 +23,7 @@ class ContentTokenParser extends Twig_TokenParser * Parses a token and returns a node. * * @param Twig_Token $token A Twig_Token instance - * @return Twig_NodeInterface A Twig_NodeInterface instance + * @return Twig_Node A Twig_Node instance */ public function parse(Twig_Token $token) { diff --git a/modules/cms/twig/DefaultTokenParser.php b/modules/cms/twig/DefaultTokenParser.php index 87c90cfb0..8a1f8288e 100644 --- a/modules/cms/twig/DefaultTokenParser.php +++ b/modules/cms/twig/DefaultTokenParser.php @@ -20,7 +20,7 @@ class DefaultTokenParser extends Twig_TokenParser * Parses a token and returns a node. * * @param Twig_Token $token A Twig_Token instance - * @return Twig_NodeInterface A Twig_NodeInterface instance + * @return Twig_Node A Twig_Node instance */ public function parse(Twig_Token $token) { diff --git a/modules/cms/twig/FlashNode.php b/modules/cms/twig/FlashNode.php index 42b036c26..1658b8bc6 100644 --- a/modules/cms/twig/FlashNode.php +++ b/modules/cms/twig/FlashNode.php @@ -2,7 +2,6 @@ use Twig_Node; use Twig_Compiler; -use Twig_NodeInterface; use Twig_Node_Expression; /** @@ -13,7 +12,7 @@ use Twig_Node_Expression; */ class FlashNode extends Twig_Node { - public function __construct($name, Twig_NodeInterface $body, $lineno, $tag = 'flash') + public function __construct($name, Twig_Node $body, $lineno, $tag = 'flash') { parent::__construct(['body' => $body], ['name' => $name], $lineno, $tag); } diff --git a/modules/cms/twig/FlashTokenParser.php b/modules/cms/twig/FlashTokenParser.php index ced972b5e..aca671b77 100644 --- a/modules/cms/twig/FlashTokenParser.php +++ b/modules/cms/twig/FlashTokenParser.php @@ -18,7 +18,7 @@ class FlashTokenParser extends Twig_TokenParser * * @param Twig_Token $token A Twig_Token instance * - * @return Twig_NodeInterface A Twig_NodeInterface instance + * @return Twig_Node A Twig_Node instance */ public function parse(Twig_Token $token) { diff --git a/modules/cms/twig/FrameworkTokenParser.php b/modules/cms/twig/FrameworkTokenParser.php index 0e51b2fa1..192b3c011 100644 --- a/modules/cms/twig/FrameworkTokenParser.php +++ b/modules/cms/twig/FrameworkTokenParser.php @@ -17,7 +17,7 @@ class FrameworkTokenParser extends Twig_TokenParser * Parses a token and returns a node. * * @param Twig_Token $token A Twig_Token instance - * @return Twig_NodeInterface A Twig_NodeInterface instance + * @return Twig_Node A Twig_Node instance */ public function parse(Twig_Token $token) { diff --git a/modules/cms/twig/Loader.php b/modules/cms/twig/Loader.php index 1d879a8b9..c74450c8c 100644 --- a/modules/cms/twig/Loader.php +++ b/modules/cms/twig/Loader.php @@ -1,6 +1,7 @@ validateCmsObject($name)) { - return parent::getSource($name); + return parent::getSourceContext($name); } $content = $this->obj->getTwigContent(); @@ -52,7 +53,7 @@ class Loader extends LoaderBase implements Twig_LoaderInterface Event::fire('cms.template.processTwigContent', [$this->obj, $dataHolder]); - return $dataHolder->content; + return new Twig_Source($dataHolder->content, $name); } /** diff --git a/modules/cms/twig/PageNode.php b/modules/cms/twig/PageNode.php index 64338f120..39ef0a81b 100644 --- a/modules/cms/twig/PageNode.php +++ b/modules/cms/twig/PageNode.php @@ -25,7 +25,7 @@ class PageNode extends Twig_Node { $compiler ->addDebugInfo($this) - ->write("echo \$this->env->getExtension('CMS')->pageFunction();\n") + ->write("echo \$this->env->getExtension('Cms\Twig\Extension')->pageFunction();\n") ; } } diff --git a/modules/cms/twig/PageTokenParser.php b/modules/cms/twig/PageTokenParser.php index 17fe8852b..056aac58d 100644 --- a/modules/cms/twig/PageTokenParser.php +++ b/modules/cms/twig/PageTokenParser.php @@ -17,7 +17,7 @@ class PageTokenParser extends Twig_TokenParser * Parses a token and returns a node. * * @param Twig_Token $token A Twig_Token instance - * @return Twig_NodeInterface A Twig_NodeInterface instance + * @return Twig_Node A Twig_Node instance */ public function parse(Twig_Token $token) { diff --git a/modules/cms/twig/PartialNode.php b/modules/cms/twig/PartialNode.php index e2b779b4b..baf9778bb 100644 --- a/modules/cms/twig/PartialNode.php +++ b/modules/cms/twig/PartialNode.php @@ -2,7 +2,6 @@ use Twig_Node; use Twig_Compiler; -use Twig_NodeInterface; /** * Represents a partial node @@ -12,7 +11,7 @@ use Twig_NodeInterface; */ class PartialNode extends Twig_Node { - public function __construct(Twig_NodeInterface $nodes, $paramNames, $lineno, $tag = 'partial') + public function __construct(Twig_Node $nodes, $paramNames, $lineno, $tag = 'partial') { parent::__construct(['nodes' => $nodes], ['names' => $paramNames], $lineno, $tag); } @@ -35,7 +34,7 @@ class PartialNode extends Twig_Node } $compiler - ->write("echo \$this->env->getExtension('CMS')->partialFunction(") + ->write("echo \$this->env->getExtension('Cms\Twig\Extension')->partialFunction(") ->subcompile($this->getNode('nodes')->getNode(0)) ->write(", \$context['__cms_partial_params']") ->write(");\n") diff --git a/modules/cms/twig/PartialTokenParser.php b/modules/cms/twig/PartialTokenParser.php index 905f5388c..3a9c068d2 100644 --- a/modules/cms/twig/PartialTokenParser.php +++ b/modules/cms/twig/PartialTokenParser.php @@ -23,7 +23,7 @@ class PartialTokenParser extends Twig_TokenParser * Parses a token and returns a node. * * @param Twig_Token $token A Twig_Token instance - * @return Twig_NodeInterface A Twig_NodeInterface instance + * @return Twig_Node A Twig_Node instance */ public function parse(Twig_Token $token) { diff --git a/modules/cms/twig/PlaceholderNode.php b/modules/cms/twig/PlaceholderNode.php index 650f147c7..c1697a36c 100644 --- a/modules/cms/twig/PlaceholderNode.php +++ b/modules/cms/twig/PlaceholderNode.php @@ -2,7 +2,6 @@ use Twig_Node; use Twig_Compiler; -use Twig_NodeInterface; /** * Represents a placeholder node @@ -53,10 +52,10 @@ class PlaceholderNode extends Twig_Node $compiler->addDebugInfo($this); if (!$isText) { - $compiler->write("echo \$this->env->getExtension('CMS')->displayBlock("); + $compiler->write("echo \$this->env->getExtension('Cms\Twig\Extension')->displayBlock("); } else { - $compiler->write("echo twig_escape_filter(\$this->env, \$this->env->getExtension('CMS')->displayBlock("); + $compiler->write("echo twig_escape_filter(\$this->env, \$this->env->getExtension('Cms\Twig\Extension')->displayBlock("); } $compiler diff --git a/modules/cms/twig/PlaceholderTokenParser.php b/modules/cms/twig/PlaceholderTokenParser.php index 3759f15c6..ac372f003 100644 --- a/modules/cms/twig/PlaceholderTokenParser.php +++ b/modules/cms/twig/PlaceholderTokenParser.php @@ -25,7 +25,7 @@ class PlaceholderTokenParser extends Twig_TokenParser * Parses a token and returns a node. * * @param Twig_Token $token A Twig_Token instance - * @return Twig_NodeInterface A Twig_NodeInterface instance + * @return Twig_Node A Twig_Node instance */ public function parse(Twig_Token $token) { diff --git a/modules/cms/twig/PutNode.php b/modules/cms/twig/PutNode.php index a48eb5365..c98e38731 100644 --- a/modules/cms/twig/PutNode.php +++ b/modules/cms/twig/PutNode.php @@ -2,7 +2,6 @@ use Twig_Node; use Twig_Compiler; -use Twig_NodeInterface; /** * Represents a put node @@ -12,7 +11,7 @@ use Twig_NodeInterface; */ class PutNode extends Twig_Node { - public function __construct(Twig_NodeInterface $body, $name, $endType, $lineno, $tag = 'put') + public function __construct(Twig_Node $body, $name, $endType, $lineno, $tag = 'put') { parent::__construct(['body' => $body], ['name' => $name, 'endType' => $endType], $lineno, $tag); } @@ -26,7 +25,7 @@ class PutNode extends Twig_Node { $compiler ->addDebugInfo($this) - ->write("echo \$this->env->getExtension('CMS')->startBlock(") + ->write("echo \$this->env->getExtension('Cms\Twig\Extension')->startBlock(") ->raw("'".$this->getAttribute('name')."'") ->write(");\n") ; @@ -37,7 +36,7 @@ class PutNode extends Twig_Node $compiler ->addDebugInfo($this) - ->write("echo \$this->env->getExtension('CMS')->endBlock(") + ->write("echo \$this->env->getExtension('Cms\Twig\Extension')->endBlock(") ->raw($isOverwrite ? 'false' : 'true') ->write(");\n") ; diff --git a/modules/cms/twig/PutTokenParser.php b/modules/cms/twig/PutTokenParser.php index 0135a8ff0..f13248522 100644 --- a/modules/cms/twig/PutTokenParser.php +++ b/modules/cms/twig/PutTokenParser.php @@ -26,7 +26,7 @@ class PutTokenParser extends Twig_TokenParser * Parses a token and returns a node. * * @param Twig_Token $token A Twig_Token instance - * @return Twig_NodeInterface A Twig_NodeInterface instance + * @return Twig_Node A Twig_Node instance */ public function parse(Twig_Token $token) { diff --git a/modules/cms/twig/ScriptsNode.php b/modules/cms/twig/ScriptsNode.php index b40104c24..72324b6fb 100644 --- a/modules/cms/twig/ScriptsNode.php +++ b/modules/cms/twig/ScriptsNode.php @@ -25,8 +25,8 @@ class ScriptsNode extends Twig_Node { $compiler ->addDebugInfo($this) - ->write("echo \$this->env->getExtension('CMS')->assetsFunction('js');\n") - ->write("echo \$this->env->getExtension('CMS')->displayBlock('scripts');\n") + ->write("echo \$this->env->getExtension('Cms\Twig\Extension')->assetsFunction('js');\n") + ->write("echo \$this->env->getExtension('Cms\Twig\Extension')->displayBlock('scripts');\n") ; } } diff --git a/modules/cms/twig/ScriptsTokenParser.php b/modules/cms/twig/ScriptsTokenParser.php index be3794a1f..ac3ab21fb 100644 --- a/modules/cms/twig/ScriptsTokenParser.php +++ b/modules/cms/twig/ScriptsTokenParser.php @@ -17,7 +17,7 @@ class ScriptsTokenParser extends Twig_TokenParser * Parses a token and returns a node. * * @param Twig_Token $token A Twig_Token instance - * @return Twig_NodeInterface A Twig_NodeInterface instance + * @return Twig_Node A Twig_Node instance */ public function parse(Twig_Token $token) { diff --git a/modules/cms/twig/StylesNode.php b/modules/cms/twig/StylesNode.php index 3c38a2590..5905d001d 100644 --- a/modules/cms/twig/StylesNode.php +++ b/modules/cms/twig/StylesNode.php @@ -25,8 +25,8 @@ class StylesNode extends Twig_Node { $compiler ->addDebugInfo($this) - ->write("echo \$this->env->getExtension('CMS')->assetsFunction('css');\n") - ->write("echo \$this->env->getExtension('CMS')->displayBlock('styles');\n") + ->write("echo \$this->env->getExtension('Cms\Twig\Extension')->assetsFunction('css');\n") + ->write("echo \$this->env->getExtension('Cms\Twig\Extension')->displayBlock('styles');\n") ; } } diff --git a/modules/cms/twig/StylesTokenParser.php b/modules/cms/twig/StylesTokenParser.php index 846675025..05621d0b9 100644 --- a/modules/cms/twig/StylesTokenParser.php +++ b/modules/cms/twig/StylesTokenParser.php @@ -17,7 +17,7 @@ class StylesTokenParser extends Twig_TokenParser * Parses a token and returns a node. * * @param Twig_Token $token A Twig_Token instance - * @return Twig_NodeInterface A Twig_NodeInterface instance + * @return Twig_Node A Twig_Node instance */ public function parse(Twig_Token $token) { diff --git a/modules/system/twig/Loader.php b/modules/system/twig/Loader.php index 593e9b90a..eb17d3717 100644 --- a/modules/system/twig/Loader.php +++ b/modules/system/twig/Loader.php @@ -2,6 +2,7 @@ use App; use File; +use Twig_Source; use Twig_LoaderInterface; use Exception; @@ -49,9 +50,9 @@ class Loader implements Twig_LoaderInterface return $this->cache[$name] = $path; } - public function getSource($name) + public function getSourceContext($name) { - return File::get($this->findTemplate($name)); + return new Twig_Source(File::get($this->findTemplate($name)), $name); } public function getCacheKey($name) From 6b74efa4b0a5d8ae9f63232e01124dfe82fd0091 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 13 May 2017 10:20:18 +1000 Subject: [PATCH 010/112] Improves the DebugExtension It now uses the HtmlDumper from Illuminate to elaborate on each variable when clicked getName() no longer needed on Twig extensions --- modules/cms/twig/DebugExtension.php | 78 +++++++++++++++++++++-------- modules/cms/twig/Extension.php | 10 ---- modules/system/twig/Extension.php | 10 ---- 3 files changed, 58 insertions(+), 40 deletions(-) diff --git a/modules/cms/twig/DebugExtension.php b/modules/cms/twig/DebugExtension.php index 80a4759dc..cf58389b5 100644 --- a/modules/cms/twig/DebugExtension.php +++ b/modules/cms/twig/DebugExtension.php @@ -7,6 +7,8 @@ use Cms\Classes\Controller; use Cms\Classes\ComponentBase; use Illuminate\Pagination\Paginator; use Illuminate\Support\Collection; +use Illuminate\Support\Debug\HtmlDumper; +use Symfony\Component\VarDumper\Cloner\VarCloner; use October\Rain\Database\Model; class DebugExtension extends Twig_Extension @@ -36,6 +38,9 @@ class DebugExtension extends Twig_Extension */ protected $commentMap = []; + /** + * @var array Blocked object methods that should not be included in the dump. + */ protected $blockMethods = [ 'componentDetails', 'defineProperties', @@ -57,7 +62,6 @@ class DebugExtension extends Twig_Extension /** * Returns a list of global functions to add to the existing list. - * * @return array An array of global functions */ public function getFunctions() @@ -128,19 +132,8 @@ class DebugExtension extends Twig_Extension return $result; } - /** - * Returns the name of the extension. - * - * @return string The extension name - */ - public function getName() - { - return 'debug'; - } - /** * Dump information about a variable - * * @param mixed $variables Variable to dump * @param mixed $caption Caption [and subcaption] of the dump * @return void @@ -217,13 +210,49 @@ class DebugExtension extends Twig_Extension $css = $this->getDataCss($variable); $output = []; $output[] = ''; - $output[] = ''.$this->evalKeyLabel($key).''; + $output[] = ''.$this->evalKeyLabel($key).''; $output[] = ''.$this->evalVarLabel($variable).''; $output[] = ''.$this->evalVarDesc($variable, $key).''; $output[] = ''; + $output[] = ''; + $output[] = ''.$this->evalVarDump($variable).''; + $output[] = ''; return implode(PHP_EOL, $output); } + /** + * Builds JavaScript for toggling the dump container + * @return string + */ + protected function evalToggleDumpOnClick() + { + $output = "var d=this.parentElement.nextElementSibling.getElementsByTagName('div')[0];"; + $output .= "d.style.display=='none'?d.style.display='block':d.style.display='none'"; + return $output; + } + + /** + * Dumps a variable using HTML Dumper, wrapped in a hidden DIV element. + * @param mixed $variable + * @return string + */ + protected function evalVarDump($variable) + { + $dumper = new HtmlDumper; + $cloner = new VarCloner; + + $output = '
'; + $output .= $dumper->dump($cloner->cloneVar($variable), true); + $output .= '
'; + + return $output; + } + + /** + * Returns a variable name as HTML friendly. + * @param string $key + * @return string + */ protected function evalKeyLabel($key) { if ($this->variablePrefix === true) { @@ -385,6 +414,11 @@ class DebugExtension extends Twig_Extension // Object helpers // + /** + * Returns default comment information for a paginator object. + * @param Illuminate\Pagination\Paginator $paginator + * @return array + */ protected function paginatorToArray(Paginator $paginator) { $this->commentMap = [ @@ -410,7 +444,11 @@ class DebugExtension extends Twig_Extension ]; } - + /** + * Returns a map of an object as an array, containing methods and properties. + * @param mixed $object + * @return array + */ protected function objectToArray($object) { $class = get_class($object); @@ -463,6 +501,11 @@ class DebugExtension extends Twig_Extension return $methods + $vars; } + /** + * Extracts the comment from a DocBlock + * @param ReflectionClass $reflectionObj + * @return string + */ protected function evalDocBlock($reflectionObj) { $comment = $reflectionObj->getDocComment(); @@ -476,14 +519,13 @@ class DebugExtension extends Twig_Extension return $comment; } - // // Style helpers // /** * Get the CSS string for the output data - * + * @param mixed $variable * @return string */ protected function getDataCss($variable) @@ -504,7 +546,6 @@ class DebugExtension extends Twig_Extension /** * Get the CSS string for the output container - * * @return string */ protected function getContainerCss() @@ -523,7 +564,6 @@ class DebugExtension extends Twig_Extension /** * Get the CSS string for the output header - * * @return string */ protected function getHeaderCss() @@ -540,7 +580,6 @@ class DebugExtension extends Twig_Extension /** * Get the CSS string for the output subheader - * * @return string */ protected function getSubheaderCss() @@ -558,7 +597,6 @@ class DebugExtension extends Twig_Extension /** * Convert a key/value pair array into a CSS string - * * @param array $rules List of rules to process * @return string */ diff --git a/modules/cms/twig/Extension.php b/modules/cms/twig/Extension.php index 7ff415832..44069d6b0 100644 --- a/modules/cms/twig/Extension.php +++ b/modules/cms/twig/Extension.php @@ -34,16 +34,6 @@ class Extension extends Twig_Extension $this->controller = $controller; } - /** - * Returns the name of the extension. - * - * @return string The extension name - */ - public function getName() - { - return 'CMS'; - } - /** * Returns a list of functions to add to the existing list. * diff --git a/modules/system/twig/Extension.php b/modules/system/twig/Extension.php index 21db7d5f4..4ed80df37 100644 --- a/modules/system/twig/Extension.php +++ b/modules/system/twig/Extension.php @@ -30,16 +30,6 @@ class Extension extends Twig_Extension $this->markupManager = MarkupManager::instance(); } - /** - * Returns the name of the extension. - * - * @return string The extension name - */ - public function getName() - { - return 'System'; - } - /** * Returns a list of functions to add to the existing list. * From 2fdeec246def816d941560d8807ed43caa1e5bd1 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 13 May 2017 10:22:46 +1000 Subject: [PATCH 011/112] Update PHP >=7.0 --- .travis.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 906c7b881..bb7145e54 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ language: php php: - - 5.5 - - 5.6 - 7.0 - 7.1 - hhvm @@ -10,8 +8,7 @@ php: matrix: allow_failures: - - php: 7.0 - - php: 7.1 + - php: hhvm - php: nightly sudo: false From f3aad33e5e1cddcebdc49201f42767a24062ac9d Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 13 May 2017 12:31:34 +1000 Subject: [PATCH 012/112] Resurrect Mail::pretend Moved upgrade guide to RN-9 http://octobercms.com/support/article/rn-9 --- CHANGELOG.md | 8 -------- tests/PluginTestCase.php | 4 ++-- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e0ce24af..3d38bebc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1 @@ Changelog can be found here: http://octobercms.com/changelog - -### Breaking changes Laravel 5.5 - -- Database queries now return Collections instead of arrays! -- Twig has been updated to v2.0 -- `pluck()` should be renamed to `value()` -- `getRelatedIds()` called from BelongsToMany is renamed to `allRelatedIds()` -- `Mail::pretend()` has been removed, use `Config::set('mail.driver', 'log');` instead diff --git a/tests/PluginTestCase.php b/tests/PluginTestCase.php index 0e3269ee1..f3c4f43bd 100644 --- a/tests/PluginTestCase.php +++ b/tests/PluginTestCase.php @@ -35,9 +35,9 @@ abstract class PluginTestCase extends Illuminate\Foundation\Testing\TestCase ]); /* - * Mailer pretend + * Disable mailer */ - $app['config']->set('mail.driver', 'log'); + Mail::pretend(); /* * Modify the plugin path away from the test context From 8a95fec188a473d84f1b98e9b9217c8716ac90db Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 13 May 2017 20:43:44 +1000 Subject: [PATCH 013/112] Refit october:down --- modules/system/classes/UpdateManager.php | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/modules/system/classes/UpdateManager.php b/modules/system/classes/UpdateManager.php index 0f1120687..ecaa3bbd9 100644 --- a/modules/system/classes/UpdateManager.php +++ b/modules/system/classes/UpdateManager.php @@ -81,6 +81,16 @@ class UpdateManager */ protected $productCache; + /** + * @var Illuminate\Database\Migrations\Migrator + */ + protected $migrator; + + /** + * @var Illuminate\Database\Migrations\DatabaseMigrationRepository + */ + protected $repository; + /** * Initialize this singleton. */ @@ -316,23 +326,24 @@ class UpdateManager /* * Register module migration files */ + $paths = []; $modules = Config::get('cms.loadModules', []); + foreach ($modules as $module) { - $path = base_path() . '/modules/'.strtolower($module).'/database/migrations'; - $this->migrator->requireFiles($path, $this->migrator->getMigrationFiles($path)); + $paths[] = $path = base_path() . '/modules/'.strtolower($module).'/database/migrations'; } /* * Rollback modules */ while (true) { - $count = $this->migrator->rollback(); + $rolledBack = $this->migrator->rollback($paths, ['pretend' => false]); foreach ($this->migrator->getNotes() as $note) { $this->note($note); } - if ($count == 0) { + if (count($rolledBack) == 0) { break; } } From 453e48924eb3bc941b9b46348f6a7fe63ec65d60 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 13 May 2017 22:18:13 +1000 Subject: [PATCH 014/112] Apply web middleware group for the good cookies --- modules/backend/routes.php | 12 ++++++++---- modules/cms/routes.php | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/modules/backend/routes.php b/modules/backend/routes.php index efe3be4ef..c89ff91a4 100644 --- a/modules/backend/routes.php +++ b/modules/backend/routes.php @@ -12,14 +12,18 @@ App::before(function ($request) { /* * Other pages */ - Route::group(['prefix' => Config::get('cms.backendUri', 'backend')], function () { - Route::any('{slug}', 'Backend\Classes\BackendController@run')->where('slug', '(.*)?'); - }); + Route::group([ + 'middleware' => ['web'], + 'prefix' => Config::get('cms.backendUri', 'backend') + ], function () { + Route::any('{slug}', 'Backend\Classes\BackendController@run')->where('slug', '(.*)?'); + }) + ; /* * Entry point */ - Route::any(Config::get('cms.backendUri', 'backend'), 'Backend\Classes\BackendController@run'); + Route::any(Config::get('cms.backendUri', 'backend'), 'Backend\Classes\BackendController@run')->middleware('web'); /* * Extensibility diff --git a/modules/cms/routes.php b/modules/cms/routes.php index b17cd169e..9826a6dec 100644 --- a/modules/cms/routes.php +++ b/modules/cms/routes.php @@ -13,7 +13,7 @@ App::before(function ($request) { * The CMS module intercepts all URLs that were not * handled by the back-end modules. */ - Route::any('{slug}', 'Cms\Classes\CmsController@run')->where('slug', '(.*)?'); + Route::any('{slug}', 'Cms\Classes\CmsController@run')->where('slug', '(.*)?')->middleware('web'); /* * Extensibility From f4a9615b516fabae03b5c864f2cc538f53c0d473 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 13 May 2017 22:54:25 +1000 Subject: [PATCH 015/112] Use flash error instead of alert() --- plugins/october/demo/components/todo/default.htm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/october/demo/components/todo/default.htm b/plugins/october/demo/components/todo/default.htm index 9d29a98d7..c9f7b228e 100644 --- a/plugins/october/demo/components/todo/default.htm +++ b/plugins/october/demo/components/todo/default.htm @@ -1,7 +1,8 @@
+ data-request-success="$('#input-item').val('')" + data-request-flash>

To Do List

From 0e4d05d150050564e952645595d7b930316a77e1 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Tue, 16 May 2017 18:49:05 +1000 Subject: [PATCH 016/112] Add migrations to queue database tables --- composer.json | 2 +- ...10_01_000021_Db_System_Sessions_Update.php | 31 +++++++++++ ...10_01_000022_Db_Jobs_FailedJobs_Update.php | 51 +++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 modules/system/database/migrations/2017_10_01_000021_Db_System_Sessions_Update.php create mode 100644 modules/system/database/migrations/2017_10_01_000022_Db_Jobs_FailedJobs_Update.php diff --git a/composer.json b/composer.json index 80dcaca8a..48596c47c 100644 --- a/composer.json +++ b/composer.json @@ -36,7 +36,7 @@ }, "require-dev": { "fzaninotto/faker": "~1.4", - "phpunit/phpunit": "~4.0", + "phpunit/phpunit": "~5.7", "phpunit/phpunit-selenium": "~1.2" }, "autoload-dev": { diff --git a/modules/system/database/migrations/2017_10_01_000021_Db_System_Sessions_Update.php b/modules/system/database/migrations/2017_10_01_000021_Db_System_Sessions_Update.php new file mode 100644 index 000000000..b71827696 --- /dev/null +++ b/modules/system/database/migrations/2017_10_01_000021_Db_System_Sessions_Update.php @@ -0,0 +1,31 @@ +unsignedInteger('user_id')->nullable(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // ... + } +} diff --git a/modules/system/database/migrations/2017_10_01_000022_Db_Jobs_FailedJobs_Update.php b/modules/system/database/migrations/2017_10_01_000022_Db_Jobs_FailedJobs_Update.php new file mode 100644 index 000000000..0defb3f6e --- /dev/null +++ b/modules/system/database/migrations/2017_10_01_000022_Db_Jobs_FailedJobs_Update.php @@ -0,0 +1,51 @@ +getTableName(), function (Blueprint $table) { + $table->dropColumn('reserved'); + $table->index(['queue', 'reserved_at']); + }); + + Schema::table($this->getFailedTableName(), function (Blueprint $table) { + $table->longText('exception')->nullable()->after('payload'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table($this->getTableName(), function (Blueprint $table) { + $table->tinyInteger('reserved')->unsigned(); + $table->dropIndex('jobs_queue_reserved_at_index'); + }); + + Schema::table($this->getFailedTableName(), function (Blueprint $table) { + $table->dropColumn('exception'); + }); + } + + protected function getTableName() + { + return Config::get('queue.connections.database.table', 'jobs'); + } + + protected function getFailedTableName() + { + return Config::get('queue.failed.table', 'failed_jobs'); + } +} From 671f23e28476ce715ee100decfd5de636125a412 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Tue, 16 May 2017 18:50:22 +1000 Subject: [PATCH 017/112] Move mail pretend to after app has migrated --- tests/PluginTestCase.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/PluginTestCase.php b/tests/PluginTestCase.php index f3c4f43bd..0a25dd2ec 100644 --- a/tests/PluginTestCase.php +++ b/tests/PluginTestCase.php @@ -34,11 +34,6 @@ abstract class PluginTestCase extends Illuminate\Foundation\Testing\TestCase 'prefix' => '' ]); - /* - * Disable mailer - */ - Mail::pretend(); - /* * Modify the plugin path away from the test context */ @@ -78,6 +73,11 @@ abstract class PluginTestCase extends Illuminate\Foundation\Testing\TestCase if ($pluginCode !== false) { $this->runPluginRefreshCommand($pluginCode, false); } + + /* + * Disable mailer + */ + Mail::pretend(); } /** From 7e76f39e6c6d8793472d97e3b409f68551b09cb4 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Tue, 16 May 2017 18:50:41 +1000 Subject: [PATCH 018/112] Add app.name config Various other refittings --- config/app.php | 12 ++++++++++++ modules/backend/classes/Controller.php | 3 +-- modules/backend/widgets/Lists.php | 2 +- modules/system/providers.php | 1 - 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/config/app.php b/config/app.php index 87cc0b602..7e6474bc7 100644 --- a/config/app.php +++ b/config/app.php @@ -18,6 +18,18 @@ return [ 'debug' => true, + /* + |-------------------------------------------------------------------------- + | Application Name + |-------------------------------------------------------------------------- + | + | This value is the name of your application. This value is used when the + | framework needs to place the application's name in a notification or + | any other location as required by the application or its packages. + */ + + 'name' => 'October CMS', + /* |-------------------------------------------------------------------------- | Application URL diff --git a/modules/backend/classes/Controller.php b/modules/backend/classes/Controller.php index b8c82c176..b38417fb4 100644 --- a/modules/backend/classes/Controller.php +++ b/modules/backend/classes/Controller.php @@ -1,7 +1,6 @@ model->{$column->relation}(); - $countQuery = $relationObj->getRelationCountQuery($relationObj->getRelated()->newQueryWithoutScopes(), $query); + $countQuery = $relationObj->getRelationExistenceQuery($relationObj->getRelated()->newQueryWithoutScopes(), $query); $joinSql = $this->isColumnRelated($column, true) ? DbDongle::raw("group_concat(" . $sqlSelect . " separator ', ')") diff --git a/modules/system/providers.php b/modules/system/providers.php index 31ea6e7b0..bb395888e 100644 --- a/modules/system/providers.php +++ b/modules/system/providers.php @@ -25,7 +25,6 @@ return [ /* * October Rain providers */ - October\Rain\Foundation\Providers\ArtisanServiceProvider::class, October\Rain\Database\DatabaseServiceProvider::class, October\Rain\Halcyon\HalcyonServiceProvider::class, October\Rain\Filesystem\FilesystemServiceProvider::class, From 081a32c92890d659e026ea8f13ea1a5998df12ca Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Fri, 19 May 2017 06:13:03 +1000 Subject: [PATCH 019/112] Change versions for testing --- composer.json | 8 ++++---- modules/backend/composer.json | 2 +- modules/cms/composer.json | 2 +- modules/system/composer.json | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/composer.json b/composer.json index 48596c47c..5bfb6980f 100644 --- a/composer.json +++ b/composer.json @@ -27,10 +27,10 @@ "php": ">=7.0", "ext-mbstring": "*", "ext-openssl": "*", - "october/rain": "~1.0", - "october/system": "~1.0", - "october/backend": "~1.0", - "october/cms": "~1.0", + "october/rain": "dev-l55upgrade", + "october/system": "dev-l55upgrade", + "october/backend": "dev-l55upgrade", + "october/cms": "dev-l55upgrade", "laravel/framework": "5.5.*@dev", "wikimedia/composer-merge-plugin": "dev-master" }, diff --git a/modules/backend/composer.json b/modules/backend/composer.json index 4d14827e1..8c684fe6f 100644 --- a/modules/backend/composer.json +++ b/modules/backend/composer.json @@ -18,7 +18,7 @@ "require": { "php": ">=7.0", "composer/installers": "~1.0", - "october/rain": "~1.0" + "october/rain": "dev-l55upgrade" }, "autoload": { "psr-4": { diff --git a/modules/cms/composer.json b/modules/cms/composer.json index 327e5d316..8772a4ff6 100644 --- a/modules/cms/composer.json +++ b/modules/cms/composer.json @@ -18,7 +18,7 @@ "require": { "php": ">=7.0", "composer/installers": "~1.0", - "october/rain": "~1.0" + "october/rain": "dev-l55upgrade" }, "autoload": { "psr-4": { diff --git a/modules/system/composer.json b/modules/system/composer.json index 0648b2041..4c251570e 100644 --- a/modules/system/composer.json +++ b/modules/system/composer.json @@ -18,7 +18,7 @@ "require": { "php": ">=7.0", "composer/installers": "~1.0", - "october/rain": "~1.0" + "october/rain": "dev-l55upgrade" }, "autoload": { "psr-4": { From 84597b95cefec4fcd0977e5c86152bedc5351247 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Fri, 19 May 2017 22:47:26 +1000 Subject: [PATCH 020/112] Multitenancy --- config/environment.php | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 config/environment.php diff --git a/config/environment.php b/config/environment.php new file mode 100644 index 000000000..bbd93ff20 --- /dev/null +++ b/config/environment.php @@ -0,0 +1,35 @@ + 'production', + + /* + |-------------------------------------------------------------------------- + | Environment Multitenancy + |-------------------------------------------------------------------------- + | + | You may specify a different environment according to the hostname that + | is provided with the HTTP request. This is useful if you want to use + | different configuration, such as database and theme, per hostname. + | + */ + + 'hosts' => [ + + 'localhost' => 'dev', + + ], + +]; From 6136e89a544e23039def74b156731ce72096183a Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 20 May 2017 00:31:50 +1000 Subject: [PATCH 021/112] share -> singleton --- modules/system/classes/PluginBase.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/system/classes/PluginBase.php b/modules/system/classes/PluginBase.php index 8dbac748d..613ef5c97 100644 --- a/modules/system/classes/PluginBase.php +++ b/modules/system/classes/PluginBase.php @@ -218,7 +218,8 @@ class PluginBase extends ServiceProviderBase public function registerConsoleCommand($key, $class) { $key = 'command.'.$key; - $this->app[$key] = $this->app->share(function ($app) use ($class) { + + $this->app->singleton($key, function ($app) use ($class) { return new $class; }); From 04f89dc5bbf63fa6488bfad8303c2e667971e9a1 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 20 May 2017 13:19:51 +1000 Subject: [PATCH 022/112] getToken -> token --- modules/backend/classes/Controller.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/backend/classes/Controller.php b/modules/backend/classes/Controller.php index b38417fb4..891bd9282 100644 --- a/modules/backend/classes/Controller.php +++ b/modules/backend/classes/Controller.php @@ -704,7 +704,7 @@ class Controller extends Extendable $token = Request::input('_token') ?: Request::header('X-CSRF-TOKEN'); return hash_equals( - Session::getToken(), + Session::token(), $token ); } From aa393dc54b3fd8f8790f369c941f8fa406d52400 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 20 May 2017 17:37:58 +1000 Subject: [PATCH 023/112] Backend style improvements This should make Windows PCs look a little nicer, albeit inconsistent with others (Sergoe UI is unique). If it's good enough for GitHub, then it's good enough for October. All text shadows have been stripped, along with some box shading. They were barely noticeable and should speed up the UI. --- modules/backend/assets/css/october.css | 23 +++---- .../assets/less/controls/sidenav-tree.less | 21 +----- .../backend/assets/less/core/variables.less | 2 +- .../assets/less/layout/fancylayout.less | 3 +- .../backend/assets/less/layout/mainmenu.less | 20 ------ .../backend/assets/less/layout/sidenav.less | 26 ------- .../backend/assets/less/layout/sidepanel.less | 2 +- .../codeeditor/assets/css/codeeditor.css | 2 +- .../mediamanager/assets/css/mediamanager.css | 2 +- modules/system/assets/css/styles.css | 6 +- modules/system/assets/less/styles.less | 2 +- modules/system/assets/ui/less/breadcrumb.less | 15 +---- .../system/assets/ui/less/button.base.less | 2 +- modules/system/assets/ui/less/button.less | 1 - .../system/assets/ui/less/button.mixins.less | 6 -- modules/system/assets/ui/less/callout.less | 2 +- modules/system/assets/ui/less/checkbox.less | 2 +- .../system/assets/ui/less/flashmessage.less | 1 - .../assets/ui/less/global.variables.less | 2 - modules/system/assets/ui/less/list.less | 2 - modules/system/assets/ui/less/popup.less | 1 - modules/system/assets/ui/less/tab.less | 4 +- modules/system/assets/ui/storm.css | 67 +++++++++---------- 23 files changed, 56 insertions(+), 158 deletions(-) diff --git a/modules/backend/assets/css/october.css b/modules/backend/assets/css/october.css index 5f4fdedd1..38ac53bef 100644 --- a/modules/backend/assets/css/october.css +++ b/modules/backend/assets/css/october.css @@ -418,7 +418,7 @@ body.dragging .control-treeview.treeview-light ol.dragging > li > div,body.dragg .sidenav-tree{width:300px} .sidenav-tree .control-toolbar{padding:0} .sidenav-tree .control-toolbar .toolbar-item{display:block} -.sidenav-tree .control-toolbar input.form-control{border:none;outline:none;padding:12px 13px 13px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:inset -5px 0 3px rgba(0,0,0,0.1);box-shadow:inset -5px 0 3px rgba(0,0,0,0.1)} +.sidenav-tree .control-toolbar input.form-control{border:none;outline:none;padding:12px 13px 13px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:inset -3px 0 3px rgba(0,0,0,0.1);box-shadow:inset -3px 0 3px rgba(0,0,0,0.1)} .sidenav-tree .control-toolbar input.form-control.search{background-position:right -78px} .sidenav-tree ul{padding:0;margin:0;list-style:none} .sidenav-tree div.scrollbar-thumb{background:rgba(0,0,0,0.2) !important} @@ -428,11 +428,9 @@ body.dragging .control-treeview.treeview-light ol.dragging > li > div,body.dragg .sidenav-tree ul.top-level > li > div.group{position:relative} .sidenav-tree ul.top-level > li > div.group h3{background:rgba(0,0,0,0.15);color:#ecf0f1;text-transform:uppercase;font-size:15px;padding:15px 15px 15px 40px;margin:0;position:relative;cursor:pointer} .sidenav-tree ul.top-level > li > div.group h3:before{display:block;position:absolute;width:10px;height:10px;left:16px;top:15px;color:#cfcfcf;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f105";-webkit-transform:rotate(90deg) translate(5px,-3px);-ms-transform:rotate(90deg) translate(5px,-3px);transform:rotate(90deg) translate(5px,-3px);-webkit-transition:all 0.1s ease;transition:all 0.1s ease;font-size:16px} -.sidenav-tree ul.top-level > li > div.group h3:after{content:'';position:absolute;top:0;right:0;width:10px;height:100%;-webkit-box-shadow:inset -5px 0 3px rgba(0,0,0,0.1);box-shadow:inset -5px 0 3px rgba(0,0,0,0.1)} .sidenav-tree ul.top-level > li > div.group:before,.sidenav-tree ul.top-level > li > div.group:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid #34495e;border-bottom-width:0;position:absolute;left:15px;bottom:-8px;z-index:101} .sidenav-tree ul.top-level > li > div.group:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid rgba(0,0,0,0.15);border-bottom-width:0} .sidenav-tree ul.top-level > li > ul li a{display:block;position:relative;padding:18px 25px 18px 55px;background:transparent;border-bottom:1px solid rgba(0,0,0,0.15);color:#ffffff;text-decoration:none !important;opacity:0.65;filter:alpha(opacity=65)} -.sidenav-tree ul.top-level > li > ul li a:after{content:'';position:absolute;top:0;right:0;width:10px;height:100%;-webkit-box-shadow:inset -5px 0 3px rgba(0,0,0,0.1);box-shadow:inset -5px 0 3px rgba(0,0,0,0.1)} .sidenav-tree ul.top-level > li > ul li a:hover{text-decoration:none} .sidenav-tree ul.top-level > li > ul li a i{position:absolute;left:16px;top:18px;font-size:22px} .sidenav-tree ul.top-level > li > ul li a span{display:block;line-height:150%} @@ -591,7 +589,7 @@ body.dragging,body.dragging *{cursor:move !important} body.loading,body.loading *{cursor:wait !important} body.no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default !important} html,body{height:100%; } -body{font-family:sans-serif;background:#f9f9f9;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} +body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";background:#f9f9f9;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} #layout-canvas{min-height:100%;height:100%} .control-tabs.primary-tabs > ul.nav-tabs,.control-tabs.primary-tabs > div > ul.nav-tabs,.control-tabs.primary-tabs > div > div > ul.nav-tabs{margin-left:-20px;margin-right:-20px} .control-tabs.primary-tabs.tabs-no-inset > ul.nav-tabs,.control-tabs.primary-tabs.tabs-no-inset > div > ul.nav-tabs,.control-tabs.primary-tabs.tabs-no-inset > div > div > ul.nav-tabs{margin-left:0;margin-right:0} @@ -657,7 +655,7 @@ nav#layout-mainmenu a{text-decoration:none} nav#layout-mainmenu a:focus{background:transparent} nav#layout-mainmenu ul{margin:0;padding:0;list-style:none;float:left;white-space:nowrap;overflow:hidden} nav#layout-mainmenu ul li{color:rgba(255,255,255,0.6);display:inline-block;vertical-align:top;position:relative;margin-right:30px} -nav#layout-mainmenu ul li a{display:inline-block;font-size:14px;color:inherit;outline:none;text-shadow:0 0 2px black;padding:14px 0 10px} +nav#layout-mainmenu ul li a{display:inline-block;font-size:14px;color:inherit;outline:none;padding:14px 0 10px} nav#layout-mainmenu ul li a:hover{background-color:transparent} nav#layout-mainmenu ul li a:active,nav#layout-mainmenu ul li a:focus{text-decoration:none;color:rgba(255,255,255,0.6)} nav#layout-mainmenu ul li a i{line-height:1;font-size:30px;vertical-align:middle} @@ -684,9 +682,9 @@ nav#layout-mainmenu ul li .mainmenu-accountmenu.active{display:block} nav#layout-mainmenu ul li .mainmenu-accountmenu:after{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-bottom:7px solid #f9f9f9;right:9px;top:-7px;position:absolute} nav#layout-mainmenu ul li .mainmenu-accountmenu ul{float:none;display:block;overflow:visible} nav#layout-mainmenu ul li .mainmenu-accountmenu li{padding:0;margin:0;font-weight:normal;text-align:left;display:block} -nav#layout-mainmenu ul li .mainmenu-accountmenu li a{display:block;padding:10px 30px;text-align:left;font-size:14px;color:#666666;text-shadow:none} -nav#layout-mainmenu ul li .mainmenu-accountmenu li a:hover,nav#layout-mainmenu ul li .mainmenu-accountmenu li a:focus{background:#4ea5e0;color:#ffffff;text-shadow:0 -1px 0 rgba(0,0,0,0.3)} -nav#layout-mainmenu ul li .mainmenu-accountmenu li a:active{background:#3498db;color:#ffffff;text-shadow:0 -1px 0 rgba(0,0,0,0.3)} +nav#layout-mainmenu ul li .mainmenu-accountmenu li a{display:block;padding:10px 30px;text-align:left;font-size:14px;color:#666666} +nav#layout-mainmenu ul li .mainmenu-accountmenu li a:hover,nav#layout-mainmenu ul li .mainmenu-accountmenu li a:focus{background:#4ea5e0;color:#ffffff} +nav#layout-mainmenu ul li .mainmenu-accountmenu li a:active{background:#3498db;color:#ffffff} nav#layout-mainmenu ul li .mainmenu-accountmenu li:first-child a:hover:after,nav#layout-mainmenu ul li .mainmenu-accountmenu li:first-child a:focus:after,nav#layout-mainmenu ul li .mainmenu-accountmenu li:first-child a:active:after{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-bottom:7px solid #4ea5e0;position:absolute;right:9px;top:-7px;z-index:102} nav#layout-mainmenu ul li .mainmenu-accountmenu li:first-child a:active:after{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-bottom:7px solid #3498db} nav#layout-mainmenu ul li .mainmenu-accountmenu li.divider{height:1px;width:100%;background-color:#e0e0e0} @@ -747,7 +745,7 @@ nav#layout-mainmenu.navbar .menu-toggle{display:inline-block;color:#ffffff !impo .mainmenu-collapsed > div ul.mainmenu-nav li:first-child{margin-left:0} .mainmenu-collapsed > div ul{margin:0;padding:5px 0 15px 15px;overflow:hidden} .mainmenu-collapsed > div ul li{color:rgba(255,255,255,0.6);display:inline-block;vertical-align:top;position:relative;margin-right:30px} -.mainmenu-collapsed > div ul li a{display:inline-block;font-size:14px;color:inherit;outline:none;text-shadow:0 0 2px black} +.mainmenu-collapsed > div ul li a{display:inline-block;font-size:14px;color:inherit;outline:none} .mainmenu-collapsed > div ul li a:hover{background-color:transparent} .mainmenu-collapsed > div ul li a:active,.mainmenu-collapsed > div ul li a:focus{text-decoration:none;color:rgba(255,255,255,0.6)} .mainmenu-collapsed > div ul li a i{line-height:1;font-size:30px;vertical-align:middle} @@ -765,23 +763,18 @@ nav#layout-mainmenu.navbar ul li:hover a:active,.mainmenu-collapsed li:hover a:a nav#layout-mainmenu.navbar ul li.highlight > a,.mainmenu-collapsed li.highlight > a{color:#ffffff !important} nav#layout-mainmenu.navbar ul li.active,.mainmenu-collapsed li.active{color:#ffffff !important} nav#layout-mainmenu.navbar ul li.active a,.mainmenu-collapsed li.active a{color:#ffffff !important} -nav#layout-mainmenu.navbar ul li.active a .nav-label,.mainmenu-collapsed li.active a .nav-label{text-shadow:none} nav#layout-mainmenu.navbar ul li:hover,.mainmenu-collapsed li:hover{color:#ffffff;background:transparent} body.drag nav#layout-mainmenu.navbar ul.nav li:hover,body.drag .mainmenu-collapsed ul li:hover{color:rgba(255,255,255,0.6)} -body.drag nav#layout-mainmenu.navbar ul.nav li a:active .nav-label,body.drag .mainmenu-collapsed ul li a:active .nav-label,body.drag nav#layout-mainmenu.navbar ul.nav li a:focus .nav-label,body.drag .mainmenu-collapsed ul li a:focus .nav-label{text-shadow:none} #layout-sidenav{position:absolute;height:100%;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} #layout-sidenav ul{position:relative;margin:0;padding:0;height:100%;overflow:hidden} -#layout-sidenav ul:after{content:'';position:absolute;height:100%;top:0;right:0;width:10px;-webkit-box-shadow:inset -5px 0 3px rgba(0,0,0,0.1);box-shadow:inset -5px 0 3px rgba(0,0,0,0.1)} #layout-sidenav ul li{display:block;text-align:center;position:relative} #layout-sidenav ul li a{padding:20px 10px;display:block;font-size:13px;color:rgba(255,255,255,0.6);font-weight:normal;position:relative} #layout-sidenav ul li a:hover{text-decoration:none;background-color:transparent} #layout-sidenav ul li a:focus{background:transparent} #layout-sidenav ul li a i{color:rgba(255,255,255,0.6);display:block;margin-bottom:5px;font-size:28px} -#layout-sidenav ul li a .nav-label,#layout-sidenav ul li a .nav-icon{text-shadow:0 -1px 0 rgba(0,0,0,0.6)} #layout-sidenav ul li:first-child a{padding-top:30px} #layout-sidenav ul li.active a,#layout-sidenav ul li a:hover{color:#ffffff} #layout-sidenav ul li.active a i,#layout-sidenav ul li a:hover i{color:#ffffff} -#layout-sidenav ul li.active a .nav-label,#layout-sidenav ul li.active a .nav-icon{text-shadow:0 -1px 0 rgba(0,0,0,0.3)} #layout-sidenav ul li span.counter{display:block;position:absolute;top:15px;right:15px;padding:2px 6px 3px 4px;background-color:#d9350f;color:#ffffff;font-size:11px;line-height:100%;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;opacity:1;filter:alpha(opacity=100);-webkit-transform:scale(1,);-ms-transform:scale(1,);transform:scale(1,);-webkit-transition:all 0.3s;transition:all 0.3s} #layout-sidenav ul li span.counter.empty{opacity:0;filter:alpha(opacity=0);-webkit-transform:scale(0,);-ms-transform:scale(0,);transform:scale(0,)} #layout-sidenav.layout-sidenav ul.drag li:not(.active) a:hover,.touch #layout-sidenav.layout-sidenav li:not(.active) a:hover{color:rgba(255,255,255,0.6) !important} @@ -796,7 +789,7 @@ body.drag nav#layout-mainmenu.navbar ul.nav li a:active .nav-label,body.drag .ma #layout-side-panel .sidepanel-content-header:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid #d35400;border-bottom-width:0;position:absolute;left:14px;bottom:-8px} body.side-panel-not-fixed #layout-side-panel{display:none} body.side-panel-not-fixed #layout-side-panel .fix-button{opacity:0.5;filter:alpha(opacity=50)} -body.display-side-panel #layout-side-panel{display:block;position:absolute;z-index:600;width:350px;-webkit-box-shadow:2px 0px 2px 0 rgba(0,0,0,0.3);box-shadow:2px 0px 2px 0 rgba(0,0,0,0.3)} +body.display-side-panel #layout-side-panel{display:block;position:absolute;z-index:600;width:350px;-webkit-box-shadow:3px 0px 3px 0 rgba(0,0,0,0.1);box-shadow:3px 0px 3px 0 rgba(0,0,0,0.1)} @media (min-width:992px){body.side-panel-fix-shadow #layout-side-panel{-webkit-box-shadow:none;box-shadow:none} } .touch #layout-side-panel .fix-button{display:none} diff --git a/modules/backend/assets/less/controls/sidenav-tree.less b/modules/backend/assets/less/controls/sidenav-tree.less index 37a37feb4..7cb1ccead 100644 --- a/modules/backend/assets/less/controls/sidenav-tree.less +++ b/modules/backend/assets/less/controls/sidenav-tree.less @@ -1,14 +1,3 @@ -.sidenav-tree-shadow-element() { - content: ''; - position: absolute; - height: 100%; - top: 0; - right: 0; - width: 10px; - height: 100%; - .box-shadow(inset -5px 0 3px rgba(0,0,0,0.1)); -} - .sidenav-tree { width: 300px; @@ -24,7 +13,7 @@ outline: none; padding: 12px 13px 13px; .border-radius(0); - .box-shadow(inset -5px 0 3px rgba(0,0,0,0.1)); + .box-shadow(inset -3px 0 3px rgba(0,0,0,0.1)); &.search { background-position: right -78px; @@ -86,10 +75,6 @@ .transition(all 0.1s ease); font-size: 16px; } - - &:after { - .sidenav-tree-shadow-element(); - } } // Use two triangles to achieve the darkening effect @@ -120,10 +105,6 @@ text-decoration: none!important; .opacity(.65); - &:after { - .sidenav-tree-shadow-element(); - } - &:hover { text-decoration: none; } diff --git a/modules/backend/assets/less/core/variables.less b/modules/backend/assets/less/core/variables.less index 8ceb85332..b4e25fc9a 100644 --- a/modules/backend/assets/less/core/variables.less +++ b/modules/backend/assets/less/core/variables.less @@ -2,7 +2,7 @@ // Override UI variables // -------------------------------------------------- -@font-family-base: sans-serif; +@font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; // // Paths diff --git a/modules/backend/assets/less/layout/fancylayout.less b/modules/backend/assets/less/layout/fancylayout.less index 2c3ff4d78..c48aef458 100644 --- a/modules/backend/assets/less/layout/fancylayout.less +++ b/modules/backend/assets/less/layout/fancylayout.less @@ -58,7 +58,7 @@ top: 1px; padding-top: 3px; - span.tab-close{ + span.tab-close { top: 14px; right: -3px; left: auto; @@ -74,7 +74,6 @@ &:hover { color: @color-fancy-master-tabs-active-text !important; } } - } a { diff --git a/modules/backend/assets/less/layout/mainmenu.less b/modules/backend/assets/less/layout/mainmenu.less index 3f204920c..2163c2b90 100644 --- a/modules/backend/assets/less/layout/mainmenu.less +++ b/modules/backend/assets/less/layout/mainmenu.less @@ -20,7 +20,6 @@ body.mainmenu-open { font-size: @font-size-base; color: inherit; outline: none; - text-shadow: 0 0 2px black; &:hover { background-color: transparent; @@ -277,18 +276,15 @@ nav#layout-mainmenu ul li .mainmenu-accountmenu { text-align: left; font-size: @font-size-base; color: @color-accountmenu-text; - text-shadow: none; &:hover, &:focus { background: @highlight-hover-bg; color: @highlight-hover-text; - text-shadow: 0 -1px 0 @highlight-hover-text-shadow; } &:active { background: @highlight-active-bg; color: @highlight-active-text; - text-shadow: 0 -1px 0 @highlight-active-text-shadow; } } @@ -593,12 +589,6 @@ nav#layout-mainmenu.navbar ul li:hover, nav#layout-mainmenu.navbar ul li, .mainmenu-collapsed li { - // a:active, a:focus { - // .nav-label { - // text-shadow: 1px 1px 15px white, -1px -1px 15px white; - // } - // } - // Used by account menu &.highlight > a { color: @color-mainmenu-active !important; @@ -609,10 +599,6 @@ nav#layout-mainmenu.navbar ul li, a { color: @color-mainmenu-active !important; - - .nav-label { - text-shadow: none; - } } } @@ -628,11 +614,5 @@ body.drag { &:hover { color: @color-mainmenu-inactive; } - - a:active, a:focus { - .nav-label { - text-shadow: none; - } - } } } diff --git a/modules/backend/assets/less/layout/sidenav.less b/modules/backend/assets/less/layout/sidenav.less index 3b9fc9b20..a239ecfe1 100644 --- a/modules/backend/assets/less/layout/sidenav.less +++ b/modules/backend/assets/less/layout/sidenav.less @@ -8,16 +8,6 @@ width: 100%; .box-sizing(border-box); - .sidenav-shadow-element() { - content: ''; - position: absolute; - height: 100%; - top: 0; - right: 0; - width: 10px; - .box-shadow(inset -5px 0 3px rgba(0,0,0,.1)); - } - ul { position: relative; margin: 0; @@ -25,10 +15,6 @@ height: 100%; overflow: hidden; - &:after { - .sidenav-shadow-element(); - } - li { display: block; text-align: center; @@ -57,11 +43,6 @@ margin-bottom: 5px; font-size: 28px; } - - .nav-label, - .nav-icon { - text-shadow: 0 -1px 0 rgba(0,0,0,.6); - } } &:first-child a { @@ -73,13 +54,6 @@ i { color: @color-sidebarnav-active-icon; } } - &.active a { - .nav-label, - .nav-icon { - text-shadow: 0 -1px 0 rgba(0,0,0,.3); - } - } - span.counter { display: block; position: absolute; diff --git a/modules/backend/assets/less/layout/sidepanel.less b/modules/backend/assets/less/layout/sidepanel.less index 5a0461817..79d86ac74 100644 --- a/modules/backend/assets/less/layout/sidepanel.less +++ b/modules/backend/assets/less/layout/sidepanel.less @@ -74,7 +74,7 @@ body.display-side-panel { // mouseout event fires and sidebar hides when opening a dropdown. z-index: @zindex-dropdown; width: 350px; - .box-shadow(2px 0px 2px 0 rgba(0, 0, 0, 0.3)); + .box-shadow(3px 0px 3px 0 rgba(0, 0, 0, 0.1)); } } diff --git a/modules/backend/formwidgets/codeeditor/assets/css/codeeditor.css b/modules/backend/formwidgets/codeeditor/assets/css/codeeditor.css index efd37d4d2..a28b817df 100644 --- a/modules/backend/formwidgets/codeeditor/assets/css/codeeditor.css +++ b/modules/backend/formwidgets/codeeditor/assets/css/codeeditor.css @@ -6,7 +6,7 @@ .field-codeeditor.size-large{min-height:200px} .field-codeeditor.size-huge{min-height:250px} .field-codeeditor.size-giant{min-height:350px} -.field-codeeditor .ace_search{font-family:sans-serif;font-size:14px;color:#333333;z-index:13} +.field-codeeditor .ace_search{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;color:#333333;z-index:13} .field-codeeditor .editor-code{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} .field-codeeditor .editor-toolbar{position:absolute;top:10px;right:10px;z-index:10} .field-codeeditor .editor-toolbar > ul,.field-codeeditor .editor-toolbar ul > li{list-style-type:none;padding:0;margin:0} diff --git a/modules/cms/widgets/mediamanager/assets/css/mediamanager.css b/modules/cms/widgets/mediamanager/assets/css/mediamanager.css index d32171b99..00884cab0 100644 --- a/modules/cms/widgets/mediamanager/assets/css/mediamanager.css +++ b/modules/cms/widgets/mediamanager/assets/css/mediamanager.css @@ -43,7 +43,7 @@ div[data-control="media-manager"] .media-list.tiles li .image-placeholder{width: div[data-control="media-manager"] .media-list.tiles li .image-placeholder[data-loading]:after{background-image:url('../../../../../../modules/system/assets/ui/images/loader-transparent.svg');background-position:50% 50%;content:' ';-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite;background-size:55px 55px;position:absolute;width:55px;height:55px;top:50%;left:50%;margin-top:-27.5px;margin-left:-27.5px} div[data-control="media-manager"] .media-list.tiles li .icon-container{width:167px;height:167px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;border:1px solid #ecf0f1;overflow:hidden;background:#f6f8f9} div[data-control="media-manager"] .media-list.tiles li .icon-container i{font-size:55px} -div[data-control="media-manager"] .media-list.tiles li .icon-container p{font-family:sans-serif} +div[data-control="media-manager"] .media-list.tiles li .icon-container p{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"} div[data-control="media-manager"] .media-list.tiles li.selected .icon-container{background:#4ea5e0 !important;border-color:#2581b8} div[data-control="media-manager"] .media-list.tiles li.selected .icon-container i,div[data-control="media-manager"] .media-list.tiles li.selected .icon-container p{color:#ecf0f1} div[data-control="media-manager"] .media-list.tiles li.selected h4{color:#2581b8} diff --git a/modules/system/assets/css/styles.css b/modules/system/assets/css/styles.css index 712f1a599..b762a2352 100644 --- a/modules/system/assets/css/styles.css +++ b/modules/system/assets/css/styles.css @@ -40,7 +40,7 @@ table{border-collapse:collapse;border-spacing:0} td,th{padding:0} *,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)} -body{font-family:sans-serif;font-size:14px;line-height:1.42857143;color:#333333;background-color:#f9f9f9} +body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.42857143;color:#333333;background-color:#f9f9f9} input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit} button,input,select[multiple],textarea{background-image:none} a{color:#0181b9;text-decoration:none} @@ -1059,8 +1059,8 @@ button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-ap .icon-3x{font-size:3em} .icon-4x{font-size:4em} .icon-5x{font-size:5em} -body{padding-top:20px;font-family:sans-serif;background:#f3f3f3;color:#405261} -h1,h2,h3,h4,h5{font-family:sans-serif;text-transform:uppercase} +body{padding-top:20px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";background:#f3f3f3;color:#405261} +h1,h2,h3,h4,h5{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";text-transform:uppercase} h1{font-weight:300;font-size:50px;margin-bottom:15px} h1 i[class^="icon-"]:before{font-size:46px} i[class^="icon-"].warning{color:#c84530} diff --git a/modules/system/assets/less/styles.less b/modules/system/assets/less/styles.less index bfa4c3147..6875e7a77 100644 --- a/modules/system/assets/less/styles.less +++ b/modules/system/assets/less/styles.less @@ -2,7 +2,7 @@ @import "../ui/less/site.less"; @import "../ui/less/icon.less"; -@font-family-base: sans-serif; +@font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; @color-base: #405261; @color-warning: #c84530; @font-path: "../ui/font"; // For icon fonts diff --git a/modules/system/assets/ui/less/breadcrumb.less b/modules/system/assets/ui/less/breadcrumb.less index aa228b590..8f2920ef2 100644 --- a/modules/system/assets/ui/less/breadcrumb.less +++ b/modules/system/assets/ui/less/breadcrumb.less @@ -39,27 +39,17 @@ display: inline-block; color: @color-breadcrumb-text; text-decoration: none; - text-shadow: 0 1px 0 rgba(0,0,0,.15); &:hover { color: @color-breadcrumb-text; } } - &:before, &:after { + &:after { top: 0; - right: -15px; + right: -14px; position: absolute; z-index: @zindex-breadcrumb; - } - - &:after { .triangle(right, 15px, 45px, @color-breadcrumb-inactive-background); } - &:before { - right: -16px; - z-index: @zindex-breadcrumb - 1; - .triangle(right, 15px, 45px, @color-breadcrumb-background); - } - &:first-child { padding-left: 20px; } @@ -71,7 +61,6 @@ &:last-child { background-color: transparent; color: @color-breadcrumb-active-text; - text-shadow: 0 1px 0 rgba(255,255,255,.35); &:after { display: none; diff --git a/modules/system/assets/ui/less/button.base.less b/modules/system/assets/ui/less/button.base.less index d3a2ede0b..df7329980 100644 --- a/modules/system/assets/ui/less/button.base.less +++ b/modules/system/assets/ui/less/button.base.less @@ -54,7 +54,7 @@ } .btn-primary { .button-variant(@btn-primary-color; lighten(@btn-primary-bg, 5%); @btn-primary-border; @btn-primary-bg; @btn-primary-bg); - font-weight: bold; + font-weight: 500; } .btn-secondary { .button-variant(#000; lighten(@btn-secondary-bg, 5%); @btn-secondary-border; @btn-secondary-bg; @btn-secondary-bg); diff --git a/modules/system/assets/ui/less/button.less b/modules/system/assets/ui/less/button.less index 3e405b0ec..e4623e96b 100644 --- a/modules/system/assets/ui/less/button.less +++ b/modules/system/assets/ui/less/button.less @@ -73,7 +73,6 @@ } .btn-secondary { - text-shadow: 0 1px 0 rgba(255,255,255,.8); .box-shadow(~"inset 0 -2px 0 rgba(0,0,0,.1)"); &[disabled] { diff --git a/modules/system/assets/ui/less/button.mixins.less b/modules/system/assets/ui/less/button.mixins.less index 67fadc60f..ca8166b36 100644 --- a/modules/system/assets/ui/less/button.mixins.less +++ b/modules/system/assets/ui/less/button.mixins.less @@ -4,11 +4,7 @@ // and disabled options for all buttons .button-variant(@color; @background; @border; @background-hover: @background; @border-hover: @border) { color: @color; - background-color: @background; - //border-color: @border; border: none; - - text-shadow: 0 -1px 0 rgba(0,0,0,.4); background: @background; &:hover, @@ -65,7 +61,6 @@ color: #fff; background-color: @color; border-color: @color; - text-shadow: 0 1px 0 rgba(0,0,0,.2); } &:active, @@ -74,7 +69,6 @@ color: #fff; background-color: @color; border-color: @color; - text-shadow: 0 1px 0 rgba(0,0,0,.2); &:hover, &:focus, diff --git a/modules/system/assets/ui/less/callout.less b/modules/system/assets/ui/less/callout.less index ed05e4d3e..bf6a74b8d 100644 --- a/modules/system/assets/ui/less/callout.less +++ b/modules/system/assets/ui/less/callout.less @@ -101,7 +101,7 @@ letter-spacing: 0; margin: 0 0 7px 0; font-size: @font-size-base - 1; - font-weight: bold; + font-weight: 700; } h3, p, ul, ol { diff --git a/modules/system/assets/ui/less/checkbox.less b/modules/system/assets/ui/less/checkbox.less index b96013a4d..aac2a96ce 100644 --- a/modules/system/assets/ui/less/checkbox.less +++ b/modules/system/assets/ui/less/checkbox.less @@ -255,7 +255,7 @@ width: 100%; background-color: @color-checkbox-switch-off; font-size: 12px; - font-weight: bold; + font-weight: 600; .user-select(none); .border-radius(20px); diff --git a/modules/system/assets/ui/less/flashmessage.less b/modules/system/assets/ui/less/flashmessage.less index d030c5e56..f155e1150 100644 --- a/modules/system/assets/ui/less/flashmessage.less +++ b/modules/system/assets/ui/less/flashmessage.less @@ -30,7 +30,6 @@ padding: 10px 30px 10px 15px; z-index: @zindex-flashmessage; word-wrap: break-word; - text-shadow: 0 -1px 0px rgba(0,0,0,.15); text-align: center; .box-shadow(@overlay-box-shadow); .border-radius(@border-radius-base); diff --git a/modules/system/assets/ui/less/global.variables.less b/modules/system/assets/ui/less/global.variables.less index fffaa3e3e..57db90c7e 100644 --- a/modules/system/assets/ui/less/global.variables.less +++ b/modules/system/assets/ui/less/global.variables.less @@ -141,11 +141,9 @@ @highlight-hover-bg: mix(white, @brand-accent, 13%); @highlight-hover-text: #fff; -@highlight-hover-text-shadow: fade(contrast(@highlight-hover-text, black, white), 30%); @highlight-active-bg: @brand-accent; @highlight-active-text: #fff; -@highlight-active-text-shadow: fade(contrast(@highlight-active-text, black, white), 30%); // // General diff --git a/modules/system/assets/ui/less/list.less b/modules/system/assets/ui/less/list.less index a43775cba..14e1f8c18 100644 --- a/modules/system/assets/ui/less/list.less +++ b/modules/system/assets/ui/less/list.less @@ -155,7 +155,6 @@ table.table.data { tr.rowlink:hover td, tr:not(.no-data).selected td, { background: @color-list-hover-bg !important; - text-shadow: 0 -1px 0 @highlight-hover-text-shadow; color: @highlight-hover-text; a:not(.btn), span, i[class^="icon-"] { @@ -164,7 +163,6 @@ table.table.data { } tr.rowlink:active td { - text-shadow: 0 -1px 0 @highlight-active-text-shadow; background: @color-list-active-bg !important; color: @color-list-active-text; } diff --git a/modules/system/assets/ui/less/popup.less b/modules/system/assets/ui/less/popup.less index 7a7f4ed1c..d863dc17f 100644 --- a/modules/system/assets/ui/less/popup.less +++ b/modules/system/assets/ui/less/popup.less @@ -39,7 +39,6 @@ .modal-header { background: @color-popup-header-bg; color: @color-popup-header-text; - text-shadow: 0 1px 0 rgba(255,255,255,.35); .border-top-radius(@border-radius-base); padding: @modal-title-padding @padding-standard; border: none; diff --git a/modules/system/assets/ui/less/tab.less b/modules/system/assets/ui/less/tab.less index 2ec12c86f..a7f556054 100644 --- a/modules/system/assets/ui/less/tab.less +++ b/modules/system/assets/ui/less/tab.less @@ -427,6 +427,7 @@ border: none; text-transform: uppercase; background: transparent; + font-weight: 600; span.title { span { @@ -445,9 +446,6 @@ &.active { background: @color-tab-content-active-bg; - a { - font-weight: 600; - } } } } diff --git a/modules/system/assets/ui/storm.css b/modules/system/assets/ui/storm.css index b9c1a8b2b..31f689f6d 100644 --- a/modules/system/assets/ui/storm.css +++ b/modules/system/assets/ui/storm.css @@ -504,81 +504,81 @@ address{margin-bottom:20px;font-style:normal;line-height:1.42857143} .btn:hover,.btn:focus{color:#ffffff;text-decoration:none} .btn:active,.btn.active{outline:0;background-image:none} .btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none} -.btn-default{color:#ffffff;background-color:#656d79;border:none;text-shadow:0 -1px 0 rgba(0,0,0,0.4);background:#656d79} +.btn-default{color:#ffffff;border:none;background:#656d79} .btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#ffffff;background:#1681ba;border-color:#1681ba} .btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background:#126896;border-color:#105b83;background-image:none} .btn-default.on{background:#494f58;border-color:#40454d;background-image:none} .btn-default.disabled,.btn-default[disabled],.btn-default.disabled:hover,.btn-default[disabled]:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,.btn-default.disabled:active,.btn-default[disabled]:active,.btn-default.disabled.active,.btn-default[disabled].active{background:#656d79;border-color:#656d79} .btn-default .badge{color:#656d79;background:#ffffff} -.btn-primary{color:#ffffff;background-color:#1991d1;border:none;text-shadow:0 -1px 0 rgba(0,0,0,0.4);background:#1991d1;font-weight:bold} +.btn-primary{color:#ffffff;border:none;background:#1991d1;font-weight:500} .btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#ffffff;background:#1681ba;border-color:#1681ba} .btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background:#126896;border-color:#105b83;background-image:none} .btn-primary.on{background:#126b9a;border-color:#0b3f5a;background-image:none} .btn-primary.disabled,.btn-primary[disabled],.btn-primary.disabled:hover,.btn-primary[disabled]:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,.btn-primary.disabled.active,.btn-primary[disabled].active{background:#1991d1;border-color:#1371a3} .btn-primary .badge{color:#1991d1;background:#ffffff} -.btn-secondary{color:#000000;background-color:#eeeff0;border:none;text-shadow:0 -1px 0 rgba(0,0,0,0.4);background:#eeeff0;color:#405261} +.btn-secondary{color:#000000;border:none;background:#eeeff0;color:#405261} .btn-secondary:hover,.btn-secondary:focus,.btn-secondary:active,.btn-secondary.active,.open .dropdown-toggle.btn-secondary{color:#000000;background:#e1e2e4;border-color:#e1e2e4} .btn-secondary:active,.btn-secondary.active,.open .dropdown-toggle.btn-secondary{background:#cccdd1;border-color:#c1c3c7;background-image:none} .btn-secondary.on{background:#ced0d3;border-color:#a9acb1;background-image:none} .btn-secondary.disabled,.btn-secondary[disabled],.btn-secondary.disabled:hover,.btn-secondary[disabled]:hover,.btn-secondary.disabled:focus,.btn-secondary[disabled]:focus,.btn-secondary.disabled:active,.btn-secondary[disabled]:active,.btn-secondary.disabled.active,.btn-secondary[disabled].active{background:#eeeff0;border-color:#d4d5d8} .btn-secondary .badge{color:#eeeff0;background:#000000} -.btn-success{color:#ffffff;background-color:#656d79;border:none;text-shadow:0 -1px 0 rgba(0,0,0,0.4);background:#656d79} +.btn-success{color:#ffffff;border:none;background:#656d79} .btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#ffffff;background:#31ac5f;border-color:#31ac5f} .btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background:#288c4d;border-color:#237c45;background-image:none} .btn-success.on{background:#494f58;border-color:#195931;background-image:none} .btn-success.disabled,.btn-success[disabled],.btn-success.disabled:hover,.btn-success[disabled]:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,.btn-success.disabled:active,.btn-success[disabled]:active,.btn-success.disabled.active,.btn-success[disabled].active{background:#656d79;border-color:#2b9854} .btn-success .badge{color:#656d79;background:#ffffff} -.btn-info{color:#ffffff;background-color:#656d79;border:none;text-shadow:0 -1px 0 rgba(0,0,0,0.4);background:#656d79} +.btn-info{color:#ffffff;border:none;background:#656d79} .btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#ffffff;background:#5bc0de;border-color:#5bc0de} .btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background:#39b3d7;border-color:#2aabd2;background-image:none} .btn-info.on{background:#494f58;border-color:#228cab;background-image:none} .btn-info.disabled,.btn-info[disabled],.btn-info.disabled:hover,.btn-info[disabled]:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,.btn-info.disabled:active,.btn-info[disabled]:active,.btn-info.disabled.active,.btn-info[disabled].active{background:#656d79;border-color:#46b8da} .btn-info .badge{color:#656d79;background:#ffffff} -.btn-warning{color:#ffffff;background-color:#656d79;border:none;text-shadow:0 -1px 0 rgba(0,0,0,0.4);background:#656d79} +.btn-warning{color:#ffffff;border:none;background:#656d79} .btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#ffffff;background:#f0ad4e;border-color:#f0ad4e} .btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background:#ed9c28;border-color:#eb9316;background-image:none} .btn-warning.on{background:#494f58;border-color:#c27910;background-image:none} .btn-warning.disabled,.btn-warning[disabled],.btn-warning.disabled:hover,.btn-warning[disabled]:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,.btn-warning.disabled.active,.btn-warning[disabled].active{background:#656d79;border-color:#eea236} .btn-warning .badge{color:#656d79;background:#ffffff} -.btn-danger{color:#ffffff;background-color:#656d79;border:none;text-shadow:0 -1px 0 rgba(0,0,0,0.4);background:#656d79} +.btn-danger{color:#ffffff;border:none;background:#656d79} .btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#ffffff;background:#ab2a1c;border-color:#ab2a1c} .btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background:#882116;border-color:#761d13;background-image:none} .btn-danger.on{background:#494f58;border-color:#4f130d;background-image:none} .btn-danger.disabled,.btn-danger[disabled],.btn-danger.disabled:hover,.btn-danger[disabled]:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,.btn-danger.disabled.active,.btn-danger[disabled].active{background:#656d79;border-color:#952518} .btn-danger .badge{color:#656d79;background:#ffffff} .btn-outline-default{color:#4e545d;background-image:none;background-color:transparent;border-color:#656d79} -.btn-outline-default:hover,.btn-outline-default:focus,.btn-outline-default.focus{color:#fff;background-color:#656d79;border-color:#656d79;text-shadow:0 1px 0 rgba(0,0,0,0.2)} -.btn-outline-default:active,.btn-outline-default.active,.open > .dropdown-toggle.btn-outline-default{color:#fff;background-color:#656d79;border-color:#656d79;text-shadow:0 1px 0 rgba(0,0,0,0.2)} +.btn-outline-default:hover,.btn-outline-default:focus,.btn-outline-default.focus{color:#fff;background-color:#656d79;border-color:#656d79} +.btn-outline-default:active,.btn-outline-default.active,.open > .dropdown-toggle.btn-outline-default{color:#fff;background-color:#656d79;border-color:#656d79} .btn-outline-default:active:hover,.btn-outline-default.active:hover,.open > .dropdown-toggle.btn-outline-default:hover,.btn-outline-default:active:focus,.btn-outline-default.active:focus,.open > .dropdown-toggle.btn-outline-default:focus,.btn-outline-default:active.focus,.btn-outline-default.active.focus,.open > .dropdown-toggle.btn-outline-default.focus{color:#fff;background-color:#3e424a;border-color:#2b2e34} .btn-outline-default.disabled:hover,.btn-outline-default:disabled:hover,.btn-outline-default.disabled:focus,.btn-outline-default:disabled:focus,.btn-outline-default.disabled.focus,.btn-outline-default:disabled.focus{border-color:#9aa0aa} .btn-outline-primary{color:#11618c;background-image:none;background-color:transparent;border-color:#1681ba} -.btn-outline-primary:hover,.btn-outline-primary:focus,.btn-outline-primary.focus{color:#fff;background-color:#1681ba;border-color:#1681ba;text-shadow:0 1px 0 rgba(0,0,0,0.2)} -.btn-outline-primary:active,.btn-outline-primary.active,.open > .dropdown-toggle.btn-outline-primary{color:#fff;background-color:#1681ba;border-color:#1681ba;text-shadow:0 1px 0 rgba(0,0,0,0.2)} +.btn-outline-primary:hover,.btn-outline-primary:focus,.btn-outline-primary.focus{color:#fff;background-color:#1681ba;border-color:#1681ba} +.btn-outline-primary:active,.btn-outline-primary.active,.open > .dropdown-toggle.btn-outline-primary{color:#fff;background-color:#1681ba;border-color:#1681ba} .btn-outline-primary:active:hover,.btn-outline-primary.active:hover,.open > .dropdown-toggle.btn-outline-primary:hover,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.open > .dropdown-toggle.btn-outline-primary:focus,.btn-outline-primary:active.focus,.btn-outline-primary.active.focus,.open > .dropdown-toggle.btn-outline-primary.focus{color:#fff;background-color:#0d4b6c;border-color:#093248} .btn-outline-primary.disabled:hover,.btn-outline-primary:disabled:hover,.btn-outline-primary.disabled:focus,.btn-outline-primary:disabled:focus,.btn-outline-primary.disabled.focus,.btn-outline-primary:disabled.focus{border-color:#4cb3ea} .btn-outline-secondary{color:#9ea1a8;background-image:none;background-color:transparent;border-color:#b9bbc0} -.btn-outline-secondary:hover,.btn-outline-secondary:focus,.btn-outline-secondary.focus{color:#fff;background-color:#b9bbc0;border-color:#b9bbc0;text-shadow:0 1px 0 rgba(0,0,0,0.2)} -.btn-outline-secondary:active,.btn-outline-secondary.active,.open > .dropdown-toggle.btn-outline-secondary{color:#fff;background-color:#b9bbc0;border-color:#b9bbc0;text-shadow:0 1px 0 rgba(0,0,0,0.2)} +.btn-outline-secondary:hover,.btn-outline-secondary:focus,.btn-outline-secondary.focus{color:#fff;background-color:#b9bbc0;border-color:#b9bbc0} +.btn-outline-secondary:active,.btn-outline-secondary.active,.open > .dropdown-toggle.btn-outline-secondary{color:#fff;background-color:#b9bbc0;border-color:#b9bbc0} .btn-outline-secondary:active:hover,.btn-outline-secondary.active:hover,.open > .dropdown-toggle.btn-outline-secondary:hover,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.open > .dropdown-toggle.btn-outline-secondary:focus,.btn-outline-secondary:active.focus,.btn-outline-secondary.active.focus,.open > .dropdown-toggle.btn-outline-secondary.focus{color:#fff;background-color:#8b8f97;border-color:#767a83} .btn-outline-secondary.disabled:hover,.btn-outline-secondary:disabled:hover,.btn-outline-secondary.disabled:focus,.btn-outline-secondary:disabled:focus,.btn-outline-secondary.disabled.focus,.btn-outline-secondary:disabled.focus{border-color:#eeeff0} .btn-outline-info{color:#31b0d5;background-image:none;background-color:transparent;border-color:#5bc0de} -.btn-outline-info:hover,.btn-outline-info:focus,.btn-outline-info.focus{color:#fff;background-color:#5bc0de;border-color:#5bc0de;text-shadow:0 1px 0 rgba(0,0,0,0.2)} -.btn-outline-info:active,.btn-outline-info.active,.open > .dropdown-toggle.btn-outline-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de;text-shadow:0 1px 0 rgba(0,0,0,0.2)} +.btn-outline-info:hover,.btn-outline-info:focus,.btn-outline-info.focus{color:#fff;background-color:#5bc0de;border-color:#5bc0de} +.btn-outline-info:active,.btn-outline-info.active,.open > .dropdown-toggle.btn-outline-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de} .btn-outline-info:active:hover,.btn-outline-info.active:hover,.open > .dropdown-toggle.btn-outline-info:hover,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.open > .dropdown-toggle.btn-outline-info:focus,.btn-outline-info:active.focus,.btn-outline-info.active.focus,.open > .dropdown-toggle.btn-outline-info.focus{color:#fff;background-color:#269abc;border-color:#1f7e9a} .btn-outline-info.disabled:hover,.btn-outline-info:disabled:hover,.btn-outline-info.disabled:focus,.btn-outline-info:disabled:focus,.btn-outline-info.disabled.focus,.btn-outline-info:disabled.focus{border-color:#b0e1ef} .btn-outline-success{color:#268449;background-image:none;background-color:transparent;border-color:#31ac5f} -.btn-outline-success:hover,.btn-outline-success:focus,.btn-outline-success.focus{color:#fff;background-color:#31ac5f;border-color:#31ac5f;text-shadow:0 1px 0 rgba(0,0,0,0.2)} -.btn-outline-success:active,.btn-outline-success.active,.open > .dropdown-toggle.btn-outline-success{color:#fff;background-color:#31ac5f;border-color:#31ac5f;text-shadow:0 1px 0 rgba(0,0,0,0.2)} +.btn-outline-success:hover,.btn-outline-success:focus,.btn-outline-success.focus{color:#fff;background-color:#31ac5f;border-color:#31ac5f} +.btn-outline-success:active,.btn-outline-success.active,.open > .dropdown-toggle.btn-outline-success{color:#fff;background-color:#31ac5f;border-color:#31ac5f} .btn-outline-success:active:hover,.btn-outline-success.active:hover,.open > .dropdown-toggle.btn-outline-success:hover,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.open > .dropdown-toggle.btn-outline-success:focus,.btn-outline-success:active.focus,.btn-outline-success.active.focus,.open > .dropdown-toggle.btn-outline-success.focus{color:#fff;background-color:#1e693a;border-color:#154928} .btn-outline-success.disabled:hover,.btn-outline-success:disabled:hover,.btn-outline-success.disabled:focus,.btn-outline-success:disabled:focus,.btn-outline-success.disabled.focus,.btn-outline-success:disabled.focus{border-color:#6dd694} .btn-outline-warning{color:#ec971f;background-image:none;background-color:transparent;border-color:#f0ad4e} -.btn-outline-warning:hover,.btn-outline-warning:focus,.btn-outline-warning.focus{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e;text-shadow:0 1px 0 rgba(0,0,0,0.2)} -.btn-outline-warning:active,.btn-outline-warning.active,.open > .dropdown-toggle.btn-outline-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e;text-shadow:0 1px 0 rgba(0,0,0,0.2)} +.btn-outline-warning:hover,.btn-outline-warning:focus,.btn-outline-warning.focus{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e} +.btn-outline-warning:active,.btn-outline-warning.active,.open > .dropdown-toggle.btn-outline-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e} .btn-outline-warning:active:hover,.btn-outline-warning.active:hover,.open > .dropdown-toggle.btn-outline-warning:hover,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.open > .dropdown-toggle.btn-outline-warning:focus,.btn-outline-warning:active.focus,.btn-outline-warning.active.focus,.open > .dropdown-toggle.btn-outline-warning.focus{color:#fff;background-color:#d58512;border-color:#b06d0f} .btn-outline-warning.disabled:hover,.btn-outline-warning:disabled:hover,.btn-outline-warning.disabled:focus,.btn-outline-warning:disabled:focus,.btn-outline-warning.disabled.focus,.btn-outline-warning:disabled.focus{border-color:#f8d9ac} .btn-outline-danger{color:#7f1f15;background-image:none;background-color:transparent;border-color:#ab2a1c} -.btn-outline-danger:hover,.btn-outline-danger:focus,.btn-outline-danger.focus{color:#fff;background-color:#ab2a1c;border-color:#ab2a1c;text-shadow:0 1px 0 rgba(0,0,0,0.2)} -.btn-outline-danger:active,.btn-outline-danger.active,.open > .dropdown-toggle.btn-outline-danger{color:#fff;background-color:#ab2a1c;border-color:#ab2a1c;text-shadow:0 1px 0 rgba(0,0,0,0.2)} +.btn-outline-danger:hover,.btn-outline-danger:focus,.btn-outline-danger.focus{color:#fff;background-color:#ab2a1c;border-color:#ab2a1c} +.btn-outline-danger:active,.btn-outline-danger.active,.open > .dropdown-toggle.btn-outline-danger{color:#fff;background-color:#ab2a1c;border-color:#ab2a1c} .btn-outline-danger:active:hover,.btn-outline-danger.active:hover,.open > .dropdown-toggle.btn-outline-danger:hover,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.open > .dropdown-toggle.btn-outline-danger:focus,.btn-outline-danger:active.focus,.btn-outline-danger.active.focus,.open > .dropdown-toggle.btn-outline-danger.focus{color:#fff;background-color:#601810;border-color:#3d0f0a} .btn-outline-danger.disabled:hover,.btn-outline-danger:disabled:hover,.btn-outline-danger.disabled:focus,.btn-outline-danger:disabled:focus,.btn-outline-danger.disabled.focus,.btn-outline-danger:disabled.focus{border-color:#e25a4b} .btn-link{color:#0181b9;font-weight:normal;cursor:pointer;border-radius:0} @@ -636,7 +636,7 @@ input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button" .btn.on i[class^="icon-"],.btn:hover i[class^="icon-"],.btn:focus i[class^="icon-"],.btn.focus i[class^="icon-"],.btn.on i[class*=" icon-"],.btn:hover i[class*=" icon-"],.btn:focus i[class*=" icon-"],.btn.focus i[class*=" icon-"]{opacity:1} .btn[class^="oc-icon-"]:before,.btn[class*=" oc-icon-"]:before{font-size:14px;line-height:14px;position:relative;opacity:.6} .btn[class^="oc-icon-"].on:before,.btn[class*=" oc-icon-"].on:before,.btn[class^="oc-icon-"]:hover:before,.btn[class*=" oc-icon-"]:hover:before,.btn[class^="oc-icon-"]:focus:before,.btn[class*=" oc-icon-"]:focus:before,.btn[class^="oc-icon-"].focus:before,.btn[class*=" oc-icon-"].focus:before{opacity:1} -.btn-secondary{text-shadow:0 1px 0 rgba(255,255,255,0.8);-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,.1);box-shadow:inset 0 -2px 0 rgba(0,0,0,.1)} +.btn-secondary{-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,.1);box-shadow:inset 0 -2px 0 rgba(0,0,0,.1)} .btn-secondary[disabled]{color:rgba(0,0,0,0.6)} .btn-secondary.active,.btn-secondary:active{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,0.2);box-shadow:inset 0 1px 0 rgba(0,0,0,0.2)} .btn-link{-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important} @@ -1439,14 +1439,12 @@ body.popover-open .control-popover .popover-head:before{display:none} .control-breadcrumb{margin:-20px -20px 20px -20px;background-color:#d0d9dd} .control-breadcrumb ul{padding:0;margin:0;font-size:0} .control-breadcrumb li{font-size:14px;list-style:none;margin:0;padding:12px 10px 12px 30px;display:inline-block;position:relative;color:#ffffff;background-color:#9098a2} -.control-breadcrumb li a{display:inline-block;color:#ffffff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,0.15)} +.control-breadcrumb li a{display:inline-block;color:#ffffff;text-decoration:none} .control-breadcrumb li a:hover{color:#ffffff} -.control-breadcrumb li:before,.control-breadcrumb li:after{top:0;right:-15px;position:absolute;z-index:10} -.control-breadcrumb li:after{content:'';display:block;width:0;height:0;border-top:22.5px solid transparent;border-bottom:22.5px solid transparent;border-left:15px solid #9098a2} -.control-breadcrumb li:before{right:-16px;z-index:9;content:'';display:block;width:0;height:0;border-top:22.5px solid transparent;border-bottom:22.5px solid transparent;border-left:15px solid #d0d9dd} +.control-breadcrumb li:after{top:0;right:-14px;position:absolute;z-index:10;content:'';display:block;width:0;height:0;border-top:22.5px solid transparent;border-bottom:22.5px solid transparent;border-left:15px solid #9098a2} .control-breadcrumb li:first-child{padding-left:20px} .control-breadcrumb li:last-child:after{content:''} -.control-breadcrumb li:last-child{background-color:transparent;color:#2a3e51;text-shadow:0 1px 0 rgba(255,255,255,0.35)} +.control-breadcrumb li:last-child{background-color:transparent;color:#2a3e51} .control-breadcrumb li:last-child:after{display:none} body.breadcrumb-flush .control-breadcrumb,.control-breadcrumb.breadcrumb-flush{margin-bottom:0} body.slim-container .control-breadcrumb{margin-left:0;margin-right:0} @@ -1482,7 +1480,7 @@ to{background-position:0 0} .callout.callout-warning > .content{background:white;border:2px solid #f8f0d5} .callout > .header + .content{border-top:none} .callout > .header{padding:20px;padding-bottom:15px;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;color:#2f2d26} -.callout > .header h3{letter-spacing:0;margin:0 0 7px 0;font-size:13px;font-weight:bold} +.callout > .header h3{letter-spacing:0;margin:0 0 7px 0;font-size:13px;font-weight:700} .callout > .header h3,.callout > .header p,.callout > .header ul,.callout > .header ol{margin-left:35px} .callout > .header ul,.callout > .header ol{padding-left:20px} .callout > .header *:last-child{margin-bottom:0} @@ -1615,12 +1613,11 @@ to{background-position:0 0} .control-tabs.content-tabs > ul.nav-tabs{position:relative} .control-tabs.content-tabs > ul.nav-tabs:before{content:' ';position:absolute;bottom:0;left:0;width:100%;height:1px;background:#e3e5e7} .control-tabs.content-tabs > ul.nav-tabs li{margin-right:0;border-top:1px solid #e3e5e7;border-right:1px solid #e3e5e7} -.control-tabs.content-tabs > ul.nav-tabs li a{font-size:12px;padding:11px 20px;margin:0;border:none;text-transform:uppercase;background:transparent} +.control-tabs.content-tabs > ul.nav-tabs li a{font-size:12px;padding:11px 20px;margin:0;border:none;text-transform:uppercase;background:transparent;font-weight:600} .control-tabs.content-tabs > ul.nav-tabs li a span.title span{border-top:none} .control-tabs.content-tabs > ul.nav-tabs li:first-child{border-left:1px solid #e3e5e7} .control-tabs.content-tabs > ul.nav-tabs li:last-child{border-right:1px solid #e3e5e7} .control-tabs.content-tabs > ul.nav-tabs li.active{background:#ffffff} -.control-tabs.content-tabs > ul.nav-tabs li.active a{font-weight:600} .control-tabs.content-tabs.tabs-inset > ul.nav-tabs,.control-tabs.content-tabs.tabs-inset > div > ul.nav-tabs,.control-tabs.content-tabs.tabs-inset > div > div > ul.nav-tabs{margin-left:-20px;margin-right:-20px} .control-tabs.content-tabs.tabs-inset > ul.nav-tabs li:first-child,.control-tabs.content-tabs.tabs-inset > div > ul.nav-tabs li:first-child,.control-tabs.content-tabs.tabs-inset > div > div > ul.nav-tabs li:first-child{margin-left:20px} .control-tabs.content-tabs.tabs-offset > ul.nav-tabs li:first-child{margin-left:20px} @@ -1774,7 +1771,7 @@ div.scoreboard .control-chart .canvas + ul{margin-left:0} div.scoreboard .scoreboard-offset{padding-left:20px} body.slim-container div.scoreboard{padding:0 20px} #layout-canvas .flash-message{display:none} -.flash-message{position:fixed;width:500px;left:50%;top:13px;margin-left:-250px;color:#ffffff;font-size:14px;padding:10px 30px 10px 15px;z-index:10300;word-wrap:break-word;text-shadow:0 -1px 0px rgba(0,0,0,0.15);text-align:center;-webkit-box-shadow:0 1px 6px rgba(0,0,0,0.12),0 1px 4px rgba(0,0,0,0.24);box-shadow:0 1px 6px rgba(0,0,0,0.12),0 1px 4px rgba(0,0,0,0.24);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} +.flash-message{position:fixed;width:500px;left:50%;top:13px;margin-left:-250px;color:#ffffff;font-size:14px;padding:10px 30px 10px 15px;z-index:10300;word-wrap:break-word;text-align:center;-webkit-box-shadow:0 1px 6px rgba(0,0,0,0.12),0 1px 4px rgba(0,0,0,0.24);box-shadow:0 1px 6px rgba(0,0,0,0.12),0 1px 4px rgba(0,0,0,0.24);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} .flash-message.fade{opacity:0;filter:alpha(opacity=0);-webkit-transition:all 0.5s,width 0s;transition:all 0.5s,width 0s;-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)} .flash-message.fade.in{opacity:1;filter:alpha(opacity=100);-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)} .flash-message.success{background:#8da85e} @@ -2426,7 +2423,7 @@ html.cssanimations .cursor-loading-indicator.hide{display:none} .custom-switch input:checked ~ span{background-color:#76a544} .custom-switch input:checked ~ span span:first-of-type{color:#FFFFFF;display:block} .custom-switch input:checked ~ span span:last-of-type{color:#666666;display:none} -.custom-switch > span{display:block;height:100%;position:absolute;left:0;width:100%;background-color:#bb2424;font-size:12px;font-weight:bold;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px} +.custom-switch > span{display:block;height:100%;position:absolute;left:0;width:100%;background-color:#bb2424;font-size:12px;font-weight:600;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px} .custom-switch > span span{z-index:10;display:block;width:50%;position:absolute;top:2px;left:-1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} .custom-switch > span span:last-child{left:28px;color:#FFFFFF;display:block} .custom-switch > span span:first-of-type{padding-left:13px;display:none;color:#666666} @@ -2593,9 +2590,9 @@ table.table.data tbody tr:last-child th,table.table.data tbody tr:last-child td{ table.table.data tbody tr td:first-child{border-left:3px solid transparent;padding-left:22px} table.table.data tbody tr.active td{color:#000000} table.table.data tbody tr.active td:first-child{border-left:3px solid #ff9933} -table.table.data tbody tr.rowlink:hover td,table.table.data tbody tr:not(.no-data).selected td{background:#4ea5e0 !important;text-shadow:0 -1px 0 rgba(0,0,0,0.3);color:#ffffff} +table.table.data tbody tr.rowlink:hover td,table.table.data tbody tr:not(.no-data).selected td{background:#4ea5e0 !important;color:#ffffff} table.table.data tbody tr.rowlink:hover td a:not(.btn),table.table.data tbody tr:not(.no-data).selected td a:not(.btn),table.table.data tbody tr.rowlink:hover td span,table.table.data tbody tr:not(.no-data).selected td span,table.table.data tbody tr.rowlink:hover td i[class^="icon-"],table.table.data tbody tr:not(.no-data).selected td i[class^="icon-"]{color:#ffffff} -table.table.data tbody tr.rowlink:active td{text-shadow:0 -1px 0 rgba(0,0,0,0.3);background:#3498db !important;color:#ffffff} +table.table.data tbody tr.rowlink:active td{background:#3498db !important;color:#ffffff} table.table.data tbody tr.hidden td,table.table.data tbody tr.hidden th,table.table.data tbody tr.hidden td a,table.table.data tbody tr.hidden th a{display:none} table.table.data tbody tr.strike td,table.table.data tbody tr.strike th,table.table.data tbody tr.strike td a,table.table.data tbody tr.strike th a{text-decoration:line-through} table.table.data tbody tr.frozen td,table.table.data tbody tr.frozen th,table.table.data tbody tr.frozen td a,table.table.data tbody tr.frozen th a{color:#337ab7} @@ -2895,7 +2892,7 @@ ul.autocomplete.dropdown-menu.inspector-autocomplete li a{padding:5px 12px;white } .modal-content{-webkit-box-shadow:0 27px 24px 0 rgba(0,0,0,0.2),0 40px 77px 0 rgba(0,0,0,0.22);box-shadow:0 27px 24px 0 rgba(0,0,0,0.2),0 40px 77px 0 rgba(0,0,0,0.22);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;border:none;background:#f9f9f9} .modal-content.popup-shaking{-webkit-animation:popup-shake 0.82s cubic-bezier(0.36,0.07000000000000001,0.19,0.97) both;animation:popup-shake 0.82s cubic-bezier(0.36,0.07000000000000001,0.19,0.97) both;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px} -.modal-header{background:transparent;color:#2a3e51;text-shadow:0 1px 0 rgba(255,255,255,0.35);border-top-right-radius:3px;border-top-left-radius:3px;padding:20px 20px;border:none} +.modal-header{background:transparent;color:#2a3e51;border-top-right-radius:3px;border-top-left-radius:3px;padding:20px 20px;border:none} .modal-header h4{font-weight:normal;font-size:18px} .modal-footer{background:transparent;border:none;margin-top:0;padding:0 20px 20px 20px} .modal-body{padding-top:0;padding-bottom:0} From dc528e875c3a9de97aaf53665e941c4b6bdaaa42 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 20 May 2017 17:38:31 +1000 Subject: [PATCH 024/112] services.json -> services.php --- storage/framework/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore index 1670e9066..60f760e2d 100644 --- a/storage/framework/.gitignore +++ b/storage/framework/.gitignore @@ -1,6 +1,6 @@ config.php routes.php compiled.php -services.json +services.php events.scanned.php routes.scanned.php From 04e1f6e62ee1d7899a46e3a534af93fcc43cf013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Gerg=C5=91?= Date: Sat, 20 May 2017 11:54:55 +0200 Subject: [PATCH 025/112] Typo It is low priority changes. Yesterday I found them too, when I fixed the array index name issue. --- modules/cms/widgets/AssetList.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/cms/widgets/AssetList.php b/modules/cms/widgets/AssetList.php index c8575188d..22b2ac10b 100644 --- a/modules/cms/widgets/AssetList.php +++ b/modules/cms/widgets/AssetList.php @@ -151,7 +151,7 @@ class AssetList extends WidgetBase if (!@File::delete($fullPath)) { throw new ApplicationException(Lang::get( 'cms::lang.asset.error_deleting_file', - ['name'=>$path] + ['name' => $path] )); } } @@ -160,14 +160,14 @@ class AssetList extends WidgetBase if ($empty === false) { throw new ApplicationException(Lang::get( 'cms::lang.asset.error_deleting_dir_not_empty', - ['name'=>$path] + ['name' => $path] )); } if (!@rmdir($fullPath)) { throw new ApplicationException(Lang::get( 'cms::lang.asset.error_deleting_dir', - ['name'=>$path] + ['name' => $path] )); } } @@ -248,7 +248,7 @@ class AssetList extends WidgetBase } return [ - '#'.$this->getId('asset-list') => $this->makePartial('items', ['items'=>$this->getData()]) + '#'.$this->getId('asset-list') => $this->makePartial('items', ['items' => $this->getData()]) ]; } @@ -289,7 +289,7 @@ class AssetList extends WidgetBase } return [ - '#'.$this->getId('asset-list') => $this->makePartial('items', ['items'=>$this->getData()]) + '#'.$this->getId('asset-list') => $this->makePartial('items', ['items' => $this->getData()]) ]; } @@ -390,7 +390,7 @@ class AssetList extends WidgetBase } return [ - '#'.$this->getId('asset-list') => $this->makePartial('items', ['items'=>$this->getData()]) + '#'.$this->getId('asset-list') => $this->makePartial('items', ['items' => $this->getData()]) ]; } From cefa19af7d49504a38b57e5565e1132809ed2e1f Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 20 May 2017 20:00:24 +1000 Subject: [PATCH 026/112] Backend UI improvements --- modules/backend/assets/css/october.css | 2 +- modules/backend/assets/js/october-min.js | 1 + modules/backend/assets/js/october.layout.js | 2 ++ .../backend/assets/less/controls/sidenav-tree.less | 1 + modules/backend/layouts/_mainmenu.htm | 9 ++++----- .../assets/js/mediamanager-browser-min.js | 2 +- modules/system/assets/css/styles.css | 2 +- modules/system/assets/ui/less/checkbox.less | 2 +- modules/system/assets/ui/less/form.less | 2 +- modules/system/assets/ui/less/icon.close.less | 1 + modules/system/assets/ui/less/list.less | 2 +- modules/system/assets/ui/less/tab.less | 2 +- modules/system/assets/ui/storm.css | 14 +++++++------- 13 files changed, 23 insertions(+), 19 deletions(-) diff --git a/modules/backend/assets/css/october.css b/modules/backend/assets/css/october.css index 38ac53bef..330079a01 100644 --- a/modules/backend/assets/css/october.css +++ b/modules/backend/assets/css/october.css @@ -426,7 +426,7 @@ body.dragging .control-treeview.treeview-light ol.dragging > li > div,body.dragg .sidenav-tree ul.top-level > li[data-status=collapsed] > div.group:before,.sidenav-tree ul.top-level > li[data-status=collapsed] > div.group:after{display:none} .sidenav-tree ul.top-level > li[data-status=collapsed] ul{display:none} .sidenav-tree ul.top-level > li > div.group{position:relative} -.sidenav-tree ul.top-level > li > div.group h3{background:rgba(0,0,0,0.15);color:#ecf0f1;text-transform:uppercase;font-size:15px;padding:15px 15px 15px 40px;margin:0;position:relative;cursor:pointer} +.sidenav-tree ul.top-level > li > div.group h3{background:rgba(0,0,0,0.15);color:#ecf0f1;text-transform:uppercase;font-size:15px;padding:15px 15px 15px 40px;margin:0;position:relative;cursor:pointer;font-weight:400} .sidenav-tree ul.top-level > li > div.group h3:before{display:block;position:absolute;width:10px;height:10px;left:16px;top:15px;color:#cfcfcf;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f105";-webkit-transform:rotate(90deg) translate(5px,-3px);-ms-transform:rotate(90deg) translate(5px,-3px);transform:rotate(90deg) translate(5px,-3px);-webkit-transition:all 0.1s ease;transition:all 0.1s ease;font-size:16px} .sidenav-tree ul.top-level > li > div.group:before,.sidenav-tree ul.top-level > li > div.group:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid #34495e;border-bottom-width:0;position:absolute;left:15px;bottom:-8px;z-index:101} .sidenav-tree ul.top-level > li > div.group:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid rgba(0,0,0,0.15);border-bottom-width:0} diff --git a/modules/backend/assets/js/october-min.js b/modules/backend/assets/js/october-min.js index 9df076e65..a353edc5a 100644 --- a/modules/backend/assets/js/october-min.js +++ b/modules/backend/assets/js/october-min.js @@ -917,6 +917,7 @@ fixedWidth+=$el.get(0).offsetWidth+margin}) $(this).width(fixedWidth) $(this).trigger('oc.widthFixed')}})} OctoberLayout.prototype.toggleAccountMenu=function(el){var self=this,$el=$(el),$parent=$(el).parent(),$menu=$el.next() +$el.tooltip('hide') if($menu.hasClass('active')){self.$accountMenuOverlay.remove() $parent.removeClass('highlight') $menu.removeClass('active')} diff --git a/modules/backend/assets/js/october.layout.js b/modules/backend/assets/js/october.layout.js index 6c2420830..3f0af1c8a 100644 --- a/modules/backend/assets/js/october.layout.js +++ b/modules/backend/assets/js/october.layout.js @@ -44,6 +44,8 @@ $parent = $(el).parent(), $menu = $el.next() + $el.tooltip('hide') + if ($menu.hasClass('active')) { self.$accountMenuOverlay.remove() $parent.removeClass('highlight') diff --git a/modules/backend/assets/less/controls/sidenav-tree.less b/modules/backend/assets/less/controls/sidenav-tree.less index 7cb1ccead..35f96a155 100644 --- a/modules/backend/assets/less/controls/sidenav-tree.less +++ b/modules/backend/assets/less/controls/sidenav-tree.less @@ -61,6 +61,7 @@ margin: 0; position: relative; cursor: pointer; + font-weight: 400; &:before { display: block; diff --git a/modules/backend/layouts/_mainmenu.htm b/modules/backend/layouts/_mainmenu.htm index 712c7f0b6..193bf4587 100644 --- a/modules/backend/layouts/_mainmenu.htm +++ b/modules/backend/layouts/_mainmenu.htm @@ -48,11 +48,10 @@ -