Modifications pour le document MacroService

Modifié par Florent Charton le 2026/03/13 11:04

Depuis la version 2.1
modifié par Florent Charton
sur 2022/06/28 18:01
Commentaire de modification : Install extension [org.xwiki.contrib:application-ckeditor-ui/1.64.2]
À la version 4.1
modifié par Florent Charton
sur 2025/08/19 15:16
Commentaire de modification : Install extension [org.xwiki.platform:xwiki-platform-ckeditor-ui/17.4.3]

Résumé

Détails

Propriétés de la Page
Contenu
... ... @@ -38,36 +38,67 @@
38 38  ## }
39 39  ## ================================================================
40 40  #macro (getMacroList $syntaxId)
41 +
42 + ## Loads the css resources to display the macros list
43 + ## TODO: Refactor once we add support for loading css files from javascript without velocity.
44 + #if ($xcontext.action == 'get')
45 + #template('display_macros.vm')
46 + #initRequiredSkinExtensions()
47 + #end
48 +
49 + #set ($discard = $xwiki.linkx.use($services.webjars.url('selectize.js', 'css/selectize.bootstrap3.css'),
50 + {'type': 'text/css', 'rel': 'stylesheet'}))
51 + #set ($discard = $xwiki.ssfx.use('uicomponents/suggest/xwiki.selectize.css', true))
52 +
53 + #if ($xcontext.action == 'get')
54 + #getRequiredSkinExtensions($requiredSkinExtensions)
55 + #set ($discard = $response.setHeader('X-XWIKI-HTML-HEAD', $requiredSkinExtensions))
56 + #end
57 +
41 41   #set ($syntax = $services.rendering.resolveSyntax($syntaxId))
42 42   #set ($macroDescriptors = $services.rendering.getMacroDescriptors($syntax))
43 - #if (!$macroDescriptors)
44 - ## Before XWiki 9.7RC1 we had to use APIs that require programming rights.
45 - #set ($macroDescriptors = [])
46 - #try()
47 - #set ($macroManager = $services.component.getInstance('org.xwiki.rendering.macro.MacroManager'))
48 - #foreach ($macroId in $macroManager.getMacroIds($syntax))
49 - #set ($macroDescriptor = $macroManager.getMacro($macroId).descriptor)
50 - #set ($discard = $macroDescriptors.add($macroDescriptor))
51 - #end
52 - #end
53 - #end
54 54   #set ($data = {})
55 55   #set ($allMacrosExcludedCategories = [])
56 56   #set ($discard = $allMacrosExcludedCategories.add("#maybeTranslate('rendering.macroCategory.Internal' 'Internal')"))
57 57   #set ($discard = $allMacrosExcludedCategories.add("#maybeTranslate('rendering.macroCategory.Deprecated' 'Deprecated')"))
58 58   #set ($discard = $data.put('options', { 'allMacrosExcludedCategories' : $allMacrosExcludedCategories }))
65 + ## If the current user do not want to display hidden documents, we initialize the set of hidden default
66 + ## categories.
67 + ## TODO: Make the list of hidden by default categories configurable from the administration (XWIKI-19993).
68 + #if(!$services.user.getProperties().displayHiddenDocuments())
69 + #set ($hiddenCategories = $services.rendering.getHiddenMacroCategories())
70 + #else
71 + #set ($hiddenCategories = [])
72 + #end
59 59   #set ($macroList = [])
74 + #set ($installedMacros = [])
60 60   #foreach ($macroDescriptor in $macroDescriptors)
76 + #set ($discard = $installedMacros.add($macroDescriptor.id.id))
77 +
61 61   #set ($macroTranslationKey = "rendering.macro.$macroDescriptor.id")
62 - #set ($macroCategoryTranslationKey = "rendering.macroCategory.$macroDescriptor.defaultCategory")
63 - #set ($discard = $macroList.add({
64 - 'id': $macroDescriptor.id,
65 - 'name': "#maybeTranslate(""${macroTranslationKey}.name"" $macroDescriptor.name)",
66 - 'description': "#maybeTranslate(""${macroTranslationKey}.description"" $macroDescriptor.description)",
67 - 'defaultCategory': "#maybeTranslate($macroCategoryTranslationKey $macroDescriptor.defaultCategory)"
68 - }))
79 + #set ($categories = [])
80 + #set ($hidden = false)
81 + #foreach ($category in $services.rendering.getMacroCategories($macroDescriptor.id))
82 + #set ($macroCategoryTranslationKey = "rendering.macroCategory.$category")
83 + #set ($hidden = $hidden || $hiddenCategories.contains($category))
84 + #set ($discard = $categories.add({
85 + 'id': $category,
86 + 'label': "#maybeTranslate($macroCategoryTranslationKey $category)"
87 + }))
88 + #end
89 +
90 + #if (!$hidden)
91 + #set ($defaultCategoryTranslation = "rendering.macroCategory.${macroDescriptor.defaultCategory}")
92 + #set ($discard = $macroList.add({
93 + 'id': $macroDescriptor.id,
94 + 'name': "#maybeTranslate(""${macroTranslationKey}.name"" $macroDescriptor.name)",
95 + 'description': "#maybeTranslate(""${macroTranslationKey}.description"" $macroDescriptor.description)",
96 + 'defaultCategory': "#maybeTranslate($defaultCategoryTranslation $macroDescriptor.defaultCategory)",
97 + 'categories': $categories
98 + }))
99 + #end
69 69   #end
70 - #set ($macroList = $resolvedSortTool.sort($macroList, 'name'))
101 + #set ($macroList = $collectiontool.sort($macroList, 'name'))
71 71   #set ($discard = $data.put('list', $macroList))
72 72   ## Get macros provided by compatible available extensions
73 73   #set ($macroExtensionsList = [])
... ... @@ -80,7 +80,6 @@
80 80   #end
81 81   #set ($discard = $extensionQuery.setInstalled(false, '', "wiki:$xcontext.database"))
82 82   #set ($extensions = $services.extension.index.repository.search($extensionQuery))
83 - #set ($macroExtensionCategory = $services.localization.render('ckeditor.plugin.macro.notinstalled'))
84 84   #if ($extensions.size > 0)
85 85   #set ($macroExtensionsMap = {})
86 86   #foreach ($extension in $extensions)
... ... @@ -90,21 +90,28 @@
90 90   && $services.security.authorization.hasAccess('admin', $xcontext.userReference, "wiki:$xcontext.database") && $services.extension.isAllowed($extension, "wiki:$xcontext.database")))
91 91   #foreach ($extensionComponent in $extension.getComponents())
92 92   #if ($extensionComponent.roleType == 'org.xwiki.rendering.macro.Macro')
93 - #set ($discard = $macroExtensionsList.add({
94 - 'id' : {
95 - 'id' : $extensionComponent.roleHint
96 - },
97 - 'name': $extensionComponent.roleHint,
98 - 'description': $extension.summary,
99 - 'defaultCategory': '_notinstalled',
100 - 'extensionId' : $extension.id.id,
101 - 'extensionVersion' : $extension.id.version.value,
102 - 'extensionType' : $extension.type,
103 - 'extensionRecommended': $extension.recommended,
104 - 'extensionName': $extension.name,
105 - 'extensionSummary': $extension.summary,
106 - 'extensionInstallAllowed': $extensionInstallAllowed
107 - }))
123 + ## Skip macros identifiers for which a macro is already installed
124 + #if (!$installedMacros.contains($extensionComponent.roleHint))
125 + #set ($discard = $macroExtensionsList.add({
126 + 'id' : {
127 + 'id' : $extensionComponent.roleHint
128 + },
129 + 'name': $extensionComponent.roleHint,
130 + 'description': $extension.summary,
131 + 'defaultCategory': '_notinstalled',
132 + 'categories': [{
133 + 'id' :'_notinstalled',
134 + 'label': $services.localization.render('macroSelector.filter.category.notinstalled')
135 + }],
136 + 'extensionId' : $extension.id.id,
137 + 'extensionVersion' : $extension.id.version.value,
138 + 'extensionType' : $extension.type,
139 + 'extensionRecommended': $extension.recommended,
140 + 'extensionName': $extension.name,
141 + 'extensionSummary': $extension.summary,
142 + 'extensionInstallAllowed': $extensionInstallAllowed
143 + }))
144 + #end
108 108   #end
109 109   #end
110 110   #end
... ... @@ -113,8 +113,6 @@
113 113  #end
114 114  
115 115  #macro (maybeGetMacroDescriptor $macroIdAsString)
116 - #set ($xmacro = $NULL)
117 - #set ($macroDescriptor = $NULL)
118 118   #set ($macroId = $services.rendering.resolveMacroId($macroIdAsString))
119 119   #if ($macroId)
120 120   #set ($macroDescriptor = $services.rendering.getMacroDescriptor($macroId))
... ... @@ -123,41 +123,12 @@
123 123   #set ($macroId = $services.rendering.resolveMacroId($macroId.id))
124 124   #set ($macroDescriptor = $services.rendering.getMacroDescriptor($macroId))
125 125   #end
126 - #else
127 - ## Either the macro id could not be resolved (unlikely) or we are on an older XWiki instance (before 10.10RC1) where
128 - ## we had to use APIs that require programming rights.
129 - #getMacroWithPR($macroIdAsString)
130 - #if ($xmacro)
131 - #set ($macroDescriptor = $xmacro.descriptor)
161 + #if ($macroDescriptor)
162 + #getMacroDescriptor($macroDescriptor)
132 132   #end
133 133   #end
134 - #if ($macroDescriptor)
135 - #getMacroDescriptor($macroDescriptor)
136 - #if ($xmacro)
137 - ## supportsInlineMode was not exposed on the macro descriptor before XWiki 10.10RC1.
138 - #set ($data.supportsInlineMode = $xmacro.supportsInlineMode())
139 - #end
140 - #end
141 141  #end
142 142  
143 -#macro (getMacroWithPR $macroIdAsString)
144 - #set ($xmacro = $NULL)
145 - #try()
146 - #set ($macroIdFactory = $services.component.getInstance('org.xwiki.rendering.macro.MacroIdFactory'))
147 - #set ($macroId = $macroIdFactory.createMacroId($macroIdAsString))
148 - #set ($macroManager = $services.component.getInstance('org.xwiki.rendering.macro.MacroManager'))
149 - #if ($macroManager.exists($macroId))
150 - #set ($xmacro = $macroManager.getMacro($macroId))
151 - #elseif ($macroId.syntax)
152 - ## Try the macro id without the syntax.
153 - #set ($macroId = $macroIdFactory.createMacroId($macroId.id))
154 - #if ($macroManager.exists($macroId))
155 - #set ($xmacro = $macroManager.getMacro($macroId))
156 - #end
157 - #end
158 - #end
159 -#end
160 -
161 161  #macro (getMacroDescriptor $macroDescriptor)
162 162   ## Translate the macro name and description.
163 163   #set ($macroTranslationKey = "rendering.macro.$macroDescriptor.id")
... ... @@ -192,13 +192,6 @@
192 192   #set ($parameterDescriptor = $entry.value)
193 193   ## Translate the parameter name and description.
194 194   #set ($parameterTranslationKey = "${macroTranslationKey}.parameter.$parameterDescriptor.id")
195 - ## Note: The displayHidden parameter is new in XWiki 12.4RC1 so make sure we set 'hidden' to false if it doesn't
196 - ## exist
197 - #if ("$!parameterDescriptor.displayHidden" != '')
198 - #set ($parameterHidden = $parameterDescriptor.displayHidden)
199 - #else
200 - #set ($parameterHidden = false)
201 - #end
202 202   #set ($translatedParameterDescriptor = {
203 203   'id': $parameterDescriptor.id,
204 204   'name': "#maybeTranslate(""${parameterTranslationKey}.name"" $parameterDescriptor.name)",
... ... @@ -208,13 +208,9 @@
208 208   'advanced': $parameterDescriptor.advanced,
209 209   'defaultValue': $parameterDescriptor.defaultValue,
210 210   'type': $parameterDescriptor.displayType,
211 - 'hidden' : $parameterHidden,
210 + 'hidden' : $parameterDescriptor.displayHidden,
212 212   'index': $foreach.index
213 213   })
214 - #if ("$!translatedParameterDescriptor.type" == '')
215 - ## displayType is not available before XWiki 11.0 so we need to fall back on parameterType.
216 - #set ($translatedParameterDescriptor.type = $parameterDescriptor.parameterType)
217 - #end
218 218   #set ($translatedParameterDescriptor.caseInsensitive = $translatedParameterDescriptor.type.isEnum())
219 219   #set ($groupDescriptor = $parameterDescriptor.groupDescriptor)
220 220   #if ($groupDescriptor)
... ... @@ -240,10 +240,7 @@
240 240   #end
241 241   #set ($translatedParameterDescriptor.editTemplate = $translatedParameterDescriptor.editTemplate.trim())
242 242   #fixDescriptorType($translatedParameterDescriptor)
243 - ## Make sure the key is lowercase (for XWiki <9.0).
244 - ## See XWIKI-13990: Inconsistency between Java-based and Wiki-based rendering macros regarding the parameter
245 - ## descriptor map keys
246 - #set ($discard = $data.parameterDescriptorMap.put($entry.key.toLowerCase(), $translatedParameterDescriptor))
238 + #set ($discard = $data.parameterDescriptorMap.put($entry.key, $translatedParameterDescriptor))
247 247   #end
248 248   #if ($groupDescriptorTree.groups)
249 249   #set ($data.groupDescriptorTree = $groupDescriptorTree.groups)