Signed-off-by: fnuesse <felix.nuesse@t-online.de> Added icon-change on drag Signed-off-by: fnuesse <felix.nuesse@t-online.de> Fixed Navbar-closing in app when favorites-list is toggled on mobile Signed-off-by: fnuesse <felix.nuesse@t-online.de> Refactored Code Signed-off-by: fnuesse <felix.nuesse@t-online.de> Changed to alphabetical sorting Signed-off-by: fnuesse <felix.nuesse@t-online.de> Fixed deletion of folder with identical names Signed-off-by: fnuesse <felix.nuesse@t-online.de> Removed ability to add files to the quickaccess Signed-off-by: fnuesse <felix.nuesse@t-online.de> Fixed wrong path-generation when added from favorites-star Signed-off-by: fnuesse <felix.nuesse@t-online.de> Removed Element from navbar when favorite-star in detailview is toggled off Signed-off-by: fnuesse <felix.nuesse@t-online.de> Changed Quota-Text to prevent boundarybreaks Reverted last committags/v14.0.0beta1
@@ -131,6 +131,11 @@ $application->registerRoutes( | |||
'url' => '/api/v1/quickaccess/get/CustomSortingOrder', | |||
'verb' => 'GET', | |||
], | |||
[ | |||
'name' => 'API#getNodeType', | |||
'url' => '/api/v1/quickaccess/get/NodeType', | |||
'verb' => 'GET', | |||
], | |||
] | |||
] | |||
); |
@@ -49,7 +49,7 @@ | |||
* alphabet | |||
* | |||
*/ | |||
$sortingStrategy: 'customorder', | |||
$sortingStrategy: 'alphabet', | |||
/** | |||
* Key for the quick-acces-list | |||
@@ -66,8 +66,12 @@ | |||
this._activeItem = null; | |||
this.$currentContent = null; | |||
this._setupEvents(); | |||
this.setInitialQuickaccessSettings(); | |||
var scope=this; | |||
$.get(OC.generateUrl("/apps/files/api/v1/quickaccess/get/SortingStrategy"), function (data, status) { | |||
scope.$sortingStrategy=data; | |||
scope.setInitialQuickaccessSettings(); | |||
}); | |||
}, | |||
@@ -162,7 +166,7 @@ | |||
* Event handler for when dragging an item | |||
*/ | |||
_setOnDrag: function () { | |||
var scope=this; | |||
var scope = this; | |||
var element = $("#sublist-favorites"); | |||
$(function () { | |||
if (document.getElementById(scope.$quickAccessListKey.toString()).hasAttribute("draggable")) { | |||
@@ -172,30 +176,54 @@ | |||
scroll: false, | |||
zIndex: 0, | |||
opacity: 0.5, | |||
delay: 150, | |||
tolerance: "pointer", | |||
start:function(event, ui){ | |||
//revert: 0.05, | |||
//delay: 150, | |||
start: function (event, ui) { | |||
//Fix for offset | |||
ui.helper[0].style.left ='0px'; | |||
ui.helper[0].style.left = '0px'; | |||
//Change Icon while dragging | |||
var list = document.getElementById(scope.$quickAccessListKey).getElementsByTagName('li'); | |||
for (var j = 0; j < list.length; j++) { | |||
if (!(typeof list[j].getElementsByTagName('a')[0] === 'undefined')) { | |||
list[j].getElementsByTagName('a')[0].classList.remove("nav-icon-files"); | |||
list[j].getElementsByTagName('a')[0].classList.add('icon-menu'); | |||
} | |||
} | |||
}, | |||
stop: function( event, ui ) { | |||
stop: function (event, ui) { | |||
//Clean up offset | |||
ui.item.removeAttr("style"); | |||
//Change Icon back after dragging | |||
var list = document.getElementById(scope.$quickAccessListKey.toString()).getElementsByTagName('li'); | |||
for (var j = 0; j < list.length; j++) { | |||
if (!(typeof list[j].getElementsByTagName('a')[0] === 'undefined')) { | |||
list[j].getElementsByTagName('a')[0].classList.add("nav-icon-files"); | |||
list[j].getElementsByTagName('a')[0].classList.remove('icon-menu'); | |||
} | |||
} | |||
}, | |||
update: function (event, ui) { | |||
var list = document.getElementById(scope.$quickAccessListKey.toString()).getElementsByTagName('li'); | |||
var string=[]; | |||
var string = []; | |||
for (var j = 0; j < list.length; j++) { | |||
var Object = {id:j, name:scope.getCompareValue(list,j,'alphabet') }; | |||
var Object = { | |||
id: j, | |||
name: scope.getCompareValue(list, j, 'alphabet') | |||
}; | |||
string.push(Object); | |||
} | |||
var resultorder=JSON.stringify(string); | |||
$.get(OC.generateUrl("/apps/files/api/v1/quickaccess/set/CustomSortingOrder"),{ | |||
order: resultorder}, function (data, status) {}); | |||
var resultorder = JSON.stringify(string); | |||
$.get(OC.generateUrl("/apps/files/api/v1/quickaccess/set/CustomSortingOrder"), { | |||
order: resultorder | |||
}, function (data, status) { | |||
}); | |||
} | |||
}); | |||
}else{ | |||
if(scope.$sortingStrategy === 'customorder'){ | |||
} else { | |||
if (scope.$sortingStrategy === 'customorder') { | |||
scope.$sortingStrategy = 'datemodified'; | |||
} | |||
} | |||
@@ -220,13 +248,12 @@ | |||
// 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; | |||
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) { | |||
}); | |||
@@ -269,7 +296,6 @@ | |||
scope.reverse(list); | |||
}); | |||
} else if (this.$sortingStrategy === 'alphabet') { | |||
sort = true; | |||
} else if (this.$sortingStrategy === 'date') { | |||
@@ -277,7 +303,7 @@ | |||
} else if (this.$sortingStrategy === 'customorder') { | |||
var scope = this; | |||
$.get(OC.generateUrl("/apps/files/api/v1/quickaccess/get/CustomSortingOrder"), function (data, status) { | |||
var ordering=JSON.parse(data); | |||
var ordering = JSON.parse(data); | |||
for (var i = 0; i < ordering.length; i++) { | |||
for (var j = 0; j < list.length; j++) { | |||
if (scope.getCompareValue(list, j, 'alphabet').toLowerCase() === ordering[i].name.toLowerCase()) { | |||
@@ -287,7 +313,6 @@ | |||
} | |||
scope.QuickSort(list, 0, list.length - 1); | |||
}); | |||
sort = false; | |||
} | |||
@@ -357,7 +382,7 @@ | |||
return nodes[int].getAttribute('folderPosition').toLowerCase(); | |||
} else if (strategy === 'datemodified') { | |||
return nodes[int].getAttribute('mtime'); | |||
}else if (strategy === 'customorder') { | |||
} else if (strategy === 'customorder') { | |||
return nodes[int].getAttribute('folderPosition'); | |||
} | |||
return nodes[int].getElementsByTagName('a')[0].innerHTML.toLowerCase(); |
@@ -73,10 +73,14 @@ | |||
var collapsibleButtonId = 'button-collapse-favorites'; | |||
var listULElements = document.getElementById(quickAccessList); | |||
var listLIElements = listULElements.getElementsByTagName('li'); | |||
var appName = appfolder.substring(appfolder.lastIndexOf("/") + 1, appfolder.length); | |||
var apppath=appfolder; | |||
if(appfolder.startsWith("//")){ | |||
apppath=appfolder.substring(1, appfolder.length); | |||
} | |||
for (var i = 0; i <= listLIElements.length - 1; i++) { | |||
if (appName === listLIElements[i].getElementsByTagName('a')[0].innerHTML) { | |||
if (listLIElements[i].getElementsByTagName('a')[0].href.endsWith("dir=" + apppath)) { | |||
listLIElements[i].remove(); | |||
} | |||
} | |||
@@ -100,29 +104,40 @@ | |||
var listLIElements = listULElements.getElementsByTagName('li'); | |||
var appName = appfolder.substring(appfolder.lastIndexOf("/") + 1, appfolder.length); | |||
var apppath=appfolder; | |||
if(appfolder.startsWith("//")){ | |||
apppath=appfolder.substring(1, appfolder.length); | |||
} | |||
var url=OC.generateUrl('/apps/files/?dir=')+apppath; | |||
var innerTagA = document.createElement('A'); | |||
innerTagA.setAttribute("href", OC.generateUrl('/apps/files/?dir=') + appfolder); | |||
innerTagA.setAttribute("href", url); | |||
innerTagA.setAttribute("class", "nav-icon-files svg"); | |||
innerTagA.innerHTML = appName; | |||
var length = listLIElements.length + 1; | |||
var innerTagLI = document.createElement('li'); | |||
innerTagLI.setAttribute("data-id", OC.generateUrl('/apps/files/?dir=') + appfolder); | |||
innerTagLI.setAttribute("data-id", url); | |||
innerTagLI.setAttribute("class", "nav-" + appName); | |||
innerTagLI.setAttribute("folderpos", length.toString()); | |||
innerTagLI.appendChild(innerTagA); | |||
$.get(OC.generateUrl("/apps/files/api/v1/quickaccess/get/NodeType"),{folderpath: apppath}, function (data, status) { | |||
if (data === "dir") { | |||
if (listULElements.childElementCount <= 0) { | |||
listULElements.appendChild(innerTagLI); | |||
var collapsibleButton = document.getElementById(collapsibleButtonId); | |||
collapsibleButton.style.display = ''; | |||
if (listULElements.childElementCount <= 0) { | |||
listULElements.appendChild(innerTagLI); | |||
var collapsibleButton = document.getElementById(collapsibleButtonId); | |||
collapsibleButton.style.display = ''; | |||
$("#button-collapse-parent-favorites").addClass('collapsible'); | |||
} else { | |||
listLIElements[listLIElements.length - 1].after(innerTagLI); | |||
} | |||
$("#button-collapse-parent-favorites").addClass('collapsible'); | |||
} else { | |||
listLIElements[listLIElements.length - 1].after(innerTagLI); | |||
} | |||
} | |||
} | |||
); | |||
} | |||
OCA.Files = OCA.Files || {}; | |||
@@ -327,6 +342,7 @@ | |||
}); | |||
} | |||
}; | |||
})(OCA); | |||
}) | |||
(OCA); | |||
OC.Plugins.register('OCA.Files.FileList', OCA.Files.TagsPlugin); |
@@ -215,6 +215,7 @@ class ApiController extends Controller { | |||
$favorites[$i]['id'] = $node->getId(); | |||
$favorites[$i]['name'] = $node->getName(); | |||
$favorites[$i]['path'] = $node->getInternalPath(); | |||
$favorites[$i]['mtime'] = $node->getMTime(); | |||
$i++; | |||
} | |||
@@ -336,7 +337,7 @@ class ApiController extends Controller { | |||
* @return String | |||
*/ | |||
public function getSortingStrategy() { | |||
return $this->config->getUserValue($this->userSession->getUser()->getUID(), 'files', 'quickaccess_sorting_strategy', 'date'); | |||
return $this->config->getUserValue($this->userSession->getUser()->getUID(), 'files', 'quickaccess_sorting_strategy', 'alphabet'); | |||
} | |||
/** | |||
@@ -411,11 +412,24 @@ class ApiController extends Controller { | |||
* | |||
* @NoAdminRequired | |||
* | |||
* @param String | |||
* @return String | |||
*/ | |||
public function getSortingOrder() { | |||
return $this->config->getUserValue($this->userSession->getUser()->getUID(), 'files', 'quickaccess_custom_sorting_order', ""); | |||
} | |||
/** | |||
* Get sorting-order for custom sorting | |||
* | |||
* @NoAdminRequired | |||
* | |||
* @param String | |||
* @return String | |||
*/ | |||
public function getNodeType($folderpath) { | |||
$node = $this->userFolder->get($folderpath); | |||
return $node->getType(); | |||
} | |||
} |
@@ -207,6 +207,13 @@ class ViewController extends Controller { | |||
$defaultExpandedState = 'false'; | |||
} | |||
$quickAccessDraggable = 'false'; | |||
//See Javascript navigation.js for possible sorting strategies | |||
if($this->config->getUserValue($this->userSession->getUser()->getUID(), 'files', 'quickaccess_sorting_strategy', 'alphabet')=='customorder'){ | |||
$quickAccessDraggable = 'true'; | |||
} | |||
\OCA\Files\App::getNavigationManager()->add( | |||
[ | |||
'id' => 'favorites', | |||
@@ -216,7 +223,7 @@ class ViewController extends Controller { | |||
'order' => 5, | |||
'name' => $this->l10n->t('Favorites'), | |||
'sublist' => $favoritesSublistArray, | |||
'draggableSublist' => 'true', | |||
'draggableSublist' => $quickAccessDraggable, | |||
'defaultExpandedState' => $defaultExpandedState, | |||
'enableMenuButton' => 0, | |||
] |
@@ -80,7 +80,7 @@ function NavigationListElements($item, $l, $pinned) { | |||
if (isset($item['sublist'])) { | |||
?> | |||
<button id="button-collapse-<?php p($item['id']); ?>" | |||
class="collapse" <?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']); ?>" <?php if ($item['draggableSublist'] === 'true') { ?> draggable="true" style="resize: none;"<?php } ?>> | |||
<?php | |||
foreach ($item['sublist'] as $item) { | |||
@@ -121,4 +121,4 @@ function NavigationElementMenu($item) { | |||
</ul> | |||
</div> | |||
<?php } | |||
} | |||
} |