Repository URL to install this package:
|
Version:
3.7.1 ▾
|
<?php
/**
* Superbox Component Class
*
* @since 2.0
* @author Louis & Ilya
*/
class Oxygen_VSB_SuperBox extends CT_Component{
public $param_array = array();
public $data_array = array();
var $js_added = false;
function __construct($options) {
// run initialization
$this->init( $options );
// Add shortcodes
add_shortcode( $this->options['tag'], array( $this, 'shortcode' ) );
for ( $i = 2; $i <= 16; $i++ ) {
add_shortcode( $this->options['tag'] . "_" . $i, array( $this, 'shortcode' ) );
}
// change component button place
remove_action("ct_toolbar_fundamentals_list", array( $this, "component_button" ) );
add_action("oxygen_helpers_components_interactive", array( $this, "component_button" ) );
// add white list options
add_filter("oxy_options_white_list", array( $this, "white_list_options") );
// all the options can be unset, so we can use the same white_list_options callback
add_filter("oxy_allowed_empty_options_list", array( $this, "white_list_options") );
// generate defaults styles class
add_action("oxygen_default_classes_output", array( $this, "generate_defaults_css" ) );
// generate user styles class
add_filter("oxygen_user_classes_output", array( $this, "generate_classes_css"), 10, 7);
// generate #id stlyes
add_filter("oxy_component_css_styles", array( $this, "generate_id_css"), 10, 5);
// add specific options
add_action("ct_toolbar_component_settings", array( $this, "builder_settings"), 90 );
}
/**
* Generate CSS for arrays parameters only
*
* @since 2.0
* @author Ilya
*/
function white_list_options($options) {
$options_to_add = array(
// TODO: make it fetch from params automatically based on some flag
"superbox_transition_duration",
"superbox_secondary_opacity_start",
"superbox_secondary_opacity_finish",
"superbox_secondary_scale_start",
"superbox_secondary_scale_finish",
"superbox_secondary_slide_inorout" ,
"superbox_secondary_slide_direction",
"superbox_secondary_slide_distance",
"superbox_primary_opacity_start",
"superbox_primary_opacity_finish",
"superbox_primary_scale_start",
"superbox_primary_scale_finish",
"superbox_primary_slide_inorout",
"superbox_primary_slide_direction",
"superbox_primary_slide_distance",
);
$options = array_merge($options, $options_to_add);
return $options;
}
/**
* Generate CSS based on shortcode params
*
* @since 2.0
* @author Ilya
*/
function generate_defaults_css() {
$options = $this->set_options(
// use fake JSON object to prevent set_options from stop due to empty object
// TODO: make proper changes to set_options to avoid this hack
array("ct_options"=>'{"key":1}')
);
$options['selector'] = ".oxy-superbox";
echo $this->generate_css($options, true);
}
/**
* Generate CSS for user custom classes
*
* @since 2.0
* @author Ilya
*/
function generate_classes_css($css, $class, $state, $options, $is_media = false, $is_selector = false, $defaults) {
if ($is_selector) {
return $css;
}
$is_component = false;
foreach ($options as $key => $value) {
if (strpos($key,"superbox_")!==false) {
$is_component = true;
break;
}
}
$options['selector'] = ".".$class;
if ($is_component) {
$css .= $this->generate_css($options, true, $defaults[$this->options['tag']]);
$is_component = false;
}
return $css;
}
/**
* Generate ID styles
*
* @since 2.0
* @author Ilya
*/
function generate_id_css($styles, $states, $selector, $class_obj, $defaults) {
if ($class_obj->options['tag'] != $this->options['tag']){
return $styles;
}
$params = $states['original'];
$params['selector'] = $selector;
return $styles . $this->generate_css($params, false, $defaults);
}
/**
*
*
* @since 2.0
* @author Louis
*/
function position_css($position, $forcein = false) {
ob_start();
foreach ($position as $prop => $val) {
if ($forcein == true) {
if ($val !== null) {
$val = '0';
}
}
if ($val !== null) {
echo $prop.": ".$val.";";
}
}
return ob_get_clean();
}
/**
*
*
* @since 2.0
* @author Louis
*/
function slide_position($direction, $distanceoverride = "") {
$distance = '100%';
if ($distanceoverride !== "" && $distanceoverride !== "px") {
$distance = $distanceoverride;
}
switch ($direction) {
case 'left':
$position['left'] = '-'.$distance;
break;
case 'right':
$position['left'] = ''.$distance;
break;
case 'top':
$position['top'] = '-'.$distance;
break;
case 'bottom':
$position['top'] = ''.$distance;
break;
}
$return['out_css'] = $this->position_css($position); // css for positioning the slide out of the superbox
$return['in_css'] = $this->position_css($position, true); // css for positinoing the slide in the superbox
return $return;
}
/**
* Generate CSS for arrays parameters only
*
* @since 2.0
* @author Louis
*/
function generate_css($params=false, $class=false, $defaults=array()) {
if ($params===false) {
$params = $this->param_array;
}
if ($class===false) {
$params["selector"] = "#".$params["selector"];
}
// scaling
if(isset($params['superbox_secondary_scale_start'])) $superbox_secondary_scale_start = $params['superbox_secondary_scale_start'];
if(isset($params['superbox_secondary_scale_finish'])) $superbox_secondary_scale_finish = $params['superbox_secondary_scale_finish'];
if(isset($params['superbox_primary_scale_start'])) $superbox_primary_scale_start = $params['superbox_primary_scale_start'];
if(isset($params['superbox_primary_scale_finish'])) $superbox_primary_scale_finish = $params['superbox_primary_scale_finish'];
if (isset($superbox_secondary_scale_start) && $superbox_secondary_scale_start!="") $superbox_secondary_scale_start_transform_css = "transform: scale(".$superbox_secondary_scale_start.");";
if (isset($superbox_secondary_scale_finish) && $superbox_secondary_scale_finish!="") $superbox_secondary_scale_finish_transform_css = "transform: scale(".$superbox_secondary_scale_finish.");";
if (isset($superbox_primary_scale_start) && $superbox_primary_scale_start!="") $superbox_primary_scale_start_transform_css = "transform: scale(".$superbox_primary_scale_start.");";
if (isset($superbox_primary_scale_finish) && $superbox_primary_scale_finish!="") $superbox_primary_scale_finish_transform_css = "transform: scale(".$superbox_primary_scale_finish.");";
// sliding
if (isset($params['superbox_secondary_slide_direction']) && $params['superbox_secondary_slide_direction']) {
$css = $this->slide_position($params['superbox_secondary_slide_direction'], $params['superbox_secondary_slide_distance']."px");
if ($params['superbox_secondary_slide_inorout'] == "in") {
$superbox_secondary_initial_css = $css['out_css'];
$superbox_secondary_hover_css = $css['in_css'];
} else if ($params['superbox_secondary_slide_inorout'] == "out") {
$superbox_secondary_initial_css = $css['in_css'];
$superbox_secondary_hover_css = $css['out_css'];
}
}
if (isset($params['superbox_primary_slide_direction']) && $params['superbox_primary_slide_direction']) {
$css = $this->slide_position($params['superbox_primary_slide_direction'], $params['superbox_primary_slide_distance']."px");
if ($params['superbox_primary_slide_inorout'] == "in") {
$superbox_primary_initial_css = $css['out_css'];
$superbox_primary_hover_css = $css['in_css'];
} else if ($params['superbox_primary_slide_inorout'] == "out") {
$superbox_primary_initial_css = $css['in_css'];
$superbox_primary_hover_css = $css['out_css'];
}
}
ob_start();
?>
<?php if(isset($params['superbox_transition_duration'])) : ?>
<?php echo $params['selector']; ?> .oxy-superbox-secondary,
<?php echo $params['selector']; ?> .oxy-superbox-primary {
<?php $this->output_single_css_property("transition-duration", $params['superbox_transition_duration']); ?>
}
<?php endif; ?>
<?php if ( (isset($params['superbox_secondary_opacity_start']) && $params['superbox_secondary_opacity_start'] != "") ||
(isset($superbox_secondary_initial_css) && $superbox_secondary_initial_css != "") ||
(isset($superbox_secondary_scale_start_transform_css) && $superbox_secondary_scale_start_transform_css != "")
) : ?>
<?php echo $params['selector']; ?> .oxy-superbox-secondary {
<?php if(isset($params['superbox_secondary_opacity_start'])) $this->output_single_css_property("opacity", $params['superbox_secondary_opacity_start']); ?>
<?php if(isset($superbox_secondary_initial_css)) echo $superbox_secondary_initial_css; ?>
<?php if(isset($superbox_secondary_scale_start_transform_css)) echo $superbox_secondary_scale_start_transform_css; ?>
}
<?php endif; ?>
<?php if ( ( isset($params['superbox_secondary_opacity_finish']) && $params['superbox_secondary_opacity_finish'] != "" )||
( isset($superbox_secondary_hover_css) && $superbox_secondary_hover_css != "" ) ||
( isset($superbox_secondary_scale_finish_transform_css) && $superbox_secondary_scale_finish_transform_css != "" )
) : ?>
<?php echo $params['selector']; ?>:hover .oxy-superbox-secondary {
<?php if(isset($params['superbox_secondary_opacity_finish'])) $this->output_single_css_property("opacity", $params['superbox_secondary_opacity_finish']); ?>
<?php if(isset($superbox_secondary_hover_css)) echo $superbox_secondary_hover_css; ?>
<?php if(isset($superbox_secondary_scale_finish_transform_css)) echo $superbox_secondary_scale_finish_transform_css; ?>
}
<?php endif; ?>
<?php if ( ( isset($params['superbox_primary_opacity_start']) && $params['superbox_primary_opacity_start'] != "" )||
( isset($superbox_primary_initial_css) && $superbox_primary_initial_css != "" ) ||
( isset($superbox_primary_scale_start_transform_css) && $superbox_primary_scale_start_transform_css != "" )
) : ?>
<?php echo $params['selector']; ?> .oxy-superbox-primary {
<?php if(isset($params['superbox_primary_opacity_start'])) $this->output_single_css_property("opacity", $params['superbox_primary_opacity_start']); ?>
<?php if(isset($superbox_primary_initial_css)) echo $superbox_primary_initial_css; ?>
<?php if(isset($superbox_primary_scale_start_transform_css)) echo $superbox_primary_scale_start_transform_css; ?>
}
<?php endif; ?>
<?php if ( ( isset($params['superbox_primary_opacity_finish']) && $params['superbox_primary_opacity_finish'] != "" )||
( isset($superbox_primary_hover_css) && $superbox_primary_hover_css != "" )||
( isset($superbox_primary_scale_finish_transform_css) && $superbox_primary_scale_finish_transform_css != "" )
): ?>
<?php echo $params['selector']; ?>:hover .oxy-superbox-primary {
<?php if(isset($params['superbox_primary_opacity_finish'])) $this->output_single_css_property("opacity", $params['superbox_primary_opacity_finish']); ?>
<?php if(isset($superbox_primary_hover_css)) echo $superbox_primary_hover_css; ?>
<?php if(isset($superbox_primary_scale_finish_transform_css)) echo $superbox_primary_scale_finish_transform_css; ?>
}
<?php endif; ?>
<?php return ob_get_clean();
}
/**
* Shortcode output
*
* @since 2.0
* @author Louis & Ilya
*/
function shortcode($atts, $content = null, $name = null ) {
if ( ! $this->validate_shortcode( $atts, $content, $name ) ) {
return '';
}
$options = $this->set_options( $atts );
$this->param_array[$options['id']] = $options;
ob_start(); ?>
<div id='<?php echo esc_attr($options['selector']); ?>' class='<?php echo esc_attr($options['classes']); ?>' <?php do_action("oxygen_vsb_component_attr", $options, $this->options['tag']); ?>>
<div class='oxy-superbox-wrap'>
<?php $this->output_builtin_shortcodes( $content ); ?>
</div>
</div>
<?php $html = ob_get_clean();
return $html;
}
/**
* Output JS for toggle menu in responsive mode
*
* @since 2.0
* @author Ilya K.
*/
function output_js() { ?>
<script type="text/javascript">
jQuery('document').ready(function() {
jQuery('.oxy-superbox')
.on('touchstart', function () {
jQuery(this).trigger('hover');
})
.on('touchend', function () {
jQuery(this).trigger('hover');
});
});
</script>
<?php }
/**
* Output settings to control the view Superbox shown in builder
*
* @since 2.0
* @author Ilya K.
*/
function builder_settings() {
global $oxygen_toolbar; ?>
<div class="oxygen-sidebar-flex-panel"
ng-hide="!isActiveName('oxy_superbox')||hasOpenTabs('oxy_superbox')">
<div class="oxygen-control-row">
<div class='oxygen-control-wrapper'>
<label class='oxygen-control-label'><?php _e("Superbox Editing Mode","oxygen"); ?></label>
<div class='oxygen-control'>
<div class="oxygen-select oxygen-select-box-wrapper">
<div class="oxygen-select-box">
<div class="oxygen-select-box-current">{{iframeScope.getSuperBoxEditingModeTitle()}}</div>
<div class="oxygen-select-box-dropdown"></div>
</div>
<div class="oxygen-select-box-options">
<div class="oxygen-select-box-option"
ng-click="iframeScope.setOptionModel('superbox_editing_mode','primary_only')"><?php _e("Show Primary Only","oxygen"); ?></div>
<div class="oxygen-select-box-option"
ng-click="iframeScope.setOptionModel('superbox_editing_mode','secondary_only')"><?php _e("Show Secondary Only","oxygen") ?></div>
<div class="oxygen-select-box-option"
ng-click="iframeScope.setOptionModel('superbox_editing_mode','as_hovered')"><?php _e("As If Hovered","oxygen")?></div>
<div class="oxygen-select-box-option"
ng-click="iframeScope.setOptionModel('superbox_editing_mode','as_not_hovered')"><?php _e("As If Not Hovered","oxygen") ?></div>
<div class="oxygen-select-box-option"
ng-click="iframeScope.setOptionModel('superbox_editing_mode','live')"><?php _e("Live","oxygen") ?></div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php }
}
global $oxygen_vsb_components;
$oxygen_vsb_components['superbox'] = new Oxygen_VSB_SuperBox( array(
'name' => __('Superbox','oxygen'),
'tag' => 'oxy_superbox',
'params'=> array(
array(
"type" => "textfield",
"heading" => __("Animation Speed","oxygen"),
"param_name" => "superbox_transition_duration",
"value" => "0.5s",
),
),
'tabs' => array(
'superbox_primary' => array(
'heading' => __('Primary','oxygen'),
'params' => array(
array(
"type" => "radio",
"heading" => __("Slide To", "oxygen"),
"param_name" => "superbox_primary_slide_inorout",
"value" => array(
'in' => __("in to view", "oxygen"),
'out' => __("out of view", "oxygen"),
),
"default" => "",
"css" => false,
),
array(
"type" => "radio",
"heading" => __("Slide Direction", "oxygen"),
"param_name" => "superbox_primary_slide_direction",
"value" => array(
'top' => __("top", "oxygen"),
'left' => __("left", "oxygen"),
'right' => __("right", "oxygen"),
'bottom' => __("bottom", "oxygen"),
),
"default" => "",
"css" => false,
),
array(
"type" => "slider-measurebox",
"heading" => __("Initial Opacity", "oxygen"),
"param_name" => "superbox_primary_opacity_start",
"value" => "",
"param_units" => " ",
"min" => 0,
"max" => 1,
"step" => 0.1,
"css" => false,
),
array(
"type" => "slider-measurebox",
"heading" => __("Opacity on Hover", "oxygen"),
"param_name" => "superbox_primary_opacity_finish",
"value" => "",
"param_units" => " ",
"min" => 0,
"max" => 1,
"step" => 0.1,
"css" => false,
),
array(
"type" => "slider-measurebox",
"heading" => __("Initial Scale", "oxygen"),
"param_name" => "superbox_primary_scale_start",
"value" => "",
"param_units" => " ",
"min" => 0,
"max" => 10,
"css" => false,
),
array(
"type" => "slider-measurebox",
"heading" => __("Scale on Hover", "oxygen"),
"param_name" => "superbox_primary_scale_finish",
"value" => "",
"param_units" => " ",
"min" => 0,
"max" => 10,
"css" => false,
),
array(
"type" => "measurebox",
"heading" => __("Override Initial Slide Position","oxygen"),
"param_name" => "superbox_primary_slide_distance",
"value" => "",
"param_units" => "px"
),
array(
"param_name" => "superbox_primary_slide_distance-unit",
"value" => "px",
"hidden" => true,
),
),
),
'superbox_secondary' => array(
'heading' => __('Secondary','oxygen'),
'params' => array(
array(
"type" => "radio",
"heading" => __("Slide To", "oxygen"),
"param_name" => "superbox_secondary_slide_inorout",
"value" => array(
'in' => __("in to view", "oxygen"),
'out' => __("out of view", "oxygen"),
),
"default" => "",
"css" => false,
),
array(
"type" => "radio",
"heading" => __("Slide Direction", "oxygen"),
"param_name" => "superbox_secondary_slide_direction",
"value" => array(
'top' => __("top", "oxygen"),
'left' => __("left", "oxygen"),
'right' => __("right", "oxygen"),
'bottom' => __("bottom", "oxygen"),
),
"default" => "",
"css" => false,
),
array(
"type" => "slider-measurebox",
"heading" => __("Initial Opacity", "oxygen"),
"param_name" => "superbox_secondary_opacity_start",
"value" => "",
"param_units" => " ",
"min" => 0,
"max" => 1,
"step" => 0.1,
"css" => false,
),
array(
"type" => "slider-measurebox",
"heading" => __("Opacity on Hover", "oxygen"),
"param_name" => "superbox_secondary_opacity_finish",
"value" => "",
"param_units" => " ",
"min" => 0,
"max" => 1,
"step" => 0.1,
"css" => false,
),
array(
"type" => "slider-measurebox",
"heading" => __("Initial Scale", "oxygen"),
"param_name" => "superbox_secondary_scale_start",
"value" => "",
"param_units" => " ",
"min" => 0,
"max" => 10,
"css" => false,
),
array(
"type" => "slider-measurebox",
"heading" => __("Scale on Hover", "oxygen"),
"param_name" => "superbox_secondary_scale_finish",
"value" => "",
"param_units" => " ",
"min" => 0,
"max" => 10,
"css" => false,
),
array(
"type" => "measurebox",
"heading" => __("Override Initial Slide Position","oxygen"),
"param_name" => "superbox_secondary_slide_distance",
"value" => "",
"param_units" => "px"
),
array(
"param_name" => "superbox_secondary_slide_distance-unit",
"value" => "px",
"hidden" => true,
),
),
),
),
'advanced' => array(
"other" => array(
"values" => array (
"superbox_editing_mode" => "live"
)
),
)
)
);