function wpv_shortcode_icon($atts, $content = null) { extract(shortcode_atts(array('name' => '', 'style' => '', 'color' => '', 'size' => '', 'lheight' => 1), $atts)); $size_int = array('small' => 16, 'medium' => 24, 'large' => 32); $icon_char = wpv_get_icon($name); $theme = ''; if (strpos($name, 'theme-') === 0) { $theme = 'theme'; } elseif (strpos($name, 'custom-') === 0) { $theme = 'custom'; } $color = wpv_sanitize_accent($color); if (isset($size_int[$size])) { $size = $size_int[$size]; } $style_slug = $style; if (!empty($color)) { $style = "color:{$color};"; if ($style_slug == 'inverted-colors' || $style_slug == 'box') { $l = new WpvLessc(); $l->importDir = '.'; $l->setFormatter("compressed"); $style = $l->compile("\n\t\t\t\t.readable-color(@bgcolor:#FFF, @treshold:70, @diff:50%) when (iscolor(@bgcolor)) and ( lightness(@bgcolor) >= @treshold ) {\n\t\t\t\t\tcolor: darken(@bgcolor, @diff);\n\t\t\t\t}\n\t\t\t\t.readable-color(@bgcolor:#FFF, @treshold:70, @diff:50%) when (iscolor(@bgcolor)) and ( lightness(@bgcolor) < @treshold ) {\n\t\t\t\t\tcolor: lighten(@bgcolor, @diff);\n\t\t\t\t}\n\n\n\t\t\t\t\t.readable-color({$color});\n\t\t\t\t\tbackground: {$color};\n\t\t\t"); } } $lheight = (int) $lheight != 1 && (int) $lheight != (int) $size ? "line-height:{$lheight};" : ''; if (!empty($size)) { $size = "font-size:{$size}px !important;"; } return "<span class='icon shortcode {$theme} {$style_slug}' style='{$lheight}{$size}{$style}'>{$icon_char}</span>"; }
public static function shortcode($atts, $content = null, $code) { extract(shortcode_atts(array('layout' => 'horizontal', 'left_color' => 'accent8', 'right_color' => 'accent1', 'nav_color' => 'accent2'), $atts)); if (!wpv_sub_shortcode('tab', $content, $params, $sub_contents)) { return 'error parsing slider shortcode'; } wp_enqueue_script('jquery-ui-tabs'); wp_enqueue_script('front-jquery.ui.tabs.rotate'); global $wpv_tabs_shown; if (!isset($wpv_tabs_shown)) { $wpv_tabs_shown = 0; } $wpv_tabs_shown++; $id = 'tabs-' . $wpv_tabs_shown; $output = '<ul class="ui-tabs-nav">'; if (isset($GLOBALS['wpv_last_column_title']) && !empty($GLOBALS['wpv_last_column_title']) && $layout == 'vertical') { $output .= '<li class="inactive-block-title"><h2>' . $GLOBALS['wpv_last_column_title'] . '</h2></li>'; } foreach ($params as $i => $p) { $p = shortcode_atts(array('title' => '', 'class' => '', 'icon' => ''), $p); if (!empty($p['icon'])) { $p['icon'] = wpv_shortcode_icon(array('name' => $p['icon'])); $p['class'] .= ' has-icon'; } $class = empty($p['class']) ? '' : " class='{$p['class']}'"; $output .= '<li' . $class . '><a href="#tab-' . $wpv_tabs_shown . '-' . $i . '-' . self::sanitize_id($params[$i]['title']) . '">' . $p['icon'] . ' <span class="title-text">' . $p['title'] . '</span></a></li>'; } $output .= '</ul>'; foreach ($sub_contents as $i => $c) { $class = isset($params[$i]['class']) ? ' tab-' . $params[$i]['class'] : ''; $output .= '<div class="pane' . $class . '" id="tab-' . $wpv_tabs_shown . '-' . $i . '-' . self::sanitize_id($params[$i]['title']) . '">' . do_shortcode(trim($c)) . '</div>'; } $l = new WpvLessc(); $l->importDir = '.'; $l->setFormatter("compressed"); $left_color = wpv_sanitize_accent($left_color); $right_color = wpv_sanitize_accent($right_color); $nav_color = wpv_sanitize_accent($nav_color); $inner_style = ''; if (!empty($left_color) && !empty($right_color)) { $readable = WpvTemplates::readable_color_mixin(); $vertical_styles = $layout !== 'vertical' ? '' : "\n\t\t\t\t#{$id}.vertical {\n\t\t\t\t\t&,\n\t\t\t\t\t&:before {\n\t\t\t\t\t\tbackground: {$right_color};\n\t\t\t\t\t}\n\n\t\t\t\t\t.ui-tabs-nav {\n\t\t\t\t\t\t&:before {\n\t\t\t\t\t\t\tbackground: {$left_color};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t.pane:before {\n\t\t\t\t\t\tbackground: {$left_color};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t"; $inner_style = $l->compile($readable . $vertical_styles . "\n\t\t\t\t#{$id} {\n\t\t\t\t\t.ui-tabs-nav {\n\t\t\t\t\t\t&,\n\t\t\t\t\t\tli {\n\t\t\t\t\t\t\tbackground: {$left_color};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tli {\n\t\t\t\t\t\t\t&, a, a .icon {\n\t\t\t\t\t\t\t\tcolor: {$nav_color};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t.ui-state-active,\n\t\t\t\t\t\t.ui-state-selected,\n\t\t\t\t\t\t.ui-state-hover {\n\t\t\t\t\t\t\tbackground: {$right_color};\n\n\t\t\t\t\t\t\t&, a, a .icon {\n\t\t\t\t\t\t\t\t.readable-color({$right_color});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t.inactive-block-title {\n\t\t\t\t\t\t\th1, h2, h3, h4, h5, h6 {\n\t\t\t\t\t\t\t\tcolor: {$nav_color};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t&.horizontal {\n\t\t\t\t\t\t.pane {\n\t\t\t\t\t\t\tbackground: {$right_color};\n\n\t\t\t\t\t\t\t&,\n\t\t\t\t\t\t\tp,\n\t\t\t\t\t\t\ta,\n\t\t\t\t\t\t\t.column-title,\n\t\t\t\t\t\t\t.sep-text h2.regular-title-wrapper,\n\t\t\t\t\t\t\t.text-divider-double,\n\t\t\t\t\t\t\t.sep-text .sep-text-line,\n\t\t\t\t\t\t\t.sep,\n\t\t\t\t\t\t\t.sep-2,\n\t\t\t\t\t\t\t.sep-3,\n\t\t\t\t\t\t\ttd,\n\t\t\t\t\t\t\tth,\n\t\t\t\t\t\t\tcaption {\n\t\t\t\t\t\t\t\t.readable-color({$right_color});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t"); } $style = '<style>' . $inner_style . '</style>'; return '<div class="wpv-tabs ' . $layout . '" id="' . $id . '">' . $output . '</div>' . $style; }
private static function basic_compile($file_from, $file_to) { if (!isset($GLOBALS['wpv_only_smart_less_compilation'])) { try { $l = new WpvLessc(); $l->importDir = '.'; include WPV_HELPERS . 'lessphp-extensions.php'; $l->compileFile($file_from, $file_to); // xss ok _e('Saved', 'church-event'); } catch (Exception $e) { self::warning($e->getMessage()); } } else { echo '<!-- smart less failed -->'; _e('Cannot compile LESS file', 'church-event'); } }
.readable-color(@bgcolor:#FFF, @treshold:70, @diff:50%) when (iscolor(@bgcolor)) and ( lightness(@bgcolor) >= @treshold ) { color: darken(@bgcolor, @diff); } .readable-color(@bgcolor:#FFF, @treshold:70, @diff:50%) when (iscolor(@bgcolor)) and ( lightness(@bgcolor) < @treshold ) { color: lighten(@bgcolor, @diff); } '; if (!empty($background) && $background !== 'transparent') { $l = new WpvLessc(); $l->importDir = '.'; $l->setFormatter("compressed"); $background = wpv_sanitize_accent($background); $normal_style = $l->compile($readable . "\n\t\t\t#{$id} .closed {\n\t\t\t\tbackground: {$background};\n\n\t\t\t\t&, p { .readable-color({$background}); }\n\t\t\t}\n\t\t"); } if (!empty($hover_background) && $hover_background !== 'transparent') { $l = new WpvLessc(); $l->importDir = '.'; $l->setFormatter("compressed"); $hover_background = wpv_sanitize_accent($hover_background); $hover_style = $l->compile($readable . "\n\t\t\t#{$id} .open {\n\t\t\t\tbackground: {$hover_background};\n\n\t\t\t\t&, p { .readable-color({$hover_background}); }\n\t\t\t}\n\t\t"); } ?> <style scoped><?php echo $normal_style . $hover_style; ?> </style> <div class="services has-more <?php echo $class; ?> " id="<?php echo $id;
protected function to($what, &$out, $until = false, $allowNewline = false) { if (is_string($allowNewline)) { $validChars = $allowNewline; } else { $validChars = $allowNewline ? "." : "[^\n]"; } if (!$this->match('(' . $validChars . '*?)' . WpvLessc::preg_quote($what), $m, !$until)) { return false; } if ($until) { $this->count -= strlen($what); } // give back $what $out = $m[1]; return true; }
/** * Page title color * * @return string color styles */ public static function page_header_title_color() { $post_id = wpv_get_the_ID(); if (is_null($post_id) || !self::has_page_header() || is_archive() || is_search()) { return ''; } $bgcolor = wpv_sanitize_accent(wpv_post_meta($post_id, 'local-page-title-background-color', true)); $style = ''; if (!empty($bgcolor)) { $l = new WpvLessc(); $l->importDir = '.'; $l->setFormatter('compressed'); $style = $l->compile(WpvTemplates::readable_color_mixin() . "\n\t\t\t\t.readable-color( {$bgcolor}, 70, 70% );\n\t\t\t\t"); } return $style; }
/** * Column shortcode callback * * @param array $atts shortcode attributes * @param string $content shortcode content * @param string $code shortcode name * @return string output html */ public static function dispatch($atts, $content, $code) { extract(shortcode_atts(array('animation' => 'none', 'background_attachment' => 'scroll', 'background_color' => '', 'background_image' => '', 'background_position' => '', 'background_repeat' => '', 'background_size' => '', 'background_video' => '', 'class' => '', 'extended' => 'false', 'extended_padding' => 'true', 'last' => 'false', 'more_link' => '', 'more_text' => '', 'parallax_bg' => 'disabled', 'parallax_bg_inertia' => '1', 'title' => '', 'title_type' => 'single', 'vertical_padding_bottom' => '0', 'vertical_padding_top' => '0', 'width' => '1/1', 'div_atts' => '', 'left_border' => 'transparent', 'id' => ''), $atts)); if (!preg_match('/column_\\d+/', $code)) { $class .= ' wpv-first-level'; } $GLOBALS['wpv_column_stack'][] = $width; $GLOBALS['wpv_last_column_title'] = $title; if ($parallax_bg !== 'disabled') { $class .= ' parallax-bg'; $div_atts .= ' data-parallax-method="' . esc_attr($parallax_bg) . '" data-parallax-inertia="' . esc_attr($parallax_bg_inertia) . '"'; $background_position = 'center top'; $background_attachment = 'fixed'; } $has_price = strpos($content, '[price') !== false; $has_vertical_tabs = preg_match('/\\[tabs.+layout="vertical"/s', $content); $width = str_replace('/', '-', $width); $title = !empty($title) && !$has_vertical_tabs ? apply_filters('wpv_column_title', $title, $title_type) : ''; $extended = wpv_sanitize_bool($extended); $last = wpv_sanitize_bool($last); $first = !$last; $id = empty($id) ? 'wpv-column-' . md5(uniqid()) : $id; if ($width === '1-1') { $first = true; $last = true; } if ($width !== '1-1' || WpvTemplates::get_layout() !== 'full') { $extended = false; } $result = ''; $result_before = $result_after = $content_before = $content_after = ''; if (self::$in_row > self::$last_row) { $rowclass = $has_price ? 'has-price' : ''; $class .= ' first'; $result .= '<div class="row ' . $rowclass . '">'; self::$last_row = self::$in_row; } if (!empty($background_image)) { $background_image = "\n\t\t\t\tbackground: url('{$background_image}') {$background_repeat} {$background_position};\n\t\t\t\tbackground-size: {$background_size};\n\t\t\t\tbackground-attachment: {$background_attachment};\n\t\t\t"; } $inner_style = ''; $l = new WpvLessc(); $l->importDir = '.'; $l->setFormatter("compressed"); if (!empty($background_color) && $background_color !== 'transparent') { $color = wpv_sanitize_accent($background_color); $inner_style .= $l->compile("\n\t\t\t\t.readable-color(@bgcolor:#FFF, @treshold:70, @diff:50%) when (iscolor(@bgcolor)) and ( lightness(@bgcolor) >= @treshold ) {\n\t\t\t\t\tcolor: darken(@bgcolor, @diff);\n\t\t\t\t}\n\t\t\t\t.readable-color(@bgcolor:#FFF, @treshold:70, @diff:50%) when (iscolor(@bgcolor)) and ( lightness(@bgcolor) < @treshold ) {\n\t\t\t\t\tcolor: lighten(@bgcolor, @diff);\n\t\t\t\t}\n\t\t\t\t.safe-bg(@bgcolor) when (iscolor(@bgcolor)) {\n\t\t\t\t\tbackground-color: @bgcolor;\n\t\t\t\t}\n\t\t\t\t.safe-bg(@bgcolor) {}\n\n\t\t\t\t#{$id} {\n\t\t\t\t\tp,\n\t\t\t\t\tem,\n\t\t\t\t\t.column-title,\n\t\t\t\t\t.sep-text h2.regular-title-wrapper,\n\t\t\t\t\t.text-divider-double,\n\t\t\t\t\t.sep-text .sep-text-line,\n\t\t\t\t\t.sep,\n\t\t\t\t\t.sep-2,\n\t\t\t\t\t.sep-3 {\n\t\t\t\t\t\t.readable-color({$color});\n\t\t\t\t\t}\n\n\t\t\t\t\t&:before {\n\t\t\t\t\t\t.safe-bg({$left_border});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t"); $background_color = "background-color:" . wpv_sanitize_accent($background_color) . ";"; } else { $background_color = ''; } if (!empty($left_border) && $left_border !== 'transparent') { $inner_style .= $l->compile("\n\t\t\t\t.safe-bg(@bgcolor) when (iscolor(@bgcolor)) {\n\t\t\t\t\tbackground-color: @bgcolor;\n\t\t\t\t}\n\t\t\t\t.safe-bg(@bgcolor) {}\n\n\t\t\t\t#{$id} {\n\t\t\t\t\t&:before {\n\t\t\t\t\t\t.safe-bg({$left_border});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t"); } if (!empty($inner_style)) { $content_before .= '<style>' . $inner_style . '</style>'; } if (!empty($more_link) && !empty($more_text) && !$extended) { $class .= ' has-more-button'; $more_link = esc_attr($more_link); $content_after .= "<a href='{$more_link}' title='" . esc_attr($more_text) . "' class='column-read-more-btn'>{$more_text}</a>"; } if (!empty($background_video) && !WpvMobileDetect::getInstance()->isMobile()) { $type = wp_check_filetype($background_video, wp_get_mime_types()); $content_before .= '<div class="wpv-video-bg"> <video autoplay loop preload="metadata" width="100%" class="wpv-background-video" style="width:100%"> <source type="' . $type['type'] . '" src="' . $background_video . '"></source> </video> </div><div class="wpv-video-bg-content">'; $content_after .= '</div>'; $class .= ' has-video-bg'; wp_enqueue_style('wp-mediaelement'); wp_enqueue_script('wp-mediaelement'); } if (!empty($background_image) || !empty($background_color) && $background_color !== 'transparent') { $class .= ' has-background'; } if ((int) $vertical_padding_top < 0) { $div_atts .= ' data-padding-top="' . (int) $vertical_padding_top . '"'; } if ((int) $vertical_padding_bottom < 0) { $div_atts .= ' data-padding-bottom="' . (int) $vertical_padding_bottom . '"'; } $vertical_padding_top = max(0, (int) $vertical_padding_top) . 'px'; $vertical_padding_bottom = max(0, (int) $vertical_padding_bottom) . 'px'; $style = 'style="' . $background_image . $background_color . 'padding-top:' . $vertical_padding_top . ';padding-bottom:' . $vertical_padding_bottom . '"'; $class .= $extended ? ' extended' : ' unextended'; if ($left_border != 'transparent') { $class .= ' left-border'; } if ($animation !== 'none' && $parallax_bg == 'disabled') { $class .= ' animation-' . $animation . ' animated-active'; } if ($extended_padding === 'false') { $class .= ' no-extended-padding'; } if ($extended) { $content_before = '<div class="extended-column-inner">' . $content_before; $content_after .= '</div>'; } $result .= '<div class="wpv-grid grid-' . $width . ' ' . $class . '" ' . $style . ' id="' . $id . '" ' . $div_atts . '>' . $content_before . $title . self::content($content) . $content_after . '</div>'; if ($last) { self::$last_row--; $result .= '</div>'; } array_pop($GLOBALS['wpv_column_stack']); return $result_before . $result . $result_after; }
<?php $normal_style = $hover_style = ''; $id = 'wpv-expandable-' . md5(uniqid()); $readable = WpvTemplates::readable_color_mixin(); if (!empty($background) && $background !== 'transparent') { $l = new WpvLessc(); $l->importDir = '.'; $l->setFormatter("compressed"); $background = wpv_sanitize_accent($background); $normal_style = $l->compile($readable . "\n\t\t\t#{$id} .closed {\n\t\t\t\tbackground: {$background};\n\n\t\t\t\t&,\n\t\t\t\tp,\n\t\t\t\t.sep-text h2.regular-title-wrapper,\n\t\t\t\t.text-divider-double,\n\t\t\t\t.sep-text .sep-text-line,\n\t\t\t\t.sep,\n\t\t\t\t.sep-2,\n\t\t\t\t.sep-3,\n\t\t\t\ttd,\n\t\t\t\tth,\n\t\t\t\tcaption {\n\t\t\t\t\t.readable-color({$background});\n\t\t\t\t}\n\t\t\t}\n\t\t"); } if (!empty($hover_background) && $hover_background !== 'transparent') { $l = new WpvLessc(); $l->importDir = '.'; $l->setFormatter("compressed"); $hover_background = wpv_sanitize_accent($hover_background); $hover_style = $l->compile($readable . "\n\t\t\t#{$id} .open {\n\t\t\t\tbackground: {$hover_background};\n\n\t\t\t\t&,\n\t\t\t\tp,\n\t\t\t\t.sep-text h2.regular-title-wrapper,\n\t\t\t\t.text-divider-double,\n\t\t\t\t.sep-text .sep-text-line,\n\t\t\t\t.sep,\n\t\t\t\t.sep-2,\n\t\t\t\t.sep-3,\n\t\t\t\ttd,\n\t\t\t\tth,\n\t\t\t\tcaption {\n\t\t\t\t\t.readable-color({$hover_background});\n\t\t\t\t}\n\t\t\t}\n\t\t"); } ?> <style scoped><?php echo $normal_style . $hover_style; ?> </style> <div class="services has-more <?php echo $class; ?> " id="<?php echo $id; ?> ">
ini_set('display_errors', 1); $secret_file = '../cache/less-spawn-secret'; $expected_secret = file_get_contents($secret_file); if (!empty($expected_secret) && $expected_secret === $_POST['secret']) { @unlink($secret_file); define('BASEPATH', realpath(dirname(__FILE__) . '/../') . '/'); $path = realpath(dirname(__FILE__) . '/../vamtam/classes/') . '/'; // increase memory limit using the standard WP functions if (isset($_POST['abspath']) && file_exists($_POST['abspath'] . '/wp-includes/default-constants.php')) { function is_multisite() { return true; } // return value doesn't matter define('ABSPATH', $_POST['abspath']); include $_POST['abspath'] . '/wp-includes/default-constants.php'; wp_initial_constants(); } require $path . "lessc.php"; $l = new WpvLessc(); $l->importDir = '.'; include '../vamtam/helpers/lessphp-extensions.php'; try { $l->compileFile($_POST['input'], $_POST['output']); echo json_encode(array('status' => 'ok', 'memory' => memory_get_peak_usage() / 1024 / 1024)); // xss ok } catch (Exception $e) { echo json_encode(array('status' => 'error', 'message' => $e->getMessage(), 'memory' => memory_get_peak_usage() / 1024 / 1024)); // xss ok } }
/** * Page title color * * @return string color styles */ public static function page_header_title_color() { $post_id = wpv_get_the_ID(); if (is_null($post_id) || !self::has_page_header() || is_archive() || is_search() || !is_singular()) { return ''; } $bgcolor = wpv_sanitize_accent(wpv_post_meta($post_id, 'local-page-title-background-color', true)); $style = ''; if (!empty($bgcolor)) { $l = new WpvLessc(); $l->importDir = '.'; $l->setFormatter("compressed"); $style = $l->compile("\n\t\t\t\t.readable-color(@bgcolor:#FFF, @treshold:70, @diff:70%) when (iscolor(@bgcolor)) and ( lightness(@bgcolor) >= @treshold ) {\n\t\t\t\t\tcolor: darken(@bgcolor, @diff);\n\t\t\t\t}\n\t\t\t\t.readable-color(@bgcolor:#FFF, @treshold:70, @diff:70%) when (iscolor(@bgcolor)) and ( lightness(@bgcolor) < @treshold ) {\n\t\t\t\t\tcolor: lighten(@bgcolor, @diff);\n\t\t\t\t}\n\n\t\t\t\t.readable-color({$bgcolor});\n\t\t\t"); } return $style; }