Upgraded navigation submenu management and api + created sharing submenu

Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
This commit is contained in:
John Molakvoæ (skjnldsv) 2018-07-13 09:33:57 +02:00
parent 1f9e50086c
commit 6f45607f57
No known key found for this signature in database
GPG Key ID: 60C25B8C072916CF
9 changed files with 135 additions and 137 deletions

View File

@ -39,24 +39,29 @@ $templateManager->registerTemplate('application/vnd.oasis.opendocument.presentat
$templateManager->registerTemplate('application/vnd.oasis.opendocument.text', 'core/templates/filetemplates/template.odt'); $templateManager->registerTemplate('application/vnd.oasis.opendocument.text', 'core/templates/filetemplates/template.odt');
$templateManager->registerTemplate('application/vnd.oasis.opendocument.spreadsheet', 'core/templates/filetemplates/template.ods'); $templateManager->registerTemplate('application/vnd.oasis.opendocument.spreadsheet', 'core/templates/filetemplates/template.ods');
\OCA\Files\App::getNavigationManager()->add(function () use ($l) { \OCA\Files\App::getNavigationManager()->add([
return [ 'id' => 'files',
'id' => 'files', 'appname' => 'files',
'appname' => 'files', 'script' => 'list.php',
'script' => 'list.php', 'order' => 0,
'order' => 0, 'name' => $l->t('All files'),
'name' => $l->t('All files'), ]);
];
});
\OCA\Files\App::getNavigationManager()->add(function () use ($l) { \OCA\Files\App::getNavigationManager()->add([
return [ 'id' => 'recent',
'id' => 'recent', 'appname' => 'files',
'appname' => 'files', 'script' => 'recentlist.php',
'script' => 'recentlist.php', 'order' => 2,
'order' => 2, 'name' => $l->t('Recent'),
'name' => $l->t('Recent'), ]);
];
}); \OCA\Files\App::getNavigationManager()->add([
'id' => 'favorites',
'appname' => 'files',
'script' => 'simplelist.php',
'order' => 5,
'name' => $l->t('Favorites'),
'expandedState' => 'show_Quick_Access'
]);
\OCP\Util::connectHook('\OCP\Config', 'js', '\OCA\Files\App', 'extendJsConfig'); \OCP\Util::connectHook('\OCP\Config', 'js', '\OCA\Files\App', 'extendJsConfig');

View File

@ -77,14 +77,9 @@ $application->registerRoutes(
'verb' => 'GET', 'verb' => 'GET',
], ],
[ [
'name' => 'API#showQuickAccess', 'name' => 'API#toggleShowFolder',
'url' => '/api/v1/quickaccess/set/showList', 'url' => '/api/v1/toggleShowFolder/{key}',
'verb' => 'GET', 'verb' => 'POST'
],
[
'name' => 'API#getShowQuickAccess',
'url' => '/api/v1/quickaccess/get/showList',
'verb' => 'GET',
], ],
[ [
'name' => 'API#getShowQuickaccessSettings', 'name' => 'API#getShowQuickaccessSettings',

View File

@ -93,7 +93,8 @@
background-image: url('../img/star.svg?v=1'); background-image: url('../img/star.svg?v=1');
} }
.nav-icon-sharingin, .nav-icon-sharingin,
.nav-icon-sharingout { .nav-icon-sharingout,
.nav-icon-shareoverview {
background-image: url('../img/share.svg?v=1'); background-image: url('../img/share.svg?v=1');
} }
.nav-icon-sharinglinks { .nav-icon-sharinglinks {

View File

@ -172,30 +172,18 @@
*/ */
_onClickMenuButton: function (ev) { _onClickMenuButton: function (ev) {
var $target = $(ev.target); var $target = $(ev.target);
var $menu = $target.parent('li');
var itemId = $target.closest('button').attr('id'); var itemId = $target.closest('button').attr('id');
var collapsibleToggles = []; var collapsibleToggles = [];
var dotmenuToggles = []; var dotmenuToggles = [];
// The collapsibleToggles-Array consists of a list of Arrays. Every subarray must contain the Button to listen to at the 0th index, if ($menu.hasClass('collapsible') && $menu.data('expandedstate')) {
// and the parent, which should be toggled at the first arrayindex. $menu.toggleClass('open');
collapsibleToggles.push(["#button-collapse-favorites", "#button-collapse-parent-favorites"]); var show = $menu.hasClass('open') ? 1 : 0;
var key = $menu.data('expandedstate');
// The dotmenuToggles-Array consists of a list of Arrays. Every subarray must contain the Button to listen to at the 0th index, $.post(OC.generateUrl("/apps/files/api/v1/toggleShowFolder/" + key), {show: show});
// and the parent, which should be toggled at the first arrayindex. }
dotmenuToggles.push(["#dotmenu-button-favorites", "dotmenu-content-favorites"]);
collapsibleToggles.forEach(function foundToggle (item) {
if (item[0] === ("#" + itemId)) {
$(item[1]).toggleClass('open');
var show = 1;
if (!$(item[1]).hasClass('open')) {
show = 0;
}
$.get(OC.generateUrl("/apps/files/api/v1/quickaccess/set/showList"), {show: show}, function (data, status) {
});
}
});
dotmenuToggles.forEach(function foundToggle (item) { dotmenuToggles.forEach(function foundToggle (item) {
if (item[0] === ("#" + itemId)) { if (item[0] === ("#" + itemId)) {

View File

@ -291,29 +291,28 @@ class ApiController extends Controller {
} }
/** /**
* Toggle default for showing/hiding QuickAccess folder * Toggle default for showing/hiding xxx folder
* *
* @NoAdminRequired * @NoAdminRequired
* *
* @param bool $show * @param bool $show
* @param bool $key the key of the folder
* *
* @return Response * @return Response
*/ */
public function showQuickAccess($show) { public function toggleShowFolder(int $show, string $key) {
$this->config->setUserValue($this->userSession->getUser()->getUID(), 'files', 'show_Quick_Access', (int)$show); // ensure the edited key exists
return new Response(); $navItems = \OCA\Files\App::getNavigationManager()->getAll();
} foreach ($navItems as $item) {
// check if data is valid
/** if (($show === 0 || $show === 1) && isset($item['expandedState']) && $key === $item['expandedState']) {
* Toggle default for showing/hiding QuickAccess folder $this->config->setUserValue($this->userSession->getUser()->getUID(), 'files', $key, (int)$show);
* return new Response();
* @NoAdminRequired }
* }
* @return String $response = new Response();
*/ $response->setStatus(Http::STATUS_FORBIDDEN);
public function getShowQuickAccess() { return $response;
return $this->config->getUserValue($this->userSession->getUser()->getUID(), 'files', 'show_Quick_Access', 0);
} }
/** /**

View File

@ -156,6 +156,7 @@ class ViewController extends Controller {
$user = $this->userSession->getUser()->getUID(); $user = $this->userSession->getUser()->getUID();
// Get all the user favorites to create a submenu
try { try {
$favElements = $this->activityHelper->getFavoriteFilePaths($this->userSession->getUser()->getUID()); $favElements = $this->activityHelper->getFavoriteFilePaths($this->userSession->getUser()->getUID());
} catch (\RuntimeException $e) { } catch (\RuntimeException $e) {
@ -193,27 +194,20 @@ class ViewController extends Controller {
} }
// show_Quick_Access stored as string
$defaultExpandedState = $this->config->getUserValue($this->userSession->getUser()->getUID(), 'files', 'show_Quick_Access', '0') === '1';
\OCA\Files\App::getNavigationManager()->add(
[
'id' => 'favorites',
'appname' => 'files',
'script' => 'simplelist.php',
'classes' => $collapseClasses,
'order' => 5,
'name' => $this->l10n->t('Favorites'),
'sublist' => $favoritesSublistArray,
'defaultExpandedState' => $defaultExpandedState,
'enableMenuButton' => 0,
]
);
$navItems = \OCA\Files\App::getNavigationManager()->getAll(); $navItems = \OCA\Files\App::getNavigationManager()->getAll();
usort($navItems, function ($item1, $item2) {
return $item1['order'] - $item2['order']; // transform the favorites entry in menu
}); $navItems['favorites']['sublist'] = $favoritesSublistArray;
$navItems['favorites']['classes'] = $collapseClasses;
// parse every menu and add the expandedState user value
foreach ($navItems as $key => $item) {
if (isset($item['expandedState'])) {
$defaultValue = $this->config->getUserValue($this->userSession->getUser()->getUID(), 'files', $item['expandedState'], '0') === '1';
$navItems[$key]['defaultExpandedState'] = $defaultValue;
}
}
$nav->assign('navigationItems', $navItems); $nav->assign('navigationItems', $navItems);
@ -235,10 +229,23 @@ class ViewController extends Controller {
if (isset($item['script'])) { if (isset($item['script'])) {
$content = $this->renderScript($item['appname'], $item['script']); $content = $this->renderScript($item['appname'], $item['script']);
} }
$contentItem = []; // parse submenus
$contentItem['id'] = $item['id']; if (isset($item['sublist'])) {
$contentItem['content'] = $content; foreach ($item['sublist'] as $subitem) {
$contentItems[] = $contentItem; $subcontent = '';
if (isset($subitem['script'])) {
$subcontent = $this->renderScript($subitem['appname'], $subitem['script']);
}
$contentItems[$subitem['id']] = [
'id' => $subitem['id'],
'content' =>$subcontent
];
}
}
$contentItems[$item['id']] = [
'id' => $item['id'],
'content' =>$content
];
} }
$event = new GenericEvent(null, ['hiddenFields' => []]); $event = new GenericEvent(null, ['hiddenFields' => []]);

View File

@ -66,21 +66,26 @@
function NavigationListElements($item, $l, $pinned) { function NavigationListElements($item, $l, $pinned) {
strpos($item['classes'], 'pinned') !== false ? $pinned++ : ''; strpos($item['classes'], 'pinned') !== false ? $pinned++ : '';
?> ?>
<li <?php if (isset($item['sublist'])){ ?>id="button-collapse-parent-<?php p($item['id']); ?>"<?php } ?> <li
data-id="<?php p($item['id']) ?>" data-dir="<?php p($item['dir']) ?>" data-view="<?php p($item['view']) ?>" data-id="<?php p($item['id']) ?>"
class="nav-<?php p($item['id']) ?> <?php p($item['classes']) ?> <?php p($pinned === 1 ? 'first-pinned' : '') ?> <?php if ($item['defaultExpandedState']) { ?> open<?php } ?>" <?php if (isset($item['dir'])) { ?> data-dir="<?php p($item['dir']); ?>" <?php } ?>
<?php if (isset($item['view'])) { ?> data-view="<?php p($item['view']); ?>" <?php } ?>
<?php if (isset($item['expandedState'])) { ?> data-expandedstate="<?php p($item['expandedState']); ?>" <?php } ?>
class="nav-<?php p($item['id']) ?>
<?php if (isset($item['classes'])) { p($item['classes']); } ?>
<?php p($pinned === 1 ? 'first-pinned' : '') ?>
<?php if (isset($item['defaultExpandedState']) && $item['defaultExpandedState']) { ?> open<?php } ?>"
<?php if (isset($item['folderPosition'])) { ?> folderposition="<?php p($item['folderPosition']); ?>" <?php } ?>> <?php if (isset($item['folderPosition'])) { ?> folderposition="<?php p($item['folderPosition']); ?>" <?php } ?>>
<a href="<?php p(isset($item['href']) ? $item['href'] : '#') ?>" <a href="<?php p(isset($item['href']) ? $item['href'] : '#') ?>"
class="nav-icon-<?php p($item['icon'] !== '' ? $item['icon'] : $item['id']) ?> svg"><?php p($item['name']); ?></a> class="nav-icon-<?php p(isset($item['icon']) && $item['icon'] !== '' ? $item['icon'] : $item['id']) ?> svg"><?php p($item['name']); ?></a>
<?php <?php
NavigationElementMenu($item); NavigationElementMenu($item);
if (isset($item['sublist'])) { if (isset($item['sublist'])) {
?> ?>
<button id="button-collapse-<?php p($item['id']); ?>" <button class="collapse app-navigation-noclose" <?php if (sizeof($item['sublist']) == 0) { ?> style="display: none" <?php } ?>></button>
class="collapse app-navigation-noclose" <?php if (sizeof($item['sublist']) == 0) { ?> style="display: none" <?php } ?>></button>
<ul id="sublist-<?php p($item['id']); ?>"> <ul id="sublist-<?php p($item['id']); ?>">
<?php <?php
foreach ($item['sublist'] as $item) { foreach ($item['sublist'] as $item) {
@ -104,10 +109,10 @@ function NavigationListElements($item, $l, $pinned) {
* @return void * @return void
*/ */
function NavigationElementMenu($item) { function NavigationElementMenu($item) {
if ($item['menubuttons'] === 'true') { if (isset($item['menubuttons']) && $item['menubuttons'] === 'true') {
?> ?>
<div id="dotmenu-<?php p($item['id']); ?>" <div id="dotmenu-<?php p($item['id']); ?>"
class="app-navigation-entry-utils" <?php if ($item['enableMenuButton'] === 0) { ?> style="display: none"<?php } ?>> class="app-navigation-entry-utils" <?php if (isset($item['enableMenuButton']) && $item['enableMenuButton'] === 0) { ?> style="display: none"<?php } ?>>
<ul> <ul>
<li class="app-navigation-entry-utils-menu-button svg"> <li class="app-navigation-entry-utils-menu-button svg">
<button id="dotmenu-button-<?php p($item['id']) ?>"></button> <button id="dotmenu-button-<?php p($item['id']) ?>"></button>

View File

@ -50,56 +50,54 @@ $eventDispatcher->addListener(
$config = \OC::$server->getConfig(); $config = \OC::$server->getConfig();
$shareManager = \OC::$server->getShareManager(); $shareManager = \OC::$server->getShareManager();
$userSession = \OC::$server->getUserSession(); $userSession = \OC::$server->getUserSession();
$l = \OC::$server->getL10N('files_sharing');
if ($config->getAppValue('core', 'shareapi_enabled', 'yes') === 'yes') { if ($config->getAppValue('core', 'shareapi_enabled', 'yes') === 'yes') {
\OCA\Files\App::getNavigationManager()->add(function () {
$l = \OC::$server->getL10N('files_sharing'); $sharingSublistArray = [];
return [
'id' => 'sharingin', array_push($sharingSublistArray, [
'appname' => 'files_sharing', 'id' => 'sharingin',
'script' => 'list.php', 'appname' => 'files_sharing',
'order' => 15, 'script' => 'list.php',
'name' => $l->t('Shared with you'), 'order' => 15,
]; 'name' => $l->t('Shared with you'),
}); ]);
if (\OCP\Util::isSharingDisabledForUser() === false) { if (\OCP\Util::isSharingDisabledForUser() === false) {
\OCA\Files\App::getNavigationManager()->add(function () { array_push($sharingSublistArray, [
$l = \OC::$server->getL10N('files_sharing'); 'id' => 'sharingout',
return [ 'appname' => 'files_sharing',
'id' => 'sharingout', 'script' => 'list.php',
'appname' => 'files_sharing', 'order' => 16,
'script' => 'list.php', 'name' => $l->t('Shared with others'),
'order' => 16, ]);
'name' => $l->t('Shared with others'),
];
});
// Check if sharing by link is enabled // Check if sharing by link is enabled
if ($config->getAppValue('core', 'shareapi_allow_links', 'yes') === 'yes') { if ($config->getAppValue('core', 'shareapi_allow_links', 'yes') === 'yes') {
\OCA\Files\App::getNavigationManager()->add(function () { array_push($sharingSublistArray, [
$l = \OC::$server->getL10N('files_sharing'); 'id' => 'sharinglinks',
return [ 'appname' => 'files_sharing',
'id' => 'sharinglinks', 'script' => 'list.php',
'appname' => 'files_sharing', 'order' => 17,
'script' => 'list.php', 'name' => $l->t('Shared by link'),
'order' => 17, ]);
'name' => $l->t('Shared by link'),
];
});
} }
} }
\OCA\Files\App::getNavigationManager()->add(function () { // show_Quick_Access stored as string
$l = \OC::$server->getL10N('files_sharing'); $defaultExpandedState = $config->getUserValue($userSession->getUser()->getUID(), 'files', 'show_sharing_menu', '0') === '1';
return [
'id' => 'shareoverview', \OCA\Files\App::getNavigationManager()->add([
'appname' => 'files_sharing', 'id' => 'shareoverview',
'script' => 'list.php', 'appname' => 'files_sharing',
'order' => 18, 'script' => 'list.php',
'name' => $l->t('Share overview'), 'order' => 18,
]; 'name' => $l->t('Share overview'),
}); 'classes' => 'collapsible',
'sublist' => $sharingSublistArray,
'expandedState' => 'show_sharing_menu'
]);
\OCA\Files\App::getNavigationManager()->add(function () { \OCA\Files\App::getNavigationManager()->add(function () {

View File

@ -100,7 +100,7 @@ class NavigationManager implements INavigationManager {
if(!isset($entry['type'])) { if(!isset($entry['type'])) {
$entry['type'] = 'link'; $entry['type'] = 'link';
} }
$this->entries[] = $entry; $this->entries[$entry['id']] = $entry;
} }
/** /**
@ -133,7 +133,7 @@ class NavigationManager implements INavigationManager {
* @return array * @return array
*/ */
private function proceedNavigation(array $list): array { private function proceedNavigation(array $list): array {
usort($list, function($a, $b) { uasort($list, function($a, $b) {
if (isset($a['order']) && isset($b['order'])) { if (isset($a['order']) && isset($b['order'])) {
return ($a['order'] < $b['order']) ? -1 : 1; return ($a['order'] < $b['order']) ? -1 : 1;
} else if (isset($a['order']) || isset($b['order'])) { } else if (isset($a['order']) || isset($b['order'])) {