Deployed cae71ef to 5.4 with MkDocs 1.1.2 and mike 0.5.5
[GitHub/WoltLab/woltlab.github.io.git] / 5.4 / javascript / general-usage / index.html
CommitLineData
45ca63d0
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
12 <link rel="shortcut icon" href="../../assets/default.favicon.ico">
fb88dc6e 13 <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.5">
45ca63d0
TD
14
15
16
17 <title>General Usage - WoltLab Suite Documentation</title>
18
19
20
fb88dc6e 21 <link rel="stylesheet" href="../../assets/stylesheets/main.77f3fd56.min.css">
45ca63d0
TD
22
23
24 <link rel="stylesheet" href="../../assets/stylesheets/palette.7fa14f5b.min.css">
25
26
27
28 <meta name="theme-color" content="#009485">
29
30
31
32
33
fd8430cb
WG
34
35
45ca63d0
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="">
53
54
55
56 <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
57 <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
58 <label class="md-overlay" for="__drawer"></label>
59 <div data-md-component="skip">
60
61
62 <a href="#general-javascript-usage" class="md-skip">
63 Skip to content
64 </a>
65
66 </div>
67 <div data-md-component="announce">
68
69 <aside class="md-announce">
70 <div class="md-announce__inner md-grid md-typeset">
71
72 <a href="https://www.woltlab.com">Back to <strong>woltlab.com</strong></a>
73
74 </div>
75 </aside>
76
77 </div>
78
79
80
81<header class="md-header" data-md-component="header">
82 <nav class="md-header__inner md-grid" aria-label="Header">
83 <a href="../.." title="WoltLab Suite Documentation" class="md-header__button md-logo" aria-label="WoltLab Suite Documentation">
84
85 <img src="../../assets/logo.png" alt="logo">
86
87 </a>
88 <label class="md-header__button md-icon" for="__drawer">
89 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
90 </label>
91 <div class="md-header__title" data-md-component="header-title">
92 <div class="md-header__ellipsis">
93 <div class="md-header__topic">
94 <span class="md-ellipsis">
95 WoltLab Suite Documentation
96 </span>
97 </div>
98 <div class="md-header__topic" data-md-component="header-topic">
99 <span class="md-ellipsis">
100
101 General Usage
102
103 </span>
104 </div>
105 </div>
106 </div>
107 <div class="md-header__options">
108
109 </div>
110
111 <label class="md-header__button md-icon" for="__search">
112 <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>
113 </label>
114
115<div class="md-search" data-md-component="search" role="dialog">
116 <label class="md-search__overlay" for="__search"></label>
117 <div class="md-search__inner" role="search">
118 <form class="md-search__form" name="search">
119 <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>
120 <label class="md-search__icon md-icon" for="__search">
121 <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>
122 <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>
123 </label>
124 <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
125 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.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>
126 </button>
127 </form>
128 <div class="md-search__output">
129 <div class="md-search__scrollwrap" data-md-scrollfix>
130 <div class="md-search-result" data-md-component="search-result">
131 <div class="md-search-result__meta">
132 Initializing search
133 </div>
134 <ol class="md-search-result__list"></ol>
135 </div>
136 </div>
137 </div>
138 </div>
139</div>
140
141
142 </nav>
143</header>
144
145 <div class="md-container" data-md-component="container">
146
147
148
149
150 <main class="md-main" data-md-component="main">
151 <div class="md-main__inner md-grid">
152
153
154
155 <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
156 <div class="md-sidebar__scrollwrap">
157 <div class="md-sidebar__inner">
158
159
160
161
162
163<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
164 <label class="md-nav__title" for="__drawer">
165 <a href="../.." title="WoltLab Suite Documentation" class="md-nav__button md-logo" aria-label="WoltLab Suite Documentation">
166
167 <img src="../../assets/logo.png" alt="logo">
168
169 </a>
170 WoltLab Suite Documentation
171 </label>
172
173 <ul class="md-nav__list" data-md-scrollfix>
174
175
176
177
178
179
180
181
182 <li class="md-nav__item">
183 <a href="../../getting-started/" class="md-nav__link">
184 Getting Started
185 </a>
186 </li>
187
188
189
190
191
192
193
194
195
196
197
198 <li class="md-nav__item md-nav__item--nested">
199
200
201 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" >
202
203 <label class="md-nav__link" for="__nav_2">
204 PHP API
205 <span class="md-nav__icon md-icon"></span>
206 </label>
207 <nav class="md-nav" aria-label="PHP API" data-md-level="1">
208 <label class="md-nav__title" for="__nav_2">
209 <span class="md-nav__icon md-icon"></span>
210 PHP API
211 </label>
212 <ul class="md-nav__list" data-md-scrollfix>
213
214
215
216
217
218 <li class="md-nav__item">
219 <a href="../../php/pages/" class="md-nav__link">
220 Pages
221 </a>
222 </li>
223
224
225
226
227
228
229
230 <li class="md-nav__item">
231 <a href="../../php/database-objects/" class="md-nav__link">
232 Database Objects
233 </a>
234 </li>
235
236
237
238
239
240
241
242 <li class="md-nav__item">
243 <a href="../../php/database-access/" class="md-nav__link">
244 Database Access
245 </a>
246 </li>
247
248
249
250
251
252
253
254 <li class="md-nav__item">
255 <a href="../../php/exceptions/" class="md-nav__link">
256 Exceptions
257 </a>
258 </li>
259
260
261
262
263
264
265
266
267 <li class="md-nav__item md-nav__item--nested">
268
269
270 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5" type="checkbox" id="__nav_2_5" >
271
272 <label class="md-nav__link" for="__nav_2_5">
273 API
274 <span class="md-nav__icon md-icon"></span>
275 </label>
276 <nav class="md-nav" aria-label="API" data-md-level="2">
277 <label class="md-nav__title" for="__nav_2_5">
278 <span class="md-nav__icon md-icon"></span>
279 API
280 </label>
281 <ul class="md-nav__list" data-md-scrollfix>
282
283
284
285
286
287 <li class="md-nav__item">
288 <a href="../../php/api/caches/" class="md-nav__link">
289 Caches
290 </a>
291 </li>
292
293
294
295
296
297
298
299 <li class="md-nav__item">
300 <a href="../../php/api/comments/" class="md-nav__link">
301 Comments
302 </a>
303 </li>
304
305
306
307
308
309
310
311 <li class="md-nav__item">
312 <a href="../../php/api/cronjobs/" class="md-nav__link">
313 Cronjobs
314 </a>
315 </li>
316
317
318
319
320
321
322
323 <li class="md-nav__item">
324 <a href="../../php/api/events/" class="md-nav__link">
325 Events
326 </a>
327 </li>
328
329
330
331
332
333
334
335
336 <li class="md-nav__item md-nav__item--nested">
337
338
339 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_5" type="checkbox" id="__nav_2_5_5" >
340
341 <label class="md-nav__link" for="__nav_2_5_5">
342 Form Builder
343 <span class="md-nav__icon md-icon"></span>
344 </label>
345 <nav class="md-nav" aria-label="Form Builder" data-md-level="3">
346 <label class="md-nav__title" for="__nav_2_5_5">
347 <span class="md-nav__icon md-icon"></span>
348 Form Builder
349 </label>
350 <ul class="md-nav__list" data-md-scrollfix>
351
352
353
354
355
356 <li class="md-nav__item">
357 <a href="../../php/api/form_builder/overview/" class="md-nav__link">
358 Overview
359 </a>
360 </li>
361
362
363
364
365
366
367
368 <li class="md-nav__item">
369 <a href="../../php/api/form_builder/structure/" class="md-nav__link">
370 Structure
371 </a>
372 </li>
373
374
375
376
377
378
379
380 <li class="md-nav__item">
381 <a href="../../php/api/form_builder/form_fields/" class="md-nav__link">
382 Fields
383 </a>
384 </li>
385
386
387
388
389
390
391
392 <li class="md-nav__item">
393 <a href="../../php/api/form_builder/validation_data/" class="md-nav__link">
394 Validation and Data
395 </a>
396 </li>
397
398
399
400
401
402
403
404 <li class="md-nav__item">
405 <a href="../../php/api/form_builder/dependencies/" class="md-nav__link">
406 Dependencies
407 </a>
408 </li>
409
410
411
412 </ul>
413 </nav>
414 </li>
415
416
417
418
419
420
421
422 <li class="md-nav__item">
423 <a href="../../php/api/package_installation_plugins/" class="md-nav__link">
424 Package Installation Plugins
425 </a>
426 </li>
427
428
429
430
431
432
433
434 <li class="md-nav__item">
435 <a href="../../php/api/user_activity_points/" class="md-nav__link">
436 User Activity Points
437 </a>
438 </li>
439
440
441
442
443
444
445
446 <li class="md-nav__item">
447 <a href="../../php/api/user_notifications/" class="md-nav__link">
448 User Notifications
449 </a>
450 </li>
451
452
453
454
455
456
457
458 <li class="md-nav__item">
459 <a href="../../php/api/sitemaps/" class="md-nav__link">
460 Sitemaps
461 </a>
462 </li>
463
464
465
466 </ul>
467 </nav>
468 </li>
469
470
471
472
473
474
475
476 <li class="md-nav__item">
477 <a href="../../php/code-style/" class="md-nav__link">
478 Code Style
479 </a>
480 </li>
481
482
483
484
485
486
487
488 <li class="md-nav__item">
489 <a href="../../php/apps/" class="md-nav__link">
490 Apps
491 </a>
492 </li>
493
494
495
496
497
498
499
500 <li class="md-nav__item">
501 <a href="../../php/gdpr/" class="md-nav__link">
502 GDPR
503 </a>
504 </li>
505
506
507
508 </ul>
509 </nav>
510 </li>
511
512
513
514
515
516
517
518
519
520
521
522 <li class="md-nav__item md-nav__item--nested">
523
524
525 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
526
527 <label class="md-nav__link" for="__nav_3">
528 Languages, Templates & CSS
529 <span class="md-nav__icon md-icon"></span>
530 </label>
531 <nav class="md-nav" aria-label="Languages, Templates & CSS" data-md-level="1">
532 <label class="md-nav__title" for="__nav_3">
533 <span class="md-nav__icon md-icon"></span>
534 Languages, Templates & CSS
535 </label>
536 <ul class="md-nav__list" data-md-scrollfix>
537
538
539
540
541
542 <li class="md-nav__item">
543 <a href="../../view/languages/" class="md-nav__link">
544 Languages
545 </a>
546 </li>
547
548
549
550
551
552
553
554 <li class="md-nav__item">
555 <a href="../../view/templates/" class="md-nav__link">
556 Templates
557 </a>
558 </li>
559
560
561
562
563
564
565
566 <li class="md-nav__item">
567 <a href="../../view/css/" class="md-nav__link">
568 CSS
569 </a>
570 </li>
571
572
573
574 </ul>
575 </nav>
576 </li>
577
578
579
580
581
582
583
584
585
586
587
588
589
590 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
591
592
593 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" checked>
594
595 <label class="md-nav__link" for="__nav_4">
596 JavaScript API
597 <span class="md-nav__icon md-icon"></span>
598 </label>
599 <nav class="md-nav" aria-label="JavaScript API" data-md-level="1">
600 <label class="md-nav__title" for="__nav_4">
601 <span class="md-nav__icon md-icon"></span>
602 JavaScript API
603 </label>
604 <ul class="md-nav__list" data-md-scrollfix>
605
606
607
608
609
610
611
612 <li class="md-nav__item md-nav__item--active">
613
614 <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
615
616
617
618
619 <label class="md-nav__link md-nav__link--active" for="__toc">
620 General Usage
621 <span class="md-nav__icon md-icon"></span>
622 </label>
623
624 <a href="./" class="md-nav__link md-nav__link--active">
625 General Usage
626 </a>
627
628
629<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
630
631
632
633
634
635 <label class="md-nav__title" for="__toc">
636 <span class="md-nav__icon md-icon"></span>
637 Table of contents
638 </label>
639 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
640
641 <li class="md-nav__item">
642 <a href="#the-history-of-the-legacy-api" class="md-nav__link">
643 The History of the Legacy API
644 </a>
645
646</li>
647
648 <li class="md-nav__item">
649 <a href="#embedding-javascript-inside-templates" class="md-nav__link">
650 Embedding JavaScript inside Templates
651 </a>
652
653</li>
654
655 <li class="md-nav__item">
656 <a href="#including-external-javascript-files" class="md-nav__link">
657 Including External JavaScript Files
658 </a>
659
660 <nav class="md-nav" aria-label="Including External JavaScript Files">
661 <ul class="md-nav__list">
662
663 <li class="md-nav__item">
664 <a href="#debug-variants-and-cache-buster" class="md-nav__link">
665 Debug-Variants and Cache-Buster
666 </a>
667
668</li>
669
670 <li class="md-nav__item">
671 <a href="#the-accelerated-guest-view-tiny-builds" class="md-nav__link">
672 The Accelerated Guest View ("Tiny Builds")
673 </a>
674
675</li>
676
677 <li class="md-nav__item">
678 <a href="#the-js-template-plugin" class="md-nav__link">
679 The {js} Template Plugin
680 </a>
681
682</li>
683
684 </ul>
685 </nav>
686
687</li>
688
689 </ul>
690
691</nav>
692
693 </li>
694
695
696
697
698
699
700
701
702 <li class="md-nav__item md-nav__item--nested">
703
704
705 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_2" type="checkbox" id="__nav_4_2" >
706
707 <label class="md-nav__link" for="__nav_4_2">
708 New API
709 <span class="md-nav__icon md-icon"></span>
710 </label>
711 <nav class="md-nav" aria-label="New API" data-md-level="2">
712 <label class="md-nav__title" for="__nav_4_2">
713 <span class="md-nav__icon md-icon"></span>
714 New API
715 </label>
716 <ul class="md-nav__list" data-md-scrollfix>
717
718
719
720
721
722 <li class="md-nav__item">
723 <a href="../new-api_writing-a-module/" class="md-nav__link">
724 Writing a module
725 </a>
726 </li>
727
728
729
730
731
732
733
734 <li class="md-nav__item">
735 <a href="../new-api_data-structures/" class="md-nav__link">
736 Data Structures
737 </a>
738 </li>
739
740
741
742
743
744
745
746 <li class="md-nav__item">
747 <a href="../new-api_core/" class="md-nav__link">
748 Core Functions
749 </a>
750 </li>
751
752
753
754
755
756
757
758 <li class="md-nav__item">
759 <a href="../new-api_dom/" class="md-nav__link">
760 DOM
761 </a>
762 </li>
763
764
765
766
767
768
769
770 <li class="md-nav__item">
771 <a href="../new-api_events/" class="md-nav__link">
772 Event Handling
773 </a>
774 </li>
775
776
777
778
779
780
781
782 <li class="md-nav__item">
783 <a href="../new-api_ajax/" class="md-nav__link">
784 Ajax
785 </a>
786 </li>
787
788
789
790
791
792
793
794 <li class="md-nav__item">
795 <a href="../new-api_dialogs/" class="md-nav__link">
796 Dialogs
797 </a>
798 </li>
799
800
801
802
803
804
805
806 <li class="md-nav__item">
807 <a href="../new-api_browser/" class="md-nav__link">
808 Browser and Screen Sizes
809 </a>
810 </li>
811
812
813
814
815
816
817
818 <li class="md-nav__item">
819 <a href="../new-api_ui/" class="md-nav__link">
820 User Interface
821 </a>
822 </li>
823
824
825
826 </ul>
827 </nav>
828 </li>
829
830
831
832
833
834
835
836 <li class="md-nav__item">
837 <a href="../legacy-api/" class="md-nav__link">
838 Legacy API
839 </a>
840 </li>
841
842
843
844
845
846
847
848 <li class="md-nav__item">
849 <a href="../helper-functions/" class="md-nav__link">
850 Helper Functions
851 </a>
852 </li>
853
854
855
856
857
858
859
860 <li class="md-nav__item">
861 <a href="../code-snippets/" class="md-nav__link">
862 Code Snippets
863 </a>
864 </li>
865
866
867
868 </ul>
869 </nav>
870 </li>
871
872
873
874
875
876
877
878
879
880
881
882 <li class="md-nav__item md-nav__item--nested">
883
884
885 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
886
887 <label class="md-nav__link" for="__nav_5">
888 Package Components
889 <span class="md-nav__icon md-icon"></span>
890 </label>
891 <nav class="md-nav" aria-label="Package Components" data-md-level="1">
892 <label class="md-nav__title" for="__nav_5">
893 <span class="md-nav__icon md-icon"></span>
894 Package Components
895 </label>
896 <ul class="md-nav__list" data-md-scrollfix>
897
898
899
900
901
902 <li class="md-nav__item">
903 <a href="../../package/package-xml/" class="md-nav__link">
904 package.xml
905 </a>
906 </li>
907
908
909
910
911
912
913
914
915 <li class="md-nav__item md-nav__item--nested">
916
917
918 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_2" type="checkbox" id="__nav_5_2" >
919
920 <label class="md-nav__link" for="__nav_5_2">
921 PIPs
922 <span class="md-nav__icon md-icon"></span>
923 </label>
924 <nav class="md-nav" aria-label="PIPs" data-md-level="2">
925 <label class="md-nav__title" for="__nav_5_2">
926 <span class="md-nav__icon md-icon"></span>
927 PIPs
928 </label>
929 <ul class="md-nav__list" data-md-scrollfix>
930
931
932
933
934
935 <li class="md-nav__item">
936 <a href="../../package/pip/" class="md-nav__link">
937 Overview
938 </a>
939 </li>
940
941
942
943
944
945
946
947 <li class="md-nav__item">
948 <a href="../../package/pip/acl-option/" class="md-nav__link">
949 aclOption
950 </a>
951 </li>
952
953
954
955
956
957
958
959 <li class="md-nav__item">
960 <a href="../../package/pip/acp-menu/" class="md-nav__link">
961 acpMenu
962 </a>
963 </li>
964
965
966
967
968
969
970
971 <li class="md-nav__item">
972 <a href="../../package/pip/acp-search-provider/" class="md-nav__link">
973 acpSearchProvider
974 </a>
975 </li>
976
977
978
979
980
981
982
983 <li class="md-nav__item">
984 <a href="../../package/pip/acp-template/" class="md-nav__link">
985 acpTemplate
986 </a>
987 </li>
988
989
990
991
992
993
994
995 <li class="md-nav__item">
996 <a href="../../package/pip/bbcode/" class="md-nav__link">
997 bbcode
998 </a>
999 </li>
1000
1001
1002
1003
1004
1005
1006
1007 <li class="md-nav__item">
1008 <a href="../../package/pip/box/" class="md-nav__link">
1009 box
1010 </a>
1011 </li>
1012
1013
1014
1015
1016
1017
1018
1019 <li class="md-nav__item">
1020 <a href="../../package/pip/clipboard-action/" class="md-nav__link">
1021 clipboardAction
1022 </a>
1023 </li>
1024
1025
1026
1027
1028
1029
1030
1031 <li class="md-nav__item">
1032 <a href="../../package/pip/core-object/" class="md-nav__link">
1033 coreObject
1034 </a>
1035 </li>
1036
1037
1038
1039
1040
1041
1042
1043 <li class="md-nav__item">
1044 <a href="../../package/pip/cronjob/" class="md-nav__link">
1045 cronjob
1046 </a>
1047 </li>
1048
1049
1050
1051
1052
1053
1054
1055 <li class="md-nav__item">
1056 <a href="../../package/pip/event-listener/" class="md-nav__link">
1057 eventListener
1058 </a>
1059 </li>
1060
1061
1062
1063
1064
1065
1066
1067 <li class="md-nav__item">
1068 <a href="../../package/pip/file/" class="md-nav__link">
1069 file
1070 </a>
1071 </li>
1072
1073
1074
1075
1076
1077
1078
1079 <li class="md-nav__item">
1080 <a href="../../package/pip/language/" class="md-nav__link">
1081 language
1082 </a>
1083 </li>
1084
1085
1086
1087
1088
1089
1090
1091 <li class="md-nav__item">
1092 <a href="../../package/pip/media-provider/" class="md-nav__link">
1093 mediaProvider
1094 </a>
1095 </li>
1096
1097
1098
1099
1100
1101
1102
1103 <li class="md-nav__item">
1104 <a href="../../package/pip/menu/" class="md-nav__link">
1105 menu
1106 </a>
1107 </li>
1108
1109
1110
1111
1112
1113
1114
1115 <li class="md-nav__item">
1116 <a href="../../package/pip/menu-item/" class="md-nav__link">
1117 menuItem
1118 </a>
1119 </li>
1120
1121
1122
1123
1124
1125
1126
1127 <li class="md-nav__item">
1128 <a href="../../package/pip/object-type/" class="md-nav__link">
1129 objectType
1130 </a>
1131 </li>
1132
1133
1134
1135
1136
1137
1138
1139 <li class="md-nav__item">
1140 <a href="../../package/pip/object-type-definition/" class="md-nav__link">
1141 objectTypeDefinition
1142 </a>
1143 </li>
1144
1145
1146
1147
1148
1149
1150
1151 <li class="md-nav__item">
1152 <a href="../../package/pip/option/" class="md-nav__link">
1153 option
1154 </a>
1155 </li>
1156
1157
1158
1159
1160
1161
1162
1163 <li class="md-nav__item">
1164 <a href="../../package/pip/page/" class="md-nav__link">
1165 page
1166 </a>
1167 </li>
1168
1169
1170
1171
1172
1173
1174
1175 <li class="md-nav__item">
1176 <a href="../../package/pip/pip/" class="md-nav__link">
1177 pip
1178 </a>
1179 </li>
1180
1181
1182
1183
1184
1185
1186
1187 <li class="md-nav__item">
1188 <a href="../../package/pip/script/" class="md-nav__link">
1189 script
1190 </a>
1191 </li>
1192
1193
1194
1195
1196
1197
1198
1199 <li class="md-nav__item">
1200 <a href="../../package/pip/smiley/" class="md-nav__link">
1201 smiley
1202 </a>
1203 </li>
1204
1205
1206
1207
1208
1209
1210
1211 <li class="md-nav__item">
1212 <a href="../../package/pip/sql/" class="md-nav__link">
1213 sql
1214 </a>
1215 </li>
1216
1217
1218
1219
1220
1221
1222
1223 <li class="md-nav__item">
1224 <a href="../../package/pip/style/" class="md-nav__link">
1225 style
1226 </a>
1227 </li>
1228
1229
1230
1231
1232
1233
1234
1235 <li class="md-nav__item">
1236 <a href="../../package/pip/template/" class="md-nav__link">
1237 template
1238 </a>
1239 </li>
1240
1241
1242
1243
1244
1245
1246
1247 <li class="md-nav__item">
1248 <a href="../../package/pip/template-listener/" class="md-nav__link">
1249 templateListener
1250 </a>
1251 </li>
1252
1253
1254
1255
1256
1257
1258
1259 <li class="md-nav__item">
1260 <a href="../../package/pip/user-group-option/" class="md-nav__link">
1261 userGroupOption
1262 </a>
1263 </li>
1264
1265
1266
1267
1268
1269
1270
1271 <li class="md-nav__item">
1272 <a href="../../package/pip/user-menu/" class="md-nav__link">
1273 userMenu
1274 </a>
1275 </li>
1276
1277
1278
1279
1280
1281
1282
1283 <li class="md-nav__item">
1284 <a href="../../package/pip/user-notification-event/" class="md-nav__link">
1285 userNotificationEvent
1286 </a>
1287 </li>
1288
1289
1290
1291
1292
1293
1294
1295 <li class="md-nav__item">
1296 <a href="../../package/pip/user-option/" class="md-nav__link">
1297 userOption
1298 </a>
1299 </li>
1300
1301
1302
1303
1304
1305
1306
1307 <li class="md-nav__item">
1308 <a href="../../package/pip/user-profile-menu/" class="md-nav__link">
1309 userProfileMenu
1310 </a>
1311 </li>
1312
1313
1314
1315 </ul>
1316 </nav>
1317 </li>
1318
1319
1320
1321
1322
1323
1324
1325 <li class="md-nav__item">
1326 <a href="../../package/database-php-api/" class="md-nav__link">
1327 Database PHP API
1328 </a>
1329 </li>
1330
1331
1332
1333 </ul>
1334 </nav>
1335 </li>
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347 <li class="md-nav__item md-nav__item--nested">
1348
1349
1350 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
1351
1352 <label class="md-nav__link" for="__nav_6">
1353 Migration
1354 <span class="md-nav__icon md-icon"></span>
1355 </label>
1356 <nav class="md-nav" aria-label="Migration" data-md-level="1">
1357 <label class="md-nav__title" for="__nav_6">
1358 <span class="md-nav__icon md-icon"></span>
1359 Migration
1360 </label>
1361 <ul class="md-nav__list" data-md-scrollfix>
1362
1363
1364
1365
1366
1367
1368 <li class="md-nav__item md-nav__item--nested">
1369
1370
1371 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_1" type="checkbox" id="__nav_6_1" >
1372
1373 <label class="md-nav__link" for="__nav_6_1">
1374 Migrating from WSC 5.3
1375 <span class="md-nav__icon md-icon"></span>
1376 </label>
1377 <nav class="md-nav" aria-label="Migrating from WSC 5.3" data-md-level="2">
1378 <label class="md-nav__title" for="__nav_6_1">
1379 <span class="md-nav__icon md-icon"></span>
1380 Migrating from WSC 5.3
1381 </label>
1382 <ul class="md-nav__list" data-md-scrollfix>
1383
1384
1385
1386
1387
1388 <li class="md-nav__item">
1389 <a href="../../migration/wsc53/php/" class="md-nav__link">
1390 PHP API
1391 </a>
1392 </li>
1393
1394
1395
1396
1397
1398
1399
1400 <li class="md-nav__item">
1401 <a href="../../migration/wsc53/session/" class="md-nav__link">
1402 Session Handling and Authentication
1403 </a>
1404 </li>
1405
1406
1407
1408
1409
1410
1411
1412 <li class="md-nav__item">
1413 <a href="../../migration/wsc53/javascript/" class="md-nav__link">
1414 JavaScript
1415 </a>
1416 </li>
1417
1418
1419
1420
1421
1422
1423
1424 <li class="md-nav__item">
1425 <a href="../../migration/wsc53/templates/" class="md-nav__link">
1426 Templates
1427 </a>
1428 </li>
1429
1430
1431
1432
1433
1434
1435
1436 <li class="md-nav__item">
1437 <a href="../../migration/wsc53/libraries/" class="md-nav__link">
1438 Third Party Libraries
1439 </a>
1440 </li>
1441
1442
1443
1444 </ul>
1445 </nav>
1446 </li>
1447
1448
1449
1450
1451
1452
1453
1454
1455 <li class="md-nav__item md-nav__item--nested">
1456
1457
1458 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_2" type="checkbox" id="__nav_6_2" >
1459
1460 <label class="md-nav__link" for="__nav_6_2">
1461 Migrating from WSC 5.2
1462 <span class="md-nav__icon md-icon"></span>
1463 </label>
1464 <nav class="md-nav" aria-label="Migrating from WSC 5.2" data-md-level="2">
1465 <label class="md-nav__title" for="__nav_6_2">
1466 <span class="md-nav__icon md-icon"></span>
1467 Migrating from WSC 5.2
1468 </label>
1469 <ul class="md-nav__list" data-md-scrollfix>
1470
1471
1472
1473
1474
1475 <li class="md-nav__item">
1476 <a href="../../migration/wsc52/php/" class="md-nav__link">
1477 PHP API
1478 </a>
1479 </li>
1480
1481
1482
1483
1484
1485
1486
1487 <li class="md-nav__item">
1488 <a href="../../migration/wsc52/templates/" class="md-nav__link">
1489 Templates and Languages
1490 </a>
1491 </li>
1492
1493
1494
1495
1496
1497
1498
1499 <li class="md-nav__item">
1500 <a href="../../migration/wsc52/libraries/" class="md-nav__link">
1501 Third Party Libraries
1502 </a>
1503 </li>
1504
1505
1506
1507 </ul>
1508 </nav>
1509 </li>
1510
1511
1512
1513
1514
1515
1516
1517
1518 <li class="md-nav__item md-nav__item--nested">
1519
1520
1521 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_3" type="checkbox" id="__nav_6_3" >
1522
1523 <label class="md-nav__link" for="__nav_6_3">
1524 Migrating from WSC 3.1
1525 <span class="md-nav__icon md-icon"></span>
1526 </label>
1527 <nav class="md-nav" aria-label="Migrating from WSC 3.1" data-md-level="2">
1528 <label class="md-nav__title" for="__nav_6_3">
1529 <span class="md-nav__icon md-icon"></span>
1530 Migrating from WSC 3.1
1531 </label>
1532 <ul class="md-nav__list" data-md-scrollfix>
1533
1534
1535
1536
1537
1538 <li class="md-nav__item">
1539 <a href="../../migration/wsc31/php/" class="md-nav__link">
1540 PHP API
1541 </a>
1542 </li>
1543
1544
1545
1546 </ul>
1547 </nav>
1548 </li>
1549
1550
1551
1552
1553
1554
1555
1556
1557 <li class="md-nav__item md-nav__item--nested">
1558
1559
1560 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_4" type="checkbox" id="__nav_6_4" >
1561
1562 <label class="md-nav__link" for="__nav_6_4">
1563 Migrating from WSC 3.0
1564 <span class="md-nav__icon md-icon"></span>
1565 </label>
1566 <nav class="md-nav" aria-label="Migrating from WSC 3.0" data-md-level="2">
1567 <label class="md-nav__title" for="__nav_6_4">
1568 <span class="md-nav__icon md-icon"></span>
1569 Migrating from WSC 3.0
1570 </label>
1571 <ul class="md-nav__list" data-md-scrollfix>
1572
1573
1574
1575
1576
1577 <li class="md-nav__item">
1578 <a href="../../migration/wsc30/php/" class="md-nav__link">
1579 PHP API
1580 </a>
1581 </li>
1582
1583
1584
1585
1586
1587
1588
1589 <li class="md-nav__item">
1590 <a href="../../migration/wsc30/javascript/" class="md-nav__link">
1591 JavaScript API
1592 </a>
1593 </li>
1594
1595
1596
1597
1598
1599
1600
1601 <li class="md-nav__item">
1602 <a href="../../migration/wsc30/templates/" class="md-nav__link">
1603 Templates
1604 </a>
1605 </li>
1606
1607
1608
1609
1610
1611
1612
1613 <li class="md-nav__item">
1614 <a href="../../migration/wsc30/css/" class="md-nav__link">
1615 CSS
1616 </a>
1617 </li>
1618
1619
1620
1621
1622
1623
1624
1625 <li class="md-nav__item">
1626 <a href="../../migration/wsc30/package/" class="md-nav__link">
1627 Package Components
1628 </a>
1629 </li>
1630
1631
1632
1633 </ul>
1634 </nav>
1635 </li>
1636
1637
1638
1639
1640
1641
1642
1643
1644 <li class="md-nav__item md-nav__item--nested">
1645
1646
1647 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_5" type="checkbox" id="__nav_6_5" >
1648
1649 <label class="md-nav__link" for="__nav_6_5">
1650 Migrating from WCF 2.1
1651 <span class="md-nav__icon md-icon"></span>
1652 </label>
1653 <nav class="md-nav" aria-label="Migrating from WCF 2.1" data-md-level="2">
1654 <label class="md-nav__title" for="__nav_6_5">
1655 <span class="md-nav__icon md-icon"></span>
1656 Migrating from WCF 2.1
1657 </label>
1658 <ul class="md-nav__list" data-md-scrollfix>
1659
1660
1661
1662
1663
1664 <li class="md-nav__item">
1665 <a href="../../migration/wcf21/php/" class="md-nav__link">
1666 PHP API
1667 </a>
1668 </li>
1669
1670
1671
1672
1673
1674
1675
1676 <li class="md-nav__item">
1677 <a href="../../migration/wcf21/templates/" class="md-nav__link">
1678 Templates
1679 </a>
1680 </li>
1681
1682
1683
1684
1685
1686
1687
1688 <li class="md-nav__item">
1689 <a href="../../migration/wcf21/css/" class="md-nav__link">
1690 CSS
1691 </a>
1692 </li>
1693
1694
1695
1696
1697
1698
1699
1700 <li class="md-nav__item">
1701 <a href="../../migration/wcf21/package/" class="md-nav__link">
1702 Package Components
1703 </a>
1704 </li>
1705
1706
1707
1708 </ul>
1709 </nav>
1710 </li>
1711
1712
1713
1714 </ul>
1715 </nav>
1716 </li>
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728 <li class="md-nav__item md-nav__item--nested">
1729
1730
1731 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
1732
1733 <label class="md-nav__link" for="__nav_7">
1734 Tutorials
1735 <span class="md-nav__icon md-icon"></span>
1736 </label>
1737 <nav class="md-nav" aria-label="Tutorials" data-md-level="1">
1738 <label class="md-nav__title" for="__nav_7">
1739 <span class="md-nav__icon md-icon"></span>
1740 Tutorials
1741 </label>
1742 <ul class="md-nav__list" data-md-scrollfix>
1743
1744
1745
1746
1747
1748
1749 <li class="md-nav__item md-nav__item--nested">
1750
1751
1752 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7_1" type="checkbox" id="__nav_7_1" >
1753
1754 <label class="md-nav__link" for="__nav_7_1">
1755 Tutorial Series
1756 <span class="md-nav__icon md-icon"></span>
1757 </label>
1758 <nav class="md-nav" aria-label="Tutorial Series" data-md-level="2">
1759 <label class="md-nav__title" for="__nav_7_1">
1760 <span class="md-nav__icon md-icon"></span>
1761 Tutorial Series
1762 </label>
1763 <ul class="md-nav__list" data-md-scrollfix>
1764
1765
1766
1767
1768
1769 <li class="md-nav__item">
1770 <a href="../../tutorial/series/overview/" class="md-nav__link">
1771 Overview
1772 </a>
1773 </li>
1774
1775
1776
1777
1778
1779
1780
1781 <li class="md-nav__item">
1782 <a href="../../tutorial/series/part_1/" class="md-nav__link">
1783 Part 1
1784 </a>
1785 </li>
1786
1787
1788
1789
1790
1791
1792
1793 <li class="md-nav__item">
1794 <a href="../../tutorial/series/part_2/" class="md-nav__link">
1795 Part 2
1796 </a>
1797 </li>
1798
1799
1800
1801
1802
1803
1804
1805 <li class="md-nav__item">
1806 <a href="../../tutorial/series/part_3/" class="md-nav__link">
1807 Part 3
1808 </a>
1809 </li>
1810
1811
1812
1813 </ul>
1814 </nav>
1815 </li>
1816
1817
1818
1819 </ul>
1820 </nav>
1821 </li>
1822
1823
1824
1825 </ul>
1826</nav>
1827 </div>
1828 </div>
1829 </div>
1830
1831
1832
1833 <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1834 <div class="md-sidebar__scrollwrap">
1835 <div class="md-sidebar__inner">
1836
1837<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1838
1839
1840
1841
1842
1843 <label class="md-nav__title" for="__toc">
1844 <span class="md-nav__icon md-icon"></span>
1845 Table of contents
1846 </label>
1847 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1848
1849 <li class="md-nav__item">
1850 <a href="#the-history-of-the-legacy-api" class="md-nav__link">
1851 The History of the Legacy API
1852 </a>
1853
1854</li>
1855
1856 <li class="md-nav__item">
1857 <a href="#embedding-javascript-inside-templates" class="md-nav__link">
1858 Embedding JavaScript inside Templates
1859 </a>
1860
1861</li>
1862
1863 <li class="md-nav__item">
1864 <a href="#including-external-javascript-files" class="md-nav__link">
1865 Including External JavaScript Files
1866 </a>
1867
1868 <nav class="md-nav" aria-label="Including External JavaScript Files">
1869 <ul class="md-nav__list">
1870
1871 <li class="md-nav__item">
1872 <a href="#debug-variants-and-cache-buster" class="md-nav__link">
1873 Debug-Variants and Cache-Buster
1874 </a>
1875
1876</li>
1877
1878 <li class="md-nav__item">
1879 <a href="#the-accelerated-guest-view-tiny-builds" class="md-nav__link">
1880 The Accelerated Guest View ("Tiny Builds")
1881 </a>
1882
1883</li>
1884
1885 <li class="md-nav__item">
1886 <a href="#the-js-template-plugin" class="md-nav__link">
1887 The {js} Template Plugin
1888 </a>
1889
1890</li>
1891
1892 </ul>
1893 </nav>
1894
1895</li>
1896
1897 </ul>
1898
1899</nav>
1900 </div>
1901 </div>
1902 </div>
1903
1904
1905 <div class="md-content" data-md-component="content">
1906 <article class="md-content__inner md-typeset">
1907
1908
1909
1910 <h1 id="general-javascript-usage">General JavaScript Usage<a class="headerlink" href="#general-javascript-usage" title="Permanent link">#</a></h1>
1911<h2 id="the-history-of-the-legacy-api">The History of the Legacy API<a class="headerlink" href="#the-history-of-the-legacy-api" title="Permanent link">#</a></h2>
1912<p>The WoltLab Suite 3.0 <a href="../new-api_writing-a-module/">introduced a new API</a> based on AMD-Modules
1913with ES5-JavaScript that was designed with high performance and visible dependencies
1914in mind. This was a fundamental change in comparison to <a href="../legacy-api/">the legacy API</a>
1915that was build many years before while jQuery was still a thing and we had to deal
1916with ancient browsers such as Internet Explorer 9 that felt short in both CSS and
1917JavaScript capabilities.</p>
1918<p>Fast forward a few years, the old API is still around and most important, it is
1919actively being used by some components that have not been rewritten yet. This
1920has been done to preserve the backwards-compatibility and to avoid the
1921significant amount of work that it requires to rewrite a component. The components
1922invoked on page initialization have all been rewritten to use the modern API, but
1923some deferred objects that are invoked later during the page runtime may still
1924use the old API.</p>
1925<p>However, the legacy API is deprecated and you should not rely on it for new
1926components at all. It slowly but steadily gets replaced up until a point where its
1927last bits are finally removed from the code base.</p>
1928<h2 id="embedding-javascript-inside-templates">Embedding JavaScript inside Templates<a class="headerlink" href="#embedding-javascript-inside-templates" title="Permanent link">#</a></h2>
1929<p>The <code>&lt;script&gt;</code>-tags are extracted and moved during template processing, eventually
1930placing them at the very end of the body element while preserving their order of
1931appearance.</p>
1932<p>This behavior is controlled through the <code>data-relocate="true"</code> attribute on the <code>&lt;script&gt;</code>
1933which is mandatory for almost all scripts, mostly because their dependencies (such
1934as jQuery) are moved to the bottom anyway.</p>
1935<div class="highlight"><pre><span></span><code><span class="p">&lt;</span><span class="nt">script</span> <span class="na">data-relocate</span><span class="o">=</span><span class="s">&quot;true&quot;</span><span class="p">&gt;</span>
1936 <span class="nx">$</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
1937 <span class="c1">// Code that uses jQuery (Legacy API)</span>
1938 <span class="p">});</span>
1939<span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
1940
1941<span class="c">&lt;!-- or --&gt;</span>
1942
1943<span class="p">&lt;</span><span class="nt">script</span> <span class="na">data-relocate</span><span class="o">=</span><span class="s">&quot;true&quot;</span><span class="p">&gt;</span>
1944 <span class="nx">require</span><span class="p">([</span><span class="s2">&quot;Some&quot;</span><span class="p">,</span> <span class="s2">&quot;Dependencies&quot;</span><span class="p">],</span> <span class="kd">function</span><span class="p">(</span><span class="nx">Some</span><span class="p">,</span> <span class="nx">Dependencies</span><span class="p">)</span> <span class="p">{</span>
1945 <span class="c1">// Modern API</span>
1946 <span class="p">});</span>
1947<span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
1948</code></pre></div>
45ca63d0
TD
1949<h2 id="including-external-javascript-files">Including External JavaScript Files<a class="headerlink" href="#including-external-javascript-files" title="Permanent link">#</a></h2>
1950<p>The AMD-Modules used in the new API are automatically recognized and lazy-loaded
1951on demand, so unless you have a rather large and pre-compiled code-base, there
1952is nothing else to worry about.</p>
1953<h3 id="debug-variants-and-cache-buster">Debug-Variants and Cache-Buster<a class="headerlink" href="#debug-variants-and-cache-buster" title="Permanent link">#</a></h3>
1954<p>Your JavaScript files may change over time and you would want the users' browsers
1955to always load and use the latest version of your files. This can be achieved by
1956appending the special <code>LAST_UPDATE_TIME</code> constant to your file path. It contains
1957the unix timestamp of the last time any package was installed, updated or removed
1958and thus avoid outdated caches by relying on a unique value, without invalidating
1959the cache more often that it needs to be.</p>
1960<div class="highlight"><pre><span></span><code><span class="p">&lt;</span><span class="nt">script</span> <span class="na">data-relocate</span><span class="o">=</span><span class="s">&quot;true&quot;</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;{@$__wcf-&gt;getPath(&#39;app&#39;)}js/App.js?t={@LAST_UPDATE_TIME}&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
1961</code></pre></div>
45ca63d0
TD
1962<p>For small scripts you can simply serve the full, non-minified version to the user
1963at all times, the differences in size and execution speed are insignificant and
1964are very unlikely to offer any benefits. They might even yield a worse performance,
1965because you'll have to include them statically in the template, even if the code
1966is never called.</p>
1967<p>However, if you're including a minified build in your app or plugin, you should
1968include a switch to load the uncompressed version in the debug mode, while serving
1969the minified and optimized file to the average visitor. You should use the
1970<code>ENABLE_DEBUG_MODE</code> constant to decide which version should be loaded.</p>
1971<div class="highlight"><pre><span></span><code><span class="p">&lt;</span><span class="nt">script</span> <span class="na">data-relocate</span><span class="o">=</span><span class="s">&quot;true&quot;</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;{@$__wcf-&gt;getPath(&#39;app&#39;)}js/App{if !ENABLE_DEBUG_MODE}.min{/if}.js?t={@LAST_UPDATE_TIME}&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
1972</code></pre></div>
45ca63d0
TD
1973<h3 id="the-accelerated-guest-view-tiny-builds">The Accelerated Guest View ("Tiny Builds")<a class="headerlink" href="#the-accelerated-guest-view-tiny-builds" title="Permanent link">#</a></h3>
1974<div class="admonition info">
1975<p class="admonition-title">You can learn more on the <a href="../../migration/wsc30/javascript/">Accelerated Guest View</a> in the migration docs.</p>
1976</div>
1977<p>The "Accelerated Guest View" was introduced in WoltLab Suite 3.1 and aims to
1978decrease page size and to improve responsiveness by enabling a read-only mode
1979for visitors. If you are providing a separate compiled build for this mode, you'll
1980need to include yet another switch to serve the right version to the visitor.</p>
1981<div class="highlight"><pre><span></span><code><span class="p">&lt;</span><span class="nt">script</span> <span class="na">data-relocate</span><span class="o">=</span><span class="s">&quot;true&quot;</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;{@$__wcf-&gt;getPath(&#39;app&#39;)}js/App{if !ENABLE_DEBUG_MODE}{if VISITOR_USE_TINY_BUILD}.tiny{/if}.min{/if}.js?t={@LAST_UPDATE_TIME}&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
1982</code></pre></div>
45ca63d0
TD
1983<h3 id="the-js-template-plugin">The <code>{js}</code> Template Plugin<a class="headerlink" href="#the-js-template-plugin" title="Permanent link">#</a></h3>
1984<p>The <code>{js}</code> template plugin exists solely to provide a much easier and less error-prone
1985method to include external JavaScript files.</p>
1986<div class="highlight"><pre><span></span><code>{js application=&#39;app&#39; file=&#39;App&#39; hasTiny=true}
1987</code></pre></div>
45ca63d0
TD
1988<p>The <code>hasTiny</code> attribute is optional, you can set it to <code>false</code> or just omit it
1989entirely if you do not provide a tiny build for your file.</p>
1990
1991
1992
1993
1994
1995
1996
1997 </article>
1998 </div>
1999 </div>
2000 </main>
2001
2002
2003<footer class="md-footer">
2004
2005 <nav class="md-footer__inner md-grid" aria-label="Footer">
2006
2007 <a href="../../view/css/" class="md-footer__link md-footer__link--prev" rel="prev">
2008 <div class="md-footer__button md-icon">
2009 <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>
2010 </div>
2011 <div class="md-footer__title">
2012 <div class="md-ellipsis">
2013 <span class="md-footer__direction">
2014 Previous
2015 </span>
2016 CSS
2017 </div>
2018 </div>
2019 </a>
2020
2021
2022 <a href="../new-api_writing-a-module/" class="md-footer__link md-footer__link--next" rel="next">
2023 <div class="md-footer__title">
2024 <div class="md-ellipsis">
2025 <span class="md-footer__direction">
2026 Next
2027 </span>
2028 Writing a module
2029 </div>
2030 </div>
2031 <div class="md-footer__button md-icon">
2032 <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>
2033 </div>
2034 </a>
2035
2036 </nav>
2037
2038 <div class="md-footer-meta md-typeset">
2039 <div class="md-footer-meta__inner md-grid">
2040 <div class="md-footer-copyright">
2041
2042 <div class="md-footer-copyright__highlight">
2043 Copyright © 2020 WoltLab GmbH
2044 </div>
2045
2046 Made with
2047 <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2048 Material for MkDocs
2049 </a>
fb88dc6e 2050
45ca63d0
TD
2051 </div>
2052 <div class="md-footer-copyright">
2053 <a href="https://www.woltlab.com/legal-notice/">Legal Notice</a>
2054 <a href="https://www.woltlab.com/privacy-policy/">Privacy Policy</a>
2055</div>
2056 </div>
2057 </div>
2058</footer>
2059
2060 </div>
2061 <div class="md-dialog" data-md-component="dialog">
2062 <div class="md-dialog__inner md-typeset"></div>
2063 </div>
2064 <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.fb4a9340.min.js", "version": {"provider": "mike"}}</script>
2065
2066
fb88dc6e 2067 <script src="../../assets/javascripts/bundle.5cf3e710.min.js"></script>
45ca63d0
TD
2068
2069
2070 </body>
2071</html>