|  | @@ -1,18 +1,18 @@  discard block | 
                                                    
                                                        |  |  |  block discarded – undo | 
                                                                                                                                                                                                                    
                                                            | 1 | 1 |  <?php | 
                                                                                                            
                                                            | 2 |  | -if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly | 
                                                                                                            
                                                            |  | 2 | +if (!defined('ABSPATH')) exit; // Exit if accessed directly | 
                                                                                                            
                                                            | 3 | 3 |   | 
                                                                                                            
                                                            | 4 | 4 |  // initialize | 
                                                                                                            
                                                            | 5 |  | -if ( is_admin() ) { | 
                                                                                                            
                                                            | 6 |  | -    add_action( 'admin_menu', 'autoptimize_extra_admin' ); | 
                                                                                                            
                                                            | 7 |  | -    add_filter( 'autoptimize_filter_settingsscreen_tabs','add_autoptimize_extra_tab' ); | 
                                                                                                            
                                                            |  | 5 | +if (is_admin()) { | 
                                                                                                            
                                                            |  | 6 | +    add_action('admin_menu', 'autoptimize_extra_admin'); | 
                                                                                                            
                                                            |  | 7 | +    add_filter('autoptimize_filter_settingsscreen_tabs', 'add_autoptimize_extra_tab'); | 
                                                                                                            
                                                            | 8 | 8 |  } else { | 
                                                                                                            
                                                            | 9 | 9 |      autoptimize_extra_init(); | 
                                                                                                            
                                                            | 10 | 10 |  } | 
                                                                                                            
                                                            | 11 | 11 |   | 
                                                                                                            
                                                            | 12 | 12 |  // get option | 
                                                                                                            
                                                            | 13 | 13 |  function autoptimize_extra_get_options() { | 
                                                                                                            
                                                            | 14 |  | -    $_default_val = array("autoptimize_extra_checkbox_field_1"=>"0","autoptimize_extra_checkbox_field_0"=>"0","autoptimize_extra_radio_field_4"=>"1","autoptimize_extra_text_field_2"=>"","autoptimize_extra_text_field_3"=>""); | 
                                                                                                            
                                                            | 15 |  | -    $_option_val = get_option( 'autoptimize_extra_settings' ); | 
                                                                                                            
                                                            |  | 14 | +    $_default_val = array("autoptimize_extra_checkbox_field_1"=>"0", "autoptimize_extra_checkbox_field_0"=>"0", "autoptimize_extra_radio_field_4"=>"1", "autoptimize_extra_text_field_2"=>"", "autoptimize_extra_text_field_3"=>""); | 
                                                                                                            
                                                            |  | 15 | +    $_option_val = get_option('autoptimize_extra_settings'); | 
                                                                                                            
                                                            | 16 | 16 |      if (empty($_option_val)) { | 
                                                                                                            
                                                            | 17 | 17 |          $_option_val = $_default_val; | 
                                                                                                            
                                                            | 18 | 18 |      } | 
                                                                                                                                                        
                                                        |  | @@ -30,58 +30,58 @@  discard block | 
                                                    
                                                        |  |  |  block discarded – undo | 
                                                                                                                                                                                                                    
                                                            | 30 | 30 |       | 
                                                                                                            
                                                            | 31 | 31 |      /* remove version from query string */ | 
                                                                                                            
                                                            | 32 | 32 |      if ($autoptimize_extra_options['autoptimize_extra_checkbox_field_0']) { | 
                                                                                                            
                                                            | 33 |  | -        add_filter( 'script_loader_src', 'autoptimize_extra_remove_qs', 15, 1 ); | 
                                                                                                            
                                                            | 34 |  | -        add_filter( 'style_loader_src', 'autoptimize_extra_remove_qs', 15, 1 ); | 
                                                                                                            
                                                            |  | 33 | +        add_filter('script_loader_src', 'autoptimize_extra_remove_qs', 15, 1); | 
                                                                                                            
                                                            |  | 34 | +        add_filter('style_loader_src', 'autoptimize_extra_remove_qs', 15, 1); | 
                                                                                                            
                                                            | 35 | 35 |      } | 
                                                                                                            
                                                            | 36 | 36 |   | 
                                                                                                            
                                                            | 37 | 37 |      /* async JS */ | 
                                                                                                            
                                                            | 38 | 38 |      if (!empty($autoptimize_extra_options['autoptimize_extra_text_field_3'])) { | 
                                                                                                            
                                                            | 39 |  | -        add_filter('autoptimize_filter_js_exclude','autoptimize_extra_async_js',10,1); | 
                                                                                                            
                                                            |  | 39 | +        add_filter('autoptimize_filter_js_exclude', 'autoptimize_extra_async_js', 10, 1); | 
                                                                                                            
                                                            | 40 | 40 |      } | 
                                                                                                            
                                                            | 41 | 41 |   | 
                                                                                                            
                                                            | 42 | 42 |      /* optimize google fonts */ | 
                                                                                                            
                                                            | 43 |  | -    if ( !empty( $autoptimize_extra_options['autoptimize_extra_radio_field_4'] ) && ( $autoptimize_extra_options['autoptimize_extra_radio_field_4'] != "1" ) ) { | 
                                                                                                            
                                                            | 44 |  | -        if ( $autoptimize_extra_options['autoptimize_extra_radio_field_4'] == "2" ) { | 
                                                                                                            
                                                            | 45 |  | -            add_filter('autoptimize_filter_css_removables','autoptimize_extra_remove_gfonts',10,1); | 
                                                                                                            
                                                            |  | 43 | +    if (!empty($autoptimize_extra_options['autoptimize_extra_radio_field_4']) && ($autoptimize_extra_options['autoptimize_extra_radio_field_4'] != "1")) { | 
                                                                                                            
                                                            |  | 44 | +        if ($autoptimize_extra_options['autoptimize_extra_radio_field_4'] == "2") { | 
                                                                                                            
                                                            |  | 45 | +            add_filter('autoptimize_filter_css_removables', 'autoptimize_extra_remove_gfonts', 10, 1); | 
                                                                                                            
                                                            | 46 | 46 |          } else { | 
                                                                                                            
                                                            | 47 |  | -            add_filter('autoptimize_html_after_minify','autoptimize_extra_gfonts',10,1); | 
                                                                                                            
                                                            | 48 |  | -            add_filter('autoptimize_extra_filter_tobepreconn','autoptimize_extra_preconnectgooglefonts',10,1); | 
                                                                                                            
                                                            |  | 47 | +            add_filter('autoptimize_html_after_minify', 'autoptimize_extra_gfonts', 10, 1); | 
                                                                                                            
                                                            |  | 48 | +            add_filter('autoptimize_extra_filter_tobepreconn', 'autoptimize_extra_preconnectgooglefonts', 10, 1); | 
                                                                                                            
                                                            | 49 | 49 |          } | 
                                                                                                            
                                                            | 50 | 50 |      } | 
                                                                                                            
                                                            | 51 | 51 |       | 
                                                                                                            
                                                            | 52 | 52 |      /* preconnect */ | 
                                                                                                            
                                                            | 53 |  | -    if ( !empty($autoptimize_extra_options['autoptimize_extra_text_field_2']) || has_filter('autoptimize_extra_filter_tobepreconn') ) { | 
                                                                                                            
                                                            | 54 |  | -        add_filter( 'wp_resource_hints', 'autoptimize_extra_preconnect', 10, 2 ); | 
                                                                                                            
                                                            |  | 53 | +    if (!empty($autoptimize_extra_options['autoptimize_extra_text_field_2']) || has_filter('autoptimize_extra_filter_tobepreconn')) { | 
                                                                                                            
                                                            |  | 54 | +        add_filter('wp_resource_hints', 'autoptimize_extra_preconnect', 10, 2); | 
                                                                                                            
                                                            | 55 | 55 |      } | 
                                                                                                            
                                                            | 56 | 56 |  } | 
                                                                                                            
                                                            | 57 | 57 |   | 
                                                                                                            
                                                            | 58 | 58 |  // disable emoji's functions | 
                                                                                                            
                                                            | 59 | 59 |  function autoptimize_extra_disable_emojis() { | 
                                                                                                            
                                                            | 60 | 60 |      // all actions related to emojis | 
                                                                                                            
                                                            | 61 |  | -    remove_action( 'admin_print_styles', 'print_emoji_styles' ); | 
                                                                                                            
                                                            | 62 |  | -    remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); | 
                                                                                                            
                                                            | 63 |  | -    remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); | 
                                                                                                            
                                                            | 64 |  | -    remove_action( 'wp_print_styles', 'print_emoji_styles' ); | 
                                                                                                            
                                                            | 65 |  | -    remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' ); | 
                                                                                                            
                                                            | 66 |  | -    remove_filter( 'the_content_feed', 'wp_staticize_emoji' ); | 
                                                                                                            
                                                            | 67 |  | -    remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); | 
                                                                                                            
                                                            |  | 61 | +    remove_action('admin_print_styles', 'print_emoji_styles'); | 
                                                                                                            
                                                            |  | 62 | +    remove_action('wp_head', 'print_emoji_detection_script', 7); | 
                                                                                                            
                                                            |  | 63 | +    remove_action('admin_print_scripts', 'print_emoji_detection_script'); | 
                                                                                                            
                                                            |  | 64 | +    remove_action('wp_print_styles', 'print_emoji_styles'); | 
                                                                                                            
                                                            |  | 65 | +    remove_filter('wp_mail', 'wp_staticize_emoji_for_email'); | 
                                                                                                            
                                                            |  | 66 | +    remove_filter('the_content_feed', 'wp_staticize_emoji'); | 
                                                                                                            
                                                            |  | 67 | +    remove_filter('comment_text_rss', 'wp_staticize_emoji'); | 
                                                                                                            
                                                            | 68 | 68 |   | 
                                                                                                            
                                                            | 69 | 69 |      // filter to remove TinyMCE emojis | 
                                                                                                            
                                                            | 70 |  | -    add_filter( 'tiny_mce_plugins', 'autoptimize_extra_disable_emojis_tinymce' ); | 
                                                                                                            
                                                            |  | 70 | +    add_filter('tiny_mce_plugins', 'autoptimize_extra_disable_emojis_tinymce'); | 
                                                                                                            
                                                            | 71 | 71 |  } | 
                                                                                                            
                                                            | 72 | 72 |   | 
                                                                                                            
                                                            | 73 |  | -function autoptimize_extra_disable_emojis_tinymce( $plugins ) { | 
                                                                                                            
                                                            | 74 |  | -    if ( is_array( $plugins ) ) { | 
                                                                                                            
                                                            | 75 |  | -        return array_diff( $plugins, array( 'wpemoji' ) ); | 
                                                                                                            
                                                            |  | 73 | +function autoptimize_extra_disable_emojis_tinymce($plugins) { | 
                                                                                                            
                                                            |  | 74 | +    if (is_array($plugins)) { | 
                                                                                                            
                                                            |  | 75 | +        return array_diff($plugins, array('wpemoji')); | 
                                                                                                            
                                                            | 76 | 76 |      } else { | 
                                                                                                            
                                                            | 77 | 77 |          return array(); | 
                                                                                                            
                                                            | 78 | 78 |      } | 
                                                                                                            
                                                            | 79 | 79 |  } | 
                                                                                                            
                                                            | 80 | 80 |   | 
                                                                                                            
                                                            | 81 | 81 |  // remove query string function | 
                                                                                                            
                                                            | 82 |  | -function autoptimize_extra_remove_qs( $src ) { | 
                                                                                                            
                                                            | 83 |  | -    if ( strpos($src, '?ver=') ) { | 
                                                                                                            
                                                            | 84 |  | -            $src = remove_query_arg( 'ver', $src ); | 
                                                                                                            
                                                            |  | 82 | +function autoptimize_extra_remove_qs($src) { | 
                                                                                                            
                                                            |  | 83 | +    if (strpos($src, '?ver=')) { | 
                                                                                                            
                                                            |  | 84 | +            $src = remove_query_arg('ver', $src); | 
                                                                                                            
                                                            | 85 | 85 |      } | 
                                                                                                            
                                                            | 86 | 86 |      return $src; | 
                                                                                                            
                                                            | 87 | 87 |  } | 
                                                                                                                                                        
                                                        |  | @@ -93,18 +93,18 @@  discard block | 
                                                    
                                                        |  |  |  block discarded – undo | 
                                                                                                                                                                                                                    
                                                            | 93 | 93 |      // get exclusions | 
                                                                                                            
                                                            | 94 | 94 |      $AO_JSexclArrayIn = array(); | 
                                                                                                            
                                                            | 95 | 95 |      if (!empty($in)) { | 
                                                                                                            
                                                            | 96 |  | -        $AO_JSexclArrayIn = array_fill_keys(array_filter(array_map('trim',explode(",",$in))),""); | 
                                                                                                            
                                                            |  | 96 | +        $AO_JSexclArrayIn = array_fill_keys(array_filter(array_map('trim', explode(",", $in))), ""); | 
                                                                                                            
                                                            | 97 | 97 |      } | 
                                                                                                            
                                                            | 98 | 98 |       | 
                                                                                                            
                                                            | 99 | 99 |      // get asyncs | 
                                                                                                            
                                                            | 100 | 100 |      $_fromSetting = $autoptimize_extra_options['autoptimize_extra_text_field_3']; | 
                                                                                                            
                                                            | 101 |  | -    $AO_asynced_JS = array_fill_keys(array_filter(array_map('trim',explode(",",$_fromSetting))),""); | 
                                                                                                            
                                                            |  | 101 | +    $AO_asynced_JS = array_fill_keys(array_filter(array_map('trim', explode(",", $_fromSetting))), ""); | 
                                                                                                            
                                                            | 102 | 102 |      foreach ($AO_asynced_JS as $JSkey => $JSvalue) { | 
                                                                                                            
                                                            | 103 | 103 |          $AO_asynced_JS[$JSkey] = "async"; | 
                                                                                                            
                                                            | 104 | 104 |      } | 
                                                                                                            
                                                            | 105 | 105 |       | 
                                                                                                            
                                                            | 106 | 106 |      // merge exclusions & asyncs in one array and return to AO API | 
                                                                                                            
                                                            | 107 |  | -    $AO_excl_w_async = array_merge( $AO_JSexclArrayIn, $AO_asynced_JS ); | 
                                                                                                            
                                                            |  | 107 | +    $AO_excl_w_async = array_merge($AO_JSexclArrayIn, $AO_asynced_JS); | 
                                                                                                            
                                                            | 108 | 108 |      return $AO_excl_w_async; | 
                                                                                                            
                                                            | 109 | 109 |  } | 
                                                                                                            
                                                            | 110 | 110 |   | 
                                                                                                                                                        
                                                        |  | @@ -113,25 +113,25 @@  discard block | 
                                                    
                                                        |  |  |  block discarded – undo | 
                                                                                                                                                                                                                    
                                                            | 113 | 113 |      $autoptimize_extra_options = autoptimize_extra_get_options(); | 
                                                                                                            
                                                            | 114 | 114 |       | 
                                                                                                            
                                                            | 115 | 115 |      // get setting and store in array | 
                                                                                                            
                                                            | 116 |  | -    $_to_be_preconnected = array_filter(array_map('trim',explode(",",$autoptimize_extra_options['autoptimize_extra_text_field_2']))); | 
                                                                                                            
                                                            | 117 |  | -    $_to_be_preconnected = apply_filters( 'autoptimize_extra_filter_tobepreconn', $_to_be_preconnected ); | 
                                                                                                            
                                                            |  | 116 | +    $_to_be_preconnected = array_filter(array_map('trim', explode(",", $autoptimize_extra_options['autoptimize_extra_text_field_2']))); | 
                                                                                                            
                                                            |  | 117 | +    $_to_be_preconnected = apply_filters('autoptimize_extra_filter_tobepreconn', $_to_be_preconnected); | 
                                                                                                            
                                                            | 118 | 118 |   | 
                                                                                                            
                                                            | 119 | 119 |      // walk array, extract domain and add to new array with crossorigin attribute | 
                                                                                                            
                                                            | 120 | 120 |      foreach ($_to_be_preconnected as $_preconn_single) { | 
                                                                                                            
                                                            | 121 | 121 |          $_preconn_parsed = parse_url($_preconn_single); | 
                                                                                                            
                                                            | 122 | 122 |           | 
                                                                                                            
                                                            | 123 |  | -        if ( is_array($_preconn_parsed) && empty($_preconn_parsed['scheme']) ) { | 
                                                                                                            
                                                            |  | 123 | +        if (is_array($_preconn_parsed) && empty($_preconn_parsed['scheme'])) { | 
                                                                                                            
                                                            | 124 | 124 |              $_preconn_domain = "//".$_preconn_parsed['host']; | 
                                                                                                            
                                                            | 125 |  | -        } else if ( is_array($_preconn_parsed) ) { | 
                                                                                                            
                                                            |  | 125 | +        } else if (is_array($_preconn_parsed)) { | 
                                                                                                            
                                                            | 126 | 126 |              $_preconn_domain = $_preconn_parsed['scheme']."://".$_preconn_parsed['host']; | 
                                                                                                            
                                                            | 127 | 127 |          } | 
                                                                                                            
                                                            | 128 | 128 |           | 
                                                                                                            
                                                            | 129 |  | -        if ( !empty($_preconn_domain) ) { | 
                                                                                                            
                                                            |  | 129 | +        if (!empty($_preconn_domain)) { | 
                                                                                                            
                                                            | 130 | 130 |              $_preconn_hint = array('href' => $_preconn_domain); | 
                                                                                                            
                                                            | 131 | 131 |              // fonts don't get preconnected unless crossorigin flag is set, non-fonts don't get preconnected if origin flag is set | 
                                                                                                            
                                                            | 132 | 132 |              // so hardcode fonts.gstatic.com to come with crossorigin and have filter to add other domains if needed | 
                                                                                                            
                                                            | 133 |  | -            $_preconn_crossorigin = apply_filters( 'autoptimize_extra_filter_preconn_crossorigin', array('https://fonts.gstatic.com') ); | 
                                                                                                            
                                                            | 134 |  | -            if ( in_array( $_preconn_domain, $_preconn_crossorigin ) ) { | 
                                                                                                            
                                                            |  | 133 | +            $_preconn_crossorigin = apply_filters('autoptimize_extra_filter_preconn_crossorigin', array('https://fonts.gstatic.com')); | 
                                                                                                            
                                                            |  | 134 | +            if (in_array($_preconn_domain, $_preconn_crossorigin)) { | 
                                                                                                            
                                                            | 135 | 135 |                  $_preconn_hint['crossorigin'] = 'anonymous'; | 
                                                                                                            
                                                            | 136 | 136 |              } | 
                                                                                                            
                                                            | 137 | 137 |              $_new_hints[] = $_preconn_hint; | 
                                                                                                                                                        
                                                        |  | @@ -139,7 +139,7 @@  discard block | 
                                                    
                                                        |  |  |  block discarded – undo | 
                                                                                                                                                                                                                    
                                                            | 139 | 139 |      } | 
                                                                                                            
                                                            | 140 | 140 |   | 
                                                                                                            
                                                            | 141 | 141 |      // merge in wordpress' preconnect hints | 
                                                                                                            
                                                            | 142 |  | -    if ( 'preconnect' === $relation_type && !empty($_new_hints) ) { | 
                                                                                                            
                                                            |  | 142 | +    if ('preconnect' === $relation_type && !empty($_new_hints)) { | 
                                                                                                            
                                                            | 143 | 143 |          $hints = array_merge($hints, $_new_hints);       | 
                                                                                                            
                                                            | 144 | 144 |      } | 
                                                                                                            
                                                            | 145 | 145 |       | 
                                                                                                                                                        
                                                        |  | @@ -156,48 +156,48 @@  discard block | 
                                                    
                                                        |  |  |  block discarded – undo | 
                                                                                                                                                                                                                    
                                                            | 156 | 156 |      $autoptimize_extra_options = autoptimize_extra_get_options(); | 
                                                                                                            
                                                            | 157 | 157 |       | 
                                                                                                            
                                                            | 158 | 158 |      // extract fonts, partly based on wp rocket's extraction code | 
                                                                                                            
                                                            | 159 |  | -    $_without_comments = preg_replace( '/<!--(.*)-->/Uis', '', $in ); | 
                                                                                                            
                                                            | 160 |  | -    preg_match_all( '#<link(?:\s+(?:(?!href\s*=\s*)[^>])+)?(?:\s+href\s*=\s*([\'"])((?:https?:)?\/\/fonts\.googleapis\.com\/css(?:(?!\1).)+)\1)(?:\s+[^>]*)?>#iU', $_without_comments, $matches ); | 
                                                                                                            
                                                            |  | 159 | +    $_without_comments = preg_replace('/<!--(.*)-->/Uis', '', $in); | 
                                                                                                            
                                                            |  | 160 | +    preg_match_all('#<link(?:\s+(?:(?!href\s*=\s*)[^>])+)?(?:\s+href\s*=\s*([\'"])((?:https?:)?\/\/fonts\.googleapis\.com\/css(?:(?!\1).)+)\1)(?:\s+[^>]*)?>#iU', $_without_comments, $matches); | 
                                                                                                            
                                                            | 161 | 161 |   | 
                                                                                                            
                                                            | 162 | 162 |      $i = 0; | 
                                                                                                            
                                                            | 163 | 163 |      $fontsCollection = array(); | 
                                                                                                            
                                                            | 164 |  | -    if ( ! $matches[2] ) { | 
                                                                                                            
                                                            |  | 164 | +    if (!$matches[2]) { | 
                                                                                                            
                                                            | 165 | 165 |          return $in; | 
                                                                                                            
                                                            | 166 | 166 |      } | 
                                                                                                            
                                                            | 167 | 167 |       | 
                                                                                                            
                                                            | 168 | 168 |      // store them in $fonts array | 
                                                                                                            
                                                            | 169 |  | -    foreach ( $matches[2] as $font ) { | 
                                                                                                            
                                                            | 170 |  | -        if ( ! preg_match( '/rel=["\']dns-prefetch["\']/', $matches[0][ $i ] ) ) { | 
                                                                                                            
                                                            |  | 169 | +    foreach ($matches[2] as $font) { | 
                                                                                                            
                                                            |  | 170 | +        if (!preg_match('/rel=["\']dns-prefetch["\']/', $matches[0][$i])) { | 
                                                                                                            
                                                            | 171 | 171 |              // Get fonts name. | 
                                                                                                            
                                                            | 172 |  | -            $font = str_replace( array( '%7C', '%7c' ) , '|', $font ); | 
                                                                                                            
                                                            | 173 |  | -            $font = explode( 'family=', $font ); | 
                                                                                                            
                                                            | 174 |  | -            $font = ( isset( $font[1] ) ) ? explode( '&', $font[1] ) : array(); | 
                                                                                                            
                                                            |  | 172 | +            $font = str_replace(array('%7C', '%7c'), '|', $font); | 
                                                                                                            
                                                            |  | 173 | +            $font = explode('family=', $font); | 
                                                                                                            
                                                            |  | 174 | +            $font = (isset($font[1])) ? explode('&', $font[1]) : array(); | 
                                                                                                            
                                                            | 175 | 175 |              // Add font to $fonts[$i] but make sure not to pollute with an empty family | 
                                                                                                            
                                                            | 176 |  | -            $_thisfont = array_values( array_filter( explode( '|', reset( $font ) ) ) ); | 
                                                                                                            
                                                            | 177 |  | -            if ( !empty($_thisfont) ) { | 
                                                                                                            
                                                            |  | 176 | +            $_thisfont = array_values(array_filter(explode('|', reset($font)))); | 
                                                                                                            
                                                            |  | 177 | +            if (!empty($_thisfont)) { | 
                                                                                                            
                                                            | 178 | 178 |                  $fontsCollection[$i]["fonts"] = $_thisfont; | 
                                                                                                            
                                                            | 179 | 179 |                  // And add subset if any | 
                                                                                                            
                                                            | 180 |  | -                $subset = ( is_array( $font ) ) ? end( $font ) : ''; | 
                                                                                                            
                                                            | 181 |  | -                if ( false !== strpos( $subset, 'subset=' ) ) { | 
                                                                                                            
                                                            | 182 |  | -                    $subset = explode( 'subset=', $subset ); | 
                                                                                                            
                                                            | 183 |  | -                    $fontsCollection[$i]["subsets"] = explode( ',', $subset[1] ); | 
                                                                                                            
                                                            |  | 180 | +                $subset = (is_array($font)) ? end($font) : ''; | 
                                                                                                            
                                                            |  | 181 | +                if (false !== strpos($subset, 'subset=')) { | 
                                                                                                            
                                                            |  | 182 | +                    $subset = explode('subset=', $subset); | 
                                                                                                            
                                                            |  | 183 | +                    $fontsCollection[$i]["subsets"] = explode(',', $subset[1]); | 
                                                                                                            
                                                            | 184 | 184 |                  } | 
                                                                                                            
                                                            | 185 | 185 |              } | 
                                                                                                            
                                                            | 186 | 186 |              // And remove Google Fonts. | 
                                                                                                            
                                                            | 187 |  | -            $in = str_replace( $matches[0][ $i ], '', $in ); | 
                                                                                                            
                                                            |  | 187 | +            $in = str_replace($matches[0][$i], '', $in); | 
                                                                                                            
                                                            | 188 | 188 |          } | 
                                                                                                            
                                                            | 189 | 189 |          $i++; | 
                                                                                                            
                                                            | 190 | 190 |      } | 
                                                                                                            
                                                            | 191 | 191 |   | 
                                                                                                            
                                                            | 192 |  | -    $_fontsOut=""; | 
                                                                                                            
                                                            | 193 |  | -    if ( $autoptimize_extra_options['autoptimize_extra_radio_field_4'] == "3" ) { | 
                                                                                                            
                                                            |  | 192 | +    $_fontsOut = ""; | 
                                                                                                            
                                                            |  | 193 | +    if ($autoptimize_extra_options['autoptimize_extra_radio_field_4'] == "3") { | 
                                                                                                            
                                                            | 194 | 194 |          // aggregate & link | 
                                                                                                            
                                                            | 195 |  | -        $_fontsString=""; | 
                                                                                                            
                                                            | 196 |  | -        $_subsetString=""; | 
                                                                                                            
                                                            |  | 195 | +        $_fontsString = ""; | 
                                                                                                            
                                                            |  | 196 | +        $_subsetString = ""; | 
                                                                                                            
                                                            | 197 | 197 |          foreach ($fontsCollection as $font) { | 
                                                                                                            
                                                            | 198 |  | -            $_fontsString .= '|'.trim( implode( '|' , $font["fonts"] ), '|' ); | 
                                                                                                            
                                                            | 199 |  | -            if ( !empty( $font["subsets"] ) ) { | 
                                                                                                            
                                                            | 200 |  | -                $_subsetString .= implode( ',', $font["subsets"] );  | 
                                                                                                            
                                                            |  | 198 | +            $_fontsString .= '|'.trim(implode('|', $font["fonts"]), '|'); | 
                                                                                                            
                                                            |  | 199 | +            if (!empty($font["subsets"])) { | 
                                                                                                            
                                                            |  | 200 | +                $_subsetString .= implode(',', $font["subsets"]);  | 
                                                                                                            
                                                            | 201 | 201 |              } | 
                                                                                                            
                                                            | 202 | 202 |          } | 
                                                                                                            
                                                            | 203 | 203 |                       | 
                                                                                                                                                        
                                                        |  | @@ -205,17 +205,17 @@  discard block | 
                                                    
                                                        |  |  |  block discarded – undo | 
                                                                                                                                                                                                                    
                                                            | 205 | 205 |              $_fontsString = $_fontsString."#038;subset=".$_subsetString; | 
                                                                                                            
                                                            | 206 | 206 |          } | 
                                                                                                            
                                                            | 207 | 207 |   | 
                                                                                                            
                                                            | 208 |  | -        $_fontsString = str_replace( '|', '%7C', ltrim($_fontsString,'|') ); | 
                                                                                                            
                                                            |  | 208 | +        $_fontsString = str_replace('|', '%7C', ltrim($_fontsString, '|')); | 
                                                                                                            
                                                            | 209 | 209 |           | 
                                                                                                            
                                                            | 210 |  | -        if ( ! empty( $_fontsString ) ) { | 
                                                                                                            
                                                            | 211 |  | -            $_fontsOut = '<link rel="stylesheet" id="ao_optimized_gfonts" href="https://fonts.googleapis.com/css?family=' . $_fontsString . '" />'; | 
                                                                                                            
                                                            |  | 210 | +        if (!empty($_fontsString)) { | 
                                                                                                            
                                                            |  | 211 | +            $_fontsOut = '<link rel="stylesheet" id="ao_optimized_gfonts" href="https://fonts.googleapis.com/css?family='.$_fontsString.'" />'; | 
                                                                                                            
                                                            | 212 | 212 |          } | 
                                                                                                            
                                                            | 213 |  | -    } else if ( $autoptimize_extra_options['autoptimize_extra_radio_field_4'] == "4" ) { | 
                                                                                                            
                                                            |  | 213 | +    } else if ($autoptimize_extra_options['autoptimize_extra_radio_field_4'] == "4") { | 
                                                                                                            
                                                            | 214 | 214 |          // aggregate & load async (webfont.js impl.) | 
                                                                                                            
                                                            | 215 | 215 |          $_fontsArray = array(); | 
                                                                                                            
                                                            | 216 | 216 |          foreach ($fontsCollection as $_fonts) { | 
                                                                                                            
                                                            | 217 |  | -            if ( !empty( $_fonts["subsets"] ) ) { | 
                                                                                                            
                                                            | 218 |  | -                $_subset = implode(",",$_fonts["subsets"]); | 
                                                                                                            
                                                            |  | 217 | +            if (!empty($_fonts["subsets"])) { | 
                                                                                                            
                                                            |  | 218 | +                $_subset = implode(",", $_fonts["subsets"]); | 
                                                                                                            
                                                            | 219 | 219 |                  foreach ($_fonts["fonts"] as $key => $_one_font) { | 
                                                                                                            
                                                            | 220 | 220 |                      $_one_font = $_one_font.":".$_subset; | 
                                                                                                            
                                                            | 221 | 221 |                      $_fonts["fonts"][$key] = $_one_font; | 
                                                                                                                                                        
                                                        |  | @@ -228,7 +228,7 @@  discard block | 
                                                    
                                                        |  |  |  block discarded – undo | 
                                                                                                                                                                                                                    
                                                            | 228 | 228 |          foreach ($_fontsArray as $_font) { | 
                                                                                                            
                                                            | 229 | 229 |              $_fontsOut .= $_font."','"; | 
                                                                                                            
                                                            | 230 | 230 |          } | 
                                                                                                            
                                                            | 231 |  | -        $_fontsOut = trim(trim($_fontsOut,"'"),","); | 
                                                                                                            
                                                            |  | 231 | +        $_fontsOut = trim(trim($_fontsOut, "'"), ","); | 
                                                                                                            
                                                            | 232 | 232 |          $_fontsOut .= '] },classes:false, events:false, timeout:1500};(function() {var wf = document.createElement(\'script\');wf.src=\'https://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js\';wf.type=\'text/javascript\';wf.async=\'true\';var s=document.getElementsByTagName(\'script\')[0];s.parentNode.insertBefore(wf, s);})();</script>'; | 
                                                                                                            
                                                            | 233 | 233 |      } | 
                                                                                                            
                                                            | 234 | 234 |    | 
                                                                                                                                                        
                                                        |  | @@ -242,7 +242,7 @@  discard block | 
                                                    
                                                        |  |  |  block discarded – undo | 
                                                                                                                                                                                                                    
                                                            | 242 | 242 |   | 
                                                                                                            
                                                            | 243 | 243 |      // preconnect to fonts.gstatic.com speed up download of static font-files | 
                                                                                                            
                                                            | 244 | 244 |      $in[] = "https://fonts.gstatic.com"; | 
                                                                                                            
                                                            | 245 |  | -    if ( $autoptimize_extra_options['autoptimize_extra_radio_field_4'] == "4" ) { | 
                                                                                                            
                                                            |  | 245 | +    if ($autoptimize_extra_options['autoptimize_extra_radio_field_4'] == "4") { | 
                                                                                                            
                                                            | 246 | 246 |          // and more preconnects for webfont.js | 
                                                                                                            
                                                            | 247 | 247 |          $in[] = "https://ajax.googleapis.com/"; | 
                                                                                                            
                                                            | 248 | 248 |          $in[] = "https://fonts.googleapis.com"; | 
                                                                                                                                                        
                                                        |  | @@ -252,12 +252,12 @@  discard block | 
                                                    
                                                        |  |  |  block discarded – undo | 
                                                                                                                                                                                                                    
                                                            | 252 | 252 |   | 
                                                                                                            
                                                            | 253 | 253 |  /* admin page functions */ | 
                                                                                                            
                                                            | 254 | 254 |  function autoptimize_extra_admin() {  | 
                                                                                                            
                                                            | 255 |  | -    add_submenu_page( null, 'autoptimize_extra', 'autoptimize_extra', 'manage_options', 'autoptimize_extra', 'autoptimize_extra_options_page' ); | 
                                                                                                            
                                                            | 256 |  | -    register_setting( 'autoptimize_extra_settings', 'autoptimize_extra_settings' ); | 
                                                                                                            
                                                            |  | 255 | +    add_submenu_page(null, 'autoptimize_extra', 'autoptimize_extra', 'manage_options', 'autoptimize_extra', 'autoptimize_extra_options_page'); | 
                                                                                                            
                                                            |  | 256 | +    register_setting('autoptimize_extra_settings', 'autoptimize_extra_settings'); | 
                                                                                                            
                                                            | 257 | 257 |  } | 
                                                                                                            
                                                            | 258 | 258 |   | 
                                                                                                            
                                                            | 259 | 259 |  function add_autoptimize_extra_tab($in) { | 
                                                                                                            
                                                            | 260 |  | -    $in=array_merge($in,array('autoptimize_extra' => __('Extra','autoptimize'))); | 
                                                                                                            
                                                            |  | 260 | +    $in = array_merge($in, array('autoptimize_extra' => __('Extra', 'autoptimize'))); | 
                                                                                                            
                                                            | 261 | 261 |      return $in; | 
                                                                                                            
                                                            | 262 | 262 |  } | 
                                                                                                            
                                                            | 263 | 263 |   | 
                                                                                                                                                        
                                                        |  | @@ -271,46 +271,46 @@  discard block | 
                                                    
                                                        |  |  |  block discarded – undo | 
                                                                                                                                                                                                                    
                                                            | 271 | 271 |          #autoptimize_extra_descr{font-size: 120%;} | 
                                                                                                            
                                                            | 272 | 272 |      </style> | 
                                                                                                            
                                                            | 273 | 273 |      <div class="wrap"> | 
                                                                                                            
                                                            | 274 |  | -    <h1><?php _e('Autoptimize Settings','autoptimize'); ?></h1> | 
                                                                                                            
                                                            |  | 274 | +    <h1><?php _e('Autoptimize Settings', 'autoptimize'); ?></h1> | 
                                                                                                            
                                                            | 275 | 275 |      <?php echo autoptimizeConfig::ao_admin_tabs(); ?> | 
                                                                                                            
                                                            | 276 | 276 |      <form id='ao_settings_form' action='options.php' method='post'> | 
                                                                                                            
                                                            | 277 | 277 |          <?php settings_fields('autoptimize_extra_settings'); ?> | 
                                                                                                            
                                                            | 278 |  | -        <h2><?php _e('Extra Auto-Optimizations','autoptimize'); ?></h2> | 
                                                                                                            
                                                            | 279 |  | -        <span id='autoptimize_extra_descr'><?php _e('The following settings can improve your site\'s performance even more.','autoptimize'); ?></span> | 
                                                                                                            
                                                            |  | 278 | +        <h2><?php _e('Extra Auto-Optimizations', 'autoptimize'); ?></h2> | 
                                                                                                            
                                                            |  | 279 | +        <span id='autoptimize_extra_descr'><?php _e('The following settings can improve your site\'s performance even more.', 'autoptimize'); ?></span> | 
                                                                                                            
                                                            | 280 | 280 |          <table class="form-table"> | 
                                                                                                            
                                                            | 281 | 281 |              <tr> | 
                                                                                                            
                                                            | 282 |  | -                <th scope="row"><?php _e('Remove emojis','autoptimize'); ?></th> | 
                                                                                                            
                                                            |  | 282 | +                <th scope="row"><?php _e('Remove emojis', 'autoptimize'); ?></th> | 
                                                                                                            
                                                            | 283 | 283 |                  <td> | 
                                                                                                            
                                                            | 284 |  | -                    <label><input type='checkbox' name='autoptimize_extra_settings[autoptimize_extra_checkbox_field_1]' <?php checked( $autoptimize_extra_options['autoptimize_extra_checkbox_field_1'], 1 ); ?> value='1'><?php _e('Removes WordPress\' core emojis\' inline CSS, inline JavaScript, and an otherwise un-autoptimized JavaScript file.','autoptimize'); ?></label> | 
                                                                                                            
                                                            |  | 284 | +                    <label><input type='checkbox' name='autoptimize_extra_settings[autoptimize_extra_checkbox_field_1]' <?php checked($autoptimize_extra_options['autoptimize_extra_checkbox_field_1'], 1); ?> value='1'><?php _e('Removes WordPress\' core emojis\' inline CSS, inline JavaScript, and an otherwise un-autoptimized JavaScript file.', 'autoptimize'); ?></label> | 
                                                                                                            
                                                            | 285 | 285 |                  </td> | 
                                                                                                            
                                                            | 286 | 286 |              </tr> | 
                                                                                                            
                                                            | 287 | 287 |              <tr> | 
                                                                                                            
                                                            | 288 |  | -                <th scope="row"><?php _e('Remove query strings from static resources','autoptimize'); ?></th> | 
                                                                                                            
                                                            |  | 288 | +                <th scope="row"><?php _e('Remove query strings from static resources', 'autoptimize'); ?></th> | 
                                                                                                            
                                                            | 289 | 289 |                  <td> | 
                                                                                                            
                                                            | 290 |  | -                    <label><input type='checkbox' name='autoptimize_extra_settings[autoptimize_extra_checkbox_field_0]' <?php checked( $autoptimize_extra_options['autoptimize_extra_checkbox_field_0'], 1 ); ?> value='1'><?php _e('Removing query strings (or more specificaly the <code>ver</code> parameter) will not improve load time, but might improve performance scores.','autoptimize'); ?></label> | 
                                                                                                            
                                                            |  | 290 | +                    <label><input type='checkbox' name='autoptimize_extra_settings[autoptimize_extra_checkbox_field_0]' <?php checked($autoptimize_extra_options['autoptimize_extra_checkbox_field_0'], 1); ?> value='1'><?php _e('Removing query strings (or more specificaly the <code>ver</code> parameter) will not improve load time, but might improve performance scores.', 'autoptimize'); ?></label> | 
                                                                                                            
                                                            | 291 | 291 |                  </td> | 
                                                                                                            
                                                            | 292 | 292 |              </tr> | 
                                                                                                            
                                                            | 293 | 293 |              <tr> | 
                                                                                                            
                                                            | 294 |  | -                <th scope="row"><?php _e('Google Fonts','autoptimize'); ?></th> | 
                                                                                                            
                                                            |  | 294 | +                <th scope="row"><?php _e('Google Fonts', 'autoptimize'); ?></th> | 
                                                                                                            
                                                            | 295 | 295 |                  <td> | 
                                                                                                            
                                                            | 296 |  | -                    <input type="radio" name="autoptimize_extra_settings[autoptimize_extra_radio_field_4]" value="1" <?php if (!in_array($_googlef,array(2,3,4))) {echo "checked"; } ?> ><?php _e('Leave as is','autoptimize'); ?><br/> | 
                                                                                                            
                                                            | 297 |  | -                    <input type="radio" name="autoptimize_extra_settings[autoptimize_extra_radio_field_4]" value="2" <?php checked(2, $_googlef, true); ?> ><?php _e('Remove Google Fonts','autoptimize'); ?><br/> | 
                                                                                                            
                                                            | 298 |  | -                    <input type="radio" name="autoptimize_extra_settings[autoptimize_extra_radio_field_4]" value="3" <?php checked(3, $_googlef, true); ?> ><?php _e('Combine and link in head','autoptimize'); ?><br/> | 
                                                                                                            
                                                            | 299 |  | -                    <input type="radio" name="autoptimize_extra_settings[autoptimize_extra_radio_field_4]" value="4" <?php checked(4, $_googlef, true); ?> ><?php _e('Combine and load fonts asynchronously with <a href="https://github.com/typekit/webfontloader#readme" target="_blank">webfont.js</a>','autoptimize'); ?><br/> | 
                                                                                                            
                                                            |  | 296 | +                    <input type="radio" name="autoptimize_extra_settings[autoptimize_extra_radio_field_4]" value="1" <?php if (!in_array($_googlef, array(2, 3, 4))) {echo "checked"; } ?> ><?php _e('Leave as is', 'autoptimize'); ?><br/> | 
                                                                                                            
                                                            |  | 297 | +                    <input type="radio" name="autoptimize_extra_settings[autoptimize_extra_radio_field_4]" value="2" <?php checked(2, $_googlef, true); ?> ><?php _e('Remove Google Fonts', 'autoptimize'); ?><br/> | 
                                                                                                            
                                                            |  | 298 | +                    <input type="radio" name="autoptimize_extra_settings[autoptimize_extra_radio_field_4]" value="3" <?php checked(3, $_googlef, true); ?> ><?php _e('Combine and link in head', 'autoptimize'); ?><br/> | 
                                                                                                            
                                                            |  | 299 | +                    <input type="radio" name="autoptimize_extra_settings[autoptimize_extra_radio_field_4]" value="4" <?php checked(4, $_googlef, true); ?> ><?php _e('Combine and load fonts asynchronously with <a href="https://github.com/typekit/webfontloader#readme" target="_blank">webfont.js</a>', 'autoptimize'); ?><br/> | 
                                                                                                            
                                                            | 300 | 300 |                  </td> | 
                                                                                                            
                                                            | 301 | 301 |              </tr> | 
                                                                                                            
                                                            | 302 | 302 |              <tr> | 
                                                                                                            
                                                            | 303 |  | -                <th scope="row"><?php _e('Preconnect to 3rd party domains <em>(advanced users)</em>','autoptimize'); ?></th> | 
                                                                                                            
                                                            |  | 303 | +                <th scope="row"><?php _e('Preconnect to 3rd party domains <em>(advanced users)</em>', 'autoptimize'); ?></th> | 
                                                                                                            
                                                            | 304 | 304 |                  <td> | 
                                                                                                            
                                                            | 305 |  | -                    <label><input type='text' style='width:80%' name='autoptimize_extra_settings[autoptimize_extra_text_field_2]' value='<?php echo $autoptimize_extra_options['autoptimize_extra_text_field_2']; ?>'><br /><?php _e('Add 3rd party domains you want the browser to <a href="https://www.keycdn.com/support/preconnect/#primary" target="_blank">preconnect</a> to, separated by comma\'s. Make sure to include the correct protocol (HTTP or HTTPS).','autoptimize'); ?></label> | 
                                                                                                            
                                                            |  | 305 | +                    <label><input type='text' style='width:80%' name='autoptimize_extra_settings[autoptimize_extra_text_field_2]' value='<?php echo $autoptimize_extra_options['autoptimize_extra_text_field_2']; ?>'><br /><?php _e('Add 3rd party domains you want the browser to <a href="https://www.keycdn.com/support/preconnect/#primary" target="_blank">preconnect</a> to, separated by comma\'s. Make sure to include the correct protocol (HTTP or HTTPS).', 'autoptimize'); ?></label> | 
                                                                                                            
                                                            | 306 | 306 |                  </td> | 
                                                                                                            
                                                            | 307 | 307 |              </tr> | 
                                                                                                            
                                                            | 308 | 308 |              <tr> | 
                                                                                                            
                                                            | 309 |  | -                <th scope="row"><?php _e('Async Javascript-files <em>(advanced users)</em>','autoptimize'); ?></th> | 
                                                                                                            
                                                            |  | 309 | +                <th scope="row"><?php _e('Async Javascript-files <em>(advanced users)</em>', 'autoptimize'); ?></th> | 
                                                                                                            
                                                            | 310 | 310 |                  <td> | 
                                                                                                            
                                                            | 311 | 311 |                      <input type='text' style='width:80%' name='autoptimize_extra_settings[autoptimize_extra_text_field_3]' value='<?php echo $autoptimize_extra_options['autoptimize_extra_text_field_3']; ?>'> | 
                                                                                                            
                                                            | 312 | 312 |                      <br /> | 
                                                                                                            
                                                            | 313 |  | -                    <?php _e('Comma-separated list of local or 3rd party JS-files that should loaded with the <code>async</code> flag. JS-files from your own site will be automatically excluded if added here.','autoptimize'); ?> | 
                                                                                                            
                                                            |  | 313 | +                    <?php _e('Comma-separated list of local or 3rd party JS-files that should loaded with the <code>async</code> flag. JS-files from your own site will be automatically excluded if added here.', 'autoptimize'); ?> | 
                                                                                                            
                                                            | 314 | 314 |                  </td> | 
                                                                                                            
                                                            | 315 | 315 |              </tr> | 
                                                                                                            
                                                            | 316 | 316 |          </table> |