Änderungen von Dokument FORMCYCLE Hilfe
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Zusammenfassung
-
Seiteneigenschaften (3 geändert, 0 hinzugefügt, 0 gelöscht)
-
Objekte (0 geändert, 4 hinzugefügt, 0 gelöscht)
Details
- Seiteneigenschaften
-
- Titel
-
... ... @@ -1,1 +1,1 @@ 1 - TechnischeHilfe1 +FORMCYCLE Hilfe - Dokument-Autor
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. ximaadmin1 +XWiki.gru - Inhalt
-
... ... @@ -1,124 +1,783 @@ 1 -{{include reference="Help.Code.VelocityMacros"/}} 2 - 3 -{{velocity output="false"}} 4 -#macro (display4Cards $cards) 5 - <div class="row"> 6 - #foreach ($card in $cards) 7 - ## See http://getbootstrap.com/css/#grid-responsive-resets . 8 - #if ($foreach.index > 0 && $foreach.index % 2 == 0) 9 - <div class="clearfix visible-sm-block "></div> 10 - #end 11 - #if ($foreach.index > 0 && $foreach.index % 3 == 0) 12 - <div class="clearfix visible-md-block"></div> 13 - #end 14 - #if ($foreach.index > 0 && $foreach.index % 4 == 0) 15 - <div class="clearfix visible-lg-block"></div> 16 - #end 17 - <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> 18 - #helpExampleCard($card) 19 - </div> 20 - #end 21 - </div> 22 -#end 23 - 24 -#set ($howToCards = [{ 25 - 'icon': 'fa fa-support', 26 - 'title': 'Getting Started', 27 - 'description': 'Easy steps to get you started with XWiki.', 28 - 'documentation': "http://enterprise.xwiki.org/xwiki/bin/view/GettingStarted/WebHome?version=$escapetool.url($xwiki.version)" 1 +{{velocity}} 2 +#set ($mainCards = [{ 3 + 'iconfc': 'square-edit-outline', 4 + 'title': 'Formulardesigner', 5 + 'description': 'Arbeiten mit dem Formulardesigner', 6 + 'documentation': "Formcycle.FormDesigner" 29 29 }, { 8 + 'iconfc': 'wrench', 9 + 'title': 'Verwaltung', 10 + 'description': 'Benutzerverwaltung, LDAP, Datenbanken, Dateien, Templates und vieles mehr', 11 + 'documentation': 'Formcycle.UserInterface' 12 +}, { 13 + 'iconfc': 'inbox', 14 + 'title': 'Posteingang', 15 + 'description': 'Formulardaten organisieren', 16 + 'documentation': 'Formcycle.Inbox' 17 +}, { 18 + 'iconfc': 'workflow-fill', 19 + 'title': 'Workflow', 20 + 'description': 'Formulardaten verarbeiten', 21 + 'documentation': 'Formcycle.UserInterface.MyForms.WorkflowProcessing' 22 +}, { 30 30 'icon': 'fa fa-play-circle', 31 - 'title': 'Videos', 32 - 'description': 'View our collection of video tutorials.', 33 - 'documentation': 'Help.Videos.WebHome' 24 + 'title': 'Einführungsvideos', 25 + 'description': 'Kurze Videos zum Vorstellen einzelner FORMCYCLE-Funktionen; ggf. Titel "Schnelleinstieg"', 26 + 'documentation': 'Formcycle.UserInterface.MyForms.WorkflowProcessing' 27 +}, { 28 + 'iconfc': 'puzzle', 29 + 'title': 'Tutorials', 30 + 'description': 'Formulardaten verarbeiten', 31 + 'documentation': 'Formcycle.UserInterface.MyForms.WorkflowProcessing' 32 +}, { 33 + 'iconfc': 'form', 34 + 'title': 'Beispiele', 35 + 'description': 'Beispiele für Formulareinbindungen und Formulare', 36 + 'documentation': 'Formcycle.UserInterface.MyForms.WorkflowProcessing' 37 +}, { 38 + 'iconfc': 'comment-question-outline', 39 + 'title': 'FAQ', 40 + 'description': 'Häufig gestellte Fragen', 41 + 'documentation': 'Formcycle.UserInterface.MyForms.WorkflowProcessing' 34 34 }]) 35 35 36 -#if ($xwiki.exists('Help.History.WebHome')) 37 - #set ($historyURL = $xwiki.getURL('Help.History.WebHome', 'view', $NULL, 'History')) 38 -#else 39 - ## We need to generate the page history because the Extension Manager doesn't import it. 40 - #set ($historyURL = $xwiki.getURL('Help.History.WebHome', 'save', $escapetool.url({ 41 - 'content': 'Check', 42 - 'comment': 'Initial version', 43 - 'form_token': $services.csrf.token, 44 - 'xredirect': $xwiki.getURL('Help.History.WebHome', 'save', $escapetool.url({ 45 - 'title': 'Page History', 46 - 'content': 'Check mate', 47 - 'form_token': $services.csrf.token, 48 - 'xredirect': $xwiki.getURL('Help.History.WebHome', 'save', $escapetool.url({ 49 - 'title': 'History', 50 - 'content': 'Check the **history**.', 51 - 'comment': 'Minor change', 52 - 'minorEdit': 1, 53 - 'form_token': $services.csrf.token, 54 - 'xredirect': $xwiki.getURL('Help.History.WebHome', 'save', $escapetool.url({ 55 - 'content': "Check the **history** tab.$util.newline${util.newline}Compare the versions.", 56 - 'form_token': $services.csrf.token, 57 - 'xredirect': $xwiki.getURL('Help.History.WebHome', 'view', $NULL, 'History') 58 - })) 59 - })) 60 - })) 61 - }))) 62 -#end 63 - 64 -#set ($featureCards = [{ 65 - 'icon': 'fa fa-pencil', 66 - 'title': 'Page Editing', 67 - 'description': "Use a powerful <a href=""http://platform.xwiki.org/xwiki/bin/view/Features/PageEditing"" class=""wikiexternallink"">WYSIWYG</a> content editor or <a href=""$xwiki.getURL('XWiki.XWikiSyntax')"">syntax</a> to create rich wiki pages.", 68 - 'documentation': 'http://platform.xwiki.org/xwiki/bin/view/Features/PageEditing', 69 - 'examples': $xwiki.getURL('Sandbox.WebHome', 'edit', 'editor=wysiwyg') 44 +#set ($smallCards = [{ 45 + 'iconfc': 'square-edit-outline', 46 + 'title': 'Formulardesigner', 47 + 'description': 'Arbeiten mit dem Formulardesigner', 48 + 'documentation': "Formcycle.FormDesigner" 70 70 }, { 71 - 'icon': 'fa fa-file-text-o', 72 - 'title': 'Templates', 73 - 'description': 'Templates are predefined pages that are copied when creating a new page.', 74 - 'documentation': 'Help.Templates.WebHome', 75 - 'examples': $xwiki.getURL('Help.Templates.WebHome', 'view', $NULL, 'HExamples') 50 + 'iconfc': 'wrench', 51 + 'title': 'Verwaltung', 52 + 'description': 'Benutzerverwaltung, LDAP, Datenbanken, Dateien, Templates und vieles mehr', 53 + 'documentation': 'Formcycle.UserInterface' 76 76 }, { 77 - 'icon': 'fa fa-file-excel-o', 78 - 'title': 'Macros', 79 - 'description': 'Macros are reusable functionality that can be integrated inside a page.', 80 - 'documentation': 'Help.Macros.WebHome', 81 - 'examples': $xwiki.getURL('Help.Macros.WebHome', 'view', $NULL, 'HExamples') 55 + 'iconfc': 'inbox', 56 + 'title': 'Posteingang', 57 + 'description': 'Formulardaten organisieren', 58 + 'documentation': 'Formcycle.Inbox' 82 82 }, { 83 - 'icon': 'fa fa-files-o', 84 - 'title': 'Applications', 85 - 'description': 'Applications allow to group related structured pages together.', 86 - 'documentation': 'Help.Applications.WebHome', 87 - 'examples': $xwiki.getURL('Help.Applications.WebHome', 'view', $NULL, 'HExamples') 60 + 'iconfc': 'workflow-fill', 61 + 'title': 'Workflow', 62 + 'description': 'Formulardaten verarbeiten', 63 + 'documentation': 'Formcycle.UserInterface.MyForms.WorkflowProcessing' 88 88 }, { 89 - 'icon': 'fa fa-sitemap', 90 - 'title': 'Content Organization', 91 - 'description': 'Organize your content in hierarchical pages, grouped in several (sub)wikis.', 92 - 'documentation': 'http://platform.xwiki.org/xwiki/bin/view/Features/ContentOrganization/', 93 - 'examples': $xwiki.getURL('Main.AllDocs', 'view', 'view=tree') 65 + 'icon': 'fa fa-play-circle', 66 + 'title': 'Einführungsvideos', 67 + 'description': 'Kurze Videos zum Vorstellen einzelner FORMCYCLE-Funktionen; ggf. Titel "Schnelleinstieg"', 68 + 'documentation': 'Formcycle.UserInterface.MyForms.WorkflowProcessing' 94 94 }, { 95 - 'icon': 'fa fa-history', 96 - 'title': 'Version Control', 97 - 'description': 'View previous versions of a page, compare different versions or rollback to any past version.', 98 - 'documentation': 'http://platform.xwiki.org/xwiki/bin/view/Features/VersionControl', 99 - 'examples': $historyURL 100 -}, { 101 - 'icon': 'fa fa-download', 102 - 'title': 'Import / Export', 103 - 'description': 'Import content from various sources and export it in an open format (XML, HTML, PDF, ODT).', 104 - 'documentation': 'http://platform.xwiki.org/xwiki/bin/view/Features/Imports' 70 + 'iconfc': 'puzzle', 71 + 'title': 'Tutorials', 72 + 'description': 'Formulardaten verarbeiten', 73 + 'documentation': 'Formcycle.UserInterface.MyForms.WorkflowProcessing' 105 105 }]) 75 + 76 +{{html}} 77 +##$jsontool.serialize(${mainCards})<br> 78 +##$jsontool.serialize($mainCards)<br> 79 +{{/html}} 80 + 81 +{{MainMenuTiles cards='$jsontool.serialize($mainCards)' /}} 82 + 83 +{{MainMenuTiles cards='$jsontool.serialize($smallCards)' type="small" /}} 106 106 {{/velocity}} 107 107 108 108 {{velocity}} 109 - = Howtouse XWiki?=87 +{{html wiki="false" clean="false"}} 110 110 111 -XWiki offers a wide range of powerful features that will enable you to create, organize and find content. This section will show you how to use the basic features of XWiki. 112 112 113 -{{html clean="false"}} 114 -#display4Cards($howToCards) 115 -{{/html}} 116 116 117 -= Main XWiki features = 91 +<style> 92 +.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} 93 +.jqcloud span { 94 + -moz-user-select: -moz-none; 95 + -khtml-user-select: none; 96 + -webkit-user-select: none; 97 + -ms-user-select: none; 98 + user-select: none; 99 + background-color: #eaeaef; 100 + border-radius: 10px; 101 + padding: 0px 4px 0px 4px; 102 +} 103 +.jqcloud span.jqHighlight { 104 + color: #0cf !important; 105 +} 106 +.jQButton { 107 + width:12%; 108 + color: #fff; 109 + background-color: #3480AD;/*#f0f0f3*/ 110 + text-align: center; 111 + display: inline-block; 112 + user-select: none; 113 + border-radius: 16px; 114 + padding: 4px 4px 4px 4px; 115 + font-size: 15px 116 +} 118 118 119 -Congratulations for acquiring your XWiki instance. XWiki is very versatile and can be used to create knowledge bases, intranets or any type of business application you want. This is achievable because of XWiki's customization power, that starts at page level, from a simple to a more advanced usage. 118 +.jQButton[active=false] { 119 + background-color: #a7a7a7; 120 +} 121 +.jQButton:hover { 122 + background-color: #0cf; 123 +} 124 +.jQButton[active=false]:hover { 125 + background-color: #676767; 126 +} 127 +</style> 120 120 121 -{{html clean="false"}} 122 -#display4Cards($featureCards) 129 +<script> 130 +require(['jquery'],function(XjQ) { 131 +'use strict'; 132 + 133 +/* 134 + * Plugin class 135 + */ 136 +var jQCloud = function(element, word_array, options) { 137 + this.Xelement = XjQ(element); 138 + 139 + this.word_array = word_array || []; 140 + this.options = options; 141 + 142 + this.sizeGenerator = null; 143 + this.colorGenerator = null; 144 + 145 + // Data used internally 146 + this.data = { 147 + placed_words: [], 148 + timeouts: {}, 149 + namespace: null, 150 + step: null, 151 + angle: null, 152 + aspect_ratio: null, 153 + max_weight: null, 154 + min_weight: null, 155 + sizes: [], 156 + colors: [] 157 + }; 158 + 159 + this.initialize(); 160 +}; 161 + 162 +jQCloud.DEFAULTS = { 163 + width: 100, 164 + height: 100, 165 + center: { x: 0.5, y: 0.5 }, 166 + steps: 10, 167 + delay: null, 168 + shape: 'elliptic', 169 + classPattern: 'w{n}', 170 + encodeURI: true, 171 + removeOverflowing: true, 172 + afterCloudRender: null, 173 + autoResize: false, 174 + colors: null, 175 + fontSize: null, 176 + template: null 177 +}; 178 + 179 +jQCloud.prototype = { 180 + initialize: function() { 181 + // Set/Get dimensions 182 + if (this.options.width) { 183 + this.Xelement.width(this.options.width); 184 + } 185 + else { 186 + this.options.width = this.Xelement.width(); 187 + } 188 + if (this.options.height) { 189 + this.Xelement.height(this.options.height); 190 + } 191 + else { 192 + this.options.height = this.Xelement.height(); 193 + } 194 + 195 + // Default options value 196 + this.options = XjQ.extend(true, {}, jQCloud.DEFAULTS, this.options); 197 + 198 + // Ensure delay 199 + if (this.options.delay === null) { 200 + this.options.delay = this.word_array.length > 50 ? 10 : 0; 201 + } 202 + 203 + // Backward compatibility 204 + if (this.options.center.x > 1) { 205 + this.options.center.x = this.options.center.x / this.options.width; 206 + this.options.center.y = this.options.center.y / this.options.height; 207 + } 208 + 209 + // Create colorGenerator function from options 210 + // Direct function 211 + if (typeof this.options.colors == 'function') { 212 + this.colorGenerator = this.options.colors; 213 + } 214 + // Array of sizes 215 + else if (XjQ.isArray(this.options.colors)) { 216 + var cl = this.options.colors.length; 217 + if (cl > 0) { 218 + // Fill the sizes array to X items 219 + if (cl < this.options.steps) { 220 + for (var i = cl; i < this.options.steps; i++) { 221 + this.options.colors[i] = this.options.colors[cl - 1]; 222 + } 223 + } 224 + 225 + this.colorGenerator = function(weight) { 226 + return this.options.colors[this.options.steps - weight]; 227 + }; 228 + } 229 + } 230 + 231 + // Create sizeGenerator function from options 232 + // Direct function 233 + if (typeof this.options.fontSize == 'function') { 234 + this.sizeGenerator = this.options.fontSize; 235 + } 236 + // Object with 'from' and 'to' 237 + else if (XjQ.isPlainObject(this.options.fontSize)) { 238 + this.sizeGenerator = function(width, height, weight) { 239 + var max = width * this.options.fontSize.from, 240 + min = width * this.options.fontSize.to; 241 + return Math.round(min + (max - min) * 1.0 / (this.options.steps - 1) * (weight - 1)) + 'px'; 242 + }; 243 + } 244 + // Array of sizes 245 + else if (XjQ.isArray(this.options.fontSize)) { 246 + var sl = this.options.fontSize.length; 247 + if (sl > 0) { 248 + // Fill the sizes array to X items 249 + if (sl < this.options.steps) { 250 + for (var j = sl; j < this.options.steps; j++) { 251 + this.options.fontSize[j] = this.options.fontSize[sl - 1]; 252 + } 253 + } 254 + 255 + this.sizeGenerator = function(width, height, weight) { 256 + return this.options.fontSize[this.options.steps - weight]; 257 + }; 258 + } 259 + } 260 + 261 + this.data.angle = Math.random() * 6.28; 262 + this.data.step = (this.options.shape === 'rectangular') ? 18.0 : 2.0; 263 + this.data.aspect_ratio = this.options.width / this.options.height; 264 + this.clearTimeouts(); 265 + 266 + // Namespace word ids to avoid collisions between multiple clouds 267 + this.data.namespace = (this.Xelement.attr('id') || Math.floor((Math.random() * 1000000)).toString(36)) + '_word_'; 268 + 269 + this.Xelement.addClass('jqcloud'); 270 + 271 + // Container's CSS position cannot be 'static' 272 + if (this.Xelement.css('position') === 'static') { 273 + this.Xelement.css('position', 'relative'); 274 + } 275 + 276 + // Delay execution so that the browser can render the page before the computatively intensive word cloud drawing 277 + this.createTimeout(XjQ.proxy(this.drawWordCloud, this), 10); 278 + 279 + // Attach window resize event 280 + if (this.options.autoResize) { 281 + XjQ(window).on('resize.' + this.data.namespace, throttle(this.resize, 50, this)); 282 + } 283 + }, 284 + 285 + // Helper function to keep track of timeouts so they can be destroyed 286 + createTimeout: function(callback, time) { 287 + var timeout = setTimeout(XjQ.proxy(function() { 288 + delete this.data.timeouts[timeout]; 289 + callback(); 290 + }, this), time); 291 + this.data.timeouts[timeout] = true; 292 + }, 293 + 294 + // Destroy all timeouts 295 + clearTimeouts: function() { 296 + XjQ.each(this.data.timeouts, function(key) { 297 + clearTimeout(key); 298 + }); 299 + this.data.timeouts = {}; 300 + }, 301 + 302 + // Pairwise overlap detection 303 + overlapping: function(a, b) { 304 + if (Math.abs(2.0 * a.left + a.width - 2.0 * b.left - b.width) < a.width + b.width) { 305 + if (Math.abs(2.0 * a.top + a.height - 2.0 * b.top - b.height) < a.height + b.height) { 306 + return true; 307 + } 308 + } 309 + return false; 310 + }, 311 + 312 + // Helper function to test if an element overlaps others 313 + hitTest: function(elem) { 314 + // Check elements for overlap one by one, stop and return false as soon as an overlap is found 315 + for (var i = 0, l = this.data.placed_words.length; i < l; i++) { 316 + if (this.overlapping(elem, this.data.placed_words[i])) { 317 + return true; 318 + } 319 + } 320 + return false; 321 + }, 322 + 323 + // Initialize the drawing of the whole cloud 324 + drawWordCloud: function() { 325 + var i, l; 326 + 327 + this.Xelement.children('[id^="' + this.data.namespace + '"]').remove(); 328 + 329 + if (this.word_array.length === 0) { 330 + return; 331 + } 332 + 333 + // Make sure every weight is a number before sorting 334 + for (i = 0, l = this.word_array.length; i < l; i++) { 335 + this.word_array[i].weight = parseFloat(this.word_array[i].weight, 10); 336 + } 337 + 338 + // Sort word_array from the word with the highest weight to the one with the lowest 339 + this.word_array.sort(function(a, b) { 340 + return b.weight - a.weight; 341 + }); 342 + 343 + // Kepp trace of bounds 344 + this.data.max_weight = this.word_array[0].weight; 345 + this.data.min_weight = this.word_array[this.word_array.length - 1].weight; 346 + 347 + // Generate colors 348 + this.data.colors = []; 349 + if (this.colorGenerator) { 350 + for (i = 0; i < this.options.steps; i++) { 351 + this.data.colors.push(this.colorGenerator(i + 1)); 352 + } 353 + } 354 + 355 + // Generate font sizes 356 + this.data.sizes = []; 357 + if (this.sizeGenerator) { 358 + for (i = 0; i < this.options.steps; i++) { 359 + this.data.sizes.push(this.sizeGenerator(this.options.width, this.options.height, i + 1)); 360 + } 361 + } 362 + 363 + // Iterate drawOneWord on every word, immediately or with delay 364 + if (this.options.delay > 0) { 365 + this.drawOneWordDelayed(); 366 + } 367 + else { 368 + for (i = 0, l = this.word_array.length; i < l; i++) { 369 + this.drawOneWord(i, this.word_array[i]); 370 + } 371 + 372 + if (typeof this.options.afterCloudRender === 'function') { 373 + this.options.afterCloudRender.call(this.Xelement); 374 + } 375 + } 376 + }, 377 + 378 + // Function to draw a word, by moving it in spiral until it finds a suitable empty place 379 + drawOneWord: function(index, word) { 380 + var word_id = this.data.namespace + index, 381 + word_selector = '#' + word_id, 382 + 383 + // option.shape == 'elliptic' 384 + angle = this.data.angle, 385 + radius = 0.0, 386 + 387 + // option.shape == 'rectangular' 388 + steps_in_direction = 0.0, 389 + quarter_turns = 0.0, 390 + 391 + weight = Math.floor(this.options.steps / 2), 392 + word_span, 393 + word_size, 394 + word_style; 395 + 396 + // Create word attr object 397 + //word.attr = XjQ.extend({}, word.html, { id: word_id }); 398 + word.attr = XjQ.extend({}, word.html, { id: word_id, group: (word.group ? word.group : "") }); 399 + 400 + // Linearly map the original weight to a discrete scale from 1 to 10 401 + // Only if weights are different 402 + if (this.data.max_weight != this.data.min_weight) { 403 + weight = Math.round((word.weight - this.data.min_weight) * 1.0 * (this.options.steps - 1) / (this.data.max_weight - this.data.min_weight)) + 1; 404 + } 405 + word_span = XjQ('<span>').attr(word.attr); 406 + 407 + word_span.addClass('jqcloud-word'); 408 + 409 + // Apply class 410 + if (this.options.classPattern) { 411 + word_span.addClass(this.options.classPattern.replace('{n}', weight)); 412 + } 413 + 414 + // Apply color 415 + if (this.data.colors.length) { 416 + word_span.css('color', this.data.colors[weight - 1]); 417 + } 418 + 419 + // Apply color from word property 420 + if (word.color) { 421 + word_span.css('color', word.color); 422 + } 423 + 424 + // Apply size 425 + if (this.data.sizes.length) { 426 + word_span.css('font-size', this.data.sizes[weight - 1]); 427 + } 428 + 429 + //Render using template function if provided. 430 + if (this.options.template) { 431 + word_span.html(this.options.template(word)); 432 + } else if (word.link) { 433 + // Append link if word.link attribute was set 434 + // If link is a string, then use it as the link href 435 + if (typeof word.link === 'string') { 436 + word.link = { href: word.link }; 437 + } 438 + 439 + if (this.options.encodeURI) { 440 + word.link.href = encodeURI(word.link.href).replace(/'/g, '%27'); 441 + } 442 + 443 + word_span.append(XjQ('<a>').attr(word.link).text(word.text)); 444 + } 445 + else { 446 + word_span.text(word.text); 447 + } 448 + 449 + // Bind handlers to words 450 + if (word.handlers) { 451 + word_span.on(word.handlers); 452 + } 453 + 454 + this.Xelement.append(word_span); 455 + 456 + word_size = { 457 + width: word_span.outerWidth(), 458 + height: word_span.outerHeight() 459 + }; 460 + word_size.left = this.options.center.x * this.options.width - word_size.width / 2.0; 461 + word_size.top = this.options.center.y * this.options.height - word_size.height / 2.0; 462 + 463 + // Save a reference to the style property, for better performance 464 + word_style = word_span[0].style; 465 + word_style.position = 'absolute'; 466 + word_style.left = word_size.left + 'px'; 467 + word_style.top = word_size.top + 'px'; 468 + 469 + while (this.hitTest(word_size)) { 470 + // option shape is 'rectangular' so move the word in a rectangular spiral 471 + if (this.options.shape === 'rectangular') { 472 + steps_in_direction++; 473 + 474 + 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)) { 475 + steps_in_direction = 0.0; 476 + quarter_turns++; 477 + } 478 + 479 + switch (quarter_turns % 4) { 480 + case 1: 481 + word_size.left += this.data.step * this.data.aspect_ratio + Math.random() * 2.0; 482 + break; 483 + case 2: 484 + word_size.top -= this.data.step + Math.random() * 2.0; 485 + break; 486 + case 3: 487 + word_size.left -= this.data.step * this.data.aspect_ratio + Math.random() * 2.0; 488 + break; 489 + case 0: 490 + word_size.top += this.data.step + Math.random() * 2.0; 491 + break; 492 + } 493 + } 494 + // Default settings: elliptic spiral shape 495 + else { 496 + radius += this.data.step; 497 + angle += (index % 2 === 0 ? 1 : -1) * this.data.step; 498 + 499 + word_size.left = this.options.center.x * this.options.width - (word_size.width / 2.0) + (radius * Math.cos(angle)) * this.data.aspect_ratio; 500 + word_size.top = this.options.center.y * this.options.height + radius * Math.sin(angle) - (word_size.height / 2.0); 501 + } 502 + word_style.left = word_size.left + 'px'; 503 + word_style.top = word_size.top + 'px'; 504 + } 505 + 506 + // Don't render word if part of it would be outside the container 507 + if (this.options.removeOverflowing && ( 508 + word_size.left < 0 || word_size.top < 0 || 509 + (word_size.left + word_size.width) > this.options.width || 510 + (word_size.top + word_size.height) > this.options.height 511 + ) 512 + ) { 513 + word_span.remove(); 514 + return; 515 + } 516 + 517 + // Save position for further usage 518 + this.data.placed_words.push(word_size); 519 + 520 + if (typeof word.afterWordRender === 'function') { 521 + word.afterWordRender.call(word_span); 522 + } 523 + }, 524 + 525 + // Draw one word then recall the function after a delay 526 + drawOneWordDelayed: function(index) { 527 + index = index || 0; 528 + 529 + // if not visible then do not attempt to draw 530 + if (!this.Xelement.is(':visible')) { 531 + this.createTimeout(XjQ.proxy(function() { 532 + this.drawOneWordDelayed(index); 533 + }, this), 10); 534 + 535 + return; 536 + } 537 + 538 + if (index < this.word_array.length) { 539 + this.drawOneWord(index, this.word_array[index]); 540 + 541 + this.createTimeout(XjQ.proxy(function() { 542 + this.drawOneWordDelayed(index + 1); 543 + }, this), this.options.delay); 544 + } 545 + else { 546 + if (typeof this.options.afterCloudRender == 'function') { 547 + this.options.afterCloudRender.call(this.Xelement); 548 + } 549 + } 550 + }, 551 + 552 + // Destroy any data and objects added by the plugin 553 + destroy: function() { 554 + if (this.options.autoResize) { 555 + XjQ(window).off('resize.' + this.data.namespace); 556 + } 557 + 558 + this.clearTimeouts(); 559 + this.Xelement.removeClass('jqcloud'); 560 + this.Xelement.removeData('jqcloud'); 561 + this.Xelement.children('[id^="' + this.data.namespace + '"]').remove(); 562 + }, 563 + 564 + // Update the list of words 565 + update: function(word_array) { 566 + this.word_array = word_array; 567 + this.data.placed_words = []; 568 + 569 + this.clearTimeouts(); 570 + this.drawWordCloud(); 571 + }, 572 + 573 + resize: function() { 574 + var new_size = { 575 + width: this.Xelement.width(), 576 + height: this.Xelement.height() 577 + }; 578 + 579 + if (new_size.width != this.options.width || new_size.height != this.options.height) { 580 + this.options.width = new_size.width; 581 + this.options.height = new_size.height; 582 + this.data.aspect_ratio = this.options.width / this.options.height; 583 + 584 + this.update(this.word_array); 585 + } 586 + }, 587 +}; 588 + 589 +/* 590 + * Apply throttling to a callback 591 + * @param callback {function} 592 + * @param delay {int} milliseconds 593 + * @param context {object|null} 594 + * @return {function} 595 + */ 596 +function throttle(callback, delay, context) { 597 + var state = { 598 + pid: null, 599 + last: 0 600 + }; 601 + 602 + return function() { 603 + var elapsed = new Date().getTime() - state.last, 604 + args = arguments, 605 + that = this; 606 + 607 + function exec() { 608 + state.last = new Date().getTime(); 609 + return callback.apply(context || that, Array.prototype.slice.call(args)); 610 + } 611 + 612 + if (elapsed > delay) { 613 + return exec(); 614 + } 615 + else { 616 + clearTimeout(state.pid); 617 + state.pid = setTimeout(exec, delay - elapsed); 618 + } 619 + }; 620 +} 621 + 622 +/* 623 + * jQuery plugin 624 + */ 625 +XjQ.fn.jQCloud = function(word_array, option) { 626 + var args = arguments; 627 + 628 + return this.each(function() { 629 + var Xthis = XjQ(this), 630 + data = Xthis.data('jqcloud'); 631 + 632 + if (!data && word_array === 'destroy') { 633 + // Don't even try to initialize when called with 'destroy' 634 + return; 635 + } 636 + if (!data) { 637 + var options = typeof option === 'object' ? option : {}; 638 + Xthis.data('jqcloud', (data = new jQCloud(this, word_array, options))); 639 + } 640 + else if (typeof word_array === 'string') { 641 + data[word_array].apply(data, Array.prototype.slice.call(args, 1)); 642 + } 643 + }); 644 +}; 645 + 646 +XjQ.fn.jQCloud.defaults = { 647 + set: function(options) { 648 + XjQ.extend(true, jQCloud.DEFAULTS, options); 649 + }, 650 + get: function(key) { 651 + var options = jQCloud.DEFAULTS; 652 + if (key) { 653 + options = options[key]; 654 + } 655 + return XjQ.extend(true, {}, options); 656 + } 657 +}; 658 + 659 +var jQwords = [ 660 + {text: "Druckvorschau", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 661 + {text: "Link im Formular", weight: 6, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 662 + {text: "Kalenderwidget anpassen", weight: 8, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 663 + {text: "Optionale Daten einer Auswahl mitspeichern (col Attribute)", weight: 4, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 664 + {text: "Aktion vor Absenden ausführen", weight: 5, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 665 + {text: "Absenden ohne Speichern", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 666 + {text: "Eigene Formularfeld-Validatoren (Regex)", weight: 10, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 667 + {text: "Wiederholende Felder (dynamic) im JS adressieren", weight: 10, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 668 + {text: "Events an dynamic Felder anhängen", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 669 + {text: "[Richtext-Editor (Ticket #4227)]", weight: 3, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 670 + {text: "Vorbelegung von Daten im Formular (extern)", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 671 + {text: "intiale Vorbelegung von Daten in Feldern", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 672 + {text: "Formularfelder mit LDAP-Daten vorbelegen (Ticket 3701)", weight: 3, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 673 + {text: "Formulareingaben zurücksetzen", weight: 7, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 674 + {text: "Formulardaten lokal speichern und später wieder laden (Ticket #3964)", weight: 8, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 675 + {text: "Formular zwischenspeichern", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 676 + {text: "Labeltext zur Laufzeit manipulieren (Ticket #3493)", weight: 5, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 677 + {text: "Mehrfachbedingungen im Designer", weight: 7, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 678 + {text: "zusätzliches JS und CSS in allen Formularen", weight: 8, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 679 + {text: "mehrseitige Formulare", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 680 + {text: "responive / mobile Ansicht", weight: 10, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 681 + {text: "andere Schriftart einbinden / Design ändern", weight: 9, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 682 + {text: "Java-Script API", weight: 8, group: 'Designer', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 683 + 684 + {text: "Datenquellen für Auswahllisten hinterlegen", weight: 8, group: 'Datenquellen', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 685 + {text: "Datenquellen in Auswahllisten anhand von Parametern hinterlegen", weight: 6, group: 'Datenquellen', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 686 + {text: "Leerer erster Eintrag bei SQL-Datenquelle (Ticket #4068)", weight: 5, group: 'Datenquellen', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 687 + 688 + {text: "Mehrfachbedingungen im Workflow", weight: 8, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 689 + {text: "Automatisiertes Löschen nach bestimmten Zeitraum", weight: 9, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 690 + {text: "Exportmöglichkeiten von Daten", weight: 6, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 691 + {text: "E-Mail Aktionen abhängig von Eingaben (Bedingungen) durchführen", weight: 8, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 692 + {text: "Bedingtes Einblenden von Elementen", weight: 7, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 693 + {text: "Mehrstufigen Workflow (Beispiel)", weight: 8, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 694 + {text: "Statuswechsel", weight: 10, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 695 + {text: "Vorgangs-ID im Druck (Word-Fill) anzeigen (Ticket #3813)", weight: 5, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 696 + {text: "iCal Datei erzeugen", weight: 3, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 697 + {text: "aktuelles Datum in der Verarbeitung", weight: 6, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 698 + {text: "Laufende Nummer aus Nummernkreis erzeugen (Ticket #3249)", weight: 3, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 699 + {text: "E-Mail-Versand", weight: 10, group: 'Statusverarbeitung', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 700 + 701 + {text: "Migrationsmöglichkeiten in Webseite", weight: 6, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 702 + {text: "Abschlussseite in Webseite anzeigen (inline)", weight: 5, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 703 + {text: "Generierte Dateien auf Abschlussseite anzeigen", weight: 7, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 704 + {text: "Benutzerdefinierte Abschlussseite", weight: 9, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 705 + {text: "Referenznummer (Ticket #3866)", weight: 5, group: 'Abschlusseite', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 706 + 707 + {text: "Vorgänge löschen", weight: 9, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 708 + {text: "Filtermöglichkeiten", weight: 8, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 709 + {text: "Stauswechsel im Postfach ermöglichen (notwendige Einstellungen)", weight: 6.5, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 710 + {text: "Postfach exportieren", weight: 7, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 711 + {text: "Berechtigungen/Sichtbarkeiten für Benutzer festlegen", weight: 6, group: 'Posteingang', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 712 + 713 + {text: "Update FORMCYCLE", weight: 4, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 714 + {text: "Zugriffseinschränkung - Möglichkeiten", weight: 3, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 715 + {text: "I-Frame automatisch Höhe anpassen", weight: 5, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 716 + {text: "Daten aus Formular werden nicht gespeichert (Disablede Felder)", weight: 6, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 717 + {text: "Double Opt-In", weight: 7, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 718 + {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/'}, 719 + {text: "[Tomcat Zugriff HTTPS - Zertifikat-Einrichtung (Ticket #3295)]", weight: 5, group: 'Anderes', link: 'https://help.formcycle.eu/xwiki/bin/view/Formcycle/'}, 720 + {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/'}, 721 +]; 722 +##http://mistic100.github.io/jQCloud/demo.html#handlers 723 +XjQ('#jQArea').jQCloud(jQwords, { 724 + classPattern: null, 725 + colors: ["#176694", "#3480AD", "#5398c1", "#76b2d6", "#7ca2b9", "#889fad", "#8e979c", "#929596", "#babbbb"], 726 + fontSize: ['16px','15px','15px','14px','14px','13px','13px','12px','12px'], 727 + //width: 500, 728 + height: 500 729 +}); 730 + 731 +var jQButtons = XjQ('.jQButton'); 732 + 733 +jQButtons.click(function() { 734 + if (XjQ(this).attr('active') == 'true') { 735 + XjQ('#jQArea').children('span[group="'+XjQ(this).attr('group')+'"]').each(jQTagInvisible); 736 + XjQ(this).attr('active', 'false'); 737 + } else { 738 + XjQ('#jQArea').children('span[group="'+XjQ(this).attr('group')+'"]').each(jQTagVisible); 739 + XjQ(this).attr('active', 'true'); 740 + } 741 +}); 742 +function jQTagVisible() { 743 + XjQ(this).css('display', 'block'); 744 +} 745 +function jQTagInvisible() { 746 + XjQ(this).css('display', 'none'); 747 +} 748 + 749 +jQButtons.hover(function() { 750 + console.log("hover",XjQ(this)); 751 + XjQ('#jQArea').children('span[group="'+XjQ(this).attr('group')+'"]').each(jQTagHighlighted); 752 +}, function() { 753 + console.log("unhover",XjQ(this)); 754 + XjQ('#jQArea').children('span[group="'+XjQ(this).attr('group')+'"]').each(jQTagNotHighlighted); 755 +}); 756 +function jQTagHighlighted() { 757 + XjQ(this).addClass('jqHighlight'); 758 +} 759 +function jQTagNotHighlighted() { 760 + XjQ(this).removeClass('jqHighlight'); 761 +} 762 +}); 763 +</script> 764 + 765 +<div class="row"> 766 + <div class="d-none d-md-block col-lg-12 card-main"> 767 + <div class="well" > 768 + <div id="jQButtons"> 769 + <div id="jQBtn1" class="jQButton" group="Designer" active="true">Designer</div> 770 + <div id="jQBtn1" class="jQButton" group="Datenquellen" active="true">Datenquellen</div> 771 + <div id="jQBtn1" class="jQButton" group="Statusverarbeitung" active="true">Statusverarbeitung</div> 772 + <div id="jQBtn1" class="jQButton" group="Abschlusseite" active="true">Abschlusseite</div> 773 + <div id="jQBtn1" class="jQButton" group="Posteingang" active="true">Posteingang</div> 774 + <div id="jQBtn1" class="jQButton" group="Anderes" active="true">Anderes</div> 775 + </div> 776 + <div id="jQArea"> 777 + </div> 778 + </div> 779 + </div> 780 +</div> 781 + 123 123 {{/html}} 124 124 {{/velocity}}
- XWiki.XWikiRights[0]
-
- Erlauben/Verbieten
-
... ... @@ -1,0 +1,1 @@ 1 +Zulassen - Gruppen
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.XWikiDevelop - Ebenen
-
... ... @@ -1,0 +1,1 @@ 1 +view
- XWiki.XWikiRights[1]
-
- Erlauben/Verbieten
-
... ... @@ -1,0 +1,1 @@ 1 +Zulassen - Gruppen
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.XWikiAllGroup - Ebenen
-
... ... @@ -1,0 +1,1 @@ 1 +view
- XWiki.XWikiRights[2]
-
- Erlauben/Verbieten
-
... ... @@ -1,0 +1,1 @@ 1 +Zulassen - Gruppen
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.XWikiAdminGroup - Ebenen
-
... ... @@ -1,0 +1,1 @@ 1 +view
- XWiki.XWikiRights[3]
-
- Erlauben/Verbieten
-
... ... @@ -1,0 +1,1 @@ 1 +Zulassen - Ebenen
-
... ... @@ -1,0 +1,1 @@ 1 +view - Benutzer
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.XWikiGuest