Version 1.1 von admin am 2025/02/23 19:44

Zeige letzte Bearbeiter
1 {{velocity}}
2 #####################################
3 ## XWikiSkins Sheet
4 #####################################
5 #set($discard = $xwiki.ssx.use('SkinsCode.XWikiSkinsSheet'))
6 #set($discard = $xwiki.jsx.use('SkinsCode.XWikiSkinsSheet'))
7 #set($discard = $services.localization.use('document', 'SkinsCode.Translations'))
8 #####################
9 ## CONTROLLER
10 #####################
11 ## Keep testing the inline action for backward compatibility with existing skin documents.
12 #if ($xcontext.action == 'edit' || $xcontext.action == 'inline')
13 #edit()
14 #elseif ($xcontext.action == 'get')
15 #if($request.action == 'newObj')
16 #newObj()
17 #elseif($request.action == 'displayObj')
18 #set($obj = $doc.getObject('XWiki.XWikiSkinFileOverrideClass', $numbertool.toNumber($request.objNumber).intValue()))
19 #displayOverrideObject($obj)
20 #elseif($request.action == 'deleteObj')
21 #deleteObj()
22 #end
23 #else
24 #view()
25 #end
26 #####################
27 ## VIEW
28 #####################
29 #macro(view)
30 ## Call getDefaultEditMode() for backward compatibility with existing skins.
31 * [[{{translation key="xe.admin.skin.editskin"/}}>>path:${services.rendering.escape($doc.getURL($doc.getDefaultEditMode()), 'xwiki/2.1')}]]
32 * [[{{translation key="xe.admin.skin.testskin"/}}>>${services.rendering.escape($services.model.resolveDocument('', 'default', $doc.documentReference.extractReference('WIKI')), 'xwiki/2.1')}||queryString="${services.rendering.escape($escapetool.url({"skin": $doc.fullName}), 'xwiki/2.1')}"]]
33 #end
34 #####################
35 ## EDIT
36 #####################
37 #macro(edit)
38 == {{translation key="skin.sheet.properties" /}} ==
39 ## Display the class properties
40 #set ($deprecatedProperties = [])
41 #set ($className = 'XWiki.XWikiSkins')
42 #set ($class = $doc.getObject($className).xWikiClass)
43 #foreach ($prop in $class.properties)
44 #if ($prop.classType != 'TextArea')
45 ; {{html}}<label for="${className}_$escapetool.xml($doc.getObject($className).getNumber())_$escapetool.xml($prop.name)">$escapetool.xml($prop.prettyName)</label>{{/html}}
46 : #if($prop.name == 'logo')## Avoid line break
47 {{attachmentSelector classname="${className}" property="${services.rendering.escape($prop.name, 'xwiki/2.1')}" filter="png,jpg,gif,svg" displayImage="true"/}}## Avoid line break
48 #else$doc.display($prop.name)#end
49
50 #else
51 #set($discard = $deprecatedProperties.add($prop))
52 #end
53 #end
54 (% id="overrideSection" %)
55 (((
56 == {{translation key="skin.sheet.overriddenTemplates" /}} ==
57
58 {{warning}}
59 {{translation key="skin.sheet.overrideTemplateWarning" /}}
60 {{/warning}}
61
62 {{html}}
63 <noscript>
64 <div class="box errormessage">
65 $escapetool.xml($services.localization.render('skin.sheet.nojs', ['LINK_START', 'LINK_END', 'XWiki.XWikiSkinFileOverrideClass'])).replace('LINK_START', "<a href='$escapetool.xml($doc.getURL('edit', 'editor=object'))'>").replace('LINK_END', '</a>')
66 </div>
67 </noscript>
68 {{/html}}
69
70 {{html}}
71 <div id="addOverride">
72 <label for="newPath" class="newPathLabel">$services.icon.renderHTML('add') $escapetool.xml($services.localization.render("skin.sheet.addTemplate"))</label>
73 <input placeholder="file.vm" id="newPath" name="newPath" value="file.vm" size="20" class="withTip" type="text" />
74 <button class="btn btn-primary" id="newPathAdd">$escapetool.xml($services.localization.render("skin.sheet.add"))</button>
75 </div>
76 {{/html}}
77 ## Display the XWiki.XWikiSkinFileOverrideClass objects
78 #foreach ($obj in $doc.getObjects('XWiki.XWikiSkinFileOverrideClass'))
79 #displayOverrideObject($obj)
80 #end
81 )))
82
83 #if ($deprecatedProperties.size() > 0)
84 (% class="deprecatedProperties" %)
85 (((
86 == {{translation key="skin.sheet.deprecatedProperties" /}} ==
87
88 {{warning}}
89 {{translation key="skin.sheet.deprecatedPropertiesWarning" /}}
90 {{/warning}}
91
92 #foreach ($prop in $deprecatedProperties)
93 #if ($prop.classType == 'TextArea')
94 ; $services.icon.render('file-white') $services.rendering.escape($prop.prettyName, 'xwiki/2.1')
95 : $doc.display($prop.name)
96
97 #end
98 #end
99 )))
100 #end
101 #end
102 ###########################
103 ## DISPLAY OVERRIDE OBJ
104 ###########################
105 #macro(displayOverrideObject $obj)
106 (% class="overrideObject" %)
107 (((
108 (% class="overrideTitle" %)
109 === $services.icon.render('file-white') $obj.display('path', 'view') ===
110 (% class="overrideObjectDelete" %)
111 (((
112 {{html}}<button class="btn btn-default btn-xs">$services.icon.renderHTML('cross')</button>{{/html}}
113 )))
114 (% class="overrideProperties hidden" %)
115 (((
116 #set ($className = 'XWiki.XWikiSkinFileOverrideClass')
117 #set ($class = $doc.getObject($className).xWikiClass)
118 #foreach ($prop in $class.properties)
119 ; $services.rendering.escape($prop.prettyName, 'xwiki/2.1')
120 : $obj.display($prop.name, 'edit')
121
122 #end
123 )))
124 ----
125 )))
126 #end
127 ###########################
128 ## CHECK RIGHTS
129 ###########################
130 #macro(checkRights $response)
131 #if(!$services.csrf.isTokenValid($request.form_token))
132 #set($discard = $response.put('status', 'fail'))
133 #set($discard = $response.put('cause', 'form_token'))
134 #elseif(!$xwiki.hasAccessLevel('edit', $xcontext.user, $doc.fullname))
135 #set($discard = $response.put('status', 'fail'))
136 #set($discard = $response.put('cause', 'rights'))
137 #end
138 #end
139 ###########################
140 ## NEW OBJ
141 ###########################
142 #macro(newObj)
143 #set($response = {})
144 #checkRights($response)
145 #if("$!response.get('status')" != 'fail')
146 #set($obj = $doc.newObject('XWiki.XWikiSkinFileOverrideClass'))
147 #set($discard = $obj.set('path', $request.path))
148 #set($discard = $doc.save('Add a new XWiki.XWikiSkinFileOverrideClass object'))
149 #set($discard = $response.put('objNumber', $obj.number))
150 #set($discard = $response.put('status', 'success'))
151 #end
152 $jsontool.serialize($response)
153 #end
154 ###########################
155 ## DELETE OBJ
156 ###########################
157 #macro(deleteObj)
158 #set($response = {})
159 #checkRights($response)
160 #if("$!response.get('status')" != 'fail')
161 #set($objNumber = $numbertool.toNumber($request.objNumber).intValue())
162 #set($obj = $doc.getObject('XWiki.XWikiSkinFileOverrideClass', $objNumber))
163 #set($discard = $doc.removeObject($obj))
164 #set($saveMessage = "Remove the object XWiki.XWikiSkinFileOverrideClass[" + $obj.getValue('path') + "]")
165 #set($discard = $doc.save($saveMessage))
166 #set($discard = $response.put('status', 'success'))
167 #end
168 $jsontool.serialize($response)
169 #end
170 {{/velocity}}