summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorJohn Molakvoæ <skjnldsv@protonmail.com>2023-08-24 07:52:05 +0200
committerFerdinand Thiessen <opensource@fthiessen.de>2023-08-26 20:58:24 +0200
commit5831d4f536e531a897affaf70c178ddbee8e8617 (patch)
tree3c94e6182247cae699a1beb03211e288ade0edf8 /apps
parent93acc47761902822374dccb55396a367f7f68fec (diff)
downloadnextcloud-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.js8
-rw-r--r--apps/theming/src/components/BackgroundSettings.vue44
-rw-r--r--apps/theming/src/personal-settings.js8
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