Wiki-Quellcode von Thema

Zuletzt geändert von Daniel Herrmann am 2025/12/16 11:17

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 {{html wiki='true'}}
44 <dl>
45 #foreach ($prop in $class.properties)
46 #if ($prop.classType != 'TextArea')
47 <dt>
48 <label for="${className}_$escapetool.xml($services.rendering.escape($doc.getObject($className).getNumber(), 'xwiki/2.1'))_$escapetool.xml($services.rendering.escape($prop.name, 'xwiki/2.1'))">
49 $escapetool.xml($services.rendering.escape($prop.prettyName, 'xwiki/2.1'))
50 </label>
51 </dt>
52 <dd>
53 #if($prop.name == 'logo')
54
55 {{warning}}
56 {{translation key="skin.sheet.properties.logo.warning" /}}
57 {{/warning}}
58
59 {{attachmentSelector classname="${className}" property="${services.rendering.escape($prop.name, 'xwiki/2.1')}" filter="png,jpg,gif,svg" displayImage="true"/}}
60 #else
61 $doc.display($prop.name)
62 #end
63 </dd>
64
65 #else
66 #set($discard = $deprecatedProperties.add($prop))
67 #end
68 #end
69 </dl>
70 {{/html}}
71 (% id="overrideSection" %)
72 (((
73 == {{translation key="skin.sheet.overriddenTemplates" /}} ==
74
75 {{warning}}
76 {{translation key="skin.sheet.overrideTemplateWarning" /}}
77 {{/warning}}
78
79 {{html}}
80 <noscript>
81 #error($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>'))
82 </noscript>
83 {{/html}}
84
85 {{html}}
86 <div id="addOverride">
87 <label for="newPath" class="newPathLabel">$services.icon.renderHTML('add') $escapetool.xml($services.localization.render("skin.sheet.addTemplate"))</label>
88 <input placeholder="file.vm" id="newPath" name="newPath" placeholder="file.vm" size="20" type="text" />
89 <button class="btn btn-primary" id="newPathAdd">$escapetool.xml($services.localization.render("skin.sheet.add"))</button>
90 </div>
91 {{/html}}
92 ## Display the XWiki.XWikiSkinFileOverrideClass objects
93 #foreach ($obj in $doc.getObjects('XWiki.XWikiSkinFileOverrideClass'))
94 #displayOverrideObject($obj)
95 #end
96 )))
97
98 #if ($deprecatedProperties.size() > 0)
99 (% class="deprecatedProperties" %)
100 (((
101 == {{translation key="skin.sheet.deprecatedProperties" /}} ==
102
103 {{warning}}
104 {{translation key="skin.sheet.deprecatedPropertiesWarning" /}}
105 {{/warning}}
106
107 #foreach ($prop in $deprecatedProperties)
108 #if ($prop.classType == 'TextArea')
109 ; $services.icon.render('file-white') $services.rendering.escape($prop.prettyName, 'xwiki/2.1')
110 : $doc.display($prop.name)
111
112 #end
113 #end
114 )))
115 #end
116 #end
117 ###########################
118 ## DISPLAY OVERRIDE OBJ
119 ###########################
120 #macro(displayOverrideObject $obj)
121 (% class="overrideObject" %)
122 (((
123 (% class="overrideTitle" %)
124 === $services.icon.render('file-white') $obj.display('path', 'view') ===
125 (% class="overrideObjectDelete" %)
126 (((
127 {{html}}<button class="btn btn-default btn-xs">$services.icon.renderHTML('cross')</button>{{/html}}
128 )))
129 (% class="overrideProperties hidden" %)
130 (((
131 #set ($className = 'XWiki.XWikiSkinFileOverrideClass')
132 #set ($class = $doc.getObject($className).xWikiClass)
133 #foreach ($prop in $class.properties)
134 ; $services.rendering.escape($prop.prettyName, 'xwiki/2.1')
135 : $obj.display($prop.name, 'edit')
136
137 #end
138 )))
139 ----
140 )))
141 #end
142 ###########################
143 ## CHECK RIGHTS
144 ###########################
145 #macro(checkRights $response)
146 #if(!$services.csrf.isTokenValid($request.form_token))
147 #set($discard = $response.put('status', 'fail'))
148 #set($discard = $response.put('cause', 'form_token'))
149 #elseif(!$xwiki.hasAccessLevel('edit', $xcontext.user, $doc.fullname))
150 #set($discard = $response.put('status', 'fail'))
151 #set($discard = $response.put('cause', 'rights'))
152 #end
153 #end
154 ###########################
155 ## NEW OBJ
156 ###########################
157 #macro(newObj)
158 #set($response = {})
159 #checkRights($response)
160 #if("$!response.get('status')" != 'fail')
161 #set($obj = $doc.newObject('XWiki.XWikiSkinFileOverrideClass'))
162 #set($discard = $obj.set('path', $request.path))
163 #set($discard = $doc.save('Add a new XWiki.XWikiSkinFileOverrideClass object'))
164 #set($discard = $response.put('objNumber', $obj.number))
165 #set($discard = $response.put('status', 'success'))
166 #end
167 $jsontool.serialize($response)
168 #end
169 ###########################
170 ## DELETE OBJ
171 ###########################
172 #macro(deleteObj)
173 #set($response = {})
174 #checkRights($response)
175 #if("$!response.get('status')" != 'fail')
176 #set($objNumber = $numbertool.toNumber($request.objNumber).intValue())
177 #set($obj = $doc.getObject('XWiki.XWikiSkinFileOverrideClass', $objNumber))
178 #set($discard = $doc.removeObject($obj))
179 #set($saveMessage = "Remove the object XWiki.XWikiSkinFileOverrideClass[" + $obj.getValue('path') + "]")
180 #set($discard = $doc.save($saveMessage))
181 #set($discard = $response.put('status', 'success'))
182 #end
183 $jsontool.serialize($response)
184 #end
185 {{/velocity}}