You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

316 lines
8.2 KiB

<?php
/*
Widget Name: Features
Description: Displays a block of features with icons.
Author: SiteOrigin
Author URI: https://siteorigin.com
*/
class SiteOrigin_Widget_Features_Widget extends SiteOrigin_Widget {
function __construct() {
parent::__construct(
'sow-features',
__( 'SiteOrigin Features', 'so-widgets-bundle' ),
array(
'description' => __( 'Displays a list of features.', 'so-widgets-bundle' ),
'help' => 'https://siteorigin.com/widgets-bundle/features-widget-documentation/'
),
array(),
false,
plugin_dir_path(__FILE__)
);
}
function initialize() {
$this->register_frontend_styles(
array(
array(
'siteorigin-widgets',
plugin_dir_url(__FILE__) . 'css/style.css',
array(),
SOW_BUNDLE_VERSION
)
)
);
}
function get_widget_form(){
return array(
'features' => array(
'type' => 'repeater',
'label' => __('Features', 'so-widgets-bundle'),
'item_name' => __('Feature', 'so-widgets-bundle'),
'item_label' => array(
'selector' => "[id*='features-title']",
'update_event' => 'change',
'value_method' => 'val'
),
'fields' => array(
// The container shape
'container_color' => array(
'type' => 'color',
'label' => __('Container color', 'so-widgets-bundle'),
'default' => '#404040',
),
'container_position' => array(
'type' => 'select',
'label' => __('Container Position', 'so-widgets-bundle'),
'options' => array(
'top' => __( 'Top', 'so-widgets-bundle' ),
'right' => __( 'Right', 'so-widgets-bundle' ),
'bottom' => __( 'Bottom', 'so-widgets-bundle' ),
'left' => __( 'Left', 'so-widgets-bundle' ),
),
'default' => 'top',
),
// The Icon
'icon' => array(
'type' => 'icon',
'label' => __('Icon', 'so-widgets-bundle'),
),
'icon_title' => array(
'type' => 'text',
'label' => __( 'Icon title', 'so-widgets-bundle' ),
),
'icon_color' => array(
'type' => 'color',
'label' => __('Icon color', 'so-widgets-bundle'),
'default' => '#FFFFFF',
),
'icon_image' => array(
'type' => 'media',
'library' => 'image',
'label' => __('Icon image', 'so-widgets-bundle'),
'description' => __('Use your own icon image.', 'so-widgets-bundle'),
),
'icon_image_size' => array(
'type' => 'image-size',
'label' => __('Icon image size', 'so-widgets-bundle'),
),
// The text under the icon
'title' => array(
'type' => 'text',
'label' => __('Title text', 'so-widgets-bundle'),
),
'text' => array(
'type' => 'tinymce',
'label' => __('Text', 'so-widgets-bundle')
),
'more_text' => array(
'type' => 'text',
'label' => __('More link text', 'so-widgets-bundle'),
),
'more_url' => array(
'type' => 'link',
'label' => __('More link URL', 'so-widgets-bundle'),
),
),
),
'fonts' => array(
'type' => 'section',
'label' => __( 'Font Design', 'so-widgets-bundle' ),
'hide' => true,
'fields' => array(
'title_options' => array(
'type' => 'section',
'label' => __( 'Title', 'so-widgets-bundle' ),
'hide' => true,
'fields' => array(
'font' => array(
'type' => 'font',
'label' => __( 'Font', 'so-widgets-bundle' ),
'default' => 'default'
),
'size' => array(
'type' => 'measurement',
'label' => __( 'Size', 'so-widgets-bundle' ),
),
'color' => array(
'type' => 'color',
'label' => __( 'Color', 'so-widgets-bundle' ),
)
)
),
'text_options' => array(
'type' => 'section',
'label' => __( 'Text', 'so-widgets-bundle' ),
'hide' => true,
'fields' => array(
'font' => array(
'type' => 'font',
'label' => __( 'Font', 'so-widgets-bundle' ),
'default' => 'default'
),
'size' => array(
'type' => 'measurement',
'label' => __( 'Size', 'so-widgets-bundle' ),
),
'color' => array(
'type' => 'color',
'label' => __( 'Color', 'so-widgets-bundle' ),
)
)
),
'more_text_options' => array(
'type' => 'section',
'label' => __( 'More Link', 'so-widgets-bundle' ),
'hide' => true,
'fields' => array(
'font' => array(
'type' => 'font',
'label' => __( 'Font', 'so-widgets-bundle' ),
'default' => 'default'
),
'size' => array(
'type' => 'measurement',
'label' => __( 'Size', 'so-widgets-bundle' ),
),
'color' => array(
'type' => 'color',
'label' => __( 'Color', 'so-widgets-bundle' ),
)
)
),
),
),
'container_shape' => array(
'type' => 'select',
'label' => __('Container shape', 'so-widgets-bundle'),
'default' => 'round',
'options' => include dirname( __FILE__ ) . '/inc/containers.php',
),
'container_size' => array(
'type' => 'measurement',
'label' => __('Container size', 'so-widgets-bundle'),
'default' => '84px',
),
'icon_size' => array(
'type' => 'measurement',
'label' => __('Icon size', 'so-widgets-bundle'),
'default' => '24px',
),
'icon_size_custom' => array(
'type' => 'checkbox',
'label' => __( 'Use icon size for custom icon', 'so-widgets-bundle' ),
'default' => false,
),
'per_row' => array(
'type' => 'number',
'label' => __('Features per row', 'so-widgets-bundle'),
'default' => 3,
),
'responsive' => array(
'type' => 'checkbox',
'label' => __('Responsive layout', 'so-widgets-bundle'),
'default' => true,
),
'title_link' => array(
'type' => 'checkbox',
'label' => __('Link feature title to more URL', 'so-widgets-bundle'),
'default' => false,
),
'icon_link' => array(
'type' => 'checkbox',
'label' => __('Link icon to more URL', 'so-widgets-bundle'),
'default' => false,
),
'new_window' => array(
'type' => 'checkbox',
'label' => __('Open more URL in a new window', 'so-widgets-bundle'),
'default' => false,
),
);
}
function get_less_variables( $instance ) {
$less_vars = array();
$fonts = $instance['fonts'];
$styleable_text_fields = array( 'title', 'text', 'more_text' );
foreach ( $styleable_text_fields as $field_name ) {
if ( ! empty( $fonts[$field_name.'_options'] ) ) {
$styles = $fonts[$field_name.'_options'];
if ( ! empty( $styles['size'] ) ) {
$less_vars[$field_name.'_size'] = $styles['size'];
}
if ( ! empty( $styles['color'] ) ) {
$less_vars[$field_name.'_color'] = $styles['color'];
}
if ( ! empty( $styles['font'] ) ) {
$font = siteorigin_widget_get_font( $styles['font'] );
$less_vars[$field_name.'_font'] = $font['family'];
if ( ! empty( $font['weight'] ) ) {
$less_vars[$field_name.'_font_weight'] = $font['weight'];
}
}
}
}
$less_vars['container_size'] = $instance['container_size'];
$less_vars['icon_size'] = $instance['icon_size'];
$less_vars['use_icon_size'] = empty( $instance['icon_size_custom'] ) ? 'false' : 'true';
$global_settings = $this->get_global_settings();
if ( ! empty( $global_settings['responsive_breakpoint'] ) ) {
$less_vars['responsive_breakpoint'] = $global_settings['responsive_breakpoint'];
}
return $less_vars;
}
function get_settings_form() {
return array(
'responsive_breakpoint' => array(
'type' => 'measurement',
'label' => __( 'Responsive Breakpoint', 'so-widgets-bundle' ),
'default' => '520px',
'description' => __( 'This setting controls when the features widget will collapse for mobile devices. The default value is 520px', 'so-widgets-bundle' )
)
);
}
function get_google_font_fields( $instance ) {
$fonts = $instance['fonts'];
return array(
$fonts['title_options']['font'],
$fonts['text_options']['font'],
$fonts['more_text_options']['font'],
);
}
}
siteorigin_widget_register('sow-features', __FILE__, 'SiteOrigin_Widget_Features_Widget');