/** * Generate the CSS for the widget. * * @param $instance * @return string */ public function get_instance_css($instance) { if (!class_exists('lessc')) { require plugin_dir_path(__FILE__) . 'inc/lessc.inc.php'; } if (!class_exists('SiteOrigin_Widgets_Less_Functions')) { require plugin_dir_path(__FILE__) . 'inc/less-functions.php'; } $style_name = $this->get_style_name($instance); if (empty($style_name)) { return ''; } $less_file = siteorigin_widget_get_plugin_dir_path($this->id_base) . 'styles/' . $style_name . '.less'; $less_file = apply_filters('siteorigin_widgets_less_file_' . $this->id_base, $less_file, $instance, $this); $less = substr($less_file, -5) == '.less' && file_exists($less_file) ? file_get_contents($less_file) : ''; // Substitute the variables if (!class_exists('SiteOrigin_Widgets_Color_Object')) { require plugin_dir_path(__FILE__) . 'inc/color.php'; } // Lets widgets insert their own custom generated LESS $less = preg_replace_callback('/\\.widget-function\\((.*)\\);/', array($this, 'less_widget_inject'), $less); //handle less @import statements $less = preg_replace_callback('/^@import\\s+".*?\\/?([\\w-\\.]+)";/m', array($this, 'get_less_import_contents'), $less); $vars = $this->get_less_variables($instance); if (!empty($vars)) { foreach ($vars as $name => $value) { if (empty($value)) { continue; } $less = preg_replace('/\\@' . preg_quote($name) . ' *\\:.*?;/', '@' . $name . ': ' . $value . ';', $less); } } $less = apply_filters('siteorigin_widgets_styles', $less, get_class($this), $instance); $less = apply_filters('siteorigin_widgets_less_' . $this->id_base, $less, $instance, $this); $style = $this->get_style_name($instance); $hash = $this->get_style_hash($instance); $css_name = $this->id_base . '-' . $style . '-' . $hash; //we assume that any remaining @imports are plain css imports and should be kept outside selectors $css_imports = ''; if (preg_match_all('/^@import.+/m', $less, $imports)) { $css_imports = implode("\n", $imports[0]); } $less = $css_imports . "\n\n" . '.so-widget-' . $css_name . ' { ' . $less . ' } '; $c = new lessc(); $lc_functions = new SiteOrigin_Widgets_Less_Functions($this, $instance); $lc_functions->registerFunctions($c); return apply_filters('siteorigin_widgets_instance_css', $c->compile($less), $instance, $this); }
/** * Generate the CSS for the widget. * * @param $instance * @return string */ public function get_instance_css($instance) { if (!class_exists('lessc')) { require plugin_dir_path(__FILE__) . 'inc/lessc.inc.php'; } if (!class_exists('SiteOrigin_Widgets_Less_Functions')) { require plugin_dir_path(__FILE__) . 'inc/less-functions.php'; } if (!method_exists($this, 'get_less_content')) { $style_name = $this->get_style_name($instance); if (empty($style_name)) { return ''; } $less_file = siteorigin_widget_get_plugin_dir_path($this->id_base) . 'styles/' . $style_name . '.less'; $less_file = apply_filters('siteorigin_widgets_less_file_' . $this->id_base, $less_file, $instance, $this); $less = substr($less_file, -5) == '.less' && file_exists($less_file) ? file_get_contents($less_file) : ''; } else { // The widget is going handle getting the instance LESS $less = $this->get_less_content($instance); } // Substitute the variables if (!class_exists('SiteOrigin_Widgets_Color_Object')) { require plugin_dir_path(__FILE__) . 'inc/color.php'; } // Lets widgets insert their own custom generated LESS $less = preg_replace_callback('/\\.widget-function\\((.*)\\);/', array($this, 'less_widget_inject'), $less); //handle less @import statements $less = preg_replace_callback('/^@import\\s+".*?\\/?([\\w-\\.]+)";/m', array($this, 'get_less_import_contents'), $less); $vars = $this->get_less_variables($instance); if (!empty($vars)) { foreach ($vars as $name => $value) { // Ignore empty string, false and null values (but keep '0') if ($value === '' || $value === false || $value === null) { continue; } $less = preg_replace('/\\@' . preg_quote($name) . ' *\\:.*?;/', '@' . $name . ': ' . $value . ';', $less); } } $less = apply_filters('siteorigin_widgets_styles', $less, $this->widget_class, $instance); $less = apply_filters('siteorigin_widgets_less_' . $this->id_base, $less, $instance, $this); $style = $this->get_style_name($instance); $hash = $this->get_style_hash($instance); $css_name = $this->id_base . '-' . $style . '-' . $hash; //we assume that any remaining @imports are plain css imports and should be kept outside selectors $css_imports = ''; if (preg_match_all('/^@import.+/m', $less, $imports)) { $css_imports = implode("\n", $imports[0]); $less = preg_replace('/^@import.+/m', '', $less); } $less = $css_imports . "\n\n" . '.so-widget-' . $css_name . " { \n" . $less . "\n } "; $compiler = new lessc(); $lc_functions = new SiteOrigin_Widgets_Less_Functions($this, $instance); $lc_functions->registerFunctions($compiler); try { if (method_exists($compiler, 'compile')) { $css = $compiler->compile($less); } } catch (Exception $e) { $css = ''; } // Remove any attributes with default as the value $css = preg_replace('/[a-zA-Z\\-]+ *: *default *;/', '', $css); // Remove any empty CSS $css = preg_replace('/[^{}]*\\{\\s*\\}/m', '', $css); $css = trim($css); return apply_filters('siteorigin_widgets_instance_css', $css, $instance, $this); }