/* 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":30668,"date":"2026-05-16T12:50:41","date_gmt":"2026-05-16T12:50:41","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=30668"},"modified":"2026-05-16T12:50:42","modified_gmt":"2026-05-16T12:50:42","slug":"znajdz-darmowe-spiny-z-roman-casino-%ef%bf%bd-unikalna-ulepszenia","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/znajdz-darmowe-spiny-z-roman-casino-%ef%bf%bd-unikalna-ulepszenia\/","title":{"rendered":"Znajdz darmowe spiny z Roman Casino \ufffd unikalna ulepszenia"},"content":{"rendered":"

Zdaniem naszych autorow NV Casino rowniez oferuje od razu jeden z najciekawszych bonusow na uzyj dwiescie darmowych spinow w jednoreki bandyta Chicken Chase od Pragmatic Play (RTP za cene %), udowodnic uwolnic ktorzy maja kodem PL200SPINS na niskim warunku obrotu x5. A takze glownej zalety ktore sa oferowane jest wlasciwie a takze drugi reklamy, podobne 80 obrotow z grze Candy Corner, piecdziesiat spinow z automacie Infernal Fruits lub 80 zl darmowej gotowki, zajmowac kazda cechy wylaczne wytyczne powiazane koniecznego obrotu oraz twojej energii z z realizacje wynoszacego od 3 do 5 dni.<\/p>\n

Na drugim miejscu znalazl sie Bet It All<\/a> dodatkowy bez depozytu kiedys Roman Casino. Kasyno hazardowe pokazuje dwadziescia darmowych spinow do wykorzystania na automatach Sweet Bonanza lub po prostu po prostu Big Bass Splash od Pragmatic Play. Mozesz chciec niektorych z tych slotow.<\/p>\n

Sweet Bonanza to barwny, energetyczny automat w swiecie slodyczy, charakteryzujacy sie wysoka zmiennoscia i mozesz RTP 96,51%. Konsekwentnie Big Bass Splash jest zalezny od motywie wedkarskim, dostarczajac wysoka zmiennosc i mozesz RTP na poziomie 96,71%. Tak jak wiecej fillip bez depozytu, ten kontroli przez okreslonym warunkom: produkowac wyplacic wygrana, nalezy spelnic trzydziesci piec-krotny koniecznosc obrotu na 7 dni.<\/p>\n

Okazja do poczatkujacy jak Hit’n’Spin do grze Drob Stoker<\/h2>\n

Kasyno HitNSpin proponuje nowym uzytkownikom dwadziescia piec darmowych spinow bez depozytu. Mozesz skorzystac z konsumuje korzysc z na grze Kurczak Stoker jak Endorphina, ktora charakteryzuje sie RTP za cene 96,07%. Dodatkowy bonus za aplikacji o z HitNSpin oznacza piec-krotnego obrotu, dokladnie kto nalezy rozpoznac od 5 dni. Aby bezkosztowe spiny, nalezy zarejestruj sie, zeby kasynie posiadania posrednictwem linku na naszej stronie oraz doswiadczyc procedura weryfikacji.<\/p>\n

Slottica: 50 DS w nowych graczy z kultowy jednoreki bandyta Starburst<\/h2>\n

Slottica ma nowym graczom dodatkowy calkowicie darmowy z roli 50 darmowych spinow, i to sportowcy moga wykorzystac w Starburst jak NetEnt. Slot posiada srednia zmiennosc i mozesz RTP na stalym poziomie 96,1%. Slottica motywacja bez depozytu jest objety 45-krotnym wagerem i nie cieszy sie limitu czasowego.<\/p>\n

sto zl posiadania sama rejestracji? Weryfikacja szczegoly promocji do Vulkan Vegas<\/h2>\n

Nastepowaniu zarejestrowaniu sie z Vulkan Vegas mozesz otrzymac setki zl darmowej gotowki. Dodatkowy bonus bez depozytu w Vulkan Vegas podlega 5-krotnemu wymogowi obrotu, pelny czas na jego przyjemnosc wynosi 5 dni. Produkowac aktywowac moge zapewniac, wystarczy potwierdzic konto za pomoca numeru telefonu, dobry darmowa kasa bedzie kontynuowany mechanicznie dodana na profil. Dokladnie co niezwykle wazne, nie koniecznie jest wezwany ani kod promocyjny Vulkan Vegas \ufffd wystarczy przejsc przez z strone kasyna przez link z naszej strony internetowe.<\/p>\n

Zaloguj sie i bedziesz wez 88 DS na VulkanSpiele<\/h2>\n

VulkanSpiele motywacja bez depozytu na funkcji 88 darmowych spinow mozesz na gre Slip twoja Cash. Slot czasowy ma RTP na stalym poziomie 95% i mozesz srednia zmiennosc. Motywacja jest czescia z tych, te potrzebe VulkanSpiele rabaty. W takim przypadku, ktora sprawi aktywowac nagrode, nalezy wejsc: HOOKTHESPINS. Ulepszenia tez objeta warunkiem obrotu \ufffd x40, kazdy wlasnych satysfakcja masz piec dni.<\/p>\n

Zapros dwadziescia DS posiadanie zalozenie profil na Lemon Casino<\/h2>\n

Przedsiebiorstwa hazardowe Lemon rowniez oferuje graczom dwadziescia free spinow do gre Book of Dead. Ten slynny slot na rozszerzenie kiedys Play’n Go posiada RTP na poziomie 96,21% i wysoka zmiennosc. Lemon dodatkowy bez depozytu probuje zabezpieczony piecdziesiat-krotnym warunkiem obrotu, swietny ograniczenie czasowy wynosi trzy dni.<\/p>\n

Od oceniamy kasyna online ktorzy maja bonusem bez depozytu?<\/h2>\n

Zrobic na naszej urlop znalazly sie calkowicie jak rowniez niedrogie premia, a kasyna zdarza sie szczegolowa weryfikacje. Nasza recenzja bedzie opierac sie na mierzalnych wskaznikach, i to faktycznie wplywaja w doswiadczenie gracza.<\/p>\n

Zezwolenie i mozesz certyfikowac<\/h2>\n

Priorytetem sa uzasadnienie, czy przedsiebiorstwa hazardowe cechy wazna licencje hazardowa (np. Malta Gaming Authority, British Gambling Commission jesli czy nie Curacao eGaming.) i bedziesz wykorzystuje szyfrowanie SSL na ochrony informacji. Sprawdzamy nawet certyfikaty uczciwosci gier kiedys niezaleznych audytorow, takich jak eCOGRA.<\/p>\n

Roznorodnosc gier i mozesz producenci<\/h2>\n

Dobor gier hazardowych na prawdziwe pieniadze technologia informacyjna nowy wazny aspekt. Oceniamy biblioteke gier waga zakres \ufffd automatow, gier stolowych i mozesz przedsiebiorstwa hazardowe na zywo. Wazna jest dla stany zjednoczone wspolpraca kasyno hazardowe ktorzy maja czolowymi dostawcami oprogramowania, takimi jak NetEnt, Play’n GO jesli czy nie Pragmatic Play. Obecnosc renomowanych producentow nadzieja wysoka wysoka jakosc techniczna gier i mozesz prawdziwy indeks RTP (Return technologia informacyjna Player).<\/p>\n","protected":false},"excerpt":{"rendered":"

Zdaniem naszych autorow NV Casino rowniez oferuje od razu jeden z najciekawszych bonusow na uzyj dwiescie darmowych spinow w jednoreki bandyta Chicken Chase od Pragmatic Play (RTP za cene %), udowodnic uwolnic ktorzy maja kodem PL200SPINS na niskim warunku obrotu x5. A takze glownej zalety ktore sa oferowane jest wlasciwie\u2026<\/p>\n

Continue reading<\/span><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-30668","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/30668","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/comments?post=30668"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/30668\/revisions"}],"predecessor-version":[{"id":30669,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/30668\/revisions\/30669"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=30668"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=30668"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=30668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}