| Current Path : /var/www/components/com_sppagebuilder/addons/divider/ |
| Current File : /var/www/components/com_sppagebuilder/addons/divider/site.php |
<?php
/**
* @package SP Page Builder
* @author JoomShaper http://www.joomshaper.com
* @copyright Copyright (c) 2010 - 2025 JoomShaper
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or later
*/
use Joomla\CMS\Uri\Uri;
//no direct access
defined('_JEXEC') or die('Restricted access');
class SppagebuilderAddonDivider extends SppagebuilderAddons
{
public function render()
{
$settings = $this->addon->settings;
$class = (isset($settings->class) && $settings->class) ? $settings->class : '';
$divider_type = (isset($settings->divider_type) && $settings->divider_type) ? $settings->divider_type : '';
//output start
$output = '';
$output .= '<div class="sppb-addon-divider-wrap divider-position">';
$output .= '<div class="sppb-divider sppb-divider-' . $divider_type . ' ' . $class . '" role="none"></div>';
$output .= '</div>';
return $output;
}
public function css()
{
$addon_id = '#sppb-addon-' . $this->addon->id;
$settings = $this->addon->settings;
$cssHelper = new CSSHelper($addon_id);
$divider_type = (isset($settings->divider_type) && $settings->divider_type) ? $settings->divider_type : '';
$divider_image = (isset($settings->divider_image) && $settings->divider_image) ? $settings->divider_image : '';
$divider_image_src = isset($divider_image->src) ? $divider_image->src : $divider_image;
$background_repeat = (isset($settings->background_repeat) && $settings->background_repeat) ? $settings->background_repeat : 'no-repeat';
$divider_vertical = (isset($settings->divider_vertical) && $settings->divider_vertical) ? $settings->divider_vertical : '';
$css = '';
$innerStyle = '';
$dividerProps = [
'margin_top' => 'margin-top',
'margin_bottom' => 'margin-bottom',
'container_div_width' => 'width'
];
if ($divider_type === 'border')
{
if (!$divider_vertical)
{
$dividerProps = array_merge($dividerProps, [
'border_width' => 'border-bottom-width',
'border_style' => 'border-bottom-style',
'border_color' => 'border-bottom-color',
'border_radius' => 'border-radius',
]);
}
else
{
// If we use border_width as key name then it will override the the previous value of border_width which is the border-left-width.
$settings->divider_width = $settings->border_width;
$dividerProps = array_merge($dividerProps, [
'border_width' => 'border-left-width',
'border_style' => 'border-left-style',
'border_color' => 'border-left-color',
'border_radius' => 'border-radius',
'divider_height_vertical' => 'height',
'divider_width' => 'width'
]);
}
}
else
{
$dividerProps['divider_height'] = 'height';
if (strpos($divider_image_src, 'http://') !== false || strpos($divider_image_src, 'https://') !== false)
{
$innerStyle .= ($divider_image_src) ? 'background-image: url(' . $divider_image_src . ');background-repeat:' . $background_repeat . ';background-position:50% 50%;' : '';
}
else
{
$innerStyle .= ($divider_image_src) ? 'background-image: url(' . Uri::base() . '/' . $divider_image_src . ');background-repeat:' . $background_repeat . ';background-position:50% 50%;' : '';
}
}
$units = ['border_style' => false, 'border_color' => false];
// Alignment Style
$settings->divider_position = CSSHelper::parseAlignment($settings, 'divider_position');
$css .= $cssHelper->generateStyle('.divider-position', $settings, ['divider_position' => 'text-align'], false);
$dividerStyle = $cssHelper->generateStyle('.sppb-divider', $settings, $dividerProps, $units);
$css .= $dividerStyle;
$transformCss = $cssHelper->generateTransformStyle('.sppb-divider', $settings, 'transform');
$css .= $transformCss;
if ($innerStyle)
{
$css .= $addon_id . ' .sppb-divider {';
$css .= $innerStyle;
$css .= '}';
}
return $css;
}
public static function getTemplate()
{
$lodash = new Lodash('#sppb-addon-{{ data.id }}');
$output = '<style type="text/css">';
$output .= $lodash->unit('margin-top', '.sppb-divider', 'data.margin_top', 'px');
$output .= $lodash->unit('margin-bottom', '.sppb-divider', 'data.margin_bottom', 'px');
$output .= $lodash->unit('width', '.sppb-divider', 'data.container_div_width', 'px');
$output .= $lodash->alignment('text-align', '.divider-position', 'data.divider_position');
$output .= '<# if(data.divider_type == "border") { #>';
$output .= $lodash->unit('border-radius', '.sppb-divider', 'data.border_radius', 'px');
$output .= '<# if(!data.divider_vertical) { #>';
$output .= $lodash->unit('border-bottom-width', '.sppb-divider', 'data.border_width', 'px');
$output .= $lodash->unit('border-bottom-style', '.sppb-divider', 'data.border_style', '', false);
$output .= $lodash->unit('border-bottom-color', '.sppb-divider', 'data.border_color', '', false);
$output .= '<# } else { #>';
$output .= $lodash->unit('height', '.sppb-divider', 'data.divider_height_vertical', 'px');
$output .= $lodash->unit('width', '.sppb-divider', 'data.border_width', 'px');
$output .= $lodash->unit('border-left-width', '.sppb-divider', 'data.border_width', 'px');
$output .= $lodash->unit('border-left-style', '.sppb-divider', 'data.border_style', '', false);
$output .= $lodash->unit('border-left-color', '.sppb-divider', 'data.border_color', '', false);
$output .= '<# } #>';
$output .= '<# } else { #>';
$output .= '<#
let media = {};
let mediaSrc = "";
if (typeof data.divider_image !== "undefined" && typeof data.divider_image.src !== "undefined") {
media = data.divider_image;
} else {
media = {src: data.divider_image};
}
if(media?.src?.indexOf("http://") == -1 && media?.src?.indexOf("https://") == -1) {
mediaSrc = pagebuilder_base + media.src;
} else {
mediaSrc = media.src;
}
#>';
$output .= '.sppb-divider {background-image: url({{mediaSrc}});background-position: 50% 50%;}';
$output .= $lodash->unit('background-repeat', '.sppb-divider', 'data.background_repeat', '', false);
$output .= $lodash->unit('height', '.sppb-divider', 'data.divider_height', 'px');
$output .= '<# } #>';
$output .= $lodash->generateTransformCss('.sppb-divider', 'data.transform');
$output .= '
</style>
<# let dividerPosition = (!_.isEmpty(data.divider_type) && data.divider_type) ? "divider-position" : "";#>
<div class="sppb-addon-divider-wrap {{dividerPosition}}">
<div class="sppb-divider sppb-divider-{{ data.divider_type }} {{ data.class }}" role="none"></div>
</div>';
return $output;
}
}