diff options
25 files changed, 395 insertions, 380 deletions
diff --git a/admin/themes/default/template/admin.tpl b/admin/themes/default/template/admin.tpl index 1e2b2f88e..bd6636323 100644 --- a/admin/themes/default/template/admin.tpl +++ b/admin/themes/default/template/admin.tpl @@ -1,17 +1,15 @@ -{known_script id="jquery.ui" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.core.packed.js" } -{known_script id="jquery.ui.accordion" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.accordion.packed.js" } -{known_script id="jquery.tipTip" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.tipTip.minified.js" } - -<script type="text/javascript"> -jQuery().ready(function(){ldelim} - jQuery('#menubar').accordion({ldelim} - header: "dt.rdion", - event: "click", - autoHeight: false, - active: {$ACTIVE_MENU} - }); +{combine_script id='jquery.ui' load='header' require='jquery' path='themes/default/js/ui/packed/ui.core.packed.js' } +{combine_script id='jquery.ui.accordion' load='header' require='jquery.ui' path='themes/default/js/ui/packed/ui.accordion.packed.js' } +{footer_script require='jquery.ui.accordion'} +jQuery(document).ready(function(){ldelim} + jQuery('#menubar').accordion({ldelim} + header: "dt.rdion", + event: "click", + autoHeight: false, + active: {$ACTIVE_MENU} + }); }); -</script> +{/footer_script} <div id="menubar"> <div id="adminHome"><a href="{$U_ADMIN}">{'Administration Home'|@translate}</a></div> @@ -104,6 +102,7 @@ jQuery().ready(function(){ldelim} {$TABSHEET} {/if} {if isset($U_HELP)} + {combine_script id='core.scripts' load='async' path='themes/default/js/scripts.js'} <ul class="HelpActions"> <li><a href="{$U_HELP}" onclick="popuphelp(this.href); return false;" title="{'Help'|@translate}"><img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/help.png" class="button" alt="(?)"></a></li> </ul> diff --git a/admin/themes/default/template/cat_list.tpl b/admin/themes/default/template/cat_list.tpl index 8e8655a2e..a23b29ca5 100644 --- a/admin/themes/default/template/cat_list.tpl +++ b/admin/themes/default/template/cat_list.tpl @@ -1,32 +1,30 @@ -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"} -{known_script id="jquery.ui" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.core.packed.js" } -{known_script id="jquery.ui.sortable" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.sortable.packed.js" } +{combine_script id='jquery.ui' load='async' require='jquery' path='themes/default/js/ui/packed/ui.core.packed.js' } +{combine_script id='jquery.ui.sortable' load='async' require='jquery.ui' path='themes/default/js/ui/packed/ui.sortable.packed.js' } +{footer_script require='jquery.ui.sortable'} +jQuery(document).ready(function(){ldelim} + jQuery(".catPos").hide(); + jQuery(".drag_button").show(); + jQuery(".categoryLi").css("cursor","move"); + jQuery(".categoryUl").sortable({ldelim} + axis: "y", + opacity: 0.8 + }); + jQuery("#categoryOrdering").submit(function(){ldelim} + ar = jQuery('.categoryUl').sortable('toArray'); + for(i=0;i<ar.length;i++) {ldelim} + cat = ar[i].split('cat_'); + document.getElementsByName('catOrd[' + cat[1] + ']')[0].value = i; + } + }); -<script type="text/javascript"> - jQuery().ready(function(){ldelim} - jQuery(".catPos").hide(); - jQuery(".drag_button").show(); - jQuery(".categoryLi").css("cursor","move"); - jQuery(".categoryUl").sortable({ldelim} - axis: "y", - opacity: 0.8 - }); - jQuery("#categoryOrdering").submit(function(){ldelim} - ar = jQuery('.categoryUl').sortable('toArray'); - for(i=0;i<ar.length;i++) {ldelim} - cat = ar[i].split('cat_'); - document.getElementsByName('catOrd[' + cat[1] + ']')[0].value = i; - } - }); - - jQuery("input[name=order_type]").click(function () {ldelim} - jQuery("#automatic_order_params").hide(); - if (jQuery("input[name=order_type]:checked").val() == "automatic") {ldelim} - jQuery("#automatic_order_params").show(); - } - }); - }); -</script> + jQuery("input[name=order_type]").click(function () {ldelim} + jQuery("#automatic_order_params").hide(); + if (jQuery("input[name=order_type]:checked").val() == "automatic") {ldelim} + jQuery("#automatic_order_params").show(); + } + }); +}); +{/footer_script} <h2>{'Album list management'|@translate}</h2> diff --git a/admin/themes/default/template/element_set_global.tpl b/admin/themes/default/template/element_set_global.tpl index 73ec42f88..24cea87ed 100644 --- a/admin/themes/default/template/element_set_global.tpl +++ b/admin/themes/default/template/element_set_global.tpl @@ -1,29 +1,26 @@ {include file='include/tag_selection.inc.tpl'} {include file='include/datepicker.inc.tpl'} -{literal} -<script type="text/javascript"> - pwg_initialization_datepicker("#date_creation_day", "#date_creation_month", "#date_creation_year", "#date_creation_linked_date", "#date_creation_action_set"); +{footer_script}{literal} + pwg_initialization_datepicker("#date_creation_day", "#date_creation_month", "#date_creation_year", "#date_creation_linked_date", "#date_creation_action_set"); </script> -{/literal} - -{known_script id="jquery.fcbkcomplete" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.fcbkcomplete.js"} -{literal} -<script type="text/javascript"> - $(document).ready(function() { - $("#tags").fcbkcomplete({ - json_url: "admin.php?fckb_tags=1", - cache: false, - filter_case: false, - filter_hide: true, - firstselected: true, - filter_selected: true, - maxitems: 100, - newel: true - }); - }); -</script> -{/literal} +{/literal}{/footer_script} + +{combine_script id='jquery.fcbkcomplete' load='async' require='jquery' path='themes/default/js/plugins/jquery.fcbkcomplete.js'} +{footer_script require='jquery.fcbkcomplete'}{literal} +jQuery(document).ready(function() { + jQuery("#tags").fcbkcomplete({ + json_url: "admin.php?fckb_tags=1", + cache: false, + filter_case: false, + filter_hide: true, + firstselected: true, + filter_selected: true, + maxitems: 100, + newel: true + }); +}); +{/literal}{/footer_script} <h2>{'Batch management'|@translate}</h2> diff --git a/admin/themes/default/template/element_set_ranks.tpl b/admin/themes/default/template/element_set_ranks.tpl index 8fe143eec..12dfce448 100644 --- a/admin/themes/default/template/element_set_ranks.tpl +++ b/admin/themes/default/template/element_set_ranks.tpl @@ -1,28 +1,20 @@ -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"} -{known_script id="jquery.ui" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.core.packed.js" } -{known_script id="jquery.ui.sortable" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.sortable.packed.js" } -{html_head} -{literal} -<script type="text/javascript"> - $(function() { - $('ul.thumbnails') - .sortable( - { revert: true, - opacity: 0.7, - handle: $('.rank-of-image').add('.rank-of-image img'), - update: function() { - $(this).find('li').each(function(i) { - $(this).find("input[name^=rank_of_image]") - .each(function() { $(this).attr('value', (i+1)*10)}); - }); - $('#image_order_rank').attr('checked', true); - } - }); - }); - -</script> -{/literal} -{/html_head} +{combine_script id='jquery.ui' load='async' require='jquery' path='themes/default/js/ui/packed/ui.core.packed.js' } +{combine_script id='jquery.ui.sortable' load='async' require='jquery.ui' path='themes/default/js/ui/packed/ui.sortable.packed.js' } +{footer_script require='jquery.ui.sortable'}{literal} +jQuery(document).ready(function() { + jQuery('ul.thumbnails').sortable( { + revert: true, opacity: 0.7, + handle: $('.rank-of-image').add('.rank-of-image img'), + update: function() { + $(this).find('li').each(function(i) { + $(this).find("input[name^=rank_of_image]") + .each(function() { $(this).attr('value', (i+1)*10)}); + }); + $('#image_order_rank').attr('checked', true); + } + }); +}); +{/literal}{/footer_script} <h2>{'Manage image ranks'|@translate}</h2> diff --git a/admin/themes/default/template/element_set_unit.tpl b/admin/themes/default/template/element_set_unit.tpl index 9f71751e4..21b521b1e 100644 --- a/admin/themes/default/template/element_set_unit.tpl +++ b/admin/themes/default/template/element_set_unit.tpl @@ -2,34 +2,31 @@ {include file='include/autosize.inc.tpl'} {include file='include/datepicker.inc.tpl'} -{known_script id="jquery.fcbkcomplete" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.fcbkcomplete.js"} -{html_head} -<script type="text/javascript"> - var tag_boxes_selector = ""; +{combine_script id='jquery.fcbkcomplete' load='async' require='jquery' path='themes/default/js/plugins/jquery.fcbkcomplete.js'} +{footer_script require='jquery.fcbkcomplete'} +var tag_boxes_selector = ""; {foreach from=$elements item=element name=element} - {if $smarty.foreach.element.first} - var prefix = ""; - {else} - prefix = ", "; - {/if} - tag_boxes_selector = tag_boxes_selector + prefix + "#tags-" + {$element.ID}; +{if $smarty.foreach.element.first} +var prefix = ""; +{else} +prefix = ", "; +{/if} + tag_boxes_selector = tag_boxes_selector + prefix + "#tags-" + {$element.ID}; {/foreach} {literal} - $(document).ready(function() { - $(tag_boxes_selector).fcbkcomplete({ - json_url: "admin.php?fckb_tags=1", - cache: false, - filter_case: false, - filter_hide: true, - firstselected: true, - filter_selected: true, - maxitems: 100, - newel: true - }); - }); -</script> -{/literal} -{/html_head} +jQuery(document).ready(function() { + $(tag_boxes_selector).fcbkcomplete({ + json_url: "admin.php?fckb_tags=1", + cache: false, + filter_case: false, + filter_hide: true, + firstselected: true, + filter_selected: true, + maxitems: 100, + newel: true + }); +}); +{/literal}{/footer_script} <h2>{'Batch management'|@translate}</h2> @@ -96,9 +93,9 @@ maxlength="4" value="{$element.DATE_CREATION_YEAR}"> <input id="date_creation_linked_date-{$element.ID}" name="date_creation_linked_date-{$element.ID}" type="hidden" size="10" disabled="disabled"> - <script type="text/javascript"> + {footer_script} pwg_initialization_datepicker("#date_creation_day-{$element.ID}", "#date_creation_month-{$element.ID}", "#date_creation_year-{$element.ID}", "#date_creation_linked_date-{$element.ID}", "#date_creation_action_set-{$element.ID}"); - </script> + {/footer_script} </td> </tr> <tr> diff --git a/admin/themes/default/template/footer.tpl b/admin/themes/default/template/footer.tpl index 16491a724..ac608bef9 100644 --- a/admin/themes/default/template/footer.tpl +++ b/admin/themes/default/template/footer.tpl @@ -42,17 +42,25 @@ </div> <!-- footer --> </div> <!-- the_page --> + +{combine_script id='jquery.tipTip' load='async' path='themes/default/js/plugins/jquery.tipTip.minified.js'} +{footer_script require='jquery.tipTip'} +jQuery(document).ready(function() {ldelim} + jQuery('#pwgHead A, #footer A, .themeActions A, .themeActions SPAN, .languageActions A, .languageActions SPAN').tipTip({ldelim} + 'delay' : 0, + 'fadeIn' : 200, + 'fadeOut' : 200, + }); +}); +{/footer_script} + +<!-- BEGIN get_combined_scripts --> +{get_combined_scripts load='footer'} +<!-- END get_combined_scripts --> + {literal} <script type='text/javascript'> - $(function() { - $('#pwgHead A, #footer A, .themeActions A, .themeActions SPAN, .languageActions A, .languageActions SPAN').tipTip({ - 'delay' : 0, - 'fadeIn' : 200, - 'fadeOut' : 200, - }); - }); - - $(document).ready(function() { + jQuery(document).ready(function() { $("a.externalLink").click(function() { window.open($(this).attr("href")); return false; diff --git a/admin/themes/default/template/header.tpl b/admin/themes/default/template/header.tpl index 566d12941..b2ef91944 100644 --- a/admin/themes/default/template/header.tpl +++ b/admin/themes/default/template/header.tpl @@ -21,9 +21,12 @@ {if !empty($theme.local_head)}{include file=$theme.local_head load_css=$theme.load_css}{/if} {/foreach} -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js" now=1} {*jQuery is always available by default*} +<!-- BEGIN get_combined_scripts --> +{get_combined_scripts load='header'} +<!-- END get_combined_scripts --> + +{combine_script id='jquery' path='themes/default/js/jquery.packed.js} -<script type="text/javascript" src="{$ROOT_URL}themes/default/js/scripts.js"></script> <!--[if lt IE 7]> <script type="text/javascript" src="{$ROOT_URL}themes/default/js/pngfix.js"></script> <![endif]--> diff --git a/admin/themes/default/template/history.tpl b/admin/themes/default/template/history.tpl index bca98b75e..f869e9222 100644 --- a/admin/themes/default/template/history.tpl +++ b/admin/themes/default/template/history.tpl @@ -1,12 +1,10 @@ {include file='include/datepicker.inc.tpl'} -{literal} -<script type="text/javascript"> - pwg_initialization_datepicker("#start_day", "#start_month", "#start_year", "#start_linked_date", null, null, "#end_linked_date"); - pwg_initialization_datepicker("#end_day", "#end_month", "#end_year", "#end_linked_date", null, "#start_linked_date", null); -</script> -{/literal} +{footer_script}{literal} + pwg_initialization_datepicker("#start_day", "#start_month", "#start_year", "#start_linked_date", null, null, "#end_linked_date"); + pwg_initialization_datepicker("#end_day", "#end_month", "#end_year", "#end_linked_date", null, "#start_linked_date", null); +{/literal}{/footer_script} <div class="titrePage"> <h2>{'History'|@translate} {$TABSHEET_TITLE}</h2> diff --git a/admin/themes/default/template/include/autosize.inc.tpl b/admin/themes/default/template/include/autosize.inc.tpl index 8f5c78c70..ea18e6d3a 100644 --- a/admin/themes/default/template/include/autosize.inc.tpl +++ b/admin/themes/default/template/include/autosize.inc.tpl @@ -1,13 +1,10 @@ -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"} -{known_script id="jquery.autogrow" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.autogrow-textarea.js"} - +{combine_script id='jquery' load='async' path='themes/default/js/jquery.packed.js'} +{combine_script id='jquery.autogrow' load='async' require='jquery' path='themes/default/js/plugins/jquery.autogrow-textarea.js'} {* Auto size and auto grow textarea *} -{literal} -<script type="text/javascript"> - jQuery().ready(function(){ - jQuery('textarea').css('overflow-y', 'hidden'); - // Auto size and auto grow for all text area - jQuery('textarea').autogrow(); - }); -</script> -{/literal} +{footer_script require='jquery.autogrow'}{literal} +jQuery(document).ready(function(){ + jQuery('textarea').css('overflow-y', 'hidden'); + // Auto size and auto grow for all text area + jQuery('textarea').autogrow(); +}); +{/literal}{/footer_script}
\ No newline at end of file diff --git a/admin/themes/default/template/include/datepicker.inc.tpl b/admin/themes/default/template/include/datepicker.inc.tpl index d85706903..8470c8fa3 100644 --- a/admin/themes/default/template/include/datepicker.inc.tpl +++ b/admin/themes/default/template/include/datepicker.inc.tpl @@ -1,24 +1,23 @@ - -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"} -{known_script id="jquery.ui" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.core.packed.js"} -{known_script id="jquery.ui.datepicker" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.datepicker.packed.js"} -{known_script id="datepicker.js" src=$ROOT_URL|@cat:"themes/default/js/datepicker.js"} +{combine_script id='jquery' load='footer' path='themes/default/js/jquery.packed.js'} +{combine_script id='jquery.ui' load='footer' require='jquery' path='themes/default/js/ui/packed/ui.core.packed.js'} +{combine_script id='jquery.ui.datepicker' load='footer' require='jquery.ui' path='themes/default/js/ui/packed/ui.datepicker.packed.js'} +{combine_script id='datepicker.js' load='footer' require='jquery.ui.datepicker' path='themes/default/js/datepicker.js'} {assign var="datepicker_language" value="themes/default/js/ui/i18n/ui.datepicker-"|@cat:$lang_info.code|@cat:".js"} {if "PHPWG_ROOT_PATH"|@constant|@cat:$datepicker_language|@file_exists} -{known_script id="jquery.ui.datepicker-$lang_info.code" src=$ROOT_URL|@cat:$datepicker_language} +{combine_script id="jquery.ui.datepicker-$lang_info.code" path=$datepicker_language} {/if} {html_head} <link rel="stylesheet" type="text/css" href="{$ROOT_URL}themes/default/js/ui/theme/ui.datepicker.css"> {/html_head} -<script type="text/javascript"> +{footer_script} function pwg_initialization_datepicker(day, month, year, linked_date, checked_on_change, min_linked_date, max_linked_date) {ldelim} return pwg_common_initialization_datepicker( "{$ROOT_URL}{$themeconf.admin_icon_dir}/datepicker.png", day, month, year, linked_date, checked_on_change, min_linked_date, max_linked_date); -} -</script> +}; +{/footer_script} diff --git a/admin/themes/default/template/include/dbselect.inc.tpl b/admin/themes/default/template/include/dbselect.inc.tpl index 009452c1e..297cff01a 100644 --- a/admin/themes/default/template/include/dbselect.inc.tpl +++ b/admin/themes/default/template/include/dbselect.inc.tpl @@ -1,22 +1,18 @@ -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"} -{known_script id="jquery.ui" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.core.packed.js"} -{known_script id="jquery.ui.resizable" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.resizable.packed.js"} - -{* Resize possible *} -{literal} -<script type="text/javascript"> - jQuery().ready(function(){ - // Resize possible for double select list - jQuery(".doubleSelect select.categoryList").resizable({ - handles: "w,e", - animate: true, - animateDuration: "slow", - animateEasing: "swing", - preventDefault: true, - preserveCursor: true, - autoHide: true, - ghost: true - }); - }); -</script> -{/literal} +{combine_script id='jquery' load='async' path='themes/default/js/jquery.packed.js'} +{combine_script id='jquery.ui' load='async' require='jquery' path='themes/default/js/ui/packed/ui.core.packed.js' } +{combine_script id='jquery.ui.resizable' load='async' require='jquery.ui' path='themes/default/js/ui/packed/ui.resizable.packed.js' } +{footer_script require='jquery.ui.resizable'}{literal} +jQuery(document).ready(function(){ + // Resize possible for double select list + jQuery(".doubleSelect select.categoryList").resizable({ + handles: "w,e", + animate: true, + animateDuration: "slow", + animateEasing: "swing", + preventDefault: true, + preserveCursor: true, + autoHide: true, + ghost: true + }); +}); +{/literal}{/footer_script}
\ No newline at end of file diff --git a/admin/themes/default/template/include/resize.inc.tpl b/admin/themes/default/template/include/resize.inc.tpl index 30a637563..b7076a752 100644 --- a/admin/themes/default/template/include/resize.inc.tpl +++ b/admin/themes/default/template/include/resize.inc.tpl @@ -1,10 +1,9 @@ -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"} -{known_script id="jquery.ui" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.core.packed.js"} -{known_script id="jquery.ui.resizable" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.resizable.packed.js"} +{combine_script id='jquery' load='async' path='themes/default/js/jquery.packed.js'} +{combine_script id='jquery.ui' load='async' require='jquery' path='themes/default/js/ui/packed/ui.core.packed.js'} +{combine_script id='jquery.ui.resizable' load='async' require='jquery.ui' path='themes/default/js/ui/packed/ui.resizable.packed.js'} {* Resize possible *} -{literal} -<script type="text/javascript"> +{footer_script require='jquery.ui.resizable'}{literal} jQuery().ready(function(){ // Resize possible for list jQuery(".categoryList").resizable({ @@ -18,5 +17,4 @@ ghost: true }); }); -</script> -{/literal} +{/literal}{/footer_script} diff --git a/admin/themes/default/template/intro.tpl b/admin/themes/default/template/intro.tpl index a45e581a0..b3dbfbbac 100644 --- a/admin/themes/default/template/intro.tpl +++ b/admin/themes/default/template/intro.tpl @@ -1,15 +1,14 @@ -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"} -{known_script id="jquery.cluetip" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.cluetip.packed.js"} +{combine_script id='jquery.cluetip' load='async' require='jquery' path='themes/default/js/plugins/jquery.cluetip.packed.js'} -<script type="text/javascript"> +{footer_script require='jquery.cluetip'} jQuery().ready(function(){ldelim} - jQuery('.cluetip').cluetip({ldelim} - width: 300, - splitTitle: '|', - positionBy: 'bottomTop' - }); + jQuery('.cluetip').cluetip({ldelim} + width: 300, + splitTitle: '|', + positionBy: 'bottomTop' + }); }); -</script> +{/footer_script} <h2>{'Piwigo administration'|@translate}</h2> <dl style="padding-top: 30px;"> diff --git a/admin/themes/default/template/languages_new.tpl b/admin/themes/default/template/languages_new.tpl index 9b66e1724..2e9db5f91 100644 --- a/admin/themes/default/template/languages_new.tpl +++ b/admin/themes/default/template/languages_new.tpl @@ -1,14 +1,13 @@ -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"} -{known_script id="jquery.cluetip" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.cluetip.packed.js"} +{combine_script id='jquery.cluetip' load='async' require='jquery' path='themes/default/js/plugins/jquery.cluetip.packed.js'} -<script type="text/javascript"> +{footer_script require='jquery.cluetip'} jQuery().ready(function(){ldelim} - jQuery('.cluetip').cluetip({ldelim} - width: 300, - splitTitle: '|' - }); + jQuery('.cluetip').cluetip({ldelim} + width: 300, + splitTitle: '|' + }); }); -</script> +{/footer_script} <div class="titrePage"> <h2>{'Add New Language'|@translate}</h2> diff --git a/admin/themes/default/template/menubar.tpl b/admin/themes/default/template/menubar.tpl index 751d5de83..8886a505b 100644 --- a/admin/themes/default/template/menubar.tpl +++ b/admin/themes/default/template/menubar.tpl @@ -1,33 +1,31 @@ -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"} -{known_script id="jquery.ui" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.core.packed.js" } -{known_script id="jquery.ui.sortable" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.sortable.packed.js" } - -<script type="text/javascript"> - jQuery().ready(function(){ldelim} - jQuery(".menuPos").hide(); - jQuery(".drag_button").show(); - jQuery(".menuLi").css("cursor","move"); - jQuery(".menuUl").sortable({ldelim} - axis: "y", - opacity: 0.8 - }); - jQuery("input[name^='hide_']").click(function() {ldelim} - men = this.name.split('hide_'); - if (this.checked) {ldelim} - jQuery("#menu_"+men[1]).addClass('menuLi_hidden'); - } else {ldelim} - jQuery("#menu_"+men[1]).removeClass('menuLi_hidden'); - } - }); - jQuery("#menuOrdering").submit(function(){ldelim} - ar = jQuery('.menuUl').sortable('toArray'); - for(i=0;i<ar.length;i++) {ldelim} - men = ar[i].split('menu_'); - document.getElementsByName('pos_' + men[1])[0].value = i+1; - } - }); - }); -</script> +{combine_script id='jquery.ui' load='async' require='jquery' path='themes/default/js/ui/packed/ui.core.packed.js' } +{combine_script id='jquery.ui.sortable' load='async' require='jquery.ui' path='themes/default/js/ui/packed/ui.sortable.packed.js' } +{footer_script require='jquery.ui.sortable'} +jQuery(document).ready(function(){ldelim} + jQuery(".menuPos").hide(); + jQuery(".drag_button").show(); + jQuery(".menuLi").css("cursor","move"); + jQuery(".menuUl").sortable({ldelim} + axis: "y", + opacity: 0.8 + }); + jQuery("input[name^='hide_']").click(function() {ldelim} + men = this.name.split('hide_'); + if (this.checked) {ldelim} + jQuery("#menu_"+men[1]).addClass('menuLi_hidden'); + } else {ldelim} + jQuery("#menu_"+men[1]).removeClass('menuLi_hidden'); + } + }); + jQuery("#menuOrdering").submit(function(){ldelim} + ar = jQuery('.menuUl').sortable('toArray'); + for(i=0;i<ar.length;i++) {ldelim} + men = ar[i].split('menu_'); + document.getElementsByName('pos_' + men[1])[0].value = i+1; + } + }); +}); +{/footer_script} <div class="titrePage"> <h2>{'Menu Management'|translate}</h2> diff --git a/admin/themes/default/template/photos_add_direct.tpl b/admin/themes/default/template/photos_add_direct.tpl index f737c540c..e16cb4f2c 100644 --- a/admin/themes/default/template/photos_add_direct.tpl +++ b/admin/themes/default/template/photos_add_direct.tpl @@ -1,16 +1,14 @@ -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"} -{known_script id="jquery.jgrowl" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.jgrowl_minimized.js"} +{combine_script id='jquery.jgrowl' load='footer' require='jquery' path='themes/default/js/plugins/jquery.jgrowl_minimized.js' } {if $upload_mode eq 'multiple'} <script type="text/javascript" src="{$uploadify_path}/swfobject.js"></script> -<script type="text/javascript" src="{$uploadify_path}/jquery.uploadify.v2.1.0.min.js"></script> +{combine_script id='jquery.uploadify' load='footer' require='jquery' path='admin/include/uploadify/jquery.uploadify.v2.1.0.min.js' } {/if} {html_head} <link rel="stylesheet" type="text/css" href="{$ROOT_URL}admin/themes/default/uploadify.jGrowl.css"> {/html_head} -{literal} -<script type="text/javascript"> +{footer_script}{literal} jQuery(document).ready(function(){ function checkUploadStart() { var nbErrors = 0; @@ -225,7 +223,7 @@ var sizeLimit = {$upload_max_filesize}; {/literal} {/if} }); -</script> +{/footer_script} <div class="titrePage"> <h2>{'Upload Photos'|@translate}</h2> diff --git a/admin/themes/default/template/picture_modify.tpl b/admin/themes/default/template/picture_modify.tpl index 3d5ba4bab..ec0b14266 100644 --- a/admin/themes/default/template/picture_modify.tpl +++ b/admin/themes/default/template/picture_modify.tpl @@ -2,29 +2,25 @@ {include file='include/dbselect.inc.tpl'} {include file='include/datepicker.inc.tpl'} -{known_script id="jquery.fcbkcomplete" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.fcbkcomplete.js"} -{literal} -<script type="text/javascript"> - $(document).ready(function() { - $("#tags").fcbkcomplete({ - json_url: "admin.php?fckb_tags=1", - cache: false, - filter_case: false, - filter_hide: true, - firstselected: true, - filter_selected: true, - maxitems: 100, - newel: true - }); - }); -</script> -{/literal} - -{literal} -<script type="text/javascript"> - pwg_initialization_datepicker("#date_creation_day", "#date_creation_month", "#date_creation_year", "#date_creation_linked_date", "#date_creation_action_set"); -</script> -{/literal} +{combine_script id='jquery.fcbkcomplete' load='async' require='jquery' path='themes/default/js/plugins/jquery.fcbkcomplete.js'} +{footer_script require='jquery.fcbkcomplete'}{literal} +jQuery(document).ready(function() { + jQuery("#tags").fcbkcomplete({ + json_url: "admin.php?fckb_tags=1", + cache: false, + filter_case: false, + filter_hide: true, + firstselected: true, + filter_selected: true, + maxitems: 100, + newel: true + }); +}); +{/literal}{/footer_script} + +{footer_script} +pwg_initialization_datepicker("#date_creation_day", "#date_creation_month", "#date_creation_year", "#date_creation_linked_date", "#date_creation_action_set"); +{/footer_script} <h2>{'Modify informations about a picture'|@translate}</h2> diff --git a/admin/themes/default/template/plugins_new.tpl b/admin/themes/default/template/plugins_new.tpl index e2ed85359..6546cdc38 100644 --- a/admin/themes/default/template/plugins_new.tpl +++ b/admin/themes/default/template/plugins_new.tpl @@ -1,25 +1,24 @@ -{known_script id="jquery.ui" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.core.packed.js" } -{known_script id="jquery.ui.effects" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/effects.core.packed.js" } -{known_script id="jquery.ui.blind" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/effects.blind.packed.js" } +{combine_script id='jquery.ui' load='async' require='jquery' path='themes/default/js/ui/packed/ui.core.packed.js' } +{combine_script id='jquery.ui.effects' load='async' require='jquery.ui' path='themes/default/js/ui/packed/effects.core.packed.js' } +{combine_script id='jquery.ui.effects.blind' load='async' require='jquery.ui.effects' path='themes/default/js/ui/packed/effects.blind.packed.js' } -<script type="text/javascript"> -jQuery().ready(function(){ldelim} - jQuery("td[id^='desc_']").click(function() {ldelim} - id = this.id.split('_'); - nb_lines = jQuery("#bigdesc_"+id[1]).html().split('<br>').length; +{footer_script require='jquery.ui.effects.blind'} +jQuery(document).ready(function(){ldelim} + jQuery("td[id^='desc_']").click(function() {ldelim} + id = this.id.split('_'); + nb_lines = jQuery("#bigdesc_"+id[1]).html().split('<br>').length; - $("#smalldesc_"+id[1]).toggle('blind', 1); - if ($(this).hasClass('bigdesc')) {ldelim} - $("#bigdesc_"+id[1]).toggle('blind', 1); - $(this).removeClass('bigdesc'); - } else {ldelim} - $("#bigdesc_"+id[1]).toggle('blind', 50 + (nb_lines * 30)); - $(this).addClass('bigdesc'); - } - return false; - }); + jQuery("#smalldesc_"+id[1]).toggle('blind', 1); + if (jQuery(this).hasClass('bigdesc')) {ldelim} + jQuery("#bigdesc_"+id[1]).toggle('blind', 1); + } else {ldelim} + jQuery("#bigdesc_"+id[1]).toggle('blind', 50 + (nb_lines * 30)); + } + jQuery(this).toggleClass('bigdesc'); + return false; + }); }); -</script> +{/footer_script} <div class="titrePage"> <span class="sort"> diff --git a/admin/themes/default/template/plugins_update.tpl b/admin/themes/default/template/plugins_update.tpl index 14d5aabb9..2304db112 100644 --- a/admin/themes/default/template/plugins_update.tpl +++ b/admin/themes/default/template/plugins_update.tpl @@ -1,14 +1,12 @@ -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"} -{known_script id="jquery.cluetip" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.cluetip.packed.js"} - -<script type="text/javascript"> +{combine_script id='jquery.cluetip' load='async' require='jquery' path='themes/default/js/plugins/jquery.cluetip.packed.js'} +{footer_script require='jquery.cluetip'} jQuery().ready(function(){ldelim} - jQuery('.cluetip').cluetip({ldelim} - width: 300, - splitTitle: '|' - }); + jQuery('.cluetip').cluetip({ldelim} + width: 300, + splitTitle: '|' + }); }); -</script> +{/footer_script} <div class="titrePage"> <h2>{'Plugins'|@translate}</h2> diff --git a/admin/themes/default/template/popuphelp.tpl b/admin/themes/default/template/popuphelp.tpl index 718617baf..950e3ca0e 100644 --- a/admin/themes/default/template/popuphelp.tpl +++ b/admin/themes/default/template/popuphelp.tpl @@ -1,5 +1,3 @@ -{known_script id="jquery.tipTip" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.tipTip.minified.js" } - <div id="content" class="content"> {$HELP_CONTENT} </div> <!-- content --> diff --git a/include/template.class.php b/include/template.class.php index dcfc2d527..c1bdc67fa 100644 --- a/include/template.class.php +++ b/include/template.class.php @@ -45,11 +45,10 @@ class Template { const COMBINED_SCRIPTS_TAG = '<!-- COMBINED_SCRIPTS -->'; var $scriptLoader; - var $html_footer_raw_script = array(); const COMBINED_CSS_TAG = '<!-- COMBINED_CSS -->'; var $css_by_priority = array(); - + function Template($root = ".", $theme= "", $path = "template") { global $conf, $lang_info; @@ -79,7 +78,7 @@ class Template { conf_update_param('local_data_dir_checked', 'true'); } } - + $compile_dir = $conf['local_data_dir'].'/templates_c'; mkgetdir( $compile_dir ); @@ -187,6 +186,7 @@ class Template { $this->smarty->clear_compiled_tpl(); $this->smarty->compile_id = $save_compile_id; file_put_contents($this->smarty->compile_dir.'/index.htm', 'Not allowed!'); + FileCombiner::clear_combined_files(); } function get_themeconf($val) @@ -407,7 +407,7 @@ class Template { $this->output = substr_replace( $this->output, "\n".implode( "\n", $content ), $pos, strlen(self::COMBINED_SCRIPTS_TAG) ); } //else maybe error or warning ? } - + if(!empty($this->css_by_priority)) { ksort($this->css_by_priority); @@ -528,7 +528,7 @@ class Template { $this->block_html_head(null, $content, $smarty, $repeat); } } - + function func_combine_script($params, &$smarty) { if (!isset($params['id'])) @@ -546,9 +546,9 @@ class Template { default: $smarty->trigger_error("combine_script: invalid 'load' parameter", E_USER_ERROR); } } - $this->scriptLoader->add( $params['id'], $load, - empty($params['require']) ? array() : explode( ',', $params['require'] ), - @$params['path'], + $this->scriptLoader->add( $params['id'], $load, + empty($params['require']) ? array() : explode( ',', $params['require'] ), + @$params['path'], isset($params['version']) ? $params['version'] : 0 ); } @@ -561,7 +561,7 @@ class Template { } $load = $params['load']=='header' ? 0 : 1; $content = array(); - + if ($load==0) { return self::COMBINED_SCRIPTS_TAG; @@ -578,10 +578,10 @@ class Template { . Template::make_script_src($script) .'"></script>'; } - if (count($this->html_footer_raw_script)) + if (count($this->scriptLoader->inline_scripts)) { $content[]= '<script type="text/javascript">'; - $content = array_merge($content, $this->html_footer_raw_script); + $content = array_merge($content, $this->scriptLoader->inline_scripts); $content[]= '</script>'; } @@ -628,10 +628,10 @@ class Template { $content = trim($content); if ( !empty($content) ) { // second call - $this->html_footer_raw_script[] = $content; + $this->scriptLoader->add_inline( $content, @$params['require'] ); } } - + function func_combine_css($params, &$smarty) { !empty($params['path']) || fatal_error('combine_css missing path'); @@ -841,6 +841,11 @@ final class Script if (!empty($path)) $this->path = $path; } + + function is_remote() + { + return url_is_remote( $this->path ); + } } @@ -849,7 +854,11 @@ and later on by combining them in a unique file respecting at the same time depe class ScriptLoader { private $registered_scripts; + public $inline_scripts; + private $did_head; + private $head_done_scripts; + private static $known_paths = array( 'core.scripts' => 'themes/default/js/scripts.js', 'jquery' => 'themes/default/js/jquery.min.js', @@ -864,9 +873,24 @@ class ScriptLoader function clear() { $this->registered_scripts = array(); + $this->inline_scripts = array(); + $this->head_done_scripts = array(); $this->did_head = false; } + function add_inline($code, $require) + { + if(!empty($require)) + { + if(!isset($this->registered_scripts[$require])) + fatal_error("inline script not found require $require"); + $s = $this->registered_scripts[$require]; + if($s->load_mode==2) + $s->load_mode=1; // until now the implementation does not allow executing inline script depending on another async script + } + $this->inline_scripts[] = $code; + } + function add($id, $load_mode, $require, $path, $version=0) { if ($this->did_head && $load_mode==0 ) @@ -899,50 +923,9 @@ class ScriptLoader return $this->did_head; } - private static function fill_well_known($id, $script) - { - if ( empty($script->path) && isset(self::$known_paths[$id])) - { - $script->path = self::$known_paths[$id]; - } - if ( strncmp($id, 'jquery.', 7)==0 ) - { - if ( !in_array('jquery', $script->precedents ) ) - $script->precedents[] = 'jquery'; - if ( strncmp($id, 'jquery.ui.', 10)==0 && !in_array('jquery.ui', $script->precedents ) ) - $script->precedents[] = 'jquery.ui'; - } - } - function get_head_scripts() { - do - { - $changed = false; - foreach( $this->registered_scripts as $id => $script) - { - $load = $script->load_mode; - if ($load==0) - continue; - if ($load==2) - $load=1; // we are async -> a predecessor cannot be async because the script execution order is not guaranteed - foreach( $script->precedents as $precedent) - { - if ( !isset($this->registered_scripts[$precedent] ) ) - { - trigger_error("Script $id requires undefined script $precedent", E_USER_WARNING); - continue; - } - if ( $this->registered_scripts[$precedent]->load_mode > $load ) - { - $this->registered_scripts[$precedent]->load_mode = $load; - $changed = true; - } - } - } - } - while ($changed); - + self::check_load_dep($this->registered_scripts); foreach( array_keys($this->registered_scripts) as $id ) { $this->compute_script_topological_order($id); @@ -950,40 +933,94 @@ class ScriptLoader uasort($this->registered_scripts, array('ScriptLoader', 'cmp_by_mode_and_order')); - $result = array(); foreach( $this->registered_scripts as $id => $script) { if ($script->load_mode > 0) break; if ( !empty($script->path) ) - $result[$id] = $script; + $this->head_done_scripts[$id] = $script; else trigger_error("Script $id has an undefined path", E_USER_WARNING); } $this->did_head = true; - return $result; + return $this->head_done_scripts; } function get_footer_scripts() { if (!$this->did_head) { - trigger_error("Attempt to write footer scripts without header scripts", E_USER_WARNING); + trigger_error("Attempt to write footer scripts without header scripts", E_USER_ERROR ); } - $result = array( array(), array() ); + + $todo = array(); foreach( $this->registered_scripts as $id => $script) { - if ($script->load_mode > 0) + if (!isset($this->head_done_scripts[$id])) + { + $todo[$id] = $script; + } + } + foreach( array_keys($todo) as $id ) + { + $this->compute_script_topological_order($id); + } + + uasort($todo, array('ScriptLoader', 'cmp_by_mode_and_order')); + + + $result = array( array(), array() ); + foreach( $todo as $id => $script) + { + $result[$script->load_mode-1][$id] = $script; + } + return $result; + } + + private static function check_load_dep($scripts) + { + do + { + $changed = false; + foreach( $scripts as $id => $script) { - if ( !empty( $script->path ) ) + $load = $script->load_mode; + if ($load==0) + continue; + foreach( $script->precedents as $precedent) { - $result[$script->load_mode-1][$id] = $script; + if ( !isset($scripts[$precedent] ) ) + continue; + if ( $scripts[$precedent]->load_mode > $load ) + { + $scripts[$precedent]->load_mode = $load; + $changed = true; + } + if ($load==2 && $scripts[$precedent]->load_mode==2 && $script->is_remote() ) + {// we are async -> a predecessor cannot be async unlesss it can be merged; otherwise script execution order is not guaranteed + $scripts[$precedent]->load_mode = 1; + $changed = true; + } } - else - trigger_error("Script $id has an undefined path", E_USER_WARNING); } } - return $result; + while ($changed); + } + + + private static function fill_well_known($id, $script) + { + if ( empty($script->path) && isset(self::$known_paths[$id])) + { + $script->path = self::$known_paths[$id]; + } + if ( strncmp($id, 'jquery.', 7)==0 ) + { + if ( !in_array('jquery', $script->precedents ) ) + $script->precedents[] = 'jquery'; + if ( strncmp($id, 'jquery.ui.', 10)==0 && !in_array('jquery.ui', $script->precedents ) ) + $script->precedents[] = 'jquery.ui'; + } } private function compute_script_topological_order($script_id) @@ -1008,9 +1045,16 @@ class ScriptLoader private static function cmp_by_mode_and_order($s1, $s2) { $ret = $s1->load_mode - $s2->load_mode; - if (!$ret) - $ret = $s1->extra['order'] - $s2->extra['order']; - return $ret; + if ($ret) return $ret; + + $ret = $s1->extra['order'] - $s2->extra['order']; + if ($ret) return $ret; + + if ($s1->extra['order']==0 and ($s1->is_remote() xor $s2->is_remote()) ) + { + return $s1->is_remote() ? -1 : 1; + } + return strcmp($s1->id,$s2->id); } } @@ -1027,6 +1071,17 @@ final class FileCombiner { $this->type = $type; } + + static function clear_combined_files() + { + $dir = opendir(PHPWG_ROOT_PATH.self::OUT_SUB_DIR); + while ($file = readdir($dir)) + { + if ( get_extension($file)=='js' || get_extension($file)=='css') + unlink(PHPWG_ROOT_PATH.self::OUT_SUB_DIR.$file); + } + closedir($dir); + } function add($file, $version) { @@ -1077,8 +1132,7 @@ final class FileCombiner } $output = ''; - if ($conf['debug_template']) - $output .= "/*".join("\n", $this->files)."*/\n"; + $output .= "/* ".count($this->files)."\n".join("\n", $this->files)."*/\n"; foreach ($this->files as $input_file) { $output .= "/* BEGIN $input_file */\n"; @@ -1132,4 +1186,4 @@ final class FileCombiner } } -?> +?>
\ No newline at end of file diff --git a/profile.php b/profile.php index 547fc8ba1..160b649fd 100644 --- a/profile.php +++ b/profile.php @@ -84,7 +84,7 @@ SELECT '.implode(',', $fields).' } $template->set_filename('profile', 'profile.tpl'); trigger_action('loc_end_profile'); - $template->parse('profile'); + $template->pparse('profile'); include(PHPWG_ROOT_PATH.'include/page_tail.php'); } diff --git a/themes/default/template/header.tpl b/themes/default/template/header.tpl index 45152d206..5dc51f97b 100644 --- a/themes/default/template/header.tpl +++ b/themes/default/template/header.tpl @@ -30,9 +30,7 @@ {if isset($last.U_IMG) }<link rel="last" title="{'Last'|@translate}" href="{$last.U_IMG}" >{/if} {if isset($U_UP) }<link rel="up" title="{'Thumbnails'|@translate}" href="{$U_UP}" >{/if} - {get_combined_css} - {foreach from=$themes item=theme} {if $theme.load_css} {combine_css path="themes/`$theme.id`/theme.css" order=-10} diff --git a/themes/default/template/include/autosize.inc.tpl b/themes/default/template/include/autosize.inc.tpl index 8f5c78c70..ea18e6d3a 100644 --- a/themes/default/template/include/autosize.inc.tpl +++ b/themes/default/template/include/autosize.inc.tpl @@ -1,13 +1,10 @@ -{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"} -{known_script id="jquery.autogrow" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.autogrow-textarea.js"} - +{combine_script id='jquery' load='async' path='themes/default/js/jquery.packed.js'} +{combine_script id='jquery.autogrow' load='async' require='jquery' path='themes/default/js/plugins/jquery.autogrow-textarea.js'} {* Auto size and auto grow textarea *} -{literal} -<script type="text/javascript"> - jQuery().ready(function(){ - jQuery('textarea').css('overflow-y', 'hidden'); - // Auto size and auto grow for all text area - jQuery('textarea').autogrow(); - }); -</script> -{/literal} +{footer_script require='jquery.autogrow'}{literal} +jQuery(document).ready(function(){ + jQuery('textarea').css('overflow-y', 'hidden'); + // Auto size and auto grow for all text area + jQuery('textarea').autogrow(); +}); +{/literal}{/footer_script}
\ No newline at end of file diff --git a/themes/default/template/include/resize.inc.tpl b/themes/default/template/include/resize.inc.tpl index 5165f49a5..b7076a752 100644 --- a/themes/default/template/include/resize.inc.tpl +++ b/themes/default/template/include/resize.inc.tpl @@ -1,9 +1,9 @@ -{combine_script id='jquery' load='footer' path='themes/default/js/jquery.packed.js'} -{combine_script id='jquery.ui' load='footer' require='jquery' path='themes/default/js/ui/packed/ui.core.packed.js'} -{combine_script id='jquery.ui.resizable' load='footer' require='jquery.ui' path='themes/default/js/ui/packed/ui.resizable.packed.js'} +{combine_script id='jquery' load='async' path='themes/default/js/jquery.packed.js'} +{combine_script id='jquery.ui' load='async' require='jquery' path='themes/default/js/ui/packed/ui.core.packed.js'} +{combine_script id='jquery.ui.resizable' load='async' require='jquery.ui' path='themes/default/js/ui/packed/ui.resizable.packed.js'} {* Resize possible *} -{footer_script}{literal} +{footer_script require='jquery.ui.resizable'}{literal} jQuery().ready(function(){ // Resize possible for list jQuery(".categoryList").resizable({ @@ -18,4 +18,3 @@ }); }); {/literal}{/footer_script} - |