Änderungen von Dokument Home

Zuletzt geändert von Steffen Rehfuß am 14.08.2026 18:59

Von Version 3.1
bearbeitet von Steffen Rehfuß
am 14.08.2026 18:24
Änderungskommentar: Es gibt keinen Kommentar für diese Version
Auf Version 1.1
bearbeitet von Steffen Rehfuß
am 14.08.2026 16:40
Änderungskommentar: Install extension [org.xwiki.platform:xwiki-platform-distribution-flavor-common/17.10.9]

Zusammenfassung

Details

Seiteneigenschaften
Inhalt
... ... @@ -1,400 +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 ----
8 -#set ($blogSpace = 'Blog') ## technischer Space-Name des Blogs
9 -#set ($heroCategory = 'TOP') ## Kategorie, die gross dargestellt wird
10 -##
11 -## ---- KONFIG 2: Die 12 App-Buttons (Text / Icon / Link / Farbe) ----
12 -## icon = Font-Awesome-Name (ohne "fa-"). Farbe = beliebiger Hex-Wert.
13 -#set ($apps = [
14 - {'label':'Wissensmanagement', 'icon':'search', 'ref':'Wissensmanagement.WebHome', 'color':'#16a085'},
15 - {'label':'MyPage', 'icon':'key', 'ref':'MyPage.WebHome', 'color':'#2980b9'},
16 - {'label':'Blog', 'icon':'star', 'ref':'Blog.WebHome', 'color':'#8e44ad'},
17 - {'label':'Chatbot', 'icon':'pencil-square-o', 'url':"javascript:document.getElementById('toggle-chat-button').click();void(0);", 'color':'#16a085'},
18 - {'label':'Forum', 'icon':'group', 'ref':'Forums.WebHome', 'color':'#2980b9'},
19 - {'label':'Umfragen', 'icon':'question', 'ref':'XPoll.WebHome', 'color':'#8e44ad'},
20 - {'label':'Gruppenräume', 'icon':'life-ring', 'ref':'Rooms.WebHome', 'color':'#16a085'},
21 - {'label':'Meine Favoriten', 'icon':'star', 'ref':'Internes.Favoriten.WebHome', 'color':'#2980b9'},
22 - {'label':'Kalender', 'icon':'clock-o', 'ref':'MoccaCalendar.WebHome', 'color':'#8e44ad'},
23 - {'label':'Org-Chart', 'icon':'sitemap', 'ref':'Internes.Organigramm.WebHome', 'color':'#2c3e50'},
24 - {'label':'Tag Filter', 'icon':'filter', 'ref':'KBC Anwendungen.Tag Filter.WebHome', 'color':'#2c3e50'},
25 - {'label':'Kantine', 'icon':'coffee', 'ref':'Internes.Kantine.Speiseplan vom 13\.07\.2026 - 17\.07\.2026.WebHome', 'color':'#2c3e50'}
26 -])
27 -##
28 -## ---- Posts laden (neueste zuerst) ----
29 -#set ($xwql = "from doc.object(Blog.BlogPostClass) as post where post.published = 1 and doc.hidden = false")
30 -#if ($blogSpace != '')
31 - #set ($xwql = "$xwql and doc.space like :space")
32 -#end
33 -#set ($xwql = "$xwql order by post.publishDate desc")
34 -#set ($q = $services.query.xwql($xwql).setLimit(30))
35 -#if ($blogSpace != '')
36 - #set ($q = $q.bindValue('space', "$blogSpace%"))
37 -#end
38 -#set ($postNames = $q.execute())
39 -##
40 -## ---- Hero (erster TOP-Post) + bis zu 4 Kachel-Posts bestimmen ----
41 -#set ($heroDoc = $NULL)
42 -#set ($heroObj = $NULL)
43 -#set ($tilePosts = [])
44 -#foreach ($pn in $postNames)
45 - #set ($pd = $xwiki.getDocument($pn))
46 - #set ($po = $pd.getObject('Blog.BlogPostClass'))
47 - #set ($isTop = false)
48 - #set ($cats = $po.getValue('category'))
49 - #if ($cats)
50 - #foreach ($c in $cats)
51 - #set ($cn = "$c")
52 - #set ($cn = $cn.substring($mathtool.add($cn.lastIndexOf('.'), 1)))
53 - #if ($cn == $heroCategory)
54 - #set ($isTop = true)
55 - #end
56 - #end
57 - #end
58 - #if ($isTop && !$heroDoc)
59 - #set ($heroDoc = $pd)
60 - #set ($heroObj = $po)
61 - #elseif ($tilePosts.size() < 4)
62 - #set ($discard = $tilePosts.add($pn))
63 - #end
64 -#end
65 -## Fallback: kein TOP-Post -> neuesten Post als Hero nehmen
66 -#if (!$heroDoc && $postNames.size() > 0)
67 - #set ($heroDoc = $xwiki.getDocument($postNames.get(0)))
68 - #set ($heroObj = $heroDoc.getObject('Blog.BlogPostClass'))
69 - #set ($tilePosts = [])
70 - #foreach ($pn in $postNames)
71 - #if ("$pn" != "$postNames.get(0)" && $tilePosts.size() < 4)
72 - #set ($discard = $tilePosts.add($pn))
73 - #end
74 - #end
75 -#end
76 -##
77 -## ---- Hero-Daten aufbereiten ----
78 -#set ($heroImg = '')
79 -#if ($heroDoc)
80 - #foreach ($att in $heroDoc.getAttachmentList())
81 - #if ($heroImg == '' && $att.getMimeType().startsWith('image/'))
82 - #set ($heroImg = $heroDoc.getAttachmentURL($att.getFilename()))
83 - #end
84 - #end
85 - #set ($heroTitle = $heroDoc.getPlainTitle())
86 - #set ($heroText = "$!heroObj.getValue('extract')")
87 - #set ($heroDate = $heroObj.getValue('publishDate'))
88 -#end
89 -##
90 -{{html clean="false" wiki="false"}}
91 -<style>
92 -## Seitenkopf (Titel + "Zuletzt geaendert" + Aktionsmenue) auf DIESER Seite ausblenden
93 -.document-header { display: none !important; }
94 -## Breadcrumb (Pfad-Navigation) inkl. Wrapper ausblenden
95 -#hierarchy_breadcrumb, #hierarchy, .breadcrumb { display: none !important; }
96 -## Horizontale Trennlinie + Rechte-Warnung entfernen, Inhalt nach oben ziehen
97 -#mainContentArea > hr { display: none !important; }
98 -#missing-required-rights-warning { display: none !important; }
99 -## vom Editor erzeugten Leerabsatz um den Style-Block wegnehmen
100 -#xwikicontent > p:first-child { display: none !important; }
101 -#xwikicontent > p:empty { display: none !important; }
102 -## Fusszeile: Tags + "Gefaellt mir" + "Erstellt von / uebersetzt von" ausblenden
103 -#xdocTags, .doc-tags, .like-container, .xdocCreation { display: none !important; }
104 -.intra-wrap { width: 90%; max-width: 90%; margin: 0 auto; }
105 -.intra-cols { display: flex; gap: 20px; align-items: stretch; }
106 -.intra-main { flex: 2 1 0; min-width: 0; }
107 -.intra-side { flex: 1 1 0; display: flex; flex-direction: column; gap: 16px; }
108 -.intra-hero {
109 - position: relative; width: 100%; min-height: 360px; border-radius: 14px;
110 - overflow: hidden; background: #223; background-size: cover; background-position: center;
111 - box-shadow: 0 6px 18px rgba(0,0,0,.15); text-decoration: none; display: block;
112 -}
113 -.intra-hero::after {
114 - content: ""; position: absolute; inset: 0;
115 - background: linear-gradient(180deg, rgba(0,0,0,0) 30%, rgba(0,0,0,.75) 100%);
116 -}
117 -.intra-hero-body { position: absolute; left: 0; bottom: 0; z-index: 2; padding: 28px; color: #fff; }
118 -.intra-chip {
119 - display: inline-block; background: #e74c3c; color: #fff; font-weight: 700;
120 - font-size: 12px; letter-spacing: .08em; padding: 4px 12px; border-radius: 20px; text-transform: uppercase;
121 -}
122 -.intra-hero-date { opacity: .85; font-size: 13px; margin: 14px 0 4px; }
123 -.intra-hero h2 { color: #fff; margin: 4px 0 16px; font-size: 30px; line-height: 1.15; max-width: 90%; }
124 -.intra-btn {
125 - display: inline-block; background: #27ae60; color: #fff !important; text-decoration: none;
126 - padding: 9px 20px; border-radius: 24px; font-weight: 600; font-size: 14px;
127 -}
128 -.intra-btn:hover { filter: brightness(1.08); }
129 -.intra-apps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
1 +== Willkommen in Ihrem Wiki ==
130 130  
131 -.intra-app {
132 - display: flex;
133 - flex-direction: column;
134 - justify-content: space-between;
135 - border-radius: 10px;
136 - padding: 12px 12px 10px;
137 - min-height: 84px;
138 - color: #fff !important;
139 - text-decoration: none;
140 - transition: transform .15s ease,
141 - box-shadow .15s ease,
142 - filter .15s ease;
143 -}
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.
144 144  
145 -.intra-app:hover {
146 - transform: translateY(-2px);
147 - filter: brightness(.90); /* ca. 8 % dunkler */
148 - box-shadow: 0 6px 14px rgba(0,0,0,.18);
149 -}
5 +XWiki kann als Wissensdatenbank (Support, Dokumentation, Vertrieb, etc.), für kollaborative Arbeitsbereiche oder sogar als komplettes Intranet genutzt werden.
150 150  
151 -.intra-app:active {
152 - filter: brightness(.86);
153 -}
7 +== Die Grundlagen ==
154 154  
9 +Um das Meiste aus Ihrem Wiki herauszuholen, melden Sie sich an und:
155 155  
156 -.intra-app-ic { font-size: 22px; line-height: 1; }
157 -.intra-app-ic .fa { color: #fff; }
158 -.intra-app-lbl { font-size: 13px; font-weight: 600; margin-top: 8px; }
159 -.intra-tiles { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; }
160 -.intra-side-fn {
161 - border: 2px dashed #cbd3dc; border-radius: 12px; padding: 20px; min-height: 120px;
162 - display: flex; flex-direction: column; align-items: center; justify-content: center;
163 - color: #8a97a6; text-align: center; font-size: 13px;
164 -}
165 -.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; }
166 -.intra-widget-h { font-size: 14px; font-weight: 700; color: #16324f; margin-bottom: 10px; }
167 -.intra-tagcloud { line-height: 2; }
168 -.intra-tag { display: inline-block; margin: 0 9px 4px 0; color: #2c6fbb; text-decoration: none; }
169 -.intra-tag:hover { text-decoration: underline; }
170 -.intra-cal-list { display: flex; flex-direction: column; }
171 -.intra-cal-item { display: flex; gap: 10px; align-items: baseline; padding: 7px 0; border-bottom: 1px solid #eef1f4; text-decoration: none; }
172 -.intra-cal-item:last-child { border-bottom: 0; }
173 -.intra-cal-item:hover .intra-cal-title { text-decoration: underline; }
174 -.intra-cal-date { flex: 0 0 auto; font-size: 12px; font-weight: 700; color: #2c6fbb; min-width: 52px; letter-spacing: .02em; }
175 -.intra-cal-title { font-size: 13px; color: #16324f; }
176 -.intra-cal-empty { color: #8a97a6; font-size: 13px; }
177 -.intra-tile {
178 - display: flex; background: #fff; border-radius: 12px; overflow: hidden;
179 - box-shadow: 0 3px 12px rgba(0,0,0,.10); text-decoration: none; color: #1a1a1a; min-height: 128px;
180 - transition: transform .15s ease, box-shadow .15s ease;
181 -}
182 -.intra-tile:hover { transform: translateY(-2px); box-shadow: 0 8px 18px rgba(0,0,0,.15); }
183 -.intra-tile-txt { flex: 1 1 auto; padding: 16px 18px; }
184 -.intra-tile-txt h3 { margin: 6px 0 6px; font-size: 17px; color: #16324f; }
185 -.intra-tile-ex { font-size: 13px; color: #555; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
186 -.intra-tile-date { font-size: 12px; color: #8a8a8a; margin-top: 10px; }
187 -.intra-mini-chip { display:inline-block; font-size: 11px; font-weight: 700; color:#2c6fbb; letter-spacing:.05em; text-transform: uppercase; }
188 -.intra-tile-img { flex: 0 0 40%; background-size: cover; background-position: center; background-color: #dde3ea; }
189 -.intra-h { font-size: 15px; font-weight: 700; color: #16324f; margin: 26px 0 12px; }
190 -@media (max-width: 860px) {
191 - .intra-cols { flex-direction: column; }
192 - .intra-apps { grid-template-columns: repeat(4, 1fr); }
193 - .intra-tiles { grid-template-columns: 1fr; }
194 -}
195 -/* Aussenhuelle faengt den 3D-Ueberstand ab -> kein Scrollbalken-Flackern */
196 -.intra-flip-outer { overflow: hidden; padding: 8px 12px 18px; margin-top: 24px; }
197 -.intra-flip { perspective: 1600px; }
198 -.intra-flip-inner {
199 - position: relative;
200 - transform-style: preserve-3d;
201 - transition: transform .6s cubic-bezier(.2,.7,.2,1);
202 - transition-delay: 0s; /* Richtungserkennung im JS verhindert Fehl-Flips */
203 -}
204 -.intra-flip.is-back .intra-flip-inner { transform: rotateY(180deg); }
11 +Verwenden Sie die {{displayIcon name="pencil"/}} Schaltfläche oberhalb, um diese Seite zu //bearbeiten// und beginnen Sie damit, das Wiki Ihren Vorstellungen anzupassen.
205 205  
206 -.intra-flip-face {
207 - -webkit-backface-visibility: hidden; backface-visibility: hidden;
208 - box-sizing: border-box;
209 - background: #fff; border: .5px solid #e2e6ea; border-radius: 12px;
210 - box-shadow: 0 3px 12px rgba(0,0,0,.06); padding: 16px 18px;
211 -}
212 -.intra-flip-front { position: relative; min-height: 250px; } /* gibt die Hoehe vor */
213 -.intra-flip-back { position: absolute; inset: 0; transform: rotateY(180deg); overflow: auto; }
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.
214 214  
215 -/* Rueckseite darf nicht durch die Vorderseite hindurch klickbar sein */
216 -.intra-flip-back { pointer-events: none; }
217 -.intra-flip.is-back .intra-flip-back { pointer-events: auto; }
218 -.intra-flip.is-back .intra-flip-front { pointer-events: none; }
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.
219 219  
220 -.intra-flip-hint {
221 - position: absolute; top: 12px; right: 14px;
222 - font-size: 10px; color: #8a97a6; background: #f2f5f8;
223 - border: 1px solid #e2e6ea; padding: 2px 8px; border-radius: 20px;
224 - pointer-events: none;
225 -}
226 -</style>
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.
227 227  
228 -<div class="intra-wrap">
229 - <div class="intra-cols">
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}}
230 230  
231 - ## ===== LINKE SPALTE: Hero + 4 Blog-Kacheln =====
232 - <div class="intra-main">
23 +(%class="row"%)
24 +(((
25 +(%class="col-xs-12 col-sm-6"%)
26 +(((
27 +== Erweitern Sie Ihr Wiki ==
233 233  
234 - ## ----- HERO (grosser TOP-Post) -----
235 - #if ($heroDoc)
236 - <a class="intra-hero" href="$heroDoc.getURL('view')" style="#if($heroImg != '')background-image: url('$heroImg');#end">
237 - <div class="intra-hero-body">
238 - <span class="intra-chip">$escapetool.xml($heroCategory)</span>
239 - #if ($heroDate)<div class="intra-hero-date">$datetool.format('dd. MMMM yyyy', $heroDate)</div>#end
240 - <h2>$escapetool.xml($heroTitle)</h2>
241 - <span class="intra-btn">Weiterlesen</span>
242 - </div>
243 - </a>
244 - #else
245 - <div class="intra-hero"><div class="intra-hero-body"><h2>Noch kein Blog-Beitrag</h2></div></div>
246 - #end
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&section=XWiki.Extensions"]], um Erweiterungen zu suchen und zu installieren.
247 247  
248 - ## ----- 4 BLOG-KACHELN (2 x 2), direkt unter dem Hero -----
249 - <div class="intra-h">Aktuelles</div>
250 - <div class="intra-tiles">
251 - #foreach ($pn in $tilePosts)
252 - #set ($td = $xwiki.getDocument($pn))
253 - #set ($to = $td.getObject('Blog.BlogPostClass'))
254 - #set ($tImg = '')
255 - #foreach ($att in $td.getAttachmentList())
256 - #if ($tImg == '' && $att.getMimeType().startsWith('image/'))
257 - #set ($tImg = $td.getAttachmentURL($att.getFilename()))
258 - #end
259 - #end
260 - #set ($tEx = "$!to.getValue('extract')")
261 - #set ($tCat = '')
262 - #set ($tcats = $to.getValue('category'))
263 - #if ($tcats && $tcats.size() > 0)
264 - #set ($fc = "$tcats.get(0)")
265 - #set ($tCat = $fc.substring($mathtool.add($fc.lastIndexOf('.'), 1)))
266 - #end
267 - #set ($tDate = $to.getValue('publishDate'))
268 - <a class="intra-tile" href="$td.getURL('view')">
269 - <div class="intra-tile-txt">
270 - #if ($tCat != '')<span class="intra-mini-chip">$escapetool.xml($tCat)</span>#end
271 - <h3>$escapetool.xml($td.getPlainTitle())</h3>
272 - <div class="intra-tile-ex">$escapetool.xml($tEx)</div>
273 - #if ($tDate)<div class="intra-tile-date">$datetool.format('dd.MM.yyyy', $tDate)</div>#end
274 - </div>
275 - <div class="intra-tile-img" style="#if($tImg != '')background-image: url('$tImg');#end"></div>
276 - </a>
277 - #end
278 - </div>
279 - </div>
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 +)))
280 280  
281 - ## ===== RECHTE SPALTE: 12 App-Buttons + Platz fuer weitere Funktion =====
282 - <div class="intra-side">
34 +(%class="col-xs-12 col-sm-6"%)
35 +(((
36 +== Erstellen Sie Ihre Anwendung ==
283 283  
284 - ## ----- 12 APP-BUTTONS -----
285 - <div class="intra-apps">
286 - #foreach ($app in $apps)
287 - <a class="intra-app" style="background: $app.color;" href="#if($app.url != '')$app.url#else#end">
288 - <span class="intra-app-ic"><span class="fa fa-$app.icon" aria-hidden="true"></span></span>
289 - <span class="intra-app-lbl">$escapetool.xml($app.label)</span>
290 - </a>
291 - #end
292 - </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.
293 293  
294 -## ----- NAECHSTE TERMINE (Mocca Calendar) / RUECKSEITE: TAGCLOUD -----
295 -<div class="intra-flip-outer">
296 - <div class="intra-flip" id="intra-flip-side">
297 - <div class="intra-flip-inner">
298 -
299 - <!-- VORDERSEITE: Naechste Termine -->
300 - <div class="intra-flip-face intra-flip-front">
301 - <span class="intra-flip-hint">&#8942; Maus von unten</span>
302 - <div class="intra-widget-h">Nächste Termine</div>
303 - <div class="intra-cal-list">
304 - #set ($now = $datetool.date)
305 - #set ($evtXwql = "from doc.object(MoccaCalendar.MoccaCalendarEventClass) as event where event.startDate >= :now and doc.hidden = false order by event.startDate asc")
306 - #set ($evtNames = $services.query.xwql($evtXwql).bindValue('now', $now).setLimit(6).execute())
307 - #if ($evtNames && $evtNames.size() > 0)
308 - #foreach ($en in $evtNames)
309 - #set ($ed = $xwiki.getDocument($en))
310 - #set ($eo = $ed.getObject('MoccaCalendar.MoccaCalendarEventClass'))
311 - #set ($eStart = $eo.getValue('startDate'))
312 - #set ($eAllDay = $eo.getValue('allDay'))
313 - #set ($eTitle = $ed.getPlainTitle())
314 - #if ($eTitle == '')#set ($eTitle = "$!eo.getValue('title')")#end
315 - <a class="intra-cal-item" href="$ed.getURL('view')">
316 - <span class="intra-cal-date">#if($eStart)$datetool.format('dd.MM.', $eStart)#if("$!eAllDay" != '1') $datetool.format('HH:mm', $eStart)#end#end</span>
317 - <span class="intra-cal-title">$escapetool.xml($eTitle)</span>
318 - </a>
319 - #end
320 - #else
321 - <span class="intra-cal-empty">Keine anstehenden Termine.</span>
322 - #end
323 - </div>
324 - </div>
325 -
326 -<!-- RUECKSEITE: Tagcloud -->##
327 -<div class="intra-flip-face intra-flip-back">##
328 - <div class="intra-widget-h">Beliebte Themen</div>##
329 - #set ($tagMap = $xwiki.tag.getTagCount())##
330 - #if ($tagMap && $tagMap.size() > 0)##
331 - #set ($top = [])##
332 - #set ($maxCnt = 1)##
333 - #set ($minCnt = 999999)##
334 - #set ($tagCount = 0)##
335 -#foreach ($e in $collectiontool.sort($tagMap.entrySet(), ['value:desc']))##
336 - #if ($tagCount >= 40)#break#end##
337 - #if ($e.key.toLowerCase() != 'id')##
338 - #set ($discard = $top.add($e.key))##
339 - #set ($tagCount = $mathtool.add($tagCount, 1))##
340 - #if ($e.value > $maxCnt)#set ($maxCnt = $e.value)#end##
341 - #if ($e.value < $minCnt)#set ($minCnt = $e.value)#end##
342 - #end##
343 -#end##
344 - #set ($span = $mathtool.max(1, $mathtool.sub($maxCnt, $minCnt)))##
345 - #set ($alpha = $collectiontool.sort($top))##
346 - <div class="intra-tagcloud">##
347 - #foreach ($tagName in $top)##
348 - #set ($cnt = $tagMap.get($tagName))##
349 - #set ($lvl = $mathtool.round($mathtool.div($mathtool.mul($mathtool.sub($cnt, $minCnt), 4), $span)))##
350 - #set ($ord = $alpha.indexOf($tagName))##
351 - <a class="intra-tag intra-tag-l${lvl}" style="order: ${ord};"##
352 - href="$xwiki.getURL('Main.Tags', 'view', "do=viewTag&tag=$escapetool.url($tagName)")"##
353 - title="$escapetool.xml($tagName): $cnt Seiten">##
354 - <span class="intra-tag-name">$escapetool.xml($tagName)</span><span class="intra-tag-cnt">$cnt</span>##
355 - </a>##
356 - #end##
357 - </div>##
358 - #else##
359 - <div class="intra-tagcloud"><span class="intra-cal-empty">Noch keine Tags vergeben.</span></div>##
360 - #end##
361 -</div>##
362 -
363 - </div>
364 - </div>
365 - </div>
366 -
367 - </div>
368 -
369 - </div>
370 -</div>
371 -<script>
372 -(function(){
373 - var box = document.getElementById('intra-flip-side');
374 - if(!box){ return; }
375 - var hoverCapable = !!(window.matchMedia && window.matchMedia('(hover: hover)').matches);
376 -
377 - // Letzte bekannte Maus-Y-Position global mitverfolgen, um beim Betreten der Karte
378 - // die Bewegungsrichtung zu kennen (Y waechst nach unten -> "von unten" = Y wird kleiner).
379 - var lastY = null;
380 - document.addEventListener('mousemove', function(e){ lastY = e.clientY; }, {passive:true});
381 -
382 - box.addEventListener('mouseenter', function(e){
383 - if (!hoverCapable) { return; }
384 - var enteredFromBelow = (lastY !== null && (lastY - e.clientY) > 2);
385 - if (enteredFromBelow) {
386 - box.classList.toggle('is-back');
387 - }
388 - lastY = e.clientY;
389 - });
390 -
391 - box.addEventListener('click', function(e){
392 - if(e.target.closest('a')){ return; }
393 - if(hoverCapable){ return; }
394 - box.classList.toggle('is-back');
395 - });
396 -})();
397 -</script>
398 -
399 -{{/html}}
400 -{{/velocity}}
40 +AWM übernimmt für Sie und Ihre Benutzer die einfache Erstellung und Verwaltung der Daten.
41 +)))
42 +)))