Modifications pour le document VelocityMacros

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

Depuis la version 1.1
modifié par superadmin
sur 2022/06/20 08:49
Commentaire de modification : Install extension [org.xwiki.contrib:application-ckeditor-ui/1.63.1]
À la version 3.1
modifié par Florent Charton
sur 2025/07/04 23:28
Commentaire de modification : Install extension [org.xwiki.platform:xwiki-platform-ckeditor-ui/16.10.9]

Résumé

Détails

Propriétés de la Page
Auteur du document
... ... @@ -1,1 +1,1 @@
1 -XWiki.superadmin
1 +xwiki:XWiki.fcharton
Contenu
... ... @@ -10,7 +10,8 @@
10 10   #if ($toHTML)
11 11   #set ($source = {
12 12   'documentReference': $doc.documentReference,
13 - 'syntax': $sourceSyntax
13 + 'syntax': $sourceSyntax,
14 + 'restricted' : $request.wysiwygRestricted
14 14   })
15 15   #if ($fromHTML)
16 16   #set ($source.html = $text)
... ... @@ -77,14 +77,15 @@
77 77   ## editor is used.
78 78   #set ($macro.previousDisplayMode = 'edit')
79 79   #end
81 + #set ($restricted = "$!source.restricted" == 'true')
80 80   #if ($source.html)
81 - #set ($html = $services.wysiwyg.parseAndRender($source.html, $source.syntax, $source.documentReference))
83 + #set ($html = $services.wysiwyg.parseAndRender($source.html, $source.syntax, $source.documentReference, $restricted))
82 82   #if ("$!html" == '' && $html != '')
83 83   ## Before XWiki 11.9RC1 (see XWIKI-16737)
84 84   #set ($html = $services.wysiwyg.parseAndRender($source.html, $source.syntax.toIdString()))
85 85   #end
86 86   #else
87 - #set ($html = $services.wysiwyg.toAnnotatedXHTML($source.content, $source.syntax, $source.documentReference))
89 + #set ($html = $services.wysiwyg.toAnnotatedXHTML($source.content, $source.syntax, $source.documentReference, $restricted))
88 88   #if ("$!html" == '' && $html != '')
89 89   ## Before XWiki 11.9RC1 (see XWIKI-16737)
90 90   #set ($html = $services.wysiwyg.toAnnotatedXHTML($source.content, $source.syntax.toIdString()))
... ... @@ -104,10 +104,6 @@
104 104   #set ($discard = $xwiki.linkx.use($url, {'type': 'text/css', 'rel': 'stylesheet'}))
105 105  #end
106 106  
107 -#macro (importCKEditorCSS $path $evaluate)
108 - #ckeditor_importCSS('org.xwiki.contrib' 'application-ckeditor-webjar' $path $evaluate)
109 -#end
110 -
111 111  #macro (importCKEditorResources)
112 112   #set ($discard = $xwiki.ssx.use('CKEditor.EditSheet'))
113 113   ## Add the version of each JavaScript dependency of CKEditor Integration to the URL used to load the CKEditor in order
... ... @@ -114,7 +114,7 @@
114 114   ## to make sure the browser cache is invalidated when one of these versions changes (e.g. when we upgrade XWiki or one
115 115   ## of these dependencies but the CKEditor version remains the same).
116 116   #set ($discard = $xwiki.jsx.use('CKEditor.EditSheet', {
117 - 'v': $services.extension.installed.getInstalledExtension('org.xwiki.contrib:application-ckeditor-ui',
115 + 'v': $services.extension.installed.getInstalledExtension('org.xwiki.platform:xwiki-platform-ckeditor-ui',
118 118   "wiki:$xcontext.database").version.value,
119 119   'xwiki-version': $services.extension.core.getCoreExtension(
120 120   'org.xwiki.platform:xwiki-platform-tree-webjar').version.value,
... ... @@ -123,8 +123,7 @@
123 123   'bs3typeahead-version': $services.extension.installed.getInstalledExtension('org.webjars.npm:bootstrap-3-typeahead',
124 124   "wiki:$xcontext.database").version.value
125 125   }))
126 - #importCKEditorCSS('plugins/xwiki-resource/resourcePicker.min.css' true)
127 - #importCKEditorCSS('plugins/xwiki-macro/macroWizard.min.css' true)
124 + #ckeditor_importCSS('org.xwiki.platform' 'xwiki-platform-ckeditor-plugins' 'webjar.bundle.min.css' true)
128 128   ## Tree styles needed for the document/attachment tree picker.
129 129   #set ($discard = $xwiki.linkx.use($services.webjars.url('org.xwiki.platform:xwiki-platform-tree-webjar', 'tree.min.css',
130 130   {'evaluate': true}), {'type': 'text/css', 'rel': 'stylesheet'}))
... ... @@ -134,40 +134,55 @@
134 134  
135 135  #macro (ckeditor $parameters)
136 136   #importCKEditorResources
137 - #set ($sourceDocumentReference = $parameters.attributes.get('data-sourceDocumentReference'))
138 - ## Use the current document as source document, if possible, because it may contain unsaved changes (e.g. changes
139 - ## coming from a template specified in the URL or from other URL parameters). This is important for instance in order
140 - ## to ensure that for new (unsaved) documents we use the syntax that has been copied from the template and not the
141 - ## default wiki syntax.
142 - #if (!$sourceDocumentReference || $sourceDocumentReference.equals($tdoc.documentReference))
143 - #set ($sourceDocument = $tdoc)
144 - #set ($sourceDocumentReference = $tdoc.documentReference)
145 - #else
146 - #set ($sourceDocument = $xwiki.getDocument($sourceDocumentReference))
147 - #end
134 + ##
148 148   #set ($escapedName = $escapetool.xml($parameters.attributes.name))
149 149   <input value="$!escapedName" name="RequiresHTMLConversion" type="hidden"/>
150 - <input value="$!escapetool.xml($sourceDocument.syntax.toIdString())" name="$!{escapedName}_syntax" type="hidden"/>
137 + ##
138 + #set ($syntaxId = $parameters.attributes.get('data-syntax'))
139 + <input value="$!escapetool.xml($syntaxId)" name="$!{escapedName}_syntax" type="hidden"/>
140 + ##
151 151   ## Chrome doesn't cache the enabled/disabled state of the form fields so we must store this state in the value of
152 152   ## another form field. For instance, the enabled/disabled state of the RequiresHTMLConversion hidden input
153 153   ## determines which editor mode (WYSIWYG vs. Source) is loaded initially.
154 154   ## See CKEDITOR-34: Wiki syntax gets escaped when you click "Back" in the browser
155 155   <input value="" name="$!{escapedName}_cache" type="hidden" class="cache"/>
146 + ##
156 156   #set ($discard = $parameters.attributes.putAll({
157 157   'class': "$!parameters.attributes.get('class') ckeditor-textarea loading",
158 - 'spellcheck': false,
159 - 'data-sourceDocumentSyntax': $sourceDocument.syntax.toIdString()
149 + 'spellcheck': false
160 160   }))
151 + ##
152 + #set ($sourceDocumentReference = $parameters.attributes.get('data-sourceDocumentReference'))
153 + #if (!$sourceDocumentReference)
154 + #set ($sourceDocumentReference = $tdoc.documentReference)
155 + #end
156 + #set ($source = {
157 + 'documentReference': $sourceDocumentReference,
158 + 'syntax': $syntaxId,
159 + 'content': $parameters.content,
160 + 'restricted': $parameters.attributes.data-restricted
161 + })
162 + ##
163 + ## Disable the file upload and drag & drop when the current user doesn't have edit right on the source document, if
164 + ## the source is restricted. This is the case for instance when an user with comment right adds a comment to a page
165 + ## they don't have edit right on. They are allowed to add the comment but they can't upload files because that
166 + ## requires edit right. We check if the source is in restricted mode because in some cases (such as for Change Request
167 + ## Application) we want to allow file upload even if the current user doesn't have edit right on the source document.
168 + #if ($source.restricted == 'true' && !$services.security.authorization.hasAccess('edit', $source.documentReference))
169 + #set ($parameters.attributes.data-upload-disabled = 'true')
170 + #end
171 + ## We use the velocity template context to convey the startupFocus parameter to CKEditor.
172 + #if ($wysiwygEditorConfig.startupFocus)
173 + #set ($parameters.attributes.data-startup-focus = 'true')
174 + ## We make sure to clear this context so that it doesn't interfere with CKEditors opened later.
175 + #set ($wysiwygEditorConfig.startupFocus = false)
176 + #end
177 + ##
161 161   <textarea
162 162   #foreach ($entry in $parameters.attributes.entrySet())
163 163   $entry.key="$!escapetool.xml($entry.value)"
164 164   #end
165 165   ## We render the content sheet at the end because the edited content can overwrite the variables used by this macro.
166 - #set ($source = {
167 - 'documentReference': $sourceDocumentReference,
168 - 'syntax': $sourceDocument.syntax,
169 - 'content': $parameters.content
170 - })
171 171   #set ($content = "#ckeditor_renderContentSheet($source)")
172 172   >$!escapetool.xml($content)</textarea>
173 173  #end
... ... @@ -174,7 +174,7 @@
174 174  
175 175  #macro (displayCKEditorConfigProperty $configDoc $propName $action)
176 176   <dt>
177 - <label>$configDoc.displayPrettyName($propName)</label>
189 + <label for="CKEditor.ConfigClass_$escapetool.xml($configDoc.getObject("CKEditor.ConfigClass").getNumber())_${propName}">$configDoc.displayPrettyName($propName)</label>
178 178   <span class="xHint">$escapetool.xml($services.localization.render("CKEditor.ConfigClass_${propName}.hint"))</span>
179 179   </dt>
180 180   <dd>#displayCKEditorConfigPropertyValue($configDoc $propName $action)</dd>
... ... @@ -192,10 +192,7 @@
192 192  #end
193 193  
194 194  #macro (displayCKEditorConfigPropertyValue $configDoc $propName $action)
195 - #set ($output = $configDoc.display($propName, $action))
196 - #set ($output = $stringtool.removeStart($output, '{{html clean="false" wiki="false"}}'))
197 - #set ($output = $stringtool.removeEnd($output, '{{/html}}'))
198 - $output
207 + #unwrapXPropertyDisplay($configDoc.display($propName, $action))
199 199  #end
200 200  
201 201  #macro (displayCKEditorConfig $configDoc $action)