/* 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":7925,"date":"2026-04-25T19:44:19","date_gmt":"2026-04-25T19:44:19","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=7925"},"modified":"2026-04-25T19:44:20","modified_gmt":"2026-04-25T19:44:20","slug":"wybierz-bezkosztowe-spiny-na-roman-casino-%ef%bf%bd-specjalna-promocja","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/wybierz-bezkosztowe-spiny-na-roman-casino-%ef%bf%bd-specjalna-promocja\/","title":{"rendered":"Wybierz bezkosztowe spiny na Roman Casino \ufffd specjalna promocja"},"content":{"rendered":"

Zdaniem naszych autorow NV Casino oferuje niezwlocznie jeden z najciekawszych bonusow do funkcji 200 darmowych spinow na slot Chicken Chase kiedys Pragmatic Play (RTP w tempie %), wykazac odebrac z kodem PL200SPINS przy niskim warunku obrotu x5. A takze glownej korzysci ktore sa dostepne bylo razem z drugi reklama, takie-jak 80 obrotow na grze Candy Corner, piecdziesiat dolarow spinow w automacie Infernal Fruits lub moze 80 zl darmowej pieniedzy, zajmowac kazda ma osobiste zasady istotne koniecznego obrotu oraz twojej energii na z realizacje wynoszacego od trzech do pieciu dni.<\/p>\n

Na drugim miejscu znalazl sie filip bez depozytu kiedys Roman Casino. Kasyno hazardowe sugeruje 20 darmowych spinow do twojego uzytku na automatach Sweet Bonanza lub Big Bass Splash od Pragmatic Play. Jest to wskazane niektorych z tych slotow.<\/p>\n

Sweet Bonanza technologia informacyjna barwny, aktywny gra na automatach w swiecie slodyczy, charakteryzujacy sie wysoka zmiennoscia i mozesz RTP 96,51%. Nastepnie Big Bass Splash lezy w motywie wedkarskim, dostarczajac wysoka zmiennosc i mozesz RTP na poziomie 96,71%. Podobnie jak wiecej premia bez depozytu, tego rodzaju kontroli przez okreslonym warunkom: aby rozwidlic wygrana, nalezy montowac trzydziesci piec-krotny koniecznosc obrotu na 1 tydzien.<\/p>\n

Okazja na inicjuj kiedys Hit’n’Spin na grze Indyk Stoker<\/h2>\n

Kasyno HitNSpin wskazuje nowym 1xBit<\/a> uzytkownikom 25 darmowych spinow bez depozytu. Musisz uzyc mam wykorzystac z grze Indyk Stoker poniewaz Endorphina, ktora charakteryzuje sie RTP za cene 96,07%. Dodatkowy posiadania rejestracji na HitNSpin wymaga piec-krotnego obrotu, dokladnie kto nalezy wiedziec na 5 dni. Osiagnac darmowe spiny, nalezy dolaczyc kasynie posiadania posrednictwem linku do naszej stronie oraz doswiadczyc procesy weryfikacji.<\/p>\n

Slottica: piecdziesiat dolarow DS w nowych graczy na kultowy slot Starburst<\/h2>\n

Slottica ma faktycznie nowym graczom motywacja darmowy do funkcji 50 darmowych spinow, i to gracze mogli korzysc z na Starburst jak NetEnt. Pozycja ma srednia zmiennosc i bedziesz RTP za cene 96,1%. Slottica dodatkowy bonus bez depozytu jest osloniety czterdziesci piec-krotnym wagerem i nigdy miec limitu czasowego.<\/p>\n

niezliczona ilosc zl za sama rejestracji? Sprawdz informacje promocji na Vulkan Vegas<\/h2>\n

Nastepowaniu zarejestrowaniu sie w Vulkan Vegas mozesz uzyc zeby jedno C zl darmowej pieniedzy. Motywacja bez depozytu z Vulkan Vegas podlega 5-krotnemu wymogowi obrotu, pelny czas w twoich przyjemnosc wynosi 5 dni. Produkowac angazowac moge zapewniac, wystarczy aby upewnic sie czlonkostwo za pomoca numeru telefonu, dobry darmowa kasa bedzie kontynuowany mechanicznie uwzgledniona na poziomy. Dokladnie co bardzo wazne, nie koniecznie jest wezwany ani kod kuponu Vulkan Vegas \ufffd wystarczajaco przeczytac do strone przedsiebiorstwa hazardowe z link z naszej strona internetowa.<\/p>\n

Zarejestruj sie i bedziesz odbierz 88 DS na VulkanSpiele<\/h2>\n

VulkanSpiele motywacja bez depozytu do czesci 88 darmowych spinow musisz uzyc na gre Hook twoja Cash. Pozycja posiada RTP za cene 95% i bedziesz srednia zmiennosc. Bonus jest czescia tych, te potrzebe VulkanSpiele kody promocyjne. W tym przypadku, produkowac aktywowac przyznawanie, nalezy wejsc: HOOKTHESPINS. Promocja jak mozesz objeta warunkiem obrotu \ufffd x40, kazdy z satysfakcja stawac sie 5 dni.<\/p>\n

Otrzymaj 20. DS posiadanie przeslanka konta w Lemon Casino<\/h2>\n

Przedsiebiorstwa hazardowe Lemon rowniez oferuje graczom dwadziescia free spinow w gre Book of Dead. Ten rodzaj diachroniczny slot na rozszerzenie od Play’n Go ma faktycznie RTP za cene 96,21% i mozesz wysoka zmiennosc. Lemon filip bez depozytu jest chroniony L-krotnym warunkiem obrotu, dobry ograniczenie a-czasowy wynosi trzy dni.<\/p>\n

Jak oceniamy kasyna internetowe ktorzy maja bonusem bez depozytu?<\/h2>\n

Ktora sprawi z naszej liscie znalazly sie calkowicie jak rowniez ograniczenie fillip, dowolne odmiany kasyno hazardowe spotkanie szczegolowa weryfikacje. Nasza ranking bedzie opierac sie na mierzalnych wskaznikach, ktore faktycznie walina z wie gracza.<\/p>\n

Wlaczyc i mozesz certyfikowac<\/h2>\n

Priorytetem bylo uzasadnienie, jesli czy nie przedsiebiorstwa hazardowe miec wazna licencje hazardowa (na przyklad. Malta Gaming Authority, Uk Gambling Commission czy Curacao eGaming.) i wykorzystuje szyfrowanie SSL z ochrony informacji. Sprawdzamy jeszcze certyfikaty uczciwosci gier jak niezaleznych audytorow, jak z eCOGRA.<\/p>\n

Asortyment gier i mozesz marki<\/h2>\n

Dobor gier hazardowych na prawdziwy dochod oni calkiem nowy istotny aspekt. Oceniamy biblioteke gier kat zakres \ufffd automatow, gier stolowych i mozesz kasyno na zywo. Rozkazujaca jest dla nas partnerstwo kasyno posiadanie czolowymi dostawcami oprogramowania, takimi kiedys NetEnt, Play’n GO czy czy nie Pragmatic Play. Obecnosc renomowanych producentow nadzieja wysoka jakosc techniczna gier i bedziesz uczciwy lista RTP (Return oni Player).<\/p>\n","protected":false},"excerpt":{"rendered":"

Zdaniem naszych autorow NV Casino oferuje niezwlocznie jeden z najciekawszych bonusow do funkcji 200 darmowych spinow na slot Chicken Chase kiedys Pragmatic Play (RTP w tempie %), wykazac odebrac z kodem PL200SPINS przy niskim warunku obrotu x5. A takze glownej korzysci ktore sa dostepne bylo razem z drugi reklama, takie-jak\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-7925","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/7925","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/comments?post=7925"}],"version-history":[{"count":1,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/7925\/revisions"}],"predecessor-version":[{"id":7926,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/7925\/revisions\/7926"}],"wp:attachment":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=7925"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=7925"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=7925"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}