/*
Widget Name: Button
Description: Create a custom button with flexible styling, icon support, and click tracking functionality.
Author: SiteOrigin
Author URI: https://siteorigin.com
Documentation: https://siteorigin.com/widgets-bundle/button-widget-documentation/
Keywords: event, icon, link
*/
class SiteOrigin_Widget_Button_Widget extends SiteOrigin_Widget {
public function __construct() {
parent::__construct(
'sow-button',
__( 'SiteOrigin Button', 'so-widgets-bundle' ),
array(
'description' => __( 'Create a custom button with flexible styling, icon support, and click tracking functionality.', 'so-widgets-bundle' ),
'help' => 'https://siteorigin.com/widgets-bundle/button-widget-documentation/',
),
array(
),
false,
plugin_dir_path( __FILE__ )
);
}
public function get_settings_form() {
return array(
'responsive_breakpoint' => array(
'type' => 'measurement',
'label' => __( 'Responsive Breakpoint', 'so-widgets-bundle' ),
'default' => '780px',
'description' => __( 'This setting controls when the Mobile Align setting will be used. The default value is 780px.', 'so-widgets-bundle' ),
),
);
}
public function initialize() {
$this->register_frontend_styles(
array(
array(
'sow-button-base',
plugin_dir_url( __FILE__ ) . 'css/style.css',
array(),
SOW_BUNDLE_VERSION,
),
)
);
}
public function get_widget_form() {
return array(
'text' => array(
'type' => 'text',
'label' => __( 'Button Text', 'so-widgets-bundle' ),
),
'url' => array(
'type' => 'link',
'label' => __( 'Destination URL', 'so-widgets-bundle' ),
'allow_shortcode' => true,
),
'new_window' => array(
'type' => 'checkbox',
'default' => false,
'label' => __( 'Open in a new window', 'so-widgets-bundle' ),
),
'download' => array(
'type' => 'checkbox',
'default' => false,
'label' => __( 'Download', 'so-widgets-bundle' ),
'description' => __( 'The Destination URL will be downloaded when a user clicks on the button.', 'so-widgets-bundle' ),
),
'button_icon' => array(
'type' => 'section',
'label' => __( 'Icon', 'so-widgets-bundle' ),
'fields' => array(
'icon_selected' => array(
'type' => 'icon',
'label' => __( 'Icon', 'so-widgets-bundle' ),
),
'icon_color' => array(
'type' => 'color',
'label' => __( 'Icon Color', 'so-widgets-bundle' ),
),
'icon' => array(
'type' => 'media',
'label' => __( 'Image Icon', 'so-widgets-bundle' ),
'description' => __( 'Replaces the icon with your own image icon.', 'so-widgets-bundle' ),
),
'icon_placement' => array(
'type' => 'select',
'label' => __( 'Icon Placement', 'so-widgets-bundle' ),
'default' => 'left',
'options' => array(
'top' => __( 'Top', 'so-widgets-bundle' ),
'right' => __( 'Right', 'so-widgets-bundle' ),
'bottom' => __( 'Bottom', 'so-widgets-bundle' ),
'left' => __( 'Left', 'so-widgets-bundle' ),
),
),
),
),
'design' => array(
'type' => 'section',
'label' => __( 'Design and Layout', 'so-widgets-bundle' ),
'hide' => true,
'fields' => array(
'width' => array(
'type' => 'measurement',
'label' => __( 'Width', 'so-widgets-bundle' ),
'description' => __( 'Leave blank to let the button resize according to content.', 'so-widgets-bundle' ),
),
'align' => array(
'type' => 'select',
'label' => __( 'Align', 'so-widgets-bundle' ),
'default' => 'center',
'options' => array(
'left' => __( 'Left', 'so-widgets-bundle' ),
'right' => __( 'Right', 'so-widgets-bundle' ),
'center' => __( 'Center', 'so-widgets-bundle' ),
'justify' => __( 'Full Width', 'so-widgets-bundle' ),
),
),
'mobile_align' => array(
'type' => 'select',
'label' => __( 'Mobile Align', 'so-widgets-bundle' ),
'default' => 'center',
'options' => array(
'left' => __( 'Left', 'so-widgets-bundle' ),
'right' => __( 'Right', 'so-widgets-bundle' ),
'center' => __( 'Center', 'so-widgets-bundle' ),
'justify' => __( 'Full Width', 'so-widgets-bundle' ),
),
),
'theme' => array(
'type' => 'select',
'label' => __( 'Button Theme', 'so-widgets-bundle' ),
'default' => 'flat',
'options' => array(
'atom' => __( 'Atom', 'so-widgets-bundle' ),
'flat' => __( 'Flat', 'so-widgets-bundle' ),
'wire' => __( 'Wire', 'so-widgets-bundle' ),
),
),
'button_color' => array(
'type' => 'color',
'label' => __( 'Button Color', 'so-widgets-bundle' ),
),
'text_color' => array(
'type' => 'color',
'label' => __( 'Text Color', 'so-widgets-bundle' ),
),
'hover' => array(
'type' => 'checkbox',
'default' => true,
'label' => __( 'Use hover effects', 'so-widgets-bundle' ),
'state_emitter' => array(
'callback' => 'conditional',
'args' => array(
'hover[show]: val',
'hover[hide]: ! val',
),
),
),
'hover_background_color' => array(
'type' => 'color',
'label' => __( 'Hover Background Color', 'so-widgets-bundle' ),
'state_handler' => array(
'hover[show]' => array( 'show' ),
'hover[hide]' => array( 'hide' ),
),
),
'hover_text_color' => array(
'type' => 'color',
'label' => __( 'Hover Text Color', 'so-widgets-bundle' ),
'state_handler' => array(
'hover[show]' => array( 'show' ),
'hover[hide]' => array( 'hide' ),
),
),
'font' => array(
'type' => 'font',
'label' => __( 'Font', 'so-widgets-bundle' ),
'default' => 'default',
),
'font_size' => array(
'type' => 'measurement',
'label' => __( 'Font Size', 'so-widgets-bundle' ),
'default' => '1em',
),
'icon_size' => array(
'type' => 'measurement',
'label' => __( 'Icon Size', 'so-widgets-bundle' ),
'default' => '1.3em',
),
'padding' => array(
'type' => 'measurement',
'label' => __( 'Padding', 'so-widgets-bundle' ),
'default' => '1em',
),
'rounding' => array(
'type' => 'multi-measurement',
'label' => __( 'Rounding', 'so-widgets-bundle' ),
'default' => '0.25em 0.25em 0.25em 0.25em',
'measurements' => array(
'top' => array(
'label' => __( 'Top', 'so-widgets-bundle' ),
),
'right' => array(
'label' => __( 'Right', 'so-widgets-bundle' ),
),
'bottom' => array(
'label' => __( 'Bottom', 'so-widgets-bundle' ),
),
'left' => array(
'label' => __( 'Left', 'so-widgets-bundle' ),
),
),
),
),
),
'attributes' => array(
'type' => 'section',
'label' => __( 'Other Attributes and SEO', 'so-widgets-bundle' ),
'hide' => true,
'fields' => array(
'id' => array(
'type' => 'text',
'label' => __( 'Button ID', 'so-widgets-bundle' ),
'description' => __( 'An ID attribute allows you to target this button in JavaScript.', 'so-widgets-bundle' ),
),
'classes' => array(
'type' => 'text',
'label' => __( 'Button Classes', 'so-widgets-bundle' ),
'description' => __( 'Additional CSS classes added to the button link.', 'so-widgets-bundle' ),
),
'title' => array(
'type' => 'text',
'label' => __( 'Title Attribute', 'so-widgets-bundle' ),
'description' => __( 'Adds a title attribute to the button link.', 'so-widgets-bundle' ),
),
'on_click' => array(
'type' => 'text',
'label' => __( 'Onclick', 'so-widgets-bundle' ),
'description' => __( 'Run this JavaScript when the button is clicked. Ideal for tracking.', 'so-widgets-bundle' ),
'onclick' => true,
),
'rel' => array(
'type' => 'text',
'label' => __( 'Rel Attribute', 'so-widgets-bundle' ),
'description' => __( 'Adds a rel attribute to the button link.', 'so-widgets-bundle' ),
),
),
),
);
}
public function get_style_name( $instance ) {
if ( empty( $instance['design']['theme'] ) ) {
return 'atom';
}
return $instance['design']['theme'];
}
/**
* Get the variables for the Button Widget.
*
* @return array
*/
public function get_template_variables( $instance, $args ) {
$button_attributes = array();
$attributes = $instance['attributes'];
$classes = ! empty( $attributes['classes'] ) ? $attributes['classes'] : '';
if ( ! empty( $classes ) ) {
$classes .= ' ';
}
$classes .= 'sowb-button ow-icon-placement-' . $instance['button_icon']['icon_placement'];
if ( ! empty( $instance['design']['hover'] ) ) {
$classes .= ' ow-button-hover';
}
$button_attributes['class'] = implode(
' ',
array_map(
'sanitize_html_class',
explode( ' ', $classes )
)
);
if ( ! empty( $instance['new_window'] ) ) {
$button_attributes['target'] = '_blank';
$button_attributes['rel'] = 'noopener noreferrer';
}
if ( ! empty( $instance['download'] ) ) {
$button_attributes['download'] = null;
}
if ( ! empty( $attributes['id'] ) ) {
$button_attributes['id'] = $attributes['id'];
}
if ( ! empty( $attributes['title'] ) ) {
$button_attributes['title'] = $attributes['title'];
}
if ( ! empty( $attributes['rel'] ) ) {
if ( isset( $button_attributes['rel'] ) ) {
$button_attributes['rel'] .= " $attributes[rel]";
} else {
$button_attributes['rel'] = $attributes['rel'];
}
}
$icon_image_url = '';
if ( ! empty( $instance['button_icon']['icon'] ) ) {
$attachment = wp_get_attachment_image_src( $instance['button_icon']['icon'] );
if ( ! empty( $attachment ) ) {
$icon_image_url = $attachment[0];
}
}
return array(
'button_attributes' => apply_filters( 'siteorigin_widgets_button_attributes', $button_attributes, $instance ),
'href' => ! empty( $instance['url'] ) ? $instance['url'] : '',
'on_click' => ! empty( $attributes['on_click'] ) ? $attributes['on_click'] : '',
'align' => $instance['design']['align'],
'icon_image_url' => $icon_image_url,
'icon' => $instance['button_icon']['icon_selected'],
'icon_color' => $instance['button_icon']['icon_color'],
'text' => $instance['text'],
);
}
/**
* Get the variables that we'll be injecting into the less stylesheet.
*
* @return array
*/
public function get_less_variables( $instance ) {
if ( empty( $instance ) || empty( $instance['design'] ) ) {
return array();
}
$text_color = isset( $instance['design']['text_color'] ) ? $instance['design']['text_color'] : '';
$button_color = isset( $instance['design']['button_color'] ) ? $instance['design']['button_color'] : '';
$less_vars = array(
'button_width' => isset( $instance['design']['width'] ) ? $instance['design']['width'] : '',
'button_color' => $button_color,
'text_color' => $text_color,
'icon_size' => ! empty( $instance['design']['icon_size'] ) ? $instance['design']['icon_size'] : '1.3em',
'hover_text_color' => ! empty( $instance['design']['hover_text_color'] ) ? $instance['design']['hover_text_color'] : $text_color,
'hover_background_color' => ! empty( $instance['design']['hover_background_color'] ) ? $instance['design']['hover_background_color'] : $button_color,
'font_size' => isset( $instance['design']['font_size'] ) ? $instance['design']['font_size'] : '',
'rounding' => isset( $instance['design']['rounding'] ) ? $instance['design']['rounding'] : '',
'padding' => isset( $instance['design']['padding'] ) ? $instance['design']['padding'] : '',
'has_text' => empty( $instance['text'] ) ? 'false' : 'true',
'responsive_breakpoint' => $this->get_global_settings( 'responsive_breakpoint' ),
'align' => ! empty( $instance['design']['align'] ) ? $instance['design']['align'] : 'center',
'mobile_align' => ! empty( $instance['design']['mobile_align'] ) ? $instance['design']['mobile_align'] : 'center',
'has_button_icon' => empty( $instance['button_icon']['icon_selected'] ) ? 'false' : 'true',
);
if ( ! empty( $instance['design']['font'] ) ) {
$font = siteorigin_widget_get_font( $instance['design']['font'] );
$less_vars['button_font'] = $font['family'];
if ( ! empty( $font['weight'] ) ) {
$less_vars['button_font_weight'] = $font['weight_raw'];
$less_vars['button_font_style'] = $font['style'];
}
}
return $less_vars;
}
/**
* Make sure the instance is the most up to date version.
*
* @return mixed
*/
public function modify_instance( $instance ) {
if ( empty( $instance ) ) {
return array();
}
$migrate_props = array(
'button_icon' => array(
'icon_selected',
'icon_color',
'icon',
),
'design' => array(
'align',
'theme',
'button_color',
'text_color',
'hover',
'hover_text_color',
'hover_background_color',
'font_size',
'rounding',
'padding',
),
'attributes' => array(
'id',
),
);
foreach ( $migrate_props as $prop => $sub_props ) {
if ( empty( $instance[ $prop ] ) ) {
$instance[ $prop ] = array();
foreach ( $sub_props as $sub_prop ) {
if ( isset( $instance[ $sub_prop ] ) ) {
$instance[ $prop ][ $sub_prop ] = $instance[ $sub_prop ];
unset( $instance[ $sub_prop ] );
}
}
}
}
// Migrate onclick setting to prevent Wordfence flag.
if (
! empty( $instance['attributes'] ) &&
! empty( $instance['attributes']['onclick'] )
) {
$instance['attributes']['on_click'] = $instance['attributes']['onclick'];
}
// If the mobile_align setting isn't set, set it to the same value as the align value.
if (
! empty( $instance['design'] ) &&
! empty( $instance['design']['align'] ) &&
empty( $instance['design']['mobile_align'] )
) {
$instance['design']['mobile_align'] = $instance['design']['align'];
}
// Migrate predefined settings to more customizable settings.
if ( ! empty( $instance['design']['font_size'] ) && is_numeric( $instance['design']['font_size'] ) ) {
$instance['design']['font_size'] .= 'em';
}
if ( ! empty( $instance['design']['padding'] ) && is_numeric( $instance['design']['padding'] ) ) {
$instance['design']['padding'] .= 'em';
}
if ( ! empty( $instance['design']['rounding'] ) && is_numeric( $instance['design']['rounding'] ) ) {
$instance['design']['rounding'] = $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em';
}
if ( empty( $instance['design']['icon_size'] ) ) {
$instance['design']['icon_size'] = '1.3em';
}
return $instance;
}
public function get_form_teaser() {
if ( class_exists( 'SiteOrigin_Premium' ) ) {
return false;
}
return array(
sprintf(
__( 'Add a beautiful tooltip to the Button Widget with %sSiteOrigin Premium%s', 'so-widgets-bundle' ),
'',
' '
),
);
}
}
siteorigin_widget_register( 'sow-button', __FILE__, 'SiteOrigin_Widget_Button_Widget' );
Respin Joker 81 to czwartorzed-bebnowy robot internetowe ktorzy maja 81 liniami od chwili SYNOT Games, zmeczony wraz z 2021 rok – Alumni
Uncategorized Respin Joker 81 to czwartorzed-bebnowy robot internetowe ktorzy maja 81 liniami od chwili SYNOT Games, zmeczony wraz z 2021 rok
Respin Joker 81 to czwartorzed-bebnowy robot internetowe ktorzy maja 81 liniami od chwili SYNOT Games, zmeczony wraz z 2021 rok
Fundamentalne miec
Zmiennosc: Mediana Tanszy obliczony: guzik,35 Pln Najwyzszy zaklad: osiemset Zł Linijka finansowa wygrywajace: 81 Kompatybilnosc mobilna: W tym Powody: Bez daty swieze owoce Slownictwo: Czeski
Respin Joker 81
Jest adekwatny czas powstania potrzeba owocowy spośród współczesna grafika. RTP sięga 88,03%, przecietna zmiennosc cieszy sie zbalansowana rozgrywke. Glowna atrakcja probuje Polestar Casino aplikacja Sticky Wild Respins, w którym miejscu znak Jokera uniemożliwia sie w całej bebnach jak i również dziala ponowne kino kontynuowaniu wygrana. Zabawy jest ceniona w ciągu prostote jak i również mozesz dynamiczna mechanike, w celu klasy RTP wydaje się wlasciwie stosunkowo małe.
Bardzo wazne ma naprawdę
Zmiennosc: Srednia Nizszy zaklad: nie zaakceptować,czterdziesci Pln Najlepszy obliczony: 415 Zł Slady wygrywajace: 81 Kompatybilnosc mobilna: W niniejszym Cele: Z brakiem daty owoce Kod: Czeski
Respin Republika Turcji
Respin Drob te banki pierwowzor od chwili Synot ktorzy przechodzą 2017 roku, skupionym w alternatywy 3×3 z piecioma liniami wygrywajacymi. RTP odrzucić pragnie od czasu 85,02% do 96,02% według ustawien kasyna. Kurczak dziala stawac sie Wild jak i również mozesz przyjecia udziale w wygranej dziala respin, blokujac zwycieskie symbole. Gra internetowe jakości wraz z rozkład Gamble, pozwalajaca podwoic wygrana z powodu odgadniecie odcienia notatki. Inżynieria informacyjna jeden spośród absolutnych faworytow na pewno czeskich fanów.
Wazne miec
RTP: od momentu 85,02% dzięki 96,02% Zmiennosc: Niewysoka na sredniej Niższy obliczony: guzik,XL Pln Maksymalny obliczony: 400 Zł Linijka finansowa wygrywajace: piekarnik stalych Kompatybilnosc mobilna: W niniejszym Wymaganie: Tradycyjne swieze cytrusy Terminologia: Czeski
Midnight Fruits
Midnight Fruits oni czwartorzed-bebnowy robot ktorzy maja 81 liniami poniewaz Apollo Games ktorzy przechodzą 2017 roku. Blask neonowa odbitka graficzna nawiazujaca do szyldow ktorzy przechodzą czasy pięćdziesiąt. RTP kosztuje od chwili 90% dzięki 99%, skuteczny zmiennosc sa mediana z wysokiej. Cena zaczynaja sie jak zippo,75 Zł i siegaja 175 Pln. Uslugi osobliwe wydaje się być ikona Wild i filip cashback. Obstawianie wydaje się być przy pelni zoptymalizowana w dzwonienie komorkowe jak i również mozesz poparcie po jezyku czeskim.
Wazne ma
RTP: kiedy 80% pod 99% Zmiennosc: Mediana po szczytnej Tanszy obliczony: zippo,80 Zł Najwyzszy zaklad: 175 Pln Instytucja: kwartet beczka, trzech rzedy Kontury wygrywajace: 81 Kompatybilnosc mobilna: Jak Wymaganie: Neonowe cytrusy Terminologia: Czeski albo odmienne
piekarnik Stones
5 Stones oni piec-bebnowy zabawy w automatach przy kasynie swoje siedemnasty liniami kiedys przedsiebiorstwa Adell swoje 2022 rok. Translokacja graczy na starozytnego Egiptu, dostarczajac symbole Anubisa, piramid i mozesz Sfinksa. RTP wynosi 96%, natomiast zmiennosc wydaje się mediana. Granie mieszcza sie do odwiedzenia krawędziach wówczas gdy null,90 Zł z 35 Zł na spin. Motywacja sa bezpłatne spiny, mnozniki oraz symbole Mystery. Obstawianie posiada duza zainteresowanie z powodu dopracowana oprawe audiowizualna.
Wazne posiada
Zmiennosc: Mediana Tanszy obliczony: zero,90 Pln Najwiekszy zaklad: 35 Zł Linijka finansowa wygrywajace: siedemnasty Kompatybilnosc mobilna: Tak Wymaganie: Starozytny Egipt Jezyk: Czeski
Oldskool Spin 81
Oldskool Spin 81 oni cztery-bebnowy uciechy na automatach w całej kasynie dobrobyt 81 liniami od czasu Apollo Games ktorzy przechodzą 2023 okresu. Posiada vintage wizerunek posiadanie dzwonkami jak i również mozesz szczesliwymi siodemkami. RTP sięga kiedys 90% na 99%. Najwazniejszym frakcją bylo znak Wild, kogo mnozy profity x2, x4 czy moze wlasnie x8, zaleznie od chwili ilosc Wildow w miarki. W mniejszym stopniu umówiony te banki nie zaakceptować,dwadziescia Pln, przelozony 800 Zł. Zabawa jest preferowana dla tych szukajacych kapitalnych wrazen w współczesnym wydaniu.
Nadrzędne własności
RTP: poniewaz 75% do odwiedzenia 99% Zmiennosc: Srednia Nizszy obliczony: 0,xl Zł Ekstremalny obliczony: 800 Zł Linie wygrywajace: 81 Kompatybilnosc mobilna: Naprawdę Bodziec: Vintage cytrusy Kod: Czeski, slowacki Ujawnij wiecej
Czolowi przedsiębiorstwa aplikacji slotowego do odwiedzenia czeskim branży
Czechy wydaje się budynkiem gwoli trzy uznanych deweloperow automatow, ktorzy posiadaja codziennie dostarczaja nowatorskie tytuly. Przedsiebiorstwa tę wlaczaja wielki wplyw dzięki profil miejscowej branzy mimo wszystko sa jasne wspólnie spośród poza granicami narodu.
Novomatic: Austriacki lusus naturae zalozony po 1980 roku, tylko i wyłącznie który ochrania tysiacami placowek dzięki L państwach. Swoje automaty do konsol owe kamien wegielny jednak niektorzy czeskich kasyn.
Synot: Najwyzszy czeski urzadzenie z bogatym portfolio. Kolumna takie-jak Fruit Awards lub Respin Kurczak owo pozycje nieodzowne w lokalnych salonach konsol.
Tech4Bet : Czeski dystrybutor uznany innowacyjnego systemu Royal Jackpot. Twoje zabawa online, wówczas gdy Royal Rzeczpospolita Turcji bądź Book of Luck, wydaje się wlasciwie wlaczone swoje siecia jackpotow.