add_section( 'advanded_css_editor', array(
'title' => 'Advanced CSS Editor',
'priority' => 5,
) );
$wp_customize->add_setting( 'advanced_css_minify', array(
'capability' => 'edit_theme_options',
'sanitize_callback' => 'advanced_css_sanitize_checkbox',
'transport' => 'postMessage',
));
$wp_customize->add_control( 'advanced_css_minify',array(
'type' => 'checkbox',
'label' => __('Minify CSS?','advanced_css_editor'),
'description' => __('Minify CSS to load your site faster.','advanced_css_editor'),
'section' => 'advanded_css_editor',
'priority' => 1
));
// Add Layout Picker setting.
$wp_customize->add_setting( 'advanced_css_layout_picker_setting', array(
'default' => 'global',
'capability' => 'edit_theme_options',
'sanitize_callback' => 'advanced_css_sanitize_choices',
'transport' => 'postMessage',
) );
// Add Layout Picker control.
$wp_customize->add_control( new Advanded_CSS_Layout_Picker_Custom_Control( $wp_customize, 'advanced_css_layout_picker_setting', array(
'label' => 'Select Screen Size:',
'section' => 'advanded_css_editor',
'settings' => 'advanced_css_layout_picker_setting',
'choices' => array(
'global' => '',
'desktop' => '',
'tablet' => '',
'phone' => '',
),
'priority' => 2
) ) );
$wp_customize->add_setting('advanced_css_global_css', array(
'capability' => 'edit_theme_options',
'transport' => 'postMessage',
));
$wp_customize->add_control( new CSS_Highlighter_Custom_Control( $wp_customize, 'advanced_css_global_css', array(
'label' => __('Global CSS:', 'advanced_css_editor'),
'section' => 'advanded_css_editor',
'priority' => 5,
'id' => 'global_css',
'settings' => 'advanced_css_global_css'
) ) );
$wp_customize->add_setting('advanced_css_desktop_css', array(
'capability' => 'edit_theme_options',
'transport' => 'postMessage',
));
$wp_customize->add_control( new CSS_Highlighter_Custom_Control( $wp_customize, 'advanced_css_desktop_css', array(
'label' => __('Desktop CSS:', 'advanced_css_editor'),
'section' => 'advanded_css_editor',
'priority' => 10,
'id' => 'desktop_css',
'settings' => 'advanced_css_desktop_css'
) ) );
$wp_customize->add_setting('advanced_css_tablet_css', array(
'capability' => 'edit_theme_options',
'transport' => 'postMessage',
));
$wp_customize->add_control( new CSS_Highlighter_Custom_Control( $wp_customize, 'advanced_css_tablet_css', array(
'label' => __('Tablet CSS:', 'advanced_css_editor'),
'section' => 'advanded_css_editor',
'priority' => 15,
'id' => 'tablet_css',
'settings' => 'advanced_css_tablet_css'
) ) );
$wp_customize->add_setting('advanced_css_phone_css', array(
'capability' => 'edit_theme_options',
'transport' => 'postMessage',
));
$wp_customize->add_control( new CSS_Highlighter_Custom_Control( $wp_customize, 'advanced_css_phone_css', array(
'label' => __('Phone CSS:', 'advanced_css_editor'),
'section' => 'advanded_css_editor',
'priority' => 20,
'id' => 'phone_css',
'settings' => 'advanced_css_phone_css'
) ) );
// Sanitize output.
function advanced_css_sanitize_choices( $input, $setting ) {
global $wp_customize;
$control = $wp_customize->get_control( $setting->id );
if ( array_key_exists( $input, $control->choices ) ) {
return $input;
} else {
return $setting->default;
}
}
}
add_action('customize_register', 'advanced_css_editor_customizer', 99);
// Reset theme mod so that Desktop is always default.
function advanced_css_remove_mod( $wp_customize ) {
remove_theme_mod( 'advanced_css_layout_picker_setting' );
}
add_action('customize_save_after', 'advanced_css_remove_mod', 100);
function advanced_css_editor_live() {
wp_enqueue_script( 'advanced_css_editor_live_js', plugin_dir_url( __FILE__ ) . 'js/customizer-css.js', array( 'jquery'), '', true );
}
add_action( 'customize_preview_init', 'advanced_css_editor_live' );
// Add styles to Customizer screen.
function advanced_css_editor_styles() {
wp_enqueue_style( 'advanced_css_editor_css', plugin_dir_url( __FILE__ ) . 'css/customizer.css' );
}
add_action( 'customize_controls_print_styles', 'advanced_css_editor_styles' );
function advanced_css_sanitize_checkbox( $input ) {
if ( $input ) {
$output = '1';
} else {
$output = false;
}
return $output;
}
function advanced_css_strip_whitespace( $css ) {
$advanced_css_minify = get_theme_mod( 'advanced_css_minify' );
if( isset( $advanced_css_minify ) && $advanced_css_minify != 1 ) {
return $css;
}
$replace = array(
"#/\*.*?\*/#s" => "", // Strip C style comments.
"#\s\s+#" => " ", // Strip excess whitespace.
);
$search = array_keys( $replace );
$css = preg_replace( $search, $replace, $css );
$replace = array(
": " => ":",
"; " => ";",
" {" => "{",
" }" => "}",
", " => ",",
"{ " => "{",
";}" => "}", // Strip optional semicolons.
",\n" => ",", // Don't wrap multiple selectors.
"\n}" => "}", // Don't wrap closing braces.
"} " => "}\n", // Put each rule on it's own line.
);
$search = array_keys( $replace );
$css = str_replace( $search, $replace, $css );
return trim( $css );
}
function advanced_css_save_minify() {
$advanced_css_minify = get_theme_mod( 'advanced_css_minify' );
$advanced_css_global_css = get_theme_mod( 'advanced_css_global_css' );
$advanced_css_desktop_css = get_theme_mod( 'advanced_css_desktop_css' );
$advanced_css_tablet_css = get_theme_mod( 'advanced_css_tablet_css' );
$advanced_css_phone_css = get_theme_mod( 'advanced_css_phone_css' );
if( isset( $advanced_css_minify ) && $advanced_css_minify != 1 ) {
return;
} else {
set_theme_mod( 'advanced_css_global_css_minify', advanced_css_strip_whitespace( $advanced_css_global_css ) );
set_theme_mod( 'advanced_css_desktop_css_minify', advanced_css_strip_whitespace( $advanced_css_desktop_css ) );
set_theme_mod( 'advanced_css_tablet_css_minify', advanced_css_strip_whitespace( $advanced_css_tablet_css ) );
set_theme_mod( 'advanced_css_phone_css_minify', advanced_css_strip_whitespace( $advanced_css_phone_css ) );
}
}
add_action( 'customize_save_after', 'advanced_css_save_minify' );
function advanced_css_input() {
$advanced_css_minify = get_theme_mod( 'advanced_css_minify' );
if( isset( $advanced_css_minify ) && $advanced_css_minify != 1 ) {
$advanced_css_global_css = get_theme_mod( 'advanced_css_global_css' );
$advanced_css_desktop_css = get_theme_mod( 'advanced_css_desktop_css' );
$advanced_css_tablet_css = get_theme_mod( 'advanced_css_tablet_css' );
$advanced_css_phone_css = get_theme_mod( 'advanced_css_phone_css' );
} else {
$advanced_css_global_css = get_theme_mod( 'advanced_css_global_css_minify' );
$advanced_css_desktop_css = get_theme_mod( 'advanced_css_desktop_css_minify' );
$advanced_css_tablet_css = get_theme_mod( 'advanced_css_tablet_css_minify' );
$advanced_css_phone_css = get_theme_mod( 'advanced_css_phone_css_minify' );
}
?>