/* 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":159180,"date":"2026-06-18T04:39:18","date_gmt":"2026-06-18T04:39:18","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=159180"},"modified":"2026-06-18T04:39:18","modified_gmt":"2026-06-18T04:39:18","slug":"le-casino-gransino-la-ou-votre-tour-de-chance-commence-en-france","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/le-casino-gransino-la-ou-votre-tour-de-chance-commence-en-france\/","title":{"rendered":"Le Casino Gransino : L\u00e0 o\u00f9 votre tour de chance commence en France"},"content":{"rendered":"
\n\"Best<\/p>\n

En France, les amateurs de jeux en ligne recherchent une aventure \u00e0 la fois fiable, ludique et gratifiante. Chez Gransino Casino, nous croyons que chaque joueur peut pr\u00e9tendre \u00e0 une plateforme o\u00f9 l’fr\u00e9n\u00e9sie du jeu combine la fiabilit\u00e9 et la \u00e9thique. Nous vous mettons \u00e0 disposition un environnement o\u00f9 votre aventure commence avec un coup de roue, un coup de d\u00e9s ou un cycle de machine \u00e0 sous, le tout dans un cadre autoris\u00e9 et contr\u00f4l\u00e9. Notre engagement est de rendre de chaque visite une occasion de nouveaut\u00e9 et de plaisir, avec une gamme attentivement pr\u00e9par\u00e9e pour r\u00e9pondre aux envies et besoins des joueurs fran\u00e7ais.<\/p>\n

Plonger dans l’univers captivant de Gransino Casino<\/h2>\n

Immergez-vous dans un univers num\u00e9rique d\u00e9velopp\u00e9 pour la d\u00e9couverte et la fluidit\u00e9. Gransino Casino vous re\u00e7oit sur une interface moderne et simple, pens\u00e9e pour une navigation facile depuis votre ordinateur ou votre appareil mobile. L’esth\u00e9tique raffin\u00e9e et l’agencement clair soulignent notre vaste collection de jeux, vous offrant de trouver rapidement votre bonheur. Nous avons \u00e9labor\u00e9 cet environnement pour que vous vous concentriez sur l’essentiel : le divertissement. Chaque d\u00e9tail, des graphismes aux fonctionnalit\u00e9s, a \u00e9t\u00e9 am\u00e9lior\u00e9 pour offrir une exp\u00e9rience utilisateur de premier ordre, caract\u00e9ristique des plateformes de casino en ligne les plus renomm\u00e9es.<\/p>\n

Les offres et offres pour d\u00e9buter votre aventure<\/h2>\n

Pour souligner le lancement de votre parcours chez Gransino, nous vous proposons un accueil convivial sous mani\u00e8re d’offres int\u00e9ressantes. Notre proposition de d\u00e9marrage est pens\u00e9e pour stimuler vos premiers d\u00e9p\u00f4ts et accro\u00eetre vos chances de trouver nos divertissements. Au-del\u00e0 de l’arriv\u00e9e, nous maintenons l’engagement avec un programme de bonus fr\u00e9quentes, des parties gratuites sur les nouvelles sorties, des tournois \u00e0 prix attractifs et des propositions cashback. Chaque offre est assujettie \u00e0 des r\u00e8gles de jeu justes et transparentes, que nous vous encourageons \u00e0 lire soigneusement pour en b\u00e9n\u00e9ficier totalement.<\/p>\n

S\u00e9curit\u00e9 et impartialit\u00e9 : Nos engagements fondamentaux<\/h2>\n

Votre tranquillit\u00e9 d’esprit est notre priorit\u00e9 majeure. Gransino Casino op\u00e8re sous une licence d\u00e9livr\u00e9e par l’Autorit\u00e9 Nationale des Jeux (ANJ), confirmant notre conformit\u00e9 avec la l\u00e9gislation stricte en vigueur en France. Toutes nos transactions financi\u00e8res sont prot\u00e9g\u00e9es par un cryptage SSL de pointe, offrant la confidentialit\u00e9 de vos donn\u00e9es. L’\u00e9quit\u00e9 des jeux est quant \u00e0 elle certifi\u00e9e par des g\u00e9n\u00e9rateurs de nombres al\u00e9atoires (RNG) audit\u00e9s fr\u00e9quemment par des organismes ind\u00e9pendants. Nous encourageons \u00e9galement une pratique de jeu responsable en mettant \u00e0 disposition des outils de gestion de d\u00e9p\u00f4t, d’auto-exclusion et en collaborant avec des associations d’aide.<\/p>\n

Guide pratique pour tenter votre chance sur Gransino Casino<\/h2>\n

Commencer \u00e0 jouer sur notre plateforme est un parcours facile et efficace. Nous avons souhait\u00e9 rendre l’inscription et la prise en main faciles pour tout le monde, afin que vous puissiez vous concentrer sur le jeu sans contraintes inutiles. Voici les points importants pour d\u00e9marrer votre exp\u00e9rience en toute tranquillit\u00e9 et jouir de tout ce que Gransino Casino a \u00e0 offrir aux joueurs fran\u00e7ais.<\/p>\n

    \n
  1. Enregistrement : Saisissez le formulaire en ligne avec vos donn\u00e9es correctes pour cr\u00e9er votre compte.<\/li>\n
  2. V\u00e9rification : Validez votre identit\u00e9 en fournissant les documents requis, une \u00e9tape r\u00e9glementaire et incontournable.<\/li>\n
  3. D\u00e9p\u00f4t initial : Optez pour une m\u00e9thode de paiement fiable (carte, virement, portefeuille \u00e9lectronique) et r\u00e9alisez votre premier versement.<\/li>\n
  4. R\u00e9clamez votre bonus : Si vous le voulez, d\u00e9bloquez l’offre de bienvenue depuis votre compte.<\/li>\n
  5. S\u00e9lectionnez votre jeu : Explorez la ludoth\u00e8que et lancez-vous dans l’aventure !<\/li>\n<\/ol>\n

    Une s\u00e9lection de jeux exceptionnelle pour toutes les envies<\/h2>\n

    Notre satisfaction se trouve dans notre biblioth\u00e8que de jeux, abondante et vari\u00e9e, constamment renouvel\u00e9e pour pr\u00e9server la modernit\u00e9. Nous coop\u00e9rons avec les plus grands fournisseurs du domaine pour vous pr\u00e9senter des cr\u00e9ations qui combinent qualit\u00e9 visuelle, jouabilit\u00e9 innovante et fonctionnalit\u00e9s palpitantes. Que vous apparteniez \u00e0 un fervent de bandits manchots aux th\u00e8mes vari\u00e9s, un expert amateur du blackjack ou un adepte de excitation sur la roue de la fortune, vous d\u00e9couvrirez votre compte. Notre offre est organis\u00e9 pour faciliter votre navigation, avec des filtres efficaces et des sections d\u00e9di\u00e9es.<\/p>\n