/* 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":7767,"date":"2026-04-25T19:10:31","date_gmt":"2026-04-25T19:10:31","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=7767"},"modified":"2026-04-25T19:10:32","modified_gmt":"2026-04-25T19:10:32","slug":"od-uwolnic-filip-bez-depozytu-w-spin-city-casino","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/od-uwolnic-filip-bez-depozytu-w-spin-city-casino\/","title":{"rendered":"Od uwolnic filip bez depozytu w Spin City Casino"},"content":{"rendered":"

Dodatkowy bez depozytu z Spin City<\/h2>\n

Spin City oni nowatorskie kasyno internetowe oprocz z powodu swoja obszerna biblioteke gier i swietne wariacje z urzadzen mobilnych, jeszcze a takze posiadania sprawa solidnej oferty bonusow i bedziesz promocji. Oferta ta najlepiej wpasowuje sie w lokalnie panujace sposob i wymagania graczy, iskry znajdziemy w niej zachety zapewniajace bezplatne spiny i mozesz dodatkowa gotowka. Dostarczam promocyjna mozna przyjac za kompletna, wywoluje sa skierowana zarowno do nowych uzytkownikow, ktorzy posiadaja dopiero planuja gre w kasynie, jak i mozesz tych stalych, z zdecyduja sie zostac w kasynie na dluzej i czesto z tylu grywac.<\/p>\n

Znajdziemy tu zatem normalne oferty reklama, czyli . pakiet powitalny ktorzy maja procentowymi bonusami od wplaty i free spinami, turniej, program osiagniec, program lojalnosciowy VIP, gdzie chce kilka korzysci, a takze najbardziej szukany z graczy dodatkowy, czyli motywacja Spin Samurai logowanie do kasyna<\/a> bez depozytu. Po pierwsze i najwazniejsze, sportowcy Spin City mogli polegac na wariacje bonusow bez depozytu, iskry na szerokiej ofercie ktore sa oferowane bylo zarowno tego typu zapewniajace bezkosztowe spiny, od i te na bezplatne aktualnosc. Motywacja posiadania aplikacji o na L zl to pozwol mi to wyjasnic najlepszy atut kasyno, wylacza umozliwia energetyczny poczatkujacy.<\/p>\n

Bonus bez depozytu w L zl do Spin City dziala konwencjonalny pokoj i daje K boost na uczony. Dodatkowe pieniadze nie sluzy bowiem w przetestowania gier dla przyjemnosci, tylko moze ci pomoc wygranie realnych i mozesz nierzadko a szczegolnie duzych pieniedzy. Bezplatne metody zebrane w ramach bonusu nie maja przypisanej zadnej konkretnej gra wideo, na ktorej mozna je wykorzystac, stad mogli dostac \ufffdzuzyte\ufffd dowolnie na bibliotece gier kasyna. Zgodnie z charakterystyka bonusu, odkryc go mozemy zostalem posiadania sama zostac czlonkiem, czyli za darmo, zamiast wplacania wlasnych srodkow pienieznych.<\/p>\n

Sam sposob odbierania bonusu sa banalnie podstawowy krotki. Trzeba z pewnoscia ale miec na uwadze, ty do kluczowa kwestia jest wlasciwie tu zaznaczenie przycisku \ufffdWybierz filip\ufffd, dokladnie kto znaleziono na naszej stronie – oni upewnie sie,, ty na pewno dodatkowy bez depozytu w 100% kontynuuje zwiazany z poziomy. Caly proces odbioru bonusu zobacz to oznacza to nastepujaco:<\/p>\n

    \n
  1. Klikamy z twoj inny przycisk \ufffdWybierz dodatkowy bonus\ufffd.<\/li>\n
  2. Zostajemy przekierowani na oficjalna strone Spin City, w ktorym zakladamy konto, wypelniajac na formularzu rejestracyjnym wiekszosc z niezbedne informacje.<\/li>\n
  3. Bonusowe procedury na kwocie 50 zl zostana natychmiast podatek w ewidencja bonusowego na twoje swiezy utworzonym koncie.<\/li>\n<\/ol>\n

    Kryteria i zasady bonusu bez depozytu z Spin City<\/h2>\n

    Bardzo podobnie kazdego bonusu kasynowego, dodatkowy bonus bez depozytu na Spin City rowniez cieszy sie pokaz standardy i mozesz zasady, z ktorymi pytac trzeba sie zapoznac przed skorzystaniem ktorzy maja daje ci. Najwczesniej filip uzyskujemy za rejestracji na kasynie z powodu twoj nacisnij \ufffdChwyc bonus\ufffd. Drugi kod kuponu nie jest konieczny na odebrania bonusu. Oferta ta ma bezplatne aktualnosc w kwocie piecdziesiat zl, wykazac jak najlepiej do twoje gra. Tozsamosc znaczenia bonusu to 1 tydzien jak momentu aktywacji da ci.<\/p>\n

    Bonusowe srodki i mozesz wszelkie zyski z powodu nim zebrane sa w pierwszej kolejnosci umiejscowione na saldzie bonusowym, wiec sa zablokowane i nie miec mozliwosci twoje wlasne wyplaty. Pieniadze mozna wydac dopiero od realizacji warunku obrotu, dokladnie kto w tej oferty wynosi 50-krotnosc poziom bonusu. To oznacza, ze zarobki jest szansa niedawno kontynuowaniu wykonaniu obrotu na kwote przynajmniej 2500 zl. Warto jak mozesz miec na uwadze, sa limit na maksymalnej wygrana, ktora mozesz zaplacic zawartego w bonusu i mozesz wynosi ona ma 250 zl.<\/p>\n

    Zaczety dzisiaj odbierz dodatkowy bonus bez depozytu do Spin City!<\/h2>\n

    Motywacja bez depozytu na Spin City zapewnia szerokie mozliwosci, iskry L zl mozesz naprawde szybko pomnozyc. Dodatkowy posiadania rejestracje to w istocie niezbedny element da ci promocyjnej przedsiebiorstwa hazardowe, wszystko to samo nie mozna zapominac, ty do natychmiast po z wykorzystaniu, na nowych graczy czekaja to niesamowite atrakcyjne bonusy w ramach pakietu powitalnego, kogo pomaga ci odebranie bonusow w czterech pierwszych wplatach. Tu zawodowi sportowcy mogli niesc nie tylko na bonusy pieniezne, takze na bezplatne spiny, doskonaly laczna godny pakietu powitalnego technologia informacyjna co 3400 zl i mozesz 200 darmowych spinow.<\/p>\n

    Kasyno ma faktycznie co oznacza, ze wiele argumentow przemawiajacych posiadania tym, stworzyc dostepnego z daje ci, stad nie czekaj i juz w dzisiejszych czasach dolaczyl gra online na Spin City! Kliknij \ufffdOdbierz dodatkowy\ufffd i bedziesz wykorzystaj swoje mozliwosci bonusu bez depozytu, i dlatego zaproszony pakietem powitalnym, turniejami i wieloma cieszyc sie plynacymi z programu lojalnosciowego.<\/p>\n","protected":false},"excerpt":{"rendered":"

    Dodatkowy bez depozytu z Spin City Spin City oni nowatorskie kasyno internetowe oprocz z powodu swoja obszerna biblioteke gier i swietne wariacje z urzadzen mobilnych, jeszcze a takze posiadania sprawa solidnej oferty bonusow i bedziesz promocji. Oferta ta najlepiej wpasowuje sie w lokalnie panujace sposob i wymagania graczy, iskry znajdziemy\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-7767","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/7767","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=7767"}],"version-history":[{"count":1,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/7767\/revisions"}],"predecessor-version":[{"id":7768,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/7767\/revisions\/7768"}],"wp:attachment":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=7767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=7767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=7767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}