Modifications pour le document LiveTableEditSheet
Modifié par superadmin le 2021/12/12 21:57
modifié par Administrator
sur 2013/06/04 10:06
sur 2013/06/04 10:06
Commentaire de modification :
Install extension [org.xwiki.platform:xwiki-platform-appwithinminutes-ui/11.8.1]
Résumé
Détails
- Propriétés de la Page
-
- Titre
-
... ... @@ -1,1 +1,0 @@ 1 -#if($doc.fullName=='AppWithinMinutes.LiveTableEditSheet')LiveTable Edit Sheet#{else}#evaluate($doc.title)#end - Auteur du document
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. Admin1 +XWiki.superadmin - Syntaxe
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki 2. 01 +XWiki 2.1 - Contenu
-
... ... @@ -1,178 +1,305 @@ 1 +{{include reference="XWiki.TemplateProviderMacros" /}} 2 + 3 +{{include reference="AppWithinMinutes.VelocityMacros" /}} 4 + 1 1 {{velocity output="false"}} 2 -#macro(listAvailableColumns) 3 - {{html}} 6 +#macro (listAvailableColumns $classReference) 4 4 <select id="availableColumns"> 5 - #set($className = "$!liveTableObj.getProperty('class').value") 6 - #set($classFields = $xwiki.getDocument($className).getxWikiClass().properties) 7 - #set($discard = $services.localization.use('document', "$stringtool.removeEnd($className, 'Class')Translations")) 8 - #if($classFields.size() > 0) 9 - <optgroup label="$escapetool.xml($services.localization.render('platform.appwithinminutes.liveTableEditorClassFieldColumnGroupLabel'))" id="classFields"> 10 - #foreach($field in $classFields) 8 + #set ($classFields = $xwiki.getDocument($classReference).getxWikiClass().properties) 9 + #if ($classFields.size() > 0) 10 + <optgroup label="$escapetool.xml($services.localization.render( 11 + 'platform.appwithinminutes.liveTableEditorClassFieldColumnGroupLabel'))" id="classFields"> 12 + #foreach ($field in $classFields) 11 11 <option value="$field.name">$escapetool.xml($field.translatedPrettyName)</option> 12 12 #end 13 13 </optgroup> 14 14 #end 15 - <optgroup label="$escapetool.xml($services.localization.render('platform.appwithinminutes.liveTableEditorGenericColumnGroupLabel'))"> 16 - #foreach($entry in $genericColumns.entrySet()) 17 - <option value="$entry.key" title="$escapetool.xml($entry.value.get(1))">$escapetool.xml($entry.value.get(0))</option> 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> 18 18 #end 19 19 </optgroup> 20 20 </select> 21 - {{/html}} 26 + <a href="#addColumn" class="addColumn" title="$services.localization.render( 27 + 'platform.appwithinminutes.liveTableEditorAddColumnHint')">$services.icon.renderHTML('add')</a> 22 22 #end 23 23 24 -#macro(displayHelpPanel) 25 - #set($genericColumns = { 26 - 'doc.title': [$services.localization.render('platform.appwithinminutes.liveTableEditorDocTitleColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorDocTitleColumnDescription')], 27 - 'doc.name': [$services.localization.render('platform.appwithinminutes.liveTableEditorDocNameColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorDocNameColumnDescription')], 28 - 'doc.author': [$services.localization.render('platform.appwithinminutes.liveTableEditorDocAuthorColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorDocAuthorColumnDescription')], 29 - 'doc.creator': [$services.localization.render('platform.appwithinminutes.liveTableEditorDocCreatorColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorDocCreatorColumnDescription')], 30 - 'doc.date': [$services.localization.render('platform.appwithinminutes.liveTableEditorDocDateColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorDocDateColumnDescription')], 31 - 'doc.creationDate': [$services.localization.render('platform.appwithinminutes.liveTableEditorDocCreationDateColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorDocCreationDateColumnDescription')], 32 - '_actions': [$services.localization.render('platform.appwithinminutes.liveTableEditorActionsColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorActionsColumnDescription')], 33 - '_attachments': [$services.localization.render('platform.appwithinminutes.liveTableEditorAttachmentsColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorAttachmentsColumnDescription')], 34 - '_images': [$services.localization.render('platform.appwithinminutes.liveTableEditorImagesColumnName'), $services.localization.render('platform.appwithinminutes.liveTableEditorImagesColumnDescription')] 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 + ] 35 35 }) 36 - (% class="wizard-help" %) 37 - ((( 38 - **$services.localization.render('platform.appwithinminutes.liveTableEditorHelpTitle')** $services.localization.render('platform.appwithinminutes.liveTableEditorHelpDescription') 39 - 40 - #foreach($columnId in ['doc.name', 'doc.date', 'doc.author', '_actions']) 41 - ; {{{$genericColumns.get($columnId).get(0)}}} 42 - : {{{$genericColumns.get($columnId).get(1)}}} 43 - #end 44 - ))) 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> 45 45 #end 46 46 47 -#macro(displayFormFields) 48 - {{html wiki="true"}} 49 - (% class="hidden" %) 50 - ((( 87 +#macro (displayFormFields) 88 + <div class="hidden"> 51 51 ## Make sure that only the sheet content is rendered when the class is saved using AJAX. 52 52 <input type="hidden" name="xpage" value="plain" /> 53 - ## We prevent the class name from being edited directly. The class name can be specified in the URL. 54 - $doc.display('class', 'hidden') 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') 55 55 ## We have to pass the list of available columns to the JavaScript code. 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}} 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> 65 65 #end 66 66 67 -#macro( displayIcon)68 - # if($services.uix)69 - #set($icon='icon:application')70 - foreach($uix$services.uix.getExtensions('org.xwiki.platform.panels.Applications'))71 - if($uix.getId()=="platform.panels.${doc.space}Application")72 - #if("$!uix.getParameters().get('icon')" != '')73 - set($icon=$uix.getParameters().get('icon'))74 - #end75 - #en d122 +#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) 76 76 #end 77 - {{html wiki="true"}} 78 - ## The icon 79 - ; <label for="applicationIcon">$services.localization.render('platform.appwithinminutes.liveTableEditorIcon')</label> 80 - (% class="xHint" %)$services.localization.render('platform.appwithinminutes.liveTableEditorIconHint', $xwiki.getSkinFile('icons/silk/index_abc.png')) 81 - : <input id="applicationIcon" name="applicationIcon" type="text" size="10" value="$!icon" /> 82 - {{/html}} 83 83 #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 84 84 #end 85 85 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) 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 94 94 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') 95 95 #end 96 96 #displayHelpPanel() 97 - (% class="form-body" %) 98 - ((( 180 + <div class="form-body"> 99 99 #displayFormFields() 100 - 101 101 #displayIcon() 102 - 103 - #if("$!request.wizard" == 'true') 104 - 105 - #appWizardFooter(3) 183 + #if ("$!request.wizard" == 'true') 184 + #appWizardFooter('presentation') 106 106 #end 107 - ))) 108 - {{html}}<div class="clearfloats"></div>{{/html}} 186 + </div> 187 + <div class="clearfloats"></div> 188 + {{/html}} 189 + 190 + {{iconPicker id="applicationIcon" prefix="icon:" /}} 109 109 #end 110 110 111 -#macro(maybeGrantSpaceAdminRights) 112 - #set($spaceHomeRef = $services.model.createDocumentReference($doc.wiki, $doc.space, 'WebHome')) 113 - ## Grant space administration rights only if the space is new. 114 - #if(!$xwiki.exists($spaceHomeRef)) 115 - #set($spacePrefsRef = $services.model.createDocumentReference($doc.wiki, $doc.space, 'WebPreferences')) 116 - #set($spacePrefsDoc = $xwiki.getDocument($spacePrefsRef)) 117 - ## Don't overwrite existing space preferences. 118 - #if($spacePrefsDoc.isNew()) 119 - #set($discard = $spacePrefsDoc.use($spacePrefsDoc.getObject('XWiki.XWikiGlobalRights', true))) 120 - #set($discard = $spacePrefsDoc.set('allow', 1)) 121 - #set($discard = $spacePrefsDoc.set('levels', 'admin')) 122 - #set($discard = $spacePrefsDoc.set('users', $services.model.serialize($xcontext.userReference, 'default'))) 123 - #set($discard = $spacePrefsDoc.setParent($services.model.serialize($spaceHomeRef, 'default'))) 124 - #set($discard = $spacePrefsDoc.setHidden(true)) 125 - #set($discard = $spacePrefsDoc.saveWithProgrammingRights($services.localization.render('platform.appwithinminutes.grantSpaceAdminRightsSaveComment'))) 126 - #end 193 +#macro (maybeGrantSpaceAdminRight $spaceRef) 194 + ## Grant space administration rights only if the space is new. Don't overwrite existing space preferences. 195 + #set ($spaceHomeRef = $services.model.resolveDocument('', 'default', $spaceRef)) 196 + #set ($spacePrefsRef = $services.model.resolveDocument('WebPreferences', 'explicit', $spaceRef)) 197 + #if (!$xwiki.exists($spaceHomeRef) && !$xwiki.exists($spacePrefsRef)) 198 + #set ($spacePrefsDoc = $xwiki.getDocument($spacePrefsRef)) 199 + #set ($discard = $spacePrefsDoc.use($spacePrefsDoc.getObject('XWiki.XWikiGlobalRights', true))) 200 + #set ($discard = $spacePrefsDoc.set('allow', 1)) 201 + #set ($discard = $spacePrefsDoc.set('levels', 'admin')) 202 + #set ($discard = $spacePrefsDoc.set('users', $services.model.serialize($xcontext.userReference, 'default'))) 203 + #set ($discard = $spacePrefsDoc.setTitle('$services.localization.render(''admin.preferences.title'')')) 204 + #set ($discard = $spacePrefsDoc.setParent($services.model.serialize($spaceHomeRef, 'default'))) 205 + #set ($discard = $spacePrefsDoc.setHidden(true)) 206 + #set ($discard = $spacePrefsDoc.saveWithProgrammingRights($services.localization.render( 207 + 'platform.appwithinminutes.grantSpaceAdminRightsSaveComment'))) 127 127 #end 128 128 #end 129 129 130 -#macro(updateAndSaveLiveTable) 131 - #set($discard = $doc.updateObjectFromRequest('AppWithinMinutes.LiveTableClass')) 132 - #set($liveTableGeneratorDoc = $xwiki.getDocument('AppWithinMinutes.LiveTableGenerator')) 133 - #set($discard = $doc.setContent($doc.getRenderedContent($liveTableGeneratorDoc.content, $liveTableGeneratorDoc.syntax.toIdString(), 'plain/1.0'))) 134 - #set($minorEdit = "$!request.minorEdit" != '') 135 - #set($comment = $request.comment) 136 - #if("$!comment" == '') 137 - #set($comment = $services.localization.render('platform.appwithinminutes.liveTableEditorSaveComment')) 211 +#macro (maybeGrantSpaceAdminRights) 212 + ## Application space 213 + #set ($appReference = $doc.documentReference.parent) 214 + #maybeGrantSpaceAdminRight($appReference) 215 + ## Code space (if it's not nested inside the application space) 216 + #set ($className = $request.get('AppWithinMinutes.LiveTableClass_0_class')) 217 + #set ($classReference = $services.model.resolveDocument($className)) 218 + #if (!$classReference.hasParent($appReference)) 219 + #maybeGrantSpaceAdminRight($classReference.parent) 138 138 #end 139 - #set($discard = $doc.save($comment, $minorEdit)) 140 140 #end 141 141 142 -#macro(maybeCreateLiveTableResultsPage) 143 - #set ($className = "$!doc.getObject('AppWithinMinutes.LiveTableClass').getProperty('class').value") 144 - #set ($liveTableResultsDoc = $xwiki.getDocument("$!stringtool.removeEnd($className, 'Class')LiveTableResults")) 145 - #set ($liveTableResultsGeneratorDoc = $xwiki.getDocument('AppWithinMinutes.LiveTableResultsGenerator')) 146 - #if ($liveTableResultsDoc.isNew()) 147 - #set ($discard = $liveTableResultsDoc.setParent($doc.name)) 148 - #set ($discard = $liveTableResultsDoc.setHidden(true)) 149 - #set ($discard = $liveTableResultsDoc.setContent($doc.getRenderedContent($liveTableResultsGeneratorDoc.content, $liveTableResultsGeneratorDoc.syntax.toIdString(), 'plain/1.0'))) 150 - #set ($discard = $liveTableResultsDoc.save($services.localization.render('platform.appwithinminutes.liveTableEditorCreateLiveTableResultsComment'))) 223 +#macro (updateAndSaveLiveTable) 224 + #set ($discard = $doc.updateObjectFromRequest('AppWithinMinutes.LiveTableClass')) 225 + #set ($liveTableGeneratorDoc = $xwiki.getDocument('AppWithinMinutes.LiveTableGenerator')) 226 + 227 + ## Generate the LiveTable by displaying the LiveTableGenerator document in the context of the current document. 228 + #set ($displayParameters = $services.display.createDocumentDisplayerParameters()) 229 + #set ($discard = $displayParameters.setExecutionContextIsolated(false)) 230 + #set ($discard = $displayParameters.setContentTranslated(true)) 231 + #set ($generatedLiveTableContent = $services.display.content($liveTableGeneratorDoc, { 'outputSyntaxId' : 'plain/1.0', 'displayerParameters' : $displayParameters })) 232 + 233 + ## Use the generated LiveTable content for the data home page. 234 + #set ($dataSpaceReference = $services.model.resolveSpace($doc.getValue('dataSpace'))) 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. 239 + #set ($dataHomePage = $doc) 240 + #else 241 + ## The application data is stored in a different space. 242 + #set ($dataHomePage = $xwiki.getDocument($dataSpaceHomeReference)) 243 + #set ($discard = $dataHomePage.setHidden(true)) 244 + #set ($escapedAppName = $doc.documentReference.parent.name.toLowerCase().replace("'", "''")) 245 + #set ($discard = $dataHomePage.setTitle("${escapetool.d}services.localization.render('${escapedAppName}.dataSpace.title')")) 246 + 247 + ## Update the home page content. 248 + #set ($homePageContent = '') 249 + #if ("$!generatedLiveTableContent" != '') 250 + ## Include the entries live table in the application home page. 251 + #set ($escapedReference = $services.model.serialize($dataSpaceHomeReference).replaceAll('([~"])', '~$1')) 252 + #set ($homePageContent = "{{include reference=""$escapedReference"" /}}") 253 + #end 254 + #set ($discard = $doc.setContent($homePageContent)) 151 151 #end 256 + #set ($discard = $dataHomePage.setContent($generatedLiveTableContent)) 257 + 258 + #set ($minorEdit = "$!request.minorEdit" != '') 259 + #set ($comment = $request.comment) 260 + #if ("$!comment" == '') 261 + #set ($comment = $services.localization.render('platform.appwithinminutes.liveTableEditorSaveComment')) 262 + #end 263 + 264 + #if ($dataHomePage != $doc) 265 + ## Save the data home page. 266 + #set ($discard = $dataHomePage.save($comment, $minorEdit)) 267 + #end 268 + 269 + ## Save the application home page. 270 + #set ($discard = $doc.save($comment, $minorEdit)) 152 152 #end 153 153 154 -#macro(updateAndSaveIcon) 155 - #set($uix = $doc.getObject('XWiki.UIExtensionClass', true)) 156 - #set($discard = $uix.set('name', "platform.panels.${doc.space}Application")) 157 - #set($discard = $uix.set('extensionPointId', "org.xwiki.platform.panels.Applications")) 158 - #set($discard = $uix.set('parameters', "label=${doc.space}${util.newline}target=${doc.fullName}${util.newline}icon=${request.applicationIcon}")) 159 - #set($discard = $doc.save('Updated application icon', true)) 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))) 283 + #set ($hasWikiAdminRights = $services.security.authorization.hasAccess('admin', $doc.documentReference.wikiReference)) 284 + #set ($discard = $uix.set('scope', "#if ($hasWikiAdminRights)wiki#{else}user#end")) 285 + #set ($discard = $doc.save('Updated application icon', true)) 160 160 #end 161 161 162 -#macro(doSave) 288 +#macro (doSave) 163 163 #maybeGrantSpaceAdminRights() 164 164 #updateAndSaveLiveTable() 165 - #maybeCreateLiveTableResultsPage() 166 166 #updateAndSaveIcon() 167 - #if($action == 'save') 168 - #if($errorMessage) 169 - {{error}}{{html}}$errorMessage{{/html}}{{/error}} 292 + #if ($action == 'save') 293 + #if ($errorMessage) 294 + {{html clean="false"}} 295 + <div class="box errormessage">$errorMessage</div> 296 + {{/html}} 170 170 #else 171 171 ## Redirect to view mode. 172 172 $response.sendRedirect($doc.getURL()) 173 173 #end 174 174 #else 175 - #if($errorMessage) 302 + #if ($errorMessage) 176 176 $response.sendError(400, $errorMessage) 177 177 #else 178 178 $response.setStatus(204) ... ... @@ -182,27 +182,27 @@ 182 182 {{/velocity}} 183 183 184 184 {{velocity}} 185 -#if("$!request.wizard" == 'true') 186 - {{include document="AppWithinMinutes.WizardStep" /}}312 +#if ("$!request.wizard" == 'true') 313 + {{include reference="AppWithinMinutes.WizardStep" /}} 187 187 #end 188 188 {{/velocity}} 189 189 190 190 {{velocity}} 191 191 ## Determine the action button that triggered the request 192 -#set($action = $context.action) 193 -#foreach($paramName in $request.getParameterMap().keySet()) 194 - #if($paramName.startsWith('xaction_')) 195 - #set($action = $paramName.substring(8)) 319 +#set ($action = $xcontext.action) 320 +#foreach ($paramName in $request.getParameterMap().keySet()) 321 + #if ($paramName.startsWith('xaction_')) 322 + #set ($action = $paramName.substring(8)) 196 196 #break 197 197 #end 198 198 #end 199 -#if($action == 'edit') 326 +#if ($action == 'edit') 200 200 #doEdit() 201 -#elseif($action == 'save' || $action == 'saveandcontinue') 202 - #if($services.csrf.isTokenValid($request.form_token)) 328 +#elseif ($action == 'save' || $action == 'saveandcontinue') 329 + #if ($services.csrf.isTokenValid($request.form_token)) 203 203 #doSave() 204 204 #else 205 - $response.sendRedirect($services.csrf.getResubmissionURL()) ;332 + $response.sendRedirect($services.csrf.getResubmissionURL()) 206 206 #end 207 207 #end 208 208 {{/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 = new Element('input', {type: 'image',src: '$xwiki.getSkinFile('icons/silk/add.png')', alt: '$escapetool.javascript($services.localization.render('platform.appwithinminutes.liveTableEditorAddColumnHint'))'});64 + var addButton = this.columnsSelect.next('a.addColumn'); 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,16 +126,16 @@ 126 126 if (!form) { 127 127 return false; 128 128 } 129 - // Let the sheet handle the form submit. 130 - // NOTE: Thecodethat handlesSave&ContinueusesthisURLto make theAJAXrequest and Firefox 3.6doesn'tresolve131 - // the e mptystringtothecurrentpageURL so wehavetoexplicitlyspecify it.132 - form.action = window.location.href;129 + // Let the sheet handle the form submit. The form is submitted by default to the preview action which dispatches the 130 + // request to the save action if the save button is detected on the request parameters. By submitting to the edit 131 + // action the edit sheet is evaluated and thus it can handle the save by itself. 132 + form.action = XWiki.currentDocument.getURL('edit'); 133 133 134 134 // Apply the vertical form layout standard. 135 135 form.addClassName('xform'); 136 136 137 137 // Remove the preview button. 138 - form.down("input[name='action_preview']"). up().remove();138 + form.down("input[name='action_preview']").remove(); 139 139 140 140 // Rename the save buttons. 141 141 form.down("input[name='action_save']").name = 'xaction_save';
- XWiki.StyleSheetExtension[0]
-
- Code
-
... ... @@ -3,6 +3,7 @@ 3 3 font-size: 90%; 4 4 list-style: none outside none; 5 5 margin: 0; 6 + padding: 0; 6 6 } 7 7 8 8 #inline .hList li { ... ... @@ -51,9 +51,9 @@ 51 51 width: auto; 52 52 } 53 53 54 -.columnPicker input[type=image]{55 - margin -left:2px;56 - vertical-align:text-bottom;55 +.columnPicker a.addColumn { 56 + margin: 0 .5em; 57 + padding: 0; 57 57 } 58 58 59 59 .form-body {