/* 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":151591,"date":"2026-06-13T17:40:18","date_gmt":"2026-06-13T17:40:18","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=151591"},"modified":"2026-06-13T17:40:18","modified_gmt":"2026-06-13T17:40:18","slug":"casino-spinsy-offizielle","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/casino-spinsy-offizielle\/","title":{"rendered":"Lernen spielerisch: Spinsy Casino lehrt Spielern in der Schweiz das Spielen"},"content":{"rendered":"
\n\"Best<\/p>\n

Stellen Sie sich einmal vor, Sie k\u00f6nnen casino spinsy offizielle<\/a>spiele lernen, ohne Geld zu riskieren oder zu langweilen. Genau das macht Spinsy Casino umsetzbar. Unsere Schulungsplattform richtet sich an hiesige Spieler, die besonderen Wert auf fundiertes Wissen und einen fairen Start legen. Wir verwandeln \u00f6de Regeln in spannende Lektionen, sodass Sie mit Selbstbewusstsein und Wissen ins Spiel einsteigen.<\/p>\n

Interaktive Demos vs. Anleitungen: Die ideale Kombination<\/h2>\n

Wir bauen auf eine ausgepr\u00e4gte Kombination aus Theorie und Praxis. Die textbasierten Guides bieten das feste Fundament \u2013 sie sind Ihre Wissensbasis. Die interaktiven Demos sind dann der \u00dcbungsplatz f\u00fcr die Praxis. Diese Kombination schafft einem fundierteren Verst\u00e4ndnis, das \u00fcber blo\u00dfes Auswendiglernen hinausragt.<\/p>\n

Die Demos funktionieren auf authentischer Software. Der \u00dcbergang zum Echtgeldespiel wirkt dadurch organisch an. Die Guides steigen bis ins Detail: Warum ist es beim Blackjack rechnerisch die beste Entscheidung, bei einer 16 stehen zu bleiben, wenn der Dealer eine 10 hat? Nur dieses Fachwissen entwickelt aus einem Spieler einen Kenner.<\/p>\n

Vergn\u00fcgen am Bildung als Weg zum dauerhaften Spielgewinn<\/h2>\n

Der st\u00e4rkste Widersacher des Lernens ist oft Frustration oder \u00dcberdruss. Ein Tutorial-Konzept greift genau hier ein und wandelt den Lernvorgang in ein am\u00fcsantes Erlebnis. Der spielerische Ansatz steigert die Motivation. Mit dieser Basis aus Bildung und Spa\u00df sind Sie ideal gewappnet, um das Spielerlebnis bei Spinsy voll auszukosten.<\/p>\n

Wir bauen spielhafte Elemente wie Quizze, kleine Challenges und Pr\u00e4mien f\u00fcr beendete Lektionen hinzu. Bildung soll sich wie eine Erkundungstour vorkommen, nicht wie Pflichten. Diese positive Verkn\u00fcpfung bewirkt, dass das erworbene Wissen besser haften bleibt und auch praktisch genutzt wird.<\/p>\n

Unsere Spinsy Casino Lernphilosophie: St\u00fcck f\u00fcr St\u00fcck zum Profi<\/h2>\n

Unser Konzept ist klar gegliedert, aber nicht unflexibel. Lernen funktioniert am besten, wenn es sich in den eigenen Rhythmus einf\u00fcgt. Deshalb bieten wir verschiedene Formate, die sich Ihrem Rhythmus anpassen. Vom anf\u00e4nglichen Regelverst\u00e4ndnis bis zu ausgekl\u00fcgelten Taktiken unterst\u00fctzen wir Sie auf jeglicher Stufe.<\/p>\n

Drei Punkte sind uns dabei essenziell: Miteinander, Anwendungsbezug und eine auf Sie angepasste Lernkurve. Jede Einheit ist so konzipiert, dass Sie die Theorie sofort in einer risikofreien Umgebung erproben k\u00f6nnen. Diese Kombination aus Begreifen und Ausprobieren sorgt daf\u00fcr, dass das Wissen sitzt und Sie sicher f\u00fcr das tats\u00e4chliche Spiel werden.<\/p>\n

Die drei S\u00e4ulen unseres erfolgreichen Trainingssystems<\/h2>\n

Unser Konzept vereint drei unterschiedliche Ans\u00e4tze, um jeden Lerntyp zu erreichen. Dadurch gew\u00e4hrleisten wir, dass das Gelernte auch wirklich h\u00e4ngen bleibt. Wir bauen auf Abwechslung und thematische Tiefe.<\/p>\n

\"21+<\/p>\n

Zun\u00e4chst: Interaktive \u00dcbungen im \u00dcbungsmodus mit Hilfestellungen in Echtzeit. Weiterhin: Ausf\u00fchrliche Video-Guides, die schwierige Schritte anschaulich zeigen. Als Drittes: Umfassende Strategiedokumente, die als Nachschlagewerk f\u00fcr fortgeschrittene Themen dienen. Diese drei Bausteine erf\u00fcllen gemeinsam alle Lernw\u00fcnsche.<\/p>\n

Ihr Fortschritt und ma\u00dfgeschneiderte Empfehlungen<\/h2>\n

Wir stehen Ihnen zur Seite nicht nur anfangs, sondern w\u00e4hrend Ihres gesamten Lernprozesses. Unser System speichert, welche Kurse Sie abgeschlossen haben, und schl\u00e4gt Ihnen darauf basierend den n\u00e4chsten sinnvollen Schritt vor. So entsteht ein individueller Pfad, der weder zu einfach noch zu schwer f\u00fcr Sie ist.<\/p>\n

Regelm\u00e4\u00dfige Fortschrittsberichte pr\u00e4sentieren Ihre St\u00e4rken und Verbesserungsm\u00f6glichkeiten, in denen Sie noch dazulernen. Haben Sie Interesse an einer Spezialisierung auf Tischspiele? Sie erhalten automatisch Vorschl\u00e4ge f\u00fcr weiterf\u00fchrende Kurse. Dieser anpassungsf\u00e4hige Ansatz macht Ihren Lernweg effizient und zielgerichtet.<\/p>\n

\"Best<\/p>\n

Die technische Umsetzung hinter den Anleitungen: Bedienbarkeit first<\/h2>\n

Unsere Bildungsplattform l\u00e4uft technisch st\u00f6rungsfrei und ist auf allen Endger\u00e4ten \u2013 Desktop, Smartphone oder Tablet \u2013 gleichermassen intuitiv. Strukturierte Men\u00fcf\u00fchrung, ansprechende Grafiken und verst\u00e4ndliche Videos stehen f\u00fcr uns im Mittelpunkt. Sie sollen sich ganz auf den Inhalt konzentrieren k\u00f6nnen, ohne mit technischen Schwierigkeiten zu k\u00e4mpfen.<\/p>\n

Die Ladezeiten sind kurz, und Ihr pers\u00f6nlicher Lernfortschritt wird kontinuierlich gespeichert. Sie k\u00f6nnen immer pausieren und genau dort weitermachen, wo Sie aufgeh\u00f6rt haben. Diese technische Robustheit und Best\u00e4ndigkeit entspricht dem Schweizer Qualit\u00e4tsanspruch, das wir in alle Bereiche unseres Angebots einbringen.<\/p>\n

Beliebte Spiele, die wir Ihnen beibringen<\/h2>\n

Unser Portfolio beinhaltet die traditionellen Klassiker und zeitgen\u00f6ssische Hits. Besonderes Augenmerk legen wir dabei auf Spiele, die in der Schweiz traditionell popul\u00e4r sind. Unsere Zusammenstellung ist \u00f6rtlich relevant und praxisnah.<\/p>\n