427 lines
14 KiB
PHP
427 lines
14 KiB
PHP
<?php
|
|
/*
|
|
* Module - Sticky Section
|
|
*/
|
|
|
|
if( !class_exists( 'Ultimate_Sticky_Section' ) ) {
|
|
/**
|
|
*
|
|
*/
|
|
class Ultimate_Sticky_Section
|
|
{
|
|
|
|
function __construct()
|
|
{
|
|
if ( Ultimate_VC_Addons::$uavc_editor_enable ) {
|
|
add_action( 'init', array( $this, 'sticky_shortcode_mapper') );
|
|
}
|
|
add_shortcode( 'ult_sticky_section', array( $this, 'sticky_shortcode') );
|
|
add_action( 'wp_enqueue_scripts', array( $this, 'ult_sticky_section_scripts' ), 1 );
|
|
//add_action( 'wp_enqueue_scripts', array( $this , 'enqueue_style' ) );
|
|
|
|
} /* Contructor End*/
|
|
|
|
function sticky_shortcode( $atts, $content = null )
|
|
{
|
|
$el_class = '';
|
|
$sticky_gutter = $sticky_offset_class = '';
|
|
|
|
$sticky_width = $sticky_custom_width = '';
|
|
|
|
$stick_behaviour = '';
|
|
$sticky_position = $sticky_position_lr = $permanent_lr = '';
|
|
$btn_mobile = '';
|
|
|
|
extract( shortcode_atts( array(
|
|
"el_class" => "",
|
|
"sticky_gutter" => "",
|
|
"sticky_offset_class" => "",
|
|
|
|
"sticky_width" => "",
|
|
"sticky_custom_width" => "",
|
|
|
|
"stick_behaviour" => "",
|
|
"sticky_position" => "",
|
|
"sticky_position_lr" => "left",
|
|
"permanent_lr" => "",
|
|
"btn_mobile" => "",
|
|
"btn_support" => "",
|
|
|
|
), $atts ) );
|
|
|
|
$sticky_classes_data = array();
|
|
$sticky_gutter_class = " data-sticky_gutter_class= '";
|
|
$sticky_gutter_id = " data-sticky_gutter_id= '";
|
|
$class_flag = $id_flag = -1;
|
|
$stick_behaviour_data = "";
|
|
$left_right_postion = "";
|
|
$data_mobile = "";
|
|
$data_support = "";
|
|
if($btn_mobile == "enable"){
|
|
$data_mobile = " data-mobile='yes'";
|
|
}else{
|
|
$data_mobile = " data-mobile='no'";
|
|
}
|
|
|
|
if($btn_support == "enable"){
|
|
$data_support = " data-support='yes'";
|
|
}else{
|
|
$data_support = " data-support='no'";
|
|
}
|
|
|
|
|
|
//gutter classes explode
|
|
if( $sticky_offset_class != '' ){
|
|
//$sticky_class = " data-sticky_gutter_class= '";
|
|
if ( strpos( $sticky_offset_class, ',' ) !== false )
|
|
{
|
|
$sticky_classes_data = explode( ',', $sticky_offset_class ); //str_replace( ',', '', trim( $sticky_offset_class ) );
|
|
foreach($sticky_classes_data as $data) {
|
|
if ( strpos( $data, '.' ) !== false ) {
|
|
$class_flag = 0;
|
|
|
|
$sticky_gutter_class .= trim( $data );
|
|
$sticky_gutter_class .= " ";
|
|
}
|
|
elseif (strpos( $data, '#' ) !== false ) {
|
|
$id_flag = 0;
|
|
|
|
$sticky_gutter_id .= trim( $data );
|
|
$sticky_gutter_id .= " ";
|
|
}
|
|
}
|
|
|
|
// $sticky_gutter_class .= " '";
|
|
// $sticky_gutter_id .= " '";
|
|
//echo ( $sticky_classes[0] );
|
|
} //check ',' in string end if
|
|
else {
|
|
if ( strpos( $sticky_offset_class, '.' ) !== false ) {
|
|
$class_flag = 0;
|
|
|
|
$sticky_gutter_class .= trim( $sticky_offset_class );
|
|
|
|
}
|
|
elseif ( strpos( $sticky_offset_class, '#' ) !== false ) {
|
|
$id_flag = 0;
|
|
$sticky_gutter_id .= trim( $sticky_offset_class );
|
|
|
|
}
|
|
}//checked ',' in string end else
|
|
|
|
if ( $class_flag != 0 ) {
|
|
$sticky_gutter_class = "";
|
|
} else {
|
|
$sticky_gutter_class = rtrim( $sticky_gutter_class)."'";
|
|
}
|
|
|
|
if ( $id_flag != 0 ) {
|
|
$sticky_gutter_id = "";
|
|
} else {
|
|
$sticky_gutter_id = rtrim( $sticky_gutter_id )."'";
|
|
}
|
|
}//check sticky_offset_class end if
|
|
else{
|
|
$sticky_gutter_class = "";
|
|
$sticky_gutter_id = "";
|
|
} //check sticky_offset_class end else
|
|
|
|
//width data
|
|
if ( $sticky_width == 'customwidth' ) {
|
|
//$sticky_custom_width = " data-sticky_customwidth= '";
|
|
|
|
if ( $sticky_custom_width != '' ) {
|
|
if ( strpos( $sticky_custom_width, 'px' ) !== false || strpos( $sticky_custom_width, 'em' ) !== false || strpos( $sticky_custom_width, '%' ) !== false ) {
|
|
$sticky_custom_width .= " data-sticky_customwidth= '".esc_attr($sticky_custom_width);
|
|
} else {
|
|
$sticky_custom_width .= " data-sticky_customwidth= '".esc_attr($sticky_custom_width)."px";
|
|
}
|
|
} else {
|
|
$sticky_custom_width .= " data-sticky_customwidth= '60%";
|
|
|
|
}
|
|
$sticky_custom_width .= "'";
|
|
//$sticky_custom_width != '' ? " data-sticky_customwidth= '".$sticky_custom_width."px'" : " data-sticky_customwidth= '50px'" ;
|
|
}
|
|
|
|
//sticky bahviour
|
|
$stick_behaviour_data = $stick_behaviour != '' ? " data-stick_behaviour= '".esc_attr($stick_behaviour)."'" : " data-stick_behaviour= 'stick_with_scroll_row'" ;
|
|
|
|
//permanent data
|
|
if ( $stick_behaviour == 'stick_permanent') {
|
|
$left_right_postion = " data-lr_position= '".esc_attr($sticky_position_lr)."' ";
|
|
//$left_right_postion .=
|
|
if ( $permanent_lr != "" ) {
|
|
if ( strpos( $permanent_lr, 'px' ) !== false || strpos( $permanent_lr, 'em' ) !== false || strpos( $permanent_lr, '%' ) !== false ) {
|
|
$left_right_postion .= " data-lr_value= '".esc_attr($permanent_lr);
|
|
} else {
|
|
$left_right_postion .= " data-lr_value= '".esc_attr($permanent_lr)."px";
|
|
}
|
|
} else {
|
|
$left_right_postion .= "data-lr_value= '0";
|
|
|
|
}
|
|
//$permanent_lr != "" ? " data-lr_value= '".$permanent_lr."px" :"data-lr_value= '0";
|
|
$left_right_postion .= "'";
|
|
}
|
|
|
|
|
|
$custom_data = $sticky_gutter != '' ? " data-gutter= '".esc_attr($sticky_gutter)."'": '' ;
|
|
$custom_data .= $stick_behaviour_data ;
|
|
$custom_data .= $left_right_postion ;
|
|
$custom_data .= $sticky_gutter_class." ".$sticky_gutter_id;
|
|
$custom_data .= $sticky_width != '' ? " data-sticky_width= '".esc_attr($sticky_width)."'": '' ;
|
|
$custom_data .= $sticky_custom_width ;
|
|
$custom_data .= $sticky_position != '' ? " data-sticky_position= '".esc_attr($sticky_position)."'": " data-sticky_position= 'top'" ;
|
|
$custom_data .= $data_mobile;
|
|
$custom_data .= $data_support;
|
|
|
|
|
|
$output = '<div class="ult_row_spacer">';
|
|
$output .= '<div class="ult-sticky-anchor">';
|
|
$output .= '<div class="ult-sticky-section ult-sticky '.esc_attr($el_class).'" '.$custom_data.'>';
|
|
$output .= do_shortcode( $content );
|
|
$output .= '</div>';
|
|
$output .= '<div class="ult-space"></div>';
|
|
$output .= '</div></div>';
|
|
return $output;
|
|
|
|
}// end function sticky_shortcode
|
|
|
|
function sticky_shortcode_mapper()
|
|
{
|
|
if ( function_exists( 'vc_map' ) ) {
|
|
vc_map(
|
|
array(
|
|
"name" => __("Sticky Section", "ultimate_vc"),
|
|
"base" => "ult_sticky_section",
|
|
"icon" => "vc_icon_sticky_section",
|
|
"class" => "",
|
|
"as_parent" => array('except' => 'ult_sticky_section'),
|
|
"content_element" => true,
|
|
"controls" => "full",
|
|
"show_settings_on_create" => true,
|
|
"category" => "Ultimate VC Addons",
|
|
"description" => __("Make any elements sticky anywhere.",'ultimate_vc'),
|
|
"params" => array(
|
|
|
|
//gutter option
|
|
/*array(
|
|
"type" => "dropdown",
|
|
"class" => "",
|
|
"heading" => __( "Gutter Space", "ultimate_vc" ),
|
|
"param_name" => "gutter",
|
|
"value" => array(
|
|
'Numerical Value' => 'num_value',
|
|
'Offset Container' => 'offset_container'
|
|
),
|
|
"description" => __( "Set top/bottom position of sticky section", "ultimate_vc" )
|
|
),*/
|
|
|
|
//// sticky behaviour
|
|
array(
|
|
"type" => "dropdown",
|
|
"class" => "",
|
|
"heading" => __( "Stick Behaviour", "ultimate_vc" ),
|
|
"param_name" => "stick_behaviour",
|
|
"value" => array(
|
|
'Stick with Row' => 'stick_with_scroll_row',
|
|
'Stick with Window' => 'stick_with_scroll',
|
|
'Stick Permanent' => 'stick_permanent'
|
|
),
|
|
"description" => __( "Set behaviour of sticky section", "ultimate_vc" )
|
|
),
|
|
|
|
//sticky offset class
|
|
/*array(
|
|
"type" => "textfield",
|
|
"class" => "",
|
|
"heading" => __( "Offset Container", "ultimate_vc" ),
|
|
"param_name" => "sticky_offset_class",
|
|
"value" => "",
|
|
"description" => __( "Do you already have a fixed horizontal header on the page? Add Class name or Id.<br>Ex: .class1, .class2, #ID1 ", "ultimate_vc" ),
|
|
),*/
|
|
|
|
//sticky section width
|
|
array(
|
|
"type" => "dropdown",
|
|
"class" => "",
|
|
"heading" => __( "Sticky Section Width", "ultimate_vc" ),
|
|
"param_name" => "sticky_width",
|
|
"value" => array(
|
|
'Default' => '',
|
|
'Full Width' => 'fullwidth',
|
|
'Custom Width' => 'customwidth'
|
|
),
|
|
"description" => __( "Set the width of container", "ultimate_vc" ),
|
|
"dependency" => array(
|
|
"element" => "stick_behaviour",
|
|
"value" => array( 'stick_with_scroll', 'stick_permanent' )
|
|
)
|
|
),
|
|
|
|
//sticy section custom width
|
|
array(
|
|
"type" => "textfield",
|
|
"heading" => __("Custom Width", "ultimate_vc"),
|
|
"param_name" => "sticky_custom_width",
|
|
"description" => __("Ex : 20px, 20%, 20em", "ultimate_vc"),
|
|
"dependency" => array(
|
|
"element" => "sticky_width",
|
|
"value" => "customwidth"
|
|
)
|
|
),
|
|
|
|
//sticky section position
|
|
array(
|
|
"type" => "dropdown",
|
|
"class" => "",
|
|
"heading" => __( "Sticky Section Postion Top / Bottom", "ultimate_vc" ),
|
|
"param_name" => "sticky_position",
|
|
"value" => array(
|
|
'Top' => '',
|
|
'Bottom' => 'bottom'
|
|
),
|
|
"description" => __( "Set the postion of container", "ultimate_vc" ),
|
|
"dependency" => array(
|
|
"element" => "stick_behaviour",
|
|
"value" => array( 'stick_permanent' )
|
|
)
|
|
),
|
|
|
|
//permanent position
|
|
array(
|
|
"type" => "dropdown",
|
|
"class" => "",
|
|
"heading" => __( "Sticky Section Postion Left / Right", "ultimate_vc" ),
|
|
"param_name" => "sticky_position_lr",
|
|
"value" => array(
|
|
'Left' => 'left',
|
|
'Right' => 'right'
|
|
),
|
|
"description" => __( "Default is Left : 0px ", "ultimate_vc" ),
|
|
"dependency" => array(
|
|
"element" => "stick_behaviour",
|
|
"value" => "stick_permanent"
|
|
)
|
|
),
|
|
|
|
array(
|
|
"type" => "textfield",
|
|
"heading" => __( "Value", "ultimate_vc" ),
|
|
"param_name" => "permanent_lr",
|
|
"description" => __("Ex : 20px, 20%, 20em", "ultimate_vc"),
|
|
"dependency" => array(
|
|
"element" => "sticky_position_lr",
|
|
"value" => array( "left", "right")
|
|
)
|
|
),
|
|
|
|
//num value
|
|
array(
|
|
"type" => "number",
|
|
"heading" => __("Gutter Space", "ultimate_vc"),
|
|
"param_name" => "sticky_gutter",
|
|
"suffix" => "px",
|
|
"description" => __("Ex : 20", "ultimate_vc"),
|
|
|
|
),
|
|
|
|
/*array(
|
|
"type" => "number",
|
|
"heading" => __("Postion From Right", "ultimate_vc"),
|
|
"param_name" => "permanent_right",
|
|
"description" => __("Ex : 20px, 20%, 20em", "ultimate_vc"),
|
|
"dependency" => array(
|
|
"element" => "stick_behaviour",
|
|
"value" => "stick_permanent"
|
|
)
|
|
),*/
|
|
/*array(
|
|
"type" => "ultimate_spacing",
|
|
"heading" => __("Postion", "ultimate_vc"),
|
|
"param_name" => "position",
|
|
"mode" => "padding", // margin/padding
|
|
"unit" => "px", // [required] px,em,%,all Default all
|
|
"positions" => array( // Also set 'defaults'
|
|
__("Top","ultimate_vc") => "",
|
|
__("Right","ultimate_vc") => "",
|
|
__("Bottom","ultimate_vc") => "",
|
|
__("Left","ultimate_vc") => ""
|
|
),
|
|
"dependency" => array(
|
|
"element" => "stick_behaviour",
|
|
"value" => "stick_permanent"
|
|
)
|
|
),*/
|
|
|
|
array(
|
|
"type" => "ult_switch",
|
|
"class" => "",
|
|
"heading" => __("Enable on Mobile", "ultimate_vc"),
|
|
"param_name" => "btn_mobile",
|
|
"value" => "",
|
|
"options" => array(
|
|
"enable" => array(
|
|
"label" => "",
|
|
"on" => "Yes",
|
|
"off" => "No",
|
|
)
|
|
),
|
|
"description" => __("Enable Sticky Element on Smartphone.", "ultimate_vc"),
|
|
"dependency" => Array("element" => "stick_behaviour", "value" => array( 'stick_with_scroll_row', 'stick_with_scroll','stick_permanent' )),
|
|
),
|
|
|
|
array(
|
|
"type" => "ult_switch",
|
|
"class" => "",
|
|
"heading" => __("Enable support", "ultimate_vc"),
|
|
"param_name" => "btn_support",
|
|
"value" => "",
|
|
"options" => array(
|
|
"enable" => array(
|
|
"label" => "",
|
|
"on" => "Yes",
|
|
"off" => "No",
|
|
)
|
|
),
|
|
"description" => __("Enable this incase Sticky Element not working.", "ultimate_vc"),
|
|
"dependency" => Array("element" => "stick_behaviour", "value" => array( 'stick_with_scroll' )),
|
|
),
|
|
|
|
array(
|
|
"type" => "textfield",
|
|
"heading" => __("Extra class name", "ultimate_vc"),
|
|
"param_name" => "el_class",
|
|
"description" => __("If you wish to style particular content element differently, then use this field to add a class name and then refer to it in your css file.", "ultimate_vc")
|
|
),
|
|
),
|
|
"js_view" => 'VcColumnView'
|
|
)
|
|
);//end vc_map
|
|
}//end vc_map checker
|
|
}//end function sticky_shotcode_mapper
|
|
|
|
//Add Script
|
|
function ult_sticky_section_scripts() {
|
|
|
|
Ultimate_VC_Addons::ultimate_register_script( 'ult_sticky_js', 'fixto', false, array( 'jquery' ), ULTIMATE_VERSION, true );
|
|
|
|
Ultimate_VC_Addons::ultimate_register_script( 'ult_sticky_section_js', 'sticky-section', false, array('ult_sticky_js'), ULTIMATE_VERSION, true );
|
|
|
|
Ultimate_VC_Addons::ultimate_register_style( 'ult_sticky_section_css', 'sticky-section' );
|
|
|
|
}//ult_sticky_section_class
|
|
|
|
|
|
}//end class Ultimate_Sticky_Section
|
|
|
|
|
|
// Instantiate the class
|
|
new Ultimate_Sticky_Section;
|
|
|
|
if ( class_exists( 'WPBakeryShortCodesContainer' ) && !class_exists( 'WPBakeryShortCode_ult_sticky_section' ) ) {
|
|
class WPBakeryShortCode_ult_sticky_section extends WPBakeryShortCodesContainer {
|
|
}
|
|
}
|
|
} |