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

Редактировал(а) Андрей Ганьков 2025/11/13 18:51

От версии 5.1
отредактировано Андрей Ганьков
на 2024/10/24 10:31
Изменить комментарий: Install extension [org.xwiki.platform:xwiki-platform-index-tree-macro/16.8.0]
К версии 7.1
отредактировано Андрей Ганьков
на 2025/11/13 18:51
Изменить комментарий: Install extension [org.xwiki.platform:xwiki-platform-index-tree-macro/17.9.0]

Сводка

Подробности

Свойства страницы
Содержимое
... ... @@ -31,9 +31,15 @@
31 31   #end
32 32   ## Handle relative references
33 33   #makeNodeReferencesAbsolute($docTreeConfig ['root', 'openTo'])
34 - ## Sort the child documents by (raw) title when the node label is the document title.
35 - #if ($docTreeConfig.showDocumentTitle)
36 - #set ($docTreeConfig.orderBy = 'title')
34 + ## FIXME: The 'orderBy' property of the tree API is shared by all tree node types, which means we can't indicate a
35 + ## different sort field per tree node type (e.g. sort wiki nodes by name and document nodes by last modification
36 + ## date). At the same time, this property is currently taken into account only for sorting document tree nodes, so for
37 + ## now we set its value to the specified document sort. In the future we may want to convert this into a map, where
38 + ## the key is the node type.
39 + #set ($docTreeConfig.orderBy = $docTreeConfig.sortDocumentsBy)
40 + ## Sort the child documents by (raw) title when the node label is the document title and there's no sort specified.
41 + #if ($docTreeConfig.showDocumentTitle && "$!docTreeConfig.orderBy" == '')
42 + #set ($docTreeConfig.orderBy = 'title:asc')
37 37   #end
38 38   ## Determine which hierarchy needs to be used.
39 39   #if ($docTreeConfig.showSpaces)
... ... @@ -146,6 +146,8 @@
146 146   #set ($limit = $mathtool.max($numbertool.toNumber($request.limit).intValue(), 1))
147 147   #if ("$!limit" == '')
148 148   #set ($limit = 15)
155 + #else
156 + #validateQueryLimit($limit)
149 149   #end
150 150   #if ($nodeId == '#' && $docTreeConfig.showRoot)
151 151   #maybeAddNode($actualNodeId $children)
... ... @@ -199,6 +199,7 @@
199 199  
200 200  #macro (maybeAddFarmNode $nodeReference $siblings)
201 201   #set ($farmHomeReference = $services.model.resolveDocument('', 'default'))
210 + #set ($isOpened = $docTreeConfig.expandToLevel > 0)
202 202   #set ($discard = $siblings.add({
203 203   'id': 'farm:*',
204 204   'text': 'Farm',
... ... @@ -208,6 +208,9 @@
208 208   'type': 'farm',
209 209   'validChildren': ['wiki', 'pagination']
210 210   },
220 + 'state': {
221 + 'opened': $isOpened
222 + },
211 211   'a_attr': {
212 212   'href': $xwiki.getURL($farmHomeReference)
213 213   }
... ... @@ -236,6 +236,7 @@
236 236   #else
237 237   #set ($label = $wiki.id)
238 238   #end
251 + #set ($isOpened = $docTreeConfig.expandToLevel > 0)
239 239   #set ($discard = $siblings.add({
240 240   'id': "wiki:$wiki.id",
241 241   'text': $label,
... ... @@ -247,6 +247,9 @@
247 247   'validChildren': ['space', 'document', 'pagination'],
248 248   'canDelete': $canDeleteWiki
249 249   },
263 + 'state': {
264 + 'opened': $isOpened
265 + },
250 250   'a_attr': {
251 251   'href': $xwiki.getURL($wiki.mainPageReference)
252 252   }
... ... @@ -272,6 +272,7 @@
272 272  
273 273  #macro (addSpaceNode $spaceReference $siblings)
274 274   #set ($spaceId = $services.model.serialize($spaceReference, 'default'))
291 + #set ($spaceNodeId = "space:$spaceId")
275 275   #set ($hasSpaceAdmin = $services.security.authorization.hasAccess('admin', $spaceReference))
276 276   #set ($canViewSpace = $services.security.authorization.hasAccess('view', $spaceReference))
277 277   #if ($docTreeConfig.showTerminalDocuments)
... ... @@ -279,10 +279,21 @@
279 279   #set ($hasChildren = true)
280 280   #else
281 281   ## We display only the nested spaces. This space might contain only documents.
282 - #set ($hasChildren = $tree.getChildCount("space:$spaceId") > 0)
299 + #set ($hasChildren = $tree.getChildCount($spaceNodeId) > 0)
283 283   #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
284 284   #set ($discard = $siblings.add({
285 - 'id': "space:$spaceId",
313 + 'id': $spaceNodeId,
286 286   'text': $spaceReference.name,
287 287   'icon': 'fa fa-folder-o',
288 288   'iconOpened': 'fa fa-folder-open-o',
... ... @@ -300,6 +300,9 @@
300 300   'createDocumentURL': $xwiki.getURL($spaceReference, 'create', $NULL),
301 301   'deleteURL': $xwiki.getURL($spaceReference, 'deletespace', $NULL)
302 302   },
331 + 'state': {
332 + 'opened': $isOpened
333 + },
303 303   'a_attr': {
304 304   'href': $xwiki.getURL($spaceReference)
305 305   }
... ... @@ -325,6 +325,7 @@
325 325  
326 326  #macro (addDocumentNode $documentReference $siblings)
327 327   #set ($documentId = $services.model.serialize($documentReference, 'default'))
359 + #set ($docNodeId = "document:$documentId")
328 328   #set ($label = $documentReference.name)
329 329   #if (!$docTreeConfig.showSpaces &&
330 330   $documentReference.name == $services.model.getEntityReference('DOCUMENT', 'default').name)
... ... @@ -341,9 +341,20 @@
341 341   #set ($label = $plainTitle)
342 342   #end
343 343   #end
344 - #set ($hasChildren = $tree.getChildCount("document:$documentId") > 0)
376 + #set ($hasChildren = $tree.getChildCount($docNodeId) > 0)
377 + #set ($isOpened = false)
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
345 345   #set ($discard = $siblings.add({
346 - 'id': "document:$documentId",
389 + 'id': $docNodeId,
347 347   'text': $label,
348 348   'icon': 'fa fa-file-o',
349 349   'children': $hasChildren,
... ... @@ -358,6 +358,9 @@
358 358   'canCopy': $canViewDoc,
359 359   'createDocumentURL': $xwiki.getURL($documentReference, 'create', $NULL)
360 360   },
404 + 'state': {
405 + 'opened': $isOpened
406 + },
361 361   'a_attr': {
362 362   'href': $xwiki.getURL($documentReference)
363 363   }