Changes for page Main

Last modified by Administrator on 2026/02/17 22:15

From version 3.1
edited by Administrator
on 2020/01/07 18:45
Change comment: Install extension [org.xwiki.platform:xwiki-platform-appwithinminutes-ui/11.10.2]
To version 9.1
edited by Administrator
on 2026/02/17 22:15
Change comment: Install extension [org.xwiki.platform:xwiki-platform-appwithinminutes-ui/17.10.3]

Summary

Details

Page properties
Content
... ... @@ -66,7 +66,7 @@
66 66   #foreach ($category in $services.query.xwql($categoryListStatement).execute())
67 67   #set ($categoryDoc = $xwiki.getDocument($category))
68 68   <li>
69 - <div class="category">$categoryDoc.plainTitle</div>
69 + <div class="category">$escapetool.xml($categoryDoc.plainTitle)</div>
70 70   #set ($formFieldsForCategoryStatement = "from doc.object($formFieldClassName) as field where field.category = :category order by field.priority")
71 71   #set ($formFieldsForCategoryQuery = $services.query.xwql($formFieldsForCategoryStatement).bindValue('category', $category))
72 72   <ul>
... ... @@ -81,7 +81,7 @@
81 81   #else
82 82   #set ($formFieldIconURL = $formFieldDoc.getAttachmentURL($formFieldIcon))
83 83   #end
84 - #set ($formFieldIconRendered = "<img src='$formFieldIconURL' alt='$escapetool.xml($formFieldDoc.plainTitle)' class='icon' />")
84 + #set ($formFieldIconRendered = "<img src='$escapetool.xml($formFieldIconURL)' alt='$escapetool.xml($formFieldDoc.plainTitle)' class='icon' />")
85 85   #end
86 86   <li class="field">
87 87   $formFieldIconRendered
... ... @@ -97,10 +97,12 @@
97 97   #set ($fieldURL = $doc.getURL('edit', $escapetool.url({
98 98   'xpage': 'plain',
99 99   'sheet': 'AppWithinMinutes.ClassEditSheet',
100 + 'form_token': $services.csrf.getToken(),
101 + 'template': 'AppWithinMinutes.ClassTemplate',
100 100   'field': $formFieldDoc.fullName,
101 101   'xeditmode': 'text'
102 102   })))
103 - <input type="hidden" value="$fieldURL" class="data"/>
105 + <input type="hidden" value="$escapetool.xml($fieldURL)" class="data"/>
104 104   </li>
105 105   #end
106 106   </ul>
... ... @@ -188,9 +188,7 @@
188 188   ["#pageLink($sheetReference)"])
189 189   </span>
190 190   #else
191 - <span class="warningmessage">
192 - $services.localization.render('platform.appwithinminutes.classEditorMultipleSheetsWarning')
193 - </span>
193 + #inlineWarning($services.localization.render('platform.appwithinminutes.classEditorMultipleSheetsWarning'))
194 194   #end
195 195   </dd>
196 196   <dt>
... ... @@ -274,6 +274,7 @@
274 274   * Displays a configuration property of a class field. This macro can also be used to display a property of an object.
275 275   *#
276 276  #macro (displayFieldProperty $property $prefix $field)
277 + ## This 'displayFormType' property only exists for boolean fields.
277 277   #set ($displayFormType = $property.getProperty('displayFormType'))
278 278   #if ($property.classType == 'Boolean' && (!$displayFormType || $displayFormType.value == 'checkbox'))
279 279   <dt>
... ... @@ -387,7 +387,6 @@
387 387   * Display the edit class form.
388 388   *#
389 389  #macro (displayEditForm)
390 - #set ($discard = $xwiki.jsfx.use('js/scriptaculous/dragdrop.js'))
391 391   #set ($discard = $xwiki.jsx.use('AppWithinMinutes.ClassEditSheet'))
392 392   #set ($discard = $xwiki.ssx.use('AppWithinMinutes.ClassEditSheet'))
393 393   #set ($discard = $xwiki.ssx.use('AppWithinMinutes.ClassSheetGenerator'))
... ... @@ -437,7 +437,7 @@
437 437   #try()
438 438   #set ($discard = $copyAsJob.join())
439 439   #set ($copyAsJobStatus = $services.job.getJobStatus($copyAsJob.request.id))
440 - #set ($errorMessage = $copyAsJobStatus.logTail.getFirstLogEvents('ERROR').toString())
440 + #set ($errorMessage = $copyAsJobStatus.logTail.getFirstLogEvent('ERROR').toString())
441 441   #end
442 442   #end
443 443  #end
... ... @@ -617,6 +617,10 @@
617 617   #set($discard = $sheetDoc.setParent($doc.documentReference.name))
618 618   #set($discard = $sheetDoc.setContent($doc.getRenderedContent($sheetGeneratorDoc.content,
619 619   $sheetGeneratorDoc.syntax.toIdString(), 'plain/1.0')))
620 + ## We assume for now that the output produced by the sheet generator uses the same syntax as the code of the sheet
621 + ## generator. We have to set the syntax because the default wiki syntax (used when creating new wiki pages) could
622 + ## be different than the one used by the sheet generator.
623 + #set($discard = $sheetDoc.setSyntax($sheetGeneratorDoc.syntax))
620 620   #set($discard = $sheetDoc.setHidden(true))
621 621   #set($discard = $sheetDoc.save($services.localization.render('platform.appwithinminutes.classEditorSheetSaveComment'),
622 622   $minorEdit))
... ... @@ -642,6 +642,7 @@
642 642   #set($translationsGeneratorDoc = $xwiki.getDocument('AppWithinMinutes.ClassTranslationsGenerator'))
643 643   #set($discard = $translationsDoc.setContent($doc.getRenderedContent($translationsGeneratorDoc.content,
644 644   $translationsGeneratorDoc.syntax.toIdString(), 'plain/1.0')))
649 + #set($discard = $translationsDoc.setSyntaxId('plain/1.0'))
645 645   #set($discard = $translationsDoc.setHidden(true))
646 646   #set($discard = $translationsDoc.save(
647 647   $services.localization.render('platform.appwithinminutes.classEditorTranslationsSaveComment'),
... ... @@ -661,7 +661,7 @@
661 661   #updateAndSaveTranslations
662 662   #if ($action == 'save')
663 663   #if ($errorMessage)
664 - <div class="box errormessage">$errorMessage</div>
669 + #error($errorMessage)
665 665   #elseif ("$!request.wizard" == 'true')
666 666   ## Redirect to next wizard step.
667 667   #set ($className = $stringtool.removeEnd($doc.fullName, 'Class'))
... ... @@ -672,6 +672,7 @@
672 672   })
673 673   #if (!$xwiki.exists($templateProviderReference))
674 674   #set ($discard = $queryString.putAll({
680 + 'form_token': $services.csrf.getToken(),
675 675   'template': 'XWiki.TemplateProviderTemplate',
676 676   'parent': $doc.fullName
677 677   }))
XWiki.JavaScriptExtension[2]
Code
... ... @@ -300,8 +300,10 @@
300 300   var label = previousDT.down('label');
301 301   prettyNameInput.title = label.textContent || label.innerText;
302 302   }
303 + prettyNameInput.ariaLabel = '$escapetool.javascript($services.localization.render('platform.appwithinminutes.classEditorFieldPrettyNameToolTip'))';
303 303   // Replace the preview label with the pretty name input.
304 304   var previewLabel = field.getViewer().down('label');
306 + // We unset the for attribute, so that this label will not be set implicitely OR explicitely anymore.
305 305   previewLabel.writeAttribute('for', '');
306 306   previewLabel.removeChild(previewLabel.lastChild);
307 307   previewLabel.insert(prettyNameInput);
... ... @@ -326,10 +326,12 @@
326 326   _enhanceFieldDefaultValue : function(event) {
327 327   var field = event.memo.field;
328 328   var fieldName = field.getName();
329 - field.getViewer().select('input[type=text]', 'textarea').each(function(input) {
331 + // We select the default field input and update it.
332 + field.getViewer().select('dd :input').each(function(input) {
330 330   if (!input.title && input.name.endsWith('_0_' + fieldName)) {
331 331   input.title = '$escapetool.javascript($services.localization.render('platform.appwithinminutes.classEditorFieldDefaultValueToolTip'))';
332 332   }
336 + input.ariaLabel = '$escapetool.javascript($services.localization.render('platform.appwithinminutes.classEditorFieldDefaultValueToolTip'))';
333 333   });
334 334   },
335 335   _onSave : function() {
... ... @@ -364,7 +364,8 @@
364 364   if (hintInput) {
365 365   hintInput.addClassName('xHint');
366 366   if (!hintInput.title) {
367 - hintInput.title = 'Hint';
371 + hintInput.title = '$escapetool.javascript($services.localization.render('platform.appwithinminutes.classEditorFieldHintToolTip'))';
372 + hintInput.ariaLabel = '$escapetool.javascript($services.localization.render('platform.appwithinminutes.classEditorFieldHintToolTip'))';
368 368   }
369 369   // Move the hint input below the pretty name input, in the field viewer.
370 370   var dd = hintInput.up('dd');
... ... @@ -515,11 +515,7 @@
515 515  }(XWiki || {}));
516 516  
517 517  (function() {
518 - function init() {
519 - var form = $('inline');
520 - if (!form) {
521 - return false;
522 - }
523 + function initForm(form) {
523 523   // Let the sheet handle the form submit. The form is submitted by default to the preview action which dispatches the
524 524   // request to the save action if the save button is detected on the request parameters. By submitting to the edit
525 525   // action the edit sheet is evaluated and thus it can handle the save by itself.
... ... @@ -557,9 +557,18 @@
557 557   // Make the palette and the canvas live.
558 558   new XWiki.FormFieldPalette('palette');
559 559   new XWiki.FormCanvas('canvas');
561 + }
560 560  
561 - return true;
563 + function init() {
564 + var form = $('inline');
565 + if (form) {
566 + require(['scriptaculous/dragdrop'], function() {
567 + initForm(form);
568 + });
569 + }
570 + return form;
562 562   }
572 +
563 563   (XWiki.domIsLoaded && init()) || document.observe('xwiki:dom:loaded', init);
564 564  }).call();
565 565