Changes for page KBCategoryLanding

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

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

Summary

Details

Page properties
Content
... ... @@ -1,12 +1,11 @@
1 1  {{velocity}}
2 2  ## ------------------------------------------------------------
3 3  ## Category landing page for eFit subwiki
4 -## Reads the category space from the URL so it works correctly
5 -## when included via {{include reference="KBCategoryLanding.WebHome"/}}
4 +## URL pattern: /Main/<Category>/WebHome
5 +## e.g. /Main/Payment_Management/WebHome
6 6  ## ------------------------------------------------------------
7 7  
8 -## Extract the space name from the request URI
9 -## URL pattern: /wiki/efit-kb.membies.com/view/<Space>/WebHome
8 +## Extract category from URL - grab segment after "Main"
10 10  #set ($uri = $request.getRequestURI())
11 11  #set ($baseSpace = '')
12 12  #set ($catDisplayName = '')
... ... @@ -15,23 +15,22 @@
15 15  #if ($uri.contains($viewMarker))
16 16   #set ($afterView = $uri.substring($uri.indexOf($viewMarker) + $viewMarker.length()))
17 17   #set ($uriParts = $afterView.split('/'))
18 - #if ($uriParts.size() > 0)
19 - #set ($baseSpace = $uriParts.get(0))
17 + ## uriParts: [0]=Main, [1]=Payment_Management, [2]=WebHome
18 + #if ($uriParts.size() > 1)
19 + #set ($baseSpace = $uriParts.get(1))
20 20   #end
21 21  #end
22 22  
23 -## Fallback to doc.space if URL parsing fails
24 -#if ("$!baseSpace" == "" || $baseSpace == 'KBCategoryLanding')
25 - #set ($baseSpace = $doc.space)
23 +## Fallback
24 +#if ("$!baseSpace" == "" || $baseSpace == 'WebHome' || $baseSpace == 'Main')
25 + #set ($baseSpace = $doc.space.replace('Main.', ''))
26 26  #end
27 27  
28 -## Build display name from space name (replace underscores with spaces)
29 -#set ($catDisplayName = $baseSpace.replace('_', ' '))
28 +## Full XWiki space reference e.g. "Main.Payment_Management"
29 +#set ($fullSpace = "Main." + $baseSpace)
30 30  
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)
31 +## Display name - replace underscores and hyphens with spaces
32 +#set ($catDisplayName = $baseSpace.replace('_', ' ').replace('-', '-'))
35 35  
36 36  ## -----------------------------
37 37  ## Read query params safely
... ... @@ -66,7 +66,7 @@
66 66  ## XWQL WHERE
67 67  ## -----------------------------
68 68  #set ($where =
69 - "where doc.space = :spaceA " +
67 + "where doc.space = :fullSpace " +
70 70   "and doc.name <> 'WebHome' " +
71 71   "and doc.hidden <> true "
72 72  )
... ... @@ -86,7 +86,7 @@
86 86  )
87 87  
88 88  #set ($countQuery = $services.query.xwql($countXwql))
89 -#set ($discard = $countQuery.bindValue('spaceA', $spaceA))
87 +#set ($discard = $countQuery.bindValue('fullSpace', $fullSpace))
90 90  #if ($hasFilter)
91 91   #set ($discard = $countQuery.bindValue('q', "%" + $filter.toLowerCase() + "%"))
92 92  #end
... ... @@ -121,7 +121,7 @@
121 121  )
122 122  
123 123  #set ($listQuery = $services.query.xwql($listXwql))
124 -#set ($discard = $listQuery.bindValue('spaceA', $spaceA))
122 +#set ($discard = $listQuery.bindValue('fullSpace', $fullSpace))
125 125  #if ($hasFilter)
126 126   #set ($discard = $listQuery.bindValue('q', "%" + $filter.toLowerCase() + "%"))
127 127  #end
... ... @@ -179,11 +179,11 @@
179 179   #if (!$hasFilter)
180 180   #set ($popXwql =
181 181   "select doc.fullName from XWikiDocument doc " +
182 - "where doc.space = :spaceA and doc.name <> 'WebHome' and doc.hidden <> true " +
180 + "where doc.space = :fullSpace and doc.name <> 'WebHome' and doc.hidden <> true " +
183 183   "order by lower(doc.title)"
184 184   )
185 185   #set ($popQuery = $services.query.xwql($popXwql))
186 - #set ($discard = $popQuery.bindValue('spaceA', $spaceA))
184 + #set ($discard = $popQuery.bindValue('fullSpace', $fullSpace))
187 187   #set ($discard = $popQuery.setLimit(4))
188 188   #set ($popRows = $popQuery.execute())
189 189  
... ... @@ -301,104 +301,35 @@
301 301  
302 302  <style>
303 303  .kb-category-page { max-width: 1200px; margin: 0 auto; padding: 0 1rem 3rem; }
304 -
305 305  .kb-hero { text-align: center; padding: 2.2rem 0 1rem; }
306 306  .kb-hero-title { font-size: 2.2rem; font-weight: 800; margin: 0; }
307 307  .kb-hero-subtitle { color: #6b7280; margin: 0.6rem 0 1.2rem; }
308 -
309 309  .kb-category-search { display: flex; gap: 0.6rem; justify-content: center; align-items: center; flex-wrap: wrap; }
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 -}
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; }
325 325  .kb-category-clear { color: #6b7280; text-decoration: none; font-weight: 700; }
326 326  .kb-category-clear:hover { text-decoration: underline; }
327 327  .kb-muted { color: #9ca3af; }
328 -
329 329  .kb-category-columns { display: grid; grid-template-columns: 1fr; gap: 2rem; align-items: start; }
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 -}
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); }
345 345  .kb-category-list { list-style: none; padding: 0; margin: 0.8rem 0 0; }
346 346  .kb-category-list li { margin: 0.5rem 0; }
347 -
348 348  .kb-category-header-row { display: flex; gap: 0.75rem; justify-content: space-between; align-items: baseline; flex-wrap: wrap; }
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 -
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; }
359 359  .kb-pager { display: flex; gap: 0.75rem; align-items: center; justify-content: space-between; margin: 1rem 0 1.25rem; flex-wrap: wrap; }
360 360  .kb-pager-pages { display: flex; gap: 0.35rem; align-items: center; flex-wrap: wrap; justify-content: center; }
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 -}
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; }
370 370  .kb-pager-btn.is-disabled { opacity: 0.45; cursor: not-allowed; }
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 -}
323 +.kb-pager-page { padding: 0.4rem 0.7rem; border-radius: 999px; border: 1px solid #e5e7eb; text-decoration: none; color: #111827; font-weight: 800; }
379 379  .kb-pager-page.is-current { background: #111827; color: #fff; border-color: #111827; }
380 380  .kb-pager-status { color: #6b7280; font-weight: 800; }
381 381  .kb-pager-bottom { justify-content: center; margin-top: 1.25rem; }
382 -
383 383  .kb-category-card-grid { list-style: none; padding: 0; margin: 0; display: grid; gap: 0.9rem; grid-template-columns: 1fr; }
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 -}
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; }
402 402  .kb-article-card-title:hover { text-decoration: underline; }
403 403  .kb-article-card-meta { margin-top: 0.35rem; color: #6b7280; font-size: 0.86rem; }
404 404  .kb-article-card-empty { text-align: center; padding: 1.4rem; }
... ... @@ -409,7 +409,6 @@
409 409   const input = document.querySelector('.kb-category-search-input');
410 410   const grid = document.getElementById('kbCategoryGrid');
411 411   if (!input || !grid) return;
412 -
413 413   input.addEventListener('input', function () {
414 414   const q = (input.value || '').trim().toLowerCase();
415 415   const cards = grid.querySelectorAll('.kb-article-card[data-title]');
... ... @@ -422,3 +422,4 @@
422 422  </script>
423 423  {{/html}}
424 424  {{/velocity}}
353 +