Add default theming disabled fallback

Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
pull/31751/head
John Molakvoæ 3 years ago
parent 05a33ad713
commit 850d8ac1cd
No known key found for this signature in database
GPG Key ID: 60C25B8C072916CF
  1. 57
      apps/theming/css/default.css
  2. 1
      apps/theming/lib/Service/ThemeInjectionService.php
  3. 2
      apps/theming/lib/Service/ThemesService.php
  4. 2
      apps/theming/tests/Service/ThemesServiceTest.php
  5. 146
      apps/theming/tests/Themes/DefaultThemeTest.php
  6. 5
      lib/private/TemplateLayout.php

@ -0,0 +1,57 @@
:root {
--color-main-background: #ffffff;
--color-main-background-rgb: 255,255,255;
--color-main-background-translucent: rgba(var(--color-main-background-rgb), .97);
--gradient-main-background: var(--color-main-background) 0%, var(--color-main-background-translucent) 85%, transparent 100%;
--color-background-hover: #f5f5f5;
--color-background-dark: #ededed;
--color-background-darker: #dbdbdb;
--color-placeholder-light: #e6e6e6;
--color-placeholder-dark: #cccccc;
--color-primary: #0082c9;
--color-primary-text: #ffffff;
--color-primary-hover: #198ece;
--color-primary-light: #72bae1;
--color-primary-light-text: #0082c9;
--color-primary-light-hover: #0f567d;
--color-primary-text-dark: #ededed;
--color-primary-element: #0082c9;
--color-primary-element-hover: #198ece;
--color-primary-element-light: #17adff;
--color-primary-element-lighter: #6cb7df;
--color-main-text: #222222;
--color-text-maxcontrast: #767676;
--color-text-light: #222222;
--color-text-lighter: #767676;
--color-error: #e9322d;
--color-error-hover: #eb4642;
--color-warning: #eca700;
--color-warning-hover: #edaf19;
--color-success: #46ba61;
--color-success-hover: #58c070;
--color-loading-light: #cccccc;
--color-loading-dark: #444444;
--color-box-shadow-rgb: 77,77,77;
--color-box-shadow: rgba(var(--color-box-shadow-rgb), 0.5);
--color-border: #ededed;
--color-border-dark: #dbdbdb;
--font-face: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, Ubuntu, 'Helvetica Neue', Arial, sans-serif, 'Noto Color Emoji', 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
--default-font-size: 15px;
--animation-quick: 100ms;
--animation-slow: 300ms;
--border-radius: 3px;
--border-radius-large: 10px;
--border-radius-pill: 100px;
--default-line-height: 24px;
--header-height: 50px;
--navigation-width: 300px;
--sidebar-min-width: 300px;
--sidebar-max-width: 500px;
--list-min-width: 200px;
--list-max-width: 300px;
--header-menu-item-height: 44px;
--header-menu-profile-item-height: 66px;
--breakpoint-mobile: 1024px;
--primary-invert-if-bright: unset;
--background-invert-if-dark: unset;
}

@ -22,7 +22,6 @@
*/ */
namespace OCA\Theming\Service; namespace OCA\Theming\Service;
use OCA\Theming\AppInfo\Application;
use OCA\Theming\Themes\DefaultTheme; use OCA\Theming\Themes\DefaultTheme;
use OCP\IURLGenerator; use OCP\IURLGenerator;
use OCP\Util; use OCP\Util;

@ -99,7 +99,7 @@ class ThemesService {
return $t->getId(); return $t->getId();
}, array_values($filteredThemes)); }, array_values($filteredThemes));
$enabledThemes = [...array_diff($themesIds, $filteredThemesIds), $theme->getId()]; $enabledThemes = array_merge(array_diff($themesIds, $filteredThemesIds), [$theme->getId()]);
$this->setEnabledThemes($enabledThemes); $this->setEnabledThemes($enabledThemes);
return $enabledThemes; return $enabledThemes;

@ -55,7 +55,7 @@ use OCP\IUserSession;
use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase; use Test\TestCase;
class UserThemeControllerTest extends TestCase { class ThemesServiceTest extends TestCase {
/** @var ThemesService */ /** @var ThemesService */
private $themesService; private $themesService;

@ -0,0 +1,146 @@
<?php
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @author Daniel Calviño Sánchez <danxuliu@gmail.com>
* @author Joas Schilling <coding@schilljs.com>
* @author John Molakvoæ <skjnldsv@protonmail.com>
* @author Julius Haertl <jus@bitgrid.net>
* @author Julius Härtl <jus@bitgrid.net>
* @author Kyle Fazzari <kyrofa@ubuntu.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Michael Weimann <mail@michael-weimann.eu>
* @author rakekniven <mark.ziegler@rakekniven.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Theming\Tests\Service;
use OC\App\AppManager;
use OCA\Theming\ImageManager;
use OCA\Theming\ITheme;
use OCA\Theming\Themes\DefaultTheme;
use OCA\Theming\ThemingDefaults;
use OCA\Theming\Util;
use OCP\Files\IAppData;
use OCP\IConfig;
use OCP\IL10N;
use OCP\IURLGenerator;
use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class DefaultThemeTest extends TestCase {
/** @var ThemingDefaults|MockObject */
private $themingDefaults;
/** @var IURLGenerator|MockObject */
private $urlGenerator;
/** @var ImageManager|MockObject */
private $imageManager;
/** @var IConfig|MockObject */
private $config;
/** @var IL10N|MockObject */
private $l10n;
private DefaultTheme $defaultTheme;
protected function setUp(): void {
$this->themingDefaults = $this->createMock(ThemingDefaults::class);
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->imageManager = $this->createMock(ImageManager::class);
$this->config = $this->createMock(IConfig::class);
$this->l10n = $this->createMock(IL10N::class);
$util = new Util(
$this->config,
$this->createMock(AppManager::class),
$this->createMock(IAppData::class)
);
$this->themingDefaults
->expects($this->any())
->method('getColorPrimary')
->willReturn('#0082c9');
$this->l10n
->expects($this->any())
->method('t')
->willReturnCallback(function ($text, $parameters = []) {
return vsprintf($text, $parameters);
});
$this->defaultTheme = new DefaultTheme(
$util,
$this->themingDefaults,
$this->urlGenerator,
$this->imageManager,
$this->config,
$this->l10n,
);
parent::setUp();
}
public function testGetId() {
$this->assertEquals('default', $this->defaultTheme->getId());
}
public function testGetType() {
$this->assertEquals(ITheme::TYPE_THEME, $this->defaultTheme->getType());
}
public function testGetTitle() {
$this->assertEquals('Light theme', $this->defaultTheme->getTitle());
}
public function testGetEnableLabel() {
$this->assertEquals('Enable the default light theme', $this->defaultTheme->getEnableLabel());
}
public function testGetDescription() {
$this->assertEquals('The default light appearance.', $this->defaultTheme->getDescription());
}
public function testGetMediaQuery() {
$this->assertEquals('', $this->defaultTheme->getMediaQuery());
}
public function testGetCustomCss() {
$this->assertEquals('', $this->defaultTheme->getCustomCss());
}
/**
* Ensure parity between the default theme and the static generated file
* @see ThemingController.php:313
*/
public function testThemindDisabledFallbackCss() {
// Generate variables
$variables = '';
foreach ($this->defaultTheme->getCSSVariables() as $variable => $value) {
$variables .= " $variable: $value;" . PHP_EOL;
};
$css = ":root { " . PHP_EOL . "$variables}" . PHP_EOL;
$fallbackCss = file_get_contents(__DIR__ . '/../../css/default.css');
$this->assertEquals($css, $fallbackCss);
}
}

@ -81,6 +81,11 @@ class TemplateLayout extends \OC_Template {
/** @var IInitialStateService */ /** @var IInitialStateService */
$this->initialState = \OC::$server->get(IInitialStateService::class); $this->initialState = \OC::$server->get(IInitialStateService::class);
// Add fallback theming variables if theming is disabled
if (!\OC::$server->getAppManager()->isEnabledForUser('theming')) {
// TODO cache generated default theme if enabled for fallback if server is erroring ?
Util::addStyle('theming', 'default');
}
// Decide which page we show // Decide which page we show
if ($renderAs === TemplateResponse::RENDER_AS_USER) { if ($renderAs === TemplateResponse::RENDER_AS_USER) {

Loading…
Cancel
Save