$css = preg_replace('/(,|:|;|\{|}|\*\/|>) /', '$1', $css);
// Remove space before , ; { }
$css = preg_replace('/ (,|;|\{|})/', '$1', $css);
// Strips leading 0 on decimal values (converts 0.5px into .5px)
$css = preg_replace('/(:| )0\.([0-9]+)(%|em|ex|px|in|cm|mm|pt|pc)/i', '${1}.${2}${3}', $css);
// Strips units if value is 0 (converts 0px to 0)
$css = preg_replace('/(:| )(\.?)0(%|em|ex|px|in|cm|mm|pt|pc)/i', '${1}0', $css);
// Trim
$css = trim($css);
// Return minified CSS
return $css;
}
/**
* Get dynamic CSS
*
* @since 1.0.0
* @access public
*
* @param array $dynamic_css
* $dynamic_css = array(
* 'all'=>'css',
* '768'=>'css',
* );
* @return mixed
*/
public function get_dynamic_css($dynamic_css = array()) {
$getCSS = '';
$dynamic_css = apply_filters('cosmoswp_dynamic_css', $dynamic_css);
if (is_array($dynamic_css)) {
foreach ($dynamic_css as $screen => $css) {
if ($screen == "all") {
if (is_array($css)) {
$getCSS .= implode(" ", $css);
} else {
$getCSS .= $css;
}
}
elseif ($screen == "tablet") {
$getCSS .= '@media (min-width: 720px) {';
if (is_array($css)) {
$getCSS .= implode(" ", $css);
} else {
$getCSS .= $css;
}
$getCSS .= "}";
}
elseif ($screen == "desktop") {
$getCSS .= '@media (min-width: 992px) {';
if (is_array($css)) {
$getCSS .= implode(" ", $css);
} else {
$getCSS .= $css;
}
$getCSS .= "}";
}
}
}
//$output = cosmoswp_dynamic_css()->minify_css( $getCSS );
$output = $getCSS;
return $output;
}
/**
* Callback function for wp_head
*
* @since 1.0.0
* @access public
*
* @return void
*/
public static function dynamic_css() {
$output = cosmoswp_dynamic_css()->get_dynamic_css();
if ('file' == cosmoswp_get_theme_options('dynamic-css-options')) {
global $wp_customize;
$upload_dir = wp_upload_dir();
if (isset($wp_customize) || !file_exists($upload_dir['basedir'] . '/cosmoswp/dynamic-style.css')) {
// Render CSS in the head
if (!empty($output)) {
echo "\n";
}
}
} else {
// Render CSS in the head
if (!empty($output)) {
echo "\n";
}
}
}
/**
* Callback function for admin_bar_init
*
* @since 1.0.0
* @access public
*
* @return void
*/
public static function add_edit_dynamic_css_file() {
// If Custom File is not selected
if ('file' != cosmoswp_get_theme_options('dynamic-css-options')) {
return;
}
$output = cosmoswp_dynamic_css()->get_dynamic_css();
// We will probably need to load this file
require_once(ABSPATH . 'wp-admin' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'file.php');
global $wp_filesystem;
$upload_dir = wp_upload_dir();
$dir = trailingslashit($upload_dir['basedir']) . 'cosmoswp' . DIRECTORY_SEPARATOR;
WP_Filesystem();
$wp_filesystem->mkdir($dir);
$wp_filesystem->put_contents($dir . 'dynamic-style.css', $output, 0644);
}
/**
* Callback function for wp_enqueue_scripts
*
* @since 1.0.0
* @access public
*
* @return void
*/
public static function dynamic_css_enqueue() {
// If File is not selected
if ('file' != cosmoswp_get_theme_options('dynamic-css-options')) {
return;
}
global $wp_customize;
$upload_dir = wp_upload_dir();
$output = cosmoswp_dynamic_css()->get_dynamic_css();
// Render CSS from the custom file
if (!isset($wp_customize) && file_exists($upload_dir['basedir'] . '/cosmoswp/dynamic-style.css') && !empty($output)) {
wp_enqueue_style('cosmoswp-dynamic', trailingslashit($upload_dir['baseurl']) . 'cosmoswp/dynamic-style.css', false, null);
}
}
}
endif;
/**
* Create Instance for CosmosWP_Dynamic_CSS
*
* @since 1.0.0
* @access public
*
* @param
* @return object
*/
if (!function_exists('cosmoswp_dynamic_css')) {
function cosmoswp_dynamic_css() {
return CosmosWP_Dynamic_CSS::instance();
}
cosmoswp_dynamic_css()->run();
}