diff --git a/changelog/unreleased/bugfix-extension-img b/changelog/unreleased/bugfix-extension-img
new file mode 100644
index 00000000000..d2670b2cf6b
--- /dev/null
+++ b/changelog/unreleased/bugfix-extension-img
@@ -0,0 +1,6 @@
+Bugfix: Show extension image
+
+Allow extensions to set an image as its logo, instead of an icon.
+If `img` is set, it will take precedence over `icon`.
+
+https://github.com/owncloud/web/pull/5985
diff --git a/changelog/unreleased/bugfix-hide-files-by-default b/changelog/unreleased/bugfix-hide-files-by-default
new file mode 100644
index 00000000000..b0195803638
--- /dev/null
+++ b/changelog/unreleased/bugfix-hide-files-by-default
@@ -0,0 +1,5 @@
+Bugfix: Hidden files hidden by default
+
+Hide hidden files (files started with ".") by default, similar to oc10
+
+https://github.com/owncloud/web/pull/5985
diff --git a/changelog/unreleased/bugfix-order-extensions b/changelog/unreleased/bugfix-order-extensions
new file mode 100644
index 00000000000..e121d79c60b
--- /dev/null
+++ b/changelog/unreleased/bugfix-order-extensions
@@ -0,0 +1,6 @@
+Bugfix: Order extensions and default
+
+Ensure the default extensions are displayed first.
+Ensure that extensions can be set as default or not.
+
+https://github.com/owncloud/web/pull/5985
\ No newline at end of file
diff --git a/changelog/unreleased/enhancement-build-options b/changelog/unreleased/enhancement-build-options
new file mode 100644
index 00000000000..93f60c4fa02
--- /dev/null
+++ b/changelog/unreleased/enhancement-build-options
@@ -0,0 +1,6 @@
+Enhancement: Build options
+
+Configure the startup title (displayed before the configuration is loaded) via env variable TITLE.
+Make the source map generation optional with the env variable SOURCE_MAP.
+
+https://github.com/owncloud/web/pull/5985
\ No newline at end of file
diff --git a/changelog/unreleased/enhancement-drawio-clean-path b/changelog/unreleased/enhancement-drawio-clean-path
new file mode 100644
index 00000000000..bdd5b01a566
--- /dev/null
+++ b/changelog/unreleased/enhancement-drawio-clean-path
@@ -0,0 +1,3 @@
+Enhancement: Add clean paths to DrawIO app
+
+https://github.com/owncloud/web/pull/5985
\ No newline at end of file
diff --git a/changelog/unreleased/enhancement-feedback-on-startup b/changelog/unreleased/enhancement-feedback-on-startup
new file mode 100644
index 00000000000..0fa8747a6dd
--- /dev/null
+++ b/changelog/unreleased/enhancement-feedback-on-startup
@@ -0,0 +1,6 @@
+Enhancement: Show feedback on startup
+
+Instead of displaying an empty page while all components load, display a spiner.
+Also show an error message if there was an error.
+
+https://github.com/owncloud/web/pull/5985
\ No newline at end of file
diff --git a/packages/web-app-draw-io/src/App.vue b/packages/web-app-draw-io/src/App.vue
index 6c4430afc83..17c8a69907e 100644
--- a/packages/web-app-draw-io/src/App.vue
+++ b/packages/web-app-draw-io/src/App.vue
@@ -56,7 +56,7 @@ export default {
}
},
created() {
- this.filePath = this.$route.params.filePath
+ this.filePath = `/${this.$route.params.filePath.split('/').filter(Boolean).join('/')}`
this.fileExtension = this.filePath.split('.').pop()
this.checkPermissions()
window.addEventListener('message', (event) => {
diff --git a/packages/web-app-draw-io/src/index.js b/packages/web-app-draw-io/src/index.js
index 283c08e8b6a..f38d925b85f 100644
--- a/packages/web-app-draw-io/src/index.js
+++ b/packages/web-app-draw-io/src/index.js
@@ -4,11 +4,14 @@ import App from './App.vue'
const routes = [
{
name: 'edit',
- path: '/edit/:filePath',
+ path: '/edit/:filePath*',
components: {
fullscreen: App
},
- meta: { hideHeadbar: true }
+ meta: {
+ hideHeadbar: true,
+ patchCleanPath: true
+ }
}
]
diff --git a/packages/web-app-files/src/components/ActionMenuItem.vue b/packages/web-app-files/src/components/ActionMenuItem.vue
index 0eaf000bd90..d11b257a4e9 100644
--- a/packages/web-app-files/src/components/ActionMenuItem.vue
+++ b/packages/web-app-files/src/components/ActionMenuItem.vue
@@ -7,14 +7,19 @@
data-testid="action-handler"
v-on="getComponentListeners(action, items)"
>
-
+
{{
action.label(filterParams)
}}
diff --git a/packages/web-app-files/src/components/AppBar/AppBar.vue b/packages/web-app-files/src/components/AppBar/AppBar.vue
index 6327b95b5df..6d709b90f3a 100644
--- a/packages/web-app-files/src/components/AppBar/AppBar.vue
+++ b/packages/web-app-files/src/components/AppBar/AppBar.vue
@@ -306,7 +306,7 @@ export default {
created() {
// Storage returns a string so we need to convert it into a boolean
- const areHiddenFilesShown = window.localStorage.getItem('oc_hiddenFilesShown') || 'true'
+ const areHiddenFilesShown = window.localStorage.getItem('oc_hiddenFilesShown') || 'false'
const areHiddenFilesShownBoolean = areHiddenFilesShown === 'true'
if (areHiddenFilesShownBoolean !== this.areHiddenFilesShown) {
diff --git a/packages/web-app-files/src/mixins/fileActions.js b/packages/web-app-files/src/mixins/fileActions.js
index d688a1c45e3..49ba781754e 100644
--- a/packages/web-app-files/src/mixins/fileActions.js
+++ b/packages/web-app-files/src/mixins/fileActions.js
@@ -62,41 +62,50 @@ export default {
},
$_fileActions_editorActions() {
- return this.apps.fileEditors.map((editor) => {
- return {
- label: () => {
- const translated = this.$gettext('Open in %{app}')
- return this.$gettextInterpolate(
- translated,
- { app: this.apps.meta[editor.app].name },
- true
- )
- },
- icon: this.apps.meta[editor.app].icon,
- handler: ({ resources }) =>
- this.$_fileActions_openEditor(
- editor,
- resources[0].path,
- resources[0].id,
- EDITOR_MODE_EDIT
- ),
- isEnabled: ({ resources }) => {
- if (resources.length !== 1) {
- return false
- }
- if (Array.isArray(editor.routes) && !checkRoute(editor.routes, this.$route.name)) {
- return false
- }
-
- return resources[0].extension === editor.extension
- },
- canBeDefault: true,
- componentType: 'oc-button',
- class: `oc-files-actions-${kebabCase(
- this.apps.meta[editor.app].name
- ).toLowerCase()}-trigger`
- }
- })
+ return this.apps.fileEditors
+ .map((editor) => {
+ return {
+ label: () => {
+ const translated = this.$gettext('Open in %{app}')
+ return this.$gettextInterpolate(
+ translated,
+ { app: this.apps.meta[editor.app].name },
+ true
+ )
+ },
+ icon: this.apps.meta[editor.app].icon,
+ img: this.apps.meta[editor.app].img,
+ handler: ({ resources }) =>
+ this.$_fileActions_openEditor(
+ editor,
+ resources[0].path,
+ resources[0].id,
+ EDITOR_MODE_EDIT
+ ),
+ isEnabled: ({ resources }) => {
+ if (resources.length !== 1) {
+ return false
+ }
+ if (Array.isArray(editor.routes) && !checkRoute(editor.routes, this.$route.name)) {
+ return false
+ }
+
+ return resources[0].extension === editor.extension
+ },
+ canBeDefault: editor.canBeDefault,
+ componentType: 'oc-button',
+ class: `oc-files-actions-${kebabCase(
+ this.apps.meta[editor.app].name
+ ).toLowerCase()}-trigger`
+ }
+ })
+ .sort((first, second) => {
+ // Ensure default are listed first
+ if (second.canBeDefault !== first.canBeDefault && second.canBeDefault) {
+ return 1
+ }
+ return 0
+ })
}
},
@@ -214,7 +223,8 @@ export default {
const label = this.$gettext('Open in %{ appName }')
return {
name: app.name,
- img: app.icon,
+ icon: app.icon,
+ img: app.img,
componentType: 'oc-button',
class: `oc-files-actions-${app.name}-trigger`,
isEnabled: () => true,
diff --git a/packages/web-app-files/tests/unit/components/ActionMenuItem.spec.js b/packages/web-app-files/tests/unit/components/ActionMenuItem.spec.js
index 8224e693664..095ebfac332 100644
--- a/packages/web-app-files/tests/unit/components/ActionMenuItem.spec.js
+++ b/packages/web-app-files/tests/unit/components/ActionMenuItem.spec.js
@@ -31,14 +31,10 @@ describe('ActionMenuItem component', () => {
})
it('renders an image if there is one defined in the action', () => {
const action = { ...fileActions.download, img: 'https://owncloud.tld/img.png' }
- const wrapper1 = getShallowWrapper(action)
- expect(wrapper1.find(selectors.icon).exists()).toBeTruthy()
- expect(wrapper1.find(selectors.icon).attributes().name).toBe(action.icon)
- delete action.icon
- const wrapper2 = getShallowWrapper(action)
- expect(wrapper2.find(selectors.icon).exists()).toBeFalsy()
- expect(wrapper2.find(selectors.img).exists()).toBeTruthy()
- expect(wrapper2.find(selectors.img).attributes().src).toBe(action.img)
+ const wrapper = getShallowWrapper(action)
+ expect(wrapper.find(selectors.icon).exists()).toBeFalsy()
+ expect(wrapper.find(selectors.img).exists()).toBeTruthy()
+ expect(wrapper.find(selectors.img).attributes().src).toBe(action.img)
})
it('renders the action label', () => {
const action = fileActions.download
diff --git a/packages/web-container/index.html.ejs b/packages/web-container/index.html.ejs
index 05bab1859ee..a47ee0c90d2 100644
--- a/packages/web-container/index.html.ejs
+++ b/packages/web-container/index.html.ejs
@@ -10,35 +10,77 @@
<% }); %>
-
+
+