Changes for page Administration

Last modified by Leon Poon on 2025/05/12 14:26

From version 2.1
edited by Leon Poon
on 2019/04/20 06:00
Change comment: Install extension [org.xwiki.platform:xwiki-platform-administration-ui/11.2]
To version 8.1
edited by Leon Poon
on 2024/03/23 04:26
Change comment: Install extension [org.xwiki.platform:xwiki-platform-administration-ui/15.10.7]

Summary

Details

Page properties
Content
... ... @@ -9,7 +9,7 @@
9 9  #set ($adminAction = 'admin')
10 10  #set ($crtCategoryId = "$!{request.category}")
11 11  #if ($crtCategoryId != '')
12 - #set ($crtCategoryId = $mathtool.toInteger($crtCategoryId))
12 + #set ($crtCategoryId = $numbertool.toNumber($crtCategoryId).intValue())
13 13  #end
14 14  #set ($crtSectionId = "$!{request.section}")
15 15  
... ... @@ -16,6 +16,9 @@
16 16  ##
17 17  ## Admin menu map
18 18  ##
19 +## displayInSection: menu.name | sectionOrder: 200 | page: Menu.MenuConfigurationSection
20 +## displayInSection: panels.applications | sectionOrder: 400 | page: PanelsCode.ApplicationsPanelConfigurable
21 +## displayInSection: panels.navigation | sectionOrder: 500 | page: PanelsCode.NavigationConfigurationSection
19 19  #set($adminMenu = [
20 20   {
21 21   'id' : 'lf',
... ... @@ -23,8 +23,8 @@
23 23   'displayBeforeCategory': 'content',
24 24   'children': [
25 25   {'id' : 'Themes', 'perSpace' : true, 'order' : 100},
26 - {'id' : 'Panels.PanelWizard', 'perSpace' : true, 'order' : 200},
27 - {'id' : 'Presentation', 'perSpace' : true, 'order' : 300}
29 + {'id' : 'Panels.PanelWizard', 'perSpace' : true, 'order' : 300},
30 + {'id' : 'Presentation', 'perSpace' : true, 'order' : 600}
28 28   ]
29 29   },
30 30   {
... ... @@ -84,7 +84,7 @@
84 84  #set ($crtCategory = $NULL)
85 85  #foreach ($category in $adminMenu)
86 86   ## "Standard" URLs and icons for categories
87 - #set ($category.url = $xwiki.getURL($currentDoc, $adminAction, "category=${mathtool.sub($velocityCount, 1)}"))
90 + #set ($category.url = $xwiki.getURL($currentDoc, $adminAction, "category=${mathtool.sub($foreach.count, 1)}"))
88 88   #if ($xwiki.getDocument('XWiki.AdminSheet').getAttachment("${category.id}.png"))
89 89   #set ($category.iconReference = "XWiki.AdminSheet@${category.id}.png")
90 90   #else
... ... @@ -93,7 +93,7 @@
93 93   #set ($category.description = $services.localization.render("admin.${category.id}.description").trim())
94 94   #set ($category.cssClass = "${category.id}Icon")
95 95   #set ($category.name = $services.localization.render("admin.${category.id}").trim())
96 - #if ("$!{crtCategoryId}" != '' && $velocityCount == $mathtool.add($crtCategoryId, 1))
99 + #if ("$!{crtCategoryId}" != '' && $foreach.count == $mathtool.add($crtCategoryId, 1))
97 97   #set ($crtCategory = $category)
98 98   #end
99 99   ##
... ... @@ -229,10 +229,14 @@
229 229  
230 230  #macro (verticalNavigation $menu $options)
231 231   {{html clean="false"}}
232 - <div id="$!options.id" class="panel-group $!options.cssClass" role="tablist" aria-multiselectable="true">
235 + <nav id="$!options.id" class="panel-group $!options.cssClass"
236 + aria-label="$escapetool.xml($services.localization.render('administration.menu.label'))">
233 233   <div class="panel xform">
234 - <input type="text" class="form-control panel-group-filter" autocomplete="off"
235 - placeholder="$escapetool.xml($services.localization.render('administration.menu.search.hint'))" />
238 + <label for="adminsearchmenu" class="hidden">$services.localization.render('search')</label>
239 + <input type="text" class="form-control panel-group-filter" autocomplete="off" id="adminsearchmenu"
240 + placeholder="$escapetool.xml($services.localization.render('administration.menu.search.hint'))"
241 + ## Disable the search input initially until the JavaScript code that handles the search is ready.
242 + disabled="disabled" />
236 236   </div>
237 237   #foreach ($item in $menu)
238 238   #verticalNavigationItem($item $options)
... ... @@ -242,7 +242,7 @@
242 242   $escapetool.xml($services.localization.render('administration.menu.search.noResults'))
243 243   </div>
244 244   </div>
245 - </div>
252 + </nav>
246 246   {{/html}}
247 247  #end
248 248  
... ... @@ -258,11 +258,11 @@
258 258   #set ($children = [])
259 259   #sortCollectionOfMapsByField($item.children, 'order', 99999, 'asc', $children)
260 260   <div class="panel panel-default">
261 - <a class="panel-heading#if (!$isActive) collapsed#end" role="tab" id="panel-heading-$escapedId"
268 + <a class="panel-heading#if (!$isActive) collapsed#end" id="panel-heading-$escapedId"
262 262   href="$!item.url" data-toggle="collapse"#if ("$!options.id" != '') data-parent="#$options.id" #end
263 263   data-target="#panel-body-$escapedId" aria-expanded="$isActive" aria-controls="panel-body-$escapedId"
264 264   title="$!escapetool.xml($item.description)">$!services.icon.renderHTML($item.icon)$escapetool.xml($name)</a>
265 - <div class="panel-collapse collapse#if ($isActive) in#end" role="tabpanel" id="panel-body-$escapedId"
272 + <section class="panel-collapse collapse#if ($isActive) in#end" id="panel-body-$escapedId"
266 266   aria-labelledby="panel-heading-$escapedId">
267 267   <div class="list-group">
268 268   #foreach ($child in $children)
... ... @@ -269,7 +269,7 @@
269 269   #verticalNavigationItem($child $options)
270 270   #end
271 271   </div>
272 - </div>
279 + </section>
273 273   </div>
274 274   #else
275 275   <a class="list-group-item#if ($isActive) active#end" data-id="$escapedId"
... ... @@ -284,7 +284,7 @@
284 284  ## Administration Sheet, used to display a common UI for some wiki features (presentation, users,
285 285  ## groups, rights etc.) at global / space level and also for several applications.
286 286  ##**************************************************************************************************
287 -#if($xcontext.action == 'view')
294 +#if($xcontext.action == 'view' && "$!request.viewer" == '')
288 288   $response.sendRedirect($xwiki.getURL($doc.getFullName(), 'admin', $request.getQueryString()))##
289 289  #else
290 290   $xwiki.jsx.use('XWiki.AdminSheet')##
... ... @@ -327,7 +327,7 @@
327 327   #end
328 328  #end
329 329  (% id="document-title" %)(((
330 - = $services.localization.render("administration.sectionTitle$level", [$sectionName]) =
337 + = $services.localization.render("administration.sectionTitle$level", 'xwiki/2.1', [$sectionName]) =
331 331   ## Display the category/section description below the title.
332 332   #set ($categoryOrSectionId = $crtCategory.id)
333 333   #if ("$!crtSection.id" != '')
... ... @@ -361,11 +361,8 @@
361 361   ##------------------------------------------------------------------------------------------------------------
362 362   ## The Administration allows editing other pages from different applications inside the admin context (UI)
363 363   ##------------------------------------------------------------------------------------------------------------
364 - #if ("$!{request.editmode}" == 'inline' && $xwiki.exists($section))
365 - #set ($discard = $xcontext.setDisplayMode('edit'))
366 - {{html clean="false"}}{{include reference="XWiki.AdminInlineSheet" /}}{{/html}}
367 - #elseif ($xwiki.exists("XWiki.Admin${section}Sheet"))
368 - ## Custom XE administration section
371 + #if ($xwiki.exists("XWiki.Admin${section}Sheet"))
372 + ## Handle known XWiki administration sections
369 369   {{include reference="XWiki.Admin${section}Sheet" /}}
370 370   #elseif ($xwiki.exists($section))
371 371   {{html clean="false"}}#includeForm($section){{/html}}
XWiki.JavaScriptExtension[0]
Code
... ... @@ -3,6 +3,8 @@
3 3   $(document).on('click', '.admin-menu a.panel-heading', function(event) {
4 4   event.preventDefault();
5 5   });
6 + // Mark the administration menu as ready for user interaction.
7 + $('.admin-menu').attr('data-ready', true);
6 6  });
7 7  
8 8  /**
... ... @@ -24,7 +24,7 @@
24 24   // Filter the categories.
25 25   panelGroup.find('a.panel-heading').each(function() {
26 26   var panel = $(this).closest('.panel');
27 - var hasVisibleSections = panel.find('.list-group-item').not('.hidden').size() > 0;
29 + var hasVisibleSections = panel.find('.list-group-item').not('.hidden').length > 0;
28 28   var matchesFilterQuery = !filterItem.call($(this), text);
29 29   panel.toggle(hasVisibleSections || matchesFilterQuery);
30 30   if (!hasVisibleSections && matchesFilterQuery) {
... ... @@ -48,7 +48,7 @@
48 48   .next('.panel-collapse').addClass('in').css('height', '');
49 49   }
50 50   // Show/Hide the "No results." message.
51 - var hasVisibleCategories = panelGroup.find('a.panel-heading').filter(':visible').size() > 0;
53 + var hasVisibleCategories = panelGroup.find('a.panel-heading').filter(':visible').length > 0;
52 52   panelGroup.find('.noitems').toggleClass('hidden', hasVisibleCategories);
53 53   };
54 54  
... ... @@ -59,6 +59,8 @@
59 59   var panelGroup = $(this).closest('.panel-group');
60 60   var text = $(this).val().toLowerCase();
61 61   // Schedule a new filter operation.
62 - timeoutId = setTimeout($.proxy(filterPanelGroup, panelGroup, text), 500);
63 - });
64 + timeoutId = setTimeout(filterPanelGroup.bind(panelGroup, text), 500);
65 +
66 + // Finally, enable the search input.
67 + }).prop('disabled', false);
64 64  });
XWiki.StyleSheetExtension[0]
Code
... ... @@ -89,8 +89,8 @@
89 89  }
90 90  
91 91  .admin-menu .panel-heading.collapsed {
92 - border-bottom-left-radius: 3px;
93 - border-bottom-right-radius: 3px;
92 + border-bottom-left-radius: 5px;
93 + border-bottom-right-radius: 5px;
94 94  }
95 95  
96 96  .admin-menu a.panel-heading {
... ... @@ -112,8 +112,8 @@
112 112  }
113 113  
114 114  .admin-menu .panel-collapse > .list-group:last-child .list-group-item.last {
115 - border-bottom-right-radius: 3px;
116 - border-bottom-left-radius: 3px;
115 + border-bottom-right-radius: 5px;
116 + border-bottom-left-radius: 5px;
117 117  }
118 118  
119 119  .admin-menu .panel.noitems > .panel-heading {