Changed JavaScript execution order
authorAlexander Ebert <ebert@woltlab.com>
Wed, 4 Jun 2014 12:59:55 +0000 (14:59 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Wed, 4 Jun 2014 13:01:02 +0000 (15:01 +0200)
This way we ensure that specific JavaScript modifications to the DOM (e.g. relative time or TabMenus) are executed as early as possible. Tests have shown that there is no more flicker caused by the time conversion or building the TabMenu, in general the related JavaScript is executed earlier (reduction by ~20%)

The impact on mobile devices is low and the small delay due to earlier loading of certain JavaScript files trades for a better user-experience, especially on small screens the "jumping" of content due to initial DOM manipulations was pretty lame.

Affected DOM manipulations:
 - Relative Timestamps
 - Dropdowns (e.g. mobile navigation)
 - Tab Menus
 - Flexible Tab Menus (hiding tabs in a dropdown to prevent scrolling/overflow, depends on Dropdowns)

com.woltlab.wcf/templates/headInclude.tpl

index ef500d988db6e4f16a7a85a26349f5e4dc1292d7..556cd3916854505b0da62adaf87d731dc05e4460 100644 (file)
@@ -6,7 +6,7 @@
 {implode from=$__wcf->getMetaTagHandler() item=__metaTag glue="\n"}{@$__metaTag}{/implode}
 {event name='metaTags'}
 
-<script data-relocate="true">
+<script>
        //<![CDATA[
        var SID_ARG_2ND = '{@SID_ARG_2ND_NOT_ENCODED}';
        var WCF_PATH = '{@$__wcf->getPath()}';
        //]]>
 </script>
 {if JQUERY_SOURCE == 'google'}
-<script data-relocate="true" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
-<script data-relocate="true" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
+<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
 {elseif JQUERY_SOURCE == 'microsoft'}
-<script data-relocate="true" src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.0.min.js"></script>
-<script data-relocate="true" src="//ajax.aspnetcdn.com/ajax/jquery.ui/1.10.4/jquery-ui.min.js"></script>
+<script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.0.min.js"></script>
+<script src="//ajax.aspnetcdn.com/ajax/jquery.ui/1.10.4/jquery-ui.min.js"></script>
 {elseif JQUERY_SOURCE == 'cloudflare'}
-<script data-relocate="true" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
-<script data-relocate="true" src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
+<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
+<script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
 {else}
-<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/jquery.min.js?v={@$__wcfVersion}"></script>
-<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/jquery-ui.min.js?v={@$__wcfVersion}"></script>
+<script src="{@$__wcf->getPath()}js/3rdParty/jquery.min.js?v={@$__wcfVersion}"></script>
+<script src="{@$__wcf->getPath()}js/3rdParty/jquery-ui.min.js?v={@$__wcfVersion}"></script>
 {/if}
 {if JQUERY_SOURCE != 'local'}
-<script data-relocate="true">
+<script>
        //<![CDATA[
        if (!window.jQuery) {
-               document.write('<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/jquery.min.js?v={@$__wcfVersion}"><\/script>');
-               document.write('<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/jquery-ui.min.js?v={@$__wcfVersion}"><\/script>');
+               document.write('<script src="{@$__wcf->getPath()}js/3rdParty/jquery.min.js?v={@$__wcfVersion}"><\/script>');
+               document.write('<script src="{@$__wcf->getPath()}js/3rdParty/jquery-ui.min.js?v={@$__wcfVersion}"><\/script>');
        }
        //]]>
 </script>
 {/if}
-<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/jquery-ui.nestedSortable{if !ENABLE_DEBUG_MODE}.min{/if}.js?v={@$__wcfVersion}"></script>
-<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/jquery-ui.timepicker{if !ENABLE_DEBUG_MODE}.min{/if}.js?v={@$__wcfVersion}"></script>
+
+<script src="{@$__wcf->getPath()}js/3rdParty/jquery-ui.nestedSortable{if !ENABLE_DEBUG_MODE}.min{/if}.js?v={@$__wcfVersion}"></script>
+<script src="{@$__wcf->getPath()}js/3rdParty/jquery-ui.timepicker{if !ENABLE_DEBUG_MODE}.min{/if}.js?v={@$__wcfVersion}"></script>
+
+{if ENABLE_DEBUG_MODE}
+<script src="{@$__wcf->getPath()}js/WCF.js?v={@$__wcfVersion}"></script>
+{else}
+<script src="{@$__wcf->getPath()}js/WCF.Combined.min.js?v={@$__wcfVersion}"></script>
+{/if}
+
+<script data-relocate="true">
+       WCF.User.init({@$__wcf->user->userID}, '{@$__wcf->user->username|encodeJS}');
+       
+       WCF.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.date.relative.now': '{lang}wcf.date.relative.now{/lang}',
+               'wcf.date.relative.minutes': '{capture assign=relativeMinutes}{lang}wcf.date.relative.minutes{/lang}{/capture}{@$relativeMinutes|encodeJS}',
+               'wcf.date.relative.hours': '{capture assign=relativeHours}{lang}wcf.date.relative.hours{/lang}{/capture}{@$relativeHours|encodeJS}',
+               'wcf.date.relative.pastDays': '{capture assign=relativePastDays}{lang}wcf.date.relative.pastDays{/lang}{/capture}{@$relativePastDays|encodeJS}',
+               'wcf.date.dateFormat': '{lang}wcf.date.dateFormat{/lang}',
+               '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.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.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.error.title': '{lang}wcf.global.error.title{/lang}',
+               'wcf.global.form.error.empty': '{lang}wcf.global.form.error.empty{/lang}',
+               'wcf.global.form.error.greaterThan': '{lang}wcf.global.form.error.greaterThan.javaScript{/lang}',
+               'wcf.global.form.error.lessThan': '{lang}wcf.global.form.error.lessThan.javaScript{/lang}',
+               'wcf.global.language.noSelection': '{lang}wcf.global.language.noSelection{/lang}',
+               'wcf.global.loading': '{lang}wcf.global.loading{/lang}',
+               'wcf.global.page.jumpTo': '{lang}wcf.global.page.jumpTo{/lang}',
+               'wcf.global.page.jumpTo.description': '{lang}wcf.global.page.jumpTo.description{/lang}',
+               'wcf.global.page.pageNavigation': '{lang}wcf.global.page.pageNavigation{/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.sidebar.hideLeftSidebar': '{lang}wcf.global.sidebar.hideLeftSidebar{/lang}',
+               'wcf.global.sidebar.hideRightSidebar': '{lang}wcf.global.sidebar.hideRightSidebar{/lang}',
+               'wcf.global.sidebar.showLeftSidebar': '{lang}wcf.global.sidebar.showLeftSidebar{/lang}',
+               'wcf.global.sidebar.showRightSidebar': '{lang}wcf.global.sidebar.showRightSidebar{/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.sitemap': '{lang}wcf.page.sitemap{/lang}',
+               'wcf.style.changeStyle': '{lang}wcf.style.changeStyle{/lang}'
+               {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}'
+               {/if}
+               
+               {event name='javascriptLanguageImport'}
+       });
+       
+       new WCF.Date.Time();
+       
+       WCF.Dropdown.init();
+       WCF.System.Mobile.UX.init();
+       
+       WCF.TabMenu.init();
+       WCF.System.FlexibleMenu.init();
+</script>
 
 {if ENABLE_DEBUG_MODE}
