diff options
author | John Molakvoæ <skjnldsv@protonmail.com> | 2023-08-24 07:52:05 +0200 |
---|---|---|
committer | Ferdinand Thiessen <opensource@fthiessen.de> | 2023-08-26 20:58:24 +0200 |
commit | 5831d4f536e531a897affaf70c178ddbee8e8617 (patch) | |
tree | 3c94e6182247cae699a1beb03211e288ade0edf8 /apps | |
parent | 93acc47761902822374dccb55396a367f7f68fec (diff) | |
download | nextcloud-server-5831d4f536e531a897affaf70c178ddbee8e8617.tar.gz nextcloud-server-5831d4f536e531a897affaf70c178ddbee8e8617.zip |
fix(theming): user background picker
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/theming/src/admin-settings.js | 8 | ||||
-rw-r--r-- | apps/theming/src/components/BackgroundSettings.vue | 44 | ||||
-rw-r--r-- | apps/theming/src/personal-settings.js | 8 |
3 files changed, 43 insertions, 17 deletions
diff --git a/apps/theming/src/admin-settings.js b/apps/theming/src/admin-settings.js index 9fce526c463..774d58e4a5c 100644 --- a/apps/theming/src/admin-settings.js +++ b/apps/theming/src/admin-settings.js @@ -19,10 +19,14 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ - +import { getRequestToken } from '@nextcloud/auth' import Vue from 'vue' -import App from './AdminTheming.vue' + import { refreshStyles } from './helpers/refreshStyles.js' +import App from './AdminTheming.vue' + +// eslint-disable-next-line camelcase +__webpack_nonce__ = btoa(getRequestToken()) Vue.prototype.OC = OC Vue.prototype.t = t diff --git a/apps/theming/src/components/BackgroundSettings.vue b/apps/theming/src/components/BackgroundSettings.vue index 2508d8e98d8..68e94b34848 100644 --- a/apps/theming/src/components/BackgroundSettings.vue +++ b/apps/theming/src/components/BackgroundSettings.vue @@ -91,17 +91,18 @@ <script> import { generateFilePath, generateRemoteUrl, generateUrl } from '@nextcloud/router' +import { getCurrentUser } from '@nextcloud/auth' +import { getFilePickerBuilder, showError } from '@nextcloud/dialogs' import { loadState } from '@nextcloud/initial-state' +import { Palette } from 'node-vibrant/lib/color.js' import axios from '@nextcloud/axios' -import Check from 'vue-material-design-icons/Check.vue' -import Close from 'vue-material-design-icons/Close.vue' -import ImageEdit from 'vue-material-design-icons/ImageEdit.vue' import debounce from 'debounce' import NcColorPicker from '@nextcloud/vue/dist/Components/NcColorPicker.js' import Vibrant from 'node-vibrant' -import { Palette } from 'node-vibrant/lib/color.js' -import { getFilePickerBuilder } from '@nextcloud/dialogs' -import { getCurrentUser } from '@nextcloud/auth' + +import Check from 'vue-material-design-icons/Check.vue' +import Close from 'vue-material-design-icons/Close.vue' +import ImageEdit from 'vue-material-design-icons/ImageEdit.vue' const backgroundImage = loadState('theming', 'backgroundImage') const shippedBackgroundList = loadState('theming', 'shippedBackgrounds') @@ -109,11 +110,6 @@ const themingDefaultBackground = loadState('theming', 'themingDefaultBackground' const defaultShippedBackground = loadState('theming', 'defaultShippedBackground') const prefixWithBaseUrl = (url) => generateFilePath('theming', '', 'img/background/') + url -const picker = getFilePickerBuilder(t('theming', 'Select a background from your files')) - .setMultiSelect(false) - .setType(1) - .setMimeTypeFilter(['image/png', 'image/gif', 'image/jpeg', 'image/svg+xml', 'image/svg']) - .build() export default { name: 'BackgroundSettings', @@ -255,8 +251,30 @@ export default { this.pickColor(...args) }, 200), - async pickFile() { - const path = await picker.pick() + pickFile() { + const picker = getFilePickerBuilder(t('theming', 'Select a background from your files')) + .allowDirectories(false) + .setMimeTypeFilter(['image/png', 'image/gif', 'image/jpeg', 'image/svg+xml', 'image/svg']) + .setMultiSelect(false) + .addButton({ + id: 'select', + label: t('theming', 'Select background'), + callback: (nodes) => { + this.applyFile(nodes[0]?.path) + }, + type: 'primary', + }) + .build() + picker.pick() + }, + + async applyFile(path) { + if (!path || typeof path !== 'string' || path.trim().length === 0 || path === '/') { + console.error('No valid background have been selected', { path }) + showError(t('theming', 'No background have been selected')) + return + } + this.loading = 'custom' // Extract primary color from image diff --git a/apps/theming/src/personal-settings.js b/apps/theming/src/personal-settings.js index 97f5e75e27a..ba7bf2e0ee2 100644 --- a/apps/theming/src/personal-settings.js +++ b/apps/theming/src/personal-settings.js @@ -19,10 +19,14 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ - +import { getRequestToken } from '@nextcloud/auth' import Vue from 'vue' -import App from './UserThemes.vue' + import { refreshStyles } from './helpers/refreshStyles.js' +import App from './UserThemes.vue' + +// eslint-disable-next-line camelcase +__webpack_nonce__ = btoa(getRequestToken()) Vue.prototype.OC = OC Vue.prototype.t = t |