Wiki source code of Panels
Last modified by Thomas Coelho (local) on 2024/02/05 13:37
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 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§ion=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) | ||
| 44 | #unwrapXPropertyDisplay($doc.display($propName, $action)) | ||
| 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) | ||
| 158 | (% id="dhtmltooltip" %)((())) | ||
| 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))) | ||
| 250 | (% class="xwikibuttonlink" %)((([[$services.localization.render('edit')>>path:$xwiki.getURL($item, 'edit')]] [[$services.localization.render('delete')>>path:$xwiki.getURL($item, 'delete')]]))) | ||
| 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}} |