diff --git a/CHANGELOG.md b/CHANGELOG.md index 618c2cb..845ba97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ ## [Unreleased] +## 2.2.0 +### Added +- fix #84: update icons +- fix #85: use Nextcloud colors by default + +### Fixed +- Fix categories order in large menu + ## 2.1.0 ### Added - add compatibility with Nextcloud 23 diff --git a/appinfo/info.xml b/appinfo/info.xml index f220757..126024d 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -26,7 +26,7 @@ If you like this application and if you want to support the development: * [Donate with liberapay](https://liberapay.com/deblan) * [Leave a comment](https://apps.nextcloud.com/apps/side_menu#comments) ]]> - 2.1.0 + 2.2.0 agpl Simon Vieille SideMenu diff --git a/img/side-menu-opener-closer.svg b/img/side-menu-opener-closer.svg index 3774c6d..0aa965f 100644 --- a/img/side-menu-opener-closer.svg +++ b/img/side-menu-opener-closer.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/img/side-menu-opener-dark.svg b/img/side-menu-opener-dark.svg index 7b56e7a..c6a026c 100644 --- a/img/side-menu-opener-dark.svg +++ b/img/side-menu-opener-dark.svg @@ -1,173 +1 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/img/side-menu-opener-hamburger-2-dark.svg b/img/side-menu-opener-hamburger-2-dark.svg index 505ddee..504e037 100644 --- a/img/side-menu-opener-hamburger-2-dark.svg +++ b/img/side-menu-opener-hamburger-2-dark.svg @@ -1,102 +1 @@ - - - - - - image/svg+xml - - - - - - - - - - - - + \ No newline at end of file diff --git a/img/side-menu-opener-hamburger-2.svg b/img/side-menu-opener-hamburger-2.svg index b5eb64c..e7034ae 100644 --- a/img/side-menu-opener-hamburger-2.svg +++ b/img/side-menu-opener-hamburger-2.svg @@ -1,101 +1 @@ - - - - - - image/svg+xml - - - - - - - - - - - + \ No newline at end of file diff --git a/img/side-menu-opener-hamburger-dark.svg b/img/side-menu-opener-hamburger-dark.svg index 5d60f54..3585049 100644 --- a/img/side-menu-opener-hamburger-dark.svg +++ b/img/side-menu-opener-hamburger-dark.svg @@ -1,92 +1 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - + \ No newline at end of file diff --git a/img/side-menu-opener-hamburger.svg b/img/side-menu-opener-hamburger.svg index c1b1325..09ae9db 100644 --- a/img/side-menu-opener-hamburger.svg +++ b/img/side-menu-opener-hamburger.svg @@ -1,91 +1 @@ - - - - - - image/svg+xml - - - - - - - - - - - - + \ No newline at end of file diff --git a/img/side-menu-opener.svg b/img/side-menu-opener.svg index 32abf78..6294ecb 100644 --- a/img/side-menu-opener.svg +++ b/img/side-menu-opener.svg @@ -1,172 +1 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/lib/Controller/CssController.php b/lib/Controller/CssController.php index cdbf11a..b48c35c 100644 --- a/lib/Controller/CssController.php +++ b/lib/Controller/CssController.php @@ -27,6 +27,8 @@ use OCP\AppFramework\Http\Response; use OCP\AppFramework\Http\TemplateResponse; use OCP\IRequest; use OCP\IUserSession; +use OCA\Theming\ThemingDefaults; +use OCA\SideMenu\Service\Color; class CssController extends Controller { @@ -40,12 +42,30 @@ class CssController extends Controller */ protected $user; - public function __construct(string $appName, IRequest $request, ConfigProxy $config) + /** + * @var ThemingDefaults + */ + protected $theming; + + /** + * @var Color + */ + protected $color; + + public function __construct( + string $appName, + IRequest $request, + ConfigProxy $config, + ThemingDefaults $theming, + Color $color + ) { parent::__construct($appName, $request); $this->user = OC::$server[IUserSession::class]->getUser(); $this->config = $config; + $this->theming = $theming; + $this->color = $color; } /** @@ -90,23 +110,29 @@ class CssController extends Controller $isDarkMode = ($isAccessibilityAppEnabled && $isDarkThemeUserEnabled) || ($isBreezeDarkAppEnabled && $isBreezeDarkUserEnabled); + $primaryColor = $this->theming->getColorPrimary(); + $lightenPrimaryColor = $this->color->adjustBrightness($primaryColor, 0.2); + $darkenPrimaryColor = $this->color->adjustBrightness($primaryColor, -0.2); + $darkenPrimaryColor2 = $this->color->adjustBrightness($primaryColor, -0.3); + $textColor = $this->theming->getTextColorPrimary(); + if ($isDarkMode) { - $backgroundColor = $this->config->getAppValue('dark-mode-background-color', '#333333'); - $backgroundColorTo = $this->config->getAppValue('dark-mode-background-color-to', $backgroundColor); - $currentAppBackgroundColor = $this->config->getAppValue('dark-mode-current-app-background-color', '#444444'); - $loaderColor = $this->config->getAppValue('dark-mode-loader-color', '#cccccc'); - $textColor = $this->config->getAppValue('dark-mode-text-color', '#FFFFFF'); + $backgroundColor = $this->config->getAppValue('dark-mode-background-color', $darkenPrimaryColor); + $backgroundColorTo = $this->config->getAppValue('dark-mode-background-color-to', $darkenPrimaryColor); + $currentAppBackgroundColor = $this->config->getAppValue('dark-mode-current-app-background-color', $darkenPrimaryColor2); + $loaderColor = $this->config->getAppValue('dark-mode-loader-color', $lightenPrimaryColor); + $textColor = $this->config->getAppValue('dark-mode-text-color', $textColor); $iconInvertFilter = abs($this->config->getAppValueInt('dark-mode-icon-invert-filter', '0')).'%'; $iconOpacity = abs($this->config->getAppValueInt('dark-mode-icon-opacity', '100') / 100); $opener = $this->config->getAppValue('dark-mode-opener', 'side-menu-opener'); $backgroundOpacity = dechex($this->config->getAppValueInt('dark-mode-background-color-opacity', '100') * 255 / 100); } else { - $backgroundColor = $this->config->getAppValue('background-color', '#333333'); - $backgroundColorTo = $this->config->getAppValue('background-color-to', $backgroundColor); - $currentAppBackgroundColor = $this->config->getAppValue('current-app-background-color', '#444444'); - $loaderColor = $this->config->getAppValue('loader-color', '#0e75ac'); - $textColor = $this->config->getAppValue('text-color', '#FFFFFF'); + $backgroundColor = $this->config->getAppValue('background-color', $darkenPrimaryColor); + $backgroundColorTo = $this->config->getAppValue('background-color-to', $darkenPrimaryColor); + $currentAppBackgroundColor = $this->config->getAppValue('current-app-background-color', $darkenPrimaryColor2); + $loaderColor = $this->config->getAppValue('loader-color', $lightenPrimaryColor); + $textColor = $this->config->getAppValue('text-color', $textColor); $iconInvertFilter = abs($this->config->getAppValueInt('icon-invert-filter', '0')).'%'; $iconOpacity = abs($this->config->getAppValueInt('icon-opacity', '100') / 100); $opener = $this->config->getAppValue('opener', 'side-menu-opener'); diff --git a/lib/Controller/NavController.php b/lib/Controller/NavController.php index 4f6625e..41aff0c 100644 --- a/lib/Controller/NavController.php +++ b/lib/Controller/NavController.php @@ -187,9 +187,18 @@ class NavController extends Controller usort($items, function ($a, $b) use ($categoriesLabels) { foreach ($categoriesLabels as $key => $value) { + if ($a['categoryId'] === 'other') { + return -1; + } + + if ($b['categoryId'] === 'other') { + return 1; + } + if ($a['categoryId'] === $key) { return -1; } + if ($b['categoryId'] === $key) { return 1; } diff --git a/lib/Service/Color.php b/lib/Service/Color.php new file mode 100644 index 0000000..cf90dd6 --- /dev/null +++ b/lib/Service/Color.php @@ -0,0 +1,34 @@ + + */ +class Color +{ + /** + * @thanks https://stackoverflow.com/posts/54393956/revision + */ + public function adjustBrightness(string $hexCode, float $adjustPercent): string + { + $hexCode = ltrim($hexCode, '#'); + + if (3 == strlen($hexCode)) { + $hexCode = $hexCode[0].$hexCode[0].$hexCode[1].$hexCode[1].$hexCode[2].$hexCode[2]; + } + + $hexCode = array_map('hexdec', str_split($hexCode, 2)); + + foreach ($hexCode as &$color) { + $adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color; + $adjustAmount = ceil($adjustableLimit * $adjustPercent); + + $color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT); + } + + return '#'.implode($hexCode); + } +} diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index 8885c13..e7a2bab 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -26,6 +26,8 @@ use OCP\AppFramework\Http\TemplateResponse; use OCP\IL10N; use OCP\ILogger; use OCP\Settings\ISettings; +use OCA\Theming\ThemingDefaults; +use OCA\SideMenu\Service\Color; class Admin implements ISettings { @@ -54,18 +56,32 @@ class Admin implements ISettings */ private $categoryRepository; + /** + * @var ThemingDefaults + */ + protected $theming; + + /** + * @var Color + */ + protected $color; + public function __construct( IL10N $l, ILogger $logger, ConfigProxy $config, AppRepository $appRepository, - CategoryRepository $categoryRepository + CategoryRepository $categoryRepository, + ThemingDefaults $theming, + Color $color ) { $this->l = $l; $this->logger = $logger; $this->config = $config; $this->appRepository = $appRepository; $this->categoryRepository = $categoryRepository; + $this->theming = $theming; + $this->color = $color; } /** @@ -73,29 +89,35 @@ class Admin implements ISettings */ public function getForm() { - $backgroundColor = $this->config->getAppValue('background-color', '#333333'); - $backgroundColorTo = $this->config->getAppValue('background-color-to', $backgroundColor); + $primaryColor = $this->theming->getColorPrimary(); + $lightenPrimaryColor = $this->color->adjustBrightness($primaryColor, 0.2); + $darkenPrimaryColor = $this->color->adjustBrightness($primaryColor, -0.2); + $darkenPrimaryColor2 = $this->color->adjustBrightness($primaryColor, -0.3); + $textColor = $this->theming->getTextColorPrimary(); - $darkModeBackgroundColor = $this->config->getAppValue('dark-mode-background-color', '#333333'); - $darkModeBackgroundColorTo = $this->config->getAppValue('dark-mode-background-color-to', $darkModeBackgroundColor); + $backgroundColor = $this->config->getAppValue('background-color', $darkenPrimaryColor); + $backgroundColorTo = $this->config->getAppValue('background-color-to', $darkenPrimaryColor); + + $darkModeBackgroundColor = $this->config->getAppValue('dark-mode-background-color', $darkenPrimaryColor); + $darkModeBackgroundColorTo = $this->config->getAppValue('dark-mode-background-color-to', $darkenPrimaryColor); $parameters = [ 'background-color' => $backgroundColor, 'background-color-to' => $backgroundColorTo, 'background-color-opacity' => $this->config->getAppValueInt('background-color-opacity', '100'), - 'current-app-background-color' => $this->config->getAppValue('current-app-background-color', '#444444'), - 'loader-color' => $this->config->getAppValue('loader-color', '#0e75ac'), + 'current-app-background-color' => $this->config->getAppValue('current-app-background-color', $darkenPrimaryColor2), + 'loader-color' => $this->config->getAppValue('loader-color', $lightenPrimaryColor), 'icon-invert-filter' => $this->config->getAppValueInt('icon-invert-filter', '0'), 'icon-opacity' => $this->config->getAppValueInt('icon-opacity', '100'), - 'text-color' => $this->config->getAppValue('text-color', '#FFFFFF'), + 'text-color' => $this->config->getAppValue('text-color', $textColor), 'dark-mode-background-color' => $darkModeBackgroundColor, 'dark-mode-background-color-to' => $darkModeBackgroundColorTo, 'dark-mode-background-color-opacity' => $this->config->getAppValueInt('dark-mode-background-color-opacity', '100'), - 'dark-mode-current-app-background-color' => $this->config->getAppValue('dark-mode-current-app-background-color', '#444444'), - 'dark-mode-loader-color' => $this->config->getAppValue('dark-mode-loader-color', '#cccccc'), + 'dark-mode-current-app-background-color' => $this->config->getAppValue('dark-mode-current-app-background-color', $darkenPrimaryColor2), + 'dark-mode-loader-color' => $this->config->getAppValue('dark-mode-loader-color', $textColor), 'dark-mode-icon-invert-filter' => $this->config->getAppValueInt('dark-mode-icon-invert-filter', '0'), 'dark-mode-icon-opacity' => $this->config->getAppValueInt('dark-mode-icon-opacity', '100'), - 'dark-mode-text-color' => $this->config->getAppValue('dark-mode-text-color', '#FFFFFF'), + 'dark-mode-text-color' => $this->config->getAppValue('dark-mode-text-color', $textColor), 'dark-mode-opener' => $this->config->getAppValue('dark-mode-opener', 'side-menu-opener'), 'opener' => $this->config->getAppValue('opener', 'side-menu-opener'), 'loader-enabled' => $this->config->getAppValue('loader-enabled', '1'), diff --git a/package.json b/package.json index 38edace..e87767d 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,9 @@ "stylelint:fix": "stylelint src --fix" }, "dependencies": { - "@nextcloud/axios": "^1.3.2", + "@nextcloud/axios": "^1.8.0", "@nextcloud/vue": "^1.4.0", - "axios": "^0.19.2", + "axios": "^0.24.0", "trim": "0.0.1", "vue": "^2.6.11" },