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