Modifications pour le document MacroService

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

Depuis 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]
À 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]

Résumé

Détails

Propriétés de la Page
Contenu
... ... @@ -38,67 +38,36 @@
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 -
58 58   #set ($syntax = $services.rendering.resolveSyntax($syntaxId))
59 59   #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
60 60   #set ($data = {})
61 61   #set ($allMacrosExcludedCategories = [])
62 62   #set ($discard = $allMacrosExcludedCategories.add("#maybeTranslate('rendering.macroCategory.Internal' 'Internal')"))
63 63   #set ($discard = $allMacrosExcludedCategories.add("#maybeTranslate('rendering.macroCategory.Deprecated' 'Deprecated')"))
64 64   #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
73 73   #set ($macroList = [])
74 - #set ($installedMacros = [])
75 75   #foreach ($macroDescriptor in $macroDescriptors)
76 - #set ($discard = $installedMacros.add($macroDescriptor.id.id))
77 -
78 78   #set ($macroTranslationKey = "rendering.macro.$macroDescriptor.id")
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
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 + }))
100 100   #end
101 - #set ($macroList = $collectiontool.sort($macroList, 'name'))
70 + #set ($macroList = $resolvedSortTool.sort($macroList, 'name'))
102 102   #set ($discard = $data.put('list', $macroList))
103 103   ## Get macros provided by compatible available extensions
104 104   #set ($macroExtensionsList = [])
... ... @@ -111,6 +111,7 @@
111 111   #end
112 112   #set ($discard = $extensionQuery.setInstalled(false, '', "wiki:$xcontext.database"))
113 113   #set ($extensions = $services.extension.index.repository.search($extensionQuery))
83 + #set ($macroExtensionCategory = $services.localization.render('ckeditor.plugin.macro.notinstalled'))
114 114   #if ($extensions.size > 0)
115 115   #set ($macroExtensionsMap = {})
116 116   #foreach ($extension in $extensions)
... ... @@ -120,28 +120,21 @@
120 120   && $services.security.authorization.hasAccess('admin', $xcontext.userReference, "wiki:$xcontext.database") && $services.extension.isAllowed($extension, "wiki:$xcontext.database")))
121 121   #foreach ($extensionComponent in $extension.getComponents())
122 122   #if ($extensionComponent.roleType == 'org.xwiki.rendering.macro.Macro')
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
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 + }))
145 145   #end
146 146   #end
147 147   #end
... ... @@ -150,6 +150,8 @@
150 150  #end
151 151  
152 152  #macro (maybeGetMacroDescriptor $macroIdAsString)
116 + #set ($xmacro = $NULL)
117 + #set ($macroDescriptor = $NULL)
153 153   #set ($macroId = $services.rendering.resolveMacroId($macroIdAsString))
154 154   #if ($macroId)
155 155   #set ($macroDescriptor = $services.rendering.getMacroDescriptor($macroId))
... ... @@ -158,12 +158,41 @@
158 158   #set ($macroId = $services.rendering.resolveMacroId($macroId.id))
159 159   #set ($macroDescriptor = $services.rendering.getMacroDescriptor($macroId))
160 160   #end
161 - #if ($macroDescriptor)
162 - #getMacroDescriptor($macroDescriptor)
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)
163 163   #end
164 164   #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
165 165  #end
166 166  
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 +
167 167  #macro (getMacroDescriptor $macroDescriptor)
168 168   ## Translate the macro name and description.
169 169   #set ($macroTranslationKey = "rendering.macro.$macroDescriptor.id")
... ... @@ -198,6 +198,13 @@
198 198   #set ($parameterDescriptor = $entry.value)
199 199   ## Translate the parameter name and description.
200 200   #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
201 201   #set ($translatedParameterDescriptor = {
202 202   'id': $parameterDescriptor.id,
203 203   'name': "#maybeTranslate(""${parameterTranslationKey}.name"" $parameterDescriptor.name)",
... ... @@ -207,9 +207,13 @@
207 207   'advanced': $parameterDescriptor.advanced,
208 208   'defaultValue': $parameterDescriptor.defaultValue,
209 209   'type': $parameterDescriptor.displayType,
210 - 'hidden' : $parameterDescriptor.displayHidden,
211 + 'hidden' : $parameterHidden,
211 211   'index': $foreach.index
212 212   })
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
213 213   #set ($translatedParameterDescriptor.caseInsensitive = $translatedParameterDescriptor.type.isEnum())
214 214   #set ($groupDescriptor = $parameterDescriptor.groupDescriptor)
215 215   #if ($groupDescriptor)
... ... @@ -235,7 +235,10 @@
235 235   #end
236 236   #set ($translatedParameterDescriptor.editTemplate = $translatedParameterDescriptor.editTemplate.trim())
237 237   #fixDescriptorType($translatedParameterDescriptor)
238 - #set ($discard = $data.parameterDescriptorMap.put($entry.key, $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))
239 239   #end
240 240   #if ($groupDescriptorTree.groups)
241 241   #set ($data.groupDescriptorTree = $groupDescriptorTree.groups)