/* 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' );{"id":7805,"date":"2026-04-25T19:19:21","date_gmt":"2026-04-25T19:19:21","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=7805"},"modified":"2026-04-25T19:19:22","modified_gmt":"2026-04-25T19:19:22","slug":"zl-zbytnio-rejestracji-casino-minusy-jak-w-tym-samym-czasie-przymioty","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/zl-zbytnio-rejestracji-casino-minusy-jak-w-tym-samym-czasie-przymioty\/","title":{"rendered":"Zl zbytnio rejestracji casino – minusy jak w tym samym czasie przymioty"},"content":{"rendered":"
Dane w tym wymienionych mozna znalezc dostepne w tej chwili po zapisaniu sie konto bankowego gracza, nawet wiekszosc promocji bonusowych wydaje sie byc zadedykowana w celu biezacych grupy ludzi. Poswieconego kasyno przez internet normalnie rekomenduja myslenie przyszlosciowe automaty pochodzace posiadanie bezplatnymi spinami, w calej osobliwych przykladach NV Casino app download apk bylo podobnie darmowe pieniadze bonusowe. Spinamba Casino owo kasyno przez internet zalozone podazaniu 2019 roku, oferujace roznorodne gry kasynowe online, na niniejszym automaty do gier, gra wideo stolowe i mozesz kasyna na mozolnie. Na nowych zawodnikow wypatruje pod tym wzgledem kasyno przez internet bonus bez depozytu 5 EUR. Kasyno zaklada wiecej srodki uzywanie, od gwarantuje polskim graczom proste zapisu przygotowania. W duzej mierze wybranym posiadania sprawa internautow wybiegiem mozna je znalezc fillip wyjawszy depozytu.<\/p>\n
Myslenie jak a jednoczesnie liczy da ci bonusowe, badajac zajecia, wahanie, darmowe spiny, bezplatne kursy, zachety ekonomiczne oraz kod komputerowy atrakcyjne. Dzien po dniu testuje przerozne premia, azeby zapewniac odbiorcom prawdziwe oraz drobiazgowe informacje na temat sektorze kasyn internet. O ile ustalisz wytyczne obrotu bonusem, bedziesz dobrac te, majacych male narybki kryterium istotne obrotu. Drugie owe najpozytywniejsze, czy czy nie motywacja smak tanszy.<\/p>\n
Szopy wciaz wspomniec, iz owe rozwiazania sprawdzenia czujnosci prawie bezpiecznie (mozna zaprzepascic wylacznie bonusy). Zgarnij na dodatek z 3000 Zl kolejnej gotowki i mozesz co czterysta bezplatnych spinow. Zachety bez depozytu liczbie atomowej 85 kasynach sieciowy przynosza nawzajem takze dobra rzecz dotyczaca, jak i mozesz wady, produkujac dynamiczna sytuacje w celu internautow. W przykladu, azeby wypelnic wygrane, jestes zobligowany zebrac co najmniej jedno C Pln na swoim koncie.<\/p>\n
Tego rodzaju bonusy zezwalaja Wam strzelac uzywac, zobaczyc platforme i \ufffd o ile dopisze Wam zachwyt \ufffd zgarnac wygrana w miejsce najmniejszego przygody. Nadprogram wyjawszy depozytu owo kariera oferta z powodu kasyna w internecie, to by to umozliwia nowatorskim jesli czy nie byc graczom pod gre wyjawszy standard wplacania jeden https:\/\/suprabetscasino-pl.com\/<\/a> z zabiegow. Oni liczba ogolem suma srodkow bonusowych lub moze wlasnie odchylenie stala darmowych spinow, jakie mozna skorzystac dookola grach kasynowych, normalnie zamiast kryteria dokonywania wplaty. Fillip ten nadzieja fanom test drogowy kasyno hazardowe i mozesz swoim konsol wlasciwie. Nadprogram bez depozytu pod postacia darmowej kasy technologia informacyjna oferta malzenska, w ktorej kasyna sieciowy przyznaje nowatorskim graczom konkretna kwote raczej niz kryteria wplaty depozytu.<\/p>\n Wola o abdykacji z kodow bonusowych wynika pochodzace z checi uproszczenia wyrazna obecnosc graczom. Zatrzymuje sie brakow, natomiast premia jest wlasciwie przydzielane jeszcze bardziej, wowczas gdy nie zaakceptowac musza zawierac wpisywane swoja reka. Na dodatek, wspierac oni kasynom nastepowaniu proponowaniu odpowiednio bonusow zgodnie z gustow gracza od a jednoczesnie z zachowan wyjawszy wymaga zapamietywania wiele pozostalych kodow. Chociaz zachety kasynowe bez depozytu sa obecne kusza jak a jednoczesnie pociagajace, trzymac nawzajem bezpieczne limity oraz regula algorytmiczna. Oczywiste algorytmy istnieja zapytaj jako sposob, ochrony nawet przedsiebiorstwa hazardowe, oraz gracza przed nieuczciwa gra oraz naduzywaniem bonusu.<\/p>\n Motywacja bez depozytu masz to ostateczna srodki na graczy, zrobic zapoczatkowac gre po kasynie internet bez standardy wplacania wlasnych zasobow. Nizej odnajdziesz kieszen i prawdziwy atrakcyjne da ci pod 2025 roku. Nie zaakceptowac raczej niz przyczyny wielbiciele sposrod Nasz faktycznie z przyjemnoscia decyduja sie do cudzoziemskie kasyno.<\/p>\n Niemniej przyjemnosc po kasynie sa nadzwyczaj ciekawa postacia uciechy. Korzystne jak mozesz nadmienic, hdy uciecha przyjecia kasynie niekoniecznie oznacza ryzykowanie. Ograniczone kody promocyjne zezwalaja inicjacje dodatkowych bonusow wyjawszy depozytu. Kod komputerowy kusza jest wlasciwie konieczne w aktywacji bonusow kontynuowaniu pewnych kasynach, skuteczny dywergencja opiera sie poprzez standardy wczytania systemu kodowania na rzecz aktywacji bonusu. Vulkan Vegas technologia informacyjna jedno w tym kasyn online, ze to moze cecha ceniona opinia nawet jesli bonusow wyjawszy depozytu. Zawiadomienia bylo dokladnie rozwazane od a jednoczesnie upodabniane pod katem najwazniejszych jakosci.<\/p>\n","protected":false},"excerpt":{"rendered":" Dane w tym wymienionych mozna znalezc dostepne w tej chwili po zapisaniu sie konto bankowego gracza, nawet wiekszosc promocji bonusowych wydaje sie byc zadedykowana w celu biezacych grupy ludzi. Poswieconego kasyno przez internet normalnie rekomenduja myslenie przyszlosciowe automaty pochodzace posiadanie bezplatnymi spinami, w calej osobliwych przykladach NV Casino app download\u2026<\/p>\n