diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/theming/lib/ThemingDefaults.php | 24 | ||||
-rw-r--r-- | apps/theming/src/components/BackgroundSettings.vue | 29 |
2 files changed, 33 insertions, 20 deletions
diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php index dce6b875db1..9d5183a6504 100644 --- a/apps/theming/lib/ThemingDefaults.php +++ b/apps/theming/lib/ThemingDefaults.php @@ -214,10 +214,8 @@ class ThemingDefaults extends \OC_Defaults { /** * Color that is used for the header as well as for mail headers - * - * @return string */ - public function getColorPrimary() { + public function getColorPrimary(): string { $user = $this->userSession->getUser(); // admin-defined primary color @@ -227,20 +225,20 @@ class ThemingDefaults extends \OC_Defaults { $themingBackground = ''; if (!empty($user)) { $themingBackground = $this->config->getUserValue($user->getUID(), Application::APP_ID, 'background', ''); - - // if the user-selected background is a background reference - if (!preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', $themingBackground)) { - if ($themingBackground === 'default') { - return BackgroundService::DEFAULT_COLOR; - } else if (isset(BackgroundService::SHIPPED_BACKGROUNDS[$themingBackground]['primary_color'])) { - return BackgroundService::SHIPPED_BACKGROUNDS[$themingBackground]['primary_color']; - } + // If the user selected the default background + if ($themingBackground === '') { + return BackgroundService::DEFAULT_COLOR; } // If the user selected a specific colour if (preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', $themingBackground)) { return $themingBackground; } + + // if the user-selected background is a background reference + if (isset(BackgroundService::SHIPPED_BACKGROUNDS[$themingBackground]['primary_color'])) { + return BackgroundService::SHIPPED_BACKGROUNDS[$themingBackground]['primary_color']; + } } // If the default color is not valid, return the default background one @@ -254,10 +252,8 @@ class ThemingDefaults extends \OC_Defaults { /** * Return the default color primary - * - * @return string */ - public function getDefaultColorPrimary() { + public function getDefaultColorPrimary(): string { $color = $this->config->getAppValue(Application::APP_ID, 'color'); if (!preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', $color)) { $color = '#0082c9'; diff --git a/apps/theming/src/components/BackgroundSettings.vue b/apps/theming/src/components/BackgroundSettings.vue index 1c0b68ac9a9..6d2fcecbd3b 100644 --- a/apps/theming/src/components/BackgroundSettings.vue +++ b/apps/theming/src/components/BackgroundSettings.vue @@ -132,18 +132,30 @@ export default { }, methods: { + /** + * Do we need to invert the text if color is too bright? + * + * @param {string} color the hex color + */ invertTextColor(color) { - const l = this.calculateLuma(color) - if (l > 0.6) { - return true - } else { - return false - } + return this.calculateLuma(color) > 0.6 }, + + /** + * Calculate luminance of provided hex color + * + * @param {string} color the hex color + */ calculateLuma(color) { const [red, green, blue] = this.hexToRGB(color) return (0.2126 * red + 0.7152 * green + 0.0722 * blue) / 255 }, + + /** + * Convert hex color to RGB + * + * @param {string} hex the hex color + */ hexToRGB(hex) { const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex) return result @@ -166,21 +178,25 @@ export default { } image.src = this.backgroundImage }, + async setDefault() { this.loading = 'default' const result = await axios.post(generateUrl('/apps/theming/background/default')) this.update(result.data) }, + async setShipped(shipped) { this.loading = shipped const result = await axios.post(generateUrl('/apps/theming/background/shipped'), { value: shipped }) this.update(result.data) }, + async setFile(path) { this.loading = 'custom' const result = await axios.post(generateUrl('/apps/theming/background/custom'), { value: path }) this.update(result.data) }, + debouncePickColor: debounce(function() { this.pickColor(...arguments) }, 200), @@ -190,6 +206,7 @@ export default { const result = await axios.post(generateUrl('/apps/theming/background/color'), { value: color }) this.update(result.data) }, + pickFile() { window.OC.dialogs.filepicker(t('theming', 'Insert from {productName}', { productName: OC.theme.name }), (path, type) => { if (type === OC.dialogs.FILEPICKER_TYPE_CHOOSE) { |