/* 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":140042,"date":"2026-06-10T16:54:31","date_gmt":"2026-06-10T16:54:31","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=140042"},"modified":"2026-06-10T16:54:31","modified_gmt":"2026-06-10T16:54:31","slug":"luckywave","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/luckywave\/","title":{"rendered":"Des jeux de slots et live disponibles sans restriction avec LuckyWave Casino en France"},"content":{"rendered":"
Dans le paysage des casinos en ligne fran\u00e7ais, l’acc\u00e8s \u00e0 une s\u00e9lection de jeux \u00e9tendue et de premium est une exigence pour les joueurs. Luckywave Validation Du Compte<\/a> Casino s’est positionn\u00e9 comme une enseigne de choix, fournissant une large palette de machines \u00e0 sous et de jeux live propos\u00e9s librement pour les joueurs de France. L’op\u00e9rateur ma\u00eetrise les attentes particuli\u00e8res du march\u00e9 fran\u00e7ais, mettant \u00e0 disposition une interface con\u00e7ue, un service client dans la langue de Moli\u00e8re et des m\u00e9thodes de paiement locales. Cet investissement se concr\u00e9tise par une exp\u00e9rience agr\u00e9able o\u00f9 amusement et s\u00fbret\u00e9 vont de pair. D\u00e9couvrir l’univers de LuckyWave, c’est explorer un espace de jeu pens\u00e9 pour satisfaire aux standards exigeants des amateurs fran\u00e7ais, tout en garantissant un environnement r\u00e9gul\u00e9 et s\u00fbr.<\/p>\n La s\u00e9lection de machines \u00e0 sous de LuckyWave Casino est v\u00e9ritablement vaste, con\u00e7u pour combler les go\u00fbts les plus \u00e9clectiques. Des classiques intemporels aux derni\u00e8res sorties \u00e0 th\u00e8me, les joueurs fran\u00e7ais ont un large choix. Les titres proviennent des plus grands fournisseurs de l’industrie, offrant des graphismes splendides, en.wikipedia.org<\/a> des animations soign\u00e9es et des bandes-son captivantes. On y trouve des slots aux m\u00e9caniques simples, id\u00e9ales pour les d\u00e9butants, comme des jeux \u00e9labor\u00e9s avec de multiples lignes de paiement, des options de pari flexibles et des volatilit\u00e9s vari\u00e9es. Les jackpots progressifs sont mis en avant, donnant la possibilit\u00e9 de remporter des sommes transformant une vie. LuckyWave veille \u00e0 renouveler p\u00e9riodiquement son offre, assurant que les joueurs en France puissent toujours profiter aux nouveaut\u00e9s qui animent le secteur.<\/p>\n Parmi les fournisseurs pr\u00e9sents, des noms comme NetEnt, Play’n GO, Pragmatic Play et Evolution Gaming offrent une diversit\u00e9 th\u00e9matique remarquable. Les joueurs peuvent partir \u00e0 travers l’ancienne \u00c9gypte, parcourir des mondes fantastiques ou se plonger dans des univers cin\u00e9matographiques. Les fonctionnalit\u00e9s de jeu telles que les tours gratuits, les symboles sp\u00e9ciaux, les modes de rejeu et les multiplicateurs dynamiques sont largement r\u00e9pandues, accroissant le potentiel de gains et l’interactivit\u00e9. Il est important de noter que chaque slot pr\u00e9sente un pourcentage de retour au joueur (RTP) clairement indiqu\u00e9, laissant aux joueurs avertis de faire leurs choix en connaissance de cause. Cette transparence est un gage de confiance additionnel.<\/p>\n Saisir les habitudes locales est primordial, et LuckyWave Casino propose une s\u00e9lection de solutions de paiement parfaitement adapt\u00e9es aux r\u00e9sidents de France. Les options traditionnelles comme les cartes de cr\u00e9dit Visa et Mastercard sont bien s\u00fbr disponibles, mais l’op\u00e9rateur va plus loin en int\u00e9grant des portefeuilles \u00e9lectroniques tr\u00e8s populaires tels que PayPal, Skrill et Neteller. Ces m\u00e9thodes procurent souvent des transactions encore plus rapides et une strate de confidentialit\u00e9 suppl\u00e9mentaire. Pour ceux qui choisissent les solutions directement li\u00e9es \u00e0 leur compte bancaire, le virement bancaire reste une valeur s\u00fbre. L’arriv\u00e9e et le retrait des fonds sont g\u00e9n\u00e9ralement r\u00e9alis\u00e9s dans des d\u00e9lais raisonnables, avec une politique transparente concernant d’\u00e9ventuels frais. Cette diversit\u00e9 de choix autorise \u00e0 chaque joueur de g\u00e9rer son bankroll de la mani\u00e8re qui lui convient le mieux.<\/p>\n La gestion des transactions est simplifi\u00e9e par un historique d\u00e9taill\u00e9 disponible dans l’espace membre, o\u00f9 chaque d\u00e9p\u00f4t, retrait et transfert est consign\u00e9 avec la date, le montant et le statut. Pour les d\u00e9p\u00f4ts, la plupart des m\u00e9thodes sont instantan\u00e9es, cr\u00e9ditant le compte joueur en quelques secondes. Concernant les retraits, la rapidit\u00e9 est une priorit\u00e9 assum\u00e9e de LuckyWave. L’op\u00e9rateur a mis en place des proc\u00e9dures de v\u00e9rification efficaces pour minimiser les d\u00e9lais de traitement. La vitesse finale est fonction de la m\u00e9thode, les portefeuilles \u00e9lectroniques \u00e9tant les plus rapides, souvent en moins de 24 heures. Cette efficacit\u00e9 dans la gestion financi\u00e8re est un \u00e9l\u00e9ment cl\u00e9 de la satisfaction client et d\u00e9montre le professionnalisme de la plateforme.<\/p>\n Pour ceux qui recherchent l’authenticit\u00e9 d’un \u00e9tablissement terrestre depuis leur domicile, LuckyWave Casino propose une section live casino des plus \u00e9tendues. Ici, des croupiers professionnels et sympathiques accueillent les joueurs \u00e0 des tables de blackjack, de roulette, de baccara et de poker. Les jeux sont diffus\u00e9s en haute d\u00e9finition depuis des studios d\u00e9di\u00e9s, instaurant une atmosph\u00e8re sociale et interactive unique. Les joueurs peuvent communiquer avec le croupier et parfois m\u00eame avec les autres participants, retrouvant la convivialit\u00e9 d’une vraie table. Des variantes innovantes, comme le Lightning Roulette ou l’Infinite Blackjack, viennent pimenter l’exp\u00e9rience avec des fonctionnalit\u00e9s bonus et des multiplicateurs sp\u00e9ciaux. Cette immersion totale est un atout majeur pour LuckyWave sur le march\u00e9 fran\u00e7ais, o\u00f9 les amateurs de jeux de table sont nombreux et exigeants.<\/p>\n La technologie derri\u00e8re ces jeux est \u00e0 la pointe, avec des flux vid\u00e9o sans latence et des interfaces utilisateur intuitives pour placer ses mises en quelques clics. Les limites de mise sont adapt\u00e9es \u00e0 tous les profils, des petits parieurs aux high-rollers. Des pr\u00e9sentateurs francophones sont souvent disponibles sur certaines tables, consolidant le sentiment de proximit\u00e9 pour la client\u00e8le fran\u00e7aise. L’offre inclut \u00e9galement des jeux de niche comme le Monopoly Live ou le Dream Catcher, qui m\u00e9langent \u00e9l\u00e9ments de jeu de hasard et de spectacle. Cette section live casino n’est pas un simple ajout mais un pilier central de l’offre de LuckyWave, constamment enrichi pour maintenir un niveau d’innovation et de divertissement optimal.<\/p>\n Exercer sur le march\u00e9 fran\u00e7ais implique une conformit\u00e9 rigoureuse avec le r\u00e9gime r\u00e9glementaire d\u00e9fini par l’Autorit\u00e9 Nationale des Jeux (ANJ). LuckyWave Casino dispose d’ une licence en r\u00e8gle, garantissant aux joueurs une pratique autoris\u00e9e, s\u00e9curis\u00e9e et impartiale. Toutes les transactions financi\u00e8res sont prot\u00e9g\u00e9es par des technologies de cryptage de pointe, similaires \u00e0 celles employ\u00e9es par les institutions bancaires. L’op\u00e9rateur s’engage par ailleurs dans une politique de jeu raisonnable, mettant \u00e0 disposition des outils de contr\u00f4le comme des limites de d\u00e9p\u00f4t, de mise ou de temps de jeu. Les g\u00e9n\u00e9rateurs de nombres al\u00e9atoires (RNG) qui r\u00e9gissent les sorties des jeux sont v\u00e9rifi\u00e9s fr\u00e9quemment par des laboratoires autonomes. Pour le joueur fran\u00e7ais, cela se traduit par une s\u00e9r\u00e9nit\u00e9 d’esprit essentielle, sachant que son passe-temps se d\u00e9roule dans un environnement de s\u00e9curit\u00e9 et contr\u00f4l\u00e9.<\/p>\nL’\u00e9ventail des machines \u00e0 sous chez LuckyWave Casino<\/h2>\n
Les options de paiement adapt\u00e9es au march\u00e9 fran\u00e7ais<\/h2>\n
Le monde fascinant des jeux de table en direct<\/h2>\n
S\u00e9curit\u00e9 et cadre l\u00e9gal pour les joueurs fran\u00e7ais<\/h2>\n