Commit | Line | Data |
---|---|---|
0c5338dd TD |
1 | |
2 | <!doctype html> | |
3 | <html lang="en" class="no-js"> | |
4 | <head> | |
5 | ||
6 | <meta charset="utf-8"> | |
7 | <meta name="viewport" content="width=device-width,initial-scale=1"> | |
8 | ||
9 | ||
10 | ||
11 | ||
fb962f09 WG |
12 | <link rel="icon" href="../../../../assets/default.favicon.ico"> |
13 | <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.0"> | |
0c5338dd TD |
14 | |
15 | ||
16 | ||
17 | <title>Structure - WoltLab Suite Documentation</title> | |
18 | ||
19 | ||
20 | ||
fb962f09 | 21 | <link rel="stylesheet" href="../../../../assets/stylesheets/main.33e2939f.min.css"> |
0c5338dd TD |
22 | |
23 | ||
fb962f09 | 24 | <link rel="stylesheet" href="../../../../assets/stylesheets/palette.ef6f36e2.min.css"> |
0c5338dd TD |
25 | |
26 | ||
27 | ||
28 | <meta name="theme-color" content="#009485"> | |
29 | ||
30 | ||
31 | ||
32 | ||
33 | ||
fd8430cb WG |
34 | |
35 | ||
0c5338dd TD |
36 | |
37 | ||
38 | <link rel="stylesheet" href="../../../../stylesheets/extra.css"> | |
39 | ||
40 | ||
41 | ||
42 | ||
43 | ||
44 | </head> | |
45 | ||
46 | ||
47 | ||
48 | ||
49 | ||
50 | ||
51 | ||
52 | <body dir="ltr" data-md-color-scheme="" data-md-color-primary="teal" data-md-color-accent=""> | |
0c5338dd TD |
53 | |
54 | ||
fb962f09 WG |
55 | <script>function __prefix(e){return new URL("../../../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script> |
56 | ||
0c5338dd TD |
57 | <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
58 | <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> | |
59 | <label class="md-overlay" for="__drawer"></label> | |
60 | <div data-md-component="skip"> | |
61 | ||
62 | ||
63 | <a href="#structure-of-form-builder" class="md-skip"> | |
64 | Skip to content | |
65 | </a> | |
66 | ||
67 | </div> | |
68 | <div data-md-component="announce"> | |
69 | ||
70 | <aside class="md-announce"> | |
71 | <div class="md-announce__inner md-grid md-typeset"> | |
72 | ||
73 | <a href="https://www.woltlab.com">Back to <strong>woltlab.com</strong></a> | |
74 | ||
75 | </div> | |
76 | </aside> | |
77 | ||
78 | </div> | |
79 | ||
fb962f09 | 80 | <header class="md-header" data-md-component="header"> |
0c5338dd | 81 | <nav class="md-header__inner md-grid" aria-label="Header"> |
fb962f09 | 82 | <a href="../../../.." title="WoltLab Suite Documentation" class="md-header__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo"> |
0c5338dd TD |
83 | |
84 | <img src="../../../../assets/logo.png" alt="logo"> | |
85 | ||
86 | </a> | |
87 | <label class="md-header__button md-icon" for="__drawer"> | |
88 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg> | |
89 | </label> | |
90 | <div class="md-header__title" data-md-component="header-title"> | |
91 | <div class="md-header__ellipsis"> | |
92 | <div class="md-header__topic"> | |
93 | <span class="md-ellipsis"> | |
94 | WoltLab Suite Documentation | |
95 | </span> | |
96 | </div> | |
97 | <div class="md-header__topic" data-md-component="header-topic"> | |
98 | <span class="md-ellipsis"> | |
99 | ||
100 | Structure | |
101 | ||
102 | </span> | |
103 | </div> | |
104 | </div> | |
0c5338dd TD |
105 | </div> |
106 | ||
fb962f09 WG |
107 | |
108 | ||
a3639e76 WG |
109 | <label class="md-header__button md-icon" for="__search"> |
110 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |
111 | </label> | |
112 | ||
113 | <div class="md-search" data-md-component="search" role="dialog"> | |
114 | <label class="md-search__overlay" for="__search"></label> | |
115 | <div class="md-search__inner" role="search"> | |
116 | <form class="md-search__form" name="search"> | |
117 | <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required> | |
118 | <label class="md-search__icon md-icon" for="__search"> | |
119 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |
120 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |
121 | </label> | |
122 | <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1"> | |
fb962f09 | 123 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg> |
a3639e76 WG |
124 | </button> |
125 | </form> | |
126 | <div class="md-search__output"> | |
127 | <div class="md-search__scrollwrap" data-md-scrollfix> | |
128 | <div class="md-search-result" data-md-component="search-result"> | |
129 | <div class="md-search-result__meta"> | |
130 | Initializing search | |
131 | </div> | |
132 | <ol class="md-search-result__list"></ol> | |
133 | </div> | |
134 | </div> | |
135 | </div> | |
136 | </div> | |
137 | </div> | |
138 | ||
0c5338dd | 139 | |
7124f4cb WG |
140 | <div class="md-header__source"> |
141 | ||
142 | <a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source"> | |
143 | <div class="md-source__icon md-icon"> | |
144 | ||
fb962f09 | 145 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> |
7124f4cb WG |
146 | </div> |
147 | <div class="md-source__repository"> | |
148 | GitHub | |
149 | </div> | |
150 | </a> | |
151 | </div> | |
152 | ||
0c5338dd TD |
153 | </nav> |
154 | </header> | |
155 | ||
156 | <div class="md-container" data-md-component="container"> | |
157 | ||
158 | ||
159 | ||
160 | ||
161 | <main class="md-main" data-md-component="main"> | |
162 | <div class="md-main__inner md-grid"> | |
163 | ||
164 | ||
165 | ||
166 | <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > | |
167 | <div class="md-sidebar__scrollwrap"> | |
168 | <div class="md-sidebar__inner"> | |
169 | ||
170 | ||
171 | ||
0c5338dd TD |
172 | <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> |
173 | <label class="md-nav__title" for="__drawer"> | |
fb962f09 | 174 | <a href="../../../.." title="WoltLab Suite Documentation" class="md-nav__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo"> |
0c5338dd TD |
175 | |
176 | <img src="../../../../assets/logo.png" alt="logo"> | |
177 | ||
178 | </a> | |
179 | WoltLab Suite Documentation | |
180 | </label> | |
181 | ||
7124f4cb WG |
182 | <div class="md-nav__source"> |
183 | ||
184 | <a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source"> | |
185 | <div class="md-source__icon md-icon"> | |
186 | ||
fb962f09 | 187 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> |
7124f4cb WG |
188 | </div> |
189 | <div class="md-source__repository"> | |
190 | GitHub | |
191 | </div> | |
192 | </a> | |
193 | </div> | |
194 | ||
0c5338dd TD |
195 | <ul class="md-nav__list" data-md-scrollfix> |
196 | ||
197 | ||
198 | ||
199 | ||
200 | ||
201 | ||
202 | ||
203 | ||
204 | <li class="md-nav__item"> | |
205 | <a href="../../../../getting-started/" class="md-nav__link"> | |
206 | Getting Started | |
207 | </a> | |
208 | </li> | |
209 | ||
210 | ||
211 | ||
212 | ||
213 | ||
214 | ||
215 | ||
216 | ||
217 | ||
218 | ||
219 | ||
220 | ||
221 | ||
222 | <li class="md-nav__item md-nav__item--active md-nav__item--nested"> | |
223 | ||
224 | ||
225 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked> | |
226 | ||
227 | <label class="md-nav__link" for="__nav_2"> | |
228 | PHP API | |
229 | <span class="md-nav__icon md-icon"></span> | |
230 | </label> | |
231 | <nav class="md-nav" aria-label="PHP API" data-md-level="1"> | |
232 | <label class="md-nav__title" for="__nav_2"> | |
233 | <span class="md-nav__icon md-icon"></span> | |
234 | PHP API | |
235 | </label> | |
236 | <ul class="md-nav__list" data-md-scrollfix> | |
237 | ||
238 | ||
239 | ||
240 | ||
241 | ||
242 | <li class="md-nav__item"> | |
243 | <a href="../../../pages/" class="md-nav__link"> | |
244 | Pages | |
245 | </a> | |
246 | </li> | |
247 | ||
248 | ||
249 | ||
250 | ||
251 | ||
252 | ||
253 | ||
254 | <li class="md-nav__item"> | |
255 | <a href="../../../database-objects/" class="md-nav__link"> | |
256 | Database Objects | |
257 | </a> | |
258 | </li> | |
259 | ||
260 | ||
261 | ||
262 | ||
263 | ||
264 | ||
265 | ||
266 | <li class="md-nav__item"> | |
267 | <a href="../../../database-access/" class="md-nav__link"> | |
268 | Database Access | |
269 | </a> | |
270 | </li> | |
271 | ||
272 | ||
273 | ||
274 | ||
275 | ||
276 | ||
277 | ||
278 | <li class="md-nav__item"> | |
279 | <a href="../../../exceptions/" class="md-nav__link"> | |
280 | Exceptions | |
281 | </a> | |
282 | </li> | |
283 | ||
284 | ||
285 | ||
286 | ||
287 | ||
288 | ||
289 | ||
290 | ||
291 | ||
292 | ||
293 | <li class="md-nav__item md-nav__item--active md-nav__item--nested"> | |
294 | ||
295 | ||
296 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5" type="checkbox" id="__nav_2_5" checked> | |
297 | ||
298 | <label class="md-nav__link" for="__nav_2_5"> | |
299 | API | |
300 | <span class="md-nav__icon md-icon"></span> | |
301 | </label> | |
302 | <nav class="md-nav" aria-label="API" data-md-level="2"> | |
303 | <label class="md-nav__title" for="__nav_2_5"> | |
304 | <span class="md-nav__icon md-icon"></span> | |
305 | API | |
306 | </label> | |
307 | <ul class="md-nav__list" data-md-scrollfix> | |
308 | ||
309 | ||
310 | ||
311 | ||
312 | ||
6923e968 WG |
313 | |
314 | <li class="md-nav__item md-nav__item--nested"> | |
315 | ||
316 | ||
317 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_1" type="checkbox" id="__nav_2_5_1" > | |
318 | ||
319 | <label class="md-nav__link" for="__nav_2_5_1"> | |
320 | Caches | |
321 | <span class="md-nav__icon md-icon"></span> | |
322 | </label> | |
323 | <nav class="md-nav" aria-label="Caches" data-md-level="3"> | |
324 | <label class="md-nav__title" for="__nav_2_5_1"> | |
325 | <span class="md-nav__icon md-icon"></span> | |
326 | Caches | |
327 | </label> | |
328 | <ul class="md-nav__list" data-md-scrollfix> | |
329 | ||
330 | ||
331 | ||
332 | ||
333 | ||
0c5338dd TD |
334 | <li class="md-nav__item"> |
335 | <a href="../../caches/" class="md-nav__link"> | |
6923e968 WG |
336 | Overview |
337 | </a> | |
338 | </li> | |
339 | ||
340 | ||
341 | ||
342 | ||
343 | ||
344 | ||
345 | ||
346 | <li class="md-nav__item"> | |
347 | <a href="../../caches_persistent-caches/" class="md-nav__link"> | |
348 | Persistent Caches | |
349 | </a> | |
350 | </li> | |
351 | ||
352 | ||
353 | ||
354 | ||
355 | ||
356 | ||
357 | ||
358 | <li class="md-nav__item"> | |
359 | <a href="../../caches_runtime-caches/" class="md-nav__link"> | |
360 | Runtime Caches | |
0c5338dd TD |
361 | </a> |
362 | </li> | |
363 | ||
364 | ||
365 | ||
6923e968 WG |
366 | </ul> |
367 | </nav> | |
368 | </li> | |
369 | ||
370 | ||
371 | ||
0c5338dd TD |
372 | |
373 | ||
374 | ||
375 | ||
376 | <li class="md-nav__item"> | |
377 | <a href="../../comments/" class="md-nav__link"> | |
378 | Comments | |
379 | </a> | |
380 | </li> | |
381 | ||
382 | ||
383 | ||
384 | ||
385 | ||
386 | ||
387 | ||
388 | <li class="md-nav__item"> | |
389 | <a href="../../cronjobs/" class="md-nav__link"> | |
390 | Cronjobs | |
391 | </a> | |
392 | </li> | |
393 | ||
394 | ||
395 | ||
396 | ||
397 | ||
398 | ||
399 | ||
400 | <li class="md-nav__item"> | |
401 | <a href="../../events/" class="md-nav__link"> | |
402 | Events | |
403 | </a> | |
404 | </li> | |
405 | ||
406 | ||
407 | ||
408 | ||
409 | ||
410 | ||
411 | ||
412 | ||
413 | ||
414 | ||
415 | <li class="md-nav__item md-nav__item--active md-nav__item--nested"> | |
416 | ||
417 | ||
418 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_5" type="checkbox" id="__nav_2_5_5" checked> | |
419 | ||
420 | <label class="md-nav__link" for="__nav_2_5_5"> | |
421 | Form Builder | |
422 | <span class="md-nav__icon md-icon"></span> | |
423 | </label> | |
424 | <nav class="md-nav" aria-label="Form Builder" data-md-level="3"> | |
425 | <label class="md-nav__title" for="__nav_2_5_5"> | |
426 | <span class="md-nav__icon md-icon"></span> | |
427 | Form Builder | |
428 | </label> | |
429 | <ul class="md-nav__list" data-md-scrollfix> | |
430 | ||
431 | ||
432 | ||
433 | ||
434 | ||
435 | <li class="md-nav__item"> | |
436 | <a href="../overview/" class="md-nav__link"> | |
437 | Overview | |
438 | </a> | |
439 | </li> | |
440 | ||
441 | ||
442 | ||
443 | ||
444 | ||
445 | ||
446 | ||
447 | ||
448 | ||
449 | <li class="md-nav__item md-nav__item--active"> | |
450 | ||
451 | <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> | |
452 | ||
453 | ||
454 | ||
455 | ||
456 | <label class="md-nav__link md-nav__link--active" for="__toc"> | |
457 | Structure | |
458 | <span class="md-nav__icon md-icon"></span> | |
459 | </label> | |
460 | ||
461 | <a href="./" class="md-nav__link md-nav__link--active"> | |
462 | Structure | |
463 | </a> | |
464 | ||
465 | ||
466 | <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |
467 | ||
468 | ||
469 | ||
470 | ||
471 | ||
472 | <label class="md-nav__title" for="__toc"> | |
473 | <span class="md-nav__icon md-icon"></span> | |
474 | Table of contents | |
475 | </label> | |
476 | <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> | |
477 | ||
478 | <li class="md-nav__item"> | |
479 | <a href="#form-nodes" class="md-nav__link"> | |
480 | Form Nodes | |
481 | </a> | |
482 | ||
483 | <nav class="md-nav" aria-label="Form Nodes"> | |
484 | <ul class="md-nav__list"> | |
485 | ||
486 | <li class="md-nav__item"> | |
487 | <a href="#iformnode" class="md-nav__link"> | |
488 | IFormNode | |
489 | </a> | |
490 | ||
491 | </li> | |
492 | ||
493 | <li class="md-nav__item"> | |
494 | <a href="#iformchildnode" class="md-nav__link"> | |
495 | IFormChildNode | |
496 | </a> | |
497 | ||
498 | </li> | |
499 | ||
500 | <li class="md-nav__item"> | |
501 | <a href="#iformparentnode" class="md-nav__link"> | |
502 | IFormParentNode | |
503 | </a> | |
504 | ||
505 | </li> | |
506 | ||
507 | <li class="md-nav__item"> | |
508 | <a href="#iformelement" class="md-nav__link"> | |
509 | IFormElement | |
510 | </a> | |
511 | ||
512 | </li> | |
513 | ||
514 | <li class="md-nav__item"> | |
515 | <a href="#iobjecttypeformnode" class="md-nav__link"> | |
516 | IObjectTypeFormNode | |
517 | </a> | |
518 | ||
519 | </li> | |
520 | ||
521 | <li class="md-nav__item"> | |
522 | <a href="#customformnode" class="md-nav__link"> | |
523 | CustomFormNode | |
524 | </a> | |
525 | ||
526 | </li> | |
527 | ||
528 | <li class="md-nav__item"> | |
529 | <a href="#templateformnode" class="md-nav__link"> | |
530 | TemplateFormNode | |
531 | </a> | |
532 | ||
533 | </li> | |
534 | ||
535 | </ul> | |
536 | </nav> | |
537 | ||
538 | </li> | |
539 | ||
540 | <li class="md-nav__item"> | |
541 | <a href="#form-document" class="md-nav__link"> | |
542 | Form Document | |
543 | </a> | |
544 | ||
545 | </li> | |
546 | ||
547 | <li class="md-nav__item"> | |
548 | <a href="#form-button" class="md-nav__link"> | |
549 | Form Button | |
550 | </a> | |
551 | ||
552 | </li> | |
553 | ||
554 | <li class="md-nav__item"> | |
555 | <a href="#form-container" class="md-nav__link"> | |
556 | Form Container | |
557 | </a> | |
558 | ||
559 | </li> | |
560 | ||
561 | <li class="md-nav__item"> | |
562 | <a href="#form-field" class="md-nav__link"> | |
563 | Form Field | |
564 | </a> | |
565 | ||
566 | <nav class="md-nav" aria-label="Form Field"> | |
567 | <ul class="md-nav__list"> | |
568 | ||
569 | <li class="md-nav__item"> | |
570 | <a href="#form-field-interfaces-and-traits" class="md-nav__link"> | |
571 | Form Field Interfaces and Traits | |
572 | </a> | |
573 | ||
574 | <nav class="md-nav" aria-label="Form Field Interfaces and Traits"> | |
575 | <ul class="md-nav__list"> | |
576 | ||
577 | <li class="md-nav__item"> | |
578 | <a href="#iattributeformfield" class="md-nav__link"> | |
579 | IAttributeFormField | |
580 | </a> | |
581 | ||
582 | </li> | |
583 | ||
584 | <li class="md-nav__item"> | |
585 | <a href="#iautocompleteformfield" class="md-nav__link"> | |
586 | IAutoCompleteFormField | |
587 | </a> | |
588 | ||
589 | </li> | |
590 | ||
591 | <li class="md-nav__item"> | |
592 | <a href="#iautofocusformfield" class="md-nav__link"> | |
593 | IAutoFocusFormField | |
594 | </a> | |
595 | ||
596 | </li> | |
597 | ||
598 | <li class="md-nav__item"> | |
599 | <a href="#icssclassformfield" class="md-nav__link"> | |
600 | ICssClassFormField | |
601 | </a> | |
602 | ||
603 | </li> | |
604 | ||
605 | <li class="md-nav__item"> | |
606 | <a href="#ifileformfield" class="md-nav__link"> | |
607 | IFileFormField | |
608 | </a> | |
609 | ||
610 | </li> | |
611 | ||
612 | <li class="md-nav__item"> | |
613 | <a href="#ifilterableselectionformfield" class="md-nav__link"> | |
614 | IFilterableSelectionFormField | |
615 | </a> | |
616 | ||
617 | </li> | |
618 | ||
619 | <li class="md-nav__item"> | |
620 | <a href="#ii18nformfield" class="md-nav__link"> | |
621 | II18nFormField | |
622 | </a> | |
623 | ||
624 | </li> | |
625 | ||
626 | <li class="md-nav__item"> | |
627 | <a href="#iimmutableformfield" class="md-nav__link"> | |
628 | IImmutableFormField | |
629 | </a> | |
630 | ||
631 | </li> | |
632 | ||
633 | <li class="md-nav__item"> | |
634 | <a href="#iinputmodeformfield" class="md-nav__link"> | |
635 | IInputModeFormField | |
636 | </a> | |
637 | ||
638 | </li> | |
639 | ||
640 | <li class="md-nav__item"> | |
641 | <a href="#imaximumformfield" class="md-nav__link"> | |
642 | IMaximumFormField | |
643 | </a> | |
644 | ||
645 | </li> | |
646 | ||
647 | <li class="md-nav__item"> | |
648 | <a href="#imaximumlengthformfield" class="md-nav__link"> | |
649 | IMaximumLengthFormField | |
650 | </a> | |
651 | ||
652 | </li> | |
653 | ||
654 | <li class="md-nav__item"> | |
655 | <a href="#iminimumformfield" class="md-nav__link"> | |
656 | IMinimumFormField | |
657 | </a> | |
658 | ||
659 | </li> | |
660 | ||
661 | <li class="md-nav__item"> | |
662 | <a href="#iminimumlengthformfield" class="md-nav__link"> | |
663 | IMinimumLengthFormField | |
664 | </a> | |
665 | ||
666 | </li> | |
667 | ||
668 | <li class="md-nav__item"> | |
669 | <a href="#imultipleformfield" class="md-nav__link"> | |
670 | IMultipleFormField | |
671 | </a> | |
672 | ||
673 | </li> | |
674 | ||
675 | <li class="md-nav__item"> | |
676 | <a href="#inullableformfield" class="md-nav__link"> | |
677 | INullableFormField | |
678 | </a> | |
679 | ||
680 | </li> | |
681 | ||
682 | <li class="md-nav__item"> | |
683 | <a href="#ipackagesformfield" class="md-nav__link"> | |
684 | IPackagesFormField | |
685 | </a> | |
686 | ||
687 | </li> | |
688 | ||
689 | <li class="md-nav__item"> | |
690 | <a href="#ipatternformfield" class="md-nav__link"> | |
691 | IPatternFormField | |
692 | </a> | |
693 | ||
694 | </li> | |
695 | ||
696 | <li class="md-nav__item"> | |
697 | <a href="#iplaceholderformfield" class="md-nav__link"> | |
698 | IPlaceholderFormField | |
699 | </a> | |
700 | ||
701 | </li> | |
702 | ||
703 | <li class="md-nav__item"> | |
704 | <a href="#iselectionformfield" class="md-nav__link"> | |
705 | ISelectionFormField | |
706 | </a> | |
707 | ||
708 | </li> | |
709 | ||
710 | <li class="md-nav__item"> | |
711 | <a href="#isuffixedformfield" class="md-nav__link"> | |
712 | ISuffixedFormField | |
713 | </a> | |
714 | ||
715 | </li> | |
716 | ||
717 | <li class="md-nav__item"> | |
718 | <a href="#tdefaultidformfield" class="md-nav__link"> | |
719 | TDefaultIdFormField | |
720 | </a> | |
721 | ||
722 | </li> | |
723 | ||
724 | </ul> | |
725 | </nav> | |
726 | ||
727 | </li> | |
728 | ||
729 | </ul> | |
730 | </nav> | |
731 | ||
732 | </li> | |
733 | ||
734 | <li class="md-nav__item"> | |
735 | <a href="#displaying-forms" class="md-nav__link"> | |
736 | Displaying Forms | |
737 | </a> | |
738 | ||
739 | </li> | |
740 | ||
741 | </ul> | |
742 | ||
743 | </nav> | |
744 | ||
745 | </li> | |
746 | ||
747 | ||
748 | ||
749 | ||
750 | ||
751 | ||
752 | ||
753 | <li class="md-nav__item"> | |
754 | <a href="../form_fields/" class="md-nav__link"> | |
755 | Fields | |
756 | </a> | |
757 | </li> | |
758 | ||
759 | ||
760 | ||
761 | ||
762 | ||
763 | ||
764 | ||
765 | <li class="md-nav__item"> | |
766 | <a href="../validation_data/" class="md-nav__link"> | |
767 | Validation and Data | |
768 | </a> | |
769 | </li> | |
770 | ||
771 | ||
772 | ||
773 | ||
774 | ||
775 | ||
776 | ||
777 | <li class="md-nav__item"> | |
778 | <a href="../dependencies/" class="md-nav__link"> | |
779 | Dependencies | |
780 | </a> | |
781 | </li> | |
782 | ||
783 | ||
784 | ||
785 | </ul> | |
786 | </nav> | |
787 | </li> | |
788 | ||
789 | ||
790 | ||
791 | ||
792 | ||
793 | ||
794 | ||
795 | <li class="md-nav__item"> | |
796 | <a href="../../package_installation_plugins/" class="md-nav__link"> | |
797 | Package Installation Plugins | |
798 | </a> | |
799 | </li> | |
800 | ||
801 | ||
802 | ||
803 | ||
804 | ||
805 | ||
806 | ||
807 | <li class="md-nav__item"> | |
808 | <a href="../../user_activity_points/" class="md-nav__link"> | |
809 | User Activity Points | |
810 | </a> | |
811 | </li> | |
812 | ||
813 | ||
814 | ||
815 | ||
816 | ||
817 | ||
818 | ||
819 | <li class="md-nav__item"> | |
820 | <a href="../../user_notifications/" class="md-nav__link"> | |
821 | User Notifications | |
822 | </a> | |
823 | </li> | |
824 | ||
825 | ||
826 | ||
827 | ||
828 | ||
829 | ||
830 | ||
831 | <li class="md-nav__item"> | |
832 | <a href="../../sitemaps/" class="md-nav__link"> | |
833 | Sitemaps | |
834 | </a> | |
835 | </li> | |
836 | ||
837 | ||
838 | ||
839 | </ul> | |
840 | </nav> | |
841 | </li> | |
842 | ||
843 | ||
844 | ||
845 | ||
846 | ||
847 | ||
848 | ||
849 | <li class="md-nav__item"> | |
850 | <a href="../../../code-style/" class="md-nav__link"> | |
851 | Code Style | |
852 | </a> | |
853 | </li> | |
854 | ||
855 | ||
856 | ||
857 | ||
858 | ||
859 | ||
860 | ||
861 | <li class="md-nav__item"> | |
862 | <a href="../../../apps/" class="md-nav__link"> | |
863 | Apps | |
864 | </a> | |
865 | </li> | |
866 | ||
867 | ||
868 | ||
869 | ||
870 | ||
871 | ||
872 | ||
873 | <li class="md-nav__item"> | |
874 | <a href="../../../gdpr/" class="md-nav__link"> | |
875 | GDPR | |
876 | </a> | |
877 | </li> | |
878 | ||
879 | ||
880 | ||
881 | </ul> | |
882 | </nav> | |
883 | </li> | |
884 | ||
885 | ||
886 | ||
887 | ||
888 | ||
889 | ||
890 | ||
891 | ||
892 | ||
893 | ||
894 | ||
895 | <li class="md-nav__item md-nav__item--nested"> | |
896 | ||
897 | ||
898 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" > | |
899 | ||
900 | <label class="md-nav__link" for="__nav_3"> | |
901 | Languages, Templates & CSS | |
902 | <span class="md-nav__icon md-icon"></span> | |
903 | </label> | |
904 | <nav class="md-nav" aria-label="Languages, Templates & CSS" data-md-level="1"> | |
905 | <label class="md-nav__title" for="__nav_3"> | |
906 | <span class="md-nav__icon md-icon"></span> | |
907 | Languages, Templates & CSS | |
908 | </label> | |
909 | <ul class="md-nav__list" data-md-scrollfix> | |
910 | ||
911 | ||
912 | ||
913 | ||
914 | ||
915 | <li class="md-nav__item"> | |
916 | <a href="../../../../view/languages/" class="md-nav__link"> | |
917 | Languages | |
918 | </a> | |
919 | </li> | |
920 | ||
921 | ||
922 | ||
923 | ||
924 | ||
925 | ||
926 | ||
927 | <li class="md-nav__item"> | |
928 | <a href="../../../../view/templates/" class="md-nav__link"> | |
929 | Templates | |
930 | </a> | |
931 | </li> | |
932 | ||
933 | ||
934 | ||
935 | ||
936 | ||
937 | ||
938 | ||
6923e968 WG |
939 | <li class="md-nav__item"> |
940 | <a href="../../../../view/template-plugins/" class="md-nav__link"> | |
941 | Template Plugins | |
942 | </a> | |
943 | </li> | |
944 | ||
945 | ||
946 | ||
947 | ||
948 | ||
949 | ||
950 | ||
0c5338dd TD |
951 | <li class="md-nav__item"> |
952 | <a href="../../../../view/css/" class="md-nav__link"> | |
953 | CSS | |
954 | </a> | |
955 | </li> | |
956 | ||
957 | ||
958 | ||
959 | </ul> | |
960 | </nav> | |
961 | </li> | |
962 | ||
963 | ||
964 | ||
965 | ||
966 | ||
967 | ||
968 | ||
969 | ||
970 | ||
971 | ||
972 | ||
973 | <li class="md-nav__item md-nav__item--nested"> | |
974 | ||
975 | ||
976 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" > | |
977 | ||
978 | <label class="md-nav__link" for="__nav_4"> | |
77efcd46 | 979 | TypeScript and JavaScript API |
0c5338dd TD |
980 | <span class="md-nav__icon md-icon"></span> |
981 | </label> | |
77efcd46 | 982 | <nav class="md-nav" aria-label="TypeScript and JavaScript API" data-md-level="1"> |
0c5338dd TD |
983 | <label class="md-nav__title" for="__nav_4"> |
984 | <span class="md-nav__icon md-icon"></span> | |
77efcd46 | 985 | TypeScript and JavaScript API |
0c5338dd TD |
986 | </label> |
987 | <ul class="md-nav__list" data-md-scrollfix> | |
988 | ||
989 | ||
990 | ||
991 | ||
992 | ||
993 | <li class="md-nav__item"> | |
994 | <a href="../../../../javascript/general-usage/" class="md-nav__link"> | |
995 | General Usage | |
996 | </a> | |
997 | </li> | |
998 | ||
999 | ||
1000 | ||
1001 | ||
1002 | ||
1003 | ||
1004 | ||
77efcd46 WG |
1005 | <li class="md-nav__item"> |
1006 | <a href="../../../../javascript/typescript/" class="md-nav__link"> | |
1007 | TypeScript | |
1008 | </a> | |
1009 | </li> | |
1010 | ||
1011 | ||
1012 | ||
1013 | ||
1014 | ||
1015 | ||
1016 | ||
0c5338dd TD |
1017 | |
1018 | <li class="md-nav__item md-nav__item--nested"> | |
1019 | ||
1020 | ||
77efcd46 | 1021 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_3" type="checkbox" id="__nav_4_3" > |
0c5338dd | 1022 | |
77efcd46 | 1023 | <label class="md-nav__link" for="__nav_4_3"> |
0c5338dd TD |
1024 | New API |
1025 | <span class="md-nav__icon md-icon"></span> | |
1026 | </label> | |
1027 | <nav class="md-nav" aria-label="New API" data-md-level="2"> | |
77efcd46 | 1028 | <label class="md-nav__title" for="__nav_4_3"> |
0c5338dd TD |
1029 | <span class="md-nav__icon md-icon"></span> |
1030 | New API | |
1031 | </label> | |
1032 | <ul class="md-nav__list" data-md-scrollfix> | |
1033 | ||
1034 | ||
1035 | ||
1036 | ||
1037 | ||
1038 | <li class="md-nav__item"> | |
1039 | <a href="../../../../javascript/new-api_writing-a-module/" class="md-nav__link"> | |
1040 | Writing a module | |
1041 | </a> | |
1042 | </li> | |
1043 | ||
1044 | ||
1045 | ||
1046 | ||
1047 | ||
1048 | ||
1049 | ||
1050 | <li class="md-nav__item"> | |
1051 | <a href="../../../../javascript/new-api_data-structures/" class="md-nav__link"> | |
1052 | Data Structures | |
1053 | </a> | |
1054 | </li> | |
1055 | ||
1056 | ||
1057 | ||
1058 | ||
1059 | ||
1060 | ||
1061 | ||
1062 | <li class="md-nav__item"> | |
1063 | <a href="../../../../javascript/new-api_core/" class="md-nav__link"> | |
1064 | Core Functions | |
1065 | </a> | |
1066 | </li> | |
1067 | ||
1068 | ||
1069 | ||
1070 | ||
1071 | ||
1072 | ||
1073 | ||
1074 | <li class="md-nav__item"> | |
1075 | <a href="../../../../javascript/new-api_dom/" class="md-nav__link"> | |
1076 | DOM | |
1077 | </a> | |
1078 | </li> | |
1079 | ||
1080 | ||
1081 | ||
1082 | ||
1083 | ||
1084 | ||
1085 | ||
1086 | <li class="md-nav__item"> | |
1087 | <a href="../../../../javascript/new-api_events/" class="md-nav__link"> | |
1088 | Event Handling | |
1089 | </a> | |
1090 | </li> | |
1091 | ||
1092 | ||
1093 | ||
1094 | ||
1095 | ||
1096 | ||
1097 | ||
1098 | <li class="md-nav__item"> | |
1099 | <a href="../../../../javascript/new-api_ajax/" class="md-nav__link"> | |
1100 | Ajax | |
1101 | </a> | |
1102 | </li> | |
1103 | ||
1104 | ||
1105 | ||
1106 | ||
1107 | ||
1108 | ||
1109 | ||
1110 | <li class="md-nav__item"> | |
1111 | <a href="../../../../javascript/new-api_dialogs/" class="md-nav__link"> | |
1112 | Dialogs | |
1113 | </a> | |
1114 | </li> | |
1115 | ||
1116 | ||
1117 | ||
1118 | ||
1119 | ||
1120 | ||
1121 | ||
1122 | <li class="md-nav__item"> | |
1123 | <a href="../../../../javascript/new-api_browser/" class="md-nav__link"> | |
1124 | Browser and Screen Sizes | |
1125 | </a> | |
1126 | </li> | |
1127 | ||
1128 | ||
1129 | ||
1130 | ||
1131 | ||
1132 | ||
1133 | ||
1134 | <li class="md-nav__item"> | |
1135 | <a href="../../../../javascript/new-api_ui/" class="md-nav__link"> | |
1136 | User Interface | |
1137 | </a> | |
1138 | </li> | |
1139 | ||
1140 | ||
1141 | ||
1142 | </ul> | |
1143 | </nav> | |
1144 | </li> | |
1145 | ||
1146 | ||
1147 | ||
1148 | ||
1149 | ||
1150 | ||
1151 | ||
1152 | <li class="md-nav__item"> | |
1153 | <a href="../../../../javascript/legacy-api/" class="md-nav__link"> | |
1154 | Legacy API | |
1155 | </a> | |
1156 | </li> | |
1157 | ||
1158 | ||
1159 | ||
1160 | ||
1161 | ||
1162 | ||
1163 | ||
1164 | <li class="md-nav__item"> | |
1165 | <a href="../../../../javascript/helper-functions/" class="md-nav__link"> | |
1166 | Helper Functions | |
1167 | </a> | |
1168 | </li> | |
1169 | ||
1170 | ||
1171 | ||
1172 | ||
1173 | ||
1174 | ||
1175 | ||
1176 | <li class="md-nav__item"> | |
1177 | <a href="../../../../javascript/code-snippets/" class="md-nav__link"> | |
1178 | Code Snippets | |
1179 | </a> | |
1180 | </li> | |
1181 | ||
1182 | ||
1183 | ||
1184 | </ul> | |
1185 | </nav> | |
1186 | </li> | |
1187 | ||
1188 | ||
1189 | ||
1190 | ||
1191 | ||
1192 | ||
1193 | ||
1194 | ||
1195 | ||
1196 | ||
1197 | ||
1198 | <li class="md-nav__item md-nav__item--nested"> | |
1199 | ||
1200 | ||
1201 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" > | |
1202 | ||
1203 | <label class="md-nav__link" for="__nav_5"> | |
1204 | Package Components | |
1205 | <span class="md-nav__icon md-icon"></span> | |
1206 | </label> | |
1207 | <nav class="md-nav" aria-label="Package Components" data-md-level="1"> | |
1208 | <label class="md-nav__title" for="__nav_5"> | |
1209 | <span class="md-nav__icon md-icon"></span> | |
1210 | Package Components | |
1211 | </label> | |
1212 | <ul class="md-nav__list" data-md-scrollfix> | |
1213 | ||
1214 | ||
1215 | ||
1216 | ||
1217 | ||
1218 | <li class="md-nav__item"> | |
1219 | <a href="../../../../package/package-xml/" class="md-nav__link"> | |
1220 | package.xml | |
1221 | </a> | |
1222 | </li> | |
1223 | ||
1224 | ||
1225 | ||
1226 | ||
1227 | ||
1228 | ||
1229 | ||
1230 | ||
1231 | <li class="md-nav__item md-nav__item--nested"> | |
1232 | ||
1233 | ||
1234 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_2" type="checkbox" id="__nav_5_2" > | |
1235 | ||
1236 | <label class="md-nav__link" for="__nav_5_2"> | |
1237 | PIPs | |
1238 | <span class="md-nav__icon md-icon"></span> | |
1239 | </label> | |
1240 | <nav class="md-nav" aria-label="PIPs" data-md-level="2"> | |
1241 | <label class="md-nav__title" for="__nav_5_2"> | |
1242 | <span class="md-nav__icon md-icon"></span> | |
1243 | PIPs | |
1244 | </label> | |
1245 | <ul class="md-nav__list" data-md-scrollfix> | |
1246 | ||
1247 | ||
1248 | ||
1249 | ||
1250 | ||
1251 | <li class="md-nav__item"> | |
1252 | <a href="../../../../package/pip/" class="md-nav__link"> | |
1253 | Overview | |
1254 | </a> | |
1255 | </li> | |
1256 | ||
1257 | ||
1258 | ||
1259 | ||
1260 | ||
1261 | ||
1262 | ||
1263 | <li class="md-nav__item"> | |
1264 | <a href="../../../../package/pip/acl-option/" class="md-nav__link"> | |
1265 | aclOption | |
1266 | </a> | |
1267 | </li> | |
1268 | ||
1269 | ||
1270 | ||
1271 | ||
1272 | ||
1273 | ||
1274 | ||
1275 | <li class="md-nav__item"> | |
1276 | <a href="../../../../package/pip/acp-menu/" class="md-nav__link"> | |
1277 | acpMenu | |
1278 | </a> | |
1279 | </li> | |
1280 | ||
1281 | ||
1282 | ||
1283 | ||
1284 | ||
1285 | ||
1286 | ||
1287 | <li class="md-nav__item"> | |
1288 | <a href="../../../../package/pip/acp-search-provider/" class="md-nav__link"> | |
1289 | acpSearchProvider | |
1290 | </a> | |
1291 | </li> | |
1292 | ||
1293 | ||
1294 | ||
1295 | ||
1296 | ||
1297 | ||
1298 | ||
1299 | <li class="md-nav__item"> | |
1300 | <a href="../../../../package/pip/acp-template/" class="md-nav__link"> | |
1301 | acpTemplate | |
1302 | </a> | |
1303 | </li> | |
1304 | ||
1305 | ||
1306 | ||
1307 | ||
1308 | ||
1309 | ||
1310 | ||
1311 | <li class="md-nav__item"> | |
1312 | <a href="../../../../package/pip/bbcode/" class="md-nav__link"> | |
1313 | bbcode | |
1314 | </a> | |
1315 | </li> | |
1316 | ||
1317 | ||
1318 | ||
1319 | ||
1320 | ||
1321 | ||
1322 | ||
1323 | <li class="md-nav__item"> | |
1324 | <a href="../../../../package/pip/box/" class="md-nav__link"> | |
1325 | box | |
1326 | </a> | |
1327 | </li> | |
1328 | ||
1329 | ||
1330 | ||
1331 | ||
1332 | ||
1333 | ||
1334 | ||
1335 | <li class="md-nav__item"> | |
1336 | <a href="../../../../package/pip/clipboard-action/" class="md-nav__link"> | |
1337 | clipboardAction | |
1338 | </a> | |
1339 | </li> | |
1340 | ||
1341 | ||
1342 | ||
1343 | ||
1344 | ||
1345 | ||
1346 | ||
1347 | <li class="md-nav__item"> | |
1348 | <a href="../../../../package/pip/core-object/" class="md-nav__link"> | |
1349 | coreObject | |
1350 | </a> | |
1351 | </li> | |
1352 | ||
1353 | ||
1354 | ||
1355 | ||
1356 | ||
1357 | ||
1358 | ||
1359 | <li class="md-nav__item"> | |
1360 | <a href="../../../../package/pip/cronjob/" class="md-nav__link"> | |
1361 | cronjob | |
1362 | </a> | |
1363 | </li> | |
1364 | ||
1365 | ||
1366 | ||
1367 | ||
1368 | ||
1369 | ||
1370 | ||
6923e968 WG |
1371 | <li class="md-nav__item"> |
1372 | <a href="../../../../package/pip/database/" class="md-nav__link"> | |
1373 | database | |
1374 | </a> | |
1375 | </li> | |
1376 | ||
1377 | ||
1378 | ||
1379 | ||
1380 | ||
1381 | ||
1382 | ||
0c5338dd TD |
1383 | <li class="md-nav__item"> |
1384 | <a href="../../../../package/pip/event-listener/" class="md-nav__link"> | |
1385 | eventListener | |
1386 | </a> | |
1387 | </li> | |
1388 | ||
1389 | ||
1390 | ||
1391 | ||
1392 | ||
1393 | ||
1394 | ||
1395 | <li class="md-nav__item"> | |
1396 | <a href="../../../../package/pip/file/" class="md-nav__link"> | |
1397 | file | |
1398 | </a> | |
1399 | </li> | |
1400 | ||
1401 | ||
1402 | ||
1403 | ||
1404 | ||
1405 | ||
1406 | ||
1407 | <li class="md-nav__item"> | |
1408 | <a href="../../../../package/pip/language/" class="md-nav__link"> | |
1409 | language | |
1410 | </a> | |
1411 | </li> | |
1412 | ||
1413 | ||
1414 | ||
1415 | ||
1416 | ||
1417 | ||
1418 | ||
1419 | <li class="md-nav__item"> | |
1420 | <a href="../../../../package/pip/media-provider/" class="md-nav__link"> | |
1421 | mediaProvider | |
1422 | </a> | |
1423 | </li> | |
1424 | ||
1425 | ||
1426 | ||
1427 | ||
1428 | ||
1429 | ||
1430 | ||
1431 | <li class="md-nav__item"> | |
1432 | <a href="../../../../package/pip/menu/" class="md-nav__link"> | |
1433 | menu | |
1434 | </a> | |
1435 | </li> | |
1436 | ||
1437 | ||
1438 | ||
1439 | ||
1440 | ||
1441 | ||
1442 | ||
1443 | <li class="md-nav__item"> | |
1444 | <a href="../../../../package/pip/menu-item/" class="md-nav__link"> | |
1445 | menuItem | |
1446 | </a> | |
1447 | </li> | |
1448 | ||
1449 | ||
1450 | ||
1451 | ||
1452 | ||
1453 | ||
1454 | ||
1455 | <li class="md-nav__item"> | |
1456 | <a href="../../../../package/pip/object-type/" class="md-nav__link"> | |
1457 | objectType | |
1458 | </a> | |
1459 | </li> | |
1460 | ||
1461 | ||
1462 | ||
1463 | ||
1464 | ||
1465 | ||
1466 | ||
1467 | <li class="md-nav__item"> | |
1468 | <a href="../../../../package/pip/object-type-definition/" class="md-nav__link"> | |
1469 | objectTypeDefinition | |
1470 | </a> | |
1471 | </li> | |
1472 | ||
1473 | ||
1474 | ||
1475 | ||
1476 | ||
1477 | ||
1478 | ||
1479 | <li class="md-nav__item"> | |
1480 | <a href="../../../../package/pip/option/" class="md-nav__link"> | |
1481 | option | |
1482 | </a> | |
1483 | </li> | |
1484 | ||
1485 | ||
1486 | ||
1487 | ||
1488 | ||
1489 | ||
1490 | ||
1491 | <li class="md-nav__item"> | |
1492 | <a href="../../../../package/pip/page/" class="md-nav__link"> | |
1493 | page | |
1494 | </a> | |
1495 | </li> | |
1496 | ||
1497 | ||
1498 | ||
1499 | ||
1500 | ||
1501 | ||
1502 | ||
1503 | <li class="md-nav__item"> | |
1504 | <a href="../../../../package/pip/pip/" class="md-nav__link"> | |
1505 | pip | |
1506 | </a> | |
1507 | </li> | |
1508 | ||
1509 | ||
1510 | ||
1511 | ||
1512 | ||
1513 | ||
1514 | ||
1515 | <li class="md-nav__item"> | |
1516 | <a href="../../../../package/pip/script/" class="md-nav__link"> | |
1517 | script | |
1518 | </a> | |
1519 | </li> | |
1520 | ||
1521 | ||
1522 | ||
1523 | ||
1524 | ||
1525 | ||
1526 | ||
1527 | <li class="md-nav__item"> | |
1528 | <a href="../../../../package/pip/smiley/" class="md-nav__link"> | |
1529 | smiley | |
1530 | </a> | |
1531 | </li> | |
1532 | ||
1533 | ||
1534 | ||
1535 | ||
1536 | ||
1537 | ||
1538 | ||
1539 | <li class="md-nav__item"> | |
1540 | <a href="../../../../package/pip/sql/" class="md-nav__link"> | |
1541 | sql | |
1542 | </a> | |
1543 | </li> | |
1544 | ||
1545 | ||
1546 | ||
1547 | ||
1548 | ||
1549 | ||
1550 | ||
1551 | <li class="md-nav__item"> | |
1552 | <a href="../../../../package/pip/style/" class="md-nav__link"> | |
1553 | style | |
1554 | </a> | |
1555 | </li> | |
1556 | ||
1557 | ||
1558 | ||
1559 | ||
1560 | ||
1561 | ||
1562 | ||
1563 | <li class="md-nav__item"> | |
1564 | <a href="../../../../package/pip/template/" class="md-nav__link"> | |
1565 | template | |
1566 | </a> | |
1567 | </li> | |
1568 | ||
1569 | ||
1570 | ||
1571 | ||
1572 | ||
1573 | ||
1574 | ||
1575 | <li class="md-nav__item"> | |
1576 | <a href="../../../../package/pip/template-listener/" class="md-nav__link"> | |
1577 | templateListener | |
1578 | </a> | |
1579 | </li> | |
1580 | ||
1581 | ||
1582 | ||
1583 | ||
1584 | ||
1585 | ||
1586 | ||
1587 | <li class="md-nav__item"> | |
1588 | <a href="../../../../package/pip/user-group-option/" class="md-nav__link"> | |
1589 | userGroupOption | |
1590 | </a> | |
1591 | </li> | |
1592 | ||
1593 | ||
1594 | ||
1595 | ||
1596 | ||
1597 | ||
1598 | ||
1599 | <li class="md-nav__item"> | |
1600 | <a href="../../../../package/pip/user-menu/" class="md-nav__link"> | |
1601 | userMenu | |
1602 | </a> | |
1603 | </li> | |
1604 | ||
1605 | ||
1606 | ||
1607 | ||
1608 | ||
1609 | ||
1610 | ||
1611 | <li class="md-nav__item"> | |
1612 | <a href="../../../../package/pip/user-notification-event/" class="md-nav__link"> | |
1613 | userNotificationEvent | |
1614 | </a> | |
1615 | </li> | |
1616 | ||
1617 | ||
1618 | ||
1619 | ||
1620 | ||
1621 | ||
1622 | ||
1623 | <li class="md-nav__item"> | |
1624 | <a href="../../../../package/pip/user-option/" class="md-nav__link"> | |
1625 | userOption | |
1626 | </a> | |
1627 | </li> | |
1628 | ||
1629 | ||
1630 | ||
1631 | ||
1632 | ||
1633 | ||
1634 | ||
1635 | <li class="md-nav__item"> | |
1636 | <a href="../../../../package/pip/user-profile-menu/" class="md-nav__link"> | |
1637 | userProfileMenu | |
1638 | </a> | |
1639 | </li> | |
1640 | ||
1641 | ||
1642 | ||
1643 | </ul> | |
1644 | </nav> | |
1645 | </li> | |
1646 | ||
1647 | ||
1648 | ||
1649 | ||
1650 | ||
1651 | ||
1652 | ||
1653 | <li class="md-nav__item"> | |
1654 | <a href="../../../../package/database-php-api/" class="md-nav__link"> | |
1655 | Database PHP API | |
1656 | </a> | |
1657 | </li> | |
1658 | ||
1659 | ||
1660 | ||
1661 | </ul> | |
1662 | </nav> | |
1663 | </li> | |
1664 | ||
1665 | ||
1666 | ||
1667 | ||
1668 | ||
1669 | ||
1670 | ||
1671 | ||
1672 | ||
1673 | ||
1674 | ||
1675 | <li class="md-nav__item md-nav__item--nested"> | |
1676 | ||
1677 | ||
1678 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" > | |
1679 | ||
1680 | <label class="md-nav__link" for="__nav_6"> | |
1681 | Migration | |
1682 | <span class="md-nav__icon md-icon"></span> | |
1683 | </label> | |
1684 | <nav class="md-nav" aria-label="Migration" data-md-level="1"> | |
1685 | <label class="md-nav__title" for="__nav_6"> | |
1686 | <span class="md-nav__icon md-icon"></span> | |
1687 | Migration | |
1688 | </label> | |
1689 | <ul class="md-nav__list" data-md-scrollfix> | |
1690 | ||
1691 | ||
1692 | ||
1693 | ||
1694 | ||
1695 | ||
1696 | <li class="md-nav__item md-nav__item--nested"> | |
1697 | ||
1698 | ||
1699 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_1" type="checkbox" id="__nav_6_1" > | |
1700 | ||
1701 | <label class="md-nav__link" for="__nav_6_1"> | |
1702 | Migrating from WSC 5.3 | |
1703 | <span class="md-nav__icon md-icon"></span> | |
1704 | </label> | |
1705 | <nav class="md-nav" aria-label="Migrating from WSC 5.3" data-md-level="2"> | |
1706 | <label class="md-nav__title" for="__nav_6_1"> | |
1707 | <span class="md-nav__icon md-icon"></span> | |
1708 | Migrating from WSC 5.3 | |
1709 | </label> | |
1710 | <ul class="md-nav__list" data-md-scrollfix> | |
1711 | ||
1712 | ||
1713 | ||
1714 | ||
1715 | ||
1716 | <li class="md-nav__item"> | |
1717 | <a href="../../../../migration/wsc53/php/" class="md-nav__link"> | |
1718 | PHP API | |
1719 | </a> | |
1720 | </li> | |
1721 | ||
1722 | ||
1723 | ||
1724 | ||
1725 | ||
1726 | ||
1727 | ||
1728 | <li class="md-nav__item"> | |
1729 | <a href="../../../../migration/wsc53/session/" class="md-nav__link"> | |
1730 | Session Handling and Authentication | |
1731 | </a> | |
1732 | </li> | |
1733 | ||
1734 | ||
1735 | ||
1736 | ||
1737 | ||
1738 | ||
1739 | ||
1740 | <li class="md-nav__item"> | |
1741 | <a href="../../../../migration/wsc53/javascript/" class="md-nav__link"> | |
77efcd46 | 1742 | TypeScript and JavaScript |
0c5338dd TD |
1743 | </a> |
1744 | </li> | |
1745 | ||
1746 | ||
1747 | ||
1748 | ||
1749 | ||
1750 | ||
1751 | ||
1752 | <li class="md-nav__item"> | |
1753 | <a href="../../../../migration/wsc53/templates/" class="md-nav__link"> | |
1754 | Templates | |
1755 | </a> | |
1756 | </li> | |
1757 | ||
1758 | ||
1759 | ||
1760 | ||
1761 | ||
1762 | ||
1763 | ||
1764 | <li class="md-nav__item"> | |
1765 | <a href="../../../../migration/wsc53/libraries/" class="md-nav__link"> | |
1766 | Third Party Libraries | |
1767 | </a> | |
1768 | </li> | |
1769 | ||
1770 | ||
1771 | ||
1772 | </ul> | |
1773 | </nav> | |
1774 | </li> | |
1775 | ||
1776 | ||
1777 | ||
1778 | ||
1779 | ||
1780 | ||
1781 | ||
1782 | ||
1783 | <li class="md-nav__item md-nav__item--nested"> | |
1784 | ||
1785 | ||
1786 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_2" type="checkbox" id="__nav_6_2" > | |
1787 | ||
1788 | <label class="md-nav__link" for="__nav_6_2"> | |
1789 | Migrating from WSC 5.2 | |
1790 | <span class="md-nav__icon md-icon"></span> | |
1791 | </label> | |
1792 | <nav class="md-nav" aria-label="Migrating from WSC 5.2" data-md-level="2"> | |
1793 | <label class="md-nav__title" for="__nav_6_2"> | |
1794 | <span class="md-nav__icon md-icon"></span> | |
1795 | Migrating from WSC 5.2 | |
1796 | </label> | |
1797 | <ul class="md-nav__list" data-md-scrollfix> | |
1798 | ||
1799 | ||
1800 | ||
1801 | ||
1802 | ||
1803 | <li class="md-nav__item"> | |
1804 | <a href="../../../../migration/wsc52/php/" class="md-nav__link"> | |
1805 | PHP API | |
1806 | </a> | |
1807 | </li> | |
1808 | ||
1809 | ||
1810 | ||
1811 | ||
1812 | ||
1813 | ||
1814 | ||
1815 | <li class="md-nav__item"> | |
1816 | <a href="../../../../migration/wsc52/templates/" class="md-nav__link"> | |
1817 | Templates and Languages | |
1818 | </a> | |
1819 | </li> | |
1820 | ||
1821 | ||
1822 | ||
1823 | ||
1824 | ||
1825 | ||
1826 | ||
1827 | <li class="md-nav__item"> | |
1828 | <a href="../../../../migration/wsc52/libraries/" class="md-nav__link"> | |
1829 | Third Party Libraries | |
1830 | </a> | |
1831 | </li> | |
1832 | ||
1833 | ||
1834 | ||
1835 | </ul> | |
1836 | </nav> | |
1837 | </li> | |
1838 | ||
1839 | ||
1840 | ||
1841 | ||
1842 | ||
1843 | ||
1844 | ||
1845 | ||
1846 | <li class="md-nav__item md-nav__item--nested"> | |
1847 | ||
1848 | ||
1849 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_3" type="checkbox" id="__nav_6_3" > | |
1850 | ||
1851 | <label class="md-nav__link" for="__nav_6_3"> | |
1852 | Migrating from WSC 3.1 | |
1853 | <span class="md-nav__icon md-icon"></span> | |
1854 | </label> | |
1855 | <nav class="md-nav" aria-label="Migrating from WSC 3.1" data-md-level="2"> | |
1856 | <label class="md-nav__title" for="__nav_6_3"> | |
1857 | <span class="md-nav__icon md-icon"></span> | |
1858 | Migrating from WSC 3.1 | |
1859 | </label> | |
1860 | <ul class="md-nav__list" data-md-scrollfix> | |
1861 | ||
1862 | ||
1863 | ||
1864 | ||
1865 | ||
1866 | <li class="md-nav__item"> | |
1867 | <a href="../../../../migration/wsc31/php/" class="md-nav__link"> | |
1868 | PHP API | |
1869 | </a> | |
1870 | </li> | |
1871 | ||
1872 | ||
1873 | ||
1874 | </ul> | |
1875 | </nav> | |
1876 | </li> | |
1877 | ||
1878 | ||
1879 | ||
1880 | ||
1881 | ||
1882 | ||
1883 | ||
1884 | ||
1885 | <li class="md-nav__item md-nav__item--nested"> | |
1886 | ||
1887 | ||
1888 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_4" type="checkbox" id="__nav_6_4" > | |
1889 | ||
1890 | <label class="md-nav__link" for="__nav_6_4"> | |
1891 | Migrating from WSC 3.0 | |
1892 | <span class="md-nav__icon md-icon"></span> | |
1893 | </label> | |
1894 | <nav class="md-nav" aria-label="Migrating from WSC 3.0" data-md-level="2"> | |
1895 | <label class="md-nav__title" for="__nav_6_4"> | |
1896 | <span class="md-nav__icon md-icon"></span> | |
1897 | Migrating from WSC 3.0 | |
1898 | </label> | |
1899 | <ul class="md-nav__list" data-md-scrollfix> | |
1900 | ||
1901 | ||
1902 | ||
1903 | ||
1904 | ||
1905 | <li class="md-nav__item"> | |
1906 | <a href="../../../../migration/wsc30/php/" class="md-nav__link"> | |
1907 | PHP API | |
1908 | </a> | |
1909 | </li> | |
1910 | ||
1911 | ||
1912 | ||
1913 | ||
1914 | ||
1915 | ||
1916 | ||
1917 | <li class="md-nav__item"> | |
1918 | <a href="../../../../migration/wsc30/javascript/" class="md-nav__link"> | |
1919 | JavaScript API | |
1920 | </a> | |
1921 | </li> | |
1922 | ||
1923 | ||
1924 | ||
1925 | ||
1926 | ||
1927 | ||
1928 | ||
1929 | <li class="md-nav__item"> | |
1930 | <a href="../../../../migration/wsc30/templates/" class="md-nav__link"> | |
1931 | Templates | |
1932 | </a> | |
1933 | </li> | |
1934 | ||
1935 | ||
1936 | ||
1937 | ||
1938 | ||
1939 | ||
1940 | ||
1941 | <li class="md-nav__item"> | |
1942 | <a href="../../../../migration/wsc30/css/" class="md-nav__link"> | |
1943 | CSS | |
1944 | </a> | |
1945 | </li> | |
1946 | ||
1947 | ||
1948 | ||
1949 | ||
1950 | ||
1951 | ||
1952 | ||
1953 | <li class="md-nav__item"> | |
1954 | <a href="../../../../migration/wsc30/package/" class="md-nav__link"> | |
1955 | Package Components | |
1956 | </a> | |
1957 | </li> | |
1958 | ||
1959 | ||
1960 | ||
1961 | </ul> | |
1962 | </nav> | |
1963 | </li> | |
1964 | ||
1965 | ||
1966 | ||
1967 | ||
1968 | ||
1969 | ||
1970 | ||
1971 | ||
1972 | <li class="md-nav__item md-nav__item--nested"> | |
1973 | ||
1974 | ||
1975 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_5" type="checkbox" id="__nav_6_5" > | |
1976 | ||
1977 | <label class="md-nav__link" for="__nav_6_5"> | |
1978 | Migrating from WCF 2.1 | |
1979 | <span class="md-nav__icon md-icon"></span> | |
1980 | </label> | |
1981 | <nav class="md-nav" aria-label="Migrating from WCF 2.1" data-md-level="2"> | |
1982 | <label class="md-nav__title" for="__nav_6_5"> | |
1983 | <span class="md-nav__icon md-icon"></span> | |
1984 | Migrating from WCF 2.1 | |
1985 | </label> | |
1986 | <ul class="md-nav__list" data-md-scrollfix> | |
1987 | ||
1988 | ||
1989 | ||
1990 | ||
1991 | ||
1992 | <li class="md-nav__item"> | |
1993 | <a href="../../../../migration/wcf21/php/" class="md-nav__link"> | |
1994 | PHP API | |
1995 | </a> | |
1996 | </li> | |
1997 | ||
1998 | ||
1999 | ||
2000 | ||
2001 | ||
2002 | ||
2003 | ||
2004 | <li class="md-nav__item"> | |
2005 | <a href="../../../../migration/wcf21/templates/" class="md-nav__link"> | |
2006 | Templates | |
2007 | </a> | |
2008 | </li> | |
2009 | ||
2010 | ||
2011 | ||
2012 | ||
2013 | ||
2014 | ||
2015 | ||
2016 | <li class="md-nav__item"> | |
2017 | <a href="../../../../migration/wcf21/css/" class="md-nav__link"> | |
2018 | CSS | |
2019 | </a> | |
2020 | </li> | |
2021 | ||
2022 | ||
2023 | ||
2024 | ||
2025 | ||
2026 | ||
2027 | ||
2028 | <li class="md-nav__item"> | |
2029 | <a href="../../../../migration/wcf21/package/" class="md-nav__link"> | |
2030 | Package Components | |
2031 | </a> | |
2032 | </li> | |
2033 | ||
2034 | ||
2035 | ||
2036 | </ul> | |
2037 | </nav> | |
2038 | </li> | |
2039 | ||
2040 | ||
2041 | ||
2042 | </ul> | |
2043 | </nav> | |
2044 | </li> | |
2045 | ||
2046 | ||
2047 | ||
2048 | ||
2049 | ||
2050 | ||
2051 | ||
2052 | ||
2053 | ||
2054 | ||
2055 | ||
2056 | <li class="md-nav__item md-nav__item--nested"> | |
2057 | ||
2058 | ||
2059 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" > | |
2060 | ||
2061 | <label class="md-nav__link" for="__nav_7"> | |
2062 | Tutorials | |
2063 | <span class="md-nav__icon md-icon"></span> | |
2064 | </label> | |
2065 | <nav class="md-nav" aria-label="Tutorials" data-md-level="1"> | |
2066 | <label class="md-nav__title" for="__nav_7"> | |
2067 | <span class="md-nav__icon md-icon"></span> | |
2068 | Tutorials | |
2069 | </label> | |
2070 | <ul class="md-nav__list" data-md-scrollfix> | |
2071 | ||
2072 | ||
2073 | ||
2074 | ||
2075 | ||
2076 | ||
2077 | <li class="md-nav__item md-nav__item--nested"> | |
2078 | ||
2079 | ||
2080 | <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7_1" type="checkbox" id="__nav_7_1" > | |
2081 | ||
2082 | <label class="md-nav__link" for="__nav_7_1"> | |
2083 | Tutorial Series | |
2084 | <span class="md-nav__icon md-icon"></span> | |
2085 | </label> | |
2086 | <nav class="md-nav" aria-label="Tutorial Series" data-md-level="2"> | |
2087 | <label class="md-nav__title" for="__nav_7_1"> | |
2088 | <span class="md-nav__icon md-icon"></span> | |
2089 | Tutorial Series | |
2090 | </label> | |
2091 | <ul class="md-nav__list" data-md-scrollfix> | |
2092 | ||
2093 | ||
2094 | ||
2095 | ||
2096 | ||
2097 | <li class="md-nav__item"> | |
2098 | <a href="../../../../tutorial/series/overview/" class="md-nav__link"> | |
2099 | Overview | |
2100 | </a> | |
2101 | </li> | |
2102 | ||
2103 | ||
2104 | ||
2105 | ||
2106 | ||
2107 | ||
2108 | ||
2109 | <li class="md-nav__item"> | |
2110 | <a href="../../../../tutorial/series/part_1/" class="md-nav__link"> | |
2111 | Part 1 | |
2112 | </a> | |
2113 | </li> | |
2114 | ||
2115 | ||
2116 | ||
2117 | ||
2118 | ||
2119 | ||
2120 | ||
2121 | <li class="md-nav__item"> | |
2122 | <a href="../../../../tutorial/series/part_2/" class="md-nav__link"> | |
2123 | Part 2 | |
2124 | </a> | |
2125 | </li> | |
2126 | ||
2127 | ||
2128 | ||
2129 | ||
2130 | ||
2131 | ||
2132 | ||
2133 | <li class="md-nav__item"> | |
2134 | <a href="../../../../tutorial/series/part_3/" class="md-nav__link"> | |
2135 | Part 3 | |
2136 | </a> | |
2137 | </li> | |
2138 | ||
2139 | ||
2140 | ||
2141 | </ul> | |
2142 | </nav> | |
2143 | </li> | |
2144 | ||
2145 | ||
2146 | ||
2147 | </ul> | |
2148 | </nav> | |
2149 | </li> | |
2150 | ||
2151 | ||
2152 | ||
2153 | </ul> | |
2154 | </nav> | |
2155 | </div> | |
2156 | </div> | |
2157 | </div> | |
2158 | ||
2159 | ||
2160 | ||
2161 | <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > | |
2162 | <div class="md-sidebar__scrollwrap"> | |
2163 | <div class="md-sidebar__inner"> | |
2164 | ||
2165 | <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |
2166 | ||
2167 | ||
2168 | ||
2169 | ||
2170 | ||
2171 | <label class="md-nav__title" for="__toc"> | |
2172 | <span class="md-nav__icon md-icon"></span> | |
2173 | Table of contents | |
2174 | </label> | |
2175 | <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> | |
2176 | ||
2177 | <li class="md-nav__item"> | |
2178 | <a href="#form-nodes" class="md-nav__link"> | |
2179 | Form Nodes | |
2180 | </a> | |
2181 | ||
2182 | <nav class="md-nav" aria-label="Form Nodes"> | |
2183 | <ul class="md-nav__list"> | |
2184 | ||
2185 | <li class="md-nav__item"> | |
2186 | <a href="#iformnode" class="md-nav__link"> | |
2187 | IFormNode | |
2188 | </a> | |
2189 | ||
2190 | </li> | |
2191 | ||
2192 | <li class="md-nav__item"> | |
2193 | <a href="#iformchildnode" class="md-nav__link"> | |
2194 | IFormChildNode | |
2195 | </a> | |
2196 | ||
2197 | </li> | |
2198 | ||
2199 | <li class="md-nav__item"> | |
2200 | <a href="#iformparentnode" class="md-nav__link"> | |
2201 | IFormParentNode | |
2202 | </a> | |
2203 | ||
2204 | </li> | |
2205 | ||
2206 | <li class="md-nav__item"> | |
2207 | <a href="#iformelement" class="md-nav__link"> | |
2208 | IFormElement | |
2209 | </a> | |
2210 | ||
2211 | </li> | |
2212 | ||
2213 | <li class="md-nav__item"> | |
2214 | <a href="#iobjecttypeformnode" class="md-nav__link"> | |
2215 | IObjectTypeFormNode | |
2216 | </a> | |
2217 | ||
2218 | </li> | |
2219 | ||
2220 | <li class="md-nav__item"> | |
2221 | <a href="#customformnode" class="md-nav__link"> | |
2222 | CustomFormNode | |
2223 | </a> | |
2224 | ||
2225 | </li> | |
2226 | ||
2227 | <li class="md-nav__item"> | |
2228 | <a href="#templateformnode" class="md-nav__link"> | |
2229 | TemplateFormNode | |
2230 | </a> | |
2231 | ||
2232 | </li> | |
2233 | ||
2234 | </ul> | |
2235 | </nav> | |
2236 | ||
2237 | </li> | |
2238 | ||
2239 | <li class="md-nav__item"> | |
2240 | <a href="#form-document" class="md-nav__link"> | |
2241 | Form Document | |
2242 | </a> | |
2243 | ||
2244 | </li> | |
2245 | ||
2246 | <li class="md-nav__item"> | |
2247 | <a href="#form-button" class="md-nav__link"> | |
2248 | Form Button | |
2249 | </a> | |
2250 | ||
2251 | </li> | |
2252 | ||
2253 | <li class="md-nav__item"> | |
2254 | <a href="#form-container" class="md-nav__link"> | |
2255 | Form Container | |
2256 | </a> | |
2257 | ||
2258 | </li> | |
2259 | ||
2260 | <li class="md-nav__item"> | |
2261 | <a href="#form-field" class="md-nav__link"> | |
2262 | Form Field | |
2263 | </a> | |
2264 | ||
2265 | <nav class="md-nav" aria-label="Form Field"> | |
2266 | <ul class="md-nav__list"> | |
2267 | ||
2268 | <li class="md-nav__item"> | |
2269 | <a href="#form-field-interfaces-and-traits" class="md-nav__link"> | |
2270 | Form Field Interfaces and Traits | |
2271 | </a> | |
2272 | ||
2273 | <nav class="md-nav" aria-label="Form Field Interfaces and Traits"> | |
2274 | <ul class="md-nav__list"> | |
2275 | ||
2276 | <li class="md-nav__item"> | |
2277 | <a href="#iattributeformfield" class="md-nav__link"> | |
2278 | IAttributeFormField | |
2279 | </a> | |
2280 | ||
2281 | </li> | |
2282 | ||
2283 | <li class="md-nav__item"> | |
2284 | <a href="#iautocompleteformfield" class="md-nav__link"> | |
2285 | IAutoCompleteFormField | |
2286 | </a> | |
2287 | ||
2288 | </li> | |
2289 | ||
2290 | <li class="md-nav__item"> | |
2291 | <a href="#iautofocusformfield" class="md-nav__link"> | |
2292 | IAutoFocusFormField | |
2293 | </a> | |
2294 | ||
2295 | </li> | |
2296 | ||
2297 | <li class="md-nav__item"> | |
2298 | <a href="#icssclassformfield" class="md-nav__link"> | |
2299 | ICssClassFormField | |
2300 | </a> | |
2301 | ||
2302 | </li> | |
2303 | ||
2304 | <li class="md-nav__item"> | |
2305 | <a href="#ifileformfield" class="md-nav__link"> | |
2306 | IFileFormField | |
2307 | </a> | |
2308 | ||
2309 | </li> | |
2310 | ||
2311 | <li class="md-nav__item"> | |
2312 | <a href="#ifilterableselectionformfield" class="md-nav__link"> | |
2313 | IFilterableSelectionFormField | |
2314 | </a> | |
2315 | ||
2316 | </li> | |
2317 | ||
2318 | <li class="md-nav__item"> | |
2319 | <a href="#ii18nformfield" class="md-nav__link"> | |
2320 | II18nFormField | |
2321 | </a> | |
2322 | ||
2323 | </li> | |
2324 | ||
2325 | <li class="md-nav__item"> | |
2326 | <a href="#iimmutableformfield" class="md-nav__link"> | |
2327 | IImmutableFormField | |
2328 | </a> | |
2329 | ||
2330 | </li> | |
2331 | ||
2332 | <li class="md-nav__item"> | |
2333 | <a href="#iinputmodeformfield" class="md-nav__link"> | |
2334 | IInputModeFormField | |
2335 | </a> | |
2336 | ||
2337 | </li> | |
2338 | ||
2339 | <li class="md-nav__item"> | |
2340 | <a href="#imaximumformfield" class="md-nav__link"> | |
2341 | IMaximumFormField | |
2342 | </a> | |
2343 | ||
2344 | </li> | |
2345 | ||
2346 | <li class="md-nav__item"> | |
2347 | <a href="#imaximumlengthformfield" class="md-nav__link"> | |
2348 | IMaximumLengthFormField | |
2349 | </a> | |
2350 | ||
2351 | </li> | |
2352 | ||
2353 | <li class="md-nav__item"> | |
2354 | <a href="#iminimumformfield" class="md-nav__link"> | |
2355 | IMinimumFormField | |
2356 | </a> | |
2357 | ||
2358 | </li> | |
2359 | ||
2360 | <li class="md-nav__item"> | |
2361 | <a href="#iminimumlengthformfield" class="md-nav__link"> | |
2362 | IMinimumLengthFormField | |
2363 | </a> | |
2364 | ||
2365 | </li> | |
2366 | ||
2367 | <li class="md-nav__item"> | |
2368 | <a href="#imultipleformfield" class="md-nav__link"> | |
2369 | IMultipleFormField | |
2370 | </a> | |
2371 | ||
2372 | </li> | |
2373 | ||
2374 | <li class="md-nav__item"> | |
2375 | <a href="#inullableformfield" class="md-nav__link"> | |
2376 | INullableFormField | |
2377 | </a> | |
2378 | ||
2379 | </li> | |
2380 | ||
2381 | <li class="md-nav__item"> | |
2382 | <a href="#ipackagesformfield" class="md-nav__link"> | |
2383 | IPackagesFormField | |
2384 | </a> | |
2385 | ||
2386 | </li> | |
2387 | ||
2388 | <li class="md-nav__item"> | |
2389 | <a href="#ipatternformfield" class="md-nav__link"> | |
2390 | IPatternFormField | |
2391 | </a> | |
2392 | ||
2393 | </li> | |
2394 | ||
2395 | <li class="md-nav__item"> | |
2396 | <a href="#iplaceholderformfield" class="md-nav__link"> | |
2397 | IPlaceholderFormField | |
2398 | </a> | |
2399 | ||
2400 | </li> | |
2401 | ||
2402 | <li class="md-nav__item"> | |
2403 | <a href="#iselectionformfield" class="md-nav__link"> | |
2404 | ISelectionFormField | |
2405 | </a> | |
2406 | ||
2407 | </li> | |
2408 | ||
2409 | <li class="md-nav__item"> | |
2410 | <a href="#isuffixedformfield" class="md-nav__link"> | |
2411 | ISuffixedFormField | |
2412 | </a> | |
2413 | ||
2414 | </li> | |
2415 | ||
2416 | <li class="md-nav__item"> | |
2417 | <a href="#tdefaultidformfield" class="md-nav__link"> | |
2418 | TDefaultIdFormField | |
2419 | </a> | |
2420 | ||
2421 | </li> | |
2422 | ||
2423 | </ul> | |
2424 | </nav> | |
2425 | ||
2426 | </li> | |
2427 | ||
2428 | </ul> | |
2429 | </nav> | |
2430 | ||
2431 | </li> | |
2432 | ||
2433 | <li class="md-nav__item"> | |
2434 | <a href="#displaying-forms" class="md-nav__link"> | |
2435 | Displaying Forms | |
2436 | </a> | |
2437 | ||
2438 | </li> | |
2439 | ||
2440 | </ul> | |
2441 | ||
2442 | </nav> | |
2443 | </div> | |
2444 | </div> | |
2445 | </div> | |
2446 | ||
2447 | ||
2448 | <div class="md-content" data-md-component="content"> | |
2449 | <article class="md-content__inner md-typeset"> | |
2450 | ||
2451 | ||
9b8bddda | 2452 | <a href="https://github.com/WoltLab/docs.woltlab.com/edit/5.4/docs/php/api/form_builder/structure.md" title="Edit this page" class="md-content__button md-icon"> |
7124f4cb WG |
2453 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg> |
2454 | </a> | |
2455 | ||
0c5338dd TD |
2456 | |
2457 | <h1 id="structure-of-form-builder">Structure of Form Builder<a class="headerlink" href="#structure-of-form-builder" title="Permanent link">#</a></h1> | |
2458 | <p>Forms built with form builder consist of three major structural elements listed from top to bottom:</p> | |
2459 | <ol> | |
2460 | <li>form document,</li> | |
2461 | <li>form container,</li> | |
2462 | <li>form field.</li> | |
2463 | </ol> | |
2464 | <p>The basis for all three elements are form nodes.</p> | |
2465 | <div class="admonition info"> | |
2466 | <p class="admonition-title">The form builder API uses fluent interfaces heavily, meaning that unless a method is a getter, it generally returns the objects itself to support method chaining.</p> | |
2467 | </div> | |
2468 | <h2 id="form-nodes">Form Nodes<a class="headerlink" href="#form-nodes" title="Permanent link">#</a></h2> | |
2469 | <ul> | |
2470 | <li><code>IFormNode</code> is the base interface that any node of a form has to implement.</li> | |
2471 | <li><code>IFormChildNode</code> extends <code>IFormNode</code> for such elements of a form that can be a child node to a parent node.</li> | |
2472 | <li><code>IFormParentNode</code> extends <code>IFormNode</code> for such elements of a form that can be a parent to child nodes.</li> | |
2473 | <li><code>IFormElement</code> extends <code>IFormNode</code> for such elements of a form that can have a description and a label.</li> | |
2474 | </ul> | |
2475 | <h3 id="iformnode"><code>IFormNode</code><a class="headerlink" href="#iformnode" title="Permanent link">#</a></h3> | |
2476 | <p><code>IFormNode</code> is the base interface that any node of a form has to implement and it requires the following methods:</p> | |
2477 | <ul> | |
2478 | <li><code>addClass($class)</code>, <code>addClasses(array $classes)</code>, <code>removeClass($class)</code>, <code>getClasses()</code>, and <code>hasClass($class)</code> add, remove, get, and check for CSS classes of the HTML element representing the form node. | |
2479 | If the form node consists of multiple (nested) HTML elements, the classes are generally added to the top element. | |
2480 | <code>static validateClass($class)</code> is used to check if a given CSS class is valid. | |
2481 | By default, a form node has no CSS classes.</li> | |
2482 | <li><code>addDependency(IFormFieldDependency $dependency)</code>, <code>removeDependency($dependencyId)</code>, <code>getDependencies()</code>, and <code>hasDependency($dependencyId)</code> add, remove, get, and check for dependencies of this form node on other form fields. | |
2483 | <code>checkDependencies()</code> checks if <strong>all</strong> of the node’s dependencies are met and returns a boolean value reflecting the check’s result. | |
2484 | The <a href="../dependencies/">form builder dependency documentation</a> provides more detailed information about dependencies and how they work. | |
2485 | By default, a form node has no dependencies.</li> | |
2486 | <li><code>attribute($name, $value = null)</code>, <code>removeAttribute($name)</code>, <code>getAttribute($name)</code>, <code>getAttributes()</code>, <code>hasAttribute($name)</code> add, remove, get, and check for attributes of the HTML element represting the form node. | |
2487 | The attributes are added to the same element that the CSS classes are added to. | |
2488 | <code>static validateAttribute($name)</code> is used to check if a given attribute is valid. | |
2489 | By default, a form node has no attributes.</li> | |
2490 | <li><code>available($available = true)</code> and <code>isAvailable()</code> can be used to set and check if the node is available. | |
2491 | The availability functionality can be used to easily toggle form nodes based, for example, on options without having to create a condition to append the relevant. | |
2492 | This way of checking availability makes it easier to set up forms. | |
2493 | By default, every form node is available.</li> | |
2494 | </ul> | |
2495 | <p>The following aspects are important when working with availability:</p> | |
2496 | <ul> | |
2497 | <li>Unavailable fields produce no output, their value is not read, they are not validated and they are not checked for save values.</li> | |
2498 | <li>Form fields are also able to mark themselves as unavailable, for example, a selection field without any options.</li> | |
2499 | <li>Form containers are automatically unavailable if they contain no available children.</li> | |
2500 | </ul> | |
2501 | <p>Availability sets the static availability for form nodes that does not change during the lifetime of a form. | |
2502 | In contrast, dependencies represent a dynamic availability for form nodes that depends on the current value of certain form fields. | |
2503 | - <code>cleanup()</code> is called after the whole form is not used anymore to reset other APIs if the form fields depends on them and they expect such a reset. | |
2504 | This method is not intended to clean up the form field’s value as a new form document object is created to show a clean form. | |
2505 | - <code>getDocument()</code> returns the <code>IFormDocument</code> object the node belongs to. | |
2506 | (As <code>IFormDocument</code> extends <code>IFormNode</code>, form document objects simply return themselves.) | |
2507 | - <code>getHtml()</code> returns the HTML representation of the node. | |
2508 | <code>getHtmlVariables()</code> return template variables (in addition to the form node itself) to render the node’s HTML representation. | |
2509 | - <code>id($id)</code> and <code>getId()</code> set and get the id of the form node. | |
2510 | Every id has to be unique within a form. | |
2511 | <code>getPrefixedId()</code> returns the prefixed version of the node’s id (see <code>IFormDocument::getPrefix()</code> and <code>IFormDocument::prefix()</code>). | |
2512 | <code>static validateId($id)</code> is used to check if a given id is valid. | |
2513 | - <code>populate()</code> is called by <code>IFormDocument::build()</code> after all form nodes have been added. | |
2514 | This method should finilize the initialization of the form node after all parent-child relations of the form document have been established. | |
2515 | This method is needed because during the construction of a form node, it neither knows the form document it will belong to nor does it know its parent. | |
2516 | - <code>validate()</code> checks, after the form is submitted, if the form node is valid. | |
2517 | A form node with children is valid if all of its child nodes are valid. | |
2518 | A form field is valid if its value is valid. | |
2519 | - <code>static create($id)</code> is the factory method that has to be used to create new form nodes with the given id.</p> | |
2520 | <p><code>TFormNode</code> provides a default implementation of most of these methods.</p> | |
2521 | <h3 id="iformchildnode"><code>IFormChildNode</code><a class="headerlink" href="#iformchildnode" title="Permanent link">#</a></h3> | |
2522 | <p><code>IFormChildNode</code> extends <code>IFormNode</code> for such elements of a form that can be a child node to a parent node and it requires the <code>parent(IFormParentNode $parentNode)</code> and <code>getParent()</code> methods used to set and get the node’s parent node. | |
2523 | <code>TFormChildNode</code> provides a default implementation of these two methods and also of <code>IFormNode::getDocument()</code>.</p> | |
2524 | <h3 id="iformparentnode"><code>IFormParentNode</code><a class="headerlink" href="#iformparentnode" title="Permanent link">#</a></h3> | |
2525 | <p><code>IFormParentNode</code> extends <code>IFormNode</code> for such elements of a form that can be a parent to child nodes. | |
2526 | Additionally, the interface also extends <code>\Countable</code> and <code>\RecursiveIterator</code>. | |
2527 | The interface requires the following methods:</p> | |
2528 | <ul> | |
2529 | <li><code>appendChild(IFormChildNode $child)</code>, <code>appendChildren(array $children)</code>, <code>insertAfter(IFormChildNode $child, $referenceNodeId)</code>, and <code>insertBefore(IFormChildNode $child, $referenceNodeId)</code> are used to insert new children either at the end or at specific positions. | |
2530 | <code>validateChild(IFormChildNode $child)</code> is used to check if a given child node can be added. | |
2531 | A child node cannot be added if it would cause an id to be used twice.</li> | |
2532 | <li><code>children()</code> returns the direct children of a form node.</li> | |
2533 | <li><code>getIterator()</code> return a recursive iterator for a form node.</li> | |
2534 | <li><code>getNodeById($nodeId)</code> returns the node with the given id by searching for it in the node’s children and recursively in all of their children. | |
2535 | <code>contains($nodeId)</code> can be used to simply check if a node with the given id exists.</li> | |
2536 | <li><code>hasValidationErrors()</code> checks if a form node or any of its children has a validation error (see <code>IFormField::getValidationErrors()</code>).</li> | |
2537 | <li><code>readValues()</code> recursively calls <code>IFormParentNode::readValues()</code> and <code>IFormField::readValue()</code> on its children.</li> | |
2538 | </ul> | |
2539 | <h3 id="iformelement"><code>IFormElement</code><a class="headerlink" href="#iformelement" title="Permanent link">#</a></h3> | |
2540 | <p><code>IFormElement</code> extends <code>IFormNode</code> for such elements of a form that can have a description and a label and it requires the following methods:</p> | |
2541 | <ul> | |
2542 | <li><code>label($languageItem = null, array $variables = [])</code> and <code>getLabel()</code> can be used to set and get the label of the form element. | |
2543 | <code>requiresLabel()</code> can be checked if the form element requires a label. | |
2544 | A label-less form element that requires a label will prevent the form from being rendered by throwing an exception.</li> | |
2545 | <li><code>description($languageItem = null, array $variables = [])</code> and <code>getDescription()</code> can be used to set and get the description of the form element.</li> | |
2546 | </ul> | |
2547 | <h3 id="iobjecttypeformnode"><code>IObjectTypeFormNode</code><a class="headerlink" href="#iobjecttypeformnode" title="Permanent link">#</a></h3> | |
2548 | <p><code>IObjectTypeFormField</code> has to be implemented by form nodes that rely on a object type of a specific object type definition in order to function. | |
2549 | The implementing class has to implement the methods <code>objectType($objectType)</code>, <code>getObjectType()</code>, and <code>getObjectTypeDefinition()</code>. | |
2550 | <code>TObjectTypeFormNode</code> provides a default implementation of these three methods.</p> | |
2551 | <h3 id="customformnode"><code>CustomFormNode</code><a class="headerlink" href="#customformnode" title="Permanent link">#</a></h3> | |
2552 | <p><code>CustomFormNode</code> is a form node whose contents can be set directly via <code>content($content)</code>.</p> | |
2553 | <div class="admonition warning"> | |
2554 | <p class="admonition-title">This class should generally not be relied on. Instead, <code>TemplateFormNode</code> should be used.</p> | |
2555 | </div> | |
2556 | <h3 id="templateformnode"><code>TemplateFormNode</code><a class="headerlink" href="#templateformnode" title="Permanent link">#</a></h3> | |
2557 | <p><code>TemplateFormNode</code> is a form node whose contents are read from a template. | |
2558 | <code>TemplateFormNode</code> has the following additional methods:</p> | |
2559 | <ul> | |
2560 | <li><code>application($application)</code> and <code>getApplicaton()</code> can be used to set and get the abbreviation of the application the shown template belongs to. | |
2561 | If no template has been set explicitly, <code>getApplicaton()</code> returns <code>wcf</code>.</li> | |
2562 | <li><code>templateName($templateName)</code> and <code>getTemplateName()</code> can be used to set and get the name of the template containing the node contents. | |
2563 | If no template has been set and the node is rendered, an exception will be thrown.</li> | |
2564 | <li><code>variables(array $variables)</code> and <code>getVariables()</code> can be used to set and get additional variables passed to the template.</li> | |
2565 | </ul> | |
2566 | <h2 id="form-document">Form Document<a class="headerlink" href="#form-document" title="Permanent link">#</a></h2> | |
2567 | <p>A form document object represents the form as a whole and has to implement the <code>IFormDocument</code> interface. | |
2568 | WoltLab Suite provides a default implementation with the <code>FormDocument</code> class. | |
2569 | <code>IFormDocument</code> should not be implemented directly but instead <code>FormDocument</code> should be extended to avoid issues if the <code>IFormDocument</code> interface changes in the future.</p> | |
2570 | <p><code>IFormDocument</code> extends <code>IFormParentNode</code> and requires the following additional methods:</p> | |
2571 | <ul> | |
2572 | <li><code>action($action)</code> and <code>getAction()</code> can be used set and get the <code>action</code> attribute of the <code><form></code> HTML element.</li> | |
2573 | <li><code>addButton(IFormButton $button)</code> and <code>getButtons()</code> can be used add and get form buttons that are shown at the bottom of the form. | |
2574 | <code>addDefaultButton($addDefaultButton)</code> and <code>hasDefaultButton()</code> can be used to set and check if the form has the default button which is added by default unless specified otherwise. | |
2575 | Each implementing class may define its own default button. | |
2576 | <code>FormDocument</code> has a button with id <code>submitButton</code>, label <code>wcf.global.button.submit</code>, access key <code>s</code>, and CSS class <code>buttonPrimary</code> as its default button. </li> | |
2577 | <li><code>ajax($ajax)</code> and <code>isAjax()</code> can be used to set and check if the form document is requested via an AJAX request or processes data via an AJAX request. | |
2578 | These methods are helpful for form fields that behave differently when providing data via AJAX.</li> | |
2579 | <li><code>build()</code> has to be called once after all nodes have been added to this document to trigger <code>IFormNode::populate()</code>.</li> | |
2580 | <li> | |
2581 | <p><code>formMode($formMode)</code> and <code>getFormMode()</code> sets the form mode. | |
2582 | Possible form modes are:</p> | |
2583 | </li> | |
2584 | <li> | |
2585 | <p><code>IFormDocument::FORM_MODE_CREATE</code> has to be used when the form is used to create a new object.</p> | |
2586 | </li> | |
2587 | <li><code>IFormDocument::FORM_MODE_UPDATE</code> has to be used when the form is used to edit an existing object.</li> | |
2588 | <li><code>getData()</code> returns the array containing the form data and which is passed as the <code>$parameters</code> argument of the constructor of a database object action object.</li> | |
2589 | <li><code>getDataHandler()</code> returns the data handler for this document that is used to process the field data into a parameters array for the constructor of a database object action object.</li> | |
2590 | <li><code>getEnctype()</code> returns the encoding type of the form. | |
2591 | If the form contains a <code>IFileFormField</code>, <code>multipart/form-data</code> is returned, otherwise <code>null</code> is returned.</li> | |
2592 | <li><code>loadValues(array $data, IStorableObject $object)</code> is used when editing an existing object to set the form field values by calling <code>IFormField::loadValue()</code> for all form fields. | |
2593 | Additionally, the form mode is set to <code>IFormDocument::FORM_MODE_UPDATE</code>.</li> | |
2594 | <li><span class="label label-info">5.4+</span> <code>markRequiredFields(bool $markRequiredFields = true): self</code> and <code>marksRequiredFields(): bool</code> can be used to set and check whether fields that are required are marked (with an asterisk in the label) in the output.</li> | |
2595 | <li><code>method($method)</code> and <code>getMethod()</code> can be used to set and get the <code>method</code> attribute of the <code><form></code> HTML element. | |
2596 | By default, the method is <code>post</code>.</li> | |
2597 | <li><code>prefix($prefix)</code> and <code>getPrefix()</code> can be used to set and get a global form prefix that is prepended to form elements’ names and ids to avoid conflicts with other forms. | |
2598 | By default, the prefix is an empty string. | |
2599 | If a prefix of <code>foo</code> is set, <code>getPrefix()</code> returns <code>foo_</code> (additional trailing underscore).</li> | |
2600 | <li><code>requestData(array $requestData)</code>, <code>getRequestData($index = null)</code>, and <code>hasRequestData($index = null)</code> can be used to set, get and check for specific request data. | |
2601 | In most cases, the relevant request data is the <code>$_POST</code> array. | |
2602 | In default AJAX requests handled by database object actions, however, the request data generally is in <code>AbstractDatabaseObjectAction::$parameters</code>. | |
2603 | By default, <code>$_POST</code> is the request data.</li> | |
2604 | </ul> | |
2605 | <p>The last aspect is relevant for <code>DialogFormDocument</code> objects. | |
2606 | <code>DialogFormDocument</code> is a specialized class for forms in dialogs that, in contrast to <code>FormDocument</code> do not require an <code>action</code> to be set. | |
2607 | Additionally, <code>DialogFormDocument</code> provides the <code>cancelable($cancelable = true)</code> and <code>isCancelable()</code> methods used to determine if the dialog from can be canceled. | |
2608 | By default, dialog forms are cancelable.</p> | |
2609 | <h2 id="form-button">Form Button<a class="headerlink" href="#form-button" title="Permanent link">#</a></h2> | |
2610 | <p>A form button object represents a button shown at the end of the form that, for example, submits the form. | |
2611 | Every form button has to implement the <code>IFormButton</code> interface that extends <code>IFormChildNode</code> and <code>IFormElement</code>. | |
2612 | <code>IFormButton</code> requires four methods to be implemented:</p> | |
2613 | <ul> | |
2614 | <li><code>accessKey($accessKey)</code> and <code>getAccessKey()</code> can be used to set and get the access key with which the form button can be activated. | |
2615 | By default, form buttons have no access key set.</li> | |
2616 | <li><code>submit($submitButton)</code> and <code>isSubmit()</code> can be used to set and check if the form button is a submit button. | |
2617 | A submit button is an <code>input[type=submit]</code> element. | |
2618 | Otherwise, the button is a <code>button</code> element. </li> | |
2619 | </ul> | |
2620 | <h2 id="form-container">Form Container<a class="headerlink" href="#form-container" title="Permanent link">#</a></h2> | |
2621 | <p>A form container object represents a container for other form containers or form field directly. | |
2622 | Every form container has to implement the <code>IFormContainer</code> interface which requires the following method:</p> | |
2623 | <ul> | |
2624 | <li><code>loadValues(array $data, IStorableObject $object)</code> is called by <code>IFormDocument::loadValuesFromObject()</code> to inform the container that object data is loaded. | |
2625 | This method is <em>not</em> intended to generally call <code>IFormField::loadValues()</code> on its form field children as these methods are already called by <code>IFormDocument::loadValuesFromObject()</code>. | |
2626 | This method is intended for specialized form containers with more complex logic.</li> | |
2627 | </ul> | |
2628 | <p>There are multiple default container implementations:</p> | |
2629 | <ol> | |
2630 | <li><code>FormContainer</code> is the default implementation of <code>IFormContainer</code>.</li> | |
2631 | <li><code>TabMenuFormContainer</code> represents the container of tab menu, while</li> | |
2632 | <li><code>TabFormContainer</code> represents a tab of a tab menu and</li> | |
2633 | <li><code>TabTabMenuFormContainer</code> represents a tab of a tab menu that itself contains a tab menu.</li> | |
2634 | <li>The children of <code>RowFormContainer</code> are shown in a row and should use <code>col-*</code> classes.</li> | |
2635 | <li>The children of <code>RowFormFieldContainer</code> are also shown in a row but does not show the labels and descriptions of the individual form fields. | |
2636 | Instead of the individual labels and descriptions, the container's label and description is shown and both span all of fields.</li> | |
2637 | <li><code>SuffixFormFieldContainer</code> can be used for one form field with a second selection form field used as a suffix.</li> | |
2638 | </ol> | |
2639 | <p>The methods of the interfaces that <code>FormContainer</code> is implementing are well documented, but here is a short overview of the most important methods when setting up a form or extending a form with an event listener:</p> | |
2640 | <ul> | |
2641 | <li><code>appendChild(IFormChildNode $child)</code>, <code>appendChildren(array $children)</code>, and <code>insertBefore(IFormChildNode $child, $referenceNodeId)</code> are used to insert new children into the form container.</li> | |
2642 | <li><code>description($languageItem = null, array $variables = [])</code> and <code>label($languageItem = null, array $variables = [])</code> are used to set the description and the label or title of the form container.</li> | |
2643 | </ul> | |
2644 | <h2 id="form-field">Form Field<a class="headerlink" href="#form-field" title="Permanent link">#</a></h2> | |
2645 | <p>A form field object represents a concrete form field that allows entering data. | |
2646 | Every form field has to implement the <code>IFormField</code> interface which extends <code>IFormChildNode</code> and <code>IFormElement</code>.</p> | |
2647 | <p><code>IFormField</code> requires the following additional methods:</p> | |
2648 | <ul> | |
2649 | <li><code>addValidationError(IFormFieldValidationError $error)</code> and <code>getValidationErrors()</code> can be used to get and set validation errors of the form field (see <a href="../validation_data/#form-validation">form validation</a>).</li> | |
2650 | <li><code>addValidator(IFormFieldValidator $validator)</code>, <code>getValidators()</code>, <code>removeValidator($validatorId)</code>, and <code>hasValidator($validatorId)</code> can be used to get, set, remove, and check for validators for the form field (see <a href="../validation_data/#form-validation">form validation</a>).</li> | |
2651 | <li><code>getFieldHtml()</code> returns the field's HTML output without the surrounding <code>dl</code> structure.</li> | |
2652 | <li><code>objectProperty($objectProperty)</code> and <code>getObjectProperty()</code> can be used to get and set the object property that the field represents. | |
2653 | When setting the object property is set to an empty string, the previously set object property is unset. | |
2654 | If no object property has been set, the field’s (non-prefixed) id is returned.</li> | |
2655 | </ul> | |
2656 | <p>The object property allows having different fields (requiring different ids) that represent the same object property which is handy when available options of the field’s value depend on another field. | |
2657 | Having object property allows to define different fields for each value of the other field and to use form field dependencies to only show the appropriate field. | |
2658 | - <code>readValue()</code> reads the form field value from the request data after the form is submitted. | |
2659 | - <code>required($required = true)</code> and <code>isRequired()</code> can be used to determine if the form field has to be filled out. | |
2660 | By default, form fields do not have to be filled out. | |
2661 | - <code>value($value)</code> and <code>getSaveValue()</code> can be used to get and set the value of the form field to be used outside of the context of forms. | |
2662 | <code>getValue()</code>, in contrast, returns the internal representation of the form field’s value. | |
2663 | In general, the internal representation is only relevant when validating the value in additional validators. | |
2664 | <code>loadValue(array $data, IStorableObject $object)</code> extracts the form field value from the given data array (and additional, non-editable data from the object if the field needs them).</p> | |
2665 | <p><code>AbstractFormField</code> provides default implementations of many of the listed methods above and should be extended instead of implementing <code>IFormField</code> directly.</p> | |
2666 | <p>An overview of the form fields provided by default can be found <a href="../form_fields/">here</a>.</p> | |
2667 | <h3 id="form-field-interfaces-and-traits">Form Field Interfaces and Traits<a class="headerlink" href="#form-field-interfaces-and-traits" title="Permanent link">#</a></h3> | |
2668 | <p>WoltLab Suite Core provides a variety of interfaces and matching traits with default implementations for several common features of form fields:</p> | |
2669 | <h4 id="iattributeformfield"><code>IAttributeFormField</code><a class="headerlink" href="#iattributeformfield" title="Permanent link">#</a></h4> | |
2670 | <div class="admonition info"> | |
2671 | <p class="admonition-title">Only available since version 5.4.</p> | |
2672 | </div> | |
2673 | <p><code>IAttributeFormField</code> has to be implemented by form fields for which attributes can be added to the actual form element (in addition to adding attributes to the surrounding element via the attribute-related methods of <code>IFormNode</code>). | |
2674 | The implementing class has to implement the methods <code>fieldAttribute(string $name, string $value = null): self</code> and <code>getFieldAttribute(string $name): self</code>/<code>getFieldAttributes(): array</code>, which are used to add and get the attributes, respectively. | |
2675 | Additionally, <code>hasFieldAttribute(string $name): bool</code> has to implemented to check if a certain attribute is present, <code>removeFieldAttribute(string $name): self</code> to remove an attribute, and <code>static validateFieldAttribute(string $name)</code> to check if the attribute is valid for this specific class. | |
2676 | <code>TAttributeFormField</code> provides a default implementation of these methods and <code>TInputAttributeFormField</code> specializes the trait for <code>input</code>-based form fields. | |
2677 | These two traits also ensure that if a specific interface that handles a specific attribute is implemented, like <code>IAutoCompleteFormField</code> handling <code>autocomplete</code>, this attribute cannot be set with this API. | |
2678 | Instead, the dedicated API provided by the relevant interface has to be used.</p> | |
2679 | <h4 id="iautocompleteformfield"><code>IAutoCompleteFormField</code><a class="headerlink" href="#iautocompleteformfield" title="Permanent link">#</a></h4> | |
2680 | <div class="admonition info"> | |
2681 | <p class="admonition-title">Only available since version 5.4.</p> | |
2682 | </div> | |
2683 | <p><code>IAutoCompleteFormField</code> has to be implemented by form fields that support the <a href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofilling-form-controls:-the-autocomplete-attribute"><code>autocomplete</code> attribute</a>. | |
2684 | The implementing class has to implement the methods <code>autoComplete(?string $autoComplete): self</code> and <code>getAutoComplete(): ?string</code>, which are used to set and get the autocomplete value, respectively. | |
2685 | <code>TAutoCompleteFormField</code> provides a default implementation of these two methods and <code>TTextAutoCompleteFormField</code> specializes the trait for text form fields. | |
2686 | When using <code>TAutoCompleteFormField</code>, you have to implement the <code>getValidAutoCompleteTokens(): array</code> method which returns all valid <code>autocomplete</code> tokens.</p> | |
2687 | <h4 id="iautofocusformfield"><code>IAutoFocusFormField</code><a class="headerlink" href="#iautofocusformfield" title="Permanent link">#</a></h4> | |
2688 | <p><code>IAutoFocusFormField</code> has to be implemented by form fields that can be auto-focused. | |
2689 | The implementing class has to implement the methods <code>autoFocus($autoFocus = true)</code> and <code>isAutoFocused()</code>. | |
2690 | By default, form fields are not auto-focused. | |
2691 | <code>TAutoFocusFormField</code> provides a default implementation of these two methods.</p> | |
2692 | <h4 id="icssclassformfield"><code>ICssClassFormField</code><a class="headerlink" href="#icssclassformfield" title="Permanent link">#</a></h4> | |
2693 | <div class="admonition info"> | |
2694 | <p class="admonition-title">Only available since version 5.4.</p> | |
2695 | </div> | |
2696 | <p><code>ICssClassFormField</code> has to be implemented by form fields for which CSS classes can be added to the actual form element (in addition to adding CSS classes to the surrounding element via the class-related methods of <code>IFormNode</code>). | |
2697 | The implementing class has to implement the methods <code>addFieldClass(string $class): self</code>/<code>addFieldClasses(array $classes): self</code> and <code>getFieldClasses(): array</code>, which are used to add and get the CSS classes, respectively. | |
2698 | Additionally, <code>hasFieldClass(string $class): bool</code> has to implemented to check if a certain CSS class is present and <code>removeFieldClass(string $class): self</code> to remove a CSS class. | |
2699 | <code>TCssClassFormField</code> provides a default implementation of these methods.</p> | |
2700 | <h4 id="ifileformfield"><code>IFileFormField</code><a class="headerlink" href="#ifileformfield" title="Permanent link">#</a></h4> | |
2701 | <p><code>IFileFormField</code> has to be implemented by every form field that uploads files so that the <code>enctype</code> attribute of the form document is <code>multipart/form-data</code> (see <code>IFormDocument::getEnctype()</code>).</p> | |
2702 | <h4 id="ifilterableselectionformfield"><code>IFilterableSelectionFormField</code><a class="headerlink" href="#ifilterableselectionformfield" title="Permanent link">#</a></h4> | |
2703 | <p><code>IFilterableSelectionFormField</code> extends <code>ISelectionFormField</code> by the possibilty for users when selecting the value(s) to filter the list of available options. | |
2704 | The implementing class has to implement the methods <code>filterable($filterable = true)</code> and <code>isFilterable()</code>. | |
2705 | <code>TFilterableSelectionFormField</code> provides a default implementation of these two methods.</p> | |
2706 | <h4 id="ii18nformfield"><code>II18nFormField</code><a class="headerlink" href="#ii18nformfield" title="Permanent link">#</a></h4> | |
2707 | <p><code>II18nFormField</code> has to be implemented by form fields if the form field value can be entered separately for all available languages. | |
2708 | The implementing class has to implement the following methods:</p> | |
2709 | <ul> | |
2710 | <li><code>i18n($i18n = true)</code> and <code>isI18n()</code> can be used to set whether a specific instance of the class actually supports multilingual input.</li> | |
2711 | <li><code>i18nRequired($i18nRequired = true)</code> and <code>isI18nRequired()</code> can be used to set whether a specific instance of the class requires separate values for all languages.</li> | |
2712 | <li><code>languageItemPattern($pattern)</code> and <code>getLanguageItemPattern()</code> can be used to set the pattern/regular expression for the language item used to save the multilingual values.</li> | |
2713 | <li><code>hasI18nValues()</code> and <code>hasPlainValue()</code> check if the current value is a multilingual or monolingual value.</li> | |
2714 | </ul> | |
2715 | <p><code>TI18nFormField</code> provides a default implementation of these eight methods and additional default implementations of some of the <code>IFormField</code> methods. | |
2716 | If multilingual input is enabled for a specific form field, classes using <code>TI18nFormField</code> register a <a href="../validation_data/#customformfielddataprocessor">custom form field data processor</a> to add the array with multilingual input into the <code>$parameters</code> array directly using <code>{$objectProperty}_i18n</code> as the array key. | |
2717 | If multilingual input is enabled but only a monolingual value is entered, the custom form field data processor does nothing and the form field’s value is added by the <code>DefaultFormDataProcessor</code> into the <code>data</code> sub-array of the <code>$parameters</code> array.</p> | |
2718 | <div class="admonition info"> | |
2719 | <p class="admonition-title"><code>TI18nFormField</code> already provides a default implementation of <code>IFormField::validate()</code>.</p> | |
2720 | </div> | |
2721 | <h4 id="iimmutableformfield"><code>IImmutableFormField</code><a class="headerlink" href="#iimmutableformfield" title="Permanent link">#</a></h4> | |
2722 | <p><code>IImmutableFormField</code> has to be implemented by form fields that support being displayed but whose value cannot be changed. | |
2723 | The implementing class has to implement the methods <code>immutable($immutable = true)</code> and <code>isImmutable()</code> that can be used to determine if the value of the form field is mutable or immutable. | |
2724 | By default, form field are mutable.</p> | |
2725 | <h4 id="iinputmodeformfield"><code>IInputModeFormField</code><a class="headerlink" href="#iinputmodeformfield" title="Permanent link">#</a></h4> | |
2726 | <div class="admonition info"> | |
2727 | <p class="admonition-title">Only available since version 5.4.</p> | |
2728 | </div> | |
2729 | <p><code>IInputModeFormField</code> has to be implemented by form fields that support the <a href="https://html.spec.whatwg.org/multipage/interaction.html#input-modalities:-the-inputmode-attribute"><code>inputmode</code> attribute</a>. | |
2730 | The implementing class has to implement the methods <code>inputMode(?string $inputMode): self</code> and <code>getInputMode(): ?string</code>, which are used to set and get the input mode, respectively. | |
2731 | <code>TInputModeFormField</code> provides a default implementation of these two methods.</p> | |
2732 | <h4 id="imaximumformfield"><code>IMaximumFormField</code><a class="headerlink" href="#imaximumformfield" title="Permanent link">#</a></h4> | |
2733 | <p><code>IMaximumFormField</code> has to be implemented by form fields if the entered value must have a maximum value. | |
2734 | The implementing class has to implement the methods <code>maximum($maximum = null)</code> and <code>getMaximum()</code>. | |
2735 | A maximum of <code>null</code> signals that no maximum value has been set. | |
2736 | <code>TMaximumFormField</code> provides a default implementation of these two methods.</p> | |
2737 | <div class="admonition warning"> | |
2738 | <p class="admonition-title">The implementing class has to validate the entered value against the maximum value manually.</p> | |
2739 | </div> | |
2740 | <h4 id="imaximumlengthformfield"><code>IMaximumLengthFormField</code><a class="headerlink" href="#imaximumlengthformfield" title="Permanent link">#</a></h4> | |
2741 | <p><code>IMaximumLengthFormField</code> has to be implemented by form fields if the entered value must have a maximum length. | |
2742 | The implementing class has to implement the methods <code>maximumLength($maximumLength = null)</code>, <code>getMaximumLength()</code>, and <code>validateMaximumLength($text, Language $language = null)</code>. | |
2743 | A maximum length of <code>null</code> signals that no maximum length has been set. | |
2744 | <code>TMaximumLengthFormField</code> provides a default implementation of these two methods.</p> | |
2745 | <div class="admonition warning"> | |
2746 | <p class="admonition-title">The implementing class has to validate the entered value against the maximum value manually by calling <code>validateMaximumLength()</code>.</p> | |
2747 | </div> | |
2748 | <h4 id="iminimumformfield"><code>IMinimumFormField</code><a class="headerlink" href="#iminimumformfield" title="Permanent link">#</a></h4> | |
2749 | <p><code>IMinimumFormField</code> has to be implemented by form fields if the entered value must have a minimum value. | |
2750 | The implementing class has to implement the methods <code>minimum($minimum = null)</code> and <code>getMinimum()</code>. | |
2751 | A minimum of <code>null</code> signals that no minimum value has been set. | |
2752 | <code>TMinimumFormField</code> provides a default implementation of these three methods.</p> | |
2753 | <div class="admonition warning"> | |
2754 | <p class="admonition-title">The implementing class has to validate the entered value against the minimum value manually.</p> | |
2755 | </div> | |
2756 | <h4 id="iminimumlengthformfield"><code>IMinimumLengthFormField</code><a class="headerlink" href="#iminimumlengthformfield" title="Permanent link">#</a></h4> | |
2757 | <p><code>IMinimumLengthFormField</code> has to be implemented by form fields if the entered value must have a minimum length. | |
2758 | The implementing class has to implement the methods <code>minimumLength($minimumLength = null)</code>, <code>getMinimumLength()</code>, and <code>validateMinimumLength($text, Language $language = null)</code>. | |
2759 | A minimum length of <code>null</code> signals that no minimum length has been set. | |
2760 | <code>TMinimumLengthFormField</code> provides a default implementation of these three methods.</p> | |
2761 | <div class="admonition warning"> | |
2762 | <p class="admonition-title">The implementing class has to validate the entered value against the minimum value manually by calling <code>validateMinimumLength()</code>.</p> | |
2763 | </div> | |
2764 | <h4 id="imultipleformfield"><code>IMultipleFormField</code><a class="headerlink" href="#imultipleformfield" title="Permanent link">#</a></h4> | |
2765 | <p><code>IMinimumLengthFormField</code> has to be implemented by form fields that support selecting or setting multiple values. | |
2766 | The implementing class has to implement the following methods:</p> | |
2767 | <ul> | |
2768 | <li><code>multiple($multiple = true)</code> and <code>allowsMultiple()</code> can be used to set whether a specific instance of the class actually should support multiple values. | |
2769 | By default, multiple values are not supported.</li> | |
2770 | <li><code>minimumMultiples($minimum)</code> and <code>getMinimumMultiples()</code> can be used to set the minimum number of values that have to be selected/entered. | |
2771 | By default, there is no required minimum number of values.</li> | |
2772 | <li><code>maximumMultiples($minimum)</code> and <code>getMaximumMultiples()</code> can be used to set the maximum number of values that have to be selected/entered. | |
2773 | By default, there is no maximum number of values. | |
2774 | <code>IMultipleFormField::NO_MAXIMUM_MULTIPLES</code> is returned if no maximum number of values has been set and it can also be used to unset a previously set maximum number of values.</li> | |
2775 | </ul> | |
2776 | <p><code>TMultipleFormField</code> provides a default implementation of these six methods and classes using <code>TMultipleFormField</code> register a <a href="../validation_data/#customformfielddataprocessor">custom form field data processor</a> to add the <code>HtmlInputProcessor</code> object with the text into the <code>$parameters</code> array directly using <code>{$objectProperty}_htmlInputProcessor</code> as the array key.</p> | |
2777 | <div class="admonition warning"> | |
2778 | <p class="admonition-title">The implementing class has to validate the values against the minimum and maximum number of values manually.</p> | |
2779 | </div> | |
2780 | <h4 id="inullableformfield"><code>INullableFormField</code><a class="headerlink" href="#inullableformfield" title="Permanent link">#</a></h4> | |
2781 | <p><code>INullableFormField</code> has to be implemented by form fields that support <code>null</code> as their (empty) value. | |
2782 | The implementing class has to implement the methods <code>nullable($nullable = true)</code> and <code>isNullable()</code>. | |
2783 | <code>TNullableFormField</code> provides a default implementation of these two methods.</p> | |
2784 | <p><code>null</code> should be returned by <code>IFormField::getSaveValue()</code> is the field is considered empty and the form field has been set as nullable.</p> | |
2785 | <h4 id="ipackagesformfield"><code>IPackagesFormField</code><a class="headerlink" href="#ipackagesformfield" title="Permanent link">#</a></h4> | |
2786 | <p><code>IPackagesFormField</code> has to be implemented by form fields that, in some way, considers packages whose ids may be passed to the field object. | |
2787 | The implementing class has to implement the methods <code>packageIDs(array $packageIDs)</code> and <code>getPackageIDs()</code>. | |
2788 | <code>TPackagesFormField</code> provides a default implementation of these two methods.</p> | |
2789 | <h4 id="ipatternformfield"><code>IPatternFormField</code><a class="headerlink" href="#ipatternformfield" title="Permanent link">#</a></h4> | |
2790 | <div class="admonition info"> | |
2791 | <p class="admonition-title">Only available since version 5.4.</p> | |
2792 | </div> | |
2793 | <p><code>IPatternFormField</code> has to be implemented by form fields that support the <a href="https://html.spec.whatwg.org/multipage/input.html#the-pattern-attribute"><code>pattern</code> attribute</a>. | |
2794 | The implementing class has to implement the methods <code>pattern(?string $pattern): self</code> and <code>getPattern(): ?string</code>, which are used to set and get the pattern, respectively. | |
2795 | <code>TPatternFormField</code> provides a default implementation of these two methods.</p> | |
2796 | <h4 id="iplaceholderformfield"><code>IPlaceholderFormField</code><a class="headerlink" href="#iplaceholderformfield" title="Permanent link">#</a></h4> | |
2797 | <p><code>IPlaceholderFormField</code> has to be implemented by form fields that support a placeholder value for empty fields. | |
2798 | The implementing class has to implement the methods <code>placeholder($languageItem = null, array $variables = [])</code> and <code>getPlaceholder()</code>. | |
2799 | <code>TPlaceholderFormField</code> provides a default implementation of these two methods.</p> | |
2800 | <h4 id="iselectionformfield"><code>ISelectionFormField</code><a class="headerlink" href="#iselectionformfield" title="Permanent link">#</a></h4> | |
2801 | <p><code>ISelectionFormField</code> has to be implemented by form fields with a predefined set of possible values. | |
2802 | The implementing class has to implement the getter and setter methods <code>options($options, $nestedOptions = false, $labelLanguageItems = true)</code> and <code>getOptions()</code> and additionally two methods related to nesting, i.e. whether the selectable options have a hierarchy: | |
2803 | <code>supportsNestedOptions()</code> and <code>getNestedOptions()</code>. | |
2804 | <code>TSelectionFormField</code> provides a default implementation of these four methods.</p> | |
2805 | <h4 id="isuffixedformfield"><code>ISuffixedFormField</code><a class="headerlink" href="#isuffixedformfield" title="Permanent link">#</a></h4> | |
2806 | <p><code>ISuffixedFormField</code> has to be implemented by form fields that support supports displaying a suffix behind the actual input field. | |
2807 | The implementing class has to implement the methods <code>suffix($languageItem = null, array $variables = [])</code> and <code>getSuffix()</code>. | |
2808 | <code>TSuffixedFormField</code> provides a default implementation of these two methods.</p> | |
2809 | <h4 id="tdefaultidformfield"><code>TDefaultIdFormField</code><a class="headerlink" href="#tdefaultidformfield" title="Permanent link">#</a></h4> | |
2810 | <p>Form fields that have a default id have to use <code>TDefaultIdFormField</code> and have to implement the method <code>getDefaultId()</code>.</p> | |
2811 | <h2 id="displaying-forms">Displaying Forms<a class="headerlink" href="#displaying-forms" title="Permanent link">#</a></h2> | |
2812 | <p>The only thing to do in a template to display the <strong>whole</strong> form including all of the necessary JavaScript is to put</p> | |
2813 | <div class="highlight"><pre><span></span><code><span class="cp">{</span><span class="o">@</span><span class="nv">$form</span><span class="o">-></span><span class="na">getHtml</span><span class="o">()</span><span class="cp">}</span><span class="x"></span> | |
2814 | </code></pre></div> | |
0c5338dd TD |
2815 | <p>into the template file at the relevant position.</p> |
2816 | ||
4a5c32e1 WG |
2817 | |
2818 | ||
2819 | ||
2820 | <hr> | |
2821 | <div class="md-source-date"> | |
2822 | <small> | |
2823 | ||
2824 | Last update: 2021-01-16 | |
2825 | ||
2826 | </small> | |
2827 | </div> | |
2828 | ||
2829 | ||
0c5338dd TD |
2830 | |
2831 | ||
2832 | ||
2833 | ||
2834 | ||
2835 | ||
2836 | </article> | |
2837 | </div> | |
2838 | </div> | |
fb962f09 | 2839 | |
0c5338dd TD |
2840 | </main> |
2841 | ||
2842 | ||
2843 | <footer class="md-footer"> | |
2844 | ||
2845 | <nav class="md-footer__inner md-grid" aria-label="Footer"> | |
2846 | ||
2847 | <a href="../overview/" class="md-footer__link md-footer__link--prev" rel="prev"> | |
2848 | <div class="md-footer__button md-icon"> | |
2849 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |
2850 | </div> | |
2851 | <div class="md-footer__title"> | |
2852 | <div class="md-ellipsis"> | |
2853 | <span class="md-footer__direction"> | |
2854 | Previous | |
2855 | </span> | |
2856 | Overview | |
2857 | </div> | |
2858 | </div> | |
2859 | </a> | |
2860 | ||
2861 | ||
2862 | <a href="../form_fields/" class="md-footer__link md-footer__link--next" rel="next"> | |
2863 | <div class="md-footer__title"> | |
2864 | <div class="md-ellipsis"> | |
2865 | <span class="md-footer__direction"> | |
2866 | Next | |
2867 | </span> | |
2868 | Fields | |
2869 | </div> | |
2870 | </div> | |
2871 | <div class="md-footer__button md-icon"> | |
2872 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg> | |
2873 | </div> | |
2874 | </a> | |
2875 | ||
2876 | </nav> | |
2877 | ||
2878 | <div class="md-footer-meta md-typeset"> | |
2879 | <div class="md-footer-meta__inner md-grid"> | |
2880 | <div class="md-footer-copyright"> | |
2881 | ||
2882 | <div class="md-footer-copyright__highlight"> | |
2883 | Copyright © 2020 WoltLab GmbH | |
2884 | </div> | |
2885 | ||
2886 | Made with | |
2887 | <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> | |
2888 | Material for MkDocs | |
2889 | </a> | |
fb88dc6e | 2890 | |
0c5338dd TD |
2891 | </div> |
2892 | <div class="md-footer-copyright"> | |
2893 | <a href="https://www.woltlab.com/legal-notice/">Legal Notice</a> | |
2894 | <a href="https://www.woltlab.com/privacy-policy/">Privacy Policy</a> | |
2895 | </div> | |
2896 | </div> | |
2897 | </div> | |
2898 | </footer> | |
2899 | ||
2900 | </div> | |
2901 | <div class="md-dialog" data-md-component="dialog"> | |
2902 | <div class="md-dialog__inner md-typeset"></div> | |
2903 | </div> | |
fb962f09 | 2904 | <script id="__config" type="application/json">{"base": "../../../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../../../assets/javascripts/workers/search.fe42c31b.min.js", "version": {"provider": "mike"}}</script> |
0c5338dd TD |
2905 | |
2906 | ||
fb962f09 | 2907 | <script src="../../../../assets/javascripts/bundle.d892486b.min.js"></script> |
0c5338dd TD |
2908 | |
2909 | ||
2910 | </body> | |
2911 | </html> |