diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-07-14 00:11:05 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2021-07-14 00:11:05 +0900 |
| commit | c7a2c368d41219c362c91e6a756265b33d129f44 (patch) | |
| tree | d6962313254a0b3a359eac51c9236dd3f820eb4d /src | |
| parent | Use unisonReload (diff) | |
| download | sharkey-c7a2c368d41219c362c91e6a756265b33d129f44.tar.gz sharkey-c7a2c368d41219c362c91e6a756265b33d129f44.tar.bz2 sharkey-c7a2c368d41219c362c91e6a756265b33d129f44.zip | |
Custom CSS
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/pages/settings/custom-css.vue | 72 | ||||
| -rw-r--r-- | src/client/pages/settings/general.vue | 2 | ||||
| -rw-r--r-- | src/client/pages/settings/index.vue | 1 | ||||
| -rw-r--r-- | src/server/web/boot.js | 7 |
4 files changed, 82 insertions, 0 deletions
diff --git a/src/client/pages/settings/custom-css.vue b/src/client/pages/settings/custom-css.vue new file mode 100644 index 0000000000..0781eeebd7 --- /dev/null +++ b/src/client/pages/settings/custom-css.vue @@ -0,0 +1,72 @@ +<template> +<FormBase> + <FormInfo warn>{{ $ts.customCssWarn }}</FormInfo> + + <FormTextarea v-model:value="localCustomCss" manual-save tall class="_monospace" style="tab-size: 2;"> + <span>{{ $ts.local }}</span> + </FormTextarea> +</FormBase> +</template> + +<script lang="ts"> +import { defineComponent } from 'vue'; +import FormTextarea from '@client/components/form/textarea.vue'; +import FormSelect from '@client/components/form/select.vue'; +import FormRadios from '@client/components/form/radios.vue'; +import FormBase from '@client/components/form/base.vue'; +import FormGroup from '@client/components/form/group.vue'; +import FormLink from '@client/components/form/link.vue'; +import FormButton from '@client/components/form/button.vue'; +import FormInfo from '@client/components/form/info.vue'; +import * as os from '@client/os'; +import { ColdDeviceStorage } from '@client/store'; +import { unisonReload } from '@client/scripts/unison-reload'; +import * as symbols from '@client/symbols'; +import { defaultStore } from '@client/store'; + +export default defineComponent({ + components: { + FormTextarea, + FormSelect, + FormRadios, + FormBase, + FormGroup, + FormLink, + FormButton, + FormInfo, + }, + + emits: ['info'], + + data() { + return { + [symbols.PAGE_INFO]: { + title: this.$ts.customCss, + icon: 'fas fa-code' + }, + localCustomCss: localStorage.getItem('customCss') + } + }, + + mounted() { + this.$emit('info', this[symbols.PAGE_INFO]); + + this.$watch('localCustomCss', this.apply); + }, + + methods: { + async apply() { + localStorage.setItem('customCss', this.localCustomCss); + + const { canceled } = await os.dialog({ + type: 'info', + text: this.$ts.reloadToApplySetting, + showCancelButton: true + }); + if (canceled) return; + + unisonReload(); + } + } +}); +</script> diff --git a/src/client/pages/settings/general.vue b/src/client/pages/settings/general.vue index fdbae0b8a1..9dbc103145 100644 --- a/src/client/pages/settings/general.vue +++ b/src/client/pages/settings/general.vue @@ -78,6 +78,8 @@ </FormSelect> <FormLink to="/settings/deck">{{ $ts.deck }}</FormLink> + + <FormLink to="/settings/custom-css"><template #icon><i class="fas fa-code"></i></template>{{ $ts.customCss }}</FormLink> </FormBase> </template> diff --git a/src/client/pages/settings/index.vue b/src/client/pages/settings/index.vue index 3fd10fc44f..8a0171a6e8 100644 --- a/src/client/pages/settings/index.vue +++ b/src/client/pages/settings/index.vue @@ -123,6 +123,7 @@ export default defineComponent({ case 'theme/manage': return defineAsyncComponent(() => import('./theme.manage.vue')); case 'sidebar': return defineAsyncComponent(() => import('./sidebar.vue')); case 'sounds': return defineAsyncComponent(() => import('./sounds.vue')); + case 'custom-css': return defineAsyncComponent(() => import('./custom-css.vue')); case 'deck': return defineAsyncComponent(() => import('./deck.vue')); case 'plugin': return defineAsyncComponent(() => import('./plugin.vue')); case 'plugin/install': return defineAsyncComponent(() => import('./plugin.install.vue')); diff --git a/src/server/web/boot.js b/src/server/web/boot.js index 1c94e6e4f4..e2fd137f95 100644 --- a/src/server/web/boot.js +++ b/src/server/web/boot.js @@ -107,6 +107,13 @@ document.documentElement.style.backgroundImage = `url(${wallpaper})`; } + const customCss = localStorage.getItem('customCss'); + if (customCss && customCss.length > 0) { + const style = document.createElement('style'); + style.innerHTML = customCss; + head.appendChild(style); + } + // eslint-disable-next-line no-inner-declarations function renderError(code, details) { document.documentElement.innerHTML = ` |