General Actions:
Log-in
Register
Wiki:
Main wiki
▼
:
Document Index
»
Space:
AppWithinMinutes
▼
:
Document Index
»
Page:
LiveTableGenerator
Search
default
Page Actions:
Export
▼
:
Export as PDF
Export as RTF
Export as HTML
More actions
▼
:
Print preview
View Source
Main wiki
»
App Within Minutes
»
LiveTableGenerator
Wiki source code of
LiveTableGenerator
Last modified by
Administrator
on 2012/03/21 17:41
Content
·
Comments
(0)
·
Annotations
(0)
·
Attachments
(0)
·
History
·
Information
Hide line numbers
1: {{velocity output="false" filter="none"}} 2: #macro(escapeApostrophe $string) 3: $string.replace("'", "''")## 4: #end 5: 6: #macro(prepareTranslations) 7: ${escapetool.h}set(${escapetool.d}originalMsg = ${escapetool.d}msg) 8: ${escapetool.h}set(${escapetool.d}msg = ${escapetool.d}services.dynamicMessageToolFactory.createDynamicMessageTool(${escapetool.d}msg, { 9: ## 10: ## Inject translations for the selected columns. 11: #set($genericColumns = { 12: 'doc.title': '$msg.get(''platform.appwithinminutes.liveTableEditorDocTitleColumnName'')', 13: 'doc.name': '$msg.get(''platform.appwithinminutes.liveTableEditorDocNameColumnName'')', 14: 'doc.space': '$msg.get(''platform.appwithinminutes.liveTableEditorDocSpaceColumnName'')', 15: 'doc.fullname': '$msg.get(''platform.appwithinminutes.liveTableEditorDocFullNameColumnName'')', 16: 'doc.author': '$msg.get(''platform.appwithinminutes.liveTableEditorDocAuthorColumnName'')', 17: 'doc.creator': '$msg.get(''platform.appwithinminutes.liveTableEditorDocCreatorColumnName'')', 18: 'doc.date': '$msg.get(''platform.appwithinminutes.liveTableEditorDocDateColumnName'')', 19: 'doc.creationDate': '$msg.get(''platform.appwithinminutes.liveTableEditorDocCreationDateColumnName'')', 20: '_avatar': '$msg.get(''platform.appwithinminutes.liveTableEditorAvatarColumnName'')', 21: '_images': '$msg.get(''platform.appwithinminutes.liveTableEditorImagesColumnName'')', 22: '_attachments': '$msg.get(''platform.appwithinminutes.liveTableEditorAttachmentsColumnName'')', 23: '_actions': '$msg.get(''platform.appwithinminutes.liveTableEditorActionsColumnName'')' 24: }) 25: #foreach($column in $columns) 26: ## Default on the specified column name. 27: #set($translatedColumnName = $column) 28: #set($wrapper = "'") 29: ## Check if the column is based on a class field. 30: #set($field = $xclass.get($column)) 31: #if($field) 32: #set($translatedColumnName = "#escapeApostrophe($field.prettyName)") 33: #if($field.type.endsWith('ListClass')) 34: ## Inject translations for the list values. 35: #foreach($entry in $field.mapValues.entrySet()) 36: '#escapeApostrophe("${className}_${column}_$entry.key")': '#escapeApostrophe($entry.value.value)', 37: #end 38: #end 39: #elseif($genericColumns.containsKey($column)) 40: ## A generic column. 41: ## Don't escape the apostrophes because we simply copy the translation. 42: #set($translatedColumnName = $genericColumns.get($column)) 43: #set($wrapper = '') 44: ## The Actions column is a bit special. 45: #if($column == '_actions') 46: #set($actionNames = {'edit': '$msg.get(''platform.appwithinminutes.appLiveTableEditEntryActionName'')', 'delete': '$msg.get(''platform.appwithinminutes.appLiveTableDeleteEntryActionName'')'}) 47: #foreach($entry in $actionNames.entrySet()) 48: '${shortName}.livetable._actions.${entry.key}': $entry.value, 49: #end 50: #end## Actions column 51: #end## Generic column 52: '${shortName}.livetable.$column': $wrapper$translatedColumnName$wrapper## 53: #if($velocityCount < $columns.size()) 54: , 55: #end 56: #end## Selected columns 57: 58: })) 59: #end 60: 61: #macro(prepareColumnProperties) 62: ${escapetool.h}set(${escapetool.d}columnsProperties = {## 63: #set($genericColumns = ['doc.title', 'doc.name', 'doc.space', 'doc.fullName', 'doc.author', 'doc.date', 'doc.creator', 'doc.creationDate']) 64: #set($specialColumns = ['_avatar', '_images', '_attachments', '_actions']) 65: #set($separator = '') 66: #foreach($column in $columns) 67: #set($field = $xclass.get($column)) 68: #if($field) 69: #set($isHTML = false) 70: #set($type = 'text') 71: #if($field.classType.endsWith("TextAreaClass")) 72: #set($isHTML = true) 73: #elseif($field.classType.endsWith("ListClass")) 74: #set($type = 'list') 75: #end 76: $separator 77: '$column': {'type': '$type', 'size': 10, 'filterable': true, 'sortable': true, 'html': $isHTML}## 78: #set($separator = ',') 79: #elseif($genericColumns.contains($column)) 80: #set($link = 'view') 81: #if($column == 'doc.creator' || $column == 'doc.author') 82: #set($link = 'author') 83: #end 84: $separator 85: '$column': {'type': 'text', 'link': '$link', 'size': #if($column == 'doc.title')20#{else}10#end, 'filterable': true, 'sortable': true}## 86: #set($separator = ',') 87: #elseif($specialColumns.contains($column)) 88: $separator 89: '$column': {'html': true, 'sortable': false#if($column == '_actions'), 'actions': ['edit', 'delete']#end}## 90: #set($separator = ',') 91: #end 92: #end 93: 94: }) 95: #end 96: 97: #macro(maybeGenerateLiveTable) 98: #set($liveTableObj = $doc.getObject('AppWithinMinutes.LiveTableClass')) 99: #if($liveTableObj) 100: #set($columns = $liveTableObj.getProperty('columns').value.trim()) 101: #if("$!columns" != '') 102: #set($columns = $columns.split('\s+')) 103: #generateLiveTable() 104: #end 105: #end 106: #end 107: 108: #macro(generateLiveTable) 109: {{{## 110: {{include document="AppWithinMinutes.DynamicMessageTool" context="new" /}} 111: 112: {{velocity}} 113: #set($className = $liveTableObj.getProperty('class').value) 114: #set($classDoc = $xwiki.getDocument($className)) 115: #set($xclass = $classDoc.getxWikiClass()) 116: #set($shortName = $classDoc.name.replaceAll("Class", "").toLowerCase()) 117: #prepareTranslations() 118: #prepareColumnProperties() 119: ${escapetool.h}set(${escapetool.d}options = { 120: 'className': '$className', 121: 'resultPage' : 'AppWithinMinutes.LiveTableGenerator', 122: 'translationPrefix': '${shortName}.livetable.', 123: 'tagCloud': true, 124: 'rowCount': 15, 125: 'maxPages': 10, 126: 'selectedColumn': '$columns.get(0)', 127: 'defaultOrder': 'asc' 128: }) 129: ${escapetool.h}set(${escapetool.d}columns = [#foreach($column in $columns)#if($velocityCount > 1), #end'$column'#end]) 130: ${escapetool.h}livetable('$shortName' ${escapetool.d}columns ${escapetool.d}columnsProperties ${escapetool.d}options) 131: ## 132: ## Restore the original message tool. 133: ${escapetool.h}set(${escapetool.d}msg = ${escapetool.d}originalMsg) 134: {{/velocity}}## 135: }}} 136: #end 137: 138: #macro(outputLiveTableResults) 139: #set($output = "#gridresult($!request.classname $request.collist.split(','))") 140: ## We have to escape the translation key because it appears as JSON value in the output. 141: #set($escapedEmptyValueTranslationKey = $escapetool.javascript("${request.transprefix}emptyvalue")) 142: $output.replace($escapedEmptyValueTranslationKey, '-') 143: #end 144: {{/velocity}}{{velocity}} 145: ## We do the include separately because the wiki syntax is evaluated after the Velocity code. 146: #if("$!request.collist" != '') 147: {{include document="XWiki.LiveTableResultsMacros" /}} 148: #end 149: {{/velocity}}{{velocity wiki="false"}} 150: ## We need custom live table results just because we don't generate/register a document translation bundle yet. 151: #if("$!request.collist" != '') 152: #outputLiveTableResults() 153: #end 154: {{/velocity}}{{velocity}} 155: #if("$!request.collist" == '') 156: #maybeGenerateLiveTable() 157: #end 158: {{/velocity}}