} } } $selectors = array( 'container' => ".avia-timeline-container .av-milestone.{$element_id}", 'milestone-icon' => ".avia-timeline-container .av-milestone.{$element_id} .x-av-milestone-icon", 'milestone-icon-inner' => ".avia-timeline-container .av-milestone.{$element_id} .av-milestone-icon-inner", 'milestone-indicator' => ".avia-timeline-container .av-milestone.{$element_id} .av-milestone-indicator", 'milestone-article-footer' => ".avia-timeline-container .av-milestone.{$element_id} .av-milestone-article-footer" ); $element_styling->add_selectors( $selectors ); $result['default'] = $default; $result['atts'] = $atts; $result['content'] = $content; $result['element_styling'] = $element_styling; return $result; } /** * Frontend Shortcode Handler * * @param array $atts array of attributes * @param string $content text within enclosing form of shortcode element * @param string $shortcodename the shortcode found, when == callback name * @return string $output returns the modified html string */ function shortcode_handler( $atts, $content = '', $shortcodename = '', $meta = '' ) { $result = $this->get_element_styles( compact( array( 'atts', 'content', 'shortcodename', 'meta' ) ) ); extract( $result ); extract( $this->screen_options ); // return $av_font_classes, $av_title_font_classes and $av_display_classes extract( $atts ); $this->parent_atts = $atts; avia_sc_timeline::$timeline_count ++; $slider_attribute = 'horizontal' == $orientation ? "avia-data-slides='{$slides_num}'" : ''; $id = ! empty( $meta['custom_el_id'] ) ? $meta['custom_el_id'] : ' id="avia-timeline-' . avia_sc_timeline::$timeline_count . '" '; $this->milestone_count = 0; $timeline_items_html = ShortcodeHelper::avia_remove_autop( $content, true ); $style_tag = $element_styling->get_style_tag( $element_id ); $item_tag = $element_styling->style_tag_html( $this->subitem_inline_styles, 'sub-' . $element_id ); $container_class = $element_styling->get_class_string( 'container' ); $item_container_class = $element_styling->get_class_string( 'item_container_class' ); $output = ''; $output .= $style_tag; $output .= $item_tag; $output .= "
"; $output .= "'; if( 'horizontal' == $orientation ) { $args = array( 'class_main' => "av-timeline-nav {$av_display_classes}", 'class_prev' => 'av-timeline-nav-prev av-nav-btn', 'class_next' => 'av-timeline-nav-next av-nav-btn' ); $output .= aviaFrontTemplates::slide_navigation_arrows( $args ); } $output .= '
'; return $output; } /** * * @param array $atts * @param string $content * @param string $shortcodename * @return string */ public function av_timeline_item( $atts, $content = '', $shortcodename = '' ) { /** * Fixes a problem when 3-rd party plugins call nested shortcodes without executing main shortcode (like YOAST in wpseo-filter-shortcodes) */ if( empty( $this->screen_options ) ) { return ''; } $result = $this->get_element_styles_item( compact( array( 'atts', 'content', 'shortcodename' ) ) ); extract( $result ); extract( $atts ); extract( $this->screen_options ); //return $av_font_classes, $av_title_font_classes and $av_display_classes $linktitle = ''; $linktarget = ''; $link = ''; if( ! empty( $atts['link'] ) ) { $atts['link'] = AviaHelper::get_url( $atts['link'] ); $linktarget = AviaHelper::get_link_target( $atts['linktarget'] ); $linktitle = $atts['title']; } $list_class = $this->milestone_count % 2 == 0 ? 'av-milestone-odd' : 'av-milestone-even'; $customid = ! empty( $atts['custom_id'] ) ? 'id="' . AviaHelper::save_string( $atts['custom_id'], '-', '', 'id' ) . '"' : ''; $this->subitem_inline_styles .= $element_styling->get_style_tag( $element_id, 'rules_only' ); $container_class = $element_styling->get_class_string( 'container' ); $milestone_icon_class = $element_styling->get_class_string( 'milestone-icon' ); $milestone_icon_inner_class = $element_styling->get_class_string( 'milestone-icon-inner' ); /** * Icon / image */ $icon_wrapper = array(); if( in_array( $atts['linkelement'], array( 'all', 'both', 'icon_head', 'icon_only' ) ) && ! empty( $atts['link'] ) ) { $icon_wrapper['start'] = ""; $icon_wrapper['end'] = ''; } else { $icon_wrapper['start'] = '
'; $icon_wrapper['end'] = '
'; } $icon = $icon_wrapper['start']; if( $atts['icon_image'] == 'image' ) { $icon .= ""; $icon .= " "; $icon .= ''; } else if( $atts['icon_image'] == 'icon' ) { $display_char = av_icon( $atts['icon'], $atts['font'] ); $icon .= ""; $icon .= ""; $icon .= ""; $icon .= ''; $icon .= ''; } else if( $atts['icon_image'] == 'number' ) { $num = $this->milestone_count + 1; if( $atts['number_arrow'] == 'arrow' ) { $milestone_icon_class .= ' milestone_bullet_arrow'; } $icon .= ""; $icon .= ""; $icon .= "{$num}"; $icon .= ''; $icon .= ''; } $icon .= $icon_wrapper['end']; /** * Date */ $default_heading = 'h2'; $args = array( 'heading' => $default_heading, 'extra_class' => '' ); $extra_args = array( $this, $atts, $content, 'date' ); /** * @since 4.5.5 * @return array */ $args = apply_filters( 'avf_customize_heading_settings', $args, __CLASS__, $extra_args ); $heading = ! empty( $args['heading'] ) ? $args['heading'] : $default_heading; $css = ! empty( $args['extra_class'] ) ? $args['extra_class'] : ''; $title_sanitized = sanitize_title( $atts['date'] ); $date_wrapper = array(); if( in_array( $atts['linkelement'], array( 'all', 'both', 'date_head' ) ) && ! empty( $atts['link'] ) ) { $date_wrapper['start'] = "<{$heading} class='av-milestone-date {$css} {$av_title_font_classes}' id='milestone-{$title_sanitized}'>"; $date_wrapper['end'] = ""; } else { $date_wrapper['start'] = "<{$heading} class='av-milestone-date {$css} {$av_title_font_classes}' id='milestone-{$title_sanitized}'>"; $date_wrapper['end'] = ""; } $date = ''; $date .= $date_wrapper['start']; $date .= $atts['date']; $date .= ""; $date .= $date_wrapper['end']; /** * Article / Content */ $article = ''; $article .= "
"; $article .= "
"; if( ! empty( $atts['title'] ) ) { $default_heading = 'h4'; $args = array( 'heading' => $default_heading, 'extra_class' => '' ); $extra_args = array( $this, $atts, $content, 'title' ); /** * @since 4.5.5 * @return array */ $args = apply_filters( 'avf_customize_heading_settings', $args, __CLASS__, $extra_args ); $heading = ! empty( $args['heading'] ) ? $args['heading'] : $default_heading; $css = ! empty( $args['extra_class'] ) ? $args['extra_class'] : ''; $title_class = "class='av-milestone-title {$av_font_classes} {$css}'"; $headline_wrap = array(); if( in_array( $atts['linkelement'], array( 'all', 'icon_head', 'date_head' ) ) && ! empty( $atts['link'] ) ) { $headline_wrap['start'] = "<{$heading} {$title_class}>"; $headline_wrap['end'] = ""; } else { $headline_wrap['start'] = "<{$heading} {$title_class}>"; $headline_wrap['end'] = ""; } $article .= '
'; $article .= $headline_wrap['start']; $article .= $atts['title']; $article .= $headline_wrap['end']; $article .= '
'; } $article .= "
"; $article .= ShortcodeHelper::avia_apply_autop( ShortcodeHelper::avia_remove_autop( $content ) ); $article .= '
'; $article .= '
'; $article .= ""; $article .= '
'; $output = ''; $output .= "
  • "; switch ( $this->parent_atts['placement'] ) { case 'av-milestone-placement-left': $output .= $date; $output .= $icon; $output .= $article; break; case 'av-milestone-placement-right': $output .= $date; $output .= $article; $output .= $icon; $output .= $date; break; case 'av-milestone-placement-alternate': if( $this->milestone_count % 2 == 0 ) { $output .= $date; $output .= $icon; $output .= $article; } else { if( 'vertical' == $this->parent_atts['orientation'] ) { $output .= $date; } $output .= $article; $output .= $icon; $output .= $date; } break; case 'av-milestone-placement-top': $output .= $date; $output .= $icon; $output .= $article; break; case 'av-milestone-placement-bottom': $output .= $article; $output .= $icon; $output .= $date; break; } $output .= '
  • '; $this->milestone_count++; return $output; } } }