-<script data-relocate="true" src="{@$__wcf->getPath()}js/WCF.js?v={@$__wcfVersion}"></script>
 <script data-relocate="true" src="{@$__wcf->getPath()}js/WCF.Like.js?v={@$__wcfVersion}"></script>
 <script data-relocate="true" src="{@$__wcf->getPath()}js/WCF.ACL.js?v={@$__wcfVersion}"></script>
 <script data-relocate="true" src="{@$__wcf->getPath()}js/WCF.Attachment.js?v={@$__wcfVersion}"></script>
 <script data-relocate="true" src="{@$__wcf->getPath()}js/WCF.Search.Message.js?v={@$__wcfVersion}"></script>
 <script data-relocate="true" src="{@$__wcf->getPath()}js/WCF.Tagging.js?v={@$__wcfVersion}"></script>
 <script data-relocate="true" src="{@$__wcf->getPath()}js/WCF.User.js?v={@$__wcfVersion}"></script>
-{else}
-<script data-relocate="true" src="{@$__wcf->getPath()}js/WCF.Combined.min.js?v={@$__wcfVersion}"></script>
 {/if}
 
-<script data-relocate="true">
-       //<![CDATA[
-       WCF.User.init({@$__wcf->user->userID}, '{@$__wcf->user->username|encodeJS}');
-       //]]>
-</script>
-
 {event name='javascriptInclude'}
 
 <!-- Stylesheets -->
 <script data-relocate="true">
        //<![CDATA[
        $(function() {
-               WCF.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.date.relative.now': '{lang}wcf.date.relative.now{/lang}',
-                       'wcf.date.relative.minutes': '{capture assign=relativeMinutes}{lang}wcf.date.relative.minutes{/lang}{/capture}{@$relativeMinutes|encodeJS}',
-                       'wcf.date.relative.hours': '{capture assign=relativeHours}{lang}wcf.date.relative.hours{/lang}{/capture}{@$relativeHours|encodeJS}',
-                       'wcf.date.relative.pastDays': '{capture assign=relativePastDays}{lang}wcf.date.relative.pastDays{/lang}{/capture}{@$relativePastDays|encodeJS}',
-                       'wcf.date.dateFormat': '{lang}wcf.date.dateFormat{/lang}',
-                       '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.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.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.error.title': '{lang}wcf.global.error.title{/lang}',
-                       'wcf.global.form.error.empty': '{lang}wcf.global.form.error.empty{/lang}',
-                       'wcf.global.form.error.greaterThan': '{lang}wcf.global.form.error.greaterThan.javaScript{/lang}',
-                       'wcf.global.form.error.lessThan': '{lang}wcf.global.form.error.lessThan.javaScript{/lang}',
-                       'wcf.global.language.noSelection': '{lang}wcf.global.language.noSelection{/lang}',
-                       'wcf.global.loading': '{lang}wcf.global.loading{/lang}',
-                       'wcf.global.page.jumpTo': '{lang}wcf.global.page.jumpTo{/lang}',
-                       'wcf.global.page.jumpTo.description': '{lang}wcf.global.page.jumpTo.description{/lang}',
-                       'wcf.global.page.pageNavigation': '{lang}wcf.global.page.pageNavigation{/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.sidebar.hideLeftSidebar': '{lang}wcf.global.sidebar.hideLeftSidebar{/lang}',
-                       'wcf.global.sidebar.hideRightSidebar': '{lang}wcf.global.sidebar.hideRightSidebar{/lang}',
-                       'wcf.global.sidebar.showLeftSidebar': '{lang}wcf.global.sidebar.showLeftSidebar{/lang}',
-                       'wcf.global.sidebar.showRightSidebar': '{lang}wcf.global.sidebar.showRightSidebar{/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.sitemap': '{lang}wcf.page.sitemap{/lang}',
-                       'wcf.style.changeStyle': '{lang}wcf.style.changeStyle{/lang}'
-                       {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}'
-                       {/if}
-                       
-                       {event name='javascriptLanguageImport'}
-               });
-               
-               WCF.Dropdown.init();
-               WCF.System.Mobile.UX.init();
-               
-               new WCF.Date.Time();
                new WCF.Effect.SmoothScroll();
                new WCF.Effect.BalloonTooltip();
                new WCF.Sitemap();
                WCF.System.PageNavigation.init('.pageNavigation');
                WCF.Date.Picker.init();
                new WCF.User.ProfilePreview();
-               WCF.System.FlexibleMenu.init();
                new WCF.Notice.Dismiss();
                
                {event name='javascriptInit'}