@@ -1257,6 +1257,56 @@ function get_require_url( $lib_file, $relative_to = 'rsc_url', $subfolder = 'js'
12571257 return $ lib_url ;
12581258}
12591259
1260+
1261+ /**
1262+ * Check if the requested file is bundled in another
1263+ *
1264+ * @param string alias, url or filename (relative to rsc/js) for javascript file
1265+ * @param boolean|string Is the file's path relative to the base path/url?
1266+ * @param string 'js' or 'css' or 'build'
1267+ * @param string version number to append at the end of requested url to avoid getting an old version from the cache
1268+ * @return integer Index of first file that was dequeued because it is bundled inside current requested file
1269+ */
1270+ function check_bundled_file ( $ file , $ relative_to = 'rsc_url ' , $ subfolder = 'js ' , $ version = '# ' )
1271+ {
1272+ global $ required_js , $ required_css , $ bundled_files ;
1273+
1274+ // Store here index of first file that was dequeued because it is bundled inside current requested file:
1275+ $ first_dequeued_file_index = NULL ;
1276+
1277+ if ( isset ( $ bundled_files [ $ file ] ) )
1278+ { // If currently required file contains other JS files which must not be required twice:
1279+ foreach ( $ bundled_files [ $ file ] as $ bundled_file )
1280+ { // Include all bundled files in the global array in order to don't call them twice:
1281+ $ bundled_url = strtolower ( get_require_url ( $ bundled_file , $ relative_to , $ subfolder , $ version ) );
1282+ if ( $ subfolder == 'js ' )
1283+ { // JS file:
1284+ if ( empty ( $ required_js ) || ! in_array ( $ bundled_url , $ required_js ) )
1285+ { // Include bundled file into this global array in order to don't require this if it will be required further:
1286+ $ required_js [] = $ bundled_url ;
1287+ }
1288+ }
1289+ else // 'css' or 'build'
1290+ { // CSS file:
1291+ if ( empty ( $ required_css ) || ! in_array ( $ bundled_url , $ required_css ) )
1292+ { // Include bundled file into this global array in order to don't require this if it will be required further:
1293+ $ required_css [] = $ bundled_url ;
1294+ }
1295+ }
1296+ // Dequeue the file if it was required before:
1297+ $ dequeued_file_index = dequeue ( $ bundled_file , $ relative_to );
1298+ if ( $ first_dequeued_file_index === NULL )
1299+ { // We need to know first dequeued file in order to insert currently
1300+ // required file in that place instead of insert it as last ordered:
1301+ $ first_dequeued_file_index = $ dequeued_file_index ;
1302+ }
1303+ }
1304+ }
1305+
1306+ return $ first_dequeued_file_index ;
1307+ }
1308+
1309+
12601310/**
12611311 * Memorize that a specific javascript file will be required by the current page.
12621312 * All requested files will be included in the page head only once (when headlines is called)
@@ -1276,8 +1326,8 @@ function get_require_url( $lib_file, $relative_to = 'rsc_url', $subfolder = 'js'
12761326 */
12771327function require_js ( $ js_file , $ relative_to = 'rsc_url ' , $ async_defer = false , $ output = false , $ version = '# ' , $ position = 'headlines ' )
12781328{
1279- global $ required_js ; // Use this var as global and NOT static, because it is used in other functions(e.g. display_ajax_form())
1280- global $ use_defer, $ bundled_js_files ;
1329+ global $ required_js ; // Use this var as global and NOT static, because it is used in other functions(e.g. display_ajax_form(), check_bundled_file() )
1330+ global $ use_defer ;
12811331
12821332 if ( is_admin_page () && in_array ( $ js_file , array ( 'functions.js ' , 'ajax.js ' , 'form_extensions.js ' , 'extracats.js ' , 'dynamic_select.js ' , 'backoffice.js ' ) ) )
12831333 { // Don't require this file on back-office because it is auto loaded by bundled file evo_backoffice.bmin.js:
@@ -1289,27 +1339,8 @@ function require_js( $js_file, $relative_to = 'rsc_url', $async_defer = false, $
12891339 return ;
12901340 }
12911341
1292- // Store here index of first file that was dequeued because it is bundled inside current requested file:
1293- $ first_dequeued_file_index = NULL ;
1294-
1295- if ( isset ( $ bundled_js_files [ $ js_file ] ) )
1296- { // If currently required file contains other JS files which must not be required twice:
1297- foreach ( $ bundled_js_files [ $ js_file ] as $ bundled_js_file )
1298- { // Include all bundled files in the global array in order to don't call them twice:
1299- $ bundled_js_url = strtolower ( get_require_url ( $ bundled_js_file , $ relative_to , 'js ' , $ version ) );
1300- if ( empty ( $ required_js ) || ! in_array ( $ bundled_js_url , $ required_js ) )
1301- { // Include bundled file into this global array in order to don't require this if it will be required further:
1302- $ required_js [] = $ bundled_js_url ;
1303- }
1304- // Dequeue the file if it was required before:
1305- $ dequeued_file_index = dequeue ( $ bundled_js_file , $ relative_to );
1306- if ( $ first_dequeued_file_index === NULL )
1307- { // We need to know first dequeued file in order to insert currently
1308- // required file in that place instead of insert it as last ordered:
1309- $ first_dequeued_file_index = $ dequeued_file_index ;
1310- }
1311- }
1312- }
1342+ // Get index of first file that was dequeued because it is bundled inside current requested file:
1343+ $ first_dequeued_file_index = check_bundled_file ( $ js_file , $ relative_to , 'js ' , $ version );
13131344
13141345 if ( in_array ( $ js_file , array ( '#jqueryUI# ' , 'communication.js ' , 'functions.js ' ) ) )
13151346 { // Dependency : ensure jQuery is loaded
@@ -1413,7 +1444,7 @@ function require_js_defer( $js_file, $relative_to = 'rsc_url', $output = false,
14131444 */
14141445function require_css ( $ css_file , $ relative_to = 'rsc_url ' , $ title = NULL , $ media = NULL , $ version = '# ' , $ output = false , $ position = 'headlines ' , $ async = false )
14151446{
1416- static $ required_css ;
1447+ global $ required_css ; // Use this var as global and NOT static, because it is used in other functions(e.g. check_bundled_file())
14171448
14181449 // Which subfolder do we want to use in case of absolute paths? (doesn't appy to 'relative')
14191450 $ subfolder = 'css ' ;
@@ -1425,6 +1456,14 @@ function require_css( $css_file, $relative_to = 'rsc_url', $title = NULL, $media
14251456 }
14261457 }
14271458
1459+ if ( is_dequeued ( $ css_file , $ relative_to ) )
1460+ { // Don't require if the file was already dequeued once:
1461+ return ;
1462+ }
1463+
1464+ // Get index of first file that was dequeued because it is bundled inside current requested file:
1465+ $ first_dequeued_file_index = check_bundled_file ( $ css_file , $ relative_to , $ subfolder , $ version );
1466+
14281467 // Get library url of CSS file by alias name
14291468 $ css_url = get_require_url ( $ css_file , $ relative_to , $ subfolder , $ version );
14301469
@@ -1462,11 +1501,11 @@ function require_css( $css_file, $relative_to = 'rsc_url', $title = NULL, $media
14621501 { // Add stylesheet tag to <head>
14631502 if ($ position == 'headlines ' )
14641503 {
1465- add_headline ( $ stylesheet_tag , $ css_file , $ relative_to );
1504+ add_headline ( $ stylesheet_tag , $ css_file , $ relative_to, $ first_dequeued_file_index );
14661505 }
14671506 elseif ( $ position == 'footerlines ' )
14681507 {
1469- add_footerline ( $ stylesheet_tag , $ css_file , $ relative_to );
1508+ add_footerline ( $ stylesheet_tag , $ css_file , $ relative_to, $ first_dequeued_file_index );
14701509 }
14711510 }
14721511 }
@@ -3772,16 +3811,19 @@ function get_prevent_key_enter_js( $jquery_selection )
37723811 * - 'fontawesome' - Use only font-awesome icons
37733812 * - 'fontawesome-glyphicons' - Use font-awesome icons as a priority over the glyphicons
37743813 * @param boolean|string 'relative' or true (relative to <base>) or 'rsc_url' (relative to $rsc_url) or 'blog' (relative to current blog URL -- may be subdomain or custom domain)
3814+ * @param boolean TRUE - to require css file, FALSE - is used when css file is already loaded inside superbundle file
37753815 */
3776- function init_fontawesome_icons ( $ icons_type = 'fontawesome ' , $ relative_to = 'rsc_url ' )
3816+ function init_fontawesome_icons ( $ icons_type = 'fontawesome ' , $ relative_to = 'rsc_url ' , $ require_files = true )
37773817{
37783818 global $ b2evo_icons_type ;
37793819
37803820 // Use font-awesome icons, @see get_icon()
37813821 $ b2evo_icons_type = $ icons_type ;
37823822
3783- // Load main CSS file of font-awesome icons
3784- require_css ( '#fontawesome# ' , $ relative_to );
3823+ if ( $ require_files )
3824+ { // Load main CSS file of font-awesome icons
3825+ require_css ( '#fontawesome# ' , $ relative_to );
3826+ }
37853827}
37863828
37873829
0 commit comments