update jqtree, add right click for downloading children

This commit is contained in:
Uwe Steinmann 2019-01-11 13:16:08 +01:00
parent d522ced2e1
commit 476cac3967
4 changed files with 62 additions and 2443 deletions

View File

@ -847,7 +847,7 @@ $(document).ready(function() { /* {{{ */
attr_rel = $(e.srcElement).attr('rel'); attr_rel = $(e.srcElement).attr('rel');
if(typeof attr_rel == 'undefined') if(typeof attr_rel == 'undefined')
return; return;
$(e.target).parent().css('border', '2px dashed #0B85A1'); $(e.target).parent().css('border', '1px dashed #0B85A1');
e.stopPropagation(); e.stopPropagation();
e.preventDefault(); e.preventDefault();
}); });
@ -869,7 +869,7 @@ $(document).ready(function() { /* {{{ */
attr_rel = $(e.target).attr('rel'); attr_rel = $(e.target).attr('rel');
if(typeof attr_rel == 'undefined') if(typeof attr_rel == 'undefined')
return; return;
$(e.target).parent().css('border', '0px solid white'); $(e.target).parent().css('border', '1px solid white');
target_type = attr_rel.split("_")[0]; target_type = attr_rel.split("_")[0];
target_id = attr_rel.split("_")[1]; target_id = attr_rel.split("_")[1];
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text")); var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));

File diff suppressed because one or more lines are too long

View File

@ -1572,18 +1572,19 @@ $(document).ready(function() {
* and documents shown in the tree * and documents shown in the tree
* @param boolean $showdocs set to true if tree shall contain documents * @param boolean $showdocs set to true if tree shall contain documents
* as well. * as well.
* @param integer $expandtree level to which the tree shall be opened
*/ */
function printNewTreeNavigationJs($folderid=0, $accessmode=M_READ, $showdocs=0, $formid='form1', $expandtree=0, $orderby='') { /* {{{ */ function printNewTreeNavigationJs($folderid=0, $accessmode=M_READ, $showdocs=0, $formid='form1', $expandtree=0, $orderby='') { /* {{{ */
function jqtree($path, $folder, $user, $accessmode, $showdocs=1, $expandtree=0, $orderby='') { function jqtree($path, $folder, $user, $accessmode, $showdocs=1, $expandtree=0, $orderby='', $level=0) {
if($path || $expandtree) { if($path || $expandtree>=$level) {
if($path) if($path)
$pathfolder = array_shift($path); $pathfolder = array_shift($path);
$subfolders = $folder->getSubFolders($orderby); $subfolders = $folder->getSubFolders($orderby);
$subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $user, $accessmode); $subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $user, $accessmode);
$children = array(); $children = array();
foreach($subfolders as $subfolder) { foreach($subfolders as $subfolder) {
$node = array('label'=>$subfolder->getName(), 'id'=>$subfolder->getID(), 'load_on_demand'=>($subfolder->hasSubFolders() || ($subfolder->hasDocuments() && $showdocs)) ? true : false, 'is_folder'=>true); $node = array('label'=>$subfolder->getName(), 'id'=>$subfolder->getID(), 'load_on_demand'=>($subfolder->hasSubFolders() || ($subfolder->hasDocuments() && $showdocs)) ? false : false, 'is_folder'=>true);
if($expandtree || $pathfolder->getID() == $subfolder->getID()) { if($expandtree>=$level || $pathfolder->getID() == $subfolder->getID()) {
if($showdocs) { if($showdocs) {
$documents = $folder->getDocuments($orderby); $documents = $folder->getDocuments($orderby);
$documents = SeedDMS_Core_DMS::filterAccess($documents, $user, $accessmode); $documents = SeedDMS_Core_DMS::filterAccess($documents, $user, $accessmode);
@ -1592,7 +1593,7 @@ $(document).ready(function() {
$children[] = $node2; $children[] = $node2;
} }
} }
$node['children'] = jqtree($path, $subfolder, $user, $accessmode, $showdocs, $expandtree, $orderby); $node['children'] = jqtree($path, $subfolder, $user, $accessmode, $showdocs, $expandtree, $orderby, $level+1);
} }
$children[] = $node; $children[] = $node;
} }
@ -1602,7 +1603,7 @@ $(document).ready(function() {
$subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $user, $accessmode); $subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $user, $accessmode);
$children = array(); $children = array();
foreach($subfolders as $subfolder) { foreach($subfolders as $subfolder) {
$node = array('label'=>$subfolder->getName(), 'id'=>$subfolder->getID(), 'load_on_demand'=>($subfolder->hasSubFolders() || ($subfolder->hasDocuments() && $showdocs)) ? true : false, 'is_folder'=>true); $node = array('label'=>$subfolder->getName(), 'id'=>$subfolder->getID(), 'load_on_demand'=>($subfolder->hasSubFolders() || ($subfolder->hasDocuments() && $showdocs)) ? false : false, 'is_folder'=>true);
$children[] = $node; $children[] = $node;
} }
return $children; return $children;
@ -1613,13 +1614,14 @@ $(document).ready(function() {
if($folderid) { if($folderid) {
$folder = $this->params['dms']->getFolder($folderid); $folder = $this->params['dms']->getFolder($folderid);
$path = $folder->getPath(); $path = $folder->getPath();
/* Get the first folder (root folder) of path */
$folder = array_shift($path); $folder = array_shift($path);
$node = array('label'=>$folder->getName(), 'id'=>$folder->getID(), 'load_on_demand'=>true, 'is_folder'=>true); $node = array('label'=>$folder->getName(), 'id'=>$folder->getID(), 'load_on_demand'=>false, 'is_folder'=>true);
if(!$folder->hasSubFolders()) { if(!$folder->hasSubFolders()) {
$node['load_on_demand'] = false; $node['load_on_demand'] = false;
$node['children'] = array(); $node['children'] = array();
} else { } else {
$node['children'] = jqtree($path, $folder, $this->params['user'], $accessmode, $showdocs, $expandtree, $orderby); $node['children'] = jqtree($path, $folder, $this->params['user'], $accessmode, $showdocs, $expandtree, $orderby, 0);
if($showdocs) { if($showdocs) {
$documents = $folder->getDocuments($orderby); $documents = $folder->getDocuments($orderby);
$documents = SeedDMS_Core_DMS::filterAccess($documents, $this->params['user'], $accessmode); $documents = SeedDMS_Core_DMS::filterAccess($documents, $this->params['user'], $accessmode);
@ -1639,18 +1641,18 @@ $(document).ready(function() {
} else { } else {
$root = $this->params['dms']->getFolder($this->params['rootfolderid']); $root = $this->params['dms']->getFolder($this->params['rootfolderid']);
$tree = array(array('label'=>$root->getName(), 'id'=>$root->getID(), 'load_on_demand'=>true, 'is_folder'=>true)); $tree = array(array('label'=>$root->getName(), 'id'=>$root->getID(), 'load_on_demand'=>false, 'is_folder'=>true));
} }
?> ?>
var data = <?php echo json_encode($tree); ?>; var data = <?php echo json_encode($tree); ?>;
$(function() { $(function() {
$('#jqtree<?php echo $formid ?>').tree({ $('#jqtree<?php echo $formid ?>').tree({
saveState: true, // saveState: true,
data: data, data: data,
saveState: 'jqtree<?php echo $formid; ?>', saveState: 'jqtree<?php echo $formid; ?>',
openedIcon: '<i class="icon-minus-sign"></i>', openedIcon: $('<i class="icon-minus-sign"></i>'),
closedIcon: '<i class="icon-plus-sign"></i>', closedIcon: $('<i class="icon-plus-sign"></i>'),
_onCanSelectNode: function(node) { _onCanSelectNode: function(node) {
if(node.is_folder) { if(node.is_folder) {
folderSelected<?php echo $formid ?>(node.id, node.name); folderSelected<?php echo $formid ?>(node.id, node.name);
@ -1667,10 +1669,10 @@ $(function() {
$li.find('.jqtree-title').before('<i class="icon-file"></i> '); $li.find('.jqtree-title').before('<i class="icon-file"></i> ');
} }
}); });
// Unfold tree if folder is opened // Unfold node for currently selected folder
$('#jqtree<?php echo $formid ?>').tree('openNode', $('#jqtree<?php echo $formid ?>').tree('getNodeById', <?php echo $folderid ?>), false); $('#jqtree<?php echo $formid ?>').tree('openNode', $('#jqtree<?php echo $formid ?>').tree('getNodeById', <?php echo $folderid ?>), false);
$('#jqtree<?php echo $formid ?>').bind( $('#jqtree<?php echo $formid ?>').on(
'tree.click', 'tree.select',
function(event) { function(event) {
var node = event.node; var node = event.node;
$('#jqtree<?php echo $formid ?>').tree('openNode', node); $('#jqtree<?php echo $formid ?>').tree('openNode', node);
@ -1681,6 +1683,30 @@ $(function() {
documentSelected<?php echo $formid ?>(node.id, node.name); documentSelected<?php echo $formid ?>(node.id, node.name);
} }
); );
$('#jqtree<?php echo $formid ?>').on(
'tree.contextmenu',
function(event) {
// The clicked node is 'event.node'
var node = event.node;
if(typeof node.fetched == 'undefined') {
node.fetched = true;
$(this).tree('loadDataFromUrl', node);
}
$(this).tree('openNode', node);
}
);
$("#jqtree").on('dragenter', function (e) {
attr_rel = $(e.srcElement).attr('rel');
if(typeof attr_rel == 'undefined')
return;
target_type = attr_rel.split("_")[0];
target_id = attr_rel.split("_")[1];
var node = $(this).tree('getNodeById', parseInt(target_id));
if(typeof node.fetched == 'undefined') {
node.fetched = true;
$(this).tree('loadDataFromUrl', node, function() {$(this).tree('openNode', node);});
}
});
}); });
<?php <?php
} /* }}} */ } /* }}} */

View File

@ -279,7 +279,7 @@ $('#loadmore').click(function(e) {
* access expandFolderTree with $this->params because it can * access expandFolderTree with $this->params because it can
* be changed by preContent hook. * be changed by preContent hook.
*/ */
$this->printNewTreeNavigationHtml($folderid, M_READ, 0, '', $this->params['expandFolderTree'] == 2, $orderby); $this->printNewTreeNavigationHtml($folderid, M_READ, 0, '', $this->params['expandFolderTree'], $orderby);
$this->contentContainerEnd(); $this->contentContainerEnd();
} else { } else {
$this->contentHeading("<a href=\"../out/out.ViewFolder.php?folderid=". $folderid."&showtree=1\"><i class=\"icon-plus-sign\"></i></a>", true); $this->contentHeading("<a href=\"../out/out.ViewFolder.php?folderid=". $folderid."&showtree=1\"><i class=\"icon-plus-sign\"></i></a>", true);