Änderungen von Dokument Document Tree Macros

Zuletzt geändert von Daniel Herrmann am 2026/03/08 12:45

Von Version 1.1 Icon
bearbeitet von admin
am 2025/02/23 10:20
Änderungskommentar: Install extension [org.xwiki.platform:xwiki-platform-index-tree-macro/17.0.0]
Auf Version Icon 4.1 Icon
bearbeitet von Daniel Herrmann
am 2025/12/16 11:13
Änderungskommentar: Install extension [org.xwiki.platform:xwiki-platform-index-tree-macro/17.10.0]

Zusammenfassung

Details

Icon Seiteneigenschaften
Dokument-Autor
... ... @@ -1,1 +1,1 @@
1 -XWiki.admin
1 +XWiki.dherrman
Inhalt
... ... @@ -152,6 +152,8 @@
152 152   #set ($limit = $mathtool.max($numbertool.toNumber($request.limit).intValue(), 1))
153 153   #if ("$!limit" == '')
154 154   #set ($limit = 15)
155 + #else
156 + #validateQueryLimit($limit)
155 155   #end
156 156   #if ($nodeId == '#' && $docTreeConfig.showRoot)
157 157   #maybeAddNode($actualNodeId $children)
... ... @@ -205,6 +205,7 @@
205 205  
206 206  #macro (maybeAddFarmNode $nodeReference $siblings)
207 207   #set ($farmHomeReference = $services.model.resolveDocument('', 'default'))
210 + #set ($isOpened = $docTreeConfig.expandToLevel > 0)
208 208   #set ($discard = $siblings.add({
209 209   'id': 'farm:*',
210 210   'text': 'Farm',
... ... @@ -214,6 +214,9 @@
214 214   'type': 'farm',
215 215   'validChildren': ['wiki', 'pagination']
216 216   },
220 + 'state': {
221 + 'opened': $isOpened
222 + },
217 217   'a_attr': {
218 218   'href': $xwiki.getURL($farmHomeReference)
219 219   }
... ... @@ -242,6 +242,7 @@
242 242   #else
243 243   #set ($label = $wiki.id)
244 244   #end
251 + #set ($isOpened = $docTreeConfig.expandToLevel > 0)
245 245   #set ($discard = $siblings.add({
246 246   'id': "wiki:$wiki.id",
247 247   'text': $label,
... ... @@ -253,6 +253,9 @@
253 253   'validChildren': ['space', 'document', 'pagination'],
254 254   'canDelete': $canDeleteWiki
255 255   },
263 + 'state': {
264 + 'opened': $isOpened
265 + },
256 256   'a_attr': {
257 257   'href': $xwiki.getURL($wiki.mainPageReference)
258 258   }
... ... @@ -278,6 +278,7 @@
278 278  
279 279  #macro (addSpaceNode $spaceReference $siblings)
280 280   #set ($spaceId = $services.model.serialize($spaceReference, 'default'))
291 + #set ($spaceNodeId = "space:$spaceId")
281 281   #set ($hasSpaceAdmin = $services.security.authorization.hasAccess('admin', $spaceReference))
282 282   #set ($canViewSpace = $services.security.authorization.hasAccess('view', $spaceReference))
283 283   #if ($docTreeConfig.showTerminalDocuments)
... ... @@ -285,10 +285,21 @@
285 285   #set ($hasChildren = true)
286 286   #else
287 287   ## We display only the nested spaces. This space might contain only documents.
288 - #set ($hasChildren = $tree.getChildCount("space:$spaceId") > 0)
299 + #set ($hasChildren = $tree.getChildCount($spaceNodeId) > 0)
289 289   #end
301 + #set ($isOpened = false)
302 + #if ("$!docTreeConfig.expandToLevel" != '')
303 + #set ($rootNode = "wiki:$services.wiki.currentWikiId")
304 + #if ("$!docTreeConfig.root" != '')
305 + #set ($rootNode = "wiki:$services.wiki.currentWikiId")
306 + #else
307 + #set ($rootNode = $docTreeConfig.root)
308 + #end
309 + #set ($rootDistance = $tree.getPath($spaceNodeId).size())
310 + #set ($isOpened = ($rootDistance != -1 && $docTreeConfig.expandToLevel >= $rootDistance))
311 + #end
290 290   #set ($discard = $siblings.add({
291 - 'id': "space:$spaceId",
313 + 'id': $spaceNodeId,
292 292   'text': $spaceReference.name,
293 293   'icon': 'fa fa-folder-o',
294 294   'iconOpened': 'fa fa-folder-open-o',
... ... @@ -306,6 +306,9 @@
306 306   'createDocumentURL': $xwiki.getURL($spaceReference, 'create', $NULL),
307 307   'deleteURL': $xwiki.getURL($spaceReference, 'deletespace', $NULL)
308 308   },
331 + 'state': {
332 + 'opened': $isOpened
333 + },
309 309   'a_attr': {
310 310   'href': $xwiki.getURL($spaceReference)
311 311   }
... ... @@ -331,6 +331,7 @@
331 331  
332 332  #macro (addDocumentNode $documentReference $siblings)
333 333   #set ($documentId = $services.model.serialize($documentReference, 'default'))
359 + #set ($docNodeId = "document:$documentId")
334 334   #set ($label = $documentReference.name)
335 335   #if (!$docTreeConfig.showSpaces &&
336 336   $documentReference.name == $services.model.getEntityReference('DOCUMENT', 'default').name)
... ... @@ -347,9 +347,11 @@
347 347   #set ($label = $plainTitle)
348 348   #end
349 349   #end
350 - #set ($hasChildren = $tree.getChildCount("document:$documentId") > 0)
376 + #set ($hasChildren = $tree.getChildCount($docNodeId) > 0)
377 + #set ($isOpened = false)
378 + #computeIsOpened($docNodeId $isOpened)
351 351   #set ($discard = $siblings.add({
352 - 'id': "document:$documentId",
380 + 'id': $docNodeId,
353 353   'text': $label,
354 354   'icon': 'fa fa-file-o',
355 355   'children': $hasChildren,
... ... @@ -364,6 +364,9 @@
364 364   'canCopy': $canViewDoc,
365 365   'createDocumentURL': $xwiki.getURL($documentReference, 'create', $NULL)
366 366   },
395 + 'state': {
396 + 'opened': $isOpened
397 + },
367 367   'a_attr': {
368 368   'href': $xwiki.getURL($documentReference)
369 369   }
... ... @@ -408,9 +408,27 @@
408 408   #end
409 409  #end
410 410  
442 +#macro (computeIsOpened $docNodeId $result)
443 + #set ($isOpened = false)
444 + #if ("$!docTreeConfig.expandToLevel" != '')
445 + #set ($rootNode = "wiki:$services.wiki.currentWikiId")
446 + #if ("$!docTreeConfig.root" != '')
447 + #set ($rootNode = "wiki:$services.wiki.currentWikiId")
448 + #else
449 + #set ($rootNode = $docTreeConfig.root)
450 + #end
451 + #set ($rootDistance = $tree.getPath($docNodeId).size())
452 + #set ($isOpened = ($rootDistance != -1 && $docTreeConfig.expandToLevel >= $rootDistance))
453 + #end
454 + #setVariable("$result" $isOpened)
455 +#end
456 +
411 411  #macro (addTranslationsNode $documentReference $siblings)
412 - #set ($discard = $children.add({
413 - 'id': "translations:${documentReference}",
458 + #set ($isOpened = false)
459 + #set ($docNodeId = "translations:${documentReference}")
460 + #computeIsOpened($docNodeId $isOpened)
461 + #set ($discard = $siblings.add({
462 + 'id': $docNodeId,
414 414   'text': 'Translations',
415 415   'icon': 'fa fa-language',
416 416   'children': true,
... ... @@ -418,6 +418,9 @@
418 418   'type': 'translations',
419 419   'validChildren': ['translation'],
420 420   'canDelete': $services.security.authorization.hasAccess('delete', $documentReference)
470 + },
471 + 'state': {
472 + 'opened': $isOpened
421 421   }
422 422   }))
423 423  #end
... ... @@ -434,8 +434,11 @@
434 434  
435 435  #macro (addTranslationNode $translationReference $siblings)
436 436   #set ($currentLocale = $services.localization.currentLocale)
489 + #set ($isOpened = false)
490 + #set ($docNodeId = "translation:$services.model.serialize($translationReference, 'default')_$translationReference.locale")
491 + #computeIsOpened($docNodeId $isOpened)
437 437   #set ($discard = $siblings.add({
438 - 'id': "translation:$services.model.serialize($translationReference, 'default')_$translationReference.locale",
493 + 'id': $docNodeId,
439 439   'text': $translationReference.locale.getDisplayName($currentLocale),
440 440   'icon': 'fa fa-file-text-o',
441 441   'children': false,
... ... @@ -446,6 +446,9 @@
446 446   },
447 447   'a_attr': {
448 448   'href': $xwiki.getURL($translationReference)
504 + },
505 + 'state': {
506 + 'opened': $isOpened
449 449   }
450 450   }))
451 451  #end
... ... @@ -462,8 +462,11 @@
462 462  #end
463 463  
464 464  #macro (addAttachmentsNode $documentReference $siblings)
523 + #set ($isOpened = false)
524 + #set ($docNodeId = "attachments:${documentReference}")
525 + #computeIsOpened($docNodeId $isOpened)
465 465   #set ($discard = $siblings.add({
466 - 'id': "attachments:${documentReference}",
527 + 'id': $docNodeId,
467 467   'text': 'Attachments',
468 468   'icon': 'fa fa-paperclip',
469 469   'children': true,
... ... @@ -475,6 +475,9 @@
475 475   },
476 476   'a_attr': {
477 477   'href': $xwiki.getURL($documentReference, 'view', 'viewer=attachments')
539 + },
540 + 'state': {
541 + 'opened': $isOpened
478 478   }
479 479   }))
480 480  #end
... ... @@ -494,8 +494,11 @@
494 494   #set ($attachmentId = $services.model.serialize($attachmentReference, 'default'))
495 495   #set ($canEditDoc = $services.security.authorization.hasAccess('edit', $attachmentReference.parent))
496 496   #getAttachmentIcon($attachment $icon)
561 + #set ($isOpened = false)
562 + #set ($docNodeId = "attachment:$attachmentId")
563 + #computeIsOpened($docNodeId $isOpened)
497 497   #set ($discard = $siblings.add({
498 - 'id': "attachment:$attachmentId",
565 + 'id': $docNodeId,
499 499   'text': $attachment.filename,
500 500   'icon': $icon,
501 501   'children': false,
... ... @@ -514,6 +514,9 @@
514 514   },
515 515   'a_attr': {
516 516   'href': $attachment.document.getAttachmentURL($attachment.filename)
584 + },
585 + 'state': {
586 + 'opened': $isOpened
517 517   }
518 518   }))
519 519  #end
... ... @@ -592,8 +592,11 @@
592 592  #end
593 593  
594 594  #macro (addClassPropertiesNode $documentReference $siblings)
595 - #set ($discard = $children.add({
596 - 'id': "classProperties:${documentReference}",
665 + #set ($isOpened = false)
666 + #set ($docNodeId = "classProperties:${documentReference}")
667 + #computeIsOpened($docNodeId $isOpened)
668 + #set ($discard = $siblings.add({
669 + 'id': $docNodeId,
597 597   'text': 'Class Properties',
598 598   'icon': 'fa fa-gears',
599 599   'children': true,
... ... @@ -601,6 +601,9 @@
601 601   'type': 'classProperties',
602 602   'validChildren': ['classProperty'],
603 603   'canDelete': $services.security.authorization.hasAccess('edit', $documentReference)
677 + },
678 + 'state': {
679 + 'opened': $isOpened
604 604   }
605 605   }))
606 606  #end
... ... @@ -633,8 +633,11 @@
633 633   #if (!$icon)
634 634   #set ($icon = 'gear')
635 635   #end
712 + #set ($isOpened = false)
713 + #set ($docNodeId = "classProperty:$classPropertyId")
714 + #computeIsOpened($docNodeId $isOpened)
636 636   #set ($discard = $siblings.add({
637 - 'id': "classProperty:$classPropertyId",
716 + 'id': $docNodeId,
638 638   'text': $property.name,
639 639   'icon': "fa fa-$icon",
640 640   'children': false,
... ... @@ -642,6 +642,9 @@
642 642   'id': $classPropertyId,
643 643   'type': 'classProperty',
644 644   'validChildren': []
724 + },
725 + 'state': {
726 + 'opened': $isOpened
645 645   }
646 646   }))
647 647  #end
... ... @@ -658,8 +658,11 @@
658 658  #end
659 659  
660 660  #macro (addObjectsNode $documentReference $siblings)
661 - #set ($discard = $children.add({
662 - 'id': "objects:${documentReference}",
743 + #set ($isOpened = false)
744 + #set ($docNodeId = "objects:${documentReference}")
745 + #computeIsOpened($docNodeId $isOpened)
746 + #set ($discard = $siblings.add({
747 + 'id': $docNodeId,
663 663   'text': 'Objects',
664 664   'icon': 'fa fa-cubes',
665 665   'children': true,
... ... @@ -667,6 +667,9 @@
667 667   'type': 'objects',
668 668   'validChildren': ['objectsOfType'],
669 669   'canDelete': $services.security.authorization.hasAccess('edit', $documentReference)
755 + },
756 + 'state': {
757 + 'opened': $isOpened
670 670   }
671 671   }))
672 672  #end
... ... @@ -677,8 +677,11 @@
677 677   #set ($documentReference = $services.model.resolveDocument($parts.get(0)))
678 678   #set ($classReference = $services.model.resolveDocument($parts.get(1)))
679 679   #if ($services.security.authorization.hasAccess('view', $documentReference))
680 - #set ($discard = $children.add({
681 - 'id': "objectsOfType:$documentReference/$classReference",
768 + #set ($isOpened = false)
769 + #set ($docNodeId = "objectsOfType:$documentReference/$classReference")
770 + #computeIsOpened($docNodeId $isOpened)
771 + #set ($discard = $siblings.add({
772 + 'id': $docNodeId,
682 682   'text': $services.model.serialize($classReference, 'local'),
683 683   'icon': 'fa fa-cubes',
684 684   'children': true,
... ... @@ -686,6 +686,9 @@
686 686   'type': 'objectsOfType',
687 687   'validChildren': ['object', 'pagination'],
688 688   'canDelete': $services.security.authorization.hasAccess('edit', $documentReference)
780 + },
781 + 'state': {
782 + 'opened': $isOpened
689 689   }
690 690   }))
691 691   #end
... ... @@ -712,8 +712,11 @@
712 712  
713 713  #macro (addObjectNode $object $objectReference $siblings)
714 714   #set ($objectId = $services.model.serialize($objectReference, 'default'))
715 - #set ($discard = $children.add({
716 - 'id': "object:$objectId",
809 + #set ($isOpened = false)
810 + #set ($docNodeId = "object:$objectId")
811 + #computeIsOpened($docNodeId $isOpened)
812 + #set ($discard = $siblings.add({
813 + 'id': $docNodeId,
717 717   'text': "[$object.number]",
718 718   'icon': 'fa fa-cube',
719 719   'children': true,
... ... @@ -722,6 +722,9 @@
722 722   'type': 'object',
723 723   'validChildren': ['objectProperty'],
724 724   'canDelete': $services.security.authorization.hasAccess('edit', $objectReference.parent)
822 + },
823 + 'state': {
824 + 'opened': $isOpened
725 725   }
726 726   }))
727 727  #end
... ... @@ -746,8 +746,11 @@
746 746   #end
747 747   #set ($objectPropertyReference = $services.model.createEntityReference($property.name, 'OBJECT_PROPERTY', $objRef))
748 748   #set ($objectPropertyId = $services.model.serialize($objectPropertyReference, 'default'))
849 + #set ($isOpened = false)
850 + #set ($docNodeId = "objectProperty:$objectPropertyId")
851 + #computeIsOpened($docNodeId $isOpened)
749 749   #set ($discard = $siblings.add({
750 - 'id': "objectProperty:$objectPropertyId",
853 + 'id': $docNodeId,
751 751   'text': $property.name,
752 752   'icon': "fa fa-$icon",
753 753   'children': false,
... ... @@ -755,6 +755,9 @@
755 755   'id': $objectPropertyId,
756 756   'type': 'objectProperty',
757 757   'validChildren': []
861 + },
862 + 'state': {
863 + 'opened': $isOpened
758 758   }
759 759   }))
760 760  #end