Changes for page KBCategoryLanding

Last modified by Isaac Mejia on 2026/06/08 20:12

From version 2.1
edited by Isaac Mejia
on 2026/06/08 20:12
Change comment: There is no comment for this version
To version 1.1
edited by Isaac Mejia
on 2026/06/08 20:07
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,11 +1,12 @@
1 1  {{velocity}}
2 2  ## ------------------------------------------------------------
3 3  ## Category landing page for eFit subwiki
4 -## URL pattern: /Main/<Category>/WebHome
5 -## e.g. /Main/Payment_Management/WebHome
4 +## Reads the category space from the URL so it works correctly
5 +## when included via {{include reference="KBCategoryLanding.WebHome"/}}
6 6  ## ------------------------------------------------------------
7 7  
8 -## Extract category from URL - grab segment after "Main"
8 +## Extract the space name from the request URI
9 +## URL pattern: /wiki/efit-kb.membies.com/view/<Space>/WebHome
9 9  #set ($uri = $request.getRequestURI())
10 10  #set ($baseSpace = '')
11 11  #set ($catDisplayName = '')
... ... @@ -14,22 +14,23 @@
14 14  #if ($uri.contains($viewMarker))
15 15   #set ($afterView = $uri.substring($uri.indexOf($viewMarker) + $viewMarker.length()))
16 16   #set ($uriParts = $afterView.split('/'))
17 - ## uriParts: [0]=Main, [1]=Payment_Management, [2]=WebHome
18 - #if ($uriParts.size() > 1)
19 - #set ($baseSpace = $uriParts.get(1))
18 + #if ($uriParts.size() > 0)
19 + #set ($baseSpace = $uriParts.get(0))
20 20   #end
21 21  #end
22 22  
23 -## Fallback
24 -#if ("$!baseSpace" == "" || $baseSpace == 'WebHome' || $baseSpace == 'Main')
25 - #set ($baseSpace = $doc.space.replace('Main.', ''))
23 +## Fallback to doc.space if URL parsing fails
24 +#if ("$!baseSpace" == "" || $baseSpace == 'KBCategoryLanding')
25 + #set ($baseSpace = $doc.space)
26 26  #end
27 27  
28 -## Full XWiki space reference e.g. "Main.Payment_Management"
29 -#set ($fullSpace = "Main." + $baseSpace)
28 +## Build display name from space name (replace underscores with spaces)
29 +#set ($catDisplayName = $baseSpace.replace('_', ' '))
30 30  
31 -## Display name - replace underscores and hyphens with spaces
32 -#set ($catDisplayName = $baseSpace.replace('_', ' ').replace('-', '-'))
31 +## In eFit subwiki, articles live directly in the space (not a sub-space)
32 +## e.g. space = "Technical_Knowledge_Base", articles are in that space
33 +#set ($spaceA = $baseSpace)
34 +#set ($spaceB = $baseSpace)
33 33  
34 34  ## -----------------------------
35 35  ## Read query params safely
... ... @@ -64,7 +64,7 @@
64 64  ## XWQL WHERE
65 65  ## -----------------------------
66 66  #set ($where =
67 - "where doc.space = :fullSpace " +
69 + "where doc.space = :spaceA " +
68 68   "and doc.name <> 'WebHome' " +
69 69   "and doc.hidden <> true "
70 70  )
... ... @@ -84,7 +84,7 @@
84 84  )
85 85  
86 86  #set ($countQuery = $services.query.xwql($countXwql))
87 -#set ($discard = $countQuery.bindValue('fullSpace', $fullSpace))
89 +#set ($discard = $countQuery.bindValue('spaceA', $spaceA))
88 88  #if ($hasFilter)
89 89   #set ($discard = $countQuery.bindValue('q', "%" + $filter.toLowerCase() + "%"))
90 90  #end
... ... @@ -119,7 +119,7 @@
119 119  )
120 120  
121 121  #set ($listQuery = $services.query.xwql($listXwql))
122 -#set ($discard = $listQuery.bindValue('fullSpace', $fullSpace))
124 +#set ($discard = $listQuery.bindValue('spaceA', $spaceA))
123 123  #if ($hasFilter)
124 124   #set ($discard = $listQuery.bindValue('q', "%" + $filter.toLowerCase() + "%"))
125 125  #end
... ... @@ -177,11 +177,11 @@
177 177   #if (!$hasFilter)
178 178   #set ($popXwql =
179 179   "select doc.fullName from XWikiDocument doc " +
180 - "where doc.space = :fullSpace and doc.name <> 'WebHome' and doc.hidden <> true " +
182 + "where doc.space = :spaceA and doc.name <> 'WebHome' and doc.hidden <> true " +
181 181   "order by lower(doc.title)"
182 182   )
183 183   #set ($popQuery = $services.query.xwql($popXwql))
184 - #set ($discard = $popQuery.bindValue('fullSpace', $fullSpace))
186 + #set ($discard = $popQuery.bindValue('spaceA', $spaceA))
185 185   #set ($discard = $popQuery.setLimit(4))
186 186   #set ($popRows = $popQuery.execute())
187 187  
... ... @@ -299,35 +299,104 @@
299 299  
300 300  <style>
301 301  .kb-category-page { max-width: 1200px; margin: 0 auto; padding: 0 1rem 3rem; }
304 +
302 302  .kb-hero { text-align: center; padding: 2.2rem 0 1rem; }
303 303  .kb-hero-title { font-size: 2.2rem; font-weight: 800; margin: 0; }
304 304  .kb-hero-subtitle { color: #6b7280; margin: 0.6rem 0 1.2rem; }
308 +
305 305  .kb-category-search { display: flex; gap: 0.6rem; justify-content: center; align-items: center; flex-wrap: wrap; }
306 -.kb-category-search-input { width: min(680px, 92vw); padding: 0.9rem 1.1rem; border: 1px solid #d1d5db; border-radius: 999px; font-size: 1.05rem; }
307 -.kb-category-search-button { padding: 0.9rem 1.1rem; border-radius: 999px; border: none; background: #2563eb; color: #fff; font-weight: 700; }
310 +.kb-category-search-input {
311 + width: min(680px, 92vw);
312 + padding: 0.9rem 1.1rem;
313 + border: 1px solid #d1d5db;
314 + border-radius: 999px;
315 + font-size: 1.05rem;
316 +}
317 +.kb-category-search-button {
318 + padding: 0.9rem 1.1rem;
319 + border-radius: 999px;
320 + border: none;
321 + background: #2563eb;
322 + color: #fff;
323 + font-weight: 700;
324 +}
308 308  .kb-category-clear { color: #6b7280; text-decoration: none; font-weight: 700; }
309 309  .kb-category-clear:hover { text-decoration: underline; }
310 310  .kb-muted { color: #9ca3af; }
328 +
311 311  .kb-category-columns { display: grid; grid-template-columns: 1fr; gap: 2rem; align-items: start; }
312 -@media (min-width: 1100px) { .kb-category-columns { grid-template-columns: 340px minmax(0, 1fr); gap: 2.5rem; } }
313 -@media (max-width: 1099px) { .kb-sidebar { order: 2; } .kb-main { order: 1; } }
314 -.kb-sidebar { border: 1px solid #e5e7eb; border-radius: 1rem; padding: 1rem 1.1rem; background: #fff; box-shadow: 0 4px 12px rgba(15,23,42,0.06); }
330 +@media (min-width: 1100px) {
331 + .kb-category-columns { grid-template-columns: 340px minmax(0, 1fr); gap: 2.5rem; }
332 +}
333 +@media (max-width: 1099px) {
334 + .kb-sidebar { order: 2; }
335 + .kb-main { order: 1; }
336 +}
337 +
338 +.kb-sidebar {
339 + border: 1px solid #e5e7eb;
340 + border-radius: 1rem;
341 + padding: 1rem 1.1rem;
342 + background: #fff;
343 + box-shadow: 0 4px 12px rgba(15, 23, 42, 0.06);
344 +}
315 315  .kb-category-list { list-style: none; padding: 0; margin: 0.8rem 0 0; }
316 316  .kb-category-list li { margin: 0.5rem 0; }
347 +
317 317  .kb-category-header-row { display: flex; gap: 0.75rem; justify-content: space-between; align-items: baseline; flex-wrap: wrap; }
318 -.kb-article-count-badge { font-size: 0.85rem; padding: 0.15rem 0.55rem; border-radius: 999px; border: 1px solid #d4d4d8; background: #f4f4f5; color: #4b5563; }
349 +
350 +.kb-article-count-badge {
351 + font-size: 0.85rem;
352 + padding: 0.15rem 0.55rem;
353 + border-radius: 999px;
354 + border: 1px solid #d4d4d8;
355 + background: #f4f4f5;
356 + color: #4b5563;
357 +}
358 +
319 319  .kb-pager { display: flex; gap: 0.75rem; align-items: center; justify-content: space-between; margin: 1rem 0 1.25rem; flex-wrap: wrap; }
320 320  .kb-pager-pages { display: flex; gap: 0.35rem; align-items: center; flex-wrap: wrap; justify-content: center; }
321 -.kb-pager-btn { padding: 0.55rem 0.9rem; border-radius: 999px; border: 1px solid #e5e7eb; background: #fff; text-decoration: none; font-weight: 800; color: #111827; }
361 +.kb-pager-btn {
362 + padding: 0.55rem 0.9rem;
363 + border-radius: 999px;
364 + border: 1px solid #e5e7eb;
365 + background: #fff;
366 + text-decoration: none;
367 + font-weight: 800;
368 + color: #111827;
369 +}
322 322  .kb-pager-btn.is-disabled { opacity: 0.45; cursor: not-allowed; }
323 -.kb-pager-page { padding: 0.4rem 0.7rem; border-radius: 999px; border: 1px solid #e5e7eb; text-decoration: none; color: #111827; font-weight: 800; }
371 +.kb-pager-page {
372 + padding: 0.4rem 0.7rem;
373 + border-radius: 999px;
374 + border: 1px solid #e5e7eb;
375 + text-decoration: none;
376 + color: #111827;
377 + font-weight: 800;
378 +}
324 324  .kb-pager-page.is-current { background: #111827; color: #fff; border-color: #111827; }
325 325  .kb-pager-status { color: #6b7280; font-weight: 800; }
326 326  .kb-pager-bottom { justify-content: center; margin-top: 1.25rem; }
382 +
327 327  .kb-category-card-grid { list-style: none; padding: 0; margin: 0; display: grid; gap: 0.9rem; grid-template-columns: 1fr; }
328 -@media (min-width: 860px) { .kb-category-card-grid { grid-template-columns: 1fr 1fr; } }
329 -.kb-article-card { border: 1px solid #e5e7eb; border-radius: 0.95rem; padding: 0.9rem 1rem; background: #fff; box-shadow: 0 4px 12px rgba(15,23,42,0.06); }
330 -.kb-article-card-title { display: inline-block; font-size: 1.05rem; font-weight: 900; color: #2563eb; text-decoration: none; line-height: 1.25; }
384 +@media (min-width: 860px) {
385 + .kb-category-card-grid { grid-template-columns: 1fr 1fr; }
386 +}
387 +.kb-article-card {
388 + border: 1px solid #e5e7eb;
389 + border-radius: 0.95rem;
390 + padding: 0.9rem 1rem;
391 + background: #fff;
392 + box-shadow: 0 4px 12px rgba(15, 23, 42, 0.06);
393 +}
394 +.kb-article-card-title {
395 + display: inline-block;
396 + font-size: 1.05rem;
397 + font-weight: 900;
398 + color: #2563eb;
399 + text-decoration: none;
400 + line-height: 1.25;
401 +}
331 331  .kb-article-card-title:hover { text-decoration: underline; }
332 332  .kb-article-card-meta { margin-top: 0.35rem; color: #6b7280; font-size: 0.86rem; }
333 333  .kb-article-card-empty { text-align: center; padding: 1.4rem; }
... ... @@ -338,6 +338,7 @@
338 338   const input = document.querySelector('.kb-category-search-input');
339 339   const grid = document.getElementById('kbCategoryGrid');
340 340   if (!input || !grid) return;
412 +
341 341   input.addEventListener('input', function () {
342 342   const q = (input.value || '').trim().toLowerCase();
343 343   const cards = grid.querySelectorAll('.kb-article-card[data-title]');
... ... @@ -350,4 +350,3 @@
350 350  </script>
351 351  {{/html}}
352 352  {{/velocity}}
353 -