Exemplo n.º 1
0
    /**
     * 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;
    }
Exemplo n.º 2
0
 /**
  * Get an instance of this class
  */
 public static function get_instance()
 {
     if (!isset(self::$instance)) {
         self::$instance = new self();
     }
     return self::$instance;
 }