Avoid using template compiler in `ObjectActionFunctionTemplatePlugin`
[GitHub/WoltLab/WCF.git] / com.woltlab.wcf / templates / headIncludeJavaScript.tpl
1 {*
2 DO NOT EDIT THIS FILE
3 *}
4
5 <script>
6 var SID_ARG_2ND = '';
7 var WCF_PATH = '{@$__wcf->getPath()}';
8 var WSC_API_URL = '{@$__wcf->getActivePath()}';
9 var SECURITY_TOKEN = '{csrfToken type=raw}';
10 var LANGUAGE_ID = {@$__wcf->getLanguage()->languageID};
11 var LANGUAGE_USE_INFORMAL_VARIANT = {if LANGUAGE_USE_INFORMAL_VARIANT}true{else}false{/if};
12 var TIME_NOW = {@TIME_NOW};
13 var LAST_UPDATE_TIME = {@LAST_UPDATE_TIME};
14 var URL_LEGACY_MODE = false;
15 var ENABLE_DEBUG_MODE = {if ENABLE_DEBUG_MODE}true{else}false{/if};
16 var ENABLE_PRODUCTION_DEBUG_MODE = {if ENABLE_PRODUCTION_DEBUG_MODE}true{else}false{/if};
17 var ENABLE_DEVELOPER_TOOLS = {if ENABLE_DEVELOPER_TOOLS}true{else}false{/if};
18 var WSC_API_VERSION = {@WSC_API_VERSION};
19
20 var REACTION_TYPES = {@$__wcf->getReactionHandler()->getReactionsJSVariable()};
21
22 {if ENABLE_DEBUG_MODE}
23 {* This constant is a compiler option, it does not exist in production. *}
24 var COMPILER_TARGET_DEFAULT = {if !VISITOR_USE_TINY_BUILD || $__wcf->user->userID}true{else}false{/if};
25 {/if}
26 </script>
27
28 {js application='wcf' file='require' bundle='WoltLabSuite.Core' core='true' hasTiny=true}
29 {js application='wcf' file='require.config' bundle='WoltLabSuite.Core' core='true' hasTiny=true}
30 {js application='wcf' file='require.linearExecution' bundle='WoltLabSuite.Core' core='true' hasTiny=true}
31 {js application='wcf' file='wcf.globalHelper' bundle='WoltLabSuite.Core' core='true' hasTiny=true}
32 {js application='wcf' file='3rdParty/tslib' bundle='WoltLabSuite.Core' core='true' hasTiny=true}
33 <script>
34 requirejs.config({
35 baseUrl: '{@$__wcf->getPath()}js',
36 urlArgs: 't={@LAST_UPDATE_TIME}'
37 {hascontent}
38 , paths: {
39 {content}{event name='requirePaths'}{/content}
40 }
41 {/hascontent}
42 });
43 {* Safari ignores the HTTP cache headers for the back/forward navigation. *}
44 window.addEventListener('pageshow', function(event) {
45 if (event.persisted) {
46 window.location.reload();
47 }
48 });
49 {event name='requireConfig'}
50 </script>
51 <script data-relocate="true">
52 require(['Language', 'WoltLabSuite/Core/BootstrapFrontend', 'User'], function(Language, BootstrapFrontend, User) {
53 Language.addObject({
54 '__days': [ '{jslang}wcf.date.day.sunday{/jslang}', '{jslang}wcf.date.day.monday{/jslang}', '{jslang}wcf.date.day.tuesday{/jslang}', '{jslang}wcf.date.day.wednesday{/jslang}', '{jslang}wcf.date.day.thursday{/jslang}', '{jslang}wcf.date.day.friday{/jslang}', '{jslang}wcf.date.day.saturday{/jslang}' ],
55 '__daysShort': [ '{jslang}wcf.date.day.sun{/jslang}', '{jslang}wcf.date.day.mon{/jslang}', '{jslang}wcf.date.day.tue{/jslang}', '{jslang}wcf.date.day.wed{/jslang}', '{jslang}wcf.date.day.thu{/jslang}', '{jslang}wcf.date.day.fri{/jslang}', '{jslang}wcf.date.day.sat{/jslang}' ],
56 '__months': [ '{jslang}wcf.date.month.january{/jslang}', '{jslang}wcf.date.month.february{/jslang}', '{jslang}wcf.date.month.march{/jslang}', '{jslang}wcf.date.month.april{/jslang}', '{jslang}wcf.date.month.may{/jslang}', '{jslang}wcf.date.month.june{/jslang}', '{jslang}wcf.date.month.july{/jslang}', '{jslang}wcf.date.month.august{/jslang}', '{jslang}wcf.date.month.september{/jslang}', '{jslang}wcf.date.month.october{/jslang}', '{jslang}wcf.date.month.november{/jslang}', '{jslang}wcf.date.month.december{/jslang}' ],
57 '__monthsShort': [ '{jslang}wcf.date.month.short.jan{/jslang}', '{jslang}wcf.date.month.short.feb{/jslang}', '{jslang}wcf.date.month.short.mar{/jslang}', '{jslang}wcf.date.month.short.apr{/jslang}', '{jslang}wcf.date.month.short.may{/jslang}', '{jslang}wcf.date.month.short.jun{/jslang}', '{jslang}wcf.date.month.short.jul{/jslang}', '{jslang}wcf.date.month.short.aug{/jslang}', '{jslang}wcf.date.month.short.sep{/jslang}', '{jslang}wcf.date.month.short.oct{/jslang}', '{jslang}wcf.date.month.short.nov{/jslang}', '{jslang}wcf.date.month.short.dec{/jslang}' ],
58 'wcf.clipboard.item.unmarkAll': '{jslang}wcf.clipboard.item.unmarkAll{/jslang}',
59 'wcf.clipboard.item.markAll': '{jslang}wcf.clipboard.item.markAll{/jslang}',
60 'wcf.clipboard.item.mark': '{jslang}wcf.clipboard.item.mark{/jslang}',
61 'wcf.date.relative.now': '{jslang __literal=true}wcf.date.relative.now{/jslang}',
62 'wcf.date.relative.minutes': '{jslang __literal=true}wcf.date.relative.minutes{/jslang}',
63 'wcf.date.relative.hours': '{jslang __literal=true}wcf.date.relative.hours{/jslang}',
64 'wcf.date.relative.pastDays': '{jslang __literal=true}wcf.date.relative.pastDays{/jslang}',
65 'wcf.date.dateFormat': '{jslang}wcf.date.dateFormat{/jslang}',
66 'wcf.date.dateTimeFormat': '{jslang}wcf.date.dateTimeFormat{/jslang}',
67 'wcf.date.shortDateTimeFormat': '{jslang}wcf.date.shortDateTimeFormat{/jslang}',
68 'wcf.date.hour': '{jslang}wcf.date.hour{/jslang}',
69 'wcf.date.minute': '{jslang}wcf.date.minute{/jslang}',
70 'wcf.date.timeFormat': '{jslang}wcf.date.timeFormat{/jslang}',
71 'wcf.date.firstDayOfTheWeek': '{jslang}wcf.date.firstDayOfTheWeek{/jslang}',
72 'wcf.global.button.add': '{jslang}wcf.global.button.add{/jslang}',
73 'wcf.global.button.cancel': '{jslang}wcf.global.button.cancel{/jslang}',
74 'wcf.global.button.close': '{jslang}wcf.global.button.close{/jslang}',
75 'wcf.global.button.collapsible': '{jslang}wcf.global.button.collapsible{/jslang}',
76 'wcf.global.button.delete': '{jslang}wcf.global.button.delete{/jslang}',
77 'wcf.button.delete.confirmMessage': '{jslang __literal=true}wcf.button.delete.confirmMessage{/jslang}',
78 'wcf.global.button.disable': '{jslang}wcf.global.button.disable{/jslang}',
79 'wcf.global.button.disabledI18n': '{jslang}wcf.global.button.disabledI18n{/jslang}',
80 'wcf.global.button.edit': '{jslang}wcf.global.button.edit{/jslang}',
81 'wcf.global.button.enable': '{jslang}wcf.global.button.enable{/jslang}',
82 'wcf.global.button.hide': '{jslang}wcf.global.button.hide{/jslang}',
83 'wcf.global.button.insert': '{jslang}wcf.global.button.insert{/jslang}',
84 'wcf.global.button.next': '{jslang}wcf.global.button.next{/jslang}',
85 'wcf.global.button.preview': '{jslang}wcf.global.button.preview{/jslang}',
86 'wcf.global.button.reset': '{jslang}wcf.global.button.reset{/jslang}',
87 'wcf.global.button.save': '{jslang}wcf.global.button.save{/jslang}',
88 'wcf.global.button.search': '{jslang}wcf.global.button.search{/jslang}',
89 'wcf.global.button.submit': '{jslang}wcf.global.button.submit{/jslang}',
90 'wcf.global.button.upload': '{jslang}wcf.global.button.upload{/jslang}',
91 'wcf.global.confirmation.cancel': '{jslang}wcf.global.confirmation.cancel{/jslang}',
92 'wcf.global.confirmation.confirm': '{jslang}wcf.global.confirmation.confirm{/jslang}',
93 'wcf.global.confirmation.title': '{jslang}wcf.global.confirmation.title{/jslang}',
94 'wcf.global.decimalPoint': '{jslang}wcf.global.decimalPoint{/jslang}',
95 'wcf.global.error.timeout': '{jslang}wcf.global.error.timeout{/jslang}',
96 'wcf.global.form.error.empty': '{jslang}wcf.global.form.error.empty{/jslang}',
97 'wcf.global.form.error.greaterThan': '{jslang __literal=true}wcf.global.form.error.greaterThan{/jslang}',
98 'wcf.global.form.error.lessThan': '{jslang __literal=true}wcf.global.form.error.lessThan{/jslang}',
99 'wcf.global.form.error.multilingual': '{jslang}wcf.global.form.error.multilingual{/jslang}',
100 'wcf.global.form.input.maxItems': '{jslang}wcf.global.form.input.maxItems{/jslang}',
101 'wcf.global.language.noSelection': '{jslang}wcf.global.language.noSelection{/jslang}',
102 'wcf.global.loading': '{jslang}wcf.global.loading{/jslang}',
103 'wcf.global.noSelection': '{jslang}wcf.global.noSelection{/jslang}',
104 'wcf.global.select': '{jslang}wcf.global.select{/jslang}',
105 'wcf.page.jumpTo': '{jslang}wcf.page.jumpTo{/jslang}',
106 'wcf.page.jumpTo.description': '{jslang}wcf.page.jumpTo.description{/jslang}',
107 'wcf.global.page.pagination': '{jslang}wcf.global.page.pagination{/jslang}',
108 'wcf.global.page.next': '{jslang}wcf.global.page.next{/jslang}',
109 'wcf.global.page.previous': '{jslang}wcf.global.page.previous{/jslang}',
110 'wcf.global.pageDirection': '{jslang}wcf.global.pageDirection{/jslang}',
111 'wcf.global.reason': '{jslang}wcf.global.reason{/jslang}',
112 'wcf.global.scrollUp': '{jslang}wcf.global.scrollUp{/jslang}',
113 'wcf.global.success': '{jslang}wcf.global.success{/jslang}',
114 'wcf.global.success.add': '{jslang}wcf.global.success.add{/jslang}',
115 'wcf.global.success.edit': '{jslang}wcf.global.success.edit{/jslang}',
116 'wcf.global.thousandsSeparator': '{jslang}wcf.global.thousandsSeparator{/jslang}',
117 'wcf.page.pagePosition': '{jslang __literal=true}wcf.page.pagePosition{/jslang}',
118 'wcf.style.changeStyle': '{jslang}wcf.style.changeStyle{/jslang}',
119 'wcf.user.activityPoint': '{jslang}wcf.user.activityPoint{/jslang}',
120 'wcf.user.panel.markAllAsRead': '{jslang}wcf.user.panel.markAllAsRead{/jslang}',
121 'wcf.user.panel.markAsRead': '{jslang}wcf.user.panel.markAsRead{/jslang}',
122 'wcf.user.panel.settings': '{jslang}wcf.user.panel.settings{/jslang}',
123 'wcf.user.panel.showAll': '{jslang}wcf.user.panel.showAll{/jslang}',
124 'wcf.menu.page': '{jslang}wcf.menu.page{/jslang}',
125 'wcf.menu.user': '{jslang}wcf.menu.user{/jslang}',
126 'wcf.global.button.showMenu': '{jslang}wcf.global.button.showMenu{/jslang}',
127 'wcf.global.button.hideMenu': '{jslang}wcf.global.button.hideMenu{/jslang}',
128 'wcf.date.datePicker': '{jslang}wcf.date.datePicker{/jslang}',
129 'wcf.date.datePicker.previousMonth': '{jslang}wcf.date.datePicker.previousMonth{/jslang}',
130 'wcf.date.datePicker.nextMonth': '{jslang}wcf.date.datePicker.nextMonth{/jslang}',
131 'wcf.date.datePicker.month': '{jslang}wcf.date.datePicker.month{/jslang}',
132 'wcf.date.datePicker.year': '{jslang}wcf.date.datePicker.year{/jslang}',
133 'wcf.date.datePicker.hour': '{jslang}wcf.date.datePicker.hour{/jslang}',
134 'wcf.date.datePicker.minute': '{jslang}wcf.date.datePicker.minute{/jslang}',
135 'wcf.global.form.password.button.hide': '{jslang}wcf.global.form.password.button.hide{/jslang}',
136 'wcf.global.form.password.button.show': '{jslang}wcf.global.form.password.button.show{/jslang}'
137 {if MODULE_LIKE}
138 ,'wcf.like.button.like': '{jslang}wcf.like.button.like{/jslang}',
139 'wcf.like.button.dislike': '{jslang}wcf.like.button.dislike{/jslang}',
140 'wcf.like.tooltip': '{jslang}wcf.like.jsTooltip{/jslang}',
141 'wcf.like.summary': '{jslang}wcf.like.summary{/jslang}',
142 'wcf.like.details': '{jslang}wcf.like.details{/jslang}',
143 'wcf.reactions.react': '{jslang}wcf.reactions.react{/jslang}'
144 {/if}
145
146 {event name='javascriptLanguageImport'}
147 });
148
149 BootstrapFrontend.setup({
150 backgroundQueue: {
151 url: '{link controller="BackgroundQueuePerform"}{/link}',
152 force: {if $forceBackgroundQueuePerform|isset}true{else}false{/if}
153 },
154 enableUserPopover: {if $__wcf->getSession()->getPermission('user.profile.canViewUserProfile')}true{else}false{/if},
155 executeCronjobs: {if $executeCronjobs}true{else}false{/if},
156 styleChanger: {if $__wcf->getStyleHandler()->showStyleChanger()}true{else}false{/if}
157 });
158
159 User.init({@$__wcf->user->userID}, '{@$__wcf->user->username|encodeJS}', {if $__wcf->user->userID}'{@$__wcf->user->getLink()|encodeJS}'{else}''{/if});
160 });
161
162 // prevent jQuery and other libraries from utilizing define()
163 __require_define_amd = define.amd;
164 define.amd = undefined;
165 </script>
166
167 {include file='__devtoolsLanguageChooser'}
168
169 {if ENABLE_DEBUG_MODE && ENABLE_DEVELOPER_TOOLS}
170 <script data-relocate="true">
171 require(["WoltLabSuite/Core/Devtools/Style/LiveReload"], (LiveReload) => LiveReload.watch());
172 </script>
173 {/if}
174
175 {js application='wcf' lib='jquery' hasTiny=true}
176 {js application='wcf' lib='jquery-ui' hasTiny=true}
177 {js application='wcf' lib='jquery-ui' file='touchPunch' bundle='WCF.Combined' hasTiny=true}
178 {js application='wcf' lib='jquery-ui' file='nestedSortable' bundle='WCF.Combined' hasTiny=true}
179 {js application='wcf' lib='polyfill' file='focus-visible' bundle='WCF.Combined' hasTiny=true}
180 {js application='wcf' file='WCF.Assets' bundle='WCF.Combined' hasTiny=true}
181 {js application='wcf' file='WCF' bundle='WCF.Combined' hasTiny=true}
182
183 <script data-relocate="true">
184 define.amd = __require_define_amd;
185 $.holdReady(true);
186
187 WCF.User.init({@$__wcf->user->userID}, '{@$__wcf->user->username|encodeJS}');
188 </script>
189
190 {js application='wcf' file='WCF.Like' bundle='WCF.Combined' hasTiny=true}
191 {js application='wcf' file='WCF.ACL' bundle='WCF.Combined' hasTiny=true}
192 {js application='wcf' file='WCF.Attachment' bundle='WCF.Combined' hasTiny=true}
193 {js application='wcf' file='WCF.ColorPicker' bundle='WCF.Combined' hasTiny=true}
194 {js application='wcf' file='WCF.Comment' bundle='WCF.Combined' hasTiny=true}
195 {js application='wcf' file='WCF.ImageViewer' bundle='WCF.Combined' hasTiny=true}
196 {js application='wcf' file='WCF.Label' bundle='WCF.Combined' hasTiny=true}
197 {js application='wcf' file='WCF.Location' bundle='WCF.Combined' hasTiny=true}
198 {js application='wcf' file='WCF.Message' bundle='WCF.Combined' hasTiny=true}
199 {js application='wcf' file='WCF.Poll' bundle='WCF.Combined' hasTiny=true}
200 {js application='wcf' file='WCF.Search.Message' bundle='WCF.Combined' hasTiny=true}
201 {js application='wcf' file='WCF.User' bundle='WCF.Combined' hasTiny=true}
202 {js application='wcf' file='WCF.Moderation' bundle='WCF.Combined' hasTiny=true}
203
204 {event name='javascriptInclude'}
205
206 <noscript>
207 <style>
208 .jsOnly {
209 display: none !important;
210 }
211
212 .noJsOnly {
213 display: block !important;
214 }
215 </style>
216 </noscript>
217
218 <script data-relocate="true">
219 $(function() {
220 WCF.User.Profile.ActivityPointList.init();
221
222 {if MODULE_TROPHY && $__wcf->session->getPermission('user.profile.trophy.canSeeTrophies')}
223 require(['WoltLabSuite/Core/Ui/User/Trophy/List'], function (UserTrophyList) {
224 new UserTrophyList();
225 });
226 {/if}
227
228 {event name='javascriptInit'}
229
230 {if ENABLE_POLLING && $__wcf->user->userID}
231 require(['WoltLabSuite/Core/Notification/Handler'], function(NotificationHandler) {
232 NotificationHandler.setup({
233 enableNotifications: {if $__wcf->useDesktopNotifications()}true{else}false{/if},
234 icon: '{$__wcf->getStyleHandler()->getStyle()->getFaviconAppleTouchIcon()}',
235 });
236 });
237 {/if}
238 });
239 </script>
240
241 {include file='imageViewer'}
242 {include file='headIncludeJsonLd'}