Änderungen von Dokument Home
Zuletzt geändert von Steffen Rehfuß am 14.08.2026 18:59
Von Version 14.1
bearbeitet von Steffen Rehfuß
am 14.08.2026 18:59
am 14.08.2026 18:59
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Auf Version 1.1
bearbeitet von Steffen Rehfuß
am 14.08.2026 16:40
am 14.08.2026 16:40
Änderungskommentar:
Install extension [org.xwiki.platform:xwiki-platform-distribution-flavor-common/17.10.9]
Zusammenfassung
-
Seiteneigenschaften (1 geändert, 0 hinzugefügt, 0 gelöscht)
Details
- Seiteneigenschaften
-
- Inhalt
-
... ... @@ -1,471 +1,42 @@ 1 -{{velocity}} 2 -## ===================================================================== 3 -## Intranet-Startseite — Hero (TOP-Blogpost) + 12 App-Buttons + 4 Kacheln 4 -## Einfach in den Seiten-Editor (Quelltext/Wiki) einfuegen. 5 -## ===================================================================== 6 -## 7 -## ---- KONFIG 1: Blog-Space + Hero-Kategorie + Laufschrift-Kategorie ---- 8 -#set ($blogSpace = 'Blog') ## technischer Space-Name des Blogs 9 -#set ($heroCategory = 'TOP') ## Kategorie, die gross dargestellt wird 10 -#set ($breakingCategory = 'Breaking News') ## Kategorie fuer die Laufschrift oben 11 -## 12 -## ---- KONFIG 2: Die 12 App-Buttons (Text / Icon / Link / Farbe) ---- 13 -## icon = Font-Awesome-Name (ohne "fa-"). Farbe = beliebiger Hex-Wert. 14 -#set ($apps = [ 15 - {'label':'Abteilung I', 'icon':'search', 'ref':'abteilung01:Main.WebHome', 'color':'#16a085'}, 16 - {'label':'Abteilung II', 'icon':'key', 'ref':'abteilung02:Main.WebHome', 'color':'#2980b9'}, 17 - {'label':'Abteilung III', 'icon':'key', 'ref':'abteilung03:Main.WebHome', 'color':'#8e44ad'}, 18 - {'label':'Chatbot', 'icon':'pencil-square-o', 'url':"javascript:document.getElementById('toggle-chat-button').click();void(0);", 'color':'#16a085'}, 19 - {'label':'Forum', 'icon':'group', 'ref':'Forums.WebHome', 'color':'#2980b9'}, 20 - {'label':'Blog', 'icon':'star', 'ref':'Blog.WebHome', 'color':'#8e44ad'}, 21 - {'label':'Gruppenräume', 'icon':'life-ring', 'ref':'Rooms.WebHome', 'color':'#16a085'}, 22 - {'label':'Meine Favoriten', 'icon':'star', 'ref':'Internes.Favoriten.WebHome', 'color':'#2980b9'}, 23 - {'label':'Kalender', 'icon':'clock-o', 'ref':'MoccaCalendar.WebHome', 'color':'#8e44ad'}, 24 - {'label':'Org-Chart', 'icon':'sitemap', 'ref':'Internes.Organigramm.WebHome', 'color':'#2c3e50'}, 25 - {'label':'Tag Filter', 'icon':'filter', 'ref':'KBC Anwendungen.Tag Filter.WebHome', 'color':'#2c3e50'}, 26 - {'label':'Kantine', 'icon':'coffee', 'ref':'Internes.Kantine.Speiseplan vom 13\.07\.2026 - 17\.07\.2026.WebHome', 'color':'#2c3e50'} 27 -]) 28 -## 29 -## ---- Posts laden (neueste zuerst) ---- 30 -#set ($xwql = "from doc.object(Blog.BlogPostClass) as post where post.published = 1 and doc.hidden = false") 31 -#if ($blogSpace != '') 32 - #set ($xwql = "$xwql and doc.space like :space") 33 -#end 34 -#set ($xwql = "$xwql order by post.publishDate desc") 35 -#set ($q = $services.query.xwql($xwql).setLimit(30)) 36 -#if ($blogSpace != '') 37 - #set ($q = $q.bindValue('space', "$blogSpace%")) 38 -#end 39 -#set ($postNames = $q.execute()) 40 -## 41 -## ---- Hero (erster TOP-Post) + bis zu 4 Kachel-Posts + neuester Breaking-News-Post bestimmen ---- 42 -#set ($heroDoc = $NULL) 43 -#set ($heroObj = $NULL) 44 -#set ($tilePosts = []) 45 -#set ($breakingDoc = $NULL) 46 -#set ($breakingObj = $NULL) 47 -#foreach ($pn in $postNames) 48 - #set ($pd = $xwiki.getDocument($pn)) 49 - #set ($po = $pd.getObject('Blog.BlogPostClass')) 50 - #set ($isTop = false) 51 - #set ($isBreaking = false) 52 - #set ($cats = $po.getValue('category')) 53 - #if ($cats) 54 - #foreach ($c in $cats) 55 - #set ($cn = "$c") 56 - #set ($cn = $cn.substring($mathtool.add($cn.lastIndexOf('.'), 1))) 57 - #if ($cn == $heroCategory) 58 - #set ($isTop = true) 59 - #end 60 - #if ($cn == $breakingCategory) 61 - #set ($isBreaking = true) 62 - #end 63 - #end 64 - #end 65 - #if ($isBreaking && !$breakingDoc) 66 - #set ($breakingDoc = $pd) 67 - #set ($breakingObj = $po) 68 - #end 69 - #if ($isTop && !$heroDoc) 70 - #set ($heroDoc = $pd) 71 - #set ($heroObj = $po) 72 - #elseif ($tilePosts.size() < 4) 73 - #set ($discard = $tilePosts.add($pn)) 74 - #end 75 -#end 76 -## Fallback: kein TOP-Post -> neuesten Post als Hero nehmen 77 -#if (!$heroDoc && $postNames.size() > 0) 78 - #set ($heroDoc = $xwiki.getDocument($postNames.get(0))) 79 - #set ($heroObj = $heroDoc.getObject('Blog.BlogPostClass')) 80 - #set ($tilePosts = []) 81 - #foreach ($pn in $postNames) 82 - #if ("$pn" != "$postNames.get(0)" && $tilePosts.size() < 4) 83 - #set ($discard = $tilePosts.add($pn)) 84 - #end 85 - #end 86 -#end 87 -## 88 -## ---- Hero-Daten aufbereiten ---- 89 -#set ($heroImg = '') 90 -#if ($heroDoc) 91 - #foreach ($att in $heroDoc.getAttachmentList()) 92 - #if ($heroImg == '' && $att.getMimeType().startsWith('image/')) 93 - #set ($heroImg = $heroDoc.getAttachmentURL($att.getFilename())) 94 - #end 95 - #end 96 - #set ($heroTitle = $heroDoc.getPlainTitle()) 97 - #set ($heroText = "$!heroObj.getValue('extract')") 98 - #set ($heroDate = $heroObj.getValue('publishDate')) 99 -#end 100 -## 101 -## ---- Laufschrift-Daten aufbereiten ---- 102 -#if ($breakingDoc) 103 - #set ($breakingTitle = $breakingDoc.getPlainTitle()) 104 - #set ($breakingText = "$!breakingObj.getValue('extract')") 105 - #set ($breakingURL = $breakingDoc.getURL('view')) 106 - #set ($breakingDate = $breakingObj.getValue('publishDate')) 107 -#end 108 -## 109 -{{html clean="false" wiki="false"}} 110 -<style> 111 -## Seitenkopf (Titel + "Zuletzt geaendert" + Aktionsmenue) auf DIESER Seite ausblenden 112 -.document-header { display: none !important; } 113 -## Breadcrumb (Pfad-Navigation) inkl. Wrapper ausblenden 114 -#hierarchy_breadcrumb, #hierarchy, .breadcrumb { display: none !important; } 115 -## Horizontale Trennlinie + Rechte-Warnung entfernen, Inhalt nach oben ziehen 116 -#mainContentArea > hr { display: none !important; } 117 -#missing-required-rights-warning { display: none !important; } 118 -## vom Editor erzeugten Leerabsatz um den Style-Block wegnehmen 119 -#xwikicontent > p:first-child { display: none !important; } 120 -#xwikicontent > p:empty { display: none !important; } 121 -## Fusszeile: Tags + "Gefaellt mir" + "Erstellt von / uebersetzt von" ausblenden 122 -#xdocTags, .doc-tags, .like-container, .xdocCreation { display: none !important; } 123 -.intra-wrap { width: 90%; max-width: 90%; margin: 0 auto; } 124 -.intra-ticker { 125 - display: flex; align-items: stretch; height: 38px; 126 - background: #c0392b; margin-bottom: 20px; overflow: hidden; border-radius: 8px; 127 -} 128 -.intra-ticker-label { 129 - flex: 0 0 auto; display: flex; align-items: center; 130 - background: #922b21; color: #fff !important; text-decoration: none; 131 - font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; 132 - padding: 0 18px; white-space: nowrap; 133 -} 134 -.intra-ticker-viewport { flex: 1 1 auto; position: relative; overflow: hidden; } 135 -.intra-ticker-date { 136 - flex: 0 0 auto; display: flex; align-items: center; 137 - color: #ffd7d0 !important; font-size: 13px; font-weight: 700; 138 - padding: 0 6px 0 18px; white-space: nowrap; 139 -} 140 -.intra-ticker-track { 141 - position: absolute; top: 0; left: 100%; height: 100%; 142 - display: flex; align-items: center; white-space: nowrap; 143 - color: #fff !important; text-decoration: none; font-size: 14px; font-weight: 600; 144 - padding: 0 18px; 145 - animation: intra-ticker-scroll 22s linear infinite; 146 -} 147 -.intra-ticker-track:hover { animation-play-state: paused; text-decoration: underline; } 148 -@keyframes intra-ticker-scroll { 149 - from { left: 100%; } 150 - to { left: -100%; } 151 -} 152 -.intra-cols { display: flex; gap: 20px; align-items: stretch; } 153 -.intra-main { flex: 2 1 0; min-width: 0; } 154 -.intra-side { flex: 1 1 0; display: flex; flex-direction: column; gap: 16px; } 155 -.intra-hero { 156 - position: relative; width: 100%; min-height: 360px; border-radius: 14px; 157 - overflow: hidden; background: #223; background-size: cover; background-position: center; 158 - box-shadow: 0 6px 18px rgba(0,0,0,.15); text-decoration: none; display: block; 159 - transition: transform .15s ease, box-shadow .15s ease; 160 -} 161 -.intra-hero:hover { 162 - transform: translateY(-3px); 163 - box-shadow: 0 12px 28px rgba(0,0,0,.22); 164 -} 165 -.intra-hero:hover .intra-btn { filter: brightness(1.08); } 166 -.intra-hero::after { 167 - content: ""; position: absolute; inset: 0; 168 - background: linear-gradient(180deg, rgba(0,0,0,0) 30%, rgba(0,0,0,.75) 100%); 169 -} 170 -.intra-hero-body { position: absolute; left: 0; bottom: 0; z-index: 2; padding: 28px; color: #fff; } 171 -.intra-chip { 172 - display: inline-block; background: #e74c3c; color: #fff; font-weight: 700; 173 - font-size: 12px; letter-spacing: .08em; padding: 4px 12px; border-radius: 20px; text-transform: uppercase; 174 -} 175 -.intra-hero-date { opacity: .85; font-size: 13px; margin: 14px 0 4px; } 176 -.intra-hero h2 { color: #fff; margin: 4px 0 16px; font-size: 30px; line-height: 1.15; max-width: 90%; } 177 -.intra-btn { 178 - display: inline-block; background: #27ae60; color: #fff !important; text-decoration: none; 179 - padding: 9px 20px; border-radius: 24px; font-weight: 600; font-size: 14px; 180 -} 181 -.intra-btn:hover { filter: brightness(1.08); } 182 -.intra-apps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; } 183 -.intra-app { 184 - display: flex; flex-direction: column; justify-content: space-between; 185 - border-radius: 10px; padding: 12px 12px 10px; min-height: 84px; color: #fff !important; 186 - text-decoration: none; transition: transform .15s ease, box-shadow .15s ease; 187 -} 188 -.intra-app:hover { transform: translateY(-2px); box-shadow: 0 6px 14px rgba(0,0,0,.18); } 189 -.intra-app-ic { font-size: 22px; line-height: 1; } 190 -.intra-app-ic .fa { color: #fff; } 191 -.intra-app-lbl { font-size: 13px; font-weight: 600; margin-top: 8px; } 192 -.intra-tiles { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; } 193 -.intra-side-fn { 194 - border: 2px dashed #cbd3dc; border-radius: 12px; padding: 20px; min-height: 120px; 195 - display: flex; flex-direction: column; align-items: center; justify-content: center; 196 - color: #8a97a6; text-align: center; font-size: 13px; 197 -} 198 -.intra-widget { background: #fff; border: 0.5px solid #e2e6ea; border-radius: 12px; padding: 16px 18px; box-shadow: 0 3px 12px rgba(0,0,0,.06); margin-top: 35px; } 199 -.intra-widget-h { font-size: 14px; font-weight: 700; color: #16324f; margin-bottom: 10px; } 200 -.intra-cal-link { color: #16324f; text-decoration: none; transition: color .15s ease; } 201 -.intra-cal-link:hover { color: #2c6fbb; } 202 -.intra-tagcloud { line-height: 2; } 203 -.intra-tag { display: inline-block; margin: 0 9px 4px 0; color: #2c6fbb; text-decoration: none; } 204 -.intra-tag:hover { text-decoration: underline; } 205 -.intra-cal-list { display: flex; flex-direction: column; } 206 -.intra-cal-item { display: flex; gap: 10px; align-items: baseline; padding: 7px 0; border-bottom: 1px solid #eef1f4; text-decoration: none; } 207 -.intra-cal-item:last-child { border-bottom: 0; } 208 -.intra-cal-item:hover .intra-cal-title { text-decoration: underline; } 209 -.intra-cal-date { flex: 0 0 auto; font-size: 12px; font-weight: 700; color: #2c6fbb; min-width: 52px; letter-spacing: .02em; } 210 -.intra-cal-title { font-size: 13px; color: #16324f; } 211 -.intra-cal-dot { flex: 0 0 auto; width: 9px; height: 9px; border-radius: 50%; align-self: center; box-shadow: 0 0 0 1px rgba(0,0,0,.06) inset; } 212 -.intra-cal-empty { color: #8a97a6; font-size: 13px; } 213 -.intra-tile { 214 - display: flex; background: #fff; border-radius: 12px; overflow: hidden; 215 - box-shadow: 0 3px 12px rgba(0,0,0,.10); text-decoration: none; color: #1a1a1a; min-height: 128px; 216 - transition: transform .15s ease, box-shadow .15s ease; 217 -} 218 -.intra-tile:hover { transform: translateY(-2px); box-shadow: 0 8px 18px rgba(0,0,0,.15); } 219 -.intra-tile-txt { flex: 1 1 auto; padding: 16px 18px; } 220 -.intra-tile-txt h3 { margin: 6px 0 6px; font-size: 17px; color: #16324f; } 221 -.intra-tile-ex { font-size: 13px; color: #555; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } 222 -.intra-tile-date { font-size: 12px; color: #8a8a8a; margin-top: 10px; } 223 -.intra-mini-chip { display:inline-block; font-size: 11px; font-weight: 700; color:#2c6fbb; letter-spacing:.05em; text-transform: uppercase; } 224 -.intra-tile-img { flex: 0 0 40%; background-size: cover; background-position: center; background-color: #dde3ea; } 225 -.intra-h { font-size: 15px; font-weight: 700; color: #16324f; margin: 26px 0 12px; } 226 -@media (max-width: 860px) { 227 - .intra-cols { flex-direction: column; } 228 - .intra-apps { grid-template-columns: repeat(4, 1fr); } 229 - .intra-tiles { grid-template-columns: 1fr; } 230 -} 231 -/* Aussenhuelle faengt den 3D-Ueberstand ab -> kein Scrollbalken-Flackern */ 232 -.intra-flip-outer { overflow: hidden; padding: 8px 12px 18px; margin-top: 24px; } 233 -.intra-flip { perspective: 1600px; } 234 -.intra-flip-inner { 235 - position: relative; 236 - transform-style: preserve-3d; 237 - transition: transform .6s cubic-bezier(.2,.7,.2,1); 238 - transition-delay: .12s; /* kein Flip beim blossen Vorbeiziehen */ 239 -} 240 -.intra-flip.is-back .intra-flip-inner { transform: rotateY(180deg); } 1 +== Willkommen in Ihrem Wiki == 241 241 242 -.intra-flip-face { 243 - -webkit-backface-visibility: hidden; backface-visibility: hidden; 244 - box-sizing: border-box; 245 - background: #fff; border: .5px solid #e2e6ea; border-radius: 12px; 246 - box-shadow: 0 3px 12px rgba(0,0,0,.06); padding: 16px 18px; 247 -} 248 -.intra-flip-front { position: relative; min-height: 250px; } /* gibt die Hoehe vor */ 249 -.intra-flip-back { position: absolute; inset: 0; transform: rotateY(180deg); overflow: auto; } 3 +XWiki ist das beste Werkzeug, um Ihr Wissen zu organisieren und zu verwalten. Ein //Wiki// ist aufgeteilt in eine Hierarchie von //Seiten//. Sie können mehrere Wikis erstellen, jedes mit einem eigenen Satz von Seiten. 250 250 251 -/* Rueckseite darf nicht durch die Vorderseite hindurch klickbar sein */ 252 -.intra-flip-back { pointer-events: none; } 253 -.intra-flip.is-back .intra-flip-back { pointer-events: auto; } 254 -.intra-flip.is-back .intra-flip-front { pointer-events: none; } 5 +XWiki kann als Wissensdatenbank (Support, Dokumentation, Vertrieb, etc.), für kollaborative Arbeitsbereiche oder sogar als komplettes Intranet genutzt werden. 255 255 256 -.intra-flip-hint { 257 - position: absolute; top: 12px; right: 14px; 258 - font-size: 10px; color: #8a97a6; background: #f2f5f8; 259 - border: 1px solid #e2e6ea; padding: 2px 8px; border-radius: 20px; 260 - pointer-events: none; 261 -} 262 -</style> 7 +== Die Grundlagen == 263 263 264 - <divclass="intra-wrap">9 +Um das Meiste aus Ihrem Wiki herauszuholen, melden Sie sich an und: 265 265 266 - ## ----- LAUFSCHRIFT: neuester Post mit Kategorie "Breaking News" ----- 267 - #if ($breakingDoc) 268 - <div class="intra-ticker"> 269 - <a class="intra-ticker-label" href="$breakingURL">$escapetool.xml($breakingCategory)</a> 270 - #if ($breakingDate)<span class="intra-ticker-date">$datetool.format('dd.MM.yyyy', $breakingDate)</span>#end 271 - <div class="intra-ticker-viewport"> 272 - <a class="intra-ticker-track" href="$breakingURL">$escapetool.xml($breakingTitle)#if($breakingText != '') — $escapetool.xml($breakingText)#end</a> 273 - </div> 274 - </div> 275 - #end 11 +Verwenden Sie die {{displayIcon name="pencil"/}} Schaltfläche oberhalb, um diese Seite zu //bearbeiten// und beginnen Sie damit, das Wiki Ihren Vorstellungen anzupassen. 276 276 277 - <divclass="intra-cols">13 +Verwenden Sie die {{displayIcon name="add"/}} Schaltfläche oberhalb, um neue Seiten zu //erstellen// und erzeugen Sie eine //Hierarchie//, die Ihre Informationen am besten organisiert. 278 278 279 - ## ===== LINKE SPALTE: Hero + 4 Blog-Kacheln ===== 280 - <div class="intra-main"> 15 +Verwenden Sie die {{displayIcon name="home"/}} Breadcrumbs über dem Titel, um innerhalb Ihrer Seiten zu navigieren. Ohne diese ist es leicht, sich in einem großen Wiki zu verirren. 281 281 282 - ## ----- HERO (grosser TOP-Post) ----- 283 - #if ($heroDoc) 284 - <a class="intra-hero" href="$heroDoc.getURL('view')" style="#if($heroImg != '')background-image: url('$heroImg');#end"> 285 - <div class="intra-hero-body"> 286 - <span class="intra-chip">$escapetool.xml($heroCategory)</span> 287 - #if ($heroDate)<div class="intra-hero-date">$datetool.format('dd. MMMM yyyy', $heroDate)</div>#end 288 - <h2>$escapetool.xml($heroTitle)</h2> 289 - <span class="intra-btn">Weiterlesen</span> 290 - </div> 291 - </a> 292 - #else 293 - <div class="intra-hero"><div class="intra-hero-body"><h2>Noch kein Blog-Beitrag</h2></div></div> 294 - #end 17 +Außerdem können Sie den [[Sandkasten>>Sandbox.WebHome]] verwenden, um weitere Demo-Inhalte anzusehen und die einzelnen Funktionen des Wikis auszuprobieren und besser kennenzulernen. 295 295 296 - ## ----- 4 BLOG-KACHELN (2 x 2), direkt unter dem Hero ----- 297 - <div class="intra-h">Aktuelles</div> 298 - <div class="intra-tiles"> 299 - #foreach ($pn in $tilePosts) 300 - #set ($td = $xwiki.getDocument($pn)) 301 - #set ($to = $td.getObject('Blog.BlogPostClass')) 302 - #set ($tImg = '') 303 - #foreach ($att in $td.getAttachmentList()) 304 - #if ($tImg == '' && $att.getMimeType().startsWith('image/')) 305 - #set ($tImg = $td.getAttachmentURL($att.getFilename())) 306 - #end 307 - #end 308 - #set ($tEx = "$!to.getValue('extract')") 309 - #set ($tCat = '') 310 - #set ($tcats = $to.getValue('category')) 311 - #if ($tcats && $tcats.size() > 0) 312 - #set ($fc = "$tcats.get(0)") 313 - #set ($tCat = $fc.substring($mathtool.add($fc.lastIndexOf('.'), 1))) 314 - #end 315 - #set ($tDate = $to.getValue('publishDate')) 316 - <a class="intra-tile" href="$td.getURL('view')"> 317 - <div class="intra-tile-txt"> 318 - #if ($tCat != '')<span class="intra-mini-chip">$escapetool.xml($tCat)</span>#end 319 - <h3>$escapetool.xml($td.getPlainTitle())</h3> 320 - <div class="intra-tile-ex">$escapetool.xml($tEx)</div> 321 - #if ($tDate)<div class="intra-tile-date">$datetool.format('dd.MM.yyyy', $tDate)</div>#end 322 - </div> 323 - <div class="intra-tile-img" style="#if($tImg != '')background-image: url('$tImg');#end"></div> 324 - </a> 325 - #end 326 - </div> 327 - </div> 19 +{{box}} 20 +Mit dem [[Getting Started Guide>>https://www.xwiki.org/xwiki/bin/view/Documentation/UserGuide/GettingStarted/WebHome]] erfahren Sie mehr darüber, wie Sie XWiki verwenden. 21 +{{/box}} 328 328 329 - ## ===== RECHTE SPALTE: 12 App-Buttons + Platz fuer weitere Funktion ===== 330 - <div class="intra-side"> 23 +(%class="row"%) 24 +((( 25 +(%class="col-xs-12 col-sm-6"%) 26 +((( 27 +== Erweitern Sie Ihr Wiki == 331 331 332 - ## ----- 12 APP-BUTTONS ----- 333 - <div class="intra-apps"> 334 - #foreach ($app in $apps) 335 - #set ($href = '') 336 - #if ("$!app.ref" != '') 337 - #set ($href = $xwiki.getURL($app.ref)) 338 - #elseif ("$!app.url" != '') 339 - #set ($href = $app.url) 340 - #end 341 - <a class="intra-app" style="background: $app.color;"#if($href != '') href="$href"#end> 342 - <span class="intra-app-ic"><span class="fa fa-$app.icon" aria-hidden="true"></span></span> 343 - <span class="intra-app-lbl">$escapetool.xml($app.label)</span> 344 - </a> 345 -#end 346 - </div> 29 +Um die Leistungsfähigkeit zu erhöhen und den Funktionsumfang Ihres Wikis zu erweitern, verwenden Sie den [[Extension Manager>>XWiki.XWikiPreferences||queryString="editor=globaladmin§ion=XWiki.Extensions"]], um Erweiterungen zu suchen und zu installieren. 347 347 348 -## ----- NAECHSTE TERMINE (Mocca Calendar) / RUECKSEITE: TAGCLOUD ----- 349 -<div class="intra-flip-outer"> 350 - <div class="intra-flip" id="intra-flip-side"> 351 - <div class="intra-flip-inner"> 31 +Benutzen Sie das [[Erweiterungsverzeichnis>>https://extensions.xwiki.org]], um durch die mehr als 900 für XWiki verfügbaren Community-Erweiterungen zu blättern. 32 +))) 352 352 353 - <!-- VORDERSEITE: Naechste Termine --> 354 - <div class="intra-flip-face intra-flip-front"> 355 - <div class="intra-widget-h"><a class="intra-cal-link" href="$xwiki.getURL('MoccaCalendar.WebHome', 'view')">Nächste Termine</a></div> 356 - <div class="intra-cal-list"> 357 - #set ($now = $datetool.date) 358 - ## ---- Kalenderfarben einmalig laden: Event-Elternseite (= Kalender) -> Farbe/Titel ---- 359 - #set ($calXwql = "select doc.fullName, calendar.color, calendar.title from Document doc, doc.object(MoccaCalendar.MoccaCalendarClass) calendar") 360 - #set ($calResults = $services.query.xwql($calXwql).execute()) 361 - #set ($calColorMap = {}) 362 - #set ($calTitleMap = {}) 363 - #foreach ($cr in $calResults) 364 - #set ($discard = $calColorMap.put("$cr.get(0)", "$!cr.get(1)")) 365 - #set ($discard = $calTitleMap.put("$cr.get(0)", "$!cr.get(2)")) 366 - #end 367 - #set ($defaultCalColor = '#8a97a6') 368 - #set ($evtXwql = "from doc.object(MoccaCalendar.MoccaCalendarEventClass) as event where event.startDate >= :now and doc.hidden = false order by event.startDate asc") 369 - #set ($evtNames = $services.query.xwql($evtXwql).bindValue('now', $now).setLimit(6).execute()) 370 - #if ($evtNames && $evtNames.size() > 0) 371 - #foreach ($en in $evtNames) 372 - #set ($ed = $xwiki.getDocument($en)) 373 - #set ($eo = $ed.getObject('MoccaCalendar.MoccaCalendarEventClass')) 374 - #set ($eStart = $eo.getValue('startDate')) 375 - #set ($eAllDay = $eo.getValue('allDay')) 376 - #set ($eTitle = $ed.getPlainTitle()) 377 - #if ($eTitle == '')#set ($eTitle = "$!eo.getValue('title')")#end 378 - ## Kalender der Elternseite ermitteln (Events liegen als Kind-Seite unter ihrem Kalender) 379 - #set ($eParent = "$!ed.getParent()") 380 - #set ($eColor = $calColorMap.get($eParent)) 381 - #if (!$eColor || $eColor == '') 382 - #set ($eColor = $defaultCalColor) 383 - #end 384 - #set ($eCalName = $calTitleMap.get($eParent)) 385 - #if (!$eCalName || $eCalName == '') 386 - #set ($eCalName = $xwiki.getDocument($eParent).getPlainTitle()) 387 - #end 388 - <a class="intra-cal-item" href="$ed.getURL('view')"> 389 - <span class="intra-cal-dot" style="background: $escapetool.xml($eColor);" title="$escapetool.xml($eCalName)"></span> 390 - <span class="intra-cal-date">#if($eStart)$datetool.format('dd.MM.', $eStart)#if("$!eAllDay" != '1') $datetool.format('HH:mm', $eStart)#end#end</span> 391 - <span class="intra-cal-title">$escapetool.xml($eTitle)</span> 392 - </a> 393 - #end 394 - #else 395 - <span class="intra-cal-empty">Keine anstehenden Termine.</span> 396 - #end 397 - </div> 398 - </div> 34 +(%class="col-xs-12 col-sm-6"%) 35 +((( 36 +== Erstellen Sie Ihre Anwendung == 399 399 400 -<!-- RUECKSEITE: Tagcloud -->## 401 -<div class="intra-flip-face intra-flip-back">## 402 - <div class="intra-widget-h">Beliebte Themen</div>## 403 - #set ($tagMap = $xwiki.tag.getTagCount())## 404 - #if ($tagMap && $tagMap.size() > 0)## 405 - #set ($top = [])## 406 - #set ($maxCnt = 1)## 407 - #set ($minCnt = 999999)## 408 - #set ($tagCount = 0)## 409 -#foreach ($e in $collectiontool.sort($tagMap.entrySet(), ['value:desc']))## 410 - #if ($tagCount >= 40)#break#end## 411 - #if ($e.key.toLowerCase() != 'id')## 412 - #set ($discard = $top.add($e.key))## 413 - #set ($tagCount = $mathtool.add($tagCount, 1))## 414 - #if ($e.value > $maxCnt)#set ($maxCnt = $e.value)#end## 415 - #if ($e.value < $minCnt)#set ($minCnt = $e.value)#end## 416 - #end## 417 -#end## 418 - #set ($span = $mathtool.max(1, $mathtool.sub($maxCnt, $minCnt)))## 419 - #set ($alpha = $collectiontool.sort($top))## 420 - <div class="intra-tagcloud">## 421 - #foreach ($tagName in $top)## 422 - #set ($cnt = $tagMap.get($tagName))## 423 - #set ($lvl = $mathtool.round($mathtool.div($mathtool.mul($mathtool.sub($cnt, $minCnt), 4), $span)))## 424 - #set ($ord = $alpha.indexOf($tagName))## 425 - <a class="intra-tag intra-tag-l${lvl}" style="order: ${ord};"## 426 - href="$xwiki.getURL('Main.Tags', 'view', "do=viewTag&tag=$escapetool.url($tagName)")"## 427 - title="$escapetool.xml($tagName): $cnt Seiten">## 428 - <span class="intra-tag-name">$escapetool.xml($tagName)</span><span class="intra-tag-cnt">$cnt</span>## 429 - </a>## 430 - #end## 431 - </div>## 432 - #else## 433 - <div class="intra-tagcloud"><span class="intra-cal-empty">Noch keine Tags vergeben.</span></div>## 434 - #end## 435 -</div>## 38 +Gehen Sie über die verfügbaren Erweiterungen hinaus und definieren Sie die //Struktur// Ihrer Daten basierend auf //Ihrem// Bedarf, indem Sie //Ihre// eigenen Anwendungen mit [[App Within Minutes>>AppWithinMinutes]] (AWM) erstellen. 436 436 437 - </div> 438 - </div> 439 - </div> 440 - 441 - </div> 442 - 443 - </div> 444 -</div> 445 -<script> 446 -(function(){ 447 - var box = document.getElementById('intra-flip-side'); 448 - if(!box){ return; } 449 - var hoverCapable = !!(window.matchMedia && window.matchMedia('(hover: hover)').matches); 450 - ## Letzte bekannte Maus-Y-Position global mitverfolgen, um beim Betreten der Karte 451 - ## die Bewegungsrichtung zu kennen (Y waechst nach unten -> "von unten" = Y wird kleiner). 452 - var lastY = null; 453 - document.addEventListener('mousemove', function(e){ lastY = e.clientY; }, {passive:true}); 454 - box.addEventListener('mouseenter', function(e){ 455 - if (!hoverCapable) { return; } 456 - var enteredFromBelow = (lastY !== null && e.clientY < lastY); 457 - if (enteredFromBelow) { 458 - box.classList.toggle('is-back'); 459 - } 460 - lastY = e.clientY; 461 - }); 462 - box.addEventListener('click', function(e){ 463 - if(e.target.closest('a')){ return; } 464 - if(hoverCapable){ return; } 465 - box.classList.toggle('is-back'); 466 - }); 467 -})(); 468 -</script> 469 - 470 -{{/html}} 471 -{{/velocity}} 40 +AWM übernimmt für Sie und Ihre Benutzer die einfache Erstellung und Verwaltung der Daten. 41 +))) 42 +)))