Wiki source code of Skin
Last modified by superadmin on 2019/11/08 17:50
Show last authors
author | version | line-number | content |
---|---|---|---|
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}} |