summaryrefslogtreecommitdiffstats
path: root/apps/files/src
diff options
context:
space:
mode:
authorGary Kim <gary@garykim.dev>2020-02-26 23:22:57 +0800
committerGary Kim <gary@garykim.dev>2020-03-22 22:34:49 +0800
commit98eeb57a04726a5cdffac94903f494731c6a782e (patch)
tree9af0241b640c8ce81487c6887a28b5e01e525a4d /apps/files/src
parent019ba27943a44a5c3b80ffac02c5568ee47af6cc (diff)
downloadnextcloud-server-98eeb57a04726a5cdffac94903f494731c6a782e.tar.gz
nextcloud-server-98eeb57a04726a5cdffac94903f494731c6a782e.zip
Add OCA.Files.Settings for Files Settings
Signed-off-by: Gary Kim <gary@garykim.dev>
Diffstat (limited to 'apps/files/src')
-rw-r--r--apps/files/src/components/Setting.vue41
-rw-r--r--apps/files/src/files-app-settings.js53
-rw-r--r--apps/files/src/models/Setting.js69
-rw-r--r--apps/files/src/services/Settings.js56
-rw-r--r--apps/files/src/views/Settings.vue48
5 files changed, 267 insertions, 0 deletions
diff --git a/apps/files/src/components/Setting.vue b/apps/files/src/components/Setting.vue
new file mode 100644
index 00000000000..acd7e8d1bce
--- /dev/null
+++ b/apps/files/src/components/Setting.vue
@@ -0,0 +1,41 @@
+<!--
+ - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>
+ -
+ - @author Gary Kim <gary@garykim.dev>
+ -
+ - @license GNU AGPL version 3 or any later version
+ -
+ - 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/>.
+ -
+ -->
+
+<template>
+ <div />
+</template>
+<script>
+export default {
+ name: 'Setting',
+ props: {
+ el: {
+ type: Function,
+ required: true,
+ }
+ },
+ mounted() {
+ this.$el.appendChild(this.el())
+ }
+}
+</script>
+<style>
+</style>
diff --git a/apps/files/src/files-app-settings.js b/apps/files/src/files-app-settings.js
new file mode 100644
index 00000000000..6d77c310695
--- /dev/null
+++ b/apps/files/src/files-app-settings.js
@@ -0,0 +1,53 @@
+/**
+ * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>
+ * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author Gary Kim <gary@garykim.dev>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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 Vue from 'vue'
+import Settings from './services/Settings'
+import SettingsView from './views/Settings'
+import Setting from './models/Setting'
+
+Vue.prototype.t = t
+
+// Init Files App Settings Service
+if (!window.OCA.Files) {
+ window.OCA.Files = {}
+}
+Object.assign(window.OCA.Files, { Settings: new Settings() })
+Object.assign(window.OCA.Files.Settings, { Setting })
+
+window.addEventListener('DOMContentLoaded', () => {
+ // Init Vue app
+ // eslint-disable-next-line
+ new Vue({
+ el: '#files-app-settings',
+ render: h => h(SettingsView),
+ })
+
+ const appSettingsHeader = document.getElementById('app-settings-header')
+ if (appSettingsHeader) {
+ appSettingsHeader.addEventListener('click', e => {
+ const opened = e.currentTarget.children[0].classList.contains('opened')
+ OCA.Files.Settings.settings.forEach(e => opened ? e.close() : e.open())
+ })
+ }
+})
diff --git a/apps/files/src/models/Setting.js b/apps/files/src/models/Setting.js
new file mode 100644
index 00000000000..64c81ee5013
--- /dev/null
+++ b/apps/files/src/models/Setting.js
@@ -0,0 +1,69 @@
+/**
+ * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>
+ * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author Gary Kim <gary@garykim.dev>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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/>.
+ *
+ */
+
+export default class Setting {
+
+ #close
+ #el
+ #name
+ #open
+
+ /**
+ * Create a new files app setting
+ *
+ * @since 19.0.0
+ * @param {string} name the name of this setting
+ * @param {Function} component.el function that returns an unmounted dom element to be added
+ * @param {Function} [component.open] callback for when setting is added
+ * @param {Function} [component.close] callback for when setting is closed
+ */
+ constructor(name, { el, open, close }) {
+ this.#name = name
+ this.#el = el
+ this.#open = open
+ this.#close = close
+ if (typeof this.#open !== 'function') {
+ this.#open = () => {}
+ }
+ if (typeof this.#close !== 'function') {
+ this.#close = () => {}
+ }
+ }
+
+ get name() {
+ return this.#name
+ }
+
+ get el() {
+ return this.#el
+ }
+
+ get open() {
+ return this.#open
+ }
+
+ get close() {
+ return this.#close
+ }
+
+}
diff --git a/apps/files/src/services/Settings.js b/apps/files/src/services/Settings.js
new file mode 100644
index 00000000000..7d8961b35ab
--- /dev/null
+++ b/apps/files/src/services/Settings.js
@@ -0,0 +1,56 @@
+/**
+ * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>
+ *
+ * @author Gary Kim <gary@garykim.dev>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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/>.
+ *
+ */
+
+export default class Settings {
+
+ #settings
+
+ constructor() {
+ this.#settings = []
+ console.debug('OCA.Files.Settings initialized')
+ }
+
+ /**
+ * Register a new setting
+ *
+ * @since 19.0.0
+ * @param {OCA.Files.Settings.Setting} view element to add to settings
+ * @returns {boolean} whether registering was successful
+ */
+ register(view) {
+ if (this.#settings.filter(e => e.name === view.name).length > 0) {
+ console.error('A setting with the same name is already registered')
+ return false
+ }
+ this.#settings.push(view)
+ return true
+ }
+
+ /**
+ * All settings elements
+ * @returns {OCA.Files.Settings.Setting[]} All currently registered settings
+ */
+ get settings() {
+ return this.#settings
+ }
+
+}
diff --git a/apps/files/src/views/Settings.vue b/apps/files/src/views/Settings.vue
new file mode 100644
index 00000000000..793ad293ad1
--- /dev/null
+++ b/apps/files/src/views/Settings.vue
@@ -0,0 +1,48 @@
+<!--
+ - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>
+ -
+ - @author Gary Kim <gary@garykim.dev>
+ -
+ - @license GNU AGPL version 3 or any later version
+ -
+ - 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/>.
+ -
+ -->
+<template>
+ <div id="files-app-extra-settings">
+ <template v-for="setting in settings">
+ <Setting :el="setting.el" :key="setting.name" />
+ </template>
+ </div>
+</template>
+
+<script>
+import Setting from '../components/Setting'
+
+export default {
+ name: 'Settings',
+ components: {
+ Setting
+ },
+ data() {
+ return {
+ settings: OCA.Files.Settings.settings
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>