Modifications pour le document LiveTableEditSheet
Modifié par superadmin le 2021/12/12 21:57
<
modifié par Paul Libbrecht (admin)
sur 2016/07/26 22:02
sur 2016/07/26 22:02
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,194 +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/effects.js')) 174 - #set ($discard = $xwiki.jsfx.use('js/scriptaculous/dragdrop.js')) 175 - #set ($discard = $xwiki.ssx.use('AppWithinMinutes.LiveTableEditSheet')) 176 - #set ($discard = $xwiki.jsx.use('AppWithinMinutes.LiveTableEditSheet')) 177 - #if ("$!request.wizard" == 'true') 178 - #appWizardHeader('presentation') 179 179 #end 180 180 #displayHelpPanel() 181 - <div class="form-body"> 97 + (% class="form-body" %) 98 + ((( 182 182 #displayFormFields() 100 + 183 183 #displayIcon() 184 - #if ("$!request.wizard" == 'true') 185 - #appWizardFooter('presentation') 186 - #end 187 - </div> 188 - <div class="clearfloats"></div> 189 - {{/html}} 190 190 191 - {{iconPicker id="applicationIcon" prefix="icon:" /}} 103 + #if("$!request.wizard" == 'true') 104 + 105 + #appWizardFooter(3) 106 + #end 107 + ))) 108 + {{html}}<div class="clearfloats"></div>{{/html}} 192 192 #end 193 193 194 194 #macro (maybeGrantSpaceAdminRight $spaceRef) ... ... @@ -221,25 +221,21 @@ 221 221 #end 222 222 #end 223 223 224 -#macro 225 - #set 226 - #set 141 +#macro(updateAndSaveLiveTable) 142 + #set($discard = $doc.updateObjectFromRequest('AppWithinMinutes.LiveTableClass')) 143 + #set($liveTableGeneratorDoc = $xwiki.getDocument('AppWithinMinutes.LiveTableGenerator')) 227 227 228 228 ## Generate the LiveTable by displaying the LiveTableGenerator document in the context of the current document. 229 229 #set ($displayParameters = $services.display.createDocumentDisplayerParameters()) 230 230 #set ($discard = $displayParameters.setExecutionContextIsolated(false)) 231 231 #set ($discard = $displayParameters.setContentTranslated(true)) 232 - #set ($generatedLiveTableContent = $services.display.content($liveTableGeneratorDoc, { 233 - 'outputSyntaxId': 'plain/1.0', 234 - 'displayerParameters': $displayParameters 235 - })) 149 + #set ($generatedLiveTableContent = $services.display.content($liveTableGeneratorDoc, { 'outputSyntaxId' : 'plain/1.0', 'displayerParameters' : $displayParameters })) 236 236 237 237 ## Use the generated LiveTable content for the data home page. 238 238 #set ($dataSpaceReference = $services.model.resolveSpace($doc.getValue('dataSpace'))) 239 239 #set ($dataSpaceHomeReference = $services.model.resolveDocument('', 'default', $dataSpaceReference)) 240 - #if ($dataSpaceHomeReference.equals($doc.documentReference) || !$xwiki.exists($dataSpaceHomeReference)) 241 - ## Either the application space and the data space are one and the same or this is a new application and we don't 242 - ## 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. 243 243 #set ($dataHomePage = $doc) 244 244 #else 245 245 ## The application data is stored in a different space. ... ... @@ -258,15 +258,11 @@ 258 258 #set ($discard = $doc.setContent($homePageContent)) 259 259 #end 260 260 #set ($discard = $dataHomePage.setContent($generatedLiveTableContent)) 261 - ## We assume for now that the output produced by the live table generator uses the same syntax as the code of the live 262 - ## table generator. We have to set the syntax because the default wiki syntax (used when creating new wiki pages) 263 - ## could be different than the one used by the live table generator. 264 - #set ($discard = $dataHomePage.setSyntax($liveTableGeneratorDoc.syntax)) 265 265 266 - #set 267 - #set 268 - #if 269 - #set 175 + #set($minorEdit = "$!request.minorEdit" != '') 176 + #set($comment = $request.comment) 177 + #if("$!comment" == '') 178 + #set($comment = $services.localization.render('platform.appwithinminutes.liveTableEditorSaveComment')) 270 270 #end 271 271 272 272 #if ($dataHomePage != $doc) ... ... @@ -275,39 +275,33 @@ 275 275 #end 276 276 277 277 ## Save the application home page. 278 - #set 187 + #set($discard = $doc.save($comment, $minorEdit)) 279 279 #end 280 280 281 -#macro (updateAndSaveIcon) 282 - #set ($uix = $doc.getObject('XWiki.UIExtensionClass', true)) 283 - #set ($discard = $uix.set('name', "platform.panels.${doc.space}Application")) 284 - #set ($discard = $uix.set('extensionPointId', 'org.xwiki.platform.panels.Applications')) 285 - #set ($uixParams = [ 286 - "label=$doc.plainTitle", 287 - "target=$doc.fullName", 288 - "icon=$request.applicationIcon" 289 - ]) 290 - #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}")) 291 291 #set ($hasWikiAdminRights = $services.security.authorization.hasAccess('admin', $doc.documentReference.wikiReference)) 292 - #set 293 - #set 197 + #set($discard = $uix.set('scope', "#if ($hasWikiAdminRights)wiki#{else}user#end")) 198 + #set($discard = $doc.save('Updated application icon', true)) 294 294 #end 295 295 296 -#macro 201 +#macro(doSave) 297 297 #maybeGrantSpaceAdminRights() 298 298 #updateAndSaveLiveTable() 299 299 #updateAndSaveIcon() 300 - #if ($action == 'save') 301 - #if ($errorMessage) 302 - {{html clean="false"}} 303 - <div class="box errormessage">$errorMessage</div> 304 - {{/html}} 205 + #if($action == 'save') 206 + #if($errorMessage) 207 + {{error}}{{html}}$errorMessage{{/html}}{{/error}} 305 305 #else 306 306 ## Redirect to view mode. 307 307 $response.sendRedirect($doc.getURL()) 308 308 #end 309 309 #else 310 - #if 213 + #if($errorMessage) 311 311 $response.sendError(400, $errorMessage) 312 312 #else 313 313 $response.setStatus(204) ... ... @@ -317,7 +317,7 @@ 317 317 {{/velocity}} 318 318 319 319 {{velocity}} 320 -#if 223 +#if("$!request.wizard" == 'true') 321 321 {{include reference="AppWithinMinutes.WizardStep" /}} 322 322 #end 323 323 {{/velocity}} ... ... @@ -324,20 +324,20 @@ 324 324 325 325 {{velocity}} 326 326 ## Determine the action button that triggered the request 327 -#set 328 -#foreach 329 - #if 330 - #set 230 +#set($action = $xcontext.action) 231 +#foreach($paramName in $request.getParameterMap().keySet()) 232 + #if($paramName.startsWith('xaction_')) 233 + #set($action = $paramName.substring(8)) 331 331 #break 332 332 #end 333 333 #end 334 -#if 237 +#if($action == 'edit') 335 335 #doEdit() 336 -#elseif 337 - #if 239 +#elseif($action == 'save' || $action == 'saveandcontinue') 240 + #if($services.csrf.isTokenValid($request.form_token)) 338 338 #doSave() 339 339 #else 340 - $response.sendRedirect($services.csrf.getResubmissionURL()) 243 + $response.sendRedirect($services.csrf.getResubmissionURL()); 341 341 #end 342 342 #end 343 343 {{/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 {