Modifications pour le document LiveTableEditSheet
Modifié par superadmin le 2021/12/12 21:57
Commentaire de modification :
Install extension [org.xwiki.platform:xwiki-platform-appwithinminutes-ui-8.2]
Résumé
Détails
- Propriétés de la Page
-
- Titre
-
... ... @@ -1,0 +1,1 @@ 1 +#if($doc.fullName=='AppWithinMinutes.LiveTableEditSheet')LiveTable Edit Sheet#{else}#evaluate($doc.title)#end - Auteur du document
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. superadmin1 +XWiki.adminPolx - Syntaxe
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki 2. 11 +XWiki 2.0 - Contenu
-
... ... @@ -1,193 +5,111 @@ 1 -{{include reference="XWiki.TemplateProviderMacros" /}} 2 - 3 -{{include reference="AppWithinMinutes.VelocityMacros" /}} 4 - 5 5 {{velocity output="false"}} 6 -#macro (listAvailableColumns $classReference) 2 +#macro(listAvailableColumns) 3 + {{html}} 7 7 <select id="availableColumns"> 8 - #set Fields= $xwiki.getDocument($classReference).getxWikiClass().properties)9 - # if($classFields.size()> 0)10 - <optgroup label="$escapetool.xml($services.localization.render(11 - 12 - #foreach 5 + #set($className = "$!liveTableObj.getValue('class')") 6 + #set($classFields = $xwiki.getDocument($className).getxWikiClass().properties) 7 + #if($classFields.size() > 0) 8 + <optgroup label="$escapetool.xml($services.localization.render('platform.appwithinminutes.liveTableEditorClassFieldColumnGroupLabel'))" id="classFields"> 9 + #foreach($field in $classFields) 13 13 <option value="$field.name">$escapetool.xml($field.translatedPrettyName)</option> 14 14 #end 15 15 </optgroup> 16 16 #end 17 - <optgroup label="$escapetool.xml($services.localization.render( 18 - 'platform.appwithinminutes.liveTableEditorGenericColumnGroupLabel'))"> 19 - #foreach ($entry in $genericColumns.entrySet()) 20 - <option value="$entry.key" title="$escapetool.xml($entry.value.get(1))"> 21 - $escapetool.xml($entry.value.get(0)) 22 - </option> 14 + <optgroup label="$escapetool.xml($services.localization.render('platform.appwithinminutes.liveTableEditorGenericColumnGroupLabel'))"> 15 + #foreach($entry in $genericColumns.entrySet()) 16 + <option value="$entry.key" title="$escapetool.xml($entry.value.get(1))">$escapetool.xml($entry.value.get(0))</option> 23 23 #end 24 24 </optgroup> 25 25 </select> 26 - <a href="#addColumn" class="addColumn" title="$services.localization.render( 27 - 'platform.appwithinminutes.liveTableEditorAddColumnHint')">$services.icon.renderHTML('add')</a> 20 + {{/html}} 28 28 #end 29 29 30 -#macro (displayHelpPanel) 31 - #set ($genericColumns = { 32 - 'doc.title': [ 33 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocTitleColumnName'), 34 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocTitleColumnDescription') 35 - ], 36 - 'doc.name': [ 37 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocNameColumnName'), 38 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocNameColumnDescription') 39 - ], 40 - 'doc.location': [ 41 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocLocationColumnName'), 42 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocLocationColumnDescription') 43 - ], 44 - 'doc.author': [ 45 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocAuthorColumnName'), 46 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocAuthorColumnDescription') 47 - ], 48 - 'doc.creator': [ 49 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocCreatorColumnName'), 50 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocCreatorColumnDescription') 51 - ], 52 - 'doc.date': [ 53 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocDateColumnName'), 54 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocDateColumnDescription') 55 - ], 56 - 'doc.creationDate': [ 57 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocCreationDateColumnName'), 58 - $services.localization.render('platform.appwithinminutes.liveTableEditorDocCreationDateColumnDescription') 59 - ], 60 - '_actions': [ 61 - $services.localization.render('platform.appwithinminutes.liveTableEditorActionsColumnName'), 62 - $services.localization.render('platform.appwithinminutes.liveTableEditorActionsColumnDescription') 63 - ], 64 - '_attachments': [ 65 - $services.localization.render('platform.appwithinminutes.liveTableEditorAttachmentsColumnName'), 66 - $services.localization.render('platform.appwithinminutes.liveTableEditorAttachmentsColumnDescription') 67 - ], 68 - '_images': [ 69 - $services.localization.render('platform.appwithinminutes.liveTableEditorImagesColumnName'), 70 - $services.localization.render('platform.appwithinminutes.liveTableEditorImagesColumnDescription') 71 - ] 23 +#macro(displayHelpPanel) 24 + #set($genericColumns = { 25 + 'doc.title': [$services.localization.render('platform.appwithinminutes.liveTableEditorDocTitleColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorDocTitleColumnDescription')], 26 + 'doc.name': [$services.localization.render('platform.appwithinminutes.liveTableEditorDocNameColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorDocNameColumnDescription')], 27 + 'doc.author': [$services.localization.render('platform.appwithinminutes.liveTableEditorDocAuthorColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorDocAuthorColumnDescription')], 28 + 'doc.creator': [$services.localization.render('platform.appwithinminutes.liveTableEditorDocCreatorColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorDocCreatorColumnDescription')], 29 + 'doc.date': [$services.localization.render('platform.appwithinminutes.liveTableEditorDocDateColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorDocDateColumnDescription')], 30 + 'doc.creationDate': [$services.localization.render('platform.appwithinminutes.liveTableEditorDocCreationDateColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorDocCreationDateColumnDescription')], 31 + '_actions': [$services.localization.render('platform.appwithinminutes.liveTableEditorActionsColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorActionsColumnDescription')], 32 + '_attachments': [$services.localization.render('platform.appwithinminutes.liveTableEditorAttachmentsColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorAttachmentsColumnDescription')], 33 + '_images': [$services.localization.render('platform.appwithinminutes.liveTableEditorImagesColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorImagesColumnDescription')] 72 72 }) 73 - <div class="wizard-help"> 74 - <p> 75 - <strong>$services.localization.render('platform.appwithinminutes.liveTableEditorHelpTitle')</strong> 76 - $services.localization.render('platform.appwithinminutes.liveTableEditorHelpDescription') 77 - </p> 78 - <dl> 79 - #foreach ($columnId in ['doc.title', 'doc.location', 'doc.date', 'doc.author', '_actions']) 80 - <dt>$genericColumns.get($columnId).get(0)</dt> 81 - <dd>$genericColumns.get($columnId).get(1)</dd> 82 - #end 83 - </dl> 84 - </div> 35 + (% class="wizard-help" %) 36 + ((( 37 + **$services.localization.render('platform.appwithinminutes.liveTableEditorHelpTitle')** $services.localization.render('platform.appwithinminutes.liveTableEditorHelpDescription') 38 + 39 + #foreach($columnId in ['doc.name', 'doc.date', 'doc.author', '_actions']) 40 + ; {{{$genericColumns.get($columnId).get(0)}}} 41 + : {{{$genericColumns.get($columnId).get(1)}}} 42 + #end 43 + ))) 85 85 #end 86 86 87 -#macro (displayFormFields) 88 - <div class="hidden"> 46 +#macro(displayFormFields) 47 + {{html wiki="true"}} 48 + (% class="hidden" %) 49 + ((( 89 89 ## Make sure that only the sheet content is rendered when the class is saved using AJAX. 90 90 <input type="hidden" name="xpage" value="plain" /> 91 91 ## We prevent the class name and the data space from being edited directly. They can be specified in the URL. 92 - #getAppClassReference($doc) 93 - <input type="hidden" name="AppWithinMinutes.LiveTableClass_0_class" 94 - value="$escapetool.xml($services.model.serialize($classReference, 'local'))" /> 95 - #displayPropertyValue('dataSpace', 'hidden') 53 + $doc.display('class', 'hidden') 54 + $doc.display('class', 'dataSpace') 96 96 ## We have to pass the list of available columns to the JavaScript code. 97 - #listAvailableColumns($classReference) 98 - </div> 99 - <dl> 100 - <dt> 101 - <label for="xwikidoctitleinput">$services.localization.render('core.editors.content.titleField.label')</label> 102 - <span class="xHint">$services.localization.render('platform.appwithinminutes.liveTableEditorTitleHint')</span> 103 - </dt> 104 - <dd><input id="xwikidoctitleinput" type="text" name="title" value="$escapetool.xml($doc.title)"/></dd> 105 - <dt> 106 - <label for="AppWithinMinutes.LiveTableClass_0_description"> 107 - $doc.displayPrettyName('description', false, false) 108 - </label> 109 - <span class="xHint"> 110 - $services.localization.render('platform.appwithinminutes.liveTableEditorDescriptionHint') 111 - </span> 112 - </dt> 113 - <dd>#displayPropertyValue('description')</dd> 114 - <dt> 115 - <label for="AppWithinMinutes.LiveTableClass_0_columns">$doc.displayPrettyName('columns', false, false)</label> 116 - <span class="xHint">$services.localization.render('platform.appwithinminutes.liveTableEditorColumnsHint')</span> 117 - </dt> 118 - <dd>#displayPropertyValue('columns')</dd> 119 - </dl> 56 + #listAvailableColumns() 57 + ))) 58 + ; <label for="AppWithinMinutes.LiveTableClass_0_description">$doc.displayPrettyName('description', false, false)</label>## 59 + (% class="xHint" %)$services.localization.render('platform.appwithinminutes.liveTableEditorDescriptionHint') 60 + : $doc.display('description') 61 + ; <label for="AppWithinMinutes.LiveTableClass_0_columns">$doc.displayPrettyName('columns', false, false)</label>## 62 + (% class="xHint" %)$services.localization.render('platform.appwithinminutes.liveTableEditorColumnsHint') 63 + : $doc.display('columns') 64 + {{/html}} 120 120 #end 121 121 122 -#macro (getApplicationIcon $classReference) 123 - #set ($applicationIcon = '') 124 - ## Look for the corresponding UI extension. 125 - #set ($uixPointId = 'org.xwiki.platform.panels.Applications') 126 - #set ($uixObject = $doc.getObject('XWiki.UIExtensionClass', 'extensionPointId', $uixPointId)) 127 - #set ($uixId = $uixObject.getValue('name')) 128 - #foreach ($uix in $services.uix.getExtensions($uixPointId)) 129 - #if ($uix.id == $uixId) 130 - #set ($applicationIcon = $uix.parameters.icon) 67 +#macro(displayIcon) 68 + #if($services.uix) 69 + #set($icon = 'icon:application') 70 + #foreach($uix in $services.uix.getExtensions('org.xwiki.platform.panels.Applications')) 71 + #if($uix.getId() == "platform.panels.${doc.space}Application" && "$!uix.getParameters().get('icon')" != '') 72 + #set($icon = $uix.getParameters().get('icon')) 73 + #end 131 131 #end 75 + {{html wiki="true"}} 76 + ; <label for="applicationIcon">$services.localization.render('platform.appwithinminutes.liveTableEditorIcon')</label> 77 + (% class="xHint" %)$services.localization.render('platform.appwithinminutes.liveTableEditorIconHintWithPicker', 78 + [$xwiki.getSkinFile('icons/silk/index_abc.png')]) 79 + : <input id="applicationIcon" name="applicationIcon" type="text" size="10" value="$!escapetool.xml($icon)" /> 80 + {{/html}} 81 + 82 + {{iconPicker id="applicationIcon" prefix="icon:" /}} 132 132 #end 133 - #if ("$!applicationIcon" == '') 134 - ## Fallback on the entry icon. 135 - #set ($templateProviderReference = $services.model.createDocumentReference( 136 - "$stringtool.removeEnd($classReference.name, 'Class')TemplateProvider", 137 - $classReference.parent 138 - )) 139 - #set ($entryIcon = $xwiki.getDocument($templateProviderReference).getValue('icon')) 140 - #if ("$!entryIcon" != '') 141 - #set ($applicationIcon = "icon:$entryIcon") 142 - #else 143 - #set ($applicationIcon = 'icon:application') 144 - #end 145 - #end 146 146 #end 147 147 148 -#macro (displayIcon) 149 - #if ($services.uix) 150 - #getApplicationIcon($classReference) 151 - <dl> 152 - <dt> 153 - <label for="applicationIcon"> 154 - $services.localization.render('platform.appwithinminutes.liveTableEditorIcon') 155 - </label> 156 - <span class="xHint"> 157 - $services.localization.render('platform.appwithinminutes.liveTableEditorIconHintWithPicker', 158 - [$xwiki.getSkinFile('icons/silk/index_abc.png')]) 159 - </span> 160 - </dt> 161 - <dd> 162 - <input id="applicationIcon" name="applicationIcon" type="text" size="10" 163 - value="$!escapetool.xml($applicationIcon)" /> 164 - </dd> 165 - </dl> 166 - #end 167 -#end 86 +#macro(doEdit) 87 + #set($liveTableObj = $doc.getObject('AppWithinMinutes.LiveTableClass', true)) 88 + #set($discard = $doc.use($liveTableObj)) 89 + #set($discard = $xwiki.jsfx.use('js/scriptaculous/dragdrop.js')) 90 + #set($discard = $xwiki.ssx.use('AppWithinMinutes.LiveTableEditSheet')) 91 + #set($discard = $xwiki.jsx.use('AppWithinMinutes.LiveTableEditSheet')) 92 + #if("$!request.wizard" == 'true') 93 + #appWizardHeader(3) 168 168 169 -#macro (doEdit) 170 - {{html clean="false"}} 171 - #set ($liveTableObj = $doc.getObject('AppWithinMinutes.LiveTableClass', true)) 172 - #set ($discard = $doc.use($liveTableObj)) 173 - #set ($discard = $xwiki.jsfx.use('js/scriptaculous/dragdrop.js')) 174 - #set ($discard = $xwiki.ssx.use('AppWithinMinutes.LiveTableEditSheet')) 175 - #set ($discard = $xwiki.jsx.use('AppWithinMinutes.LiveTableEditSheet')) 176 - #if ("$!request.wizard" == 'true') 177 - #appWizardHeader('presentation') 178 178 #end 179 179 #displayHelpPanel() 180 - <div class="form-body"> 97 + (% class="form-body" %) 98 + ((( 181 181 #displayFormFields() 100 + 182 182 #displayIcon() 183 - #if ("$!request.wizard" == 'true') 184 - #appWizardFooter('presentation') 185 - #end 186 - </div> 187 - <div class="clearfloats"></div> 188 - {{/html}} 189 189 190 - {{iconPicker id="applicationIcon" prefix="icon:" /}} 103 + #if("$!request.wizard" == 'true') 104 + 105 + #appWizardFooter(3) 106 + #end 107 + ))) 108 + {{html}}<div class="clearfloats"></div>{{/html}} 191 191 #end 192 192 193 193 #macro (maybeGrantSpaceAdminRight $spaceRef) ... ... @@ -220,9 +220,9 @@ 220 220 #end 221 221 #end 222 222 223 -#macro 224 - #set 225 - #set 141 +#macro(updateAndSaveLiveTable) 142 + #set($discard = $doc.updateObjectFromRequest('AppWithinMinutes.LiveTableClass')) 143 + #set($liveTableGeneratorDoc = $xwiki.getDocument('AppWithinMinutes.LiveTableGenerator')) 226 226 227 227 ## Generate the LiveTable by displaying the LiveTableGenerator document in the context of the current document. 228 228 #set ($displayParameters = $services.display.createDocumentDisplayerParameters()) ... ... @@ -233,9 +233,8 @@ 233 233 ## Use the generated LiveTable content for the data home page. 234 234 #set ($dataSpaceReference = $services.model.resolveSpace($doc.getValue('dataSpace'))) 235 235 #set ($dataSpaceHomeReference = $services.model.resolveDocument('', 'default', $dataSpaceReference)) 236 - #if ($dataSpaceHomeReference.equals($doc.documentReference) || !$xwiki.exists($dataSpaceHomeReference)) 237 - ## Either the application space and the data space are one and the same or this is a new application and we don't 238 - ## want to promote the data space anymore. 154 + #if ($dataSpaceHomeReference.equals($doc.documentReference)) 155 + ## The application space and the data space are one and the same. 239 239 #set ($dataHomePage = $doc) 240 240 #else 241 241 ## The application data is stored in a different space. ... ... @@ -255,10 +255,10 @@ 255 255 #end 256 256 #set ($discard = $dataHomePage.setContent($generatedLiveTableContent)) 257 257 258 - #set 259 - #set 260 - #if 261 - #set 175 + #set($minorEdit = "$!request.minorEdit" != '') 176 + #set($comment = $request.comment) 177 + #if("$!comment" == '') 178 + #set($comment = $services.localization.render('platform.appwithinminutes.liveTableEditorSaveComment')) 262 262 #end 263 263 264 264 #if ($dataHomePage != $doc) ... ... @@ -267,39 +267,33 @@ 267 267 #end 268 268 269 269 ## Save the application home page. 270 - #set 187 + #set($discard = $doc.save($comment, $minorEdit)) 271 271 #end 272 272 273 -#macro (updateAndSaveIcon) 274 - #set ($uix = $doc.getObject('XWiki.UIExtensionClass', true)) 275 - #set ($discard = $uix.set('name', "platform.panels.${doc.space}Application")) 276 - #set ($discard = $uix.set('extensionPointId', 'org.xwiki.platform.panels.Applications')) 277 - #set ($uixParams = [ 278 - "label=$doc.plainTitle", 279 - "target=$doc.fullName", 280 - "icon=$request.applicationIcon" 281 - ]) 282 - #set ($discard = $uix.set('parameters', $stringtool.join($uixParams, $util.newline))) 190 +#macro(updateAndSaveIcon) 191 + #set($uix = $doc.getObject('XWiki.UIExtensionClass', true)) 192 + #set($appName = $doc.documentReference.parent.name) 193 + #set($discard = $uix.set('name', "platform.panels.${appName}Application")) 194 + #set($discard = $uix.set('extensionPointId', 'org.xwiki.platform.panels.Applications')) 195 + #set($discard = $uix.set('parameters', "label=${appName}${util.newline}target=${doc.fullName}${util.newline}icon=${request.applicationIcon}")) 283 283 #set ($hasWikiAdminRights = $services.security.authorization.hasAccess('admin', $doc.documentReference.wikiReference)) 284 - #set 285 - #set 197 + #set($discard = $uix.set('scope', "#if ($hasWikiAdminRights)wiki#{else}user#end")) 198 + #set($discard = $doc.save('Updated application icon', true)) 286 286 #end 287 287 288 -#macro 201 +#macro(doSave) 289 289 #maybeGrantSpaceAdminRights() 290 290 #updateAndSaveLiveTable() 291 291 #updateAndSaveIcon() 292 - #if ($action == 'save') 293 - #if ($errorMessage) 294 - {{html clean="false"}} 295 - <div class="box errormessage">$errorMessage</div> 296 - {{/html}} 205 + #if($action == 'save') 206 + #if($errorMessage) 207 + {{error}}{{html}}$errorMessage{{/html}}{{/error}} 297 297 #else 298 298 ## Redirect to view mode. 299 299 $response.sendRedirect($doc.getURL()) 300 300 #end 301 301 #else 302 - #if 213 + #if($errorMessage) 303 303 $response.sendError(400, $errorMessage) 304 304 #else 305 305 $response.setStatus(204) ... ... @@ -309,7 +309,7 @@ 309 309 {{/velocity}} 310 310 311 311 {{velocity}} 312 -#if 223 +#if("$!request.wizard" == 'true') 313 313 {{include reference="AppWithinMinutes.WizardStep" /}} 314 314 #end 315 315 {{/velocity}} ... ... @@ -316,20 +316,20 @@ 316 316 317 317 {{velocity}} 318 318 ## Determine the action button that triggered the request 319 -#set 320 -#foreach 321 - #if 322 - #set 230 +#set($action = $xcontext.action) 231 +#foreach($paramName in $request.getParameterMap().keySet()) 232 + #if($paramName.startsWith('xaction_')) 233 + #set($action = $paramName.substring(8)) 323 323 #break 324 324 #end 325 325 #end 326 -#if 237 +#if($action == 'edit') 327 327 #doEdit() 328 -#elseif 329 - #if 239 +#elseif($action == 'save' || $action == 'saveandcontinue') 240 + #if($services.csrf.isTokenValid($request.form_token)) 330 330 #doSave() 331 331 #else 332 - $response.sendRedirect($services.csrf.getResubmissionURL()) 243 + $response.sendRedirect($services.csrf.getResubmissionURL()); 333 333 #end 334 334 #end 335 335 {{/velocity}}
- XWiki.JavaScriptExtension[0]
-
- Code
-
... ... @@ -61,7 +61,7 @@ 61 61 this.columnsSelect = $('availableColumns'); 62 62 this.columnsSelect.selectedIndex = -1; 63 63 64 - var addButton = t his.columnsSelect.next('a.addColumn');64 + var addButton = new Element('input', {type: 'image', src: '$xwiki.getSkinFile('icons/silk/add.png')', alt: '$escapetool.javascript($services.localization.render('platform.appwithinminutes.liveTableEditorAddColumnHint'))'}); 65 65 addButton.observe('click', this._onAddColumn.bindAsEventListener(this)); 66 66 67 67 var picker = new Element('div', {'class': 'columnPicker'}).insert(this.columnsSelect).insert(addButton); ... ... @@ -126,10 +126,10 @@ 126 126 if (!form) { 127 127 return false; 128 128 } 129 - // Let the sheet handle the form submit. The form is submitted by default to the preview action which dispatches the130 - // requestto thesave actionifthe savebuttonisdetectedonthe requestparameters.Bysubmittingtothedit131 - // action the edit sheetsevaluatedandthusitcanhandlethesavebyitself.132 - form.action = XWiki.currentDocument.getURL('edit');129 + // Let the sheet handle the form submit. 130 + // NOTE: The code that handles Save&Continue uses this URL to make the AJAX request and Firefox 3.6 doesn't resolve 131 + // the empty string to the current page URL so we have to explicitly specify it. 132 + form.action = window.location.href; 133 133 134 134 // Apply the vertical form layout standard. 135 135 form.addClassName('xform');
- XWiki.StyleSheetExtension[0]
-
- Code
-
... ... @@ -52,9 +52,10 @@ 52 52 width: auto; 53 53 } 54 54 55 -.columnPicker a.addColumn{55 +.columnPicker input[type=image] { 56 56 margin: 0 .5em; 57 57 padding: 0; 58 + vertical-align: text-bottom; 58 58 } 59 59 60 60 .form-body {