Wiki source code of Home

Version 3.1 by Isaac Mejia on 2026/05/21 14:09

Hide last authors
Isaac Mejia 3.1 1 {{velocity}}
2 ## ---------------------------------------------
3 ## KB Home (Main.WebHome)
4 ## eFit Financial Knowledge Base
5 ## ---------------------------------------------
6
7 ## 1) Find all top-level spaces in the efit wiki
8 #set ($xwql =
9 "select doc.fullName, doc.title, doc.name, doc.space " +
10 "from XWikiDocument doc " +
11 "where doc.name = 'WebHome' " +
12 "and doc.space <> 'Main' " +
13 "and doc.space <> 'XWiki' " +
14 "and doc.space <> 'xwiki' " +
15 "and doc.hidden <> true " +
16 "order by lower(doc.space)"
17 )##
18 #set ($query = $services.query.xwql($xwql))##
19 #set ($rows = $query.execute())##
20
21 ## 2) Icon map
22 #set ($kbCategoryIcons = {
23 "User_Guides": "📘",
24 "Announcements": "📣",
25 "Technical_Knowledge_Base": "⚙️"
26 })##
27
28 ## 3) Descriptions
29 #set ($kbCategoryDescriptions = {
30 "User_Guides": "Step-by-step guides for using Club Advantage.",
31 "Announcements": "Feature releases and platform updates.",
32 "Technical_Knowledge_Base": "Technical guides and troubleshooting."
33 })##
34
35 ## 4) Display names
36 #set ($kbCategoryLabels = {
37 "User_Guides": "User Guides",
38 "Announcements": "Announcements",
39 "Technical_Knowledge_Base": "Technical Knowledge Base"
40 })##
41
42 ## 5) Allowlist
43 #set ($allowedSpaces = ["User_Guides", "Announcements", "Technical_Knowledge_Base"])##
44
45 ## 6) Build category objects
46 #set ($kbCategories = [])##
47
48 #foreach ($space in $allowedSpaces)##
49 #set ($label = $kbCategoryLabels.get($space))##
50 #set ($desc = $kbCategoryDescriptions.get($space))##
51 #set ($icon = $kbCategoryIcons.get($space))##
52
53 ## Count non-hidden, non-WebHome pages in this space and subspaces
54 #set ($articleCount = 0)##
55 #set ($countXwql =
56 "select count(doc.fullName) " +
57 "from XWikiDocument doc " +
58 "where (doc.space = :space or doc.space like :spacePrefix) " +
59 "and doc.name <> 'WebHome' " +
60 "and doc.hidden <> true"
61 )##
62 #set ($countQuery = $services.query.xwql($countXwql))##
63 #set ($discard = $countQuery.bindValue("space", $space))##
64 #set ($discard = $countQuery.bindValue("spacePrefix", $space + ".%"))##
65 #set ($resultList = $countQuery.execute())##
66 #if ($resultList && $resultList.size() > 0)##
67 #set ($articleCount = $resultList.get(0))##
68 #end##
69
70 ## Build clean URL
71 #set ($cleanUrl = "/" + $space + "/")##
72
73 #set ($entry = {
74 "label": $label,
75 "desc": $desc,
76 "icon": $icon,
77 "url": $cleanUrl,
78 "count": $articleCount
79 })##
80 #set ($discard = $kbCategories.add($entry))##
81 #end##
82
83 {{html clean="false"}}
84 <div class="kb-home">
85
86 <!-- HERO -->
87 <div class="kb-hero">
88 <h1 class="kb-hero-title">eFit Financial Knowledge Base</h1>
89 <p class="kb-hero-subtitle">
90 Guides, walkthroughs, and best practices to help you and your team get the most out of Club Advantage.
91 </p>
92 </div>
93
94 <!-- CATEGORY GRID -->
95 <div class="kb-section">
96 <h2 class="kb-section-title">Browse by category</h2>
97
98 <div class="kb-category-grid">
99 #foreach ($cat in $kbCategories)
100 #set ($label = $cat.get("label"))
101 #set ($desc = $cat.get("desc"))
102 #set ($icon = $cat.get("icon"))
103 #set ($url = $cat.get("url"))
104 #set ($count = $cat.get("count"))
105
106 <a class="kb-card" href="$url">
107 <div>
108 <div class="kb-card-title">
109 <span class="kb-card-icon">$icon</span>
110 $escapetool.xml($label)
111 </div>
112 <div class="kb-card-body">
113 $escapetool.xml($desc)
114 </div>
115 </div>
116 <div class="kb-card-meta">
117 #if ($count == 1)
118 1 article
119 #elseif ($count > 1)
120 $count articles
121 #else
122 Category
123 #end
124 </div>
125 </a>
126 #end
127 </div>
128 </div>
129
130 </div>
131
132 <style>
133 body.viewbody.page-WebHome #xwikicontent .kb-hero {
134 padding: 4.2rem 1rem 3.3rem !important;
135 max-width: 1100px;
136 margin: 0 auto;
137 text-align: center;
138 }
139
140 body.viewbody.page-WebHome #xwikicontent .kb-hero-title {
141 font-size: 3.5rem !important;
142 font-weight: 800 !important;
143 line-height: 1.15;
144 margin-bottom: 1rem !important;
145 color: #0f172a;
146 }
147
148 body.viewbody.page-WebHome #xwikicontent .kb-hero-subtitle {
149 font-size: 1.35rem !important;
150 line-height: 1.7;
151 color: #4b5563 !important;
152 max-width: 720px;
153 margin: 0 auto 2.3rem !important;
154 }
155
156 body.viewbody.page-WebHome #xwikicontent .kb-section {
157 margin-top: 4.6rem !important;
158 }
159
160 body.viewbody.page-WebHome #xwikicontent .kb-section-title {
161 text-align: center;
162 font-size: 1.5rem;
163 font-weight: 700;
164 margin-bottom: 2rem;
165 color: #0f172a;
166 }
167
168 body.viewbody.page-WebHome #xwikicontent .kb-category-grid {
169 display: grid;
170 grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
171 gap: 1.5rem;
172 max-width: 1100px;
173 margin: 0 auto;
174 padding: 0 1rem;
175 }
176
177 body.viewbody.page-WebHome #xwikicontent .kb-card {
178 display: flex;
179 flex-direction: column;
180 justify-content: space-between;
181 padding: 1.5rem;
182 border: 1px solid #e5e7eb;
183 border-radius: 12px;
184 text-decoration: none;
185 color: inherit;
186 background: #fff;
187 box-shadow: 0 1px 3px rgba(0,0,0,0.06);
188 transition: box-shadow 0.2s, transform 0.2s;
189 }
190
191 body.viewbody.page-WebHome #xwikicontent .kb-card:hover {
192 box-shadow: 0 8px 24px rgba(0,0,0,0.1);
193 transform: translateY(-2px);
194 }
195
196 body.viewbody.page-WebHome #xwikicontent .kb-card-title {
197 font-size: 1.1rem;
198 font-weight: 700;
199 color: #2563eb;
200 margin-bottom: 0.5rem;
201 }
202
203 body.viewbody.page-WebHome #xwikicontent .kb-card-icon {
204 margin-right: 0.4rem;
205 }
206
207 body.viewbody.page-WebHome #xwikicontent .kb-card-body {
208 font-size: 0.95rem;
209 color: #6b7280;
210 line-height: 1.5;
211 }
212
213 body.viewbody.page-WebHome #xwikicontent .kb-card-meta {
214 margin-top: 1rem;
215 font-size: 0.85rem;
216 color: #9ca3af;
217 text-transform: uppercase;
218 letter-spacing: 0.05em;
219 }
220 </style>
221
222 {{/html}}
223 {{/velocity}}
224