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

Редактировал(а) Георгий Глущенко 2026/07/02 17:46

От версии 10.1
отредактировано Георгий Глущенко
на 2026/07/02 17:46
Изменить комментарий: Install extension [org.xwiki.platform:xwiki-platform-index-tree-macro/18.5.0]
К версии 7.1
отредактировано Андрей Ганьков
на 2025/11/13 18:51
Изменить комментарий: Install extension [org.xwiki.platform:xwiki-platform-index-tree-macro/17.9.0]

Сводка

Подробности

Свойства страницы
Автор документа
... ... @@ -1,1 +1,1 @@
1 -XWiki.ggv
1 +XWiki.gav
Содержимое
... ... @@ -30,9 +30,7 @@
30 30   #end
31 31   #end
32 32   ## Handle relative references
33 - #foreach ($key in ['root', 'openTo'])
34 - #set ($docTreeConfig[$key] = $services.index.tree.normalizeEntityTreeNodeId($docTreeConfig[$key]))
35 - #end
33 + #makeNodeReferencesAbsolute($docTreeConfig ['root', 'openTo'])
36 36   ## FIXME: The 'orderBy' property of the tree API is shared by all tree node types, which means we can't indicate a
37 37   ## different sort field per tree node type (e.g. sort wiki nodes by name and document nodes by last modification
38 38   ## date). At the same time, this property is currently taken into account only for sorting document tree nodes, so for
... ... @@ -58,6 +58,29 @@
58 58   #set ($discard = $tree.properties.putAll($docTreeConfig))
59 59  #end
60 60  
59 +#set ($documentPseudoNodeTypes = ['translations', 'attachments', 'classProperties', 'objects', 'addDocument',
60 + 'addAttachment'])
61 +#macro (makeNodeReferencesAbsolute $map $keys)
62 + #foreach ($key in $keys)
63 + #set ($nodeId = $map.get($key))
64 + #set ($parts = $nodeId.split(':', 2))
65 + #if ($parts && $parts.size() == 2)
66 + #set ($nodeType = $parts[0].toLowerCase())
67 + #set ($nodeReference = $parts[1])
68 + #set ($entityType = $nodeType)
69 + #if ($documentPseudoNodeTypes.contains($nodeType))
70 + #set ($entityType = 'document')
71 + #end
72 + #set ($discard = "#evaluate(""${escapetool.h}set (${escapetool.d}entityReference =
73 + ${escapetool.d}services.model.resolve$stringtool.capitalize($entityType)(${escapetool.d}nodeReference))"")")
74 + #if ($entityReference)
75 + #set ($nodeReference = $services.model.serialize($entityReference, 'default'))
76 + #end
77 + #set ($discard = $map.put($key, "$nodeType:$nodeReference"))
78 + #end
79 + #end
80 +#end
81 +
61 61  #macro (handleDocumentTreeRequest)
62 62   #if ($request.action)
63 63   #if ($services.csrf.isTokenValid($request.form_token))
... ... @@ -152,39 +152,8 @@
152 152   #if ($parts && $parts.size() == 2)
153 153   #set ($nodeType = $parts[0])
154 154   #set ($nodeReference = $parts[1])
155 - #if ($nodeType == 'farm')
156 - #maybeAddFarmNode($nodeReference $siblings)
157 - #elseif ($nodeType == 'wiki')
158 - #maybeAddWikiNode($nodeReference $siblings $placeholder)
159 - #elseif ($nodeType == 'space')
160 - #maybeAddSpaceNode($nodeReference $siblings $placeholder)
161 - #elseif ($nodeType == 'document')
162 - #maybeAddDocumentNode($nodeReference $siblings $placeholder)
163 - #elseif ($nodeType == 'addDocument')
164 - #maybeAddAddDocumentNode($nodeReference $siblings)
165 - #elseif ($nodeType == 'translations')
166 - #maybeAddTranslationsNode($nodeReference $siblings)
167 - #elseif ($nodeType == 'translation')
168 - #maybeAddTranslationNode($nodeReference $siblings)
169 - #elseif ($nodeType == 'attachments')
170 - #maybeAddAttachmentsNode($nodeReference $siblings)
171 - #elseif ($nodeType == 'attachment')
172 - #maybeAddAttachmentNode($nodeReference $siblings)
173 - #elseif ($nodeType == 'addAttachment')
174 - #maybeAddAddAttachmentNode($nodeReference $siblings)
175 - #elseif ($nodeType == 'classProperties')
176 - #maybeAddClassPropertiesNode($nodeReference $siblings)
177 - #elseif ($nodeType == 'classProperty')
178 - #maybeAddClassPropertyNode($nodeReference $siblings)
179 - #elseif ($nodeType == 'objects')
180 - #maybeAddObjectsNode($nodeReference $siblings)
181 - #elseif ($nodeType == 'objectsOfType')
182 - #maybeAddObjectsOfTypeNode($nodeReference $siblings)
183 - #elseif ($nodeType == 'object')
184 - #maybeAddObjectNode($nodeReference $siblings)
185 - #elseif ($nodeType == 'objectProperty')
186 - #maybeAddObjectPropertyNode($nodeReference $siblings)
187 - #end
176 + #set ($discard = "#evaluate(""${escapetool.h}maybeAdd$stringtool.capitalize($nodeType)Node(
177 + ${escapetool.d}nodeReference ${escapetool.d}siblings ${escapetool.d}placeholder)"")")
188 188   #end
189 189  #end
190 190  
... ... @@ -385,7 +385,16 @@
385 385   #end
386 386   #set ($hasChildren = $tree.getChildCount($docNodeId) > 0)
387 387   #set ($isOpened = false)
388 - #computeIsOpened($docNodeId $isOpened)
378 + #if ("$!docTreeConfig.expandToLevel" != '')
379 + #set ($rootNode = "wiki:$services.wiki.currentWikiId")
380 + #if ("$!docTreeConfig.root" != '')
381 + #set ($rootNode = "wiki:$services.wiki.currentWikiId")
382 + #else
383 + #set ($rootNode = $docTreeConfig.root)
384 + #end
385 + #set ($rootDistance = $tree.getPath($docNodeId).size())
386 + #set ($isOpened = ($rootDistance != -1 && $docTreeConfig.expandToLevel >= $rootDistance))
387 + #end
389 389   #set ($discard = $siblings.add({
390 390   'id': $docNodeId,
391 391   'text': $label,
... ... @@ -449,27 +449,9 @@
449 449   #end
450 450  #end
451 451  
452 -#macro (computeIsOpened $docNodeId $result)
453 - #set ($isOpened = false)
454 - #if ("$!docTreeConfig.expandToLevel" != '')
455 - #set ($rootNode = "wiki:$services.wiki.currentWikiId")
456 - #if ("$!docTreeConfig.root" != '')
457 - #set ($rootNode = "wiki:$services.wiki.currentWikiId")
458 - #else
459 - #set ($rootNode = $docTreeConfig.root)
460 - #end
461 - #set ($rootDistance = $tree.getPath($docNodeId).size())
462 - #set ($isOpened = ($rootDistance != -1 && $docTreeConfig.expandToLevel >= $rootDistance))
463 - #end
464 - #setVariable("$result" $isOpened)
465 -#end
466 -
467 467  #macro (addTranslationsNode $documentReference $siblings)
468 - #set ($isOpened = false)
469 - #set ($docNodeId = "translations:${documentReference}")
470 - #computeIsOpened($docNodeId $isOpened)
471 - #set ($discard = $siblings.add({
472 - 'id': $docNodeId,
452 + #set ($discard = $children.add({
453 + 'id': "translations:${documentReference}",
473 473   'text': 'Translations',
474 474   'icon': 'fa fa-language',
475 475   'children': true,
... ... @@ -477,9 +477,6 @@
477 477   'type': 'translations',
478 478   'validChildren': ['translation'],
479 479   'canDelete': $services.security.authorization.hasAccess('delete', $documentReference)
480 - },
481 - 'state': {
482 - 'opened': $isOpened
483 483   }
484 484   }))
485 485  #end
... ... @@ -496,11 +496,8 @@
496 496  
497 497  #macro (addTranslationNode $translationReference $siblings)
498 498   #set ($currentLocale = $services.localization.currentLocale)
499 - #set ($isOpened = false)
500 - #set ($docNodeId = "translation:$services.model.serialize($translationReference, 'default')_$translationReference.locale")
501 - #computeIsOpened($docNodeId $isOpened)
502 502   #set ($discard = $siblings.add({
503 - 'id': $docNodeId,
478 + 'id': "translation:$services.model.serialize($translationReference, 'default')_$translationReference.locale",
504 504   'text': $translationReference.locale.getDisplayName($currentLocale),
505 505   'icon': 'fa fa-file-text-o',
506 506   'children': false,
... ... @@ -511,9 +511,6 @@
511 511   },
512 512   'a_attr': {
513 513   'href': $xwiki.getURL($translationReference)
514 - },
515 - 'state': {
516 - 'opened': $isOpened
517 517   }
518 518   }))
519 519  #end
... ... @@ -530,11 +530,8 @@
530 530  #end
531 531  
532 532  #macro (addAttachmentsNode $documentReference $siblings)
533 - #set ($isOpened = false)
534 - #set ($docNodeId = "attachments:${documentReference}")
535 - #computeIsOpened($docNodeId $isOpened)
536 536   #set ($discard = $siblings.add({
537 - 'id': $docNodeId,
506 + 'id': "attachments:${documentReference}",
538 538   'text': 'Attachments',
539 539   'icon': 'fa fa-paperclip',
540 540   'children': true,
... ... @@ -546,9 +546,6 @@
546 546   },
547 547   'a_attr': {
548 548   'href': $xwiki.getURL($documentReference, 'view', 'viewer=attachments')
549 - },
550 - 'state': {
551 - 'opened': $isOpened
552 552   }
553 553   }))
554 554  #end
... ... @@ -568,11 +568,8 @@
568 568   #set ($attachmentId = $services.model.serialize($attachmentReference, 'default'))
569 569   #set ($canEditDoc = $services.security.authorization.hasAccess('edit', $attachmentReference.parent))
570 570   #getAttachmentIcon($attachment $icon)
571 - #set ($isOpened = false)
572 - #set ($docNodeId = "attachment:$attachmentId")
573 - #computeIsOpened($docNodeId $isOpened)
574 574   #set ($discard = $siblings.add({
575 - 'id': $docNodeId,
538 + 'id': "attachment:$attachmentId",
576 576   'text': $attachment.filename,
577 577   'icon': $icon,
578 578   'children': false,
... ... @@ -591,9 +591,6 @@
591 591   },
592 592   'a_attr': {
593 593   'href': $attachment.document.getAttachmentURL($attachment.filename)
594 - },
595 - 'state': {
596 - 'opened': $isOpened
597 597   }
598 598   }))
599 599  #end
... ... @@ -672,11 +672,8 @@
672 672  #end
673 673  
674 674  #macro (addClassPropertiesNode $documentReference $siblings)
675 - #set ($isOpened = false)
676 - #set ($docNodeId = "classProperties:${documentReference}")
677 - #computeIsOpened($docNodeId $isOpened)
678 - #set ($discard = $siblings.add({
679 - 'id': $docNodeId,
635 + #set ($discard = $children.add({
636 + 'id': "classProperties:${documentReference}",
680 680   'text': 'Class Properties',
681 681   'icon': 'fa fa-gears',
682 682   'children': true,
... ... @@ -684,9 +684,6 @@
684 684   'type': 'classProperties',
685 685   'validChildren': ['classProperty'],
686 686   'canDelete': $services.security.authorization.hasAccess('edit', $documentReference)
687 - },
688 - 'state': {
689 - 'opened': $isOpened
690 690   }
691 691   }))
692 692  #end
... ... @@ -719,11 +719,8 @@
719 719   #if (!$icon)
720 720   #set ($icon = 'gear')
721 721   #end
722 - #set ($isOpened = false)
723 - #set ($docNodeId = "classProperty:$classPropertyId")
724 - #computeIsOpened($docNodeId $isOpened)
725 725   #set ($discard = $siblings.add({
726 - 'id': $docNodeId,
677 + 'id': "classProperty:$classPropertyId",
727 727   'text': $property.name,
728 728   'icon': "fa fa-$icon",
729 729   'children': false,
... ... @@ -731,9 +731,6 @@
731 731   'id': $classPropertyId,
732 732   'type': 'classProperty',
733 733   'validChildren': []
734 - },
735 - 'state': {
736 - 'opened': $isOpened
737 737   }
738 738   }))
739 739  #end
... ... @@ -750,11 +750,8 @@
750 750  #end
751 751  
752 752  #macro (addObjectsNode $documentReference $siblings)
753 - #set ($isOpened = false)
754 - #set ($docNodeId = "objects:${documentReference}")
755 - #computeIsOpened($docNodeId $isOpened)
756 - #set ($discard = $siblings.add({
757 - 'id': $docNodeId,
701 + #set ($discard = $children.add({
702 + 'id': "objects:${documentReference}",
758 758   'text': 'Objects',
759 759   'icon': 'fa fa-cubes',
760 760   'children': true,
... ... @@ -762,9 +762,6 @@
762 762   'type': 'objects',
763 763   'validChildren': ['objectsOfType'],
764 764   'canDelete': $services.security.authorization.hasAccess('edit', $documentReference)
765 - },
766 - 'state': {
767 - 'opened': $isOpened
768 768   }
769 769   }))
770 770  #end
... ... @@ -775,11 +775,8 @@
775 775   #set ($documentReference = $services.model.resolveDocument($parts.get(0)))
776 776   #set ($classReference = $services.model.resolveDocument($parts.get(1)))
777 777   #if ($services.security.authorization.hasAccess('view', $documentReference))
778 - #set ($isOpened = false)
779 - #set ($docNodeId = "objectsOfType:$documentReference/$classReference")
780 - #computeIsOpened($docNodeId $isOpened)
781 - #set ($discard = $siblings.add({
782 - 'id': $docNodeId,
720 + #set ($discard = $children.add({
721 + 'id': "objectsOfType:$documentReference/$classReference",
783 783   'text': $services.model.serialize($classReference, 'local'),
784 784   'icon': 'fa fa-cubes',
785 785   'children': true,
... ... @@ -787,9 +787,6 @@
787 787   'type': 'objectsOfType',
788 788   'validChildren': ['object', 'pagination'],
789 789   'canDelete': $services.security.authorization.hasAccess('edit', $documentReference)
790 - },
791 - 'state': {
792 - 'opened': $isOpened
793 793   }
794 794   }))
795 795   #end
... ... @@ -816,11 +816,8 @@
816 816  
817 817  #macro (addObjectNode $object $objectReference $siblings)
818 818   #set ($objectId = $services.model.serialize($objectReference, 'default'))
819 - #set ($isOpened = false)
820 - #set ($docNodeId = "object:$objectId")
821 - #computeIsOpened($docNodeId $isOpened)
822 - #set ($discard = $siblings.add({
823 - 'id': $docNodeId,
755 + #set ($discard = $children.add({
756 + 'id': "object:$objectId",
824 824   'text': "[$object.number]",
825 825   'icon': 'fa fa-cube',
826 826   'children': true,
... ... @@ -829,9 +829,6 @@
829 829   'type': 'object',
830 830   'validChildren': ['objectProperty'],
831 831   'canDelete': $services.security.authorization.hasAccess('edit', $objectReference.parent)
832 - },
833 - 'state': {
834 - 'opened': $isOpened
835 835   }
836 836   }))
837 837  #end
... ... @@ -856,11 +856,8 @@
856 856   #end
857 857   #set ($objectPropertyReference = $services.model.createEntityReference($property.name, 'OBJECT_PROPERTY', $objRef))
858 858   #set ($objectPropertyId = $services.model.serialize($objectPropertyReference, 'default'))
859 - #set ($isOpened = false)
860 - #set ($docNodeId = "objectProperty:$objectPropertyId")
861 - #computeIsOpened($docNodeId $isOpened)
862 862   #set ($discard = $siblings.add({
863 - 'id': $docNodeId,
790 + 'id': "objectProperty:$objectPropertyId",
864 864   'text': $property.name,
865 865   'icon': "fa fa-$icon",
866 866   'children': false,
... ... @@ -868,9 +868,6 @@
868 868   'id': $objectPropertyId,
869 869   'type': 'objectProperty',
870 870   'validChildren': []
871 - },
872 - 'state': {
873 - 'opened': $isOpened
874 874   }
875 875   }))
876 876  #end
... ... @@ -1314,8 +1314,6 @@
1314 1314  #end
1315 1315  
1316 1316  #macro (addCommonDocTreeSolrParams $params)
1317 - ## Enable prefix matching, besides standard language-dependent matching.
1318 - #set ($discard = $params.add('q=__INPUT__ __INPUT__*'))
1319 1319   #if ($rootType == 'wiki')
1320 1320   ## Limit the search to the specified wiki.
1321 1321   #addWikiLocationSolrParams($rootReference $params)