Browse Source

Add component testing

Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
John Molakvoæ 1 year ago
parent
commit
5b9a8f0407
100 changed files with 242 additions and 42 deletions
  1. 0 6
      apps/files/js/app.js
  2. 0 2
      apps/files/js/filelist.js
  3. 2 2
      apps/files/lib/Controller/ApiController.php
  4. 5 4
      apps/files/lib/Service/UserConfig.php
  5. 118 0
      apps/files/src/views/Navigation.cy.ts
  6. 18 16
      apps/files/src/views/Navigation.vue
  7. 18 2
      apps/files/src/views/Settings.vue
  8. 1 3
      build/files-checker.php
  9. 29 1
      cypress.config.ts
  10. 12 0
      cypress/support/component-index.html
  11. 35 0
      cypress/support/component.ts
  12. 0 0
      dist/comments-comments-app.js
  13. 0 0
      dist/comments-comments-app.js.map
  14. 0 0
      dist/comments-comments-tab.js.map
  15. 0 0
      dist/comments-comments.js.map
  16. 0 0
      dist/core-files_client.js.map
  17. 0 0
      dist/core-files_fileinfo.js.map
  18. 0 0
      dist/core-install.js.map
  19. 0 0
      dist/core-login.js
  20. 0 0
      dist/core-login.js.map
  21. 0 0
      dist/core-main.js
  22. 0 0
      dist/core-main.js.map
  23. 0 0
      dist/core-maintenance.js.map
  24. 0 0
      dist/core-profile.js
  25. 0 0
      dist/core-profile.js.map
  26. 0 0
      dist/core-recommendedapps.js
  27. 0 0
      dist/core-recommendedapps.js.map
  28. 0 0
      dist/core-systemtags.js.map
  29. 0 0
      dist/core-unified-search.js
  30. 0 0
      dist/core-unified-search.js.map
  31. 0 0
      dist/core-unsupported-browser-redirect.js
  32. 0 0
      dist/core-unsupported-browser-redirect.js.map
  33. 0 0
      dist/core-unsupported-browser.js
  34. 0 0
      dist/core-unsupported-browser.js.map
  35. 0 0
      dist/dashboard-main.js
  36. 0 0
      dist/dashboard-main.js.map
  37. 0 0
      dist/dav-settings-admin-caldav.js
  38. 0 0
      dist/dav-settings-admin-caldav.js.map
  39. 0 0
      dist/dav-settings-personal-availability.js
  40. 0 0
      dist/dav-settings-personal-availability.js.map
  41. 0 0
      dist/federatedfilesharing-vue-settings-admin.js
  42. 0 0
      dist/federatedfilesharing-vue-settings-admin.js.map
  43. 0 0
      dist/federatedfilesharing-vue-settings-personal.js
  44. 0 0
      dist/federatedfilesharing-vue-settings-personal.js.map
  45. 0 0
      dist/files-main.js
  46. 4 6
      dist/files-main.js.LICENSE.txt
  47. 0 0
      dist/files-main.js.map
  48. 0 0
      dist/files-personal-settings.js
  49. 0 0
      dist/files-personal-settings.js.map
  50. 0 0
      dist/files_sharing-additionalScripts.js.map
  51. 0 0
      dist/files_sharing-collaboration.js.map
  52. 0 0
      dist/files_sharing-files_sharing.js
  53. 0 0
      dist/files_sharing-files_sharing.js.map
  54. 0 0
      dist/files_sharing-files_sharing_tab.js
  55. 0 0
      dist/files_sharing-files_sharing_tab.js.map
  56. 0 0
      dist/files_sharing-personal-settings.js
  57. 0 0
      dist/files_sharing-personal-settings.js.map
  58. 0 0
      dist/files_trashbin-files_trashbin.js
  59. 0 0
      dist/files_trashbin-files_trashbin.js.map
  60. 0 0
      dist/files_versions-files_versions.js
  61. 0 0
      dist/files_versions-files_versions.js.map
  62. 0 0
      dist/oauth2-oauth2.js
  63. 0 0
      dist/oauth2-oauth2.js.map
  64. 0 0
      dist/settings-apps-view-7418.js
  65. 0 0
      dist/settings-apps-view-7418.js.map
  66. 0 0
      dist/settings-apps.js.map
  67. 0 0
      dist/settings-legacy-admin.js.map
  68. 0 0
      dist/settings-users-8351.js
  69. 0 0
      dist/settings-users-8351.js.map
  70. 0 0
      dist/settings-vue-settings-admin-basic-settings.js
  71. 0 0
      dist/settings-vue-settings-admin-basic-settings.js.map
  72. 0 0
      dist/settings-vue-settings-admin-delegation.js
  73. 0 0
      dist/settings-vue-settings-admin-delegation.js.map
  74. 0 0
      dist/settings-vue-settings-admin-security.js
  75. 0 0
      dist/settings-vue-settings-admin-security.js.map
  76. 0 0
      dist/settings-vue-settings-apps-users-management.js
  77. 0 0
      dist/settings-vue-settings-apps-users-management.js.map
  78. 0 0
      dist/settings-vue-settings-nextcloud-pdf.js
  79. 0 0
      dist/settings-vue-settings-nextcloud-pdf.js.map
  80. 0 0
      dist/settings-vue-settings-personal-info.js
  81. 0 0
      dist/settings-vue-settings-personal-info.js.map
  82. 0 0
      dist/settings-vue-settings-personal-password.js
  83. 0 0
      dist/settings-vue-settings-personal-password.js.map
  84. 0 0
      dist/settings-vue-settings-personal-security.js
  85. 0 0
      dist/settings-vue-settings-personal-security.js.map
  86. 0 0
      dist/settings-vue-settings-personal-webauthn.js
  87. 0 0
      dist/settings-vue-settings-personal-webauthn.js.map
  88. 0 0
      dist/sharebymail-vue-settings-admin-sharebymail.js
  89. 0 0
      dist/sharebymail-vue-settings-admin-sharebymail.js.map
  90. 0 0
      dist/systemtags-systemtags.js.map
  91. 0 0
      dist/theming-admin-theming.js
  92. 0 0
      dist/theming-admin-theming.js.map
  93. 0 0
      dist/theming-personal-theming.js
  94. 0 0
      dist/theming-personal-theming.js.map
  95. 0 0
      dist/twofactor_backupcodes-settings.js
  96. 0 0
      dist/twofactor_backupcodes-settings.js.map
  97. 0 0
      dist/updatenotification-updatenotification.js
  98. 0 0
      dist/updatenotification-updatenotification.js.map
  99. 0 0
      dist/user-status-modal-8299.js
  100. 0 0
      dist/user-status-modal-8299.js.map

+ 0 - 6
apps/files/js/app.js

@@ -136,7 +136,6 @@
 
 			this._setupEvents();
 			// trigger URL change event handlers
-			console.debug('F2V init', { ...OC.Util.History.parseUrlQuery(), view: this.navigation?.active?.id })
 			this._onPopState({ ...OC.Util.History.parseUrlQuery(), view: this.navigation?.active?.id });
 
 			this._debouncedPersistShowHiddenFilesState = _.debounce(this._persistShowHiddenFilesState, 1200);
@@ -310,7 +309,6 @@
 		 * Event handler for when the URL changed
 		 */
 		_onPopState: function(params) {
-			console.debug('F2V onPopState', params);
 			params = _.extend({
 				dir: '/',
 				view: 'files'
@@ -348,7 +346,6 @@
 		 * Change the URL to point to the given dir and view
 		 */
 		_changeUrl: function(view, dir, fileId) {
-			console.debug('F2V changeUrl', { arguments });
 			var params = { dir: dir };
 			if (view !== 'files') {
 				params.view = view;
@@ -359,16 +356,13 @@
 			if (currentParams.dir === params.dir && currentParams.view === params.view) {
 				if (currentParams.fileid !== params.fileid) {
 					// if only fileid changed or was added, replace instead of push
-					console.debug('F2V 1', currentParams.fileid, params.fileid, params);
 					OC.Util.History.replaceState(this._makeUrlParams(params));
 					return
 				}
 			} else {
-				console.debug('F2V 2', params);
 				OC.Util.History.pushState(this._makeUrlParams(params));
 				return
 			}
-			console.debug('F2V 3', params, currentParams);
 		},
 
 		/**

+ 0 - 2
apps/files/js/filelist.js

@@ -756,7 +756,6 @@
 		 * Event handler when leaving previously hidden state
 		 */
 		_onShow: function(e) {
-			console.debug('F2V onShow', [e.dir, e.itemId], e);
 			OCA.Files.App && OCA.Files.App.updateCurrentFileList(this);
 			if (e.itemId === this.id) {
 				this._setCurrentDir('/', false);
@@ -771,7 +770,6 @@
 		 * Event handler for when the URL changed
 		 */
 		_onUrlChanged: function(e) {
-			console.debug('F2V onUrlChanged', [e.dir], e);
 			if (e && _.isString(e.dir)) {
 				var currentDir = this.getCurrentDirectory();
 				// this._currentDirectory is NULL when fileList is first initialised

+ 2 - 2
apps/files/lib/Controller/ApiController.php

@@ -285,13 +285,13 @@ class ApiController extends Controller {
 	 *
 	 * @NoAdminRequired
 	 *
-	 * @param bool $key
+	 * @param string $key
 	 * @param string|bool $value
 	 * @return JSONResponse
 	 */
 	public function setConfig(string $key, string|bool $value): JSONResponse {
 		try {
-			$this->userConfig->setConfig($key, $value);
+			$this->userConfig->setConfig($key, (string)$value);
 		} catch (\InvalidArgumentException $e) {
 			return new JSONResponse(['message' => $e->getMessage()], Http::STATUS_BAD_REQUEST);
 		}

+ 5 - 4
apps/files/lib/Service/UserConfig.php

@@ -41,8 +41,9 @@ class UserConfig {
 		],
 	];
 
-	private IConfig $config;
-	private IUser|null $user;
+	protected IConfig $config;
+	/** @var \OCP\IUser|null */
+	protected mixed $user = null;
 
 	public function __construct(IConfig $config, IUserSession $userSession) {
 		$this->config = $config;
@@ -98,7 +99,7 @@ class UserConfig {
 	 * @throws \InvalidArgumentException
 	 */
 	public function setConfig($key, $value) {
-		if (!$this->user) {
+		if ($this->user === null) {
 			throw new \Exception('No user logged in');
 		}
 
@@ -123,7 +124,7 @@ class UserConfig {
 	 * @return array
 	 */
 	public function getConfigs(): array {
-		if (!$this->user) {
+		if ($this->user === null) {
 			throw new \Exception('No user logged in');
 		}
 

+ 118 - 0
apps/files/src/views/Navigation.cy.ts

@@ -0,0 +1,118 @@
+/* eslint-disable import/first */
+import FolderSvg from '@mdi/svg/svg/folder.svg'
+import ShareSvg from '@mdi/svg/svg/share-variant.svg'
+
+import NavigationService from '../services/Navigation'
+import NavigationView from './Navigation.vue'
+import router from '../router/router.js'
+
+const Navigation = new NavigationService()
+
+console.log(FolderSvg)
+
+describe('Navigation renders', () => {
+	it('renders', () => {
+		cy.mount(NavigationView, {
+			propsData: {
+				Navigation,
+			},
+		})
+
+		cy.get('[data-cy-files-navigation]').should('be.visible')
+		cy.get('[data-cy-files-navigation-settings-button]').should('be.visible')
+	})
+})
+
+describe('Navigation API', () => {
+	it('Check API entries rendering', () => {
+		Navigation.register({
+			id: 'files',
+			name: 'Files',
+			getFiles: () => [],
+			icon: FolderSvg,
+			order: 1,
+		})
+
+		cy.mount(NavigationView, {
+			propsData: {
+				Navigation,
+			},
+			router,
+		})
+
+		cy.get('[data-cy-files-navigation]').should('be.visible')
+		cy.get('[data-cy-files-navigation-item]').should('have.length', 1)
+		cy.get('[data-cy-files-navigation-item="files"]').should('be.visible')
+		cy.get('[data-cy-files-navigation-item="files"]').should('contain.text', 'Files')
+	})
+
+	it('Adds a new entry and render', () => {
+		Navigation.register({
+			id: 'sharing',
+			name: 'Sharing',
+			getFiles: () => [],
+			icon: ShareSvg,
+			order: 2,
+		})
+
+		cy.mount(NavigationView, {
+			propsData: {
+				Navigation,
+			},
+			router,
+		})
+
+		cy.get('[data-cy-files-navigation]').should('be.visible')
+		cy.get('[data-cy-files-navigation-item]').should('have.length', 2)
+		cy.get('[data-cy-files-navigation-item="sharing"]').should('be.visible')
+		cy.get('[data-cy-files-navigation-item="sharing"]').should('contain.text', 'Sharing')
+	})
+
+	it('Adds a new children, render and open menu', () => {
+		Navigation.register({
+			id: 'sharingin',
+			name: 'Shared with me',
+			getFiles: () => [],
+			parent: 'sharing',
+			icon: ShareSvg,
+			order: 1,
+		})
+
+		cy.mount(NavigationView, {
+			propsData: {
+				Navigation,
+			},
+			router,
+		})
+
+		cy.get('[data-cy-files-navigation]').should('be.visible')
+		cy.get('[data-cy-files-navigation-item]').should('have.length', 3)
+
+		// Intercept collapse preference request
+		cy.intercept('POST', '*/apps/files/api/v1/toggleShowFolder/*', {
+			statusCode: 200,
+		  }).as('toggleShowFolder')
+
+		// Toggle the sharing entry children
+		cy.get('[data-cy-files-navigation-item="sharing"] button.icon-collapse').should('exist')
+		cy.get('[data-cy-files-navigation-item="sharing"] button.icon-collapse').click({ force: true })
+		cy.wait('@toggleShowFolder')
+
+		// Validate children
+		cy.get('[data-cy-files-navigation-item="sharingin"]').should('be.visible')
+		cy.get('[data-cy-files-navigation-item="sharingin"]').should('contain.text', 'Shared with me')
+
+	})
+
+	it('Throws when adding a duplicate entry', () => {
+		expect(() => {
+			Navigation.register({
+				id: 'files',
+				name: 'Files',
+				getFiles: () => [],
+				icon: FolderSvg,
+				order: 1,
+			})
+		}).to.throw('Navigation id files is already registered')
+	})
+})

+ 18 - 16
apps/files/src/views/Navigation.vue

@@ -20,22 +20,24 @@
   -
   -->
 <template>
-	<NcAppNavigation>
+	<NcAppNavigation data-cy-files-navigation>
 		<template #list>
 			<NcAppNavigationItem v-for="view in parentViews"
 				:key="view.id"
 				:allow-collapse="true"
-				:to="{name: 'filelist', params: { view: view.id }}"
+				:data-cy-files-navigation-item="view.id"
 				:icon="view.iconClass"
 				:open="view.expanded"
 				:pinned="view.sticky"
 				:title="view.name"
+				:to="{name: 'filelist', params: { view: view.id }}"
 				@update:open="onToggleExpand(view)">
 				<NcAppNavigationItem v-for="child in childViews[view.id]"
 					:key="child.id"
-					:to="{name: 'filelist', params: { view: child.id }}"
+					:data-cy-files-navigation-item="child.id"
 					:icon="child.iconClass"
-					:title="child.name" />
+					:title="child.name"
+					:to="{name: 'filelist', params: { view: child.id }}" />
 			</NcAppNavigationItem>
 		</template>
 
@@ -44,6 +46,7 @@
 			<ul class="app-navigation-entry__settings">
 				<NcAppNavigationItem :aria-label="t('files', 'Open the files app settings')"
 					:title="t('files', 'Files settings')"
+					data-cy-files-navigation-settings-button
 					@click.prevent.stop="openSettings">
 					<Cog slot="icon" :size="20" />
 				</NcAppNavigationItem>
@@ -52,6 +55,7 @@
 
 		<!-- Settings modal-->
 		<SettingsModal :open="settingsOpened"
+			data-cy-files-navigation-settings
 			@close="onSettingsClose" />
 	</NcAppNavigation>
 </template>
@@ -60,13 +64,15 @@
 import { emit, subscribe } from '@nextcloud/event-bus'
 import { generateUrl } from '@nextcloud/router'
 import axios from '@nextcloud/axios'
+import Cog from 'vue-material-design-icons/Cog.vue'
 import NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'
 import NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'
-import Cog from 'vue-material-design-icons/Cog.vue'
 
-import SettingsModal from './Settings.vue'
-import Navigation from '../services/Navigation.ts'
 import logger from '../logger.js'
+import Navigation from '../services/Navigation.ts'
+import SettingsModal from './Settings.vue'
+
+import { translate } from '@nextcloud/l10n'
 
 export default {
 	name: 'Navigation',
@@ -152,7 +158,7 @@ export default {
 		 */
 		showView(view, oldView) {
 			// Closing any opened sidebar
-			OCA.Files?.Sidebar?.close?.()
+			window?.OCA?.Files?.Sidebar?.close?.()
 
 			if (view.legacy) {
 				const newAppContent = document.querySelector('#app-content #app-content-' + this.currentView.id + '.viewcontainer')
@@ -161,9 +167,6 @@ export default {
 				})
 				newAppContent.classList.remove('hidden')
 
-				// Legacy event
-				console.debug('F2V', $(newAppContent))
-
 				// Trigger init if not already done
 				window.jQuery(newAppContent).trigger(new window.jQuery.Event('show'))
 
@@ -171,7 +174,6 @@ export default {
 				this.$nextTick(() => {
 					const { dir = '/' } = OC.Util.History.parseUrlQuery()
 					const params = { itemId: view.id, dir }
-					console.debug('F2V showView events', params, newAppContent);
 					window.jQuery(newAppContent).trigger(new window.jQuery.Event('show', params))
 					window.jQuery(newAppContent).trigger(new window.jQuery.Event('urlChanged', params))
 				})
@@ -212,20 +214,20 @@ export default {
 		},
 
 		/**
-		 * Open the settings modal and update the settings API entries
+		 * Open the settings modal
 		 */
 		openSettings() {
 			this.settingsOpened = true
-			OCA.Files.Settings.settings.forEach(setting => setting.open())
 		},
 
 		/**
-		 * Close the settings modal and update the settings API entries
+		 * Close the settings modal
 		 */
 		onSettingsClose() {
 			this.settingsOpened = false
-			OCA.Files.Settings.settings.forEach(setting => setting.close())
 		},
+
+		t: translate,
 	},
 }
 </script>

+ 18 - 2
apps/files/src/views/Settings.vue

@@ -67,8 +67,12 @@ import { getCurrentUser } from '@nextcloud/auth'
 import { loadState } from '@nextcloud/initial-state'
 import { emit } from '@nextcloud/event-bus'
 import axios from '@nextcloud/axios'
+import { translate } from '@nextcloud/l10n'
 
-const userConfig = loadState('files', 'config')
+const userConfig = loadState('files', 'config', {
+	show_hidden: false,
+	crop_image_previews: true,
+})
 
 export default {
 	name: 'Settings',
@@ -93,7 +97,7 @@ export default {
 			...userConfig,
 
 			// Settings API
-			settings: OCA.Files.Settings.settings,
+			settings: window.OCA?.Files?.Settings?.settings || [],
 
 			// Webdav infos
 			webdavUrl: generateRemoteUrl('dav/files/' + encodeURIComponent(getCurrentUser()?.uid)),
@@ -101,6 +105,16 @@ export default {
 		}
 	},
 
+	beforeMount() {
+		// Update the settings API entries state
+		this.settings.forEach(setting => setting.open())
+	},
+
+	beforeDestroy() {
+		// Update the settings API entries state
+		this.settings.forEach(setting => setting.close())
+	},
+
 	methods: {
 		onClose() {
 			this.$emit('close')
@@ -112,6 +126,8 @@ export default {
 				value,
 			})
 		},
+
+		t: translate,
 	},
 }
 </script>

+ 1 - 3
build/files-checker.php

@@ -93,10 +93,8 @@ $expectedFiles = [
 	'tsconfig.json',
 	'vendor-bin',
 	'version.php',
-	'webpack.common.js',
-	'webpack.dev.js',
+	'webpack.config.js',
 	'webpack.modules.js',
-	'webpack.prod.js',
 ];
 $actualFiles = [];
 

+ 29 - 1
cypress.config.ts

@@ -1,5 +1,12 @@
 /* eslint-disable node/no-unpublished-import */
-import { applyChangesToNextcloud, configureNextcloud, preppingNextcloud, startNextcloud, stopNextcloud, waitOnNextcloud } from './cypress/dockerNode'
+
+import {
+	applyChangesToNextcloud,
+	configureNextcloud,
+	startNextcloud,
+	stopNextcloud,
+	waitOnNextcloud,
+} from './cypress/dockerNode'
 import { defineConfig } from 'cypress'
 
 import browserify from '@cypress/browserify-preprocessor'
@@ -29,6 +36,7 @@ export default defineConfig({
 		failSilently: false,
 		type: 'actual',
 	},
+
 	screenshotsFolder: 'cypress/snapshots/actual',
 	trashAssetsBeforeRuns: true,
 
@@ -82,4 +90,24 @@ export default defineConfig({
 				})
 		},
 	},
+
+	component: {
+		devServer: {
+			framework: 'vue',
+			bundler: 'webpack',
+			webpackConfig: async () => {
+				process.env.npm_package_name = 'NcCypress'
+				process.env.npm_package_version = '1.0.0'
+				process.env.NODE_ENV = 'development'
+
+				const config = require('@nextcloud/webpack-vue-config')
+				config.module.rules.push({
+					test: /\.svg$/,
+					type: 'asset/source',
+				})
+
+				return config
+			},
+		},
+	},
 })

+ 12 - 0
cypress/support/component-index.html

@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <title>Components App</title>
+  </head>
+  <body>
+    <div data-cy-root></div>
+  </body>
+</html>

+ 35 - 0
cypress/support/component.ts

@@ -0,0 +1,35 @@
+/**
+ * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * 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/>.
+ *
+ */
+import { mount } from 'cypress/vue2'
+
+type MountParams = Parameters<typeof mount>;
+type OptionsParam = MountParams[1];
+
+declare global {
+	namespace Cypress {
+		interface Chainable<Subject = any> {
+			mount: typeof mount;
+		}
+	}
+}
+
+Cypress.Commands.add('mount', mount);

File diff suppressed because it is too large
+ 0 - 0
dist/comments-comments-app.js


File diff suppressed because it is too large
+ 0 - 0
dist/comments-comments-app.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/comments-comments-tab.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/comments-comments.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-files_client.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-files_fileinfo.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-install.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-login.js


File diff suppressed because it is too large
+ 0 - 0
dist/core-login.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-main.js


File diff suppressed because it is too large
+ 0 - 0
dist/core-main.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-maintenance.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-profile.js


File diff suppressed because it is too large
+ 0 - 0
dist/core-profile.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-recommendedapps.js


File diff suppressed because it is too large
+ 0 - 0
dist/core-recommendedapps.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-systemtags.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-unified-search.js


File diff suppressed because it is too large
+ 0 - 0
dist/core-unified-search.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-unsupported-browser-redirect.js


File diff suppressed because it is too large
+ 0 - 0
dist/core-unsupported-browser-redirect.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-unsupported-browser.js


File diff suppressed because it is too large
+ 0 - 0
dist/core-unsupported-browser.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/dashboard-main.js


File diff suppressed because it is too large
+ 0 - 0
dist/dashboard-main.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/dav-settings-admin-caldav.js


File diff suppressed because it is too large
+ 0 - 0
dist/dav-settings-admin-caldav.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/dav-settings-personal-availability.js


File diff suppressed because it is too large
+ 0 - 0
dist/dav-settings-personal-availability.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/federatedfilesharing-vue-settings-admin.js


File diff suppressed because it is too large
+ 0 - 0
dist/federatedfilesharing-vue-settings-admin.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/federatedfilesharing-vue-settings-personal.js


File diff suppressed because it is too large
+ 0 - 0
dist/federatedfilesharing-vue-settings-personal.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files-main.js


+ 4 - 6
dist/files-main.js.LICENSE.txt

@@ -66,11 +66,10 @@
  */
 
 /**
- * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>
- * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>
  *
- * @author Gary Kim <gary@garykim.dev>
  * @author John Molakvoæ <skjnldsv@protonmail.com>
+ * @author Julius Härtl <jus@bitgrid.net>
  *
  * @license AGPL-3.0-or-later
  *
@@ -90,10 +89,9 @@
  */
 
 /**
- * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>
  *
  * @author John Molakvoæ <skjnldsv@protonmail.com>
- * @author Julius Härtl <jus@bitgrid.net>
  *
  * @license AGPL-3.0-or-later
  *
@@ -113,7 +111,7 @@
  */
 
 /**
- * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>
  *
  * @author John Molakvoæ <skjnldsv@protonmail.com>
  *

File diff suppressed because it is too large
+ 0 - 0
dist/files-main.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files-personal-settings.js


File diff suppressed because it is too large
+ 0 - 0
dist/files-personal-settings.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-additionalScripts.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-collaboration.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-files_sharing.js


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-files_sharing.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-files_sharing_tab.js


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-files_sharing_tab.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-personal-settings.js


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-personal-settings.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_trashbin-files_trashbin.js


File diff suppressed because it is too large
+ 0 - 0
dist/files_trashbin-files_trashbin.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_versions-files_versions.js


File diff suppressed because it is too large
+ 0 - 0
dist/files_versions-files_versions.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/oauth2-oauth2.js


File diff suppressed because it is too large
+ 0 - 0
dist/oauth2-oauth2.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-apps-view-7418.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-apps-view-7418.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-apps.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-legacy-admin.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-users-8351.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-users-8351.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-admin-basic-settings.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-admin-basic-settings.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-admin-delegation.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-admin-delegation.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-admin-security.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-admin-security.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-apps-users-management.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-apps-users-management.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-nextcloud-pdf.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-nextcloud-pdf.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-info.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-info.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-password.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-password.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-security.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-security.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-webauthn.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-webauthn.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/sharebymail-vue-settings-admin-sharebymail.js


File diff suppressed because it is too large
+ 0 - 0
dist/sharebymail-vue-settings-admin-sharebymail.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/systemtags-systemtags.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/theming-admin-theming.js


File diff suppressed because it is too large
+ 0 - 0
dist/theming-admin-theming.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/theming-personal-theming.js


File diff suppressed because it is too large
+ 0 - 0
dist/theming-personal-theming.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/twofactor_backupcodes-settings.js


File diff suppressed because it is too large
+ 0 - 0
dist/twofactor_backupcodes-settings.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/updatenotification-updatenotification.js


File diff suppressed because it is too large
+ 0 - 0
dist/updatenotification-updatenotification.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/user-status-modal-8299.js


File diff suppressed because it is too large
+ 0 - 0
dist/user-status-modal-8299.js.map


Some files were not shown because too many files changed in this diff