Wiki source code of Public Web Site
Version 4.9 by Alex Cotiugă on 2026/05/01 13:05
Hide last authors
| author | version | line-number | content |
|---|---|---|---|
| |
1.2 | 1 | {{velocity}} |
| |
3.5 | 2 | #macro (displayPublicContent) |
| |
3.4 | 3 | #set ($discard = $xwiki.ssx.use('PublicWebSite.WebHome')) |
| 4 | {{html clean="false"}} | ||
| |
4.9 | 5 | |
| 6 | ## LANDING HERO | ||
| 7 | <section class="landing-hero" aria-labelledby="hero-title"> | ||
| 8 | <div class="container landing-hero-inner"> | ||
| |
4.1 | 9 | <h1 id="hero-title">Keep Your XWiki Platform Secure, Stable and Up-to-Date</h1> |
| |
4.9 | 10 | <p class="lead"> |
| 11 | Helping organizations safely upgrade, maintain, customize, and integrate their XWiki environments. | ||
| 12 | </p> | ||
| 13 | |||
| |
3.89 | 14 | <ul class="benefits"> |
| |
4.9 | 15 | <li><a href="/services/xwiki-upgrades">Smooth upgrades</a></li> |
| |
3.89 | 16 | <li>Reliable support plans</li> |
| 17 | <li>Custom integrations</li> | ||
| |
4.1 | 18 | <li>Secure, optimized platforms</li> |
| |
3.89 | 19 | </ul> |
| |
4.9 | 20 | |
| 21 | <div class="cta-row"> | ||
| 22 | <a class="btn-main" href="mailto:alex@agnease.com">Contact Agnease</a> | ||
| 23 | <a class="btn-secondary" href="/services">View services</a> | ||
| |
3.4 | 24 | </div> |
| |
1.2 | 25 | </div> |
| |
3.4 | 26 | </section> |
| |
4.9 | 27 | |
| |
3.4 | 28 | ## WHY CHOOSE |
| 29 | #set ($whySectionData = [{ | ||
| 30 | 'title': 'Stability & security', | ||
| 31 | 'icon': 'shield', | ||
| |
4.9 | 32 | 'content': 'Proven upgrade steps, rollback safety, and proactive hardening keep your wiki reliable.', |
| 33 | 'url': '/services/xwiki-upgrades' | ||
| |
3.4 | 34 | },{ |
| 35 | 'title': 'Predictable delivery', | ||
| 36 | 'icon': 'check-square-o', | ||
| |
4.9 | 37 | 'content': 'Clear scope, defined steps, and documented results to avoid surprises.', |
| 38 | 'url': '' | ||
| |
3.4 | 39 | },{ |
| 40 | 'title': 'Clean integrations', | ||
| 41 | 'icon': 'link', | ||
| |
4.9 | 42 | 'content': 'Maintainable SSO, API, and system connections tailored to your environment.', |
| 43 | 'url': '/services/xwiki-integrations' | ||
| |
3.4 | 44 | },{ |
| 45 | 'title': 'Long-term support', | ||
| 46 | 'icon': 'life-ring', | ||
| |
4.9 | 47 | 'content': 'Guaranteed response times, regular checks, and fast assistance when needed.', |
| 48 | 'url': '/services/xwiki-maintenance-support' | ||
| |
3.4 | 49 | }]) |
| |
4.9 | 50 | |
| |
3.4 | 51 | <section aria-labelledby="why-title"> |
| 52 | <div class="container"> | ||
| 53 | <h2 id="why-title">Why choose Agnease</h2> | ||
| 54 | <p class="lead">10+ years of XWiki expertise with structured delivery and lasting collaboration</p> | ||
| |
4.9 | 55 | |
| |
3.4 | 56 | <div class="widgets"> |
| 57 | #foreach ($entry in $whySectionData) | ||
| 58 | <article class="widget"> | ||
| 59 | <div class="icon" aria-hidden="true"> | ||
| 60 | <i class="fa fa-$entry.icon"></i> | ||
| 61 | <h4>$entry.title</h4> | ||
| 62 | </div> | ||
| 63 | <p>$entry.content</p> | ||
| |
4.9 | 64 | #if ($entry.url && $entry.url != '') |
| 65 | <p class="card-link"><a href="$entry.url">Learn more</a></p> | ||
| 66 | #end | ||
| |
3.4 | 67 | </article> |
| 68 | #end | ||
| 69 | </div> | ||
| |
1.2 | 70 | </div> |
| |
3.4 | 71 | </section> |
| |
4.9 | 72 | |
| |
3.4 | 73 | ## SERVICES |
| 74 | #set ($servicesSectionData = [{ | ||
| |
4.9 | 75 | 'title': 'XWiki Upgrades', |
| |
3.4 | 76 | 'icon': 'refresh', |
| |
4.9 | 77 | 'url': '/services/xwiki-upgrades', |
| 78 | 'content': 'Stay current with the latest XWiki LTS and reduce security, stability, and compatibility risks.', | ||
| |
3.4 | 79 | 'items': [ |
| 80 | 'Audit setup, extensions, and configurations', | ||
| 81 | 'Test upgrades with backups and validation', | ||
| 82 | 'Safe production rollout with minimal downtime' | ||
| 83 | ] | ||
| 84 | },{ | ||
| 85 | 'title': 'Maintenance, Support & Recovery', | ||
| 86 | 'icon': 'stethoscope', | ||
| |
4.9 | 87 | 'url': '/services/xwiki-maintenance-support', |
| |
3.4 | 88 | 'content': 'Ensure long-term stability and quick response when issues appear.', |
| 89 | 'items': [ | ||
| 90 | 'Monitoring and performance checks', | ||
| 91 | 'Security patching, log analysis, triage', | ||
| 92 | 'Issue recovery, data repair, hardening' | ||
| 93 | ] | ||
| 94 | },{ | ||
| 95 | 'title': 'Development & Integrations', | ||
| 96 | 'icon': 'cogs', | ||
| |
4.9 | 97 | 'url': '/services/xwiki-development-integrations', |
| |
3.4 | 98 | 'content': 'Extend and connect XWiki to fit your workflow and systems.', |
| 99 | 'items': [ | ||
| 100 | 'Custom apps, macros, automation', | ||
| 101 | 'SSO, REST APIs, LDAP, CRM links', | ||
| 102 | 'Maintainable extensions for long-term use' | ||
| 103 | ] | ||
| 104 | },{ | ||
| 105 | 'title': 'Hosting & Deployment', | ||
| 106 | 'icon': 'cloud', | ||
| |
4.9 | 107 | 'url': '/services/xwiki-hosting-deployment', |
| |
3.4 | 108 | 'content': 'Cloud-ready environments designed for reliability and performance.', |
| 109 | 'items': [ | ||
| 110 | 'Containerized deployment and TLS', | ||
| 111 | 'Backups, restore strategy, observability', | ||
| 112 | 'Optimization and load tuning' | ||
| 113 | ] | ||
| 114 | },{ | ||
| 115 | 'title': 'Migrations to XWiki', | ||
| 116 | 'icon': 'exchange', | ||
| |
4.9 | 117 | 'url': '/services/xwiki-migrations', |
| |
3.4 | 118 | 'content': 'Move from Confluence, SharePoint, or MediaWiki to XWiki with full data integrity and structure.', |
| 119 | 'items': [ | ||
| 120 | 'Preserve hierarchy, attachments, and permissions', | ||
| 121 | 'Convert macros, categories, and metadata for XWiki', | ||
| 122 | 'Redirect old URLs and maintain SEO consistency' | ||
| 123 | ] | ||
| 124 | }]) | ||
| |
4.9 | 125 | |
| |
3.4 | 126 | <section class="services" aria-labelledby="services-title"> |
| 127 | <div class="container"> | ||
| 128 | <h2 id="services-title">Services</h2> | ||
| |
4.9 | 129 | <p class="lead">All the XWiki services you need, delivered with precision and care</p> |
| |
1.1 | 130 | |
| |
3.4 | 131 | <div class="services-grid"> |
| 132 | #foreach ($entry in $servicesSectionData) | ||
| |
4.9 | 133 | <article class="service"> |
| |
3.4 | 134 | <div class="service-icon"> |
| 135 | <i class="fa fa-$entry.icon" aria-hidden="true"></i> | ||
| 136 | </div> | ||
| 137 | <div class="service-body"> | ||
| |
4.6 | 138 | <h4> |
| |
4.9 | 139 | #if ($entry.url && $entry.url != '') |
| 140 | <a href="$entry.url">$entry.title</a> | ||
| |
4.6 | 141 | #else |
| 142 | $entry.title | ||
| 143 | #end | ||
| 144 | </h4> | ||
| |
3.4 | 145 | <p>$entry.content</p> |
| 146 | <ul> | ||
| 147 | #foreach ($item in $entry.items) | ||
| 148 | <li>$item</li> | ||
| 149 | #end | ||
| 150 | </ul> | ||
| |
4.9 | 151 | #if ($entry.url && $entry.url != '') |
| 152 | <p class="service-link"><a href="$entry.url">Learn more</a></p> | ||
| 153 | #end | ||
| |
3.4 | 154 | </div> |
| 155 | </article> | ||
| |
1.2 | 156 | #end |
| |
3.4 | 157 | </div> |
| |
1.2 | 158 | </div> |
| |
3.4 | 159 | </section> |
| |
4.9 | 160 | |
| 161 | ## CTA | ||
| |
3.4 | 162 | <section id="contact" class="cta-section"> |
| 163 | <div class="container"> | ||
| 164 | <p class="text-center contact-inline"> | ||
| 165 | Need help with your XWiki? <a href="mailto:alex@agnease.com">Contact Agnease</a>. | ||
| 166 | </p> | ||
| 167 | </div> | ||
| 168 | </section> | ||
| 169 | {{/html}} | ||
| 170 | #end | ||
| |
3.16 | 171 | |
| 172 | #macro(requestConsultationModal) | ||
| 173 | <div class="modal fade" id="requestConsultation" tabindex="-1" role="dialog"> | ||
| 174 | <div class="modal-dialog"> | ||
| 175 | <div class="modal-content"> | ||
| 176 | <div class="modal-header"> | ||
| |
3.28 | 177 | <button type="button" class="close" data-dismiss="modal">×</button> |
| |
3.16 | 178 | <h4 class="modal-title">Request a consultation</h4> |
| 179 | </div> | ||
| 180 | <div class="modal-body"> | ||
| 181 | <div> | ||
| |
3.71 | 182 | ##Need help with your XWiki? <a href="mailto:alex@agnease.com">Contact Agnease</a> |
| |
3.57 | 183 | #displayFormFromSheetCode() |
| |
3.16 | 184 | </div> |
| 185 | </div> | ||
| 186 | <div class="modal-footer"> | ||
| |
3.54 | 187 | ##<input id="continueCategorySelection" type="button" class="btn btn-default" data-dismiss="modal" |
| 188 | ## value="$escapetool.xml($services.localization.render('yesno_1'))"> | ||
| |
3.16 | 189 | </div> |
| 190 | </div> | ||
| 191 | </div> | ||
| 192 | </div> | ||
| 193 | #end | ||
| |
3.55 | 194 | |
| |
3.66 | 195 | #macro (stripHTMLMacro $displayOutput) |
| |
3.77 | 196 | $stringtool.removeEnd($stringtool.removeStart($displayOutput, '{{html clean="false" wiki="false"}}'), '{{/html}}').replace('Agnease.Code.Lead.LeadClass_0_', 'acl-') |
| |
3.66 | 197 | #end |
| 198 | |||
| |
3.55 | 199 | #macro (displayFormFromSheetCode) |
| |
3.61 | 200 | #set ($editing = true) |
| |
3.55 | 201 | ## The object to display. |
| |
3.65 | 202 | #set ($xobject = $doc.newObject('Agnease.Code.Lead.LeadClass')) |
| |
3.55 | 203 | ## The class that describes the object properties. |
| |
3.60 | 204 | #set ($xclass = $xwiki.getClass('Agnease.Code.Lead.LeadClass')) |
| |
3.55 | 205 | ## Make sure the following display* method calls use the right object. |
| 206 | #set ($discard = $doc.use($xobject)) | ||
| 207 | ## Using the xform vertical form layout. | ||
| |
3.70 | 208 | <div class="xform"> |
| |
3.55 | 209 | <dl> |
| 210 | #foreach ($property in $xclass.properties) | ||
| |
3.84 | 211 | #if ($property.name != 'status') |
| 212 | <dt #if (!$editing) | ||
| 213 | class="editableProperty" | ||
| 214 | #set ($xobjectPropertyReference = $xobject.getPropertyReference($property.name)) | ||
| 215 | data-property="$escapetool.xml($services.model.serialize($xobjectPropertyReference))" | ||
| 216 | data-property-type="object"#end> | ||
| 217 | ## This must match the id generated by the $doc.display() method below. | ||
| 218 | #set ($propertyId = "acl-$property.name") | ||
| 219 | <label#if ($editing) for="$escapetool.xml($propertyId)"#end> | ||
| 220 | $escapetool.xml($property.translatedPrettyName) | ||
| 221 | </label> | ||
| 222 | ## Support for specifying a translation key as hint in the property definition. | ||
| 223 | <span class="xHint">$!escapetool.xml($services.localization.render($property.hint))</span> | ||
| 224 | </dt> | ||
| 225 | #set ($displayOutput = $doc.display($property.name, 'edit')) | ||
| 226 | <dd>#stripHTMLMacro($displayOutput)</dd> | ||
| 227 | #end | ||
| |
3.55 | 228 | #end |
| 229 | #if (!$xclass.properties || $xclass.properties.size() == 0) | ||
| 230 | ## Keep the empty definition term in order to have valid HTML. | ||
| 231 | <dt></dt> | ||
| 232 | <dd>$escapetool.xml($services.localization.render('xclass.defaultObjectSheet.noProperties'))</dd> | ||
| 233 | #end | ||
| 234 | </dl> | ||
| 235 | </div> | ||
| 236 | #end | ||
| |
1.2 | 237 | {{/velocity}} |