From a7f751e9f19e6415e3f161cfb68b52055ea625d9 Mon Sep 17 00:00:00 2001 From: Shady Sharaf Date: Sun, 25 Aug 2013 11:26:50 +0200 Subject: [PATCH 1/8] + Adds a new Tabbed Settings page + Adds option to disable minification alltogether + Adds option to disable minification based on specific conditions ( islogged, is_admin, query var present ) + Adds option to exclude resources, line-delimited, based on string search not matching, means it matches any part of the url * Note: Disabling minification does not disable serving minified files, so cached pages does not break. --- admin.css | 13 ++++ admin.js | 20 +++++ dependency-minification.php | 141 ++++++++++++++++++++++++++++++++---- 3 files changed, 160 insertions(+), 14 deletions(-) diff --git a/admin.css b/admin.css index 5199a48..3c63c93 100644 --- a/admin.css +++ b/admin.css @@ -14,3 +14,16 @@ .fixed .column-expires { width: 12%; } + +.nav-tab-content { + display: none; +} +.form-table th small { + display: block; + clear: both; + color: #999; +} +.form-table td label { + display: block; + clear:both; +} \ No newline at end of file diff --git a/admin.js b/admin.js index e69de29..2b6d574 100644 --- a/admin.js +++ b/admin.js @@ -0,0 +1,20 @@ +jQuery(function($){ + + // Admin page tabs + var $tabs = $('.nav-tab-wrapper'), + $panels = $('.nav-tab-content'), + currentHash = window.location.hash; + + $tabs.on('click', 'a', function(e){ + var hash = $(this).attr('href').replace('#tab-', '#tab-content-'); // prevents page scrolling if hash is present + $panels.hide().filter(hash).show(); + $tabs.find('a').removeClass('nav-tab-active').filter($(this)).addClass('nav-tab-active'); + }); + $tabs.find( currentHash ? 'a[href="'+currentHash+'"]' : ':first').trigger('click'); + + // Fix input-inside-label glitch + $panels.on('click', 'input[type=text]', function(e){ + e.preventDefault(); + }) + +}); \ No newline at end of file diff --git a/dependency-minification.php b/dependency-minification.php index 1cc347b..e0c7d36 100644 --- a/dependency-minification.php +++ b/dependency-minification.php @@ -14,13 +14,14 @@ class Dependency_Minification { protected static $minified_count = 0; static $admin_page_hook; - const DEFAULT_ENDPOINT = '_minify'; - const CRON_MINIFY_ACTION = 'minify_dependencies'; - const CACHE_KEY_PREFIX = 'depmin_cache_'; - const FILENAME_PATTERN = '([^/]+?)\.([0-9a-f]+)(?:\.([0-9a-f]+))?\.(css|js)'; - const AJAX_ACTION = 'dependency_minification'; - const ADMIN_PAGE_SLUG = 'dependency-minification'; - const ADMIN_PARENT_PAGE = 'tools.php'; + const DEFAULT_ENDPOINT = '_minify'; + const CRON_MINIFY_ACTION = 'minify_dependencies'; + const CACHE_KEY_PREFIX = 'depmin_cache_'; + const FILENAME_PATTERN = '([^/]+?)\.([0-9a-f]+)(?:\.([0-9a-f]+))?\.(css|js)'; + const AJAX_ACTION = 'dependency_minification'; + const AJAX_OPTIONS_ACTION = 'dependency_minification_options'; + const ADMIN_PAGE_SLUG = 'dependency-minification'; + const ADMIN_PARENT_PAGE = 'tools.php'; static $query_vars = array( 'depmin_handles', @@ -30,8 +31,7 @@ class Dependency_Minification { ); static function setup() { - self::$options = apply_filters( 'dependency_minification_options', array_merge( - array( + $defaults = array( 'endpoint' => self::DEFAULT_ENDPOINT, 'default_exclude_remote_dependencies' => true, 'cache_control_max_age_cache' => 2629743, // 1 month in seconds @@ -40,8 +40,13 @@ static function setup() { 'admin_page_capability' => 'edit_theme_options', 'show_error_messages' => ( defined( 'WP_DEBUG' ) && WP_DEBUG ), 'disable_if_wp_debug' => true, - ), - self::$options + 'exclude_dependencies' => '', + 'disabled_on_conditions' => array(), + ); + $options = get_option( 'dependency_minification_options', array() ); + self::$options = apply_filters( 'dependency_minification_options', array_merge( + $defaults, + $options ) ); $is_frontend = ! ( @@ -49,7 +54,21 @@ static function setup() { || in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) ); - if ( $is_frontend ) { + $disabled = ( + ! empty( self::$options['disabled_on_conditions']['all'] ) + || ( !empty( self::$options['disabled_on_conditions']['loggedin'] ) && is_user_logged_in() ) + || ( !empty( self::$options['disabled_on_conditions']['admin'] ) && is_user_logged_in() && current_user_can( 'manage_plugins' ) ) + || ( !empty( self::$options['disabled_on_conditions']['queryvar']['enabled'] ) + && !empty( self::$options['disabled_on_conditions']['queryvar']['enabled'] ) + && !empty( $_GET[ self::$options['disabled_on_conditions']['queryvar']['value'] ] ) + ) + ); + + if ( + $is_frontend + && + ! $disabled + ) { add_filter( 'print_scripts_array', array( __CLASS__, 'filter_print_scripts_array' ) ); add_filter( 'print_styles_array', array( __CLASS__, 'filter_print_styles_array' ) ); } @@ -59,6 +78,7 @@ static function setup() { add_action( 'admin_notices', array( __CLASS__, 'admin_notices' ) ); add_action( 'admin_enqueue_scripts', array( __CLASS__, 'admin_enqueue_scripts' ) ); add_action( 'wp_ajax_' . self::AJAX_ACTION, array( __CLASS__, 'admin_ajax_handler' ) ); + add_action( 'wp_ajax_' . self::AJAX_OPTIONS_ACTION, array( __CLASS__, 'admin_ajax_options_handler' ) ); add_filter( 'plugin_action_links', array( __CLASS__, 'admin_plugin_action_links' ), 10, 2 ); } @@ -237,6 +257,32 @@ static function admin_ajax_handler() { exit; } + /** + * @action wp_ajax_dependency_minification_options + */ + static function admin_ajax_options_handler() { + if ( ! current_user_can( self::$options['admin_page_capability'] ) ) { + wp_die( __( 'You are not allowed to do that.', 'depmin' ) ); + } + if ( ! wp_verify_nonce( $_REQUEST['_wpnonce'], self::AJAX_OPTIONS_ACTION ) ) { + wp_die( __( 'Nonce check failed. Try reloading the previous page.', 'depmin' ) ); + } + $updated_count = 0; + if ( ! empty( $_REQUEST['options'] ) ) { + $options = get_option( 'dependency_minification_options' ); + $options['exclude_dependencies'] = array_filter( preg_split( "#[\n\r]+#", $_REQUEST['options']['exclude_dependencies'] ) ); + $options['disabled_on_conditions'] = $_REQUEST['options']['disabled_on_conditions']; + update_option( 'dependency_minification_options', $options ); + } + + $redirect_url = add_query_arg( 'page', self::ADMIN_PAGE_SLUG, admin_url( self::ADMIN_PARENT_PAGE ) ); + $redirect_url = add_query_arg( 'updated', 1, $redirect_url ); + $redirect_url.= '#tab-settings'; + wp_redirect( $redirect_url ); + + die(); + } + /** * @filter plugin_action_links */ @@ -258,8 +304,11 @@ static function admin_page() {

- - + + + +
registered[$handle]->src; $is_local = self::is_self_hosted_src( $src ); $is_excluded = !$is_local && self::$options['default_exclude_remote_dependencies']; + $is_excluded = $is_excluded || self::is_url_included( $src, self::$options['exclude_dependencies'] ); $is_excluded = apply_filters( 'dependency_minification_excluded', $is_excluded, $handle, $src ); if ( $last_was_excluded !== $is_excluded ) { From a0c2b874bb10482523aa204e9d96c8f9cadd4084 Mon Sep 17 00:00:00 2001 From: Shady Sharaf Date: Sun, 25 Aug 2013 12:04:20 +0200 Subject: [PATCH 2/8] + Exposes the option of defaulting to exclude the external dependencies. #5 * Fix a small translation missing text domain --- dependency-minification.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/dependency-minification.php b/dependency-minification.php index e0c7d36..383d747 100644 --- a/dependency-minification.php +++ b/dependency-minification.php @@ -272,6 +272,7 @@ static function admin_ajax_options_handler() { $options = get_option( 'dependency_minification_options' ); $options['exclude_dependencies'] = array_filter( preg_split( "#[\n\r]+#", $_REQUEST['options']['exclude_dependencies'] ) ); $options['disabled_on_conditions'] = $_REQUEST['options']['disabled_on_conditions']; + $options['default_exclude_remote_dependencies'] = isset( $_REQUEST['options']['default_exclude_remote_dependencies'] ); update_option( 'dependency_minification_options', $options ); } @@ -515,6 +516,15 @@ static function admin_page() { + + + + + + + @@ -535,7 +545,7 @@ static function admin_page() { - + From f29016831c83c45f43092b33f284559527738f67 Mon Sep 17 00:00:00 2001 From: Shady Sharaf Date: Sun, 25 Aug 2013 12:56:23 +0200 Subject: [PATCH 3/8] * Fix manage_plugins to manage_options * Remove trailing spaces --- dependency-minification.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dependency-minification.php b/dependency-minification.php index 383d747..64bcba9 100644 --- a/dependency-minification.php +++ b/dependency-minification.php @@ -55,17 +55,17 @@ static function setup() { in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) ); $disabled = ( - ! empty( self::$options['disabled_on_conditions']['all'] ) - || ( !empty( self::$options['disabled_on_conditions']['loggedin'] ) && is_user_logged_in() ) - || ( !empty( self::$options['disabled_on_conditions']['admin'] ) && is_user_logged_in() && current_user_can( 'manage_plugins' ) ) - || ( !empty( self::$options['disabled_on_conditions']['queryvar']['enabled'] ) + ! empty( self::$options['disabled_on_conditions']['all'] ) + || ( !empty( self::$options['disabled_on_conditions']['loggedin'] ) && is_user_logged_in() ) + || ( !empty( self::$options['disabled_on_conditions']['admin'] ) && is_user_logged_in() && current_user_can( 'manage_options' ) ) + || ( !empty( self::$options['disabled_on_conditions']['queryvar']['enabled'] ) && !empty( self::$options['disabled_on_conditions']['queryvar']['enabled'] ) && !empty( $_GET[ self::$options['disabled_on_conditions']['queryvar']['value'] ] ) ) ); - if ( - $is_frontend + if ( + $is_frontend && ! $disabled ) { @@ -174,7 +174,7 @@ static function admin_notices() { ?>

%1$s: %2$s', __( 'Dependency Minification', 'depmin' ), sprintf( From 15a71391586aa47a218621466230f001ea2786c9 Mon Sep 17 00:00:00 2001 From: Shady Sharaf Date: Mon, 14 Oct 2013 12:18:21 +0200 Subject: [PATCH 4/8] Notices / CS fixes, Related #27 --- dependency-minification.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/dependency-minification.php b/dependency-minification.php index 64bcba9..5a2b9ff 100644 --- a/dependency-minification.php +++ b/dependency-minification.php @@ -55,12 +55,12 @@ static function setup() { in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) ); $disabled = ( - ! empty( self::$options['disabled_on_conditions']['all'] ) - || ( !empty( self::$options['disabled_on_conditions']['loggedin'] ) && is_user_logged_in() ) - || ( !empty( self::$options['disabled_on_conditions']['admin'] ) && is_user_logged_in() && current_user_can( 'manage_options' ) ) - || ( !empty( self::$options['disabled_on_conditions']['queryvar']['enabled'] ) - && !empty( self::$options['disabled_on_conditions']['queryvar']['enabled'] ) - && !empty( $_GET[ self::$options['disabled_on_conditions']['queryvar']['value'] ] ) + ( isset( self::$options['disabled_on_conditions']['all'] ) && ! empty( self::$options['disabled_on_conditions']['all'] ) ) + || ( isset( self::$options['disabled_on_conditions']['loggedin'] ) && ! empty( self::$options['disabled_on_conditions']['loggedin'] ) && is_user_logged_in() ) + || ( ! empty( self::$options['disabled_on_conditions']['admin'] ) && is_user_logged_in() && current_user_can( 'manage_options' ) ) + || ( ! empty( self::$options['disabled_on_conditions']['queryvar']['enabled'] ) + && ! empty( self::$options['disabled_on_conditions']['queryvar']['enabled'] ) + && ! empty( $_GET[ self::$options['disabled_on_conditions']['queryvar']['value'] ] ) ) ); @@ -534,7 +534,7 @@ static function admin_page() {

%1$s: %2$s', __( 'Dependency Minification', 'depmin' ), sprintf( @@ -217,6 +216,7 @@ static function admin_notices() { __( 'Permalinks Settings', 'depmin' ) ) ) + ) ); ?>

@@ -239,19 +239,23 @@ static function admin_notices() {

- +

@@ -296,21 +300,21 @@ static function admin_ajax_options_handler() { if ( ! current_user_can( self::$options['admin_page_capability'] ) ) { wp_die( __( 'You are not allowed to do that.', 'depmin' ) ); } - if ( ! wp_verify_nonce( $_REQUEST['_wpnonce'], self::AJAX_OPTIONS_ACTION ) ) { + if ( ! wp_verify_nonce( $_POST['_wpnonce'], self::AJAX_OPTIONS_ACTION ) ) { wp_die( __( 'Nonce check failed. Try reloading the previous page.', 'depmin' ) ); } $updated_count = 0; - if ( ! empty( $_REQUEST['options'] ) ) { + if ( ! empty( $_POST['options'] ) ) { $options = get_option( 'dependency_minification_options' ); - $options['exclude_dependencies'] = array_filter( preg_split( "#[\n\r]+#", $_REQUEST['options']['exclude_dependencies'] ) ); - $options['disabled_on_conditions'] = $_REQUEST['options']['disabled_on_conditions']; - $options['default_exclude_remote_dependencies'] = isset( $_REQUEST['options']['default_exclude_remote_dependencies'] ); + $options['exclude_dependencies'] = array_filter( preg_split( "#[\n\r]+#", $_POST['options']['exclude_dependencies'] ) ); + $options['disabled_on_conditions'] = $_POST['options']['disabled_on_conditions']; + $options['default_exclude_remote_dependencies'] = isset( $_POST['options']['default_exclude_remote_dependencies'] ); update_option( 'dependency_minification_options', $options ); } - $redirect_url = add_query_arg( 'page', self::ADMIN_PAGE_SLUG, admin_url( self::ADMIN_PARENT_PAGE ) ); - $redirect_url = add_query_arg( 'updated', 1, $redirect_url ); - $redirect_url.= '#tab-settings'; + $redirect_url = add_query_arg( 'page', self::ADMIN_PAGE_SLUG, admin_url( self::ADMIN_PARENT_PAGE ) ); + $redirect_url = add_query_arg( 'updated', 1, $redirect_url ); + $redirect_url .= '#tab-settings'; wp_redirect( $redirect_url ); die(); @@ -335,7 +339,7 @@ static function admin_page() { $nonce = wp_create_nonce( self::AJAX_ACTION ); ?>
-

+