Add support for the native web share API in share dialog (#4201)
[GitHub/WoltLab/WCF.git] / com.woltlab.wcf / templates / headIncludeJavaScript.tpl
index 03e128c4f8713d824900685fdbdd1f13cb85e41a..fe9b47518ae4dc970cd0316aeeceb5e02fda99fe 100644 (file)
@@ -6,7 +6,7 @@
        var SID_ARG_2ND = '';
        var WCF_PATH = '{@$__wcf->getPath()}';
        var WSC_API_URL = '{@$__wcf->getActivePath()}';
-       var SECURITY_TOKEN = '{@SECURITY_TOKEN}';
+       var SECURITY_TOKEN = '{csrfToken type=raw}';
        var LANGUAGE_ID = {@$__wcf->getLanguage()->languageID};
        var LANGUAGE_USE_INFORMAL_VARIANT = {if LANGUAGE_USE_INFORMAL_VARIANT}true{else}false{/if};
        var TIME_NOW = {@TIME_NOW};
        {/if}
 </script>
 
-{js application='wcf' lib='polyfill' file='promise' bundle='WoltLabSuite.Core' core='true'}
 {js application='wcf' file='require' bundle='WoltLabSuite.Core' core='true' hasTiny=true}
 {js application='wcf' file='require.config' bundle='WoltLabSuite.Core' core='true' hasTiny=true}
 {js application='wcf' file='require.linearExecution' bundle='WoltLabSuite.Core' core='true' hasTiny=true}
 {js application='wcf' file='wcf.globalHelper' bundle='WoltLabSuite.Core' core='true' hasTiny=true}
-{js application='wcf' file='closest' bundle='WoltLabSuite.Core' core='true' hasTiny=true}
+{js application='wcf' file='3rdParty/tslib' bundle='WoltLabSuite.Core' core='true' hasTiny=true}
 <script>
 requirejs.config({
-       baseUrl: '{@$__wcf->getPath()}js', 
+       baseUrl: '{@$__wcf->getPath()}js',
        urlArgs: 't={@LAST_UPDATE_TIME}'
        {hascontent}
        , paths: {
@@ -52,108 +51,140 @@ window.addEventListener('pageshow', function(event) {
 <script data-relocate="true">
        require(['Language', 'WoltLabSuite/Core/BootstrapFrontend', 'User'], function(Language, BootstrapFrontend, User) {
                Language.addObject({
-                       '__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}' ],
-                       '__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}' ],
-                       '__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}' ], 
-                       '__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}' ],
-                       'wcf.clipboard.item.unmarkAll': '{lang}wcf.clipboard.item.unmarkAll{/lang}',
-                       'wcf.clipboard.item.markAll': '{lang}wcf.clipboard.item.markAll{/lang}',
-                       'wcf.clipboard.item.mark': '{lang}wcf.clipboard.item.mark{/lang}',
-                       'wcf.date.relative.now': '{lang __literal=true}wcf.date.relative.now{/lang}',
-                       'wcf.date.relative.minutes': '{capture assign=relativeMinutes}{lang __literal=true}wcf.date.relative.minutes{/lang}{/capture}{@$relativeMinutes|encodeJS}',
-                       'wcf.date.relative.hours': '{capture assign=relativeHours}{lang __literal=true}wcf.date.relative.hours{/lang}{/capture}{@$relativeHours|encodeJS}',
-                       'wcf.date.relative.pastDays': '{capture assign=relativePastDays}{lang __literal=true}wcf.date.relative.pastDays{/lang}{/capture}{@$relativePastDays|encodeJS}',
-                       'wcf.date.dateFormat': '{"wcf.date.dateFormat"|language|encodeJS}',
-                       'wcf.date.dateTimeFormat': '{lang}wcf.date.dateTimeFormat{/lang}',
-                       'wcf.date.shortDateTimeFormat': '{lang}wcf.date.shortDateTimeFormat{/lang}',
-                       'wcf.date.hour': '{lang}wcf.date.hour{/lang}',
-                       'wcf.date.minute': '{lang}wcf.date.minute{/lang}',
-                       'wcf.date.timeFormat': '{lang}wcf.date.timeFormat{/lang}',
-                       'wcf.date.firstDayOfTheWeek': '{lang}wcf.date.firstDayOfTheWeek{/lang}',
-                       'wcf.global.button.add': '{lang}wcf.global.button.add{/lang}',
-                       'wcf.global.button.cancel': '{lang}wcf.global.button.cancel{/lang}',
-                       'wcf.global.button.close': '{lang}wcf.global.button.close{/lang}',
-                       'wcf.global.button.collapsible': '{lang}wcf.global.button.collapsible{/lang}',
-                       'wcf.global.button.delete': '{lang}wcf.global.button.delete{/lang}',
-                       'wcf.global.button.disable': '{lang}wcf.global.button.disable{/lang}',
-                       'wcf.global.button.disabledI18n': '{lang}wcf.global.button.disabledI18n{/lang}',
-                       'wcf.global.button.edit': '{lang}wcf.global.button.edit{/lang}',
-                       'wcf.global.button.enable': '{lang}wcf.global.button.enable{/lang}',
-                       'wcf.global.button.hide': '{lang}wcf.global.button.hide{/lang}',
-                       'wcf.global.button.insert': '{lang}wcf.global.button.insert{/lang}',
-                       'wcf.global.button.next': '{lang}wcf.global.button.next{/lang}',
-                       'wcf.global.button.preview': '{lang}wcf.global.button.preview{/lang}',
-                       'wcf.global.button.reset': '{lang}wcf.global.button.reset{/lang}',
-                       'wcf.global.button.save': '{lang}wcf.global.button.save{/lang}',
-                       'wcf.global.button.search': '{lang}wcf.global.button.search{/lang}',
-                       'wcf.global.button.submit': '{lang}wcf.global.button.submit{/lang}',
-                       'wcf.global.button.upload': '{lang}wcf.global.button.upload{/lang}',
-                       'wcf.global.confirmation.cancel': '{lang}wcf.global.confirmation.cancel{/lang}',
-                       'wcf.global.confirmation.confirm': '{lang}wcf.global.confirmation.confirm{/lang}',
-                       'wcf.global.confirmation.title': '{lang}wcf.global.confirmation.title{/lang}',
-                       'wcf.global.decimalPoint': '{capture assign=decimalPoint}{lang}wcf.global.decimalPoint{/lang}{/capture}{$decimalPoint|encodeJS}',
-                       'wcf.global.error.timeout': '{lang}wcf.global.error.timeout{/lang}',
-                       'wcf.global.form.error.empty': '{lang}wcf.global.form.error.empty{/lang}',
-                       'wcf.global.form.error.greaterThan': '{lang __literal=true}wcf.global.form.error.greaterThan{/lang}',
-                       'wcf.global.form.error.lessThan': '{lang __literal=true}wcf.global.form.error.lessThan{/lang}',
-                       'wcf.global.form.error.multilingual': '{lang}wcf.global.form.error.multilingual{/lang}',
-                       'wcf.global.form.input.maxItems': '{lang}wcf.global.form.input.maxItems{/lang}',
-                       'wcf.global.language.noSelection': '{lang}wcf.global.language.noSelection{/lang}',
-                       'wcf.global.loading': '{lang}wcf.global.loading{/lang}',
-                       'wcf.global.noSelection': '{lang}wcf.global.noSelection{/lang}',
-                       'wcf.global.select': '{lang}wcf.global.select{/lang}',
-                       'wcf.page.jumpTo': '{lang}wcf.page.jumpTo{/lang}',
-                       'wcf.page.jumpTo.description': '{lang}wcf.page.jumpTo.description{/lang}',
-                       'wcf.global.page.pagination': '{lang}wcf.global.page.pagination{/lang}',
-                       'wcf.global.page.next': '{capture assign=pageNext}{lang}wcf.global.page.next{/lang}{/capture}{@$pageNext|encodeJS}',
-                       'wcf.global.page.previous': '{capture assign=pagePrevious}{lang}wcf.global.page.previous{/lang}{/capture}{@$pagePrevious|encodeJS}',
-                       'wcf.global.pageDirection': '{lang}wcf.global.pageDirection{/lang}',
-                       'wcf.global.reason': '{lang}wcf.global.reason{/lang}',
-                       'wcf.global.scrollUp': '{lang}wcf.global.scrollUp{/lang}',
-                       'wcf.global.success': '{lang}wcf.global.success{/lang}',
-                       'wcf.global.success.add': '{lang}wcf.global.success.add{/lang}',
-                       'wcf.global.success.edit': '{lang}wcf.global.success.edit{/lang}',
-                       'wcf.global.thousandsSeparator': '{capture assign=thousandsSeparator}{lang}wcf.global.thousandsSeparator{/lang}{/capture}{@$thousandsSeparator|encodeJS}',
-                       'wcf.page.pagePosition': '{lang __literal=true}wcf.page.pagePosition{/lang}',
-                       'wcf.style.changeStyle': '{lang}wcf.style.changeStyle{/lang}',
-                       'wcf.user.activityPoint': '{lang}wcf.user.activityPoint{/lang}',
-                       'wcf.user.panel.markAllAsRead': '{lang}wcf.user.panel.markAllAsRead{/lang}',
-                       'wcf.user.panel.markAsRead': '{lang}wcf.user.panel.markAsRead{/lang}',
-                       'wcf.user.panel.settings': '{lang}wcf.user.panel.settings{/lang}',
-                       'wcf.user.panel.showAll': '{lang}wcf.user.panel.showAll{/lang}',
-                       'wcf.menu.page': '{lang}wcf.menu.page{/lang}',
-                       'wcf.menu.user': '{lang}wcf.menu.user{/lang}',
-                       'wcf.global.button.showMenu': '{lang}wcf.global.button.showMenu{/lang}',
-                       'wcf.global.button.hideMenu': '{lang}wcf.global.button.hideMenu{/lang}',
-                       'wcf.date.datePicker': '{lang}wcf.date.datePicker{/lang}',
-                       'wcf.date.datePicker.previousMonth': '{lang}wcf.date.datePicker.previousMonth{/lang}',
-                       'wcf.date.datePicker.nextMonth': '{lang}wcf.date.datePicker.nextMonth{/lang}',
-                       'wcf.date.datePicker.month': '{lang}wcf.date.datePicker.month{/lang}',
-                       'wcf.date.datePicker.year': '{lang}wcf.date.datePicker.year{/lang}',
-                       'wcf.date.datePicker.hour': '{lang}wcf.date.datePicker.hour{/lang}',
-                       'wcf.date.datePicker.minute': '{lang}wcf.date.datePicker.minute{/lang}'
+                       '__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}' ],
+                       '__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}' ],
+                       '__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}' ], 
+                       '__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}' ],
+                       'wcf.clipboard.item.unmarkAll': '{jslang}wcf.clipboard.item.unmarkAll{/jslang}',
+                       'wcf.clipboard.item.markAll': '{jslang}wcf.clipboard.item.markAll{/jslang}',
+                       'wcf.clipboard.item.mark': '{jslang}wcf.clipboard.item.mark{/jslang}',
+                       'wcf.date.relative.now': '{jslang __literal=true}wcf.date.relative.now{/jslang}',
+                       'wcf.date.relative.minutes': '{jslang __literal=true}wcf.date.relative.minutes{/jslang}',
+                       'wcf.date.relative.hours': '{jslang __literal=true}wcf.date.relative.hours{/jslang}',
+                       'wcf.date.relative.pastDays': '{jslang __literal=true}wcf.date.relative.pastDays{/jslang}',
+                       'wcf.date.dateFormat': '{jslang}wcf.date.dateFormat{/jslang}',
+                       'wcf.date.dateTimeFormat': '{jslang}wcf.date.dateTimeFormat{/jslang}',
+                       'wcf.date.shortDateTimeFormat': '{jslang}wcf.date.shortDateTimeFormat{/jslang}',
+                       'wcf.date.hour': '{jslang}wcf.date.hour{/jslang}',
+                       'wcf.date.minute': '{jslang}wcf.date.minute{/jslang}',
+                       'wcf.date.timeFormat': '{jslang}wcf.date.timeFormat{/jslang}',
+                       'wcf.date.firstDayOfTheWeek': '{jslang}wcf.date.firstDayOfTheWeek{/jslang}',
+                       'wcf.global.button.add': '{jslang}wcf.global.button.add{/jslang}',
+                       'wcf.global.button.cancel': '{jslang}wcf.global.button.cancel{/jslang}',
+                       'wcf.global.button.close': '{jslang}wcf.global.button.close{/jslang}',
+                       'wcf.global.button.collapsible': '{jslang}wcf.global.button.collapsible{/jslang}',
+                       'wcf.global.button.delete': '{jslang}wcf.global.button.delete{/jslang}',
+                       'wcf.button.delete.confirmMessage': '{jslang __literal=true}wcf.button.delete.confirmMessage{/jslang}',
+                       'wcf.global.button.disable': '{jslang}wcf.global.button.disable{/jslang}',
+                       'wcf.global.button.disabledI18n': '{jslang}wcf.global.button.disabledI18n{/jslang}',
+                       'wcf.global.button.edit': '{jslang}wcf.global.button.edit{/jslang}',
+                       'wcf.global.button.enable': '{jslang}wcf.global.button.enable{/jslang}',
+                       'wcf.global.button.hide': '{jslang}wcf.global.button.hide{/jslang}',
+                       'wcf.global.button.insert': '{jslang}wcf.global.button.insert{/jslang}',
+                       'wcf.global.button.next': '{jslang}wcf.global.button.next{/jslang}',
+                       'wcf.global.button.preview': '{jslang}wcf.global.button.preview{/jslang}',
+                       'wcf.global.button.reset': '{jslang}wcf.global.button.reset{/jslang}',
+                       'wcf.global.button.save': '{jslang}wcf.global.button.save{/jslang}',
+                       'wcf.global.button.search': '{jslang}wcf.global.button.search{/jslang}',
+                       'wcf.global.button.submit': '{jslang}wcf.global.button.submit{/jslang}',
+                       'wcf.global.button.upload': '{jslang}wcf.global.button.upload{/jslang}',
+                       'wcf.global.confirmation.cancel': '{jslang}wcf.global.confirmation.cancel{/jslang}',
+                       'wcf.global.confirmation.confirm': '{jslang}wcf.global.confirmation.confirm{/jslang}',
+                       'wcf.global.confirmation.title': '{jslang}wcf.global.confirmation.title{/jslang}',
+                       'wcf.global.decimalPoint': '{jslang}wcf.global.decimalPoint{/jslang}',
+                       'wcf.global.error.timeout': '{jslang}wcf.global.error.timeout{/jslang}',
+                       'wcf.global.form.error.empty': '{jslang}wcf.global.form.error.empty{/jslang}',
+                       'wcf.global.form.error.greaterThan': '{jslang __literal=true}wcf.global.form.error.greaterThan{/jslang}',
+                       'wcf.global.form.error.lessThan': '{jslang __literal=true}wcf.global.form.error.lessThan{/jslang}',
+                       'wcf.global.form.error.multilingual': '{jslang}wcf.global.form.error.multilingual{/jslang}',
+                       'wcf.global.form.input.maxItems': '{jslang}wcf.global.form.input.maxItems{/jslang}',
+                       'wcf.global.language.noSelection': '{jslang}wcf.global.language.noSelection{/jslang}',
+                       'wcf.global.loading': '{jslang}wcf.global.loading{/jslang}',
+                       'wcf.global.noSelection': '{jslang}wcf.global.noSelection{/jslang}',
+                       'wcf.global.select': '{jslang}wcf.global.select{/jslang}',
+                       'wcf.page.jumpTo': '{jslang}wcf.page.jumpTo{/jslang}',
+                       'wcf.page.jumpTo.description': '{jslang}wcf.page.jumpTo.description{/jslang}',
+                       'wcf.global.page.pagination': '{jslang}wcf.global.page.pagination{/jslang}',
+                       'wcf.global.page.next': '{jslang}wcf.global.page.next{/jslang}',
+                       'wcf.global.page.previous': '{jslang}wcf.global.page.previous{/jslang}',
+                       'wcf.global.pageDirection': '{jslang}wcf.global.pageDirection{/jslang}',
+                       'wcf.global.reason': '{jslang}wcf.global.reason{/jslang}',
+                       'wcf.global.scrollUp': '{jslang}wcf.global.scrollUp{/jslang}',
+                       'wcf.global.success': '{jslang}wcf.global.success{/jslang}',
+                       'wcf.global.success.add': '{jslang}wcf.global.success.add{/jslang}',
+                       'wcf.global.success.edit': '{jslang}wcf.global.success.edit{/jslang}',
+                       'wcf.global.thousandsSeparator': '{jslang}wcf.global.thousandsSeparator{/jslang}',
+                       'wcf.page.pagePosition': '{jslang __literal=true}wcf.page.pagePosition{/jslang}',
+                       'wcf.style.changeStyle': '{jslang}wcf.style.changeStyle{/jslang}',
+                       'wcf.user.activityPoint': '{jslang}wcf.user.activityPoint{/jslang}',
+                       'wcf.user.panel.markAllAsRead': '{jslang}wcf.user.panel.markAllAsRead{/jslang}',
+                       'wcf.user.panel.markAsRead': '{jslang}wcf.user.panel.markAsRead{/jslang}',
+                       'wcf.user.panel.settings': '{jslang}wcf.user.panel.settings{/jslang}',
+                       'wcf.user.panel.showAll': '{jslang}wcf.user.panel.showAll{/jslang}',
+                       'wcf.menu.page': '{jslang}wcf.menu.page{/jslang}',
+                       'wcf.menu.user': '{jslang}wcf.menu.user{/jslang}',
+                       'wcf.global.button.showMenu': '{jslang}wcf.global.button.showMenu{/jslang}',
+                       'wcf.global.button.hideMenu': '{jslang}wcf.global.button.hideMenu{/jslang}',
+                       'wcf.date.datePicker': '{jslang}wcf.date.datePicker{/jslang}',
+                       'wcf.date.datePicker.previousMonth': '{jslang}wcf.date.datePicker.previousMonth{/jslang}',
+                       'wcf.date.datePicker.nextMonth': '{jslang}wcf.date.datePicker.nextMonth{/jslang}',
+                       'wcf.date.datePicker.month': '{jslang}wcf.date.datePicker.month{/jslang}',
+                       'wcf.date.datePicker.year': '{jslang}wcf.date.datePicker.year{/jslang}',
+                       'wcf.date.datePicker.hour': '{jslang}wcf.date.datePicker.hour{/jslang}',
+                       'wcf.date.datePicker.minute': '{jslang}wcf.date.datePicker.minute{/jslang}',
+                       'wcf.global.form.password.button.hide': '{jslang}wcf.global.form.password.button.hide{/jslang}',
+                       'wcf.global.form.password.button.show': '{jslang}wcf.global.form.password.button.show{/jslang}',
+                       'wcf.message.share': '{jslang}wcf.message.share{/jslang}',
+                       'wcf.message.share.facebook': '{jslang}wcf.message.share.facebook{/jslang}',
+                       'wcf.message.share.twitter': '{jslang}wcf.message.share.twitter{/jslang}',
+                       'wcf.message.share.reddit': '{jslang}wcf.message.share.reddit{/jslang}',
+                       'wcf.message.share.whatsApp': '{jslang}wcf.message.share.whatsApp{/jslang}',
+                       'wcf.message.share.linkedIn': '{jslang}wcf.message.share.linkedIn{/jslang}',
+                       'wcf.message.share.pinterest': '{jslang}wcf.message.share.pinterest{/jslang}',
+                       'wcf.message.share.xing': '{jslang}wcf.message.share.xing{/jslang}',
+                       'wcf.message.share.permalink': '{jslang}wcf.message.share.permalink{/jslang}',
+                       'wcf.message.share.permalink.bbcode': '{jslang}wcf.message.share.permalink.bbcode{/jslang}',
+                       'wcf.message.share.permalink.html': '{jslang}wcf.message.share.permalink.html{/jslang}',
+                       'wcf.message.share.socialMedia': '{jslang}wcf.message.share.socialMedia{/jslang}',
+                       'wcf.message.share.copy': '{jslang}wcf.message.share.copy{/jslang}',
+                       'wcf.message.share.copy.success': '{jslang}wcf.message.share.copy.success{/jslang}',
+                       'wcf.message.share.nativeShare': '{jslang}wcf.message.share.nativeShare{/jslang}',
+                       'wcf.global.button.rss': '{jslang}wcf.global.button.rss{/jslang}',
+                       'wcf.global.rss.copy': '{jslang}wcf.global.rss.copy{/jslang}',
+                       'wcf.global.rss.copy.success': '{jslang}wcf.global.rss.copy.success{/jslang}',
+                       'wcf.global.rss.accessToken.info': '{jslang}wcf.global.rss.accessToken.info{/jslang}',
+                       'wcf.global.rss.withoutAccessToken': '{jslang}wcf.global.rss.withoutAccessToken{/jslang}',
+                       'wcf.global.rss.withAccessToken': '{jslang}wcf.global.rss.withAccessToken{/jslang}'
                        {if MODULE_LIKE}
-                               ,'wcf.like.button.like': '{lang}wcf.like.button.like{/lang}',
-                               'wcf.like.button.dislike': '{lang}wcf.like.button.dislike{/lang}',
-                               'wcf.like.tooltip': '{lang}wcf.like.jsTooltip{/lang}',
-                               'wcf.like.summary': '{lang}wcf.like.summary{/lang}',
-                               'wcf.like.details': '{lang}wcf.like.details{/lang}',
-                               'wcf.reactions.react': '{lang}wcf.reactions.react{/lang}'
+                               ,'wcf.like.button.like': '{jslang}wcf.like.button.like{/jslang}',
+                               'wcf.like.button.dislike': '{jslang}wcf.like.button.dislike{/jslang}',
+                               'wcf.like.tooltip': '{jslang}wcf.like.jsTooltip{/jslang}',
+                               'wcf.like.summary': '{jslang}wcf.like.summary{/jslang}',
+                               'wcf.like.details': '{jslang}wcf.like.details{/jslang}',
+                               'wcf.reactions.react': '{jslang}wcf.reactions.react{/jslang}'
                        {/if}
                        
                        {event name='javascriptLanguageImport'}
                });
                
+               User.init(
+                       {@$__wcf->user->userID},
+                       '{@$__wcf->user->username|encodeJS}',
+                       {if $__wcf->user->userID}'{@$__wcf->user->getLink()|encodeJS}'{else}''{/if}
+               );
+               
                BootstrapFrontend.setup({
                        backgroundQueue: {
                                url: '{link controller="BackgroundQueuePerform"}{/link}',
                                force: {if $forceBackgroundQueuePerform|isset}true{else}false{/if}
                        },
                        enableUserPopover: {if $__wcf->getSession()->getPermission('user.profile.canViewUserProfile')}true{else}false{/if},
+                       executeCronjobs: {if $executeCronjobs}true{else}false{/if},
+                       {if ENABLE_SHARE_BUTTONS}
+                           shareButtonProviders: [{implode from="\n"|explode:SHARE_BUTTONS_PROVIDERS item=shareButtonProvider}'{$shareButtonProvider}'{/implode}],
+                       {/if}
                        styleChanger: {if $__wcf->getStyleHandler()->showStyleChanger()}true{else}false{/if}
                });
-               
-               User.init({@$__wcf->user->userID}, '{@$__wcf->user->username|encodeJS}', {if $__wcf->user->userID}'{@$__wcf->user->getLink()|encodeJS}'{else}''{/if});
        });
        
        // prevent jQuery and other libraries from utilizing define()
@@ -163,6 +194,12 @@ window.addEventListener('pageshow', function(event) {
 
 {include file='__devtoolsLanguageChooser'}
 
+{if ENABLE_DEBUG_MODE && ENABLE_DEVELOPER_TOOLS}
+<script data-relocate="true">
+       require(["WoltLabSuite/Core/Devtools/Style/LiveReload"], (LiveReload) => LiveReload.watch());
+</script>
+{/if}
+
 {js application='wcf' lib='jquery' hasTiny=true}
 {js application='wcf' lib='jquery-ui' hasTiny=true}
 {js application='wcf' lib='jquery-ui' file='touchPunch' bundle='WCF.Combined' hasTiny=true}
@@ -208,7 +245,6 @@ window.addEventListener('pageshow', function(event) {
 
 <script data-relocate="true">
        $(function() {
-               WCF.System.PageNavigation.init('.pagination');
                WCF.User.Profile.ActivityPointList.init();
                
                {if MODULE_TROPHY && $__wcf->session->getPermission('user.profile.trophy.canSeeTrophies')}
@@ -219,32 +255,13 @@ window.addEventListener('pageshow', function(event) {
                
                {event name='javascriptInit'}
                
-               {if $executeCronjobs}
-                       new WCF.Action.Proxy({
-                               autoSend: true,
-                               data: {
-                                       className: 'wcf\\data\\cronjob\\CronjobAction',
-                                       actionName: 'executeCronjobs'
-                               },
-                               showLoadingOverlay: false,
-                               failure: function() {
-                                       return false;
-                               }
-                       });
-               {/if}
-               
-               {if $__sessionKeepAlive|isset}
-                       new WCF.System.KeepAlive({@$__sessionKeepAlive});
-                       
-                       {if ENABLE_POLLING && $__wcf->user->userID}
-                               require(['WoltLabSuite/Core/Notification/Handler'], function(NotificationHandler) {
-                                       NotificationHandler.setup({
-                                               enableNotifications: {if $__wcf->useDesktopNotifications()}true{else}false{/if},
-                                               icon: '{$__wcf->getStyleHandler()->getStyle()->getFaviconAppleTouchIcon()}',
-                                               sessionKeepAlive: {@$__sessionKeepAlive}
-                                       });
+               {if ENABLE_POLLING && $__wcf->user->userID}
+                       require(['WoltLabSuite/Core/Notification/Handler'], function(NotificationHandler) {
+                               NotificationHandler.setup({
+                                       enableNotifications: {if $__wcf->useDesktopNotifications()}true{else}false{/if},
+                                       icon: '{$__wcf->getStyleHandler()->getStyle()->getFaviconAppleTouchIcon()}',
                                });
-                       {/if}
+                       });
                {/if}
        });
 </script>