/* 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":140834,"date":"2026-06-11T02:09:05","date_gmt":"2026-06-11T02:09:05","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=140834"},"modified":"2026-06-11T02:09:05","modified_gmt":"2026-06-11T02:09:05","slug":"sultan-casino-les-fonctionnalites-du-live-casino-et-ce-a-quoi-sattendre-en-france","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/sultan-casino-les-fonctionnalites-du-live-casino-et-ce-a-quoi-sattendre-en-france\/","title":{"rendered":"Sultan Casino \u2013 Les Fonctionnalit\u00e9s du Live Casino et Ce \u00e0 Quoi S\u2019Attendre en France"},"content":{"rendered":"
Pour tout casino en ligne digne de ce nom, le live casino n\u2019est plus une option, c\u2019est une n\u00e9cessit\u00e9 https:\/\/sultan-casino.org\/<\/a>. Sultan Casino a bien compris cette r\u00e9alit\u00e9 et propose son propre espace de jeu en direct. Mais que valent vraiment ses tables ? Nous allons d\u00e9cortiquer ses fonctionnalit\u00e9s live et voir ce que les joueurs fran\u00e7ais peuvent en attendre, sans fard et sans jargon.<\/p>\n L\u2019id\u00e9e est claire : un vrai croupier, une vraie table, le tout diffus\u00e9 en streaming sur votre \u00e9cran. La magie op\u00e8re gr\u00e2ce \u00e0 cette interaction en direct. Vous parlez au croupier, vous voyez les cartes \u00eatre distribu\u00e9es, vous sentez le rythme du jeu. C\u2019est cette authenticit\u00e9 que les joueurs cherchent. Sultan Casino, comme les autres, doit donc garantir une diffusion fluide et une ambiance conviviale. Tout repose sur le choix des fournisseurs de logiciels et la solidit\u00e9 de leur infrastructure technique.<\/p>\n En coulisses, plusieurs technologies entrent en jeu. Des cam\u00e9ras HD offrent diff\u00e9rents angles de vue. Des options comme le \u00ab Bet Behind \u00bb, qui permet de miser sur la main d\u2019un autre joueur, ou l\u2019affichage de statistiques en direct, ajoutent des couches de strat\u00e9gie. Chez Sultan Casino, l\u2019objectif est clair : proposer une session sans accroc. Un stream qui freeze ou un d\u00e9calage dans les paris tuerait imm\u00e9diatement l\u2019immersion. La robustesse technique n\u2019est pas un d\u00e9tail, c\u2019est la condition sine qua non.<\/p>\n Un bon live casino se mesure aussi \u00e0 la richesse de ses tables. Il faut les classiques, mais aussi quelques p\u00e9pites pour surprendre. Sultan Casino mise sur une s\u00e9lection qui inclut les bases, avec une forte pr\u00e9dilection pour les jeux de table traditionnels. D\u00e9couvrez ce que vous y trouverez probablement :<\/p>\n Les joueurs ne veulent pas seulement une liste de jeux. Ils veulent un environnement s\u00fbr, des retraits effectu\u00e9s rapidement et un service client qui intervient. Dans le live, le professionnalisme du croupier est tout aussi essentiel. Un croupier chaleureux et comp\u00e9tent modifie compl\u00e8tement l\u2019exp\u00e9rience. Sultan Casino semble construire son offre sur ces crit\u00e8res fondamentaux. Sans cette base de confiance, aucune plateforme ne dure longtemps dans ce secteur.<\/p>\n L\u2019interface doit \u00eatre intuitive. Placer une mise, consulter l\u2019historique, chatter avec le croupier : tout doit se faire en quelques clics, sans chercher. Et bien s\u00fbr, tout cela doit fonctionner aussi bien sur un smartphone que sur un ordinateur. Une ergonomie r\u00e9ussie fait toute la diff\u00e9rence. Elle transforme un essai de cinq minutes en une longue session wikidata.org<\/a> o\u00f9 l\u2019on se sent \u00e0 l\u2019aise.<\/p>\n Comment \u00e9valuer une table de live casino ? Il faut regarder un ensemble de d\u00e9tails techniques et humains. La vid\u00e9o est-elle fluide et claire ? Les limites de mise conviennent-elles aux petits joueurs comme aux gros ? Le son est-il clair ? Avoir la possibilit\u00e9 de choisir une table selon la langue du croupier ou r\u00e9gler quelques param\u00e8tres visuels sont des plus qui comptent. Le live casino ne repr\u00e9sente pas un secteur immobile. Les technologies \u00e9voluent, tout comme les normes, notamment en France. On \u00e9voque de cam\u00e9ras \u00e0 360\u00b0, voire d\u2019exp\u00e9riences en r\u00e9alit\u00e9 virtuelle. L\u2019intelligence artificielle serait capable de bient\u00f4t recommander des tables correspondant \u00e0 votre profil. Pour Sultan Casino, le d\u00e9fi reposera sur le fait de accompagner ces innovations sans omettre l\u2019essentiel : la s\u00e9curit\u00e9 des transactions, la vari\u00e9t\u00e9 des jeux et la qualit\u00e9 du service client. L\u2019avenir Le futur<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":" Pour tout casino en ligne digne de ce nom, le live casino n\u2019est plus une option, c\u2019est une n\u00e9cessit\u00e9 https:\/\/sultan-casino.org\/. Sultan Casino a bien compris cette r\u00e9alit\u00e9 et propose son propre espace de jeu en direct. Mais que valent vraiment ses tables ? Nous allons d\u00e9cortiquer ses fonctionnalit\u00e9s live et\u2026<\/p>\nLe C\u0153ur du Live Casino en Ligne<\/h2>\n
La Technologie au Service de l\u2019Immersion<\/h3>\n
Les Titres Incontournables \u00e0 Explorer<\/h2>\n
\n
Ce \u00e0 Quoi les Joueurs Vont S\u2019Attendre<\/h2>\n
L\u2019Interface Utilisateur et l\u2019Accessibilit\u00e9<\/h3>\n
Les Aspects d\u2019Une Qualit\u00e9 Exp\u00e9rience Live<\/h2>\n
\nUne exp\u00e9rience live de qualit\u00e9 repose sur quelques \u00e9l\u00e9ments indispensables :<\/p>\n\n
L\u2019\u00c9volution du March\u00e9 et les Orientations<\/h2>\n