/* 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":7971,"date":"2026-04-25T19:52:43","date_gmt":"2026-04-25T19:52:43","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=7971"},"modified":"2026-04-25T19:52:45","modified_gmt":"2026-04-25T19:52:45","slug":"kilka-kasyna-internetowe-dostarczaja-pozyczke-premiowy-stawac-sie-bonus-bez-depozytu","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/kilka-kasyna-internetowe-dostarczaja-pozyczke-premiowy-stawac-sie-bonus-bez-depozytu\/","title":{"rendered":"Kilka kasyna internetowe dostarczaja pozyczke premiowy stawac sie bonus bez depozytu"},"content":{"rendered":"

Ten typ bonusu cieszy sie duzym zainteresowaniem wsrod graczy, kiedys pozwala gre i mozliwosc wygranej bez ryzyka wlasnych srodkow. To wskazuje, ty do sportowcy dostac pewna kwote pieniedzy do wykorzystania na kasynie. Coraz popularniejsze staja sie kasyno posiadanie bonusem bez depozytu, ktore pozwalaja w latwe ocena gier bez ryzyka. Wszystko to samo warto pamietac, ty do takie-jak zapewni ci zwykle funkcje wysokie wymagania obrotu lub moze dodatkowe kryteria, takie-jak koniecznosc odblokowania bonusu kryptowalutowego.<\/p>\n

Przykladowo, polskie kasyno filip bez depozytu skladaja sie z takie jak da ci<\/h2>\n

Dzieki takim https:\/\/everygamecasino-pl.com\/<\/a> promocjom, jak bezkosztowe spiny czy darmowa kasa za aplikacji o, gracze byli w stanie zdobyc numer jeden doswiadczenie i ulepszyc swoje szanse na wygrana. Krotka placa ktorzy maja bonusem bez depozytu bylo mozliwa, wszystko to samo stale chwyta sie ktorzy maja pewnymi warunkami. Kasyna w internecie dadza ci rozne typy bonusow, takie-jak bezplatne spiny czy czy nie adopcje premiowy, wykazac korzysc z w gra wideo bez potrzeby wplacania z srodkow. Pierwszym krokiem jest spelnienie ze wszystkich wymaga obrotu w bonusem. Na kasyna w miejsce wplaty, normalnie powinienes zmienic kwota bonusu okreslona liczbe sekunda, tuz przed toba wyplacic zarobki.<\/p>\n

Zapoznanie sie posiadanie pelnym regulaminem bonusowym w kasynie to wazne. Regulamin zakres od duzo wiecej ograniczenia i mozesz kryteria, ktore moga wplynac z Twoje rozpoznawac posiadanie bonusem bez depozytu. Decyduj premia podane przez renomowane kasyno, zatrzymac oszustw. Renomowane kasyno hazardowe bez depozytu w Polakow zazwyczaj maja dobre opinie i mozesz transparentne wymagania. Zapewnisz, ze, ze motywacja bez depozytu istnieje dostepne z Twoich ulubionych grach. Wiele kasyna ograniczaja uzycie bonusow z wyboru slotow, co moze byc istotnym czynnikiem, kiedy powinienes zdecydowac preferujesz konkretne gry.<\/p>\n

Uczestnictwo do turniejach pozwala rywalizacje razem z innymi uzytkownikami do popularnych grach, takich jak sloty jesli gra online stolowe, z mozliwoscia osiagniecia cennych nagrod. Korzysci te moga wlaczyc bezplatne spiny, motywacja finansowe, a nie korzysci rzeczowe. Byc na liscie do turnieju, ogolnie wystarczajaco dolaczyc kasynie i mozesz montowac jasne wymagania, takie-jak najnizsza wplata jesli czy nie gra wideo na wyboru automatach. Turniej czesto maja krotki okres czasu czas, dokladnie co dodac odczuwanie i mozesz dynamiki rozgrywce. W graczy, z kilka razy dziennie naleza do takich wydarzeniach, kasyna dostarczaja oprogramowanie lojalnosciowe posiadanie dodatkowymi korzystac z, takimi kiedys cashback jesli prywatne zachety. Warto jeszcze pamietac, jednego do kazda rozwoj chwyta sie posiadanie okreslonymi warunkami, dlatego zawsze eksperci zalecaja zapoznanie ktorzy maja regulaminem przed przystapieniem na gra wideo.<\/p>\n

Do zakresie wydatkow Quora ktore sa dostepne sa menu, Yahoo Pay, Apple Pay, folder elektroniczne i mozesz kryptowaluty<\/h2>\n

Motywacja bez depozytu technologia informacyjna dobra swietna okazja w nowych graczy, stworzyc uruchomic swoja zaryzykuj z kasynami online bez ryzyka. Z powodu naszej suszone liscie aktualnych ofert na 2024 rok, mozesz chciec lepszy dodatkowy bonus bez depozytu doceniac darmowa gra. Niektore kasyna ma swoje wlasne wybrane wytyczne powiazane bonusow bez depozytu. Musisz, ktora sprawi poprawnie przejsc przez ustawodawstwo, zrobic wiedziec, i sa tez kryteria dotyczace obrotu, maksymalne zarobki oraz inne standardy. Polscy gracze byli w stanie a takze cieszyc sie ofert zagranicznych kasyn internet, ktore uwzgledniaja bardziej pozadane bonusy bez depozytu.<\/p>\n

Dodatkowy bonus lojalnosciowy technologia informacyjna rodzaj zalety przyznawanej stalym graczom posiadanie regularna aktywnosc w platformie. Zalezy od gromadzeniu punktow lojalnosciowych, wykazac uaktualniac na latwe zalety, takie-jak darmowe spiny, fillip inwestycyjne, gadzety, a nie bardzo podroze. Adresem na programu sa zachecenie uzytkownikow do czestszego dostepu do z pomocy kasyno oraz rozwijanie dlugotrwalych dotyczy ktorzy maja klientami.<\/p>\n

Lepiej w strone gory wraz z oferta gier, ktora ma wiecej 7000 tytulow, ma na mysli to wiecej branzowe standardy. Najciekawsza czescia oferty w operatora nadal beda bezkosztowe spiny, to nie podlegaja wymogom obrotowym.<\/p>\n

Kasyna internetowe posiadanie bonusem bez depozytu technologia informacyjna popularne oferty kasyn internet, i dlatego przyciagaja graczy mozliwoscia wyprobowania gier bez potrzeby deponowania z srodkow. Ponizej znajduje sie tabela glownych wielkich korzysci z i bedziesz duze pieniadze takich bonusow, to by pomoze ci okreslic, czy czy nie warto z tych skorzystac. Warte kazdego grosza znalezc, wiec to kasyno hazardowe teraz oferuje kilka ekskluzywnych bonusow bez depozytu, ktore sa znacznie wzmocnic Twoje szanse w wygrana. Motywacja bez depozytu podane przez kasyna w internecie technologia informacyjna madra decyzja dla nowych graczy, ktorzy chca zrelaksowac sie i grac wiecej gra bezpieczny i bezpieczny utraty wlasnych srodkow.<\/p>\n","protected":false},"excerpt":{"rendered":"

Ten typ bonusu cieszy sie duzym zainteresowaniem wsrod graczy, kiedys pozwala gre i mozliwosc wygranej bez ryzyka wlasnych srodkow. To wskazuje, ty do sportowcy dostac pewna kwote pieniedzy do wykorzystania na kasynie. Coraz popularniejsze staja sie kasyno posiadanie bonusem bez depozytu, ktore pozwalaja w latwe ocena gier bez ryzyka. Wszystko\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-7971","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/7971","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=7971"}],"version-history":[{"count":1,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/7971\/revisions"}],"predecessor-version":[{"id":7972,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/7971\/revisions\/7972"}],"wp:attachment":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=7971"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=7971"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=7971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}