Modifications pour le document MacroService
Modifié par Florent Charton le 2026/03/13 11:04
Depuis la version 1.1
modifié par superadmin
sur 2022/06/20 08:49
sur 2022/06/20 08:49
Commentaire de modification :
Install extension [org.xwiki.contrib:application-ckeditor-ui/1.63.1]
À 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]
Résumé
-
Propriétés de la Page (2 modifications, 0 ajouts, 0 suppressions)
Détails
- Propriétés de la Page
-
- Auteur du document
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. superadmin1 +xwiki:XWiki.fcharton - 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 = []) ... ... @@ -84,11 +84,13 @@ 84 84 #set ($macroExtensionsMap = {}) 85 85 #foreach ($extension in $extensions) 86 86 ## TODO: move to a proper generic API to check if an extension can be installed by a given user 87 - # if($services.security.authorization.hasAccess('programming')118 + #set ($extensionInstallAllowed = $services.security.authorization.hasAccess('programming', $xcontext.userReference, $NULL) 88 88 || (($extension.type == 'xar' || $extension.type == 'webjar') 89 - && $services.security.authorization.hasAccess('admin', "wiki:$xcontext.database") && $services.extension.isAllowed($extension, "wiki:$xcontext.database"))) 90 - #foreach ($extensionComponent in $extension.getComponents()) 91 - #if ($extensionComponent.roleType == 'org.xwiki.rendering.macro.Macro') 120 + && $services.security.authorization.hasAccess('admin', $xcontext.userReference, "wiki:$xcontext.database") && $services.extension.isAllowed($extension, "wiki:$xcontext.database"))) 121 + #foreach ($extensionComponent in $extension.getComponents()) 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)) 92 92 #set ($discard = $macroExtensionsList.add({ 93 93 'id' : { 94 94 'id' : $extensionComponent.roleHint ... ... @@ -96,12 +96,17 @@ 96 96 'name': $extensionComponent.roleHint, 97 97 'description': $extension.summary, 98 98 'defaultCategory': '_notinstalled', 132 + 'categories': [{ 133 + 'id' :'_notinstalled', 134 + 'label': $services.localization.render('macroSelector.filter.category.notinstalled') 135 + }], 99 99 'extensionId' : $extension.id.id, 100 100 'extensionVersion' : $extension.id.version.value, 101 101 'extensionType' : $extension.type, 102 102 'extensionRecommended': $extension.recommended, 103 103 'extensionName': $extension.name, 104 - 'extensionSummary': $extension.summary 141 + 'extensionSummary': $extension.summary, 142 + 'extensionInstallAllowed': $extensionInstallAllowed 105 105 })) 106 106 #end 107 107 #end ... ... @@ -112,8 +112,6 @@ 112 112 #end 113 113 114 114 #macro (maybeGetMacroDescriptor $macroIdAsString) 115 - #set ($xmacro = $NULL) 116 - #set ($macroDescriptor = $NULL) 117 117 #set ($macroId = $services.rendering.resolveMacroId($macroIdAsString)) 118 118 #if ($macroId) 119 119 #set ($macroDescriptor = $services.rendering.getMacroDescriptor($macroId)) ... ... @@ -122,41 +122,12 @@ 122 122 #set ($macroId = $services.rendering.resolveMacroId($macroId.id)) 123 123 #set ($macroDescriptor = $services.rendering.getMacroDescriptor($macroId)) 124 124 #end 125 - #else 126 - ## Either the macro id could not be resolved (unlikely) or we are on an older XWiki instance (before 10.10RC1) where 127 - ## we had to use APIs that require programming rights. 128 - #getMacroWithPR($macroIdAsString) 129 - #if ($xmacro) 130 - #set ($macroDescriptor = $xmacro.descriptor) 161 + #if ($macroDescriptor) 162 + #getMacroDescriptor($macroDescriptor) 131 131 #end 132 132 #end 133 - #if ($macroDescriptor) 134 - #getMacroDescriptor($macroDescriptor) 135 - #if ($xmacro) 136 - ## supportsInlineMode was not exposed on the macro descriptor before XWiki 10.10RC1. 137 - #set ($data.supportsInlineMode = $xmacro.supportsInlineMode()) 138 - #end 139 - #end 140 140 #end 141 141 142 -#macro (getMacroWithPR $macroIdAsString) 143 - #set ($xmacro = $NULL) 144 - #try() 145 - #set ($macroIdFactory = $services.component.getInstance('org.xwiki.rendering.macro.MacroIdFactory')) 146 - #set ($macroId = $macroIdFactory.createMacroId($macroIdAsString)) 147 - #set ($macroManager = $services.component.getInstance('org.xwiki.rendering.macro.MacroManager')) 148 - #if ($macroManager.exists($macroId)) 149 - #set ($xmacro = $macroManager.getMacro($macroId)) 150 - #elseif ($macroId.syntax) 151 - ## Try the macro id without the syntax. 152 - #set ($macroId = $macroIdFactory.createMacroId($macroId.id)) 153 - #if ($macroManager.exists($macroId)) 154 - #set ($xmacro = $macroManager.getMacro($macroId)) 155 - #end 156 - #end 157 - #end 158 -#end 159 - 160 160 #macro (getMacroDescriptor $macroDescriptor) 161 161 ## Translate the macro name and description. 162 162 #set ($macroTranslationKey = "rendering.macro.$macroDescriptor.id") ... ... @@ -191,13 +191,6 @@ 191 191 #set ($parameterDescriptor = $entry.value) 192 192 ## Translate the parameter name and description. 193 193 #set ($parameterTranslationKey = "${macroTranslationKey}.parameter.$parameterDescriptor.id") 194 - ## Note: The displayHidden parameter is new in XWiki 12.4RC1 so make sure we set 'hidden' to false if it doesn't 195 - ## exist 196 - #if ("$!parameterDescriptor.displayHidden" != '') 197 - #set ($parameterHidden = $parameterDescriptor.displayHidden) 198 - #else 199 - #set ($parameterHidden = false) 200 - #end 201 201 #set ($translatedParameterDescriptor = { 202 202 'id': $parameterDescriptor.id, 203 203 'name': "#maybeTranslate(""${parameterTranslationKey}.name"" $parameterDescriptor.name)", ... ... @@ -207,13 +207,9 @@ 207 207 'advanced': $parameterDescriptor.advanced, 208 208 'defaultValue': $parameterDescriptor.defaultValue, 209 209 'type': $parameterDescriptor.displayType, 210 - 'hidden' : $parameterHidden, 210 + 'hidden' : $parameterDescriptor.displayHidden, 211 211 'index': $foreach.index 212 212 }) 213 - #if ("$!translatedParameterDescriptor.type" == '') 214 - ## displayType is not available before XWiki 11.0 so we need to fall back on parameterType. 215 - #set ($translatedParameterDescriptor.type = $parameterDescriptor.parameterType) 216 - #end 217 217 #set ($translatedParameterDescriptor.caseInsensitive = $translatedParameterDescriptor.type.isEnum()) 218 218 #set ($groupDescriptor = $parameterDescriptor.groupDescriptor) 219 219 #if ($groupDescriptor) ... ... @@ -239,10 +239,7 @@ 239 239 #end 240 240 #set ($translatedParameterDescriptor.editTemplate = $translatedParameterDescriptor.editTemplate.trim()) 241 241 #fixDescriptorType($translatedParameterDescriptor) 242 - ## Make sure the key is lowercase (for XWiki <9.0). 243 - ## See XWIKI-13990: Inconsistency between Java-based and Wiki-based rendering macros regarding the parameter 244 - ## descriptor map keys 245 - #set ($discard = $data.parameterDescriptorMap.put($entry.key.toLowerCase(), $translatedParameterDescriptor)) 238 + #set ($discard = $data.parameterDescriptorMap.put($entry.key, $translatedParameterDescriptor)) 246 246 #end 247 247 #if ($groupDescriptorTree.groups) 248 248 #set ($data.groupDescriptorTree = $groupDescriptorTree.groups)