Изменения документа Document Tree Macros

Редактировал(а) Андрей Ганьков 2026/01/23 10:50

От версии 6.1
отредактировано Андрей Ганьков
на 2025/07/06 04:57
Изменить комментарий: Install extension [org.xwiki.platform:xwiki-platform-index-tree-macro/17.5.0]
К версии 8.1
отредактировано Андрей Ганьков
на 2026/01/23 10:50
Изменить комментарий: Install extension [org.xwiki.platform:xwiki-platform-index-tree-macro/17.10.2]

Сводка

Подробности

Свойства страницы
Содержимое
... ... @@ -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)
... ... @@ -286,7 +286,7 @@
286 286  
287 287  #macro (addSpaceNode $spaceReference $siblings)
288 288   #set ($spaceId = $services.model.serialize($spaceReference, 'default'))
289 - #set ($nodeId = "space:$spaceId")
291 + #set ($spaceNodeId = "space:$spaceId")
290 290   #set ($hasSpaceAdmin = $services.security.authorization.hasAccess('admin', $spaceReference))
291 291   #set ($canViewSpace = $services.security.authorization.hasAccess('view', $spaceReference))
292 292   #if ($docTreeConfig.showTerminalDocuments)
... ... @@ -294,7 +294,7 @@
294 294   #set ($hasChildren = true)
295 295   #else
296 296   ## We display only the nested spaces. This space might contain only documents.
297 - #set ($hasChildren = $tree.getChildCount($nodeId) > 0)
299 + #set ($hasChildren = $tree.getChildCount($spaceNodeId) > 0)
298 298   #end
299 299   #set ($isOpened = false)
300 300   #if ("$!docTreeConfig.expandToLevel" != '')
... ... @@ -304,11 +304,11 @@
304 304   #else
305 305   #set ($rootNode = $docTreeConfig.root)
306 306   #end
307 - #set ($rootDistance = $tree.getPath($nodeId).size())
309 + #set ($rootDistance = $tree.getPath($spaceNodeId).size())
308 308   #set ($isOpened = ($rootDistance != -1 && $docTreeConfig.expandToLevel >= $rootDistance))
309 309   #end
310 310   #set ($discard = $siblings.add({
311 - 'id': $nodeId,
313 + 'id': $spaceNodeId,
312 312   'text': $spaceReference.name,
313 313   'icon': 'fa fa-folder-o',
314 314   'iconOpened': 'fa fa-folder-open-o',
... ... @@ -354,7 +354,7 @@
354 354  
355 355  #macro (addDocumentNode $documentReference $siblings)
356 356   #set ($documentId = $services.model.serialize($documentReference, 'default'))
357 - #set ($nodeId = "document:$documentId")
359 + #set ($docNodeId = "document:$documentId")
358 358   #set ($label = $documentReference.name)
359 359   #if (!$docTreeConfig.showSpaces &&
360 360   $documentReference.name == $services.model.getEntityReference('DOCUMENT', 'default').name)
... ... @@ -371,20 +371,11 @@
371 371   #set ($label = $plainTitle)
372 372   #end
373 373   #end
374 - #set ($hasChildren = $tree.getChildCount($nodeId) > 0)
376 + #set ($hasChildren = $tree.getChildCount($docNodeId) > 0)
375 375   #set ($isOpened = false)
376 - #if ("$!docTreeConfig.expandToLevel" != '')
377 - #set ($rootNode = "wiki:$services.wiki.currentWikiId")
378 - #if ("$!docTreeConfig.root" != '')
379 - #set ($rootNode = "wiki:$services.wiki.currentWikiId")
380 - #else
381 - #set ($rootNode = $docTreeConfig.root)
382 - #end
383 - #set ($rootDistance = $tree.getPath($nodeId).size())
384 - #set ($isOpened = ($rootDistance != -1 && $docTreeConfig.expandToLevel >= $rootDistance))
385 - #end
378 + #computeIsOpened($docNodeId $isOpened)
386 386   #set ($discard = $siblings.add({
387 - 'id': $nodeId,
380 + 'id': $docNodeId,
388 388   'text': $label,
389 389   'icon': 'fa fa-file-o',
390 390   'children': $hasChildren,
... ... @@ -446,9 +446,27 @@
446 446   #end
447 447  #end
448 448  
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 +
449 449  #macro (addTranslationsNode $documentReference $siblings)
450 - #set ($discard = $children.add({
451 - 'id': "translations:${documentReference}",
458 + #set ($isOpened = false)
459 + #set ($docNodeId = "translations:${documentReference}")
460 + #computeIsOpened($docNodeId $isOpened)
461 + #set ($discard = $siblings.add({
462 + 'id': $docNodeId,
452 452   'text': 'Translations',
453 453   'icon': 'fa fa-language',
454 454   'children': true,
... ... @@ -456,6 +456,9 @@
456 456   'type': 'translations',
457 457   'validChildren': ['translation'],
458 458   'canDelete': $services.security.authorization.hasAccess('delete', $documentReference)
470 + },
471 + 'state': {
472 + 'opened': $isOpened
459 459   }
460 460   }))
461 461  #end
... ... @@ -472,8 +472,11 @@
472 472  
473 473  #macro (addTranslationNode $translationReference $siblings)
474 474   #set ($currentLocale = $services.localization.currentLocale)
489 + #set ($isOpened = false)
490 + #set ($docNodeId = "translation:$services.model.serialize($translationReference, 'default')_$translationReference.locale")
491 + #computeIsOpened($docNodeId $isOpened)
475 475   #set ($discard = $siblings.add({
476 - 'id': "translation:$services.model.serialize($translationReference, 'default')_$translationReference.locale",
493 + 'id': $docNodeId,
477 477   'text': $translationReference.locale.getDisplayName($currentLocale),
478 478   'icon': 'fa fa-file-text-o',
479 479   'children': false,
... ... @@ -484,6 +484,9 @@
484 484   },
485 485   'a_attr': {
486 486   'href': $xwiki.getURL($translationReference)
504 + },
505 + 'state': {
506 + 'opened': $isOpened
487 487   }
488 488   }))
489 489  #end
... ... @@ -500,8 +500,11 @@
500 500  #end
501 501  
502 502  #macro (addAttachmentsNode $documentReference $siblings)
523 + #set ($isOpened = false)
524 + #set ($docNodeId = "attachments:${documentReference}")
525 + #computeIsOpened($docNodeId $isOpened)
503 503   #set ($discard = $siblings.add({
504 - 'id': "attachments:${documentReference}",
527 + 'id': $docNodeId,
505 505   'text': 'Attachments',
506 506   'icon': 'fa fa-paperclip',
507 507   'children': true,
... ... @@ -513,6 +513,9 @@
513 513   },
514 514   'a_attr': {
515 515   'href': $xwiki.getURL($documentReference, 'view', 'viewer=attachments')
539 + },
540 + 'state': {
541 + 'opened': $isOpened
516 516   }
517 517   }))
518 518  #end
... ... @@ -532,8 +532,11 @@
532 532   #set ($attachmentId = $services.model.serialize($attachmentReference, 'default'))
533 533   #set ($canEditDoc = $services.security.authorization.hasAccess('edit', $attachmentReference.parent))
534 534   #getAttachmentIcon($attachment $icon)
561 + #set ($isOpened = false)
562 + #set ($docNodeId = "attachment:$attachmentId")
563 + #computeIsOpened($docNodeId $isOpened)
535 535   #set ($discard = $siblings.add({
536 - 'id': "attachment:$attachmentId",
565 + 'id': $docNodeId,
537 537   'text': $attachment.filename,
538 538   'icon': $icon,
539 539   'children': false,
... ... @@ -552,6 +552,9 @@
552 552   },
553 553   'a_attr': {
554 554   'href': $attachment.document.getAttachmentURL($attachment.filename)
584 + },
585 + 'state': {
586 + 'opened': $isOpened
555 555   }
556 556   }))
557 557  #end
... ... @@ -630,8 +630,11 @@
630 630  #end
631 631  
632 632  #macro (addClassPropertiesNode $documentReference $siblings)
633 - #set ($discard = $children.add({
634 - 'id': "classProperties:${documentReference}",
665 + #set ($isOpened = false)
666 + #set ($docNodeId = "classProperties:${documentReference}")
667 + #computeIsOpened($docNodeId $isOpened)
668 + #set ($discard = $siblings.add({
669 + 'id': $docNodeId,
635 635   'text': 'Class Properties',
636 636   'icon': 'fa fa-gears',
637 637   'children': true,
... ... @@ -639,6 +639,9 @@
639 639   'type': 'classProperties',
640 640   'validChildren': ['classProperty'],
641 641   'canDelete': $services.security.authorization.hasAccess('edit', $documentReference)
677 + },
678 + 'state': {
679 + 'opened': $isOpened
642 642   }
643 643   }))
644 644  #end
... ... @@ -671,8 +671,11 @@
671 671   #if (!$icon)
672 672   #set ($icon = 'gear')
673 673   #end
712 + #set ($isOpened = false)
713 + #set ($docNodeId = "classProperty:$classPropertyId")
714 + #computeIsOpened($docNodeId $isOpened)
674 674   #set ($discard = $siblings.add({
675 - 'id': "classProperty:$classPropertyId",
716 + 'id': $docNodeId,
676 676   'text': $property.name,
677 677   'icon': "fa fa-$icon",
678 678   'children': false,
... ... @@ -680,6 +680,9 @@
680 680   'id': $classPropertyId,
681 681   'type': 'classProperty',
682 682   'validChildren': []
724 + },
725 + 'state': {
726 + 'opened': $isOpened
683 683   }
684 684   }))
685 685  #end
... ... @@ -696,8 +696,11 @@
696 696  #end
697 697  
698 698  #macro (addObjectsNode $documentReference $siblings)
699 - #set ($discard = $children.add({
700 - 'id': "objects:${documentReference}",
743 + #set ($isOpened = false)
744 + #set ($docNodeId = "objects:${documentReference}")
745 + #computeIsOpened($docNodeId $isOpened)
746 + #set ($discard = $siblings.add({
747 + 'id': $docNodeId,
701 701   'text': 'Objects',
702 702   'icon': 'fa fa-cubes',
703 703   'children': true,
... ... @@ -705,6 +705,9 @@
705 705   'type': 'objects',
706 706   'validChildren': ['objectsOfType'],
707 707   'canDelete': $services.security.authorization.hasAccess('edit', $documentReference)
755 + },
756 + 'state': {
757 + 'opened': $isOpened
708 708   }
709 709   }))
710 710  #end
... ... @@ -715,8 +715,11 @@
715 715   #set ($documentReference = $services.model.resolveDocument($parts.get(0)))
716 716   #set ($classReference = $services.model.resolveDocument($parts.get(1)))
717 717   #if ($services.security.authorization.hasAccess('view', $documentReference))
718 - #set ($discard = $children.add({
719 - '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,
720 720   'text': $services.model.serialize($classReference, 'local'),
721 721   'icon': 'fa fa-cubes',
722 722   'children': true,
... ... @@ -724,6 +724,9 @@
724 724   'type': 'objectsOfType',
725 725   'validChildren': ['object', 'pagination'],
726 726   'canDelete': $services.security.authorization.hasAccess('edit', $documentReference)
780 + },
781 + 'state': {
782 + 'opened': $isOpened
727 727   }
728 728   }))
729 729   #end
... ... @@ -750,8 +750,11 @@
750 750  
751 751  #macro (addObjectNode $object $objectReference $siblings)
752 752   #set ($objectId = $services.model.serialize($objectReference, 'default'))
753 - #set ($discard = $children.add({
754 - 'id': "object:$objectId",
809 + #set ($isOpened = false)
810 + #set ($docNodeId = "object:$objectId")
811 + #computeIsOpened($docNodeId $isOpened)
812 + #set ($discard = $siblings.add({
813 + 'id': $docNodeId,
755 755   'text': "[$object.number]",
756 756   'icon': 'fa fa-cube',
757 757   'children': true,
... ... @@ -760,6 +760,9 @@
760 760   'type': 'object',
761 761   'validChildren': ['objectProperty'],
762 762   'canDelete': $services.security.authorization.hasAccess('edit', $objectReference.parent)
822 + },
823 + 'state': {
824 + 'opened': $isOpened
763 763   }
764 764   }))
765 765  #end
... ... @@ -784,8 +784,11 @@
784 784   #end
785 785   #set ($objectPropertyReference = $services.model.createEntityReference($property.name, 'OBJECT_PROPERTY', $objRef))
786 786   #set ($objectPropertyId = $services.model.serialize($objectPropertyReference, 'default'))
849 + #set ($isOpened = false)
850 + #set ($docNodeId = "objectProperty:$objectPropertyId")
851 + #computeIsOpened($docNodeId $isOpened)
787 787   #set ($discard = $siblings.add({
788 - 'id': "objectProperty:$objectPropertyId",
853 + 'id': $docNodeId,
789 789   'text': $property.name,
790 790   'icon': "fa fa-$icon",
791 791   'children': false,
... ... @@ -793,6 +793,9 @@
793 793   'id': $objectPropertyId,
794 794   'type': 'objectProperty',
795 795   'validChildren': []
861 + },
862 + 'state': {
863 + 'opened': $isOpened
796 796   }
797 797   }))
798 798  #end