/* 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":140435,"date":"2026-06-10T20:51:41","date_gmt":"2026-06-10T20:51:41","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=140435"},"modified":"2026-06-10T20:51:41","modified_gmt":"2026-06-10T20:51:41","slug":"rainbet-casino-realizzato-per-lo-svago-e-lintegrita-dei-giocatori-in-italia","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/rainbet-casino-realizzato-per-lo-svago-e-lintegrita-dei-giocatori-in-italia\/","title":{"rendered":"Rainbet Casino: Realizzato per lo Svago e l’Integrit\u00e0 dei Giocatori in Italia"},"content":{"rendered":"
\n\"Crypto<\/p>\n

Nel scenario del gioco online italiano, la ricerca di una piattaforma fidata che coniughi divertimento e sicurezza costituisce una priorit\u00e0 assoluta per gli utenti https:\/\/rainbetcasino.app\/it-it\/<\/a>. Rainbet Casino si propone come una soluzione concreta a questa esigenza, fondando la sua offerta su un fondamento cardine: assicurare un’esperienza di gioco totale e sicura. La piattaforma non si ferma a presentare un ampio catalogo di giochi, ma crea il suo ambiente su a valori di chiarezza, correttezza e rispetto per il cliente, collocandosi come una scelta consapevole nel mercato normato italiano.<\/p>\n

\"Stake<\/p>\n

Il Servizio Clienti Esclusivo ai Giocatori Italiani<\/h2>\n

Rainbet Casino comprende l’importanza di un supporto competente e pronto, specialmente quando si opera in un mercato specifico come quello italiano. Per questo mette a disposizione un servizio di assistenza clienti dedicato, accessibile soprattutto tramite live chat e email. Il team di supporto non solo \u00e8 preparato a risolvere questioni tecniche o amministrative in tempi brevi, ma comunica nella lingua italiana, rimuovendo barriere linguistiche e garantendo una comunicazione trasparente ed efficace. Questa presenza costante e preparata rafforza il senso di sicurezza del giocatore, con la certezza di avere un punto di riferimento<\/a> sicuro in caso di necessit\u00e0.<\/p>\n

Una Gestione Regolata e Sicuro al Gioco su Internet<\/h2>\n

Rainbet Casino si muove nel preciso sistema di regole definito dall’Agenzia delle Dogane e dei Monopoli (ADM) per l’Italia, garantendo la pi\u00f9 alta legalit\u00e0 e sicurezza per gli clienti. Questa autorizzazione ufficiale non \u00e8 un semplice adempimento, ma la base fondamentale di ogni operazione sulla sito. Comporta controlli rigorosi, revisioni periodiche e l’obbligo di conformarsi a standard di gioco consapevole moderni. Per il utente italiano, questo si traduce nella certezza di confrontarsi con un operatore verificato, che salvaguarda i dati privati e bancari attraverso sistemi di crittografia di avanzatissima tecnologia, fornendo un ambiente dove il intrattenimento pu\u00f2 realizzarsi in assoluta calma.<\/p>\n

Opzioni di Pagamento Affidabili e Veloce<\/h2>\n

La organizzazione delle transazioni finanziarie \u00e8 un elemento cruciale per l’esperienza utente, e Rainbet Casino la gestisce offrendo efficacia e affidabilit\u00e0. La piattaforma fornisce i metodi di pagamento pi\u00f9 popolari e apprezzati in Italia, dalle carte di credito e debito come Visa e Mastercard, ai portafogli elettronici e ai bonifici bancari diretti. Ogni transazione, sia di deposito che di prelievo, \u00e8 tutelata da protocolli di sicurezza avanzati. L’obiettivo \u00e8 garantire che le operazioni economiche si svolgano in modo celere, soprattutto per quanto riguarda i tempi di prelievo, e senza problemi, lasciando al giocatore la sola preoccupazione di apprezzare il gioco.<\/p>\n

Impegno e Controlli per un Gioco Responsabile<\/h2>\n

L’impegno di Rainbet Casino verso l’onest\u00e0 si mostra in modo evidente attraverso il suo programma di gioco responsabile. La sede mette a disposizione agli clienti una gamma di risorse pratici per conservare il controllo della propria attivit\u00e0 di gioco, come la facolt\u00e0 di definire limiti di versamento, di perdita economica o di tempo di partita. Inoltre, agevola l’accesso a opzioni di auto-esclusione temporanea o permanente e presenta link specifici a associazioni di supporto specializzate. Queste azioni proattive dimostrano come il divertimento sia valutato in un’prospettiva di salute, promuovendo un metodo equilibrato e informato al gioco online.<\/p>\n

Rainbet Casino si presenta al pubblico italiano italiano come una realt\u00e0 strutturata, che pone al centro della sua offerta sia l’eccellenza dell’intrattenimento che i valori etici di onest\u00e0 e tutela del utente. Dall’vasta scelta di giochi certificati alla trasparenza di processo, passando per il servizio dedicato e gli risorse di gioco responsabile, ogni elemento tende verso un scopo definito: garantire un’avventura di gioco online protetta, gradevole e appagante nel totale osservanza delle normative e del salute degli utenti.<\/p>\n

Bonus Trasparenti e Condizioni Chiare<\/h2>\n

Rainbet Casino accoglie i nuovi giocatori e ricompensa la fedelt\u00e0 di quelli esistenti attraverso un sistema di bonus e promozioni concepito con chiarezza. L’offerta di benvenuto \u00e8 organizzata per offrire un reale valore aggiunto, consentendo di esplorare la piattaforma con un bankroll potenziato. Ci\u00f2 che caratterizza l’approccio di Rainbet \u00e8 l’enfasi sulla trasparenza: i termini e le condizioni collegati a ogni bonus, inclusi i requisiti di puntata (wagering requirements), sono illustrati in modo semplice e comprensibile. Questa politica previene fraintendimenti e offre al giocatore di fare scelte informate, adeguandosi al principio di integrit\u00e0 e correttezza che orienta l’intera operazione.<\/p>\n

La Variet\u00e0 dei Giochi a Disposizione di Clic<\/h2>\n

Il cuore pulsante di Rainbet Casino \u00e8 la sua selezione di giochi, attentamente curata per accontentare i desideri pi\u00f9 vari. Gli fan di slot saranno in grado di esplorare un vasto assortimento di titoli, dalle video slot pi\u00f9 recenti con visual avvincenti e caratteristiche innovative, alle slot storiche dal sapore tradizionale. Non manca una sezione dedicata al casin\u00f2, con tutte le varianti di blackjack, roulette, baccarat e poker offerti in modalit\u00e0 sia tradizionali che live. La piattaforma collabora con i migliori provider di software al mondo, garantendo non solo variet\u00e0, ma anche eccellenza grafica, dinamismo di gioco e meccaniche di gioco eque e verificate.<\/p>\n

L’Adrenalina del Vivo con i Dealer Professionali<\/h3>\n

Per chi desiderano l’vera atmosfera del casin\u00f2 evitando di uscire di casa, Rainbet Casino mette a disposizione un reparto live dealer di eccellenza. Tramite streaming in alta definizione, i giocatori possono comunicare con conduttori professionisti e altri partecipanti in tempo reale, immergendosi in giochi come la roulette live, il blackjack live e il poker live. Questa esperienza sociale e dinamica emula fedelmente la tensione e l’classe di una sala da gioco tradizionale, portando un grado di immersione e autenticit\u00e0 che le edizioni digitali normali non riescono a raggiungere, tutto a favore di un divertimento pi\u00f9 coinvolgente e soddisfacente.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"

Nel scenario del gioco online italiano, la ricerca di una piattaforma fidata che coniughi divertimento e sicurezza costituisce una priorit\u00e0 assoluta per gli utenti https:\/\/rainbetcasino.app\/it-it\/. Rainbet Casino si propone come una soluzione concreta a questa esigenza, fondando la sua offerta su un fondamento cardine: assicurare un’esperienza di gioco totale e\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-140435","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/140435","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=140435"}],"version-history":[{"count":1,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/140435\/revisions"}],"predecessor-version":[{"id":140436,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/140435\/revisions\/140436"}],"wp:attachment":[{"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=140435"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=140435"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=140435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}