From 47cc783b637de75a72a6f8b721edb3cb34934ea0 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Tue, 30 Aug 2022 19:27:37 +0200 Subject: Import existing attempt to port to vue Signed-off-by: Carl Schwan --- src/App.vue | 25 ++++++ src/components/AddFeed.vue | 171 ++++++++++++++++++++++++++++++++++++ src/components/Explore.vue | 78 +++++++++++++++++ src/components/Sidebar.vue | 211 +++++++++++++++++++++++++++++++++++++++++++++ src/main.js | 132 ++++++++++++++++++++++++++++ templates/index.php | 5 ++ webpack.config.js | 1 + 7 files changed, 623 insertions(+) create mode 100644 src/App.vue create mode 100644 src/components/AddFeed.vue create mode 100644 src/components/Explore.vue create mode 100644 src/components/Sidebar.vue create mode 100644 src/main.js diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 000000000..ad80f18d5 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,25 @@ + + + diff --git a/src/components/AddFeed.vue b/src/components/AddFeed.vue new file mode 100644 index 000000000..7ab421554 --- /dev/null +++ b/src/components/AddFeed.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/src/components/Explore.vue b/src/components/Explore.vue new file mode 100644 index 000000000..562d72ae8 --- /dev/null +++ b/src/components/Explore.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/components/Sidebar.vue b/src/components/Sidebar.vue new file mode 100644 index 000000000..0b17b77ed --- /dev/null +++ b/src/components/Sidebar.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 000000000..ae9478a02 --- /dev/null +++ b/src/main.js @@ -0,0 +1,132 @@ + +import Vue from 'vue' +import App from './App.vue' +import VueRouter from 'vue-router' +import Explore from './components/Explore.vue' +import { generateUrl } from '@nextcloud/router' +import Vuex, { Store } from 'vuex' +import axios from '@nextcloud/axios' + +import { Tooltip } from '@nextcloud/vue' + +Vue.prototype.t = t +Vue.prototype.n = n +Vue.prototype.OC = OC +Vue.prototype.OCA = OCA + +Vue.use(Vuex) +Vue.use(VueRouter) + +Vue.directive('tooltip', Tooltip) + +const feedUrl = generateUrl('/apps/news/feeds') +const folderUrl = generateUrl('/apps/news/folders') + +const routes = [ + { + name: 'explore', + path: '#explore', + component: Explore, + }, +] + +const router = new VueRouter({ + mode: 'history', + base: generateUrl('apps/news'), + routes, +}) + +const store = new Store({ + state: { + folders: [], + feeds: [], + }, + mutations: { + addFolders(state, folders) { + folders.forEach((it) => { + it.feedCount = 0 + state.folders.push(it) + }) + }, + addFeeds(state, feeds) { + feeds.forEach((it) => { + state.feeds.push(it) + const folder = state.folders.find( + (folder) => folder.id === it.folderId, + ) + if (folder) { + folder.feeds.push(it) + folder.feedCount += it.unreadCount + } + }) + }, + }, + actions: { + addFolder({ commit }, { folder }) { + axios + .post(folderUrl, { folderName: folder.name }) + .then((response) => + commit('addFolders', response.data.folders), + ) + }, + deleteFolder({ commit }, { folder }) { + /** + this.getByFolderId(folderId).forEach(function (feed) { + promises.push(self.reversiblyDelete(feed.id, false, true)); + }); + this.updateUnreadCache(); + */ + axios.delete(folderUrl + '/' + folder.id).then() + }, + loadFolder({ commit }) { + axios.get(folderUrl).then((response) => { + commit('addFolders', response.data.folders) + axios + .get(feedUrl) + .then((response) => + commit('addFeeds', response.data.feeds), + ) + }) + }, + addFeed({ commit }, { feedReq }) { + let url = feedReq.url.trim() + if (!url.startsWith('http')) { + url = 'https://' + url + } + + /** + if (title !== undefined) { + title = title.trim(); + } + */ + + const feed = { + url, + folderId: feedReq.folder.id || 0, + title: null, + unreadCount: 0, + } + + // this.add(feed); + // this.updateFolderCache(); + + axios + .post(feedUrl, { + url: feed.url, + parentFolderId: feed.folderId, + title: null, + user: null, + password: null, + fullDiscover: feed.autoDiscover, + }) + .then() + }, + }, +}) + +export default new Vue({ + router, + store, + el: '#content', + render: (h) => h(App), +}) diff --git a/templates/index.php b/templates/index.php index 9ad38a0d5..38a3b3d27 100644 --- a/templates/index.php +++ b/templates/index.php @@ -1,4 +1,8 @@ $fileName) { news-scroll-enabled-mark-read="Content.markReadEnabled()" news-scroll-auto-page="Content.autoPage()" news-scroll-mark-read="Content.scrollRead(itemIds)"> + */ diff --git a/webpack.config.js b/webpack.config.js index c329f79d1..310550144 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -6,6 +6,7 @@ const webpackConfig = require('@nextcloud/webpack-vue-config') webpackConfig.entry = { 'admin-settings': path.join(__dirname, 'src', 'main-admin.js'), + 'main': path.join(__dirname, 'src', 'main.js'), } webpackConfig.output.path = path.resolve('./js/build/') webpackConfig.output.publicPath = path.join('/apps/', process.env.npm_package_name, '/js/build/') -- cgit v1.2.3