diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 74aa858f4..21275e0e2 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -29,6 +29,7 @@ use OCA\Deck\Activity\CommentEventHandler; use OCA\Deck\Capabilities; use OCA\Deck\Collaboration\Resources\ResourceProvider; use OCA\Deck\Collaboration\Resources\ResourceProviderCard; +use OCA\Deck\Dashboard\DeckPanel; use OCA\Deck\Db\Acl; use OCA\Deck\Db\AclMapper; use OCA\Deck\Db\AssignedUsersMapper; @@ -43,6 +44,7 @@ use OCP\AppFramework\App; use OCP\Collaboration\Resources\IManager; use OCP\Collaboration\Resources\IProviderManager; use OCP\Comments\CommentsEntityEvent; +use OCP\Dashboard\RegisterPanelEvent; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventDispatcher; use OCP\FullTextSearch\IFullTextSearchManager; @@ -85,6 +87,16 @@ class Application extends App { $container->registerService('database4ByteSupport', static function () use ($server) { return $server->getDatabaseConnection()->supports4ByteText(); }); + + $version = OC_Util::getVersion()[0]; + if ($version >= 20) { + /** @var IEventDispatcher $dispatcher */ + $dispatcher = $container->getServer()->query(IEventDispatcher::class); + $dispatcher->addListener(RegisterPanelEvent::class, function (RegisterPanelEvent $event) use ($container) { + \OCP\Util::addScript('myapp', 'dashboard'); + $event->registerPanel(DeckPanel::class); + }); + } } public function register(): void { diff --git a/lib/Dashboard/DeckPanel.php b/lib/Dashboard/DeckPanel.php new file mode 100644 index 000000000..4a2f47d95 --- /dev/null +++ b/lib/Dashboard/DeckPanel.php @@ -0,0 +1,75 @@ + + * + * @author Julius Härtl + * + * @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 . + * + */ + +namespace OCA\Deck\Dashboard; + + +use OCP\Dashboard\IPanel; + +class DeckPanel implements IPanel { + + /** + * @inheritDoc + */ + public function getId(): string { + return 'deck'; + } + + /** + * @inheritDoc + */ + public function getTitle(): string { + return 'Deck'; + } + + /** + * @inheritDoc + */ + public function getOrder(): int { + return 20; + } + + /** + * @inheritDoc + */ + public function getIconClass(): string { + return 'icon-deck'; + } + + /** + * @inheritDoc + */ + public function getUrl(): ?string { + return null; + } + + /** + * @inheritDoc + */ + public function load(): void { + \OCP\Util::addScript('deck', 'dashboard'); + } +} diff --git a/src/css/dashboard.scss b/src/css/dashboard.scss new file mode 100644 index 000000000..a48c148e4 --- /dev/null +++ b/src/css/dashboard.scss @@ -0,0 +1,3 @@ +.icon-deck { + background-image: url(./../../img/deck-dark.svg); +} diff --git a/src/init-dashboard.js b/src/init-dashboard.js new file mode 100644 index 000000000..d7e66bb61 --- /dev/null +++ b/src/init-dashboard.js @@ -0,0 +1,60 @@ +/* + * @copyright Copyright (c) 2019 Julius Härtl + * + * @author Julius Härtl + * + * @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 . + * + */ + +import Vue from 'vue' +import Vuex from 'vuex' + +import dashboard from './store/dashboard' + +Vue.use(Vuex) + +const debug = process.env.NODE_ENV !== 'production' + +const store = new Vuex.Store({ + modules: { + dashboard, + }, + strict: debug, +}) + +import './css/dashboard.scss' + +// eslint-disable-next-line +__webpack_nonce__ = btoa(OC.requestToken); +// eslint-disable-next-line +__webpack_public_path__ = OC.linkTo('deck', 'js/'); + +Vue.prototype.t = t +Vue.prototype.n = n +Vue.prototype.OC = OC; + +import Dashboard from './views/Dashboard.vue' + +document.addEventListener('DOMContentLoaded', () => { + OCA.Dashboard.register('deck', (el) => { + const View = Vue.extend(Dashboard) + const vm = new View({ + propsData: {}, + store, + }).$mount(el) + }) +}) diff --git a/src/views/Dashboard.vue b/src/views/Dashboard.vue new file mode 100644 index 000000000..ccb0ee303 --- /dev/null +++ b/src/views/Dashboard.vue @@ -0,0 +1,109 @@ + + + + + + + diff --git a/webpack.js b/webpack.js index 8b5445ac6..e8efde30e 100644 --- a/webpack.js +++ b/webpack.js @@ -6,6 +6,7 @@ const config = { entry: { deck: path.join(__dirname, 'src', 'main.js'), collections: path.join(__dirname, 'src', 'init-collections.js'), + dashboard: path.join(__dirname, 'src', 'init-dashboard.js'), }, output: { filename: '[name].js',