Theming: Add OCA.Theming Js for app interaction

This commit is contained in:
Julius Haertl 2016-08-10 11:53:33 +02:00
parent ef17f8b3ba
commit 5f4e88ef6c
No known key found for this signature in database
GPG Key ID: 4C614C6ED2CDE6DF
4 changed files with 107 additions and 0 deletions

View File

@ -39,3 +39,15 @@ $linkToCSS = \OC::$server->getURLGenerator()->linkToRoute(
]
);
$linkToJs = \OC::$server->getURLGenerator()->linkToRoute(
'theming.Theming.getJavascript',
[
'v' => \OC::$server->getConfig()->getAppValue('theming', 'cachebuster', '0'),
]
);
\OCP\Util::addHeader(
'script',
[
'src' => $linkToJs,
], ''
);

View File

@ -55,5 +55,10 @@ return ['routes' => [
'url' => '/loginbackground',
'verb' => 'GET',
],
[
'name' => 'Theming#getJavascript',
'url' => '/js/theming',
'verb' => 'GET',
],
]];

View File

@ -337,4 +337,26 @@ class ThemingController extends Controller {
$response->cacheFor(3600);
return $response;
}
/**
* @NoCSRFRequired
* @PublicPage
*
* @return DataDownloadResponse
*/
public function getJavascript() {
$responseJS = '(function() {
OCA.Theming = {
name: ' . json_encode($this->template->getName()) . ',
url: ' . json_encode($this->template->getBaseUrl()) . ',
slogan: ' . json_encode($this->template->getSlogan()) . ',
color: ' . json_encode($this->template->getMailHeaderColor()) . ',
inverted: ' . json_encode($this->util->invertTextColor($this->template->getMailHeaderColor())) . ',
};
})();';
$response = new Http\DataDisplayResponse($responseJS);
$response->addHeader("Content-type","text/javascript");
$response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
$response->cacheFor(3600);
return $response;
}
}

View File

@ -700,4 +700,72 @@ class ThemingControllerTest extends TestCase {
$expected->addHeader('Expires', date(\DateTime::RFC2822, 123));
@$this->assertEquals($expected, $this->themingController->getStylesheet());
}
public function testGetJavascript() {
$this->template
->expects($this->at(0))
->method('getName')
->willReturn("");
$this->template
->expects($this->at(1))
->method('getBaseUrl')
->willReturn("");
$this->template
->expects($this->at(2))
->method('getSlogan')
->willReturn("");
$this->template
->expects($this->at(3))
->method('getMailHeaderColor')
->willReturn("#000");
$expectedResponse = '(function() {
OCA.Theming = {
name: "",
url: "",
slogan: "",
color: "#000",
inverted: false,
};
})();';
$expected = new Http\DataDisplayResponse($expectedResponse);
$expected->addHeader("Content-type","text/javascript");
$expected->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
$expected->cacheFor(3600);
@$this->assertEquals($expected, $this->themingController->getJavascript());
}
public function testGetJavascriptInverted() {
$this->template
->expects($this->at(0))
->method('getName')
->willReturn("Nextcloud");
$this->template
->expects($this->at(1))
->method('getBaseUrl')
->willReturn("nextcloudurl");
$this->template
->expects($this->at(2))
->method('getSlogan')
->willReturn("awesome");
$this->template
->expects($this->any())
->method('getMailHeaderColor')
->willReturn("#ffffff");
$expectedResponse = '(function() {
OCA.Theming = {
name: "Nextcloud",
url: "nextcloudurl",
slogan: "awesome",
color: "#ffffff",
inverted: true,
};
})();';
$expected = new Http\DataDisplayResponse($expectedResponse);
$expected->addHeader("Content-type","text/javascript");
$expected->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
$expected->cacheFor(3600);
@$this->assertEquals($expected, $this->themingController->getJavascript());
}
}