Commit | Line | Data |
---|---|---|
158bd3ca TD |
1 | <!DOCTYPE html> |
2 | <html dir="{@$__wcf->getLanguage()->getPageDirection()}" lang="{@$__wcf->getLanguage()->getFixedLanguageCode()}"> | |
3 | <head> | |
cbbb348c AE |
4 | <meta charset="utf-8"> |
5 | <meta name="viewport" content="width=device-width, initial-scale=1"> | |
6 | <meta name="robots" content="noindex"> | |
5c2036ab | 7 | <title>{if $pageTitle|isset}{@$pageTitle|language} - {/if}{lang}wcf.global.acp{/lang}{if PACKAGE_ID} - {PAGE_TITLE|language}{/if}</title> |
f201f350 | 8 | |
d09792c2 AE |
9 | {* work-around for Microsoft Edge that sometimes does not apply this style, if it was set via an external stylesheet *} |
10 | <style>ol, ul { list-style: none; }</style> | |
11 | ||
f201f350 | 12 | <!-- Stylesheets --> |
0edf9f6c | 13 | <link href="//fonts.googleapis.com/css?family=Open+Sans:400,300,600" rel="stylesheet"> |
f201f350 AE |
14 | {@$__wcf->getStyleHandler()->getStylesheet(true)} |
15 | {event name='stylesheets'} | |
16 | ||
208bac1e | 17 | <!-- Icons --> |
3d9f265d AE |
18 | <link rel="apple-touch-icon" sizes="180x180" href="{@$__wcf->getPath()}images/favicon/default.apple-touch-icon.png"> |
19 | <link rel="manifest" href="{@$__wcf->getPath()}images/favicon/default.manifest.json"> | |
20 | <link rel="shortcut icon" href="{@$__wcf->getPath()}images/favicon/default.favicon.ico"> | |
21 | <meta name="msapplication-config" content="{@$__wcf->getPath()}images/favicon/default.browserconfig.xml"> | |
22 | <meta name="theme-color" content="#3a6d9c"> | |
208bac1e | 23 | |
df844448 | 24 | <script> |
6e8d8f67 | 25 | var SID_ARG_2ND = ''; |
7a353b6a | 26 | var WCF_PATH = '{@$__wcf->getPath()}'; |
5d1c96bc | 27 | var WSC_API_URL = '{@$__wcf->getActivePath()}acp/'; |
158bd3ca | 28 | var SECURITY_TOKEN = '{@SECURITY_TOKEN}'; |
22a51072 | 29 | var LANGUAGE_ID = {@$__wcf->getLanguage()->languageID}; |
eae52096 | 30 | var LANGUAGE_USE_INFORMAL_VARIANT = {if LANGUAGE_USE_INFORMAL_VARIANT}true{else}false{/if}; |
8574cbfd | 31 | var TIME_NOW = {@TIME_NOW}; |
a623cd24 | 32 | var LAST_UPDATE_TIME = {@LAST_UPDATE_TIME}; |
6e8d8f67 | 33 | var URL_LEGACY_MODE = false; |
0e69f27c | 34 | var ENABLE_DEBUG_MODE = {if ENABLE_DEBUG_MODE}true{else}false{/if}; |
32669648 | 35 | var ENABLE_DEVELOPER_TOOLS = {if ENABLE_DEVELOPER_TOOLS}true{else}false{/if}; |
89484ba0 | 36 | var WSC_API_VERSION = {@WSC_API_VERSION}; |
f5e3a61b | 37 | |
96d31616 AE |
38 | {* This constant is a compiler option, it does not exist in production. *} |
39 | {* Unlike the frontend, this option must be defined in the ACP at all times. *} | |
40 | var COMPILER_TARGET_DEFAULT = true; | |
158bd3ca | 41 | </script> |
e44f2cf1 | 42 | |
935cdbf3 | 43 | {js application='wcf' lib='polyfill' file='promise' bundle='WoltLabSuite.Core' core='true'} |
91b3ad54 AE |
44 | {js application='wcf' file='require' bundle='WoltLabSuite.Core' core='true'} |
45 | {js application='wcf' file='require.config' bundle='WoltLabSuite.Core' core='true'} | |
46 | {js application='wcf' file='require.linearExecution' bundle='WoltLabSuite.Core' core='true'} | |
47 | {js application='wcf' file='wcf.globalHelper' bundle='WoltLabSuite.Core' core='true'} | |
04310d59 | 48 | {js application='wcf' file='closest' bundle='WoltLabSuite.Core' core='true'} |
55919774 TD |
49 | <script> |
50 | requirejs.config({ | |
8a603e6d | 51 | baseUrl: '{@$__wcf->getPath()}js', |
33d93082 | 52 | urlArgs: 't={@LAST_UPDATE_TIME}' |
7ae41c12 TD |
53 | {hascontent} |
54 | , paths: { | |
55 | {content}{event name='requirePaths'}{/content} | |
56 | } | |
57 | {/hascontent} | |
55919774 | 58 | }); |
7ae41c12 | 59 | {event name='requireConfig'} |
55919774 | 60 | </script> |
7cedac20 | 61 | <script> |
5650aa98 AE |
62 | require(['Language', 'WoltLabSuite/Core/Acp/Bootstrap', 'User'], function(Language, AcpBootstrap, User) { |
63 | Language.addObject({ | |
64 | '__days': [ '{lang}wcf.date.day.sunday{/lang}', '{lang}wcf.date.day.monday{/lang}', '{lang}wcf.date.day.tuesday{/lang}', '{lang}wcf.date.day.wednesday{/lang}', '{lang}wcf.date.day.thursday{/lang}', '{lang}wcf.date.day.friday{/lang}', '{lang}wcf.date.day.saturday{/lang}' ], | |
65 | '__daysShort': [ '{lang}wcf.date.day.sun{/lang}', '{lang}wcf.date.day.mon{/lang}', '{lang}wcf.date.day.tue{/lang}', '{lang}wcf.date.day.wed{/lang}', '{lang}wcf.date.day.thu{/lang}', '{lang}wcf.date.day.fri{/lang}', '{lang}wcf.date.day.sat{/lang}' ], | |
66 | '__months': [ '{lang}wcf.date.month.january{/lang}', '{lang}wcf.date.month.february{/lang}', '{lang}wcf.date.month.march{/lang}', '{lang}wcf.date.month.april{/lang}', '{lang}wcf.date.month.may{/lang}', '{lang}wcf.date.month.june{/lang}', '{lang}wcf.date.month.july{/lang}', '{lang}wcf.date.month.august{/lang}', '{lang}wcf.date.month.september{/lang}', '{lang}wcf.date.month.october{/lang}', '{lang}wcf.date.month.november{/lang}', '{lang}wcf.date.month.december{/lang}' ], | |
67 | '__monthsShort': [ '{lang}wcf.date.month.short.jan{/lang}', '{lang}wcf.date.month.short.feb{/lang}', '{lang}wcf.date.month.short.mar{/lang}', '{lang}wcf.date.month.short.apr{/lang}', '{lang}wcf.date.month.short.may{/lang}', '{lang}wcf.date.month.short.jun{/lang}', '{lang}wcf.date.month.short.jul{/lang}', '{lang}wcf.date.month.short.aug{/lang}', '{lang}wcf.date.month.short.sep{/lang}', '{lang}wcf.date.month.short.oct{/lang}', '{lang}wcf.date.month.short.nov{/lang}', '{lang}wcf.date.month.short.dec{/lang}' ], | |
68 | 'wcf.acp.search.noResults': '{lang}wcf.acp.search.noResults{/lang}', | |
69 | 'wcf.clipboard.item.unmarkAll': '{lang}wcf.clipboard.item.unmarkAll{/lang}', | |
70 | 'wcf.date.relative.now': '{lang __literal=true}wcf.date.relative.now{/lang}', | |
71 | 'wcf.date.relative.minutes': '{capture assign=relativeMinutes}{lang __literal=true}wcf.date.relative.minutes{/lang}{/capture}{@$relativeMinutes|encodeJS}', | |
72 | 'wcf.date.relative.hours': '{capture assign=relativeHours}{lang __literal=true}wcf.date.relative.hours{/lang}{/capture}{@$relativeHours|encodeJS}', | |
73 | 'wcf.date.relative.pastDays': '{capture assign=relativePastDays}{lang __literal=true}wcf.date.relative.pastDays{/lang}{/capture}{@$relativePastDays|encodeJS}', | |
8a727072 | 74 | 'wcf.date.dateFormat': '{"wcf.date.dateFormat"|language|encodeJS}', |
5650aa98 AE |
75 | 'wcf.date.dateTimeFormat': '{lang}wcf.date.dateTimeFormat{/lang}', |
76 | 'wcf.date.shortDateTimeFormat': '{lang}wcf.date.shortDateTimeFormat{/lang}', | |
77 | 'wcf.date.hour': '{lang}wcf.date.hour{/lang}', | |
78 | 'wcf.date.minute': '{lang}wcf.date.minute{/lang}', | |
79 | 'wcf.date.timeFormat': '{lang}wcf.date.timeFormat{/lang}', | |
80 | 'wcf.date.firstDayOfTheWeek': '{lang}wcf.date.firstDayOfTheWeek{/lang}', | |
81 | 'wcf.global.button.add': '{lang}wcf.global.button.add{/lang}', | |
82 | 'wcf.global.button.cancel': '{lang}wcf.global.button.cancel{/lang}', | |
83 | 'wcf.global.button.close': '{lang}wcf.global.button.close{/lang}', | |
84 | 'wcf.global.button.collapsible': '{lang}wcf.global.button.collapsible{/lang}', | |
85 | 'wcf.global.button.delete': '{lang}wcf.global.button.delete{/lang}', | |
86 | 'wcf.global.button.disable': '{lang}wcf.global.button.disable{/lang}', | |
87 | 'wcf.global.button.disabledI18n': '{lang}wcf.global.button.disabledI18n{/lang}', | |
88 | 'wcf.global.button.edit': '{lang}wcf.global.button.edit{/lang}', | |
89 | 'wcf.global.button.enable': '{lang}wcf.global.button.enable{/lang}', | |
90 | 'wcf.global.button.hide': '{lang}wcf.global.button.hide{/lang}', | |
91 | 'wcf.global.button.insert': '{lang}wcf.global.button.insert{/lang}', | |
92 | 'wcf.global.button.next': '{lang}wcf.global.button.next{/lang}', | |
93 | 'wcf.global.button.preview': '{lang}wcf.global.button.preview{/lang}', | |
94 | 'wcf.global.button.reset': '{lang}wcf.global.button.reset{/lang}', | |
95 | 'wcf.global.button.save': '{lang}wcf.global.button.save{/lang}', | |
96 | 'wcf.global.button.search': '{lang}wcf.global.button.search{/lang}', | |
97 | 'wcf.global.button.submit': '{lang}wcf.global.button.submit{/lang}', | |
98 | 'wcf.global.button.upload': '{lang}wcf.global.button.upload{/lang}', | |
99 | 'wcf.global.confirmation.cancel': '{lang}wcf.global.confirmation.cancel{/lang}', | |
100 | 'wcf.global.confirmation.confirm': '{lang}wcf.global.confirmation.confirm{/lang}', | |
101 | 'wcf.global.confirmation.title': '{lang}wcf.global.confirmation.title{/lang}', | |
102 | 'wcf.global.decimalPoint': '{capture assign=decimalPoint}{lang}wcf.global.decimalPoint{/lang}{/capture}{$decimalPoint|encodeJS}', | |
103 | 'wcf.global.error.timeout': '{lang}wcf.global.error.timeout{/lang}', | |
104 | 'wcf.global.error.title': '{lang}wcf.global.error.title{/lang}', | |
105 | 'wcf.global.form.error.empty': '{lang}wcf.global.form.error.empty{/lang}', | |
106 | 'wcf.global.form.error.greaterThan': '{lang __literal=true}wcf.global.form.error.greaterThan{/lang}', | |
107 | 'wcf.global.form.error.lessThan': '{lang __literal=true}wcf.global.form.error.lessThan{/lang}', | |
108 | 'wcf.global.form.error.multilingual': '{lang}wcf.global.form.error.multilingual{/lang}', | |
b15af128 | 109 | 'wcf.global.form.input.maxItems': '{lang}wcf.global.form.input.maxItems{/lang}', |
5650aa98 AE |
110 | 'wcf.global.loading': '{lang}wcf.global.loading{/lang}', |
111 | 'wcf.global.noSelection': '{lang}wcf.global.noSelection{/lang}', | |
2130e832 | 112 | 'wcf.global.select': '{lang}wcf.global.select{/lang}', |
5650aa98 AE |
113 | 'wcf.page.jumpTo': '{lang}wcf.page.jumpTo{/lang}', |
114 | 'wcf.page.jumpTo.description': '{lang}wcf.page.jumpTo.description{/lang}', | |
115 | 'wcf.global.page.pagination': '{lang}wcf.global.page.pagination{/lang}', | |
116 | 'wcf.global.page.next': '{capture assign=pageNext}{lang}wcf.global.page.next{/lang}{/capture}{@$pageNext|encodeJS}', | |
117 | 'wcf.global.page.previous': '{capture assign=pagePrevious}{lang}wcf.global.page.previous{/lang}{/capture}{@$pagePrevious|encodeJS}', | |
118 | 'wcf.global.pageDirection': '{lang}wcf.global.pageDirection{/lang}', | |
119 | 'wcf.global.reason': '{lang}wcf.global.reason{/lang}', | |
120 | 'wcf.global.scrollUp': '{lang}wcf.global.scrollUp{/lang}', | |
121 | 'wcf.global.success': '{lang}wcf.global.success{/lang}', | |
122 | 'wcf.global.success.add': '{lang}wcf.global.success.add{/lang}', | |
123 | 'wcf.global.success.edit': '{lang}wcf.global.success.edit{/lang}', | |
124 | 'wcf.global.thousandsSeparator': '{capture assign=thousandsSeparator}{lang}wcf.global.thousandsSeparator{/lang}{/capture}{@$thousandsSeparator|encodeJS}', | |
2db570c1 MW |
125 | 'wcf.page.pagePosition': '{lang __literal=true}wcf.page.pagePosition{/lang}', |
126 | 'wcf.menu.page': '{lang}wcf.menu.page{/lang}', | |
127 | 'wcf.menu.user': '{lang}wcf.menu.user{/lang}' | |
5650aa98 | 128 | {event name='javascriptLanguageImport'} |
55919774 | 129 | }); |
5650aa98 AE |
130 | |
131 | AcpBootstrap.setup({ | |
132 | bootstrap: { | |
1e47264a | 133 | enableMobileMenu: {if PACKAGE_ID && $__isLogin|empty}true{else}false{/if} |
5650aa98 AE |
134 | } |
135 | }); | |
136 | ||
8b6f7a6f | 137 | User.init({@$__wcf->user->userID}, '{@$__wcf->user->username|encodeJS}', {if $__wcf->user->userID}'{@$__wcf->user->getLink()|encodeJS}'{else}''{/if}); |
5650aa98 | 138 | }); |
208bac1e | 139 | </script> |
a8160b8d AE |
140 | |
141 | <script> | |
142 | // prevent jQuery and other libraries from utilizing define() | |
143 | __require_define_amd = define.amd; | |
144 | define.amd = undefined; | |
145 | </script> | |
0d20df38 | 146 | {js application='wcf' lib='jquery'} |
208bac1e AE |
147 | {js application='wcf' lib='jquery-ui'} |
148 | {js application='wcf' lib='jquery-ui' file='touchPunch' bundle='WCF.Combined'} | |
149 | {js application='wcf' lib='jquery-ui' file='nestedSortable' bundle='WCF.Combined'} | |
150 | {js application='wcf' file='WCF.Assets' bundle='WCF.Combined'} | |
151 | {js application='wcf' file='WCF' bundle='WCF.Combined'} | |
152 | {js application='wcf' acp='true' file='WCF.ACP'} | |
153 | <script> | |
a8160b8d | 154 | define.amd = __require_define_amd; |
208bac1e AE |
155 | $.holdReady(true); |
156 | WCF.User.init({$__wcf->user->userID}, '{@$__wcf->user->username|encodeJS}'); | |
157 | </script> | |
158 | <script> | |
158bd3ca | 159 | $(function() { |
7a353b6a | 160 | if (jQuery.browser.touch) $('html').addClass('touch'); |
5c2c30ed | 161 | |
abe07e47 | 162 | WCF.System.PageNavigation.init('.pagination'); |
184a8d6d | 163 | |
50922192 | 164 | {if $__wcf->user->userID} |
6476e7a1 | 165 | new WCF.ACP.Search(); |
50922192 | 166 | {/if} |
71662ae8 | 167 | |
2e78af8d | 168 | {event name='javascriptInit'} |
f762ea4f AE |
169 | |
170 | $('form[method=get]').attr('method', 'post'); | |
158bd3ca | 171 | }); |
71c93c40 | 172 | </script> |
208bac1e | 173 | {event name='javascriptInclude'} |
158bd3ca TD |
174 | </head> |
175 | ||
887a3153 | 176 | <body id="tpl{$templateName|ucfirst}" data-template="{$templateName}" data-application="{$templateNameApplication}" class="wcfAcp"> |
158bd3ca | 177 | <a id="top"></a> |
df812fa0 | 178 | |
4e71a79b | 179 | {assign var=_acpPageSubMenuActive value=false} |
d2eedbaa MS |
180 | {if PACKAGE_ID} |
181 | {assign var=_activeMenuItems value=$__wcf->getACPMenu()->getActiveMenuItems()} | |
182 | {foreach from=$__wcf->getACPMenu()->getMenuItems('') item=_sectionMenuItem} | |
183 | {if $_sectionMenuItem->menuItem|in_array:$_activeMenuItems}{assign var=_acpPageSubMenuActive value=true}{/if} | |
184 | {/foreach} | |
185 | {/if} | |
4e71a79b | 186 | <div id="pageContainer" class="pageContainer{if !PACKAGE_ID || !$__wcf->user->userID} acpPageHiddenMenu{elseif $_acpPageSubMenuActive} acpPageSubMenuActive{/if}"> |
f2b50825 AE |
187 | {event name='beforePageHeader'} |
188 | ||
189 | {include file='pageHeader'} | |
190 | ||
191 | {event name='afterPageHeader'} | |
192 | ||
6476e7a1 AE |
193 | <div id="acpPageContentContainer" class="acpPageContentContainer"> |
194 | {include file='pageMenu'} | |
158bd3ca | 195 | |
6476e7a1 AE |
196 | <section id="main" class="main" role="main"> |
197 | <div class="layoutBoundary"> | |
198 | <div id="content" class="content"> | |
7ae41c12 | 199 |