Compare commits

..

11 Commits

Author SHA1 Message Date
Simon Vieille 323f2c753b add compatibility with AppOrder, refactoring 2020-03-28 23:45:27 +01:00
Simon Vieille e1d40bdfab Merge branch 'feature/active-app' into develop 2020-03-28 23:06:42 +01:00
Simon Vieille 6002791c86 update version number 2020-03-28 23:06:29 +01:00
Simon Vieille a0fed31780 add active app, remove useless controllers 2020-03-28 23:05:03 +01:00
Simon Vieille f6bc16580f add documentation 2020-03-28 22:36:25 +01:00
Simon Vieille 15328f4c2c add documentation 2020-03-28 21:00:06 +01:00
Simon Vieille a329c26903 add documentation 2020-03-28 20:55:54 +01:00
Simon Vieille e7c6ca25a1 add documentation 2020-03-28 20:53:57 +01:00
Simon Vieille c925738216 add documentation 2020-03-28 20:53:32 +01:00
Simon Vieille 296cb2e540 add documentation 2020-03-28 20:51:49 +01:00
Simon Vieille b8c3229094 fix issue with scrollbar 2020-03-28 18:58:30 +01:00
6 changed files with 70 additions and 97 deletions
+11
View File
@@ -0,0 +1,11 @@
🤙 Nextcloud app / Side menu 🎨
===============================
This application moves the top menu of Nextcloud to the left side.
Comptatible with AppOrder.
![](https://upload.deblan.org/u/2020-03/5e7fab2b.jpg)
![](https://upload.deblan.org/u/2020-03/5e7fab16.jpg)
+3 -3
View File
@@ -6,14 +6,14 @@
<description>Move the top menu to the left side.</description> <description>Move the top menu to the left side.</description>
<licence>agpl</licence> <licence>agpl</licence>
<author mail="dev+sidemenu@deblan.fr" homepage="https://www.deblan.io/">Simon Vieille</author> <author mail="dev+sidemenu@deblan.fr" homepage="https://www.deblan.io/">Simon Vieille</author>
<version>1.0.0</version> <version>1.1.1</version>
<namespace>SideMenu</namespace> <namespace>SideMenu</namespace>
<category>customization</category> <category>customization</category>
<website>https://gitnet.fr/deblan/side_menu</website> <website>https://gitnet.fr/deblan/side_menu</website>
<bugs>https://gitnet.fr/deblan/side_menu/issues</bugs> <bugs>https://gitnet.fr/deblan/side_menu/issues</bugs>
<repository type="git">https://gitnet.fr/deblan/side_menu</repository> <repository type="git">https://gitnet.fr/deblan/side_menu</repository>
<screenshot>https://upload.deblan.org/u/2020-03/5e7f8a21.png</screenshot> <screenshot>https://upload.deblan.org/u/2020-03/5e7fab2b.jpg</screenshot>
<screenshot>https://upload.deblan.org/u/2020-03/5e7f8a31.png</screenshot> <screenshot>https://upload.deblan.org/u/2020-03/5e7fab16.jpg</screenshot>
<dependencies> <dependencies>
<nextcloud min-version="18" max-version="18"/> <nextcloud min-version="18" max-version="18"/>
</dependencies> </dependencies>
-10
View File
@@ -2,15 +2,5 @@
return [ return [
'routes' => [ 'routes' => [
[
'name' => 'Javascript#sideMenu',
'url' => '/side_menu/javascript/side_menu',
'verb' => 'GET',
],
[
'name' => 'Api#apps',
'url' => '/side_menu/api/apps',
'verb' => 'GET',
]
], ],
]; ];
+2 -2
View File
@@ -3,7 +3,7 @@
} }
#side-menu { #side-menu {
position: absolute; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
height: 100vh; height: 100vh;
@@ -55,7 +55,7 @@
white-space: nowrap; white-space: nowrap;
} }
.side-menu-app a:hover { .side-menu-app a:hover, .side-menu-app.is-active a {
background: #444; background: #444;
} }
-47
View File
@@ -1,47 +0,0 @@
<?php
namespace OCA\SideMenu\Controller;
use OCP\AppFramework\Controller;
use OCP\IRequest;
use OCP\INavigationManager;
use OCP\AppFramework\Http\DataDownloadResponse;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Http\JSONResponse;
class ApiController extends Controller
{
/**
* @var INavigationManager
*/
protected $navigationManager;
/**
* @param string $appName
* @param IRequest $request
* @param INavigationManager $navigationManager
*/
public function __construct($appName, IRequest $request, INavigationManager $navigationManager)
{
parent::__construct($appName, $request);
$this->navigationManager = $navigationManager;
}
/**
* @NoAdminRequired
* @NoCSRFRequired
*
* @return JSONResponse
*/
public function apps(): JSONResponse
{
$apps = $this->navigationManager->getAll();
$data = [
'apps' => $apps,
];
return new JSONResponse($apps);
}
}
+54 -35
View File
@@ -1,23 +1,23 @@
<template> <template>
<div id="side-menu"> <div id="side-menu">
<div class="side-menu-header"> <div class="side-menu-header">
<button class="side-menu-opener"></button> <button class="side-menu-opener"></button>
<div v-if="logo" class="side-menu-logo"> <div v-if="logo" class="side-menu-logo">
<img v-bind:src="logo"> <img v-bind:src="logo">
</div> </div>
</div> </div>
<ul class="side-menu-apps-list"> <ul class="side-menu-apps-list">
<li v-for="app in apps" class="side-menu-app"> <li v-for="app in apps" v-bind:class="{'side-menu-app': true, 'is-active': app.active}">
<a v-bind:href="app.href"> <a v-bind:href="app.href">
<img v-bind:src="app.icon" v-bind:alt="app.name" class="side-menu-app-icon"> <span class="side-menu-app-icon" v-html="app.icon"></span>
{{ app.name }} {{ app.name }}
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
</template> </template>
<script> <script>
@@ -25,27 +25,46 @@ import axios from '@nextcloud/axios'
import { generateUrl } from '@nextcloud/router' import { generateUrl } from '@nextcloud/router'
export default { export default {
name: 'SideMenu', name: 'SideMenu',
data() { data() {
return { return {
apps: [], apps: [],
logo: null logo: null
} }
}, },
created() { methods: {
let that = this retrieveApps() {
this.apps = [];
const links = document.querySelectorAll('#appmenu a');
axios.get(generateUrl('apps/side_menu/side_menu/api/apps')) for (let element of links) {
.then(response => { let href = element.getAttribute('href')
this.apps = response.data
})
this.logo = window.getComputedStyle(document.querySelector('#nextcloud .logo'), null) if (href !== '#') {
.getPropertyValue('background-image') this.apps.push({
.replace('url("', '') href: href,
.replace('")', '') name: element.querySelector('span').innerHTML,
icon: element.querySelector('svg').outerHTML,
active: element.classList.contains('active')
});
}
}
},
retrieveLogo() {
this.logo = window.getComputedStyle(document.querySelector('#nextcloud .logo'), null)
.getPropertyValue('background-image')
.replace('url("', '')
.replace('")', '')
},
},
created() {
this.retrieveApps();
this.retrieveLogo();
console.log(this.logo) const menu = document.querySelector('#appmenu')
} const config = {attributes: true, childList: true, subtree: true};
const observer = new MutationObserver(this.retrieveApps);
observer.observe(menu, config);
}
} }
</script> </script>