Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Weimann <mail@michael-weimann.eu>2018-08-28 13:01:32 +0300
committerRoeland Jago Douma <roeland@famdouma.nl>2018-10-02 09:37:54 +0300
commit92049c3ceb4121c6e424e8ba902cc6ebc663c690 (patch)
treeeb8a283e260e2b0918d13087c29af96d494fde58
parent7526971c95250807ac1ec485297919a27ee0dcfc (diff)
Switches the default logo color depending on the primary color
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
-rw-r--r--apps/theming/css/theming.scss11
-rw-r--r--apps/theming/lib/ImageManager.php2
-rw-r--r--apps/theming/lib/ThemingDefaults.php20
-rw-r--r--apps/theming/tests/ThemingDefaultsTest.php67
-rw-r--r--core/img/logo-blue.pngbin0 -> 6112 bytes
-rw-r--r--core/img/logo-blue.svg76
6 files changed, 168 insertions, 8 deletions
diff --git a/apps/theming/css/theming.scss b/apps/theming/css/theming.scss
index f12ce4d907f..b1b8896d0c1 100644
--- a/apps/theming/css/theming.scss
+++ b/apps/theming/css/theming.scss
@@ -98,20 +98,21 @@
background-image: url(./img/core/filetypes/folder-drag-accept.svg?v=#{$theming-cachebuster}) !important;
}
+#theming-preview-logo,
+#header .logo {
+ background-image: $image-logo;
+}
+
/* override styles for login screen in guest.css */
@if variable_exists('theming-logo-mime') and $theming-logo-mime != '' {
#theming-preview-logo,
#header .logo {
- background-image: $image-logo;
background-size: contain;
}
+
#body-login #header .logo {
margin-bottom: 22px;
}
-} @else {
- #theming-preview-logo {
- background-image: $image-logo;
- }
}
@if variable_exists('theming-background-mime') and $theming-background-mime != '' {
diff --git a/apps/theming/lib/ImageManager.php b/apps/theming/lib/ImageManager.php
index dfbdb582da6..6a42c22aba5 100644
--- a/apps/theming/lib/ImageManager.php
+++ b/apps/theming/lib/ImageManager.php
@@ -84,6 +84,8 @@ class ImageManager {
case 'logoheader':
case 'favicon':
return $this->urlGenerator->imagePath('core', 'logo.png') . '?v=' . $cacheBusterCounter;
+ case 'logo-blue':
+ return $this->urlGenerator->imagePath('core', 'logo-blue.png') . '?v=' . $cacheBusterCounter;
case 'background':
return $this->urlGenerator->imagePath('core', 'background.png') . '?v=' . $cacheBusterCounter;
}
diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php
index 1df7a9f17bb..5a14e8a7903 100644
--- a/apps/theming/lib/ThemingDefaults.php
+++ b/apps/theming/lib/ThemingDefaults.php
@@ -275,7 +275,7 @@ class ThemingDefaults extends \OC_Defaults {
'theming-favicon-mime' => "'" . $this->config->getAppValue('theming', 'faviconMime') . "'"
];
- $variables['image-logo'] = "url('".$this->imageManager->getImageUrl('logo')."')";
+ $variables['image-logo'] = "url('". $this->getLogoUrl() ."')";
$variables['image-logoheader'] = "'".$this->imageManager->getImageUrl('logoheader')."'";
$variables['image-favicon'] = "'".$this->imageManager->getImageUrl('favicon')."'";
$variables['image-login-background'] = "url('".$this->imageManager->getImageUrl('background')."')";
@@ -301,6 +301,24 @@ class ThemingDefaults extends \OC_Defaults {
}
/**
+ * Returns the logo url.
+ * If there is a custom logo, it just returns it.
+ * For the default logo it returns the white or blue one depending on the color luminance.
+ *
+ * @return string
+ */
+ private function getLogoUrl() {
+ $logoMime = $this->config->getAppValue('theming', 'logoMime');
+ $primaryColor = $this->getColorPrimary();
+ $luminance = $this->util->calculateLuminance($primaryColor);
+ if ($logoMime === '' & $luminance > 0.8) {
+ return $this->imageManager->getImageUrl('logo-blue');
+ } else {
+ return $this->imageManager->getImageUrl('logo');
+ }
+ }
+
+ /**
* Check if the image should be replaced by the theming app
* and return the new image location then
*
diff --git a/apps/theming/tests/ThemingDefaultsTest.php b/apps/theming/tests/ThemingDefaultsTest.php
index 5d075709dc5..fc3a737c3c8 100644
--- a/apps/theming/tests/ThemingDefaultsTest.php
+++ b/apps/theming/tests/ThemingDefaultsTest.php
@@ -632,6 +632,66 @@ class ThemingDefaultsTest extends TestCase {
$this->assertEquals(['foo'=>'bar'], $this->template->getScssVariables());
}
+ /**
+ * Provides test data for the get logo scss variable test.
+ *
+ * @return array
+ */
+ public function provideTestGetImageLogoScssVariableTestData(): array {
+ return [
+ // default logo
+ ['', '#000000', 0.0, 'logo'],
+ ['', '#cccccc', 0.8, 'logo'],
+ ['', '#dddddd', 0.81, 'logo-blue'],
+ ['', '#ffffff', 1.0, 'logo-blue'],
+
+ // custom logo
+ ['image/png', '#000000', 0.0, 'logo'],
+ ['image/png', '#cccccc', 0.8, 'logo'],
+ ['image/png', '#dddddd', 0.81, 'logo'],
+ ['image/png', '#ffffff', 1.0, 'logo'],
+ ];
+ }
+
+ /**
+ * Tests chat the logo url scss variable has the expected value
+ * depending on color and custom logo presence.
+ *
+ * @dataProvider provideTestGetImageLogoScssVariableTestData
+ * @param string $themingLogoMime The custom logo mime type
+ * @param string $primaryColor The primary theme color
+ * @param float $luminance The calculated luminance
+ * @param string $expected The expected requested logo
+ * @return void
+ */
+ public function testGetImageLogoScssVariable(
+ string $themingLogoMime,
+ string $primaryColor,
+ float $luminance,
+ string $expected
+ ) {
+ $this->config->expects($this->at(5))
+ ->method('getAppValue')
+ ->with('theming', 'logoMime')
+ ->willReturn($themingLogoMime);
+ $this->config->expects($this->at(6))
+ ->method('getAppValue')
+ ->with('theming', 'color', $this->defaults->getColorPrimary())
+ ->willReturn($primaryColor);
+
+ $this->util
+ ->method('calculateLuminance')
+ ->with($primaryColor)
+ ->willReturn($luminance);
+
+ $this->imageManager->expects($this->at(0))
+ ->method('getImageUrl')
+ ->with($expected)
+ ->willReturn('custom-logo?v=0');
+
+ $this->template->getScssVariables();
+ }
+
public function testGetScssVariables() {
$this->config->expects($this->at(0))->method('getAppValue')->with('theming', 'cachebuster', '0')->willReturn('0');
$this->config->expects($this->at(1))->method('getAppValue')->with('theming', 'logoMime', false)->willReturn('jpeg');
@@ -639,10 +699,13 @@ class ThemingDefaultsTest extends TestCase {
$this->config->expects($this->at(3))->method('getAppValue')->with('theming', 'logoheaderMime', false)->willReturn('jpeg');
$this->config->expects($this->at(4))->method('getAppValue')->with('theming', 'faviconMime', false)->willReturn('jpeg');
- $this->config->expects($this->at(5))->method('getAppValue')->with('theming', 'color', null)->willReturn($this->defaults->getColorPrimary());
+ $this->config->expects($this->at(5))->method('getAppValue')->with('theming', 'logoMime', false)->willReturn('jpeg');
$this->config->expects($this->at(6))->method('getAppValue')->with('theming', 'color', $this->defaults->getColorPrimary())->willReturn($this->defaults->getColorPrimary());
- $this->config->expects($this->at(7))->method('getAppValue')->with('theming', 'color', $this->defaults->getColorPrimary())->willReturn($this->defaults->getColorPrimary());
+
+ $this->config->expects($this->at(7))->method('getAppValue')->with('theming', 'color', null)->willReturn($this->defaults->getColorPrimary());
$this->config->expects($this->at(8))->method('getAppValue')->with('theming', 'color', $this->defaults->getColorPrimary())->willReturn($this->defaults->getColorPrimary());
+ $this->config->expects($this->at(9))->method('getAppValue')->with('theming', 'color', $this->defaults->getColorPrimary())->willReturn($this->defaults->getColorPrimary());
+ $this->config->expects($this->at(10))->method('getAppValue')->with('theming', 'color', $this->defaults->getColorPrimary())->willReturn($this->defaults->getColorPrimary());
$this->util->expects($this->any())->method('invertTextColor')->with($this->defaults->getColorPrimary())->willReturn(false);
$this->util->expects($this->any())->method('elementColor')->with($this->defaults->getColorPrimary())->willReturn('#aaaaaa');
diff --git a/core/img/logo-blue.png b/core/img/logo-blue.png
new file mode 100644
index 00000000000..e1b7352b3f6
--- /dev/null
+++ b/core/img/logo-blue.png
Binary files differ
diff --git a/core/img/logo-blue.svg b/core/img/logo-blue.svg
new file mode 100644
index 00000000000..66b17330d12
--- /dev/null
+++ b/core/img/logo-blue.svg
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ height="128"
+ width="256"
+ viewBox="0 0 256 128"
+ id="svg10"
+ sodipodi:docname="logo-blue.svg"
+ inkscape:version="0.92.3 (2405546, 2018-03-11)">
+ <metadata
+ id="metadata16">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs14" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1053"
+ id="namedview12"
+ showgrid="false"
+ inkscape:zoom="1.4296875"
+ inkscape:cx="128"
+ inkscape:cy="64"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg10" />
+ <g
+ stroke="#fff"
+ stroke-width="22"
+ fill="none"
+ id="g8"
+ style="stroke:#0082c9;stroke-opacity:1">
+ <circle
+ cy="64"
+ cx="40"
+ r="26"
+ id="circle2"
+ style="stroke:#0082c9;stroke-opacity:1" />
+ <circle
+ cy="64"
+ cx="216"
+ r="26"
+ id="circle4"
+ style="stroke:#0082c9;stroke-opacity:1" />
+ <circle
+ cy="64"
+ cx="128"
+ r="46"
+ id="circle6"
+ style="stroke:#0082c9;stroke-opacity:1" />
+ </g>
+</svg>