Wiki source code of Public Web Site
Version 4.9 by Alex Cotiugă on 2026/05/01 13:05
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 1 | {{velocity}} | ||
| 2 | #macro (displayPublicContent) | ||
| 3 | #set ($discard = $xwiki.ssx.use('PublicWebSite.WebHome')) | ||
| 4 | {{html clean="false"}} | ||
| 5 | |||
| 6 | ## LANDING HERO | ||
| 7 | <section class="landing-hero" aria-labelledby="hero-title"> | ||
| 8 | <div class="container landing-hero-inner"> | ||
| 9 | <h1 id="hero-title">Keep Your XWiki Platform Secure, Stable and Up-to-Date</h1> | ||
| 10 | <p class="lead"> | ||
| 11 | Helping organizations safely upgrade, maintain, customize, and integrate their XWiki environments. | ||
| 12 | </p> | ||
| 13 | |||
| 14 | <ul class="benefits"> | ||
| 15 | <li><a href="/services/xwiki-upgrades">Smooth upgrades</a></li> | ||
| 16 | <li>Reliable support plans</li> | ||
| 17 | <li>Custom integrations</li> | ||
| 18 | <li>Secure, optimized platforms</li> | ||
| 19 | </ul> | ||
| 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> | ||
| 24 | </div> | ||
| 25 | </div> | ||
| 26 | </section> | ||
| 27 | |||
| 28 | ## WHY CHOOSE | ||
| 29 | #set ($whySectionData = [{ | ||
| 30 | 'title': 'Stability & security', | ||
| 31 | 'icon': 'shield', | ||
| 32 | 'content': 'Proven upgrade steps, rollback safety, and proactive hardening keep your wiki reliable.', | ||
| 33 | 'url': '/services/xwiki-upgrades' | ||
| 34 | },{ | ||
| 35 | 'title': 'Predictable delivery', | ||
| 36 | 'icon': 'check-square-o', | ||
| 37 | 'content': 'Clear scope, defined steps, and documented results to avoid surprises.', | ||
| 38 | 'url': '' | ||
| 39 | },{ | ||
| 40 | 'title': 'Clean integrations', | ||
| 41 | 'icon': 'link', | ||
| 42 | 'content': 'Maintainable SSO, API, and system connections tailored to your environment.', | ||
| 43 | 'url': '/services/xwiki-integrations' | ||
| 44 | },{ | ||
| 45 | 'title': 'Long-term support', | ||
| 46 | 'icon': 'life-ring', | ||
| 47 | 'content': 'Guaranteed response times, regular checks, and fast assistance when needed.', | ||
| 48 | 'url': '/services/xwiki-maintenance-support' | ||
| 49 | }]) | ||
| 50 | |||
| 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> | ||
| 55 | |||
| 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> | ||
| 64 | #if ($entry.url && $entry.url != '') | ||
| 65 | <p class="card-link"><a href="$entry.url">Learn more</a></p> | ||
| 66 | #end | ||
| 67 | </article> | ||
| 68 | #end | ||
| 69 | </div> | ||
| 70 | </div> | ||
| 71 | </section> | ||
| 72 | |||
| 73 | ## SERVICES | ||
| 74 | #set ($servicesSectionData = [{ | ||
| 75 | 'title': 'XWiki Upgrades', | ||
| 76 | 'icon': 'refresh', | ||
| 77 | 'url': '/services/xwiki-upgrades', | ||
| 78 | 'content': 'Stay current with the latest XWiki LTS and reduce security, stability, and compatibility risks.', | ||
| 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', | ||
| 87 | 'url': '/services/xwiki-maintenance-support', | ||
| 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', | ||
| 97 | 'url': '/services/xwiki-development-integrations', | ||
| 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', | ||
| 107 | 'url': '/services/xwiki-hosting-deployment', | ||
| 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', | ||
| 117 | 'url': '/services/xwiki-migrations', | ||
| 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 | }]) | ||
| 125 | |||
| 126 | <section class="services" aria-labelledby="services-title"> | ||
| 127 | <div class="container"> | ||
| 128 | <h2 id="services-title">Services</h2> | ||
| 129 | <p class="lead">All the XWiki services you need, delivered with precision and care</p> | ||
| 130 | |||
| 131 | <div class="services-grid"> | ||
| 132 | #foreach ($entry in $servicesSectionData) | ||
| 133 | <article class="service"> | ||
| 134 | <div class="service-icon"> | ||
| 135 | <i class="fa fa-$entry.icon" aria-hidden="true"></i> | ||
| 136 | </div> | ||
| 137 | <div class="service-body"> | ||
| 138 | <h4> | ||
| 139 | #if ($entry.url && $entry.url != '') | ||
| 140 | <a href="$entry.url">$entry.title</a> | ||
| 141 | #else | ||
| 142 | $entry.title | ||
| 143 | #end | ||
| 144 | </h4> | ||
| 145 | <p>$entry.content</p> | ||
| 146 | <ul> | ||
| 147 | #foreach ($item in $entry.items) | ||
| 148 | <li>$item</li> | ||
| 149 | #end | ||
| 150 | </ul> | ||
| 151 | #if ($entry.url && $entry.url != '') | ||
| 152 | <p class="service-link"><a href="$entry.url">Learn more</a></p> | ||
| 153 | #end | ||
| 154 | </div> | ||
| 155 | </article> | ||
| 156 | #end | ||
| 157 | </div> | ||
| 158 | </div> | ||
| 159 | </section> | ||
| 160 | |||
| 161 | ## CTA | ||
| 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 | ||
| 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"> | ||
| 177 | <button type="button" class="close" data-dismiss="modal">×</button> | ||
| 178 | <h4 class="modal-title">Request a consultation</h4> | ||
| 179 | </div> | ||
| 180 | <div class="modal-body"> | ||
| 181 | <div> | ||
| 182 | ##Need help with your XWiki? <a href="mailto:alex@agnease.com">Contact Agnease</a> | ||
| 183 | #displayFormFromSheetCode() | ||
| 184 | </div> | ||
| 185 | </div> | ||
| 186 | <div class="modal-footer"> | ||
| 187 | ##<input id="continueCategorySelection" type="button" class="btn btn-default" data-dismiss="modal" | ||
| 188 | ## value="$escapetool.xml($services.localization.render('yesno_1'))"> | ||
| 189 | </div> | ||
| 190 | </div> | ||
| 191 | </div> | ||
| 192 | </div> | ||
| 193 | #end | ||
| 194 | |||
| 195 | #macro (stripHTMLMacro $displayOutput) | ||
| 196 | $stringtool.removeEnd($stringtool.removeStart($displayOutput, '{{html clean="false" wiki="false"}}'), '{{/html}}').replace('Agnease.Code.Lead.LeadClass_0_', 'acl-') | ||
| 197 | #end | ||
| 198 | |||
| 199 | #macro (displayFormFromSheetCode) | ||
| 200 | #set ($editing = true) | ||
| 201 | ## The object to display. | ||
| 202 | #set ($xobject = $doc.newObject('Agnease.Code.Lead.LeadClass')) | ||
| 203 | ## The class that describes the object properties. | ||
| 204 | #set ($xclass = $xwiki.getClass('Agnease.Code.Lead.LeadClass')) | ||
| 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. | ||
| 208 | <div class="xform"> | ||
| 209 | <dl> | ||
| 210 | #foreach ($property in $xclass.properties) | ||
| 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 | ||
| 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 | ||
| 237 | {{/velocity}} |