/* 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":140588,"date":"2026-06-11T00:31:28","date_gmt":"2026-06-11T00:31:28","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=140588"},"modified":"2026-06-11T00:31:28","modified_gmt":"2026-06-11T00:31:28","slug":"katalog-gier-tysiace-gier-do-wyboru-w-spinit-casino-w-polsce","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/katalog-gier-tysiace-gier-do-wyboru-w-spinit-casino-w-polsce\/","title":{"rendered":"Katalog Gier: Tysi\u0105ce Gier do Wyboru w Spinit Casino w Polsce"},"content":{"rendered":"
\n\"Spinit<\/p>\n

Klienci, kt\u00f3rzy przetestowali dziesi\u0105tki platform, zdaj\u0105 sobie spraw\u0119, \u017ce biblioteka gier to serce ka\u017cdego kasyna online. Na polskim rynku, nasyconym konkurencji, Spinit Casino odznacza si\u0119 w\u0142a\u015bnie swoj\u0105 ofert\u0105. Zadziwia ona nie tylko wielko\u015bci\u0105 tytu\u0142\u00f3w, ale przede wszystkim ich standardem i bogactwem. W tym tek\u015bcie szczeg\u00f3\u0142owo om\u00f3wi\u0119 ofert\u0119 Spinit. Zbadam oferowane kategorie, producent\u00f3w oprogramowania oraz funkcje, kt\u00f3re gwarantuj\u0105, \u017ce ka\u017cda ka\u017cda pojedyncza sesja gry robi si\u0119 wyj\u0105tkowa. Pragn\u0119 przekaza\u0107 polskim graczom praktyczny przewodnik po tym internetowym \u015bwiecie, by potrafili odnale\u017a\u0107 w nim idealne gry dla siebie.<\/p>\n

Automaty do gier (Sloty): Rdze\u0144 oferty<\/h2>\n

Automaty stanowi\u0105 trzon kolekcji w Spinit. To prawdziwy kalejdoskop temat\u00f3w. Kasyno wsp\u00f3\u0142dzia\u0142a z czo\u0142owymi dostawcami, co skutkuje na wysok\u0105 poziom grafiki, d\u017awi\u0119ku i nowatorskie rozwi\u0105zania. Polscy gracze odnajd\u0105 tu tak mi\u0119dzynarodowe hity, jak i tytu\u0142y posiadaj\u0105ce wyj\u0105tkow\u0105 popularno\u015bci\u0105 nad Wis\u0142\u0105.<\/p>\n

Klasyczne, wideo i jackpotowe: Typy slot\u00f3w<\/h3>\n

Asortyment slot\u00f3w jest sensownie podzielona, co u\u0142atwia wyb\u00f3r. Fani tradycji posiadaj\u0105 sekcj\u0119 tradycyjnych automat\u00f3w z owocami i zwyk\u0142ymi liniami wyp\u0142at. Mi\u0142o\u015bnicy wsp\u00f3\u0142czesnych wra\u017ce\u0144 potrafi\u0105 zanurzy\u0107 si\u0119 w \u015bwiecie slot\u00f3w wideo z z\u0142o\u017conymi fabu\u0142ami i bonusami. Autentyczn\u0105 atrakcj\u0105 s\u0105 jednak automaty z rosn\u0105cymi jackpotami. Pula wygranej ro\u015bnie tam z ka\u017cdym zak\u0142adem, oferuj\u0105c szans\u0119 na wygran\u0105, kt\u00f3ra potrafi odmieni\u0107 \u017cycie.<\/p>\n

Ulubione tematy w\u015br\u00f3d polskich graczy<\/h4>\n

Spogl\u0105daj\u0105c na preferencje, wida\u0107 \u017ce polscy gracze zw\u0142aszcza preferuj\u0105 sloty o tematyce mitologicznej, przygodowej oraz te inspirowane filmami i serialami. Spinit ma tego pe\u0142n\u0105 \u015bwiadomo\u015b\u0107 i proponuje liczne tytu\u0142\u00f3w z tych kategorii. Wiele gier posiada te\u017c opcj\u0119 gry za darmo (tryb demo). To niezwykle wa\u017cna funkcja, kt\u00f3ra pozwala sprawdzi\u0107 mechanik\u0119 bez ryzyka, zanim zainwestuje si\u0119 prawdziwe pieni\u0105dze.<\/p>\n

Gry z b\u0142yskawiczn\u0105 wygran\u0105 i dodatkowe kategorie<\/h2>\n

Biblioteka Spinit wykracza poza ni\u017c standardowe kasyno. Proponuje r\u00f3wnie\u017c gry z natychmiastow\u0105 wygran\u0105, takie jak losy czy loterie. To \u015bwietna odskocznia od bardziej strategicznych tytu\u0142\u00f3w, oferuj\u0105ca szybki rezultat i nieskomplikowan\u0105 zabaw\u0119. W ofercie cz\u0119sto pojawiaj\u0105 si\u0119 te\u017c specjalne kategorie promocyjne lub gry sezonowe, skorelowane na przyk\u0142ad ze \u015bwi\u0119tami. Dzi\u0119ki temu asortyment nigdy nie jest statyczny. Zawsze pojawia si\u0119 co\u015b nowego, co przyci\u0105ga uwag\u0119 i motywuje do powrotu na platform\u0119.<\/p>\n

Gry kasynowe na \u017cywo z prawdziwymi krupierami<\/h2>\n

Dla tych, kt\u00f3rzy t\u0119skni\u0105 za autentyczn\u0105 atmosfer\u0105 kasyna, sekcja gier na \u017cywo w Spinit to istna per\u0142a. To nie s\u0105 symulacje komputerowe. To transmisje wideo na \u017cywo z wysokiej klasy studi\u00f3w, prowadzone przez autentycznych krupier\u00f3w. Dzi\u0119ki tej metodzie, znajduj\u0105c si\u0119 wygodnie w domu, mo\u017cna odczu\u0107 dreszcz emocji przy stolikach ruletki, blackjacka czy baccarata. Komunikacja z krupierem i innymi graczami przez czat przynosi rozgrywce wsp\u00f3lnotowego wymiaru. Oferta jest obfita. Obejmuje standardowe warianty, ale te\u017c <\/p>\n

Wst\u0119p do obszernej biblioteki Spinit<\/h2>\n

W\u015br\u00f3d wielu kasyn online dla polskich graczy, slogan o “tysi\u0105cach gier” wyst\u0119puje niejednokrotnie. W wypadku Spinit to nie s\u0105 puste zapewnienia. Ju\u017c po wej\u015bciu widoczna jest ogromn\u0105 rozmiar oferty, kt\u00f3ra jest przy tym solidnie posegregowana i nieskomplikowana w nawigacji. To nie stanowi losowy zbi\u00f3r, lecz starannie zaplanowana <\/p>\n

Przegl\u0105danie i filtry: Spos\u00f3b na znalezienie doskona\u0142\u0105 gr\u0119<\/h2>\n

Posiada\u0107 mn\u00f3stwem gier to jedno. M\u00f3c si\u0119 w\u015br\u00f3d nich bezproblemowo porusza\u0107 \u2013 to co\u015b innego. Spinit daje rad\u0119 z tym zadaniem dzi\u0119ki przejrzystemu mechanizmowi nawigacji. Najwa\u017cniejsze kategorie s\u0105 czytelnie oznaczone. wyr\u00f3\u017cnione. Zaawansowane filtry umo\u017cliwiaj\u0105 ograniczy\u0107 poszukiwania wed\u0142ug producenta, zainteresowania, cech dodatkowych (jak “Bonus Buy” czy “Cz\u0119ste Free Spiny”) lub motywu\u017cytkownika. Dla graczy, kt\u00f3rzy ju\u017c s\u0105 \u015bwiadomi, czego oczekuj\u0105, jest dost\u0119pna sprawna wyszukiwarka. Z mojego do\u015bwiadczenia, te funkcje wyra\u017anie skracaj\u0105 czas szukania. Umo\u017cliwiaj\u0105 od razu przestawi\u0107 si\u0119 do tego, co si\u0119 autentycznie lubi.<\/p>\n

\"Swipe<\/p>\n

Najlepsi dostawcy oprogramowania dla Spinit<\/h2>\n

\"Online<\/p>\n

Poziom gier w kasynie online jest uzale\u017cniona bezpo\u015brednio od jego dostawc\u00f3w oprogramowania https:\/\/spinit.eu.com\/pl-pl\/<\/a>. Spinit Casino nie kooperuje z przypadkowymi firmami. W ofercie przedstawia hity od absolutnej \u015bwiatowej czo\u0142\u00f3wki. To za spraw\u0105 tym partnerstwom gracze w Polsce maj\u0105 dost\u0119p do nowoczesnych i sprawiedliwych produkt\u00f3w.<\/p>\n