Wiki-Quellcode von FORMCYCLE Hilfe


Verstecke letzte Bearbeiter
gru 3.4 1 {{info type="info"}}
gru 11.8 2 Hinweis zur Sicherheitslücke [[CVE-2022-42889>>https://nvd.nist.gov/vuln/detail/CVE-2022-42889]] in der Komponente Apache Commons Text: Die innerhalb der Bibliothek betroffene Funktionalität wird aktuell in {{formcycle/}} an keiner Stelle verwendet, weshalb {{formcycle/}} nicht von diesem Problem betroffen ist. Ab {{formcycle/}} Version 7.2.1 wird eine fehlerfreie Version der Bibliothek verwendet.
gru 11.1 3
gru 14.1 4 ==
5
gru 10.4 6 Weitere Informationen über die Sicherheitslücke [[CVE-2022-22965>>https://tanzu.vmware.com/security/cve-2022-22965]] im Spring Framework und deren Einfluss auf {{formcycle/}}-Versionen 7.0.0 bis 7.0.11 finden sich auf der Seite zu den [[Allgemeinen Sicherheitsempfehlungen>>doc:Formcycle.SystemSettings.Sicherheit.WebHome]]. Version 7.0.12 von {{formcycle/}} mit einer aktualisierten Version des Spring Frameworks steht [[steht zum Download bereit>>doc:Blog.WebHome]].
awa 10.2 7
gru 14.1 8 ==
9
awa 10.2 10 Weitere Informationen über die Sicherheitslücken [[CVE-2021-44228>>https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228]], [[CVE-2021-45046>>https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45046]], [[CVE-2021-45105>>https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45105]], and [[CVE-2021-44832>>https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44832]] in Log4J und deren Einfluss auf {{formcycle/}}-Versionen 7.0.0 bis 7.0.9 finden sich auf der Seite zu den [[Allgemeinen Sicherheitsempfehlungen>>doc:Formcycle.SystemSettings.Sicherheit.WebHome]]. Version 7.0.10 von {{formcycle/}} mit einer aktualisierten Version von Log4J [[steht zum Download bereit>>doc:Blog.WebHome]].
11 {{/info}}
12
13 {{info type="info"}}
gru 14.1 14 Die Hilfe zur neuen {{formcycle/}} Version 8 befindet sich unter: https://help8.formcycle.eu
gru 3.4 15 {{/info}}
gru 3.2 16
gru 14.1 17 {{warning}}
18 Die Downloadplatform https://customer.formcycle.eu wurde abgeschaltet. Falls Sie eine alte {{formcycle/}}-, Plugin- oder Print-Server-Version benötigen, melden Sie sich bitte im Support oder bei Ihrem Ansprechpartner und wir stellen die von Ihnen benötigte Software dann auf diesem Weg bereit.
19
gru 14.3 20 ==
21
gru 14.2 22 Die neueste Veröffentlichung der {{formcycle/}} Version 7 können Sie direkt auf der folgenden Seite herunterladen: https://help8.formcycle.eu/de/support/solutions/articles/103000357020-7-4-7
gru 14.3 23
24 ==
25
26 Aktuelle Versionen des Print-Servers befinden sich jetzt unter https://share.xima.de/s/qCLDqZjNkCgkSep und die Dokumentation dazu [[in der Hilfe der {{formcycle/}} Version 8>>https://help8.formcycle.eu/de/support/solutions/articles/103000132597-print-server]].
27 Aufgrund von diversen Sicherheitslücken in den vom Printserver verwendeten Komponenten und den verwendeten Node.js-Versionen empfehlen wir, wenn möglich keine alte, explizit für die {{formcycle/}} Version 7 entwickelte Printserver-Version (1.x, 2.x) mehr einzusetzen. Neuere Printserver-Versionen sind offiziell nur mit neueren Pluginversionen für die formcycle Version 8 und höher kompatibel, arbeiten aber in den meisten Fällen auch mit der neuesten Version des Plugins für {{formcycle/}} Version 7 ohne Probleme. Wir empfehlen, die Kompatibilität zu untersuchen und falls möglich einen aktuellen Printserver zu verwenden.
gru 14.1 28 {{/warning}}
29
30
gru 1.1 31 {{velocity}}
32 #set ($mainCards = [{
33 'iconfc': 'square-edit-outline',
34 'title': 'Formulardesigner',
gru 2.7 35 'description': 'Formulare erstellen und bearbeiten',
gru 2.6 36 'documentation': "Formcycle.Designer",
gru 2.2 37 'bgcolor': '#617496',
gru 2.3 38 'color': '#fff',
gru 2.4 39 'colordesc': '#e1e2e4'
gru 1.1 40 }, {
gru 2.1 41 'iconfc': 'workflow-fill',
gru 2.7 42 'title': 'Workflowdesigner',
gru 2.1 43 'description': 'Formulardaten verarbeiten',
gru 2.10 44 'documentation': 'Formcycle.Designer.Workflow',
gru 2.2 45 'bgcolor': '#617496',
gru 2.3 46 'color': '#fff',
gru 2.4 47 'colordesc': '#e1e2e4'
gru 2.1 48 }, {
gru 1.1 49 'iconfc': 'wrench',
50 'title': 'Verwaltung',
51 'description': 'Benutzerverwaltung, LDAP, Datenbanken, Dateien, Templates und vieles mehr',
gru 2.2 52 'documentation': 'Formcycle.UserInterface',
53 'bgcolor': '#b6c2d2',
gru 2.3 54 'color': '#2b3649',
gru 2.5 55 'colordesc': '#617496'
gru 1.1 56 }, {
57 'iconfc': 'inbox',
58 'title': 'Posteingang',
59 'description': 'Formulardaten organisieren',
gru 2.2 60 'documentation': 'Formcycle.Inbox',
61 'bgcolor': '#ffab70',
gru 2.3 62 'color': '#fff',
gru 2.8 63 'colordesc': '#fff'
gru 1.1 64 }, {
65 'icon': 'fa fa-download',
66 'title': 'Installation',
67 'description': 'FORMCYCLE installieren oder aktualisieren',
gru 2.2 68 'documentation': 'Formcycle.Installation',
69 'bgcolor': '#b6c2d2',
gru 2.3 70 'color': '#2b3649',
gru 2.5 71 'colordesc': '#617496'
gru 1.1 72 }, {
73 'iconfc': 'form',
74 'title': 'Beispiele',
75 'description': 'Beispiele für Formulareinbindungen und Formulare',
gru 2.2 76 'documentation': 'doc:Examples.WebHome',
77 'bgcolor': '#cae7df',
gru 2.3 78 'color': '#2b3649',
gru 2.5 79 'colordesc': '#617496'
XIMA Admin 5.5 80 }, {
81 'icon': 'fa fa-play-circle',
XIMA Admin 6.1 82 'title': 'Schulungsvideos und Anwendungsfälle',
83 'description': 'Kurze Videos zu den verschiedensten Themen',
XIMA Admin 7.1 84 'documentation': 'doc:Schulung.WebHome'
gru 1.1 85 }])
XIMA Admin 5.5 86
gru 1.1 87 ##}, {
88 ## 'iconfc': 'puzzle',
89 ## 'title': 'Anwendungsfälle',
90 ## 'description': 'Formulardaten verarbeiten',
91 ## 'documentation': 'doc:Anwendungsfälle.WebHome'
92 ##}, {
93
94 #set ($smallCards = [{
95 'iconfc': 'information-outline',
96 'title': 'Workshops',
97 'description': 'Workshops zu verschiedenen Themen rund um FORMCYCLE',
gru 2.2 98 'documentation': 'doc:Workshops.WebHome',
99 'bgcolor': '#b6c2d2',
100 'color': '#2b3649'
gru 1.1 101 }, {
102 'icon': 'fa fa-cloud',
103 'title': 'FORM.​CLOUD',
104 'description': 'Informationen zur XIMA FORM.CLOUD',
gru 2.2 105 'documentation': 'doc:FORMCLOUD.WebHome',
106 'bgcolor': '#b6c2d2',
107 'color': '#2b3649'
gru 1.1 108 }, {
109 'iconfc': 'action-change-status',
110 'title': 'Einbindung externer Systeme',
111 'description': 'Einbindung von FORMCYCLE in CMS/DMS-Systeme',
gru 2.2 112 'documentation': 'Formcycle.CMSExtension',
113 'bgcolor': '#b6c2d2',
114 'color': '#2b3649'
gru 1.1 115 }, {
116 'iconfc': 'puzzle',
117 'title': 'Plugin-Dokumen­tation',
118 'description': 'Dokumentation der für FORMCYCLE verfügbaren Plugins',
gru 2.2 119 'documentation': 'Formcycle.PluginDocumentation',
120 'bgcolor': '#b6c2d2',
121 'color': '#2b3649'
gru 1.1 122 }, {
123 'icon': 'fa fa-list',
124 'title': 'Release Notes',
125 'description': 'Release Notes und Download der aktuellen Version',
gru 2.2 126 'documentation': 'doc:Blog.WebHome',
127 'bgcolor': '#b6c2d2',
128 'color': '#2b3649'
gru 1.1 129 }, {
130 'iconfc': 'comment-faq-outline',
131 'title': 'Häufig gestellte Fragen',
132 'description': 'Häufig gestellte Fragen',
gru 2.2 133 'documentation': "https://faq.formcycle.eu/",
134 'bgcolor': '#b6c2d2',
135 'color': '#2b3649'
gru 1.1 136 }])
137
138 ## 'icon': 'fa fa-share-square',
139 ## 'title': 'Daten extern weiterverarbeiten',
140 ## 'description': 'Mit FORMCYCLE erfasste Daten an andere Systeme weiterleiten',
141 ## 'documentation': 'Formcycle.UserInterface.MyForms.WorkflowProcessing'
142 ##}, {
143
gru 3.14 144
gru 1.1 145
146 {{html}}
147 ##$jsontool.serialize(${mainCards})<br>
XIMA Admin 10.1 148 ##$jsontool.serialize($mainCards)<br>
gru 1.1 149 {{/html}}
150
151 {{MainMenuTiles cards='$jsontool.serialize($mainCards)' /}}
152
153
XIMA Admin 10.1 154
gru 1.1 155 {{/velocity}}
156
XIMA Admin 5.5 157 {{MainMenuTiles cards="[{~"iconfc~":~"information-outline~",~"title~":~"Workshops~",~"description~":~"Workshops zu verschiedenen Themen rund um FORMCYCLE~",~"documentation~":~"doc:Workshops.WebHome~",~"bgcolor~":~"#b6c2d2~",~"color~":~"#2b3649~"},{~"icon~":~"fa fa-cloud~",~"title~":~"FORM.​CLOUD~",~"description~":~"Informationen zur XIMA FORM.CLOUD~",~"documentation~":~"doc:FORMCLOUD.WebHome~",~"bgcolor~":~"#b6c2d2~",~"color~":~"#2b3649~"},{~"iconfc~":~"action-change-status~",~"title~":~"Einbindung externer Systeme~",~"description~":~"Einbindung von FORMCYCLE in CMS/DMS-Systeme~",~"documentation~":~"Formcycle.CMSExtension~",~"bgcolor~":~"#b6c2d2~",~"color~":~"#2b3649~"},{~"iconfc~":~"puzzle~",~"title~":~"Plugin-Dokumen­tation~",~"description~":~"Dokumentation der für FORMCYCLE verfügbaren Plugins~",~"documentation~":~"Formcycle.PluginDocumentation~",~"bgcolor~":~"#b6c2d2~",~"color~":~"#2b3649~"},{~"icon~":~"fa fa-list~",~"title~":~"Release Notes~",~"description~":~"Release Notes und Download der aktuellen Version~",~"documentation~":~"doc:Blog.WebHome~",~"bgcolor~":~"#b6c2d2~",~"color~":~"#2b3649~"},{~"iconfc~":~"comment-faq-outline~",~"title~":~"Häufig gestellte Fragen~",~"description~":~"Häufig gestellte Fragen~",~"documentation~":~"https://faq.formcycle.eu/~",~"bgcolor~":~"#b6c2d2~",~"color~":~"#2b3649~"}]" type="small"/}}
158
gru 1.1 159 {{velocity}}
160 {{html wiki="false" clean="false"}}
161
162 <style>
163 .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}
164 .jqcloud span {
165 -moz-user-select: -moz-none;
166 -khtml-user-select: none;
167 -webkit-user-select: none;
168 -ms-user-select: none;
169 user-select: none;
170 background-color: #eaeaef;
171 border-radius: 10px;
172 padding: 0px 4px 0px 4px;
173 }
174 .jqcloud span.jqHighlight {
175 color: #0cf !important;
176 }
177 .jQButton {
178 color: #fff;
179 background-color: #3480AD;/*#f0f0f3*/
180 text-align: center;
181 display: inline-block;
182 border-radius: 4px;
183 padding: 4px 10px 4px 22px;
184 font-size: 15px
185 margin: auto;
186 margin-bottom: 5px;
187 -moz-user-select: -moz-none;
188 -khtml-user-select: none;
189 -webkit-user-select: none;
190 -ms-user-select: none;
191 user-select: none;
192 }
193 .jQButton[active=false] {
194 background-color: #a7a7a7;
195 }
196 .jQButton:hover {
197 background-color: #0cf;
198 }
199 .jQButton[active=false]:hover {
200 background-color: #676767;
201 }
202 .jQButton .jQButton-icon::before {
203 font-family: "FontAwesome";
204 font-size: 14px;
205 font-weight: 400;
206 content: "\f046";
207 }
208 .jQButton[active=false] .jQButton-icon::before {
209 content: "\f096";
210 }
211 .jQButton-icon {
212 position: absolute;
213 margin-left: -11px;
214 }
215 </style>
216
217 <script>
218 require(['jquery'],function(XjQ) {
219 'use strict';
220
221 /*
222 * Plugin class
223 */
224 var jQCloud = function(element, word_array, options) {
225 this.Xelement = XjQ(element);
226
227 this.word_array = word_array || [];
228 this.options = options;
229
230 this.sizeGenerator = null;
231 this.colorGenerator = null;
232
233 // Data used internally
234 this.data = {
235 placed_words: [],
236 timeouts: {},
237 namespace: null,
238 step: null,
239 angle: null,
240 aspect_ratio: null,
241 max_weight: null,
242 min_weight: null,
243 sizes: [],
244 colors: []
245 };
246
247 this.initialize();
248 };
249
250 jQCloud.DEFAULTS = {
251 width: 100,
252 height: 100,
253 center: { x: 0.5, y: 0.5 },
254 steps: 10,
255 delay: null,
256 shape: 'elliptic',
257 classPattern: 'w{n}',
258 encodeURI: true,
259 removeOverflowing: true,
260 afterCloudRender: null,
261 autoResize: false,
262 colors: null,
263 fontSize: null,
264 template: null
265 };
266
267 jQCloud.prototype = {
268 initialize: function() {
269 // Set/Get dimensions
270 if (this.options.width) {
271 this.Xelement.width(this.options.width);
272 }
273 else {
274 this.options.width = this.Xelement.width();
275 }
276 if (this.options.height) {
277 this.Xelement.height(this.options.height);
278 }
279 else {
280 this.options.height = this.Xelement.height();
281 }
282
283 // Default options value
284 this.options = XjQ.extend(true, {}, jQCloud.DEFAULTS, this.options);
285
286 // Ensure delay
287 if (this.options.delay === null) {
288 this.options.delay = this.word_array.length > 50 ? 10 : 0;
289 }
290
291 // Backward compatibility
292 if (this.options.center.x > 1) {
293 this.options.center.x = this.options.center.x / this.options.width;
294 this.options.center.y = this.options.center.y / this.options.height;
295 }
296
297 // Create colorGenerator function from options
298 // Direct function
299 if (typeof this.options.colors == 'function') {
300 this.colorGenerator = this.options.colors;
301 }
302 // Array of sizes
303 else if (XjQ.isArray(this.options.colors)) {
304 var cl = this.options.colors.length;
305 if (cl > 0) {
306 // Fill the sizes array to X items
307 if (cl < this.options.steps) {
308 for (var i = cl; i < this.options.steps; i++) {
309 this.options.colors[i] = this.options.colors[cl - 1];
310 }
311 }
312
313 this.colorGenerator = function(weight) {
314 return this.options.colors[this.options.steps - weight];
315 };
316 }
317 }
318
319 // Create sizeGenerator function from options
320 // Direct function
321 if (typeof this.options.fontSize == 'function') {
322 this.sizeGenerator = this.options.fontSize;
323 }
324 // Object with 'from' and 'to'
325 else if (XjQ.isPlainObject(this.options.fontSize)) {
326 this.sizeGenerator = function(width, height, weight) {
327 var max = width * this.options.fontSize.from,
328 min = width * this.options.fontSize.to;
329 return Math.round(min + (max - min) * 1.0 / (this.options.steps - 1) * (weight - 1)) + 'px';
330 };
331 }
332 // Array of sizes
333 else if (XjQ.isArray(this.options.fontSize)) {
334 var sl = this.options.fontSize.length;
335 if (sl > 0) {
336 // Fill the sizes array to X items
337 if (sl < this.options.steps) {
338 for (var j = sl; j < this.options.steps; j++) {
339 this.options.fontSize[j] = this.options.fontSize[sl - 1];
340 }
341 }
342
343 this.sizeGenerator = function(width, height, weight) {
344 return this.options.fontSize[this.options.steps - weight];
345 };
346 }
347 }
348
349 this.data.angle = Math.random() * 6.28;
350 this.data.step = (this.options.shape === 'rectangular') ? 18.0 : 2.0;
351 this.data.aspect_ratio = this.options.width / this.options.height;
352 this.clearTimeouts();
353
354 // Namespace word ids to avoid collisions between multiple clouds
355 this.data.namespace = (this.Xelement.attr('id') || Math.floor((Math.random() * 1000000)).toString(36)) + '_word_';
356
357 this.Xelement.addClass('jqcloud');
358
359 // Container's CSS position cannot be 'static'
360 if (this.Xelement.css('position') === 'static') {
361 this.Xelement.css('position', 'relative');
362 }
363
364 // Delay execution so that the browser can render the page before the computatively intensive word cloud drawing
365 this.createTimeout(XjQ.proxy(this.drawWordCloud, this), 10);
366
367 // Attach window resize event
368 if (this.options.autoResize) {
369 XjQ(window).on('resize.' + this.data.namespace, throttle(this.resize, 50, this));
370 }
371 },
372
373 // Helper function to keep track of timeouts so they can be destroyed
374 createTimeout: function(callback, time) {
375 var timeout = setTimeout(XjQ.proxy(function() {
376 delete this.data.timeouts[timeout];
377 callback();
378 }, this), time);
379 this.data.timeouts[timeout] = true;
380 },
381
382 // Destroy all timeouts
383 clearTimeouts: function() {
384 XjQ.each(this.data.timeouts, function(key) {
385 clearTimeout(key);
386 });
387 this.data.timeouts = {};
388 },
389
390 // Pairwise overlap detection
391 overlapping: function(a, b) {
392 if (Math.abs(2.0 * a.left + a.width - 2.0 * b.left - b.width) < a.width + b.width) {
393 if (Math.abs(2.0 * a.top + a.height - 2.0 * b.top - b.height) < a.height + b.height) {
394 return true;
395 }
396 }
397 return false;
398 },
399
400 // Helper function to test if an element overlaps others
401 hitTest: function(elem) {
402 // Check elements for overlap one by one, stop and return false as soon as an overlap is found
403 for (var i = 0, l = this.data.placed_words.length; i < l; i++) {
404 if (this.overlapping(elem, this.data.placed_words[i])) {
405 return true;
406 }
407 }
408 return false;
409 },
410
411 // Initialize the drawing of the whole cloud
412 drawWordCloud: function() {
413 var i, l;
414
415 this.Xelement.children('[id^="' + this.data.namespace + '"]').remove();
416
417 if (this.word_array.length === 0) {
418 return;
419 }
420
421 // Make sure every weight is a number before sorting
422 for (i = 0, l = this.word_array.length; i < l; i++) {
423 this.word_array[i].weight = parseFloat(this.word_array[i].weight, 10);
424 }
425
426 // Sort word_array from the word with the highest weight to the one with the lowest
427 this.word_array.sort(function(a, b) {
428 return b.weight - a.weight;
429 });
430
431 // Kepp trace of bounds
432 this.data.max_weight = this.word_array[0].weight;
433 this.data.min_weight = this.word_array[this.word_array.length - 1].weight;
434
435 // Generate colors
436 this.data.colors = [];
437 if (this.colorGenerator) {
438 for (i = 0; i < this.options.steps; i++) {
439 this.data.colors.push(this.colorGenerator(i + 1));
440 }
441 }
442
443 // Generate font sizes
444 this.data.sizes = [];
445 if (this.sizeGenerator) {
446 for (i = 0; i < this.options.steps; i++) {
447 this.data.sizes.push(this.sizeGenerator(this.options.width, this.options.height, i + 1));
448 }
449 }
450
451 // Iterate drawOneWord on every word, immediately or with delay
452 if (this.options.delay > 0) {
453 this.drawOneWordDelayed();
454 }
455 else {
456 for (i = 0, l = this.word_array.length; i < l; i++) {
457 this.drawOneWord(i, this.word_array[i]);
458 }
459
460 if (typeof this.options.afterCloudRender === 'function') {
461 this.options.afterCloudRender.call(this.Xelement);
462 }
463 }
464 },
465
466 // Function to draw a word, by moving it in spiral until it finds a suitable empty place
467 drawOneWord: function(index, word) {
468 var word_id = this.data.namespace + index,
469 word_selector = '#' + word_id,
470
471 // option.shape == 'elliptic'
472 angle = this.data.angle,
473 radius = 0.0,
474
475 // option.shape == 'rectangular'
476 steps_in_direction = 0.0,
477 quarter_turns = 0.0,
478
479 weight = Math.floor(this.options.steps / 2),
480 word_span,
481 word_size,
482 word_style;
483
484 // Create word attr object
485 //word.attr = XjQ.extend({}, word.html, { id: word_id });
486 word.attr = XjQ.extend({}, word.html, { id: word_id, group: (word.group ? word.group : "") });
487
488 // Linearly map the original weight to a discrete scale from 1 to 10
489 // Only if weights are different
490 if (this.data.max_weight != this.data.min_weight) {
491 weight = Math.round((word.weight - this.data.min_weight) * 1.0 * (this.options.steps - 1) / (this.data.max_weight - this.data.min_weight)) + 1;
492 }
493 word_span = XjQ('<span>').attr(word.attr);
494
495 word_span.addClass('jqcloud-word');
496
497 // Apply class
498 if (this.options.classPattern) {
499 word_span.addClass(this.options.classPattern.replace('{n}', weight));
500 }
501
502 // Apply color
503 if (this.data.colors.length) {
504 word_span.css('color', this.data.colors[weight - 1]);
505 }
506
507 // Apply color from word property
508 if (word.color) {
509 word_span.css('color', word.color);
510 }
511
512 // Apply size
513 if (this.data.sizes.length) {
514 word_span.css('font-size', this.data.sizes[weight - 1]);
515 }
516
517 //Render using template function if provided.
518 if (this.options.template) {
519 word_span.html(this.options.template(word));
520 } else if (word.link) {
521 // Append link if word.link attribute was set
522 // If link is a string, then use it as the link href
523 if (typeof word.link === 'string') {
524 word.link = { href: word.link };
525 }
526
527 if (this.options.encodeURI) {
528 word.link.href = encodeURI(word.link.href).replace(/'/g, '%27');
529 }
530
531 word_span.append(XjQ('<a>').attr(word.link).text(word.text));
532 }
533 else {
534 word_span.text(word.text);
535 }
536
537 // Bind handlers to words
538 if (word.handlers) {
539 word_span.on(word.handlers);
540 }
541
542 this.Xelement.append(word_span);
543
544 word_size = {
545 width: word_span.outerWidth(),
546 height: word_span.outerHeight()
547 };
548 word_size.left = this.options.center.x * this.options.width - word_size.width / 2.0;
549 word_size.top = this.options.center.y * this.options.height - word_size.height / 2.0;
550
551 // Save a reference to the style property, for better performance
552 word_style = word_span[0].style;
553 word_style.position = 'absolute';
554 word_style.left = word_size.left + 'px';
555 word_style.top = word_size.top + 'px';
556
557 while (this.hitTest(word_size)) {
558 // option shape is 'rectangular' so move the word in a rectangular spiral
559 if (this.options.shape === 'rectangular') {
560 steps_in_direction++;
561
562 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)) {
563 steps_in_direction = 0.0;
564 quarter_turns++;
565 }
566
567 switch (quarter_turns % 4) {
568 case 1:
569 word_size.left += this.data.step * this.data.aspect_ratio + Math.random() * 2.0;
570 break;
571 case 2:
572 word_size.top -= this.data.step + Math.random() * 2.0;
573 break;
574 case 3:
575 word_size.left -= this.data.step * this.data.aspect_ratio + Math.random() * 2.0;
576 break;
577 case 0:
578 word_size.top += this.data.step + Math.random() * 2.0;
579 break;
580 }
581 }
582 // Default settings: elliptic spiral shape
583 else {
584 radius += this.data.step;
585 angle += (index % 2 === 0 ? 1 : -1) * this.data.step;
586
587 word_size.left = this.options.center.x * this.options.width - (word_size.width / 2.0) + (radius * Math.cos(angle)) * this.data.aspect_ratio;
588 word_size.top = this.options.center.y * this.options.height + radius * Math.sin(angle) - (word_size.height / 2.0);
589 }
590 word_style.left = word_size.left + 'px';
591 word_style.top = word_size.top + 'px';
592 }
593
594 // Don't render word if part of it would be outside the container
595 if (this.options.removeOverflowing && (
596 word_size.left < 0 || word_size.top < 0 ||
597 (word_size.left + word_size.width) > this.options.width ||
598 (word_size.top + word_size.height) > this.options.height
599 )
600 ) {
601 word_span.remove();
602 return;
603 }
604
605 // Save position for further usage
606 this.data.placed_words.push(word_size);
607
608 if (typeof word.afterWordRender === 'function') {
609 word.afterWordRender.call(word_span);
610 }
611 },
612
613 // Draw one word then recall the function after a delay
614 drawOneWordDelayed: function(index) {
615 index = index || 0;
616
617 // if not visible then do not attempt to draw
618 if (!this.Xelement.is(':visible')) {
619 this.createTimeout(XjQ.proxy(function() {
620 this.drawOneWordDelayed(index);
621 }, this), 10);
622
623 return;
624 }
625
626 if (index < this.word_array.length) {
627 this.drawOneWord(index, this.word_array[index]);
628
629 this.createTimeout(XjQ.proxy(function() {
630 this.drawOneWordDelayed(index + 1);
631 }, this), this.options.delay);
632 }
633 else {
634 if (typeof this.options.afterCloudRender == 'function') {
635 this.options.afterCloudRender.call(this.Xelement);
636 }
637 }
638 },
639
640 // Destroy any data and objects added by the plugin
641 destroy: function() {
642 if (this.options.autoResize) {
643 XjQ(window).off('resize.' + this.data.namespace);
644 }
645
646 this.clearTimeouts();
647 this.Xelement.removeClass('jqcloud');
648 this.Xelement.removeData('jqcloud');
649 this.Xelement.children('[id^="' + this.data.namespace + '"]').remove();
650 },
651
652 // Update the list of words
653 update: function(word_array) {
654 this.word_array = word_array;
655 this.data.placed_words = [];
656
657 this.clearTimeouts();
658 this.drawWordCloud();
659 },
660
661 resize: function() {
662 var new_size = {
663 width: this.Xelement.width(),
664 height: this.Xelement.height()
665 };
666
667 if (new_size.width != this.options.width || new_size.height != this.options.height) {
668 this.options.width = new_size.width;
669 this.options.height = new_size.height;
670 this.data.aspect_ratio = this.options.width / this.options.height;
671
672 this.update(this.word_array);
673 }
674 },
675 };
676
677 /*
678 * Apply throttling to a callback
679 * @param callback {function}
680 * @param delay {int} milliseconds
681 * @param context {object|null}
682 * @return {function}
683 */
684 function throttle(callback, delay, context) {
685 var state = {
686 pid: null,
687 last: 0
688 };
689
690 return function() {
691 var elapsed = new Date().getTime() - state.last,
692 args = arguments,
693 that = this;
694
695 function exec() {
696 state.last = new Date().getTime();
697 return callback.apply(context || that, Array.prototype.slice.call(args));
698 }
699
700 if (elapsed > delay) {
701 return exec();
702 }
703 else {
704 clearTimeout(state.pid);
705 state.pid = setTimeout(exec, delay - elapsed);
706 }
707 };
708 }
709
710 /*
711 * jQuery plugin
712 */
713 XjQ.fn.jQCloud = function(word_array, option) {
714 var args = arguments;
715
716 return this.each(function() {
717 var Xthis = XjQ(this),
718 data = Xthis.data('jqcloud');
719
720 if (!data && word_array === 'destroy') {
721 // Don't even try to initialize when called with 'destroy'
722 return;
723 }
724 if (!data) {
725 var options = typeof option === 'object' ? option : {};
726 Xthis.data('jqcloud', (data = new jQCloud(this, word_array, options)));
727 }
728 else if (typeof word_array === 'string') {
729 data[word_array].apply(data, Array.prototype.slice.call(args, 1));
730 }
731 });
732 };
733
734 XjQ.fn.jQCloud.defaults = {
735 set: function(options) {
736 XjQ.extend(true, jQCloud.DEFAULTS, options);
737 },
738 get: function(key) {
739 var options = jQCloud.DEFAULTS;
740 if (key) {
741 options = options[key];
742 }
743 return XjQ.extend(true, {}, options);
744 }
745 };
746
747 var jQwords = [
748 {text: "Druckvorschau", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
749 {text: "Link im Formular", weight: 6, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
750 {text: "Kalenderwidget anpassen", weight: 8, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
751 {text: "Optionale Daten einer Auswahl mitspeichern (col Attribute)", weight: 4, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
752 {text: "Aktion vor Absenden ausführen", weight: 5, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
753 {text: "Absenden ohne Speichern", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
754 {text: "Eigene Formularfeld-Validatoren (Regex)", weight: 10, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
755 {text: "Wiederholende Felder (dynamic) im JS adressieren", weight: 10, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
756 {text: "Events an dynamic Felder anhängen", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
757 {text: "[Richtext-Editor (Ticket #4227)]", weight: 3, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
758 {text: "Vorbelegung von Daten im Formular (extern)", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
759 {text: "intiale Vorbelegung von Daten in Feldern", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
760 {text: "Formularfelder mit LDAP-Daten vorbelegen (Ticket 3701)", weight: 3, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
761 {text: "Formulareingaben zurücksetzen", weight: 7, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
762 {text: "Formulardaten lokal speichern und später wieder laden (Ticket #3964)", weight: 8, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
763 {text: "Formular zwischenspeichern", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
764 {text: "Labeltext zur Laufzeit manipulieren (Ticket #3493)", weight: 5, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
765 {text: "Mehrfachbedingungen im Designer", weight: 7, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
766 {text: "zusätzliches JS und CSS in allen Formularen", weight: 8, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
767 {text: "mehrseitige Formulare", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
768 {text: "responive / mobile Ansicht", weight: 10, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
769 {text: "andere Schriftart einbinden / Design ändern", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
770 {text: "Java-Script API", weight: 8, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
771
772 {text: "Datenquellen für Auswahllisten hinterlegen", weight: 8, group: 'Datenquellen', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
773 {text: "Datenquellen in Auswahllisten anhand von Parametern hinterlegen", weight: 6, group: 'Datenquellen', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
774 {text: "Leerer erster Eintrag bei SQL-Datenquelle (Ticket #4068)", weight: 5, group: 'Datenquellen', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
775
776 {text: "Mehrfachbedingungen im Workflow", weight: 8, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
777 {text: "Automatisiertes Löschen nach bestimmten Zeitraum", weight: 9, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
778 {text: "Exportmöglichkeiten von Daten", weight: 6, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
779 {text: "E-Mail Aktionen abhängig von Eingaben (Bedingungen) durchführen", weight: 8, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
780 {text: "Bedingtes Einblenden von Elementen", weight: 7, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
781 {text: "Mehrstufigen Workflow (Beispiel)", weight: 8, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
782 {text: "Statuswechsel", weight: 10, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
783 {text: "Vorgangs-ID im Druck (Word-Fill) anzeigen (Ticket #3813)", weight: 5, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
784 {text: "iCal Datei erzeugen", weight: 3, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
785 {text: "aktuelles Datum in der Verarbeitung", weight: 6, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
786 {text: "Laufende Nummer aus Nummernkreis erzeugen (Ticket #3249)", weight: 3, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
787 {text: "E-Mail-Versand", weight: 10, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
788
789 {text: "Migrationsmöglichkeiten in Webseite", weight: 6, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
790 {text: "Abschlussseite in Webseite anzeigen (inline)", weight: 5, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
791 {text: "Generierte Dateien auf Abschlussseite anzeigen", weight: 7, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
792 {text: "Benutzerdefinierte Abschlussseite", weight: 9, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
793 {text: "Referenznummer (Ticket #3866)", weight: 5, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
794
795 {text: "Vorgänge löschen", weight: 9, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
796 {text: "Filtermöglichkeiten", weight: 8, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
797 {text: "Stauswechsel im Postfach ermöglichen (notwendige Einstellungen)", weight: 6.5, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
798 {text: "Postfach exportieren", weight: 7, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
799 {text: "Berechtigungen/Sichtbarkeiten für Benutzer festlegen", weight: 6, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
800
801 {text: "Update FORMCYCLE", weight: 4, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
802 {text: "Zugriffseinschränkung - Möglichkeiten", weight: 3, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
803 {text: "I-Frame automatisch Höhe anpassen", weight: 5, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
804 {text: "Daten aus Formular werden nicht gespeichert (Disablede Felder)", weight: 6, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
805 {text: "Double Opt-In", weight: 7, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/UserInterface/MyForms/DoubleOptIn/'},
806 {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/'},
807 {text: "[Tomcat Zugriff HTTPS - Zertifikat-Einrichtung (Ticket #3295)]", weight: 5, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'},
808 {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/'},
809 ];
810 ##http://mistic100.github.io/jQCloud/demo.html#handlers
811 /*XjQ('#jQArea').jQCloud(jQwords, {
812 classPattern: null,
813 colors: ["#176694", "#3480AD", "#5398c1", "#76b2d6", "#7ca2b9", "#889fad", "#8e979c", "#929596", "#babbbb"],
814 fontSize: ['16px','15px','15px','14px','14px','13px','13px','12px','12px'],
815 //width: 500,
816 height: 500
817 });*/
818
819 var jQButtons = XjQ('.jQButton');
820
821 jQButtons.click(function() {
822 if (XjQ(this).attr('active') == 'true') {
823 XjQ('#jQArea').children('span[group="'+XjQ(this).attr('group')+'"]').each(jQTagInvisible);
824 XjQ(this).attr('active', 'false');
825 } else {
826 XjQ('#jQArea').children('span[group="'+XjQ(this).attr('group')+'"]').each(jQTagVisible);
827 XjQ(this).attr('active', 'true');
828 }
829 });
830 function jQTagVisible() {
831 XjQ(this).css('display', 'block');
832 }
833 function jQTagInvisible() {
834 XjQ(this).css('display', 'none');
835 }
836
837 jQButtons.hover(function() {
838 console.log("hover",XjQ(this));
839 XjQ('#jQArea').children('span[group="'+XjQ(this).attr('group')+'"]').each(jQTagHighlighted);
840 }, function() {
841 console.log("unhover",XjQ(this));
842 XjQ('#jQArea').children('span[group="'+XjQ(this).attr('group')+'"]').each(jQTagNotHighlighted);
843 });
844 function jQTagHighlighted() {
845 XjQ(this).addClass('jqHighlight');
846 }
847 function jQTagNotHighlighted() {
848 XjQ(this).removeClass('jqHighlight');
849 }
850 });
851 </script>
852 <!--
853 <div class="row">
854 <div class="d-none d-md-block col-lg-12 card-main">
855 <div class="well" >
856 <div id="jQButtons">
857 <div id="jQBtn1" class="jQButton" group="Designer" active="true"><span class="jQButton-icon"></span>&nbsp;&nbsp;Designer</div>
858 <div id="jQBtn1" class="jQButton" group="Datenquellen" active="true"><span class="jQButton-icon"></span>&nbsp;&nbsp;Datenquellen</div>
859 <div id="jQBtn1" class="jQButton" group="Statusverarbeitung" active="true"><span class="jQButton-icon"></span>&nbsp;&nbsp;Statusverarbeitung</div>
860 <div id="jQBtn1" class="jQButton" group="Abschlusseite" active="true"><span class="jQButton-icon"></span>&nbsp;&nbsp;Abschlusseite</div>
861 <div id="jQBtn1" class="jQButton" group="Posteingang" active="true"><span class="jQButton-icon"></span>&nbsp;&nbsp;Posteingang</div>
862 <div id="jQBtn1" class="jQButton" group="Anderes" active="true"><span class="jQButton-icon"></span>&nbsp;&nbsp;Anderes</div>
863 </div>
864 <div id="jQArea">
865 </div>
866 </div>
867 </div>
868 </div>
869 -->
870 {{/html}}
871 {{/velocity}}
gru 13.1 872
873 {{velocity}}
874 {{html wiki="false" clean="false"}}
875 <style>
876 /* Overlay background */
877 #overlayv8 {
878 position: fixed;
879 top: 0;
880 left: 0;
881 width: 100%;
882 height: 100%;
883 background-color: rgba(0, 0, 0, 0.5); /* 50% transparent black */
884 display: flex;
885 justify-content: center;
886 align-items: center;
887 z-index: 1000;
888 }
889
890 /* Dialog box */
891 #dialogv8 {
gru 13.15 892 user-select: none;
gru 13.1 893 background-color: white;
894 padding: 20px;
895 border-radius: 25px;
896 max-width: 90%;
897 width: 400px;
898 box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
899 text-align: center;
gru 13.4 900 font-family: "Corporate S W01","HelveticaNeue","Helvetica Neue","HelveticaNeueRoman","HelveticaNeue-Roman","Helvetica Neue Roman",'TeXGyreHerosRegular',"Helvetica","Tahoma","Geneva","Arial",sans-serif !important;
gru 13.12 901 font-weight: 400;
gru 13.1 902 }
903
gru 13.2 904 #dialogv8 h2, #dialogv8 label {
gru 13.1 905 margin-top: 0;
gru 13.2 906 font-size: 15px;
gru 13.5 907 font-family: "Corporate S W01","HelveticaNeue","Helvetica Neue","HelveticaNeueRoman","HelveticaNeue-Roman","Helvetica Neue Roman",'TeXGyreHerosRegular',"Helvetica","Tahoma","Geneva","Arial",sans-serif !important;
gru 13.12 908 font-weight: 400;
gru 13.9 909 border-bottom: none;
gru 13.1 910 }
911
912 .dialogv8-buttons {
gru 13.11 913 margin-top: 10px;
914 padding-top: 10px;
gru 13.1 915 display: flex;
916 justify-content: space-around;
917 flex-wrap: wrap;
918 gap: 10px;
gru 13.10 919 border-top: 1px solid black;
gru 13.1 920 }
921
gru 13.17 922 .dialogv8-buttons DIV {
gru 13.18 923 padding: 7px 9px;
gru 13.3 924 font-size: 15px;
gru 13.1 925 border: none;
gru 13.3 926 border-radius: 15px;
gru 13.1 927 cursor: pointer;
928 }
gru 13.17 929 .dialogv8-buttons DIV:hover {
gru 13.16 930 opacity: 0.8;
931 cursor: pointer;
932 }
gru 13.1 933
934 .continue-button {
935 background-color: #617496;
936 color: white;
937 }
938
939 .abort-button {
940 background-color: #efefef;
941 color: black;
942 }
943
944 /* Responsive adjustments */
945 @media (max-width: 480px) {
946 #dialogv8 {
947 width: 95%;
948 padding: 15px;
949 }
950
951 .dialogv8-buttons {
952 flex-direction: column;
953 }
954
gru 13.14 955 .dialogv8-buttons DIV {
gru 13.1 956 width: 100%;
957 }
958 }
959 </style>
960
961 <div id="overlayv8" style="display: none;">
962 <div id="dialogv8">
gru 13.19 963 <h2>Die aktuelle formcycle Version ist die Version 8. Möchten Sie zur Hilfe für diese Version wechseln?</h2>
gru 13.8 964 <div>
gru 13.6 965 <input type="checkbox" id="dialogv8cb" name="dialogv8cb" value="true">
gru 13.8 966 <label for="dialogv8cb" style="margin-top: 3px;">Diese Entscheidung merken</label><br>
gru 13.6 967 </div>
gru 13.1 968 <div class="dialogv8-buttons">
gru 13.13 969 <div class="continue-button" id="continueBtn">Zur V8 Hilfe wechseln</div>
970 <div class="abort-button" id="abortBtn">In der V7 Hilfe bleiben</div>
gru 13.1 971 </div>
972 </div>
973 </div>
974
975 <script>
976 function setCookie(cname, cvalue, exdays) {
977 const d = new Date();
978 d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
979 let expires = "expires="+d.toUTCString();
gru 13.24 980 console.log("make cookie:",cname + "=" + cvalue + ";" + expires + ";path=/");
gru 13.1 981 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
982 }
983
984 function getCookie(cname) {
985 let name = cname + "=";
986 let ca = document.cookie.split(';');
987 for(let i = 0; i < ca.length; i++) {
988 let c = ca[i];
989 while (c.charAt(0) == ' ') {
990 c = c.substring(1);
991 }
992 if (c.indexOf(name) == 0) {
993 return c.substring(name.length, c.length);
994 }
995 }
996 return "";
997 }
998
999 function checkCookie() {
gru 13.22 1000 let dialogv8 = getCookie("dialogv8");
1001 console.log("cookie got",dialogv8);
gru 13.1 1002 if (dialogv8 != "") {
1003 console.log("Cookie found " + dialogv8);
gru 13.27 1004 if (dialogv8 == "true") {
1005 return true;
1006 } else {
1007 return false;
1008 }
gru 13.1 1009 }
1010 return null;
1011 }
1012
1013 // Show the overlay dialog when the page loads
1014 window.onload = function() {
1015 let cookieValue = checkCookie();
1016 console.log("checkCookie",cookieValue);
gru 13.25 1017 if (cookieValue == null) {
1018 document.getElementById("overlayv8").style.display = "flex";
gru 13.26 1019 } else if (cookieValue == true) {
gru 13.23 1020 window.location.href = "https://help8.formcycle.eu/support/home";
gru 13.1 1021 }
1022 };
1023
1024 // Redirect on continue
1025 document.getElementById("continueBtn").onclick = function() {
1026 window.location.href = "https://help8.formcycle.eu/support/home";
gru 13.21 1027 if (document.querySelector('INPUT[name="dialogv8cb"]').checked) {
gru 13.1 1028 setCookie("dialogv8", "true", 90);
1029 }
1030 };
1031
1032 // Close overlay on abort
1033 document.getElementById("abortBtn").onclick = function() {
1034 document.getElementById("overlayv8").style.display = "none";
gru 13.21 1035 if (document.querySelector('INPUT[name="dialogv8cb"]').checked) {
gru 13.1 1036 setCookie("dialogv8", "false", 90);
1037 }
1038 };
1039 </script>
1040 {{/html}}
1041 {{/velocity}}