Config set and drone
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
This commit is contained in:
parent
a23a6004a5
commit
263d2c89fb
|
@ -35,6 +35,13 @@ pipeline:
|
||||||
when:
|
when:
|
||||||
matrix:
|
matrix:
|
||||||
TESTS: vue-build-oauth2
|
TESTS: vue-build-oauth2
|
||||||
|
vue-build-accessibility:
|
||||||
|
image: node
|
||||||
|
commands:
|
||||||
|
- ./build/vue-builds.sh ./apps/accessibility/js/accessibility.js
|
||||||
|
when:
|
||||||
|
matrix:
|
||||||
|
TESTS: vue-build-accessibility
|
||||||
checkers:
|
checkers:
|
||||||
image: nextcloudci/php7.0:php7.0-19
|
image: nextcloudci/php7.0:php7.0-19
|
||||||
commands:
|
commands:
|
||||||
|
@ -693,6 +700,7 @@ matrix:
|
||||||
- TESTS: vue-build-settings
|
- TESTS: vue-build-settings
|
||||||
- TESTS: vue-build-updatenotification
|
- TESTS: vue-build-updatenotification
|
||||||
- TESTS: vue-build-oauth2
|
- TESTS: vue-build-oauth2
|
||||||
|
- TESTS: vue-build-accessibility
|
||||||
- TESTS: nodb-codecov
|
- TESTS: nodb-codecov
|
||||||
ENABLE_REDIS: true
|
ENABLE_REDIS: true
|
||||||
- TESTS: db-codecov
|
- TESTS: db-codecov
|
||||||
|
|
|
@ -25,4 +25,16 @@ return [
|
||||||
'routes' => [
|
'routes' => [
|
||||||
['name' => 'accessibility#getCss', 'url' => '/css/user-{md5}.css', 'verb' => 'GET'],
|
['name' => 'accessibility#getCss', 'url' => '/css/user-{md5}.css', 'verb' => 'GET'],
|
||||||
],
|
],
|
||||||
|
'ocs' => [
|
||||||
|
[
|
||||||
|
'name' => 'Config#getConfig',
|
||||||
|
'url' => '/api/v1/config',
|
||||||
|
'verb' => 'GET',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'Config#setConfig',
|
||||||
|
'url' => '/api/v1/config/{key}',
|
||||||
|
'verb' => 'POST',
|
||||||
|
],
|
||||||
|
]
|
||||||
];
|
];
|
||||||
|
|
|
@ -33,21 +33,26 @@
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
}
|
}
|
||||||
|
h3 {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
line-height: 1em;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
p {
|
p {
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
}
|
}
|
||||||
.icon-checkmark {
|
.icon-checkmark-color {
|
||||||
position: absolute;
|
|
||||||
width: 50px;
|
|
||||||
height: 50px;
|
|
||||||
background-size: contain;
|
|
||||||
right: -10px;
|
|
||||||
top: -15px;
|
|
||||||
opacity: 0;
|
|
||||||
transition: all 100ms ease-in-out;
|
transition: all 100ms ease-in-out;
|
||||||
|
border-radius: 1em;
|
||||||
|
padding: 4px 5px 4px 20px;
|
||||||
|
background-position: 4px center;
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
&.selected .icon-checkmark {
|
&.selected .icon-checkmark-color {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
filter: drop-shadow(0 1px 1px var(--color-box-shadow));
|
visibility: visible;
|
||||||
|
box-shadow: 0 0 0 1px var(--color-success);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,121 @@
|
||||||
|
<?php
|
||||||
|
declare (strict_types = 1);
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (c) 2018 John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
|
||||||
|
*
|
||||||
|
* @license GNU AGPL version 3 or any later version
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace OCA\Accessibility\Controller;
|
||||||
|
|
||||||
|
use OCA\Accessibility\AccessibilityProvider;
|
||||||
|
use OCP\AppFramework\Http;
|
||||||
|
use OCP\AppFramework\Http\DataResponse;
|
||||||
|
use OCP\AppFramework\OCSController;
|
||||||
|
use OCP\AppFramework\OCS\OCSBadRequestException;
|
||||||
|
use OCP\IConfig;
|
||||||
|
use OCP\IRequest;
|
||||||
|
use OCP\IUserSession;
|
||||||
|
|
||||||
|
class ConfigController extends OCSController {
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
protected $appName;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
protected $serverRoot;
|
||||||
|
|
||||||
|
/** @var IConfig */
|
||||||
|
private $config;
|
||||||
|
|
||||||
|
/** @var IUserSession */
|
||||||
|
private $userSession;
|
||||||
|
|
||||||
|
/** @var AccessibilityProvider */
|
||||||
|
private $accessibilityProvider;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config constructor.
|
||||||
|
*
|
||||||
|
* @param string $appName
|
||||||
|
* @param IRequest $request
|
||||||
|
* @param IConfig $config
|
||||||
|
* @param IUserSession $userSession
|
||||||
|
* @param AccessibilityProvider $accessibilityProvider
|
||||||
|
*/
|
||||||
|
public function __construct(string $appName,
|
||||||
|
IRequest $request,
|
||||||
|
IConfig $config,
|
||||||
|
IUserSession $userSession,
|
||||||
|
AccessibilityProvider $accessibilityProvider) {
|
||||||
|
parent::__construct($appName, $request);
|
||||||
|
$this->appName = $appName;
|
||||||
|
$this->config = $config;
|
||||||
|
$this->userSession = $userSession;
|
||||||
|
$this->accessibilityProvider = $accessibilityProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
*
|
||||||
|
* Get user accessibility config
|
||||||
|
*
|
||||||
|
* @param string $key theme or font
|
||||||
|
* @return DataResponse
|
||||||
|
*/
|
||||||
|
public function getConfig(): DataResponse {
|
||||||
|
return new DataResponse([
|
||||||
|
'theme' => $this->config->getUserValue($this->userSession->getUser()->getUID(), $this->appName, 'theme', false),
|
||||||
|
'font' => $this->config->getUserValue($this->userSession->getUser()->getUID(), $this->appName, 'font', false)
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
*
|
||||||
|
* Set theme or font config
|
||||||
|
*
|
||||||
|
* @param string $key theme or font
|
||||||
|
* @return DataResponse
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public function setConfig(string $key, $value): DataResponse {
|
||||||
|
if ($key === 'theme' || $key === 'font') {
|
||||||
|
$themes = $this->accessibilityProvider->getThemes();
|
||||||
|
$fonts = $this->accessibilityProvider->getFonts();
|
||||||
|
|
||||||
|
if ($value === false) {
|
||||||
|
$this->config->deleteUserValue($this->userSession->getUser()->getUID(), $this->appName, $key);
|
||||||
|
return new DataResponse();
|
||||||
|
}
|
||||||
|
|
||||||
|
$availableOptions = array_map(function($option) {
|
||||||
|
return $option['id'];
|
||||||
|
}, array_merge($themes, $fonts));
|
||||||
|
|
||||||
|
if (in_array($value, $availableOptions)) {
|
||||||
|
$this->config->setUserValue($this->userSession->getUser()->getUID(), $this->appName, $key, $value);
|
||||||
|
return new DataResponse();
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new OCSBadRequestException('Invalid value: ' . $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new OCSBadRequestException('Invalid key: ' . $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -11,8 +11,7 @@
|
||||||
"build": "webpack --progress --hide-modules --config webpack.prod.js"
|
"build": "webpack --progress --hide-modules --config webpack.prod.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.0.0-beta.51",
|
"axios": "^0.18.0",
|
||||||
"@babel/preset-env": "^7.0.0-beta.51",
|
|
||||||
"vue": "^2.5.16"
|
"vue": "^2.5.16"
|
||||||
},
|
},
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
|
@ -21,7 +20,7 @@
|
||||||
],
|
],
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel-core": "^6.26.3",
|
"babel-core": "^6.26.3",
|
||||||
"babel-loader": "^8.0.0-beta.3",
|
"babel-loader": "^7.1.4",
|
||||||
"babel-preset-env": "^1.7.0",
|
"babel-preset-env": "^1.7.0",
|
||||||
"css-loader": "^0.28.11",
|
"css-loader": "^0.28.11",
|
||||||
"file-loader": "^1.1.11",
|
"file-loader": "^1.1.11",
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import preview from './components/itemPreview';
|
import preview from './components/itemPreview';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'app',
|
name: 'app',
|
||||||
|
@ -51,6 +52,9 @@ export default {
|
||||||
theme: this.serverData.theme,
|
theme: this.serverData.theme,
|
||||||
font: this.serverData.font
|
font: this.serverData.font
|
||||||
};
|
};
|
||||||
|
},
|
||||||
|
tokenHeaders() {
|
||||||
|
return { headers: { requesttoken: OC.requestToken } }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -69,12 +73,28 @@ export default {
|
||||||
* @param {string} id the data of the change
|
* @param {string} id the data of the change
|
||||||
*/
|
*/
|
||||||
selectItem(type, id) {
|
selectItem(type, id) {
|
||||||
this.serverData[type] = id;
|
axios
|
||||||
let cssLink = document.querySelector(
|
.post(OC.linkToOCS('apps/accessibility/api/v1/config', 2) + type, {value: id}, this.tokenHeaders)
|
||||||
'link[rel=stylesheet][href*=accessibility][href*=user-]'
|
.then(response => {
|
||||||
);
|
this.serverData[type] = id;
|
||||||
cssLink.href =
|
|
||||||
cssLink.href.split('?')[0] + '?v=' + new Date().getTime();
|
// Remove old link
|
||||||
|
let oldLink = document.querySelector('link[rel=stylesheet][href*=accessibility][href*=user-]');
|
||||||
|
if (oldLink) {
|
||||||
|
oldLink.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert new css
|
||||||
|
let link = document.createElement('link');
|
||||||
|
link.rel = 'stylesheet';
|
||||||
|
link.href = OC.generateUrl('/apps/accessibility/css/user-style.css');
|
||||||
|
link.href = link.href.split('?')[0] + '?v=' + new Date().getTime();
|
||||||
|
document.head.appendChild(link)
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log(err, err.response);
|
||||||
|
OC.Notification.showTemporary(t('accessibility', err.response.data.ocs.meta.message + '. Unable to apply the setting.'));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
<template>
|
<template>
|
||||||
<div :class="{preview: true, selected: preview.id === selected}"
|
<div :class="{preview: true, selected: preview.id === selected}"
|
||||||
@click="selectItem">
|
@click="selectItem">
|
||||||
<div class="icon-checkmark"></div>
|
|
||||||
<div class="preview-image" :style="{backgroundImage: 'url(' + preview.img + ')'}"></div>
|
<div class="preview-image" :style="{backgroundImage: 'url(' + preview.img + ')'}"></div>
|
||||||
<h3>{{preview.title}}</h3>
|
<h3>
|
||||||
|
<span>{{preview.title}}</span>
|
||||||
|
<div class="icon-checkmark-color">{{t('accessibility', 'enabled')}}</div>
|
||||||
|
</h3>
|
||||||
<p>{{preview.text}}</p>
|
<p>{{preview.text}}</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -3,6 +3,7 @@ import App from './App.vue';
|
||||||
|
|
||||||
/* global t */
|
/* global t */
|
||||||
// bind to window
|
// bind to window
|
||||||
|
Vue.prototype.OC = OC;
|
||||||
Vue.prototype.t = t;
|
Vue.prototype.t = t;
|
||||||
|
|
||||||
new Vue({
|
new Vue({
|
||||||
|
|
Loading…
Reference in New Issue