Изменения документа Document Tree Macros
Редактировал(а) Георгий Глущенко 2026/07/02 17:46
От версии 10.1
отредактировано Георгий Глущенко
на 2026/07/02 17:46
на 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
на 2025/11/13 18:51
Изменить комментарий:
Install extension [org.xwiki.platform:xwiki-platform-index-tree-macro/17.9.0]
Сводка
-
Свойства страницы (2 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Автор документа
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki.g gv1 +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': $doc NodeId,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)