Switches the default logo color depending on the primary color
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
This commit is contained in:
parent
7526971c95
commit
92049c3ceb
|
@ -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 != '' {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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')."')";
|
||||
|
@ -300,6 +300,24 @@ class ThemingDefaults extends \OC_Defaults {
|
|||
return $variables;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
|
|
|
@ -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');
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 6.0 KiB |
|
@ -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>
|
After Width: | Height: | Size: 1.9 KiB |
Loading…
Reference in New Issue