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
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
sur 2022/06/28 18:01
Commentaire de modification :
Install extension [org.xwiki.contrib:application-ckeditor-ui/1.64.2]
Résumé
-
Propriétés de la Page (1 modifications, 0 ajouts, 0 suppressions)
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' : $parameter Descriptor.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)