/* 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":159280,"date":"2026-06-18T07:17:10","date_gmt":"2026-06-18T07:17:10","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=159280"},"modified":"2026-06-18T07:17:10","modified_gmt":"2026-06-18T07:17:10","slug":"casino-spingranny-8","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/casino-spingranny-8\/","title":{"rendered":"Ottimo per Utenti della Svizzera, Principianti ed Navigati, al Spingranny Casino"},"content":{"rendered":"
\n

Sono un analista del gioco online e, avendo studiato Spingranny Casino Spingranny<\/a> con attenzione, posso dire che questa piattaforma propone un valore eccezionale per la Svizzera. L’aspetto che salta all’occhio \u00e8 il suo dosaggio. Spingranny si presenta lineare e intuitivo per chi \u00e8 alle prime esperienze, senza per questo sacrificare la ricchezza di funzioni che desiderano i giocatori pi\u00f9 navigati. Notare un operatore applicarsi con pari impegno a ambo i gruppi di clientela non \u00e8 affatto comune. In questa revisione, analizzo i sette punti che fanno di Spingranny una decisione sicura, cominciando dalla sicurezza per arrivare alla gestione dei pagamenti, sempre con un riguardo alle esigenze del giocatore della Svizzera.<\/p>\n

Navigazione e Servizio Clienti<\/h2>\n

La semplicit\u00e0 d’uso di un sito web \u00e8 un elemento chiave per la soddisfazione. La piattaforma di Spingranny Casino ha un’interfaccia chiara, responsiva e rapida, sia su computer che su dispositivi mobili. Spostarsi tra le categorie di giochi, le pagine delle promozioni e l’area personale \u00e8 facile e logico. Anche il supporto clienti \u00e8 un punto di forza. \u00c8 presente in pi\u00f9 lingue, italiano compreso, tramite chat live 24 ore su 7 e email. Durante le mie verifiche, le risposte sono arrivate velocemente, sono state precise e hanno risolto i quesiti in modo pratico. Per un nuovo giocatore, avere la certezza di poter contare su un’assistenza effettiva in qualsiasi momento \u00e8 un aspetto rassicurante importante.<\/p>\n

Esperienza Mobile Integrale<\/h3>\n

Al giorno d’oggi si gioca principalmente in mobilit\u00e0. Spingranny Casino non ha un’app dedicata da scaricare, ma ha perfezionato il suo sito web per i browser mobile in modo ottimo. L’esperienza su smartphone o tablet \u00e8 praticamente uguale a quella da computer: tutti i giochi, le funzioni per depositare, il supporto e le promozioni sono accessibili senza perdite di qualit\u00e0 o di performance. Questo approccio “instant play” toglie il fastidio degli aggiornamenti software e d\u00e0 la possibilit\u00e0 di giocare subito dal browser. \u00c8 un punto a favore in termini di immediatezza e di memoria disponibile sul dispositivo.<\/p>\n

Un Sistema Affidabile e Regolamentato per la Svizzera<\/h2>\n

Soprattutto, viene la sicurezza. Ciascun giocatore svizzero pu\u00f2 chiedersi se un casino online sia legittimo. Spingranny Casino si presenta con una licenza rilasciata da Cura\u00e7ao. Questoorganismo fissa standard operativi precisi. La licenza comporta che il casino \u00e8 controllato periodicamente, che i giochi risultano certificati per la loro correttezza e che i fondi dei giocatori risultano protetti. Per un mercato come quello svizzero, attento alla trasparenza, \u00e8 una base affidabile. A questo, la piattaforma affianca la crittografia SSL a 256-bit. Ogni transazione e qualsiasi dato personale sono quindi protetti da accessi esterni. Navigando sul sito, si coglie un ambiente professionale, dove il divertimento non mette a rischio la seriet\u00e0.<\/p>\n

Responsible Gaming: Un Impegno Importante<\/h2>\n

In Svizzera, la protezione del giocatore \u00e8 un tema fondamentale. Un operatore affidabile deve fornire gli dispositivi adatti. Spingranny Casino mostra di prenderlo sul serio. Nel sistema sono integrati dispositivi esaustivi per il gioco responsabile. L’utente pu\u00f2 stabilire restrizioni individuali di deposito, perdite o periodo di gioco, con intervalli giornaliere, ebdomadari o mensili. Ci sono anche possibilit\u00e0 per una interruzione provvisoria (self-exclusion temporanea) o per l’auto-esclusione definitiva. I collegamenti specifici a enti di supporto specializzate arricchiscono il quadro. Si percepisce un’attenzione che va al di l\u00e0 del mero compito di legge, dimostrando una attenzione effettiva per il salute dei giocatori.<\/p>\n

Soluzioni di Pagamento Ideali per la Svizzera<\/h2>\n

Un casino potrebbe avere i giochi pi\u00f9 belli, ma se depositi e prelievi non sono agevoli, perde attrattiva. Per il giocatore svizzero, Spingranny Casino ha selezionato un insieme di opzioni conformi a le abitudini locali. Oltre alle carte di credito e debito internazionali (Visa, Mastercard), ci sono soluzioni di e-wallet molto popolari come PayPal, Skrill e Neteller, selezionate per la loro velocit\u00e0 e per un aggiuntivo strato di sicurezza. Non fanno difetto i bonifici bancari tradizionali. Un elemento cruciale \u00e8 il supporto a varie valute, che evita conversioni fastidiose e commissioni occultate. I tempi per i prelievi sono in linea negli standard del settore (dalle 24 alle 48 ore per le approvazioni), con l’immediatezza tipica delle opzioni e-wallet.<\/p>\n

Vantaggi Competitivi per il Giocatore Avanzato Svizzero<\/h2>\n

Mentre i neofiti desiderano chiarezza e bonus, l’utente navigato considera parametri diversi. Spingranny Casino reagisce con funzionalit\u00e0 tecniche rilevanti. Le percentuali di RTP (RTP) per slot e giochi da tavolo sono di norma accessibili e tra le pi\u00f9 alte del mercato. \u00c8 un dato cruciale per chi fonda la propria pianificazione sulla matematica. La variet\u00e0 di giochi live dealer con croupier in tempo reale \u00e8 vasta e include tavoli con limiti elevati. In pi\u00f9, l’mancanza di commissioni fisse sui prelievi e la organizzazione ottimale delle richieste l’ esperienza finanziaria sia l’esperienza finanziaria trasparente e professionale. Un elemento fondamentale per chi maneggia volumi di gioco importanti.<\/p>\n

La mia revisione di Spingranny Casino rivela una piattaforma solida e ben organizzata per il mercato svizzero. Ottiene in un scopo non banale: essere un punto di ingresso invitante e sicuro per i principianti, con guide, bonus onesti e un’interfaccia intuitiva. Allo stesso tempo, soddisfa le le necessit\u00e0 tecniche dei esperti con un catalogo ricco, condizioni eque e strumenti di gestione evoluti. Questo duplice attenzione, insieme a metodi di pagamento convenienti, un supporto clienti reattivo e un dedizione solido per il gioco sicuro, fa di Spingranny Casino una alternativa valida e e concorrenziale per ogni giocatore in Svizzera, senza differenze di esperienza.<\/p>\n

Un Catalogo di Giochi Vasta ed Armoniosa<\/h2>\n

Il principale motore di un casino \u00e8 la sua selezione di giochi. Su questo aspetto, Spingranny Casino fa un ottimo lavoro. Lavora con molti sviluppatori principali, tra cui NetEnt, Pragmatic Play, Evolution Gaming e Play’n GO. La qualit\u00e0 grafica e sonora \u00e8 quindi superba, e le dinamiche di gioco funzionano bene. La libreria appaga esigenze diversi: si passa dagli slot video con narrazioni avvincenti e bonus originali, ai classici da tavolo come blackjack, roulette e baccarat in molte varianti. Per l’esperto, la esistenza di tetti di puntata importanti e di postazioni con condizioni favorevoli (come il blackjack con un RTP del 99.6%) \u00e8 un messaggio chiaro. La piattaforma non pensa solo al giocatore occasionale.<\/p>\n

Le Colonne Portanti dell’Intrattenimento<\/h3>\n

Per afferrare meglio cosa offre Spingranny, \u00e8 opportuno osservare alle sue macro-categorie. Ogni area presenta una scelta che tende sulla bont\u00e0, prevenendo di occupare spazi con titoli datati o poco stimolanti. I nuovi giochi arrivano con regolarit\u00e0, un dettaglio che preserva acceso l’interesse anche dei clienti pi\u00f9 assidui. Questo equilibrio in evoluzione \u00e8 ci\u00f2 che crea un’esperienza di gioco duratura.<\/p>\n

Slot Machine e Giochi a Tema Svizzero<\/h4>\n

In aggiunta ai grandi successi internazionali, la proposta include titoli che riescono a soddisfare al gusto locale. Si incontrano slot con ambientazioni alpine o simboli legati alla tradizione europea. L’attenzione al dettaglio culturale esiste, anche se non si parla di un’offerta rigidamente regionalizzata. \u00c8 piuttosto una propensione nella selezione che fa diventare il catalogo pi\u00f9 conosciuto per un giocatore svizzero.<\/p>\n

Vantaggi e Promozioni: Oneste e Profittevoli<\/h2>\n

L’ambito dei bonus online \u00e8 frequentemente confuso, con termini complicati. Spingranny Casino sceglie una strada diversa, quella della chiarezza. Il programma di benvenuto \u00e8 competitivo e si estende su diversi versamenti, permettendo di conoscere la piattaforma con un capitale pi\u00f9 solido. L’aspetto che apprezzo di pi\u00f9 \u00e8 la onest\u00e0 sui vincoli di gioco (wagering requirements). Risultano sempre chiari e, paragonati alla media del settore, accettabili. Per lo scommettitore navigato, hanno rilevanza anche le offerte attive: competizioni settimanali con montepremi in denaro contante, iniziative di cashback e spin gratis su macchine specifiche. Tali proposte valorizzano la costanza e incrementano il valore al gioco autentico.<\/p>\n