Änderungen von Dokument Schulungsvideos


Von Version 23.1
bearbeitet von XIMA Admin
am 14.03.2022, 15:53
Änderungskommentar: Es gibt keinen Kommentar für diese Version
Auf Version 4.1
bearbeitet von XIMA Admin
am 14.03.2022, 15:04
Änderungskommentar: Es gibt keinen Kommentar für diese Version

Zusammenfassung

Details

Seiteneigenschaften
Inhalt
... ... @@ -9,786 +9,6 @@
9 9  Wenn die Übungen aller Blöcke abgeschlossen wurden, **kann** das Ergebnis (Formular mit Workflow) eingereicht werden und Sie erhalten zwei kostenfreie Supportanfragen.
10 10  
11 11  
12 -{{velocity}}
13 -#set ($mainCards = [{
14 - 'icon': 'fa fa-play-circle',
15 - 'title': 'Lektion 1',
16 - 'description': 'Erste Schritte<br>Formulardesigner',
17 - 'documentation': "Formcycle.Designer"
18 -}, {
19 - 'icon': 'fa fa-play-circle',
20 - 'title': 'Lektion 2',
21 - 'description': 'Posteingang<br>Workflowdesigner',
22 - 'documentation': 'Formcycle.Designer.Workflow',
23 - 'bgcolor': '#617496',
24 - 'color': '#fff',
25 - 'colordesc': '#e1e2e4'
26 -}, {
27 - 'icon': 'fa fa-play-circle',
28 - 'title': 'Lektion 3',
29 - 'description': 'Veröffentlichen<br>Benutzerverwaltung',
30 - 'documentation': 'Formcycle.UserInterface',
31 - 'bgcolor': '#617496',
32 - 'color': '#fff',
33 - 'colordesc': '#e1e2e4'
34 -}, {
35 - 'icon': 'fa fa-play-circle',
36 - 'title': 'Sonstiges',
37 - 'description': 'Double-Opt-In<br>Platzhalter<br>Templates<br>...',
38 - 'documentation': 'Formcycle.Inbox',
39 - 'bgcolor': '#617496',
40 - 'color': '#fff',
41 - 'colordesc': '#e1e2e4'
42 -}])
43 -
44 -## 'icon': 'fa fa-play-circle',
45 -## 'title': 'Einführungsvideos',
46 -## 'description': 'Kurze Videos zum Vorstellen einzelner FORMCYCLE-Funktionen; ggf. Titel "Schnelleinstieg"',
47 -## 'documentation': 'https://formcycle.eu/de/features'
48 -##}, {
49 -## 'iconfc': 'puzzle',
50 -## 'title': 'Anwendungsfälle',
51 -## 'description': 'Formulardaten verarbeiten',
52 -## 'documentation': 'doc:Anwendungsfälle.WebHome'
53 -##}, {
54 -
55 -
56 -
57 -## 'icon': 'fa fa-share-square',
58 -## 'title': 'Daten extern weiterverarbeiten',
59 -## 'description': 'Mit FORMCYCLE erfasste Daten an andere Systeme weiterleiten',
60 -## 'documentation': 'Formcycle.UserInterface.MyForms.WorkflowProcessing'
61 -##}, {
62 -
63 -
64 -
65 -{{html}}
66 -##$jsontool.serialize(${mainCards})<br>
67 -##$jsontool.serialize($mainCards)<br>
68 -{{/html}}
69 -
70 -{{MainMenuTiles cards='$jsontool.serialize($mainCards)' /}}
71 -
72 -{{/velocity}}
73 -
74 -
75 -
76 -
77 -{{velocity}}
78 -{{html wiki="false" clean="false"}}
79 -
80 -<style>
81 -.jqcloud{font:10px Helvetica,Arial,sans-serif;line-height:normal;overflow:hidden;position:relative}.jqcloud-word{margin:0;padding:0}.jqcloud-word.w1{color:#aab5f0;font-size:100%}.jqcloud-word.w2{color:#9ce;font-size:150%}.jqcloud-word.w3{color:#a0ddff;font-size:200%}.jqcloud-word.w4{color:#90c5f0;font-size:250%}.jqcloud-word.w5{color:#90a0dd;font-size:300%}.jqcloud-word.w6{color:#90c5f0;font-size:350%}.jqcloud-word.w7{color:#39d;font-size:400%}.jqcloud-word.w8{color:#0cf;font-size:450%}.jqcloud-word.w9{color:#0cf;font-size:500%}.jqcloud-word.w10{color:#0cf;font-size:550%}.jqcloud-word a{color:inherit;font-size:inherit;text-decoration:none}.jqcloud-word a:hover{color:#0cf}
82 -.jqcloud span {
83 - -moz-user-select: -moz-none;
84 - -khtml-user-select: none;
85 - -webkit-user-select: none;
86 - -ms-user-select: none;
87 - user-select: none;
88 - background-color: #eaeaef;
89 - border-radius: 10px;
90 - padding: 0px 4px 0px 4px;
91 -}
92 -.jqcloud span.jqHighlight {
93 - color: #0cf !important;
94 -}
95 -.jQButton {
96 - color: #fff;
97 - background-color: #3480AD;/*#f0f0f3*/
98 - text-align: center;
99 - display: inline-block;
100 - border-radius: 4px;
101 - padding: 4px 10px 4px 22px;
102 - font-size: 15px
103 - margin: auto;
104 - margin-bottom: 5px;
105 - -moz-user-select: -moz-none;
106 - -khtml-user-select: none;
107 - -webkit-user-select: none;
108 - -ms-user-select: none;
109 - user-select: none;
110 -}
111 -.jQButton[active=false] {
112 - background-color: #a7a7a7;
113 -}
114 -.jQButton:hover {
115 - background-color: #0cf;
116 -}
117 -.jQButton[active=false]:hover {
118 - background-color: #676767;
119 -}
120 -.jQButton .jQButton-icon::before {
121 - font-family: "FontAwesome";
122 - font-size: 14px;
123 - font-weight: 400;
124 - content: "\f046";
125 -}
126 -.jQButton[active=false] .jQButton-icon::before {
127 - content: "\f096";
128 -}
129 -.jQButton-icon {
130 - position: absolute;
131 - margin-left: -11px;
132 -}
133 -</style>
134 -
135 -<script>
136 -require(['jquery'],function(XjQ) {
137 -'use strict';
138 -
139 -/*
140 - * Plugin class
141 - */
142 -var jQCloud = function(element, word_array, options) {
143 - this.Xelement = XjQ(element);
144 -
145 - this.word_array = word_array || [];
146 - this.options = options;
147 -
148 - this.sizeGenerator = null;
149 - this.colorGenerator = null;
150 -
151 - // Data used internally
152 - this.data = {
153 - placed_words: [],
154 - timeouts: {},
155 - namespace: null,
156 - step: null,
157 - angle: null,
158 - aspect_ratio: null,
159 - max_weight: null,
160 - min_weight: null,
161 - sizes: [],
162 - colors: []
163 - };
164 -
165 - this.initialize();
166 -};
167 -
168 -jQCloud.DEFAULTS = {
169 - width: 100,
170 - height: 100,
171 - center: { x: 0.5, y: 0.5 },
172 - steps: 10,
173 - delay: null,
174 - shape: 'elliptic',
175 - classPattern: 'w{n}',
176 - encodeURI: true,
177 - removeOverflowing: true,
178 - afterCloudRender: null,
179 - autoResize: false,
180 - colors: null,
181 - fontSize: null,
182 - template: null
183 -};
184 -
185 -jQCloud.prototype = {
186 - initialize: function() {
187 - // Set/Get dimensions
188 - if (this.options.width) {
189 - this.Xelement.width(this.options.width);
190 - }
191 - else {
192 - this.options.width = this.Xelement.width();
193 - }
194 - if (this.options.height) {
195 - this.Xelement.height(this.options.height);
196 - }
197 - else {
198 - this.options.height = this.Xelement.height();
199 - }
200 -
201 - // Default options value
202 - this.options = XjQ.extend(true, {}, jQCloud.DEFAULTS, this.options);
203 -
204 - // Ensure delay
205 - if (this.options.delay === null) {
206 - this.options.delay = this.word_array.length > 50 ? 10 : 0;
207 - }
208 -
209 - // Backward compatibility
210 - if (this.options.center.x > 1) {
211 - this.options.center.x = this.options.center.x / this.options.width;
212 - this.options.center.y = this.options.center.y / this.options.height;
213 - }
214 -
215 - // Create colorGenerator function from options
216 - // Direct function
217 - if (typeof this.options.colors == 'function') {
218 - this.colorGenerator = this.options.colors;
219 - }
220 - // Array of sizes
221 - else if (XjQ.isArray(this.options.colors)) {
222 - var cl = this.options.colors.length;
223 - if (cl > 0) {
224 - // Fill the sizes array to X items
225 - if (cl < this.options.steps) {
226 - for (var i = cl; i < this.options.steps; i++) {
227 - this.options.colors[i] = this.options.colors[cl - 1];
228 - }
229 - }
230 -
231 - this.colorGenerator = function(weight) {
232 - return this.options.colors[this.options.steps - weight];
233 - };
234 - }
235 - }
236 -
237 - // Create sizeGenerator function from options
238 - // Direct function
239 - if (typeof this.options.fontSize == 'function') {
240 - this.sizeGenerator = this.options.fontSize;
241 - }
242 - // Object with 'from' and 'to'
243 - else if (XjQ.isPlainObject(this.options.fontSize)) {
244 - this.sizeGenerator = function(width, height, weight) {
245 - var max = width * this.options.fontSize.from,
246 - min = width * this.options.fontSize.to;
247 - return Math.round(min + (max - min) * 1.0 / (this.options.steps - 1) * (weight - 1)) + 'px';
248 - };
249 - }
250 - // Array of sizes
251 - else if (XjQ.isArray(this.options.fontSize)) {
252 - var sl = this.options.fontSize.length;
253 - if (sl > 0) {
254 - // Fill the sizes array to X items
255 - if (sl < this.options.steps) {
256 - for (var j = sl; j < this.options.steps; j++) {
257 - this.options.fontSize[j] = this.options.fontSize[sl - 1];
258 - }
259 - }
260 -
261 - this.sizeGenerator = function(width, height, weight) {
262 - return this.options.fontSize[this.options.steps - weight];
263 - };
264 - }
265 - }
266 -
267 - this.data.angle = Math.random() * 6.28;
268 - this.data.step = (this.options.shape === 'rectangular') ? 18.0 : 2.0;
269 - this.data.aspect_ratio = this.options.width / this.options.height;
270 - this.clearTimeouts();
271 -
272 - // Namespace word ids to avoid collisions between multiple clouds
273 - this.data.namespace = (this.Xelement.attr('id') || Math.floor((Math.random() * 1000000)).toString(36)) + '_word_';
274 -
275 - this.Xelement.addClass('jqcloud');
276 -
277 - // Container's CSS position cannot be 'static'
278 - if (this.Xelement.css('position') === 'static') {
279 - this.Xelement.css('position', 'relative');
280 - }
281 -
282 - // Delay execution so that the browser can render the page before the computatively intensive word cloud drawing
283 - this.createTimeout(XjQ.proxy(this.drawWordCloud, this), 10);
284 -
285 - // Attach window resize event
286 - if (this.options.autoResize) {
287 - XjQ(window).on('resize.' + this.data.namespace, throttle(this.resize, 50, this));
288 - }
289 - },
290 -
291 - // Helper function to keep track of timeouts so they can be destroyed
292 - createTimeout: function(callback, time) {
293 - var timeout = setTimeout(XjQ.proxy(function() {
294 - delete this.data.timeouts[timeout];
295 - callback();
296 - }, this), time);
297 - this.data.timeouts[timeout] = true;
298 - },
299 -
300 - // Destroy all timeouts
301 - clearTimeouts: function() {
302 - XjQ.each(this.data.timeouts, function(key) {
303 - clearTimeout(key);
304 - });
305 - this.data.timeouts = {};
306 - },
307 -
308 - // Pairwise overlap detection
309 - overlapping: function(a, b) {
310 - if (Math.abs(2.0 * a.left + a.width - 2.0 * b.left - b.width) < a.width + b.width) {
311 - if (Math.abs(2.0 * a.top + a.height - 2.0 * b.top - b.height) < a.height + b.height) {
312 - return true;
313 - }
314 - }
315 - return false;
316 - },
317 -
318 - // Helper function to test if an element overlaps others
319 - hitTest: function(elem) {
320 - // Check elements for overlap one by one, stop and return false as soon as an overlap is found
321 - for (var i = 0, l = this.data.placed_words.length; i < l; i++) {
322 - if (this.overlapping(elem, this.data.placed_words[i])) {
323 - return true;
324 - }
325 - }
326 - return false;
327 - },
328 -
329 - // Initialize the drawing of the whole cloud
330 - drawWordCloud: function() {
331 - var i, l;
332 -
333 - this.Xelement.children('[id^="' + this.data.namespace + '"]').remove();
334 -
335 - if (this.word_array.length === 0) {
336 - return;
337 - }
338 -
339 - // Make sure every weight is a number before sorting
340 - for (i = 0, l = this.word_array.length; i < l; i++) {
341 - this.word_array[i].weight = parseFloat(this.word_array[i].weight, 10);
342 - }
343 -
344 - // Sort word_array from the word with the highest weight to the one with the lowest
345 - this.word_array.sort(function(a, b) {
346 - return b.weight - a.weight;
347 - });
348 -
349 - // Kepp trace of bounds
350 - this.data.max_weight = this.word_array[0].weight;
351 - this.data.min_weight = this.word_array[this.word_array.length - 1].weight;
352 -
353 - // Generate colors
354 - this.data.colors = [];
355 - if (this.colorGenerator) {
356 - for (i = 0; i < this.options.steps; i++) {
357 - this.data.colors.push(this.colorGenerator(i + 1));
358 - }
359 - }
360 -
361 - // Generate font sizes
362 - this.data.sizes = [];
363 - if (this.sizeGenerator) {
364 - for (i = 0; i < this.options.steps; i++) {
365 - this.data.sizes.push(this.sizeGenerator(this.options.width, this.options.height, i + 1));
366 - }
367 - }
368 -
369 - // Iterate drawOneWord on every word, immediately or with delay
370 - if (this.options.delay > 0) {
371 - this.drawOneWordDelayed();
372 - }
373 - else {
374 - for (i = 0, l = this.word_array.length; i < l; i++) {
375 - this.drawOneWord(i, this.word_array[i]);
376 - }
377 -
378 - if (typeof this.options.afterCloudRender === 'function') {
379 - this.options.afterCloudRender.call(this.Xelement);
380 - }
381 - }
382 - },
383 -
384 - // Function to draw a word, by moving it in spiral until it finds a suitable empty place
385 - drawOneWord: function(index, word) {
386 - var word_id = this.data.namespace + index,
387 - word_selector = '#' + word_id,
388 -
389 - // option.shape == 'elliptic'
390 - angle = this.data.angle,
391 - radius = 0.0,
392 -
393 - // option.shape == 'rectangular'
394 - steps_in_direction = 0.0,
395 - quarter_turns = 0.0,
396 -
397 - weight = Math.floor(this.options.steps / 2),
398 - word_span,
399 - word_size,
400 - word_style;
401 -
402 - // Create word attr object
403 - //word.attr = XjQ.extend({}, word.html, { id: word_id });
404 - word.attr = XjQ.extend({}, word.html, { id: word_id, group: (word.group ? word.group : "") });
405 -
406 - // Linearly map the original weight to a discrete scale from 1 to 10
407 - // Only if weights are different
408 - if (this.data.max_weight != this.data.min_weight) {
409 - weight = Math.round((word.weight - this.data.min_weight) * 1.0 * (this.options.steps - 1) / (this.data.max_weight - this.data.min_weight)) + 1;
410 - }
411 - word_span = XjQ('<span>').attr(word.attr);
412 -
413 - word_span.addClass('jqcloud-word');
414 -
415 - // Apply class
416 - if (this.options.classPattern) {
417 - word_span.addClass(this.options.classPattern.replace('{n}', weight));
418 - }
419 -
420 - // Apply color
421 - if (this.data.colors.length) {
422 - word_span.css('color', this.data.colors[weight - 1]);
423 - }
424 -
425 - // Apply color from word property
426 - if (word.color) {
427 - word_span.css('color', word.color);
428 - }
429 -
430 - // Apply size
431 - if (this.data.sizes.length) {
432 - word_span.css('font-size', this.data.sizes[weight - 1]);
433 - }
434 -
435 - //Render using template function if provided.
436 - if (this.options.template) {
437 - word_span.html(this.options.template(word));
438 - } else if (word.link) {
439 - // Append link if word.link attribute was set
440 - // If link is a string, then use it as the link href
441 - if (typeof word.link === 'string') {
442 - word.link = { href: word.link };
443 - }
444 -
445 - if (this.options.encodeURI) {
446 - word.link.href = encodeURI(word.link.href).replace(/'/g, '%27');
447 - }
448 -
449 - word_span.append(XjQ('<a>').attr(word.link).text(word.text));
450 - }
451 - else {
452 - word_span.text(word.text);
453 - }
454 -
455 - // Bind handlers to words
456 - if (word.handlers) {
457 - word_span.on(word.handlers);
458 - }
459 -
460 - this.Xelement.append(word_span);
461 -
462 - word_size = {
463 - width: word_span.outerWidth(),
464 - height: word_span.outerHeight()
465 - };
466 - word_size.left = this.options.center.x * this.options.width - word_size.width / 2.0;
467 - word_size.top = this.options.center.y * this.options.height - word_size.height / 2.0;
468 -
469 - // Save a reference to the style property, for better performance
470 - word_style = word_span[0].style;
471 - word_style.position = 'absolute';
472 - word_style.left = word_size.left + 'px';
473 - word_style.top = word_size.top + 'px';
474 -
475 - while (this.hitTest(word_size)) {
476 - // option shape is 'rectangular' so move the word in a rectangular spiral
477 - if (this.options.shape === 'rectangular') {
478 - steps_in_direction++;
479 -
480 - if (steps_in_direction * this.data.step > (1 + Math.floor(quarter_turns / 2.0)) * this.data.step * ((quarter_turns % 4 % 2) === 0 ? 1 : this.data.aspect_ratio)) {
481 - steps_in_direction = 0.0;
482 - quarter_turns++;
483 - }
484 -
485 - switch (quarter_turns % 4) {
486 - case 1:
487 - word_size.left += this.data.step * this.data.aspect_ratio + Math.random() * 2.0;
488 - break;
489 - case 2:
490 - word_size.top -= this.data.step + Math.random() * 2.0;
491 - break;
492 - case 3:
493 - word_size.left -= this.data.step * this.data.aspect_ratio + Math.random() * 2.0;
494 - break;
495 - case 0:
496 - word_size.top += this.data.step + Math.random() * 2.0;
497 - break;
498 - }
499 - }
500 - // Default settings: elliptic spiral shape
501 - else {
502 - radius += this.data.step;
503 - angle += (index % 2 === 0 ? 1 : -1) * this.data.step;
504 -
505 - word_size.left = this.options.center.x * this.options.width - (word_size.width / 2.0) + (radius * Math.cos(angle)) * this.data.aspect_ratio;
506 - word_size.top = this.options.center.y * this.options.height + radius * Math.sin(angle) - (word_size.height / 2.0);
507 - }
508 - word_style.left = word_size.left + 'px';
509 - word_style.top = word_size.top + 'px';
510 - }
511 -
512 - // Don't render word if part of it would be outside the container
513 - if (this.options.removeOverflowing && (
514 - word_size.left < 0 || word_size.top < 0 ||
515 - (word_size.left + word_size.width) > this.options.width ||
516 - (word_size.top + word_size.height) > this.options.height
517 - )
518 - ) {
519 - word_span.remove();
520 - return;
521 - }
522 -
523 - // Save position for further usage
524 - this.data.placed_words.push(word_size);
525 -
526 - if (typeof word.afterWordRender === 'function') {
527 - word.afterWordRender.call(word_span);
528 - }
529 - },
530 -
531 - // Draw one word then recall the function after a delay
532 - drawOneWordDelayed: function(index) {
533 - index = index || 0;
534 -
535 - // if not visible then do not attempt to draw
536 - if (!this.Xelement.is(':visible')) {
537 - this.createTimeout(XjQ.proxy(function() {
538 - this.drawOneWordDelayed(index);
539 - }, this), 10);
540 -
541 - return;
542 - }
543 -
544 - if (index < this.word_array.length) {
545 - this.drawOneWord(index, this.word_array[index]);
546 -
547 - this.createTimeout(XjQ.proxy(function() {
548 - this.drawOneWordDelayed(index + 1);
549 - }, this), this.options.delay);
550 - }
551 - else {
552 - if (typeof this.options.afterCloudRender == 'function') {
553 - this.options.afterCloudRender.call(this.Xelement);
554 - }
555 - }
556 - },
557 -
558 - // Destroy any data and objects added by the plugin
559 - destroy: function() {
560 - if (this.options.autoResize) {
561 - XjQ(window).off('resize.' + this.data.namespace);
562 - }
563 -
564 - this.clearTimeouts();
565 - this.Xelement.removeClass('jqcloud');
566 - this.Xelement.removeData('jqcloud');
567 - this.Xelement.children('[id^="' + this.data.namespace + '"]').remove();
568 - },
569 -
570 - // Update the list of words
571 - update: function(word_array) {
572 - this.word_array = word_array;
573 - this.data.placed_words = [];
574 -
575 - this.clearTimeouts();
576 - this.drawWordCloud();
577 - },
578 -
579 - resize: function() {
580 - var new_size = {
581 - width: this.Xelement.width(),
582 - height: this.Xelement.height()
583 - };
584 -
585 - if (new_size.width != this.options.width || new_size.height != this.options.height) {
586 - this.options.width = new_size.width;
587 - this.options.height = new_size.height;
588 - this.data.aspect_ratio = this.options.width / this.options.height;
589 -
590 - this.update(this.word_array);
591 - }
592 - },
593 -};
594 -
595 -/*
596 - * Apply throttling to a callback
597 - * @param callback {function}
598 - * @param delay {int} milliseconds
599 - * @param context {object|null}
600 - * @return {function}
601 - */
602 -function throttle(callback, delay, context) {
603 - var state = {
604 - pid: null,
605 - last: 0
606 - };
607 -
608 - return function() {
609 - var elapsed = new Date().getTime() - state.last,
610 - args = arguments,
611 - that = this;
612 -
613 - function exec() {
614 - state.last = new Date().getTime();
615 - return callback.apply(context || that, Array.prototype.slice.call(args));
616 - }
617 -
618 - if (elapsed > delay) {
619 - return exec();
620 - }
621 - else {
622 - clearTimeout(state.pid);
623 - state.pid = setTimeout(exec, delay - elapsed);
624 - }
625 - };
626 -}
627 -
628 -/*
629 - * jQuery plugin
630 - */
631 -XjQ.fn.jQCloud = function(word_array, option) {
632 - var args = arguments;
633 -
634 - return this.each(function() {
635 - var Xthis = XjQ(this),
636 - data = Xthis.data('jqcloud');
637 -
638 - if (!data && word_array === 'destroy') {
639 - // Don't even try to initialize when called with 'destroy'
640 - return;
641 - }
642 - if (!data) {
643 - var options = typeof option === 'object' ? option : {};
644 - Xthis.data('jqcloud', (data = new jQCloud(this, word_array, options)));
645 - }
646 - else if (typeof word_array === 'string') {
647 - data[word_array].apply(data, Array.prototype.slice.call(args, 1));
648 - }
649 - });
650 -};
651 -
652 -XjQ.fn.jQCloud.defaults = {
653 - set: function(options) {
654 - XjQ.extend(true, jQCloud.DEFAULTS, options);
655 - },
656 - get: function(key) {
657 - var options = jQCloud.DEFAULTS;
658 - if (key) {
659 - options = options[key];
660 - }
661 - return XjQ.extend(true, {}, options);
662 - }
663 -};
664 -
665 -var jQwords = [
666 - {text: "Druckvorschau", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
667 - {text: "Link im Formular", weight: 6, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
668 - {text: "Kalenderwidget anpassen", weight: 8, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
669 - {text: "Optionale Daten einer Auswahl mitspeichern (col Attribute)", weight: 4, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
670 - {text: "Aktion vor Absenden ausführen", weight: 5, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
671 - {text: "Absenden ohne Speichern", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
672 - {text: "Eigene Formularfeld-Validatoren (Regex)", weight: 10, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
673 - {text: "Wiederholende Felder (dynamic) im JS adressieren", weight: 10, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
674 - {text: "Events an dynamic Felder anhängen", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
675 - {text: "[Richtext-Editor (Ticket #4227)]", weight: 3, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
676 - {text: "Vorbelegung von Daten im Formular (extern)", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
677 - {text: "intiale Vorbelegung von Daten in Feldern", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
678 - {text: "Formularfelder mit LDAP-Daten vorbelegen (Ticket 3701)", weight: 3, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
679 - {text: "Formulareingaben zurücksetzen", weight: 7, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
680 - {text: "Formulardaten lokal speichern und später wieder laden (Ticket #3964)", weight: 8, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
681 - {text: "Formular zwischenspeichern", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
682 - {text: "Labeltext zur Laufzeit manipulieren (Ticket #3493)", weight: 5, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
683 - {text: "Mehrfachbedingungen im Designer", weight: 7, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
684 - {text: "zusätzliches JS und CSS in allen Formularen", weight: 8, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
685 - {text: "mehrseitige Formulare", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
686 - {text: "responive / mobile Ansicht", weight: 10, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
687 - {text: "andere Schriftart einbinden / Design ändern", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
688 - {text: "Java-Script API", weight: 8, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
689 -
690 - {text: "Datenquellen für Auswahllisten hinterlegen", weight: 8, group: 'Datenquellen', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
691 - {text: "Datenquellen in Auswahllisten anhand von Parametern hinterlegen", weight: 6, group: 'Datenquellen', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
692 - {text: "Leerer erster Eintrag bei SQL-Datenquelle (Ticket #4068)", weight: 5, group: 'Datenquellen', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
693 -
694 - {text: "Mehrfachbedingungen im Workflow", weight: 8, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
695 - {text: "Automatisiertes Löschen nach bestimmten Zeitraum", weight: 9, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
696 - {text: "Exportmöglichkeiten von Daten", weight: 6, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
697 - {text: "E-Mail Aktionen abhängig von Eingaben (Bedingungen) durchführen", weight: 8, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
698 - {text: "Bedingtes Einblenden von Elementen", weight: 7, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
699 - {text: "Mehrstufigen Workflow (Beispiel)", weight: 8, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
700 - {text: "Statuswechsel", weight: 10, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
701 - {text: "Vorgangs-ID im Druck (Word-Fill) anzeigen (Ticket #3813)", weight: 5, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
702 - {text: "iCal Datei erzeugen", weight: 3, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
703 - {text: "aktuelles Datum in der Verarbeitung", weight: 6, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
704 - {text: "Laufende Nummer aus Nummernkreis erzeugen (Ticket #3249)", weight: 3, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
705 - {text: "E-Mail-Versand", weight: 10, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
706 -
707 - {text: "Migrationsmöglichkeiten in Webseite", weight: 6, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
708 - {text: "Abschlussseite in Webseite anzeigen (inline)", weight: 5, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
709 - {text: "Generierte Dateien auf Abschlussseite anzeigen", weight: 7, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
710 - {text: "Benutzerdefinierte Abschlussseite", weight: 9, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
711 - {text: "Referenznummer (Ticket #3866)", weight: 5, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
712 -
713 - {text: "Vorgänge löschen", weight: 9, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
714 - {text: "Filtermöglichkeiten", weight: 8, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
715 - {text: "Stauswechsel im Postfach ermöglichen (notwendige Einstellungen)", weight: 6.5, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
716 - {text: "Postfach exportieren", weight: 7, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
717 - {text: "Berechtigungen/Sichtbarkeiten für Benutzer festlegen", weight: 6, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
718 -
719 - {text: "Update FORMCYCLE", weight: 4, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
720 - {text: "Zugriffseinschränkung - Möglichkeiten", weight: 3, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
721 - {text: "I-Frame automatisch Höhe anpassen", weight: 5, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
722 - {text: "Daten aus Formular werden nicht gespeichert (Disablede Felder)", weight: 6, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
723 - {text: "Double Opt-In", weight: 7, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/UserInterface/MyForms/DoubleOptIn/'},
724 - {text: "[Übersicht von Lösungen bei Problemen mit z.B. DB (Ticket #3714, #3057)]", weight: 6, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
725 - {text: "[Tomcat Zugriff HTTPS - Zertifikat-Einrichtung (Ticket #3295)]", weight: 5, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
726 - {text: "Beispiele für Print CSS / Erläuterung was das PDF Print Plugin macht", weight: 7, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
727 -];
728 -##http://mistic100.github.io/jQCloud/demo.html#handlers
729 -/*XjQ('#jQArea').jQCloud(jQwords, {
730 - classPattern: null,
731 - colors: ["#176694", "#3480AD", "#5398c1", "#76b2d6", "#7ca2b9", "#889fad", "#8e979c", "#929596", "#babbbb"],
732 - fontSize: ['16px','15px','15px','14px','14px','13px','13px','12px','12px'],
733 - //width: 500,
734 - height: 500
735 -});*/
736 -
737 -var jQButtons = XjQ('.jQButton');
738 -
739 -jQButtons.click(function() {
740 - if (XjQ(this).attr('active') == 'true') {
741 - XjQ('#jQArea').children('span[group="'+XjQ(this).attr('group')+'"]').each(jQTagInvisible);
742 - XjQ(this).attr('active', 'false');
743 - } else {
744 - XjQ('#jQArea').children('span[group="'+XjQ(this).attr('group')+'"]').each(jQTagVisible);
745 - XjQ(this).attr('active', 'true');
746 - }
747 -});
748 -function jQTagVisible() {
749 - XjQ(this).css('display', 'block');
750 -}
751 -function jQTagInvisible() {
752 - XjQ(this).css('display', 'none');
753 -}
754 -
755 -jQButtons.hover(function() {
756 - console.log("hover",XjQ(this));
757 - XjQ('#jQArea').children('span[group="'+XjQ(this).attr('group')+'"]').each(jQTagHighlighted);
758 -}, function() {
759 - console.log("unhover",XjQ(this));
760 - XjQ('#jQArea').children('span[group="'+XjQ(this).attr('group')+'"]').each(jQTagNotHighlighted);
761 -});
762 -function jQTagHighlighted() {
763 - XjQ(this).addClass('jqHighlight');
764 -}
765 -function jQTagNotHighlighted() {
766 - XjQ(this).removeClass('jqHighlight');
767 -}
768 -});
769 -</script>
770 -<!--
771 -<div class="row">
772 - <div class="d-none d-md-block col-lg-12 card-main">
773 - <div class="well" >
774 - <div id="jQButtons">
775 - <div id="jQBtn1" class="jQButton" group="Designer" active="true"><span class="jQButton-icon"></span>&nbsp;&nbsp;Designer</div>
776 - <div id="jQBtn1" class="jQButton" group="Datenquellen" active="true"><span class="jQButton-icon"></span>&nbsp;&nbsp;Datenquellen</div>
777 - <div id="jQBtn1" class="jQButton" group="Statusverarbeitung" active="true"><span class="jQButton-icon"></span>&nbsp;&nbsp;Statusverarbeitung</div>
778 - <div id="jQBtn1" class="jQButton" group="Abschlusseite" active="true"><span class="jQButton-icon"></span>&nbsp;&nbsp;Abschlusseite</div>
779 - <div id="jQBtn1" class="jQButton" group="Posteingang" active="true"><span class="jQButton-icon"></span>&nbsp;&nbsp;Posteingang</div>
780 - <div id="jQBtn1" class="jQButton" group="Anderes" active="true"><span class="jQButton-icon"></span>&nbsp;&nbsp;Anderes</div>
781 - </div>
782 - <div id="jQArea">
783 - </div>
784 - </div>
785 - </div>
786 -</div>
787 --->
788 -{{/html}}
789 -{{/velocity}}
790 -
791 -
792 792  === Kleine FAQ ===
793 793  
794 794  Muss man die Übungen machen?
... ... @@ -806,11 +806,4 @@
806 806  Was kostet die Übung?
807 807  //Nichts!//
808 808  
809 -
810 -Kann man auch durchfallen?
811 -//Ja. Um die kostenfreien Support-Tickets zu erhalten möchten wir sicherstellen, dass Sie die Grundlagen beherrschen.//
812 -
813 -
814 -Die Schulungsvideos sind gut, aber bieten Sie aber trotzdem noch aufbauende Schulungen/Workshops an?
815 -
816 -//Ja. Kontaktieren Sie uns. //
29 +