Wiki source code of Panels

Last modified by Thomas Coelho (local) on 2024/02/05 13:37

Hide last authors
Thomas Coelho (local) 1.1 1 {{velocity output="false"}}
2 ##
3 ## Redirect to force right and left panels layout
4 ##
5 #set ($mustRedirect = false)
6 #set ($redirectQuery = '')
7 #set ($redirectDoc = $doc.fullName)
8 #set ($redirectMode = 'view')
9 #if ($xwiki.exists('XWiki.AdminSheet'))
10 ## The new administration interface, use XWiki.XWikiPreferences as the container document, and this as an included sheet
11 #set ($currSpace = $request.getParameter('space'))
12 #set ($redirectQuery = "$!{request.queryString}&forceLeftPanels=1&forceRightPanels=1&section=Panels.PanelWizard&$!docvariant")
13 #set ($redirectMode = 'admin')
14 #if ($doc.documentReference.name != 'XWikiPreferences' && $doc.documentReference.name != 'WebPreferences')
15 #set ($redirectDoc = 'XWiki.XWikiPreferences')
16 #set ($mustRedirect = true)
17 #end
18 #else
19 ## No admin application, use this as the container document
20 #set ($redirectQuery = "$!{request.queryString}&forceLeftPanels=1&forceRightPanels=1&$!docvariant")
21 #end
22 #if (!$request.getParameter('forceLeftPanels') || !$request.getParameter('forceRightPanels'))
23 #set ($mustRedirect = true)
24 #end
25 #if ($mustRedirect)
26 $response.sendRedirect($xwiki.getDocument($redirectDoc).getURL($redirectMode, $redirectQuery))##
27 #stop()
28 #end
29 ## No redirect needed, display the wizard
30 #set ($showdata = 0)
31 #set ($showEmptyPanels = 1)
32 #if ("$!{currSpace}" != '')
33 #set ($accessLevel = $xwiki.hasAccessLevel('admin', $xcontext.user, "${currSpace}.WebPreferences"))
34 #else
35 #set ($accessLevel = $xwiki.hasAdminRights())
36 #end
37 ##
38 ## Check for admin right for the current preferences document (XWiki.XWikiPreferences or Space.WebPreferences)
39 ##
40 {{/velocity}}
41
42 {{velocity output="false"}}
43 #macro (displayConfigPropertyValue $propName $action)
Thomas Coelho 3.1 44 #unwrapXPropertyDisplay($doc.display($propName, $action))
Thomas Coelho (local) 1.1 45 #end
46
47 #macro (displayPageLayoutSection)
48 <dl>
49 <dt>
50 <label>$services.localization.render('panelwizard.panelColumns')</label>
51 <span class="xHint">
52 $services.localization.render('panelwizard.choosepagelayout')
53 </span>
54 </dt>
55 <dd class="row pagelayoutoptions">
56 #set ($crtlayout = 0)
57 #if ($showLeftPanels and $showLeftPanels == '1')
58 #set ($crtlayout = $crtlayout + 1)
59 #end
60 #if ($showRightPanels and $showRightPanels == '1')
61 #set ($crtlayout = $crtlayout + 2)
62 #end
63 <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 pagelayoutoption pagelayoutoption0"
64 #if ($crtlayout == 0) id="selectedoption"#end>
65 <label>$escapetool.xml($services.localization.render('panelwizard.nosidecolumn'))</label>
66 <div id="nosidecolumn" class="layoutmaquette">
67 <div class="lmcontentcolumn"></div>
68 </div>
69 </div>
70 <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 pagelayoutoption pagelayoutoption1"
71 #if ($crtlayout == 1) id="selectedoption"#end>
72 <label>$escapetool.xml($services.localization.render('panelwizard.leftcolumn'))</label>
73 <div id="leftcolumn" class="layoutmaquette">
74 <div class="lmleftcolumn"></div>
75 <div class="lmcontentcolumn"></div>
76 </div>
77 </div>
78 <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 pagelayoutoption pagelayoutoption2"
79 #if ($crtlayout == 2) id="selectedoption"#end>
80 <label>$escapetool.xml($services.localization.render('panelwizard.rightcolumn'))</label>
81 <div id="rightcolumn" class="layoutmaquette">
82 <div class="lmrightcolumn"></div>
83 <div class="lmcontentcolumn"></div>
84 </div>
85 </div>
86 <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 pagelayoutoption pagelayoutoption3"
87 #if ($crtlayout == 3) id="selectedoption"#end>
88 <label>$escapetool.xml($services.localization.render('panelwizard.bothcolumns'))</label>
89 <div id="bothcolumns" class="layoutmaquette">
90 <div class="lmleftcolumn"></div>
91 <div class="lmrightcolumn"></div>
92 <div class="lmcontentcolumn"></div>
93 </div>
94 </div>
95 </dd>
96 <dt>
97 <label for="XWiki.XWikiPreferences_0_leftPanelsWidth">
98 $services.localization.render('XWiki.XWikiPreferences_leftPanelsWidth')
99 </label>
100 <span class="xHint">
101 $services.localization.render('XWiki.XWikiPreferences_leftPanelsWidth.hint')
102 </span>
103 </dt>
104 <dd>#displayConfigPropertyValue('leftPanelsWidth' 'edit')</dd>
105 <dt>
106 <label for="XWiki.XWikiPreferences_0_leftPanels">
107 $services.localization.render('XWiki.XWikiPreferences_leftPanels')
108 </label>
109 <span class="xHint">
110 $services.localization.render('XWiki.XWikiPreferences_leftPanels.hint')
111 </span>
112 </dt>
113 <dd>#displayConfigPropertyValue('leftPanels' 'edit')</dd>
114 <dt>
115 <label for="XWiki.XWikiPreferences_0_rightPanelsWidth">
116 $services.localization.render('XWiki.XWikiPreferences_rightPanelsWidth')
117 </label>
118 <span class="xHint">
119 $services.localization.render('XWiki.XWikiPreferences_rightPanelsWidth.hint')
120 </span>
121 </dt>
122 <dd>#displayConfigPropertyValue('rightPanelsWidth' 'edit')</dd>
123 <dt>
124 <label for="XWiki.XWikiPreferences_0_rightPanels">
125 $services.localization.render('XWiki.XWikiPreferences_rightPanels')
126 </label>
127 <span class="xHint">
128 $services.localization.render('XWiki.XWikiPreferences_rightPanels.hint')
129 </span>
130 </dt>
131 <dd>#displayConfigPropertyValue('rightPanels' 'edit')</dd>
132 </dl>
133 #end
134
135 #macro (displayPanelListSection)
136 (% id="draganddroptooltip" class="hastooltip noitems" title="${services.localization.render('panelwizard.tip')}"%)$services.localization.render('panelwizard.draganddrop')(%%)
137 #set ($panelClass = $xwiki.getDocument('Panels.PanelClass').xWikiClass)
138 #set ($categoryList = $panelClass.category.getProperty('values').value.split('[|]'))
139 #set ($panelsList = $services.query.xwql('from doc.object(Panels.PanelClass) as panel where doc.fullName <> ''Panels.PanelTemplate''').execute())
140 #set ($categoryMap = {})
141 #foreach ($category in $categoryList)
142 $!categoryMap.put($category, [])##
143 #end
144 #foreach ($item in $panelsList)
145 ## stats panels can't be seen by non global admins
146 #if ($xwiki.hasAccessLevel('view', $xcontext.user, $item))
147 #set ($obj = $xwiki.getDocument($item).getObject('Panels.PanelClass'))
148 #if ($obj.type == 'view')
149 #set ($arrayList = $categoryMap.get($obj.category))
150 #if ($arrayList)
151 #set ($discard = $categoryMap.get($obj.category).add($item))
152 ## TODO: uncategorized?
153 #end
154 #end
155 #end
156 #end
157 #set ($panelsPerRow = 3)
Thomas Coelho (local) 4.1 158 (% id="dhtmltooltip" %)((()))
Thomas Coelho (local) 1.1 159 #if ($request.place)
160 #set ($ajaxurl = $xwiki.getDocument('Panels.PanelLayoutUpdate').getURL('get', "xpage=plain&outputSyntax=plain&place=$!{escapetool.url($request.place)}&prefsdoc=${escapetool.url($currentDoc)}&form_token=${escapetool.url($services.csrf.getToken())}"))
161 #else
162 #set ($ajaxurl = $xwiki.getDocument("Panels.PanelLayoutUpdate").getURL('get', "xpage=plain&outputSyntax=plain&prefsdoc=${escapetool.url($currentDoc)}&form_token=${escapetool.url($services.csrf.getToken())}"))
163 #end
164 $xwiki.jsfx.use('js/xwiki/panelwizard/Drag.js')##
165 $xwiki.jsfx.use('js/xwiki/panelwizard/ieemu.js')##
166 $xwiki.jsfx.use('js/xwiki/panelwizard/toolTip.js')##
167 {{html}}
168 <script>
169 //<![CDATA[
170 window.ajaxurl = "$ajaxurl";
171 window.allPanelsPlace = new Object();
172 window.panelsavesuccess = "$escapetool.javascript($services.localization.render('panelsavesuccess'))";
173 window.panelsaveerror = "$escapetool.javascript($services.localization.render('panelsaveerror'))";
174 #set ($counter = 0)
175 #set ($panelsStatus = {})
176 #foreach ($category in $categoryList)
177 #set ($categPanels = $categoryMap.get($category))
178 #foreach ($item in $categPanels)
179 #set ($discard = $panelsStatus.put($item, 'false'))
180 #set ($obj = $xwiki.getDocument($item).getObject('Panels.PanelClass'))
181 window.allPanelsPlace[$counter] = new Object();
182 window.allPanelsPlace[$counter]['fullname'] = '$escapetool.javascript($item)';
183 #set ($issetleft = 0)
184 #set ($counterleft = 0)
185 #set ($issetright = 0)
186 #set ($counterright = 0)
187 #foreach ($element in $leftPanels.split(','))
188 #if ($item == $element)
189 window.allPanelsPlace[$counter]['left'] = $counterleft;
190 #set ($issetleft = 1)
191 #set ($discard = $panelsStatus.put($item, 'true'))
192 #end
193 #set ($counterleft = $counterleft + 1)
194 #end
195 #if ($issetleft == 0)
196 window.allPanelsPlace[$counter]['left'] = -1;
197 #end
198 #foreach ($element in $rightPanels.split(','))
199 #if ($item == $element)
200 window.allPanelsPlace[$counter]['right'] = $counterright;
201 #set ($issetright = 1)
202 #set ($discard = $panelsStatus.put($item, 'true'))
203 #end
204 #set ($counterright = $counterright + 1)
205 #end
206 #if ($issetright == 0)
207 window.allPanelsPlace[$counter]['right'] = -1;
208 #end
209 #set ($counter = $counter + 1)
210 #end
211 #end
212 window.showLeftColumn = $showLeftPanels;
213 window.showRightColumn = $showRightPanels;
214 #if ($showApplicationPanel)
215 window.showApplicationPanel = true;
216 #else
217 window.showApplicationPanel = false;
218 #end
219 require(['scriptaculous-accordion'], function() {
220 createAccordion({div: 'panellistaccordion', no: 0, height: 512});
221 });
222 //]]>
223 </script>
224 {{/html}}
225 $xwiki.jsfx.use('js/xwiki/panelwizard/panelWizard.js')##
226
227 (% id="allviewpanels" %)
228 (((
229 (% id="panellistaccordion" class="accordion" %)
230 (((
231 #set ($panelCount = 0)
232 #foreach ($category in $categoryList)
233 ## start of accordion tab:
234 (% class="accordionTabTitleBar" id="${category}_header" %)
235 (((=${category}=)))
236 ## start of accordion tab content:
237 (% class="accordionTabContentBox" %)
238 (((
239 #set ($categPanels = $categoryMap.get($category))
240 #if ($categPanels.size() == 0)
241 (%class="noitems"%)$services.localization.render('panelwizard.nopanels')(%%)
242 #else
243 #foreach ($item in $categPanels)
244 #set ($panelDoc = $xwiki.getDocument($item))
245 #set ($obj = $panelDoc.getObject('Panels.PanelClass'))
246 (% class="panelitemc" %)
247 (((
248 (% class="label" %)((($doc.display('name', $obj))))
249 (% id="panelContainer${panelCount}" class="panelcontainer" title="${doc.display('description', 'view', $obj, 'xwiki/2.0').replaceAll('^\{\{html(.*?)\}\}', '').replaceAll('\{\{/html\}\}$', '')}" %)(((#if($panelsStatus.get($item) == 'false')#displaypanel($item)#else(% class="panel" %)((()))#end)))
Thomas Coelho (local) 2.1 250 (% class="xwikibuttonlink" %)((([[$services.localization.render('edit')>>path:$xwiki.getURL($item, 'edit')]] [[$services.localization.render('delete')>>path:$xwiki.getURL($item, 'delete')]])))
Thomas Coelho (local) 1.1 251 )))
252 #set ($panelCount = $panelCount + 1)
253 #end## foreach panel
254 #end## categPanels.size()
255 )))## end of accordion tab content - accordionTabContentBox
256 #end## foreach category
257 )))## panellistaccordion
258 )))## allviewpanels
259 #end
260 {{/velocity}}
261
262 {{velocity}}
263 {{html clean="false"}}
264 #if ($accessLevel)
265 #set ($discard = $xwiki.jsx.use('Panels.PanelWizard'))
266 #set ($discard = $xwiki.ssx.use('Panels.PanelWizard'))
267 <ul class="nav nav-tabs" role="tablist" id="panelEditorSteps">
268 <li role="presentation" class="active">
269 <a href="#PageLayoutSection" aria-controls="PageLayoutSection" role="tab" data-toggle="tab"
270 >$escapetool.xml($services.localization.render('panelwizard.pagelayout'))</a>
271 </li>
272 <li role="presentation">
273 <a href="#PanelListSection" aria-controls="PanelListSection" role="tab" data-toggle="tab"
274 >$escapetool.xml($services.localization.render('panelwizard.panellist'))</a>
275 </li>
276 </ul>
277 <div class="tab-content">
278 <div role="tabpanel" class="tab-pane active xform" id="PageLayoutSection">
279 #displayPageLayoutSection
280 </div>
281 <div role="tabpanel" class="tab-pane" id="PanelListSection">
282 {{/html}}
283
284 #displayPanelListSection
285
286 {{html clean="false"}}
287 </div>
288 </div>
289 <div id="panelwizardbuttons">
290 <button class="btn btn-primary" id="saveLayout"
291 >$services.localization.render('xe.panels.wizard.savenew')</button>
292 <button class="btn btn-default" id="revertLayout"
293 >$services.localization.render('xe.panels.wizard.revert')</button>
294 <a href="$xwiki.getURL('Panels.WebHome')"
295 >$services.localization.render('xe.panels.wizard.homepage')</a>
296 </div>
297 #end
298 {{/html}}
299 {{/velocity}}