Changes for page Macros

Last modified by Jip-jan Alunkel on April 15, 18:09

From version 2.339
edited by Jip-jan Alunkel
on December 08, 19:03
Change comment: Update document after refactoring.
To version 2.347
edited by Jip-jan Alunkel
on January 02, 16:01
Change comment: Update document after refactoring.

Summary

Details

Page properties
Content
... ... @@ -179,101 +179,32 @@
179 179  #end
180 180  
181 181  #macro(createSelectElement $O_elementData $O_tagName)
182 - <select class="form-select form-control"#if($O_elementData.aria-label) aria-label="${O_elementData.aria-label}"#end#if($O_elementData.data-opener) data-opener="${O_elementData.data-opener}"#end aria-describedby="${O_elementData.id}_helpBlock"#if($O_elementData.required == "true") aria-required="true" required="required" data-error-response-type="${O_elementData.data-error-response-type}"#else aria-required="false"#end#if(${O_elementData.data-set-space}) data-set-space="${O_elementData.data-set-space}"#end#if($O_elementData.data-parent-space) data-parent-space="${O_elementData.data-parent-space}"#end#if($O_elementData.data-select-spaces-to-json) data-select-spaces-to-json="${O_elementData.data-select-spaces-to-json}"#end name="${O_elementData.id}" id="${O_elementData.id}">
182 + #set($currentSpaceName = $services.model.resolveDocument('', 'default', $doc.documentReference.lastSpaceReference).parent.getName())
183 + <select class="form-select form-control"#if($O_elementData.aria-label) aria-label="${O_elementData.aria-label}"#end#if($O_elementData.data-opener) data-opener="${O_elementData.data-opener}"#end aria-describedby="${O_elementData.id}_helpBlock"#if($O_elementData.required == "true") aria-required="true" required="required" data-error-response-type="${O_elementData.data-error-response-type}"#else aria-required="false"#end#if(${O_elementData.data-set-space}) data-set-space="${O_elementData.data-set-space}" data-parent-space="${currentSpaceName}"#end name="${O_elementData.id}" id="${O_elementData.id}">
183 183   #if($O_elementData.placeholder)
184 - #if($O_elementData.select-json && $O_elementData.select-json.keySet().contains($O_elementData.value))
185 - #else
185 + #if($O_elementData.select-json && !$O_elementData.select-json.keySet().contains($O_elementData.value))
186 186   <option value="" disabled=""#if(!$O_elementData.value) selected=""#end hidden="hidden">${O_elementData.placeholder}</option>
187 187   #end
188 188   #end
189 - #set($mydoc = $xwiki.getDocument('assets.pagemaker.classes.pagemakerClass'))
190 - #if($mydoc.isNew() && $hasProgramming)
191 - #set ($myinternaldoc = $mydoc.getDocument())
192 - #set ($myclass = $myinternaldoc.getXClass())
193 - #set ($discard = $myclass.addTextField("pmSpaceOrder", "pageMaker space order", 10))
194 - #set ($discard = $mydoc.save())
189 +
190 + ## Get the JSON data.
191 + #set($json = {})
192 + #if($O_elementData.select-json.keySet())
193 + #set($json = $O_elementData.select-json)
194 + #else
195 + #set($jsondoc = $xwiki.getDocument($O_elementData.select-json))
196 + #set($jsoncontent = $jsontool.fromString($jsontool.serialize($jsondoc.getContent())))
197 + #set($json = $jsontool.parse($jsoncontent))
195 195   #end
196 - #set($removedNr = 0)
197 197  
198 - #if($O_elementData.select-space-reference)
199 - #set($space = $O_elementData.select-space-reference)
200 - #set($codespace = "")
201 - #if($xwiki.getSpaces().contains("${space}.${space}Code"))
202 - #set($codespace = "${space}Code")
203 - #elseif($xwiki.getSpaces().contains("${space}.Code"))
204 - #set($codespace = "Code")
205 - #elseif($xwiki.getSpaces().contains("${space}.code"))
206 - #set($codespace = "code")
207 - #end
208 -
209 - #if(!$isGuest)
210 - ## Add XObjects to current child spaces so the spaces can be queried on the XObject to generate the select options.
211 - #set($nameExcludeRef = $codespace)
212 - #set($spaceAbsRef = $space.replaceAll('([%_!])', '!$1'))
213 - #set($query_add_xobj = $services.query.xwql("select space.name from XWikiSpace as space where space.parent = :space and space.name <> :nameExclude and space.name <> 'WebPreferences' order by space.name"))
214 - #set($result_add_xobj = $query_add_xobj.bindValue('space', $spaceAbsRef).bindValue('nameExclude', $nameExcludeRef).addFilter('unique').execute())
215 - #foreach($item in $result_add_xobj)
216 - #set($doc = $xwiki.getDocument("${space}.${item}.WebHome"))
217 - #set($rightXObj = $doc.getObject("assets.pagemaker.classes.pagemakerClass", true))
218 - #set($discard = $rightXObj.set('pmSpaceOrder', $foreach.count))
219 - #set($discard = $doc.save())
220 - #end
221 - #end
222 -
223 - #set($spaceExcludeRef = $space.replaceAll('([%_!])', '!$1').concat(".${codespace}"))
224 - #set($spaceLikeRef = $space.replaceAll('([%_!])', '!$1').concat('.%'))
225 - #set($query = $services.query.xwql("from doc.object(assets.pagemaker.classes.pagemakerClass) met where doc.space like :space and doc.space <> :spaceExclude and doc.name <> 'WebPreferences' order by met.pmSpaceOrder asc"))
226 - #set($result = $query.bindValue('space', $spaceLikeRef).bindValue('spaceExclude', $spaceExcludeRef).addFilter('unique').execute())
227 -
228 - ## Generate the select options from all child spaces that have the 'assets.pagemaker.pagemakerClass' XClass.
229 - ## The order is still random but the JSON can be extracted from the console with the 'select-spaces-to-json' attribute.
230 - #foreach($item in $result)
231 - #set($doc = $xwiki.getDocument($item))
232 - <option value="$doc.space">$doc.getTitle()</option>
233 - #end
234 - #elseif($O_elementData.select-json)
235 - #set($json = {})
236 - #if($O_elementData.select-json.keySet())
237 - #set($json = $O_elementData.select-json)
238 - #else
239 - #set($jsondoc = $xwiki.getDocument($O_elementData.select-json))
240 - #set($jsoncontent = $jsontool.fromString($jsontool.serialize($jsondoc.getContent())))
241 - #set($json = $jsontool.parse($jsoncontent))
242 - #end
243 - #foreach($key in $json.keySet())
244 - #if(!$isGuest && $O_elementData.select-json-to-spaces == "true")
245 - #set($spaceDocTitle = $json.get($key))
246 - #set($spaceDoc = $xwiki.getDocument("${key}.WebHome")) ## Fetch doc or create one if it does not exist by this name.
247 - #set($spaceXObj = $spaceDoc.getObject("assets.pagemaker.classes.pagemakerClass", true)) ## Get or create the needed object.
248 - #set($order_error = ($spaceXObj.getProperty('pmSpaceOrder').value != $foreach.count))
249 - #set($title_error = ($spaceDoc.getTitle() != $spaceDocTitle))
250 - #if($spaceDoc.isNew()) ## Doc did not exist so spaceDoc needs a title and a default locale.
251 - #set($discard = $spaceDoc.setTitle($spaceDocTitle)) ## Title.
252 - #set($discard = $spaceDoc.setDefaultLocale("en")) ## Locale.
253 - #set($discard = $spaceXObj.set("pmSpaceOrder", $foreach.count)) ## Set the property with the (correct) value.
254 - #set($discard = $spaceDoc.save())
255 - #else
256 - #if($title_error) ## Doc did exist but the title did not match with the JSON value.
257 - #set($discard = $spaceDoc.setTitle($spaceDocTitle))
258 - #end
259 - #if($order_error) ## Either the property does not exist or the value is incorrect.
260 - #set($discard = $spaceXObj.set("pmSpaceOrder", $foreach.count)) ## Set the property with the (correct) value.
261 - #end
262 - #if($title_error || $order_error) ## Save only if changed
263 - #set($discard = $spaceDoc.save())
264 - #end
265 - #end
266 - #end
200 + ## Loop through the JSON data to create the options.
201 + #foreach($key in $json.keySet())
267 267   <option value="$key"#if($O_elementData.value=="$key") selected="selected"#end>$json[$key]</option>
268 - #end
269 269   #end
270 270   </select>
271 - #if($removedNr > 0)
272 - $removedNr pages had the XObject <span class="terminal">${removeXObj}</span> removed.
273 - #end
274 274  #end
275 275  #macro(createTextElement $O_elementData $O_tagName)
276 - <input type="text" class="form-control full" name="${O_elementData.id}" id="${O_elementData.id}"#if($O_elementData.value) value="$O_elementData.value"#end autocomplete="off"#if($O_elementData.placeholder) placeholder="${O_elementData.placeholder}"#end aria-describedby="${O_elementData.id}_helpBlock"#if($O_elementData.required == "true") aria-required="true" required="required" data-error-response-type="${O_elementData.data-error-response-type}"#else aria-required="false"#end#if($O_elementData.aria-label) aria-label="${O_elementData.aria-label}"#end#if($O_elementData.data-pattern) data-pattern="${O_elementData.data-pattern}"#end#if($O_elementData.data-auto-first-capital) data-auto-first-capital="${O_elementData.data-auto-first-capital}"#end#if($O_elementData.data-query-type) data-query-type="${O_elementData.data-query-type}" data-query-reference="${O_elementData.data-query-reference}"#end#if($O_elementData.data-query-list-type) data-query-list-type="${O_elementData.data-query-list-type}"#end#if($O_elementData.data-query-list-header) data-query-list-header="${O_elementData.data-query-list-header}"#end#if($O_elementData.data-query-list-contents) data-query-list-contents="${O_elementData.data-query-list-contents}"#end#if($O_elementData.data-query-list-editable) data-query-list-editable="${O_elementData.data-query-list-editable}"#end#if($O_elementData.data-create-page) data-create-page="${O_elementData.data-create-page}"#end#if(${O_elementData.data-set-space}) data-set-space="${O_elementData.data-set-space}"#end#if($O_elementData.data-parent-space) data-parent-space="${O_elementData.data-parent-space}"#end#if($O_elementData.data-query-scope) data-query-scope="${O_elementData.data-query-scope}"#end#if($O_elementData.data-create-xobj) data-create-xobj="${O_elementData.data-create-xobj}"#end#if($O_elementData.data-xobj-classname) data-xobj-classname="${O_elementData.data-xobj-classname}"#end#if($O_elementData.data-xobj-fieldname) data-xobj-fieldname="${O_elementData.data-xobj-fieldname}"#end#if($O_elementData.data-ajax-check) data-ajax-check="${O_elementData.data-ajax-check}"#end#if($O_elementData.data-modal-input) data-modal-input="${O_elementData.data-modal-input}"#end#if($O_elementData.data-default-value) data-default-value="${O_elementData.data-default-value}"#end>
207 + <input type="text" class="form-control full" name="${O_elementData.id}" id="${O_elementData.id}"#if($O_elementData.value) value="$O_elementData.value"#end autocomplete="off"#if($O_elementData.placeholder) placeholder="${O_elementData.placeholder}"#end aria-describedby="${O_elementData.id}_helpBlock"#if($O_elementData.required == "true") aria-required="true" required="required" data-error-response-type="${O_elementData.data-error-response-type}"#else aria-required="false"#end#if($O_elementData.aria-label) aria-label="${O_elementData.aria-label}"#end#if($O_elementData.data-pattern) data-pattern="${O_elementData.data-pattern}"#end#if($O_elementData.data-auto-first-capital) data-auto-first-capital="${O_elementData.data-auto-first-capital}"#end#if($O_elementData.data-query-type) data-query-type="${O_elementData.data-query-type}" data-query-reference="${O_elementData.data-query-reference}"#end#if($O_elementData.data-page-name) data-page-name="${O_elementData.data-page-name}"#end#if($O_elementData.data-query-list-type) data-query-list-type="${O_elementData.data-query-list-type}"#end#if($O_elementData.data-query-list-header) data-query-list-header="${O_elementData.data-query-list-header}"#end#if($O_elementData.data-query-list-contents) data-query-list-contents="${O_elementData.data-query-list-contents}"#end#if($O_elementData.data-query-list-editable) data-query-list-editable="${O_elementData.data-query-list-editable}"#end#if($O_elementData.data-create-page) data-create-page="${O_elementData.data-create-page}"#end#if(${O_elementData.data-set-space}) data-set-space="${O_elementData.data-set-space}"#end#if($O_elementData.data-parent-space) data-parent-space="${O_elementData.data-parent-space}"#end#if($O_elementData.data-query-scope) data-query-scope="${O_elementData.data-query-scope}"#end#if($O_elementData.data-create-xobj) data-create-xobj="${O_elementData.data-create-xobj}"#end#if($O_elementData.data-xobj-classname) data-xobj-classname="${O_elementData.data-xobj-classname}"#end#if($O_elementData.data-xobj-fieldname) data-xobj-fieldname="${O_elementData.data-xobj-fieldname}"#end#if($O_elementData.data-ajax-check) data-ajax-check="${O_elementData.data-ajax-check}"#end#if($O_elementData.data-modal-input) data-modal-input="${O_elementData.data-modal-input}"#end#if($O_elementData.data-default-value) data-default-value="${O_elementData.data-default-value}"#end>
277 277   #if($O_elementData.data-modal-input)
278 278   <a href="#" class="btn btn-default" data-toggle="modal" data-target="#${O_elementData.id}Modal">Create</a>
279 279   #end