/* 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":160538,"date":"2026-06-18T08:51:08","date_gmt":"2026-06-18T08:51:08","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=160538"},"modified":"2026-06-18T08:51:08","modified_gmt":"2026-06-18T08:51:08","slug":"instant-casino-tlphone","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/instant-casino-tlphone\/","title":{"rendered":"Analyse quotidienne par un utilisateur Canadien : L’exp\u00e9rience de navigation d’Instant Casino"},"content":{"rendered":"
\n

Je teste souvent les casinos en ligne depuis le Canada. Pour cette analyse, j’ai observ\u00e9 de pr\u00e8s la navigation d’Instant Casino T\u00e9l\u00e9phone<\/a> Casino, jour apr\u00e8s jour. On discute beaucoup des bonus, mais l’exp\u00e9rience de navigation est pour moi ce qui d\u00e9termine une session de jeu. Une interface fluide et intuitive change tout : on localise plus vite ses jeux, on contr\u00f4le son compte sans s’\u00e9nerver. Ce compte-rendu d\u00e9taille chaque \u00e9tape, de la connexion aux transactions. Il s’appuie sur mon usage r\u00e9el, \u00e0 diff\u00e9rents moments de la journ\u00e9e, pour confirmer la constance de la plateforme. Mon but est \u00e9vident : vous dire si ce casino est fiable pour un joueur d’ici.<\/p>\n

Efficacit\u00e9 et temps de chargement : Un test sous contrainte<\/h2>\n

Au Canada, la qualit\u00e9 de la connexion change. La vitesse de chargement n’est pas un \u00e9l\u00e9ment secondaire. J’ai \u00e9valu\u00e9 Instant Casino sur plusieurs types de r\u00e9seau, de la fibre en ville \u00e0 l’internet mobile en r\u00e9gion. Les observations m’ont s\u00e9duit. Le site principal se charge vite et bien. Mais c’est surtout dans les jeux que la plateforme est efficace. Passer du lobby \u00e0 une machine \u00e0 sous ou une table de roulette en argent r\u00e9el prend 10 \u00e0 15 secondes en moyenne. C’est un d\u00e9lai tout \u00e0 fait correct. Les jeux en direct d’Evolution et de Pragmatic Play Live conservent un flux vid\u00e9o fluide, avec tr\u00e8s peu de retard. C’est n\u00e9cessaire pour \u00e9changer avec le croupier sans g\u00eane. Pendant tous mes tests, je n’ai connu aucun plantage ni gel d’\u00e9cran. Cette fiabilit\u00e9 technique est la base d’une bonne navigation. On ne la per\u00e7oit que quand elle manque. Ici, elle est bien l\u00e0.<\/p>\n

Atouts et domaines \u00e0 perfectionner d\u00e9tect\u00e9s<\/h2>\n

Apr\u00e8s cette \u00e9tude, le bilan est net. Instant Casino a de vraies atouts en mati\u00e8re de navigation. La plateforme est coh\u00e9rente, rapide et accessible. L’organisation du contenu et la qualit\u00e9 des filtres donnent un vrai sentiment de ma\u00eetrise. L’navigation mobile est exceptionnelle. La supervision des transactions est transparente. Ces \u00e9l\u00e9ments constituent une base solide, \u00e9quivalente aux meilleurs casinos en ligne canadiens. Il y a aussi de la marge pour progresser. J’aimerais une fonction “liste de favoris” plus visible pour retrouver mes jeux favoris. Un tri personnalis\u00e9 dans le lobby repr\u00e9senterait un plus. Une vue en “grille” plus resserr\u00e9e pourrait convenir \u00e0 ceux qui d\u00e9sirent voir plus de jeux sans scroller. Enfin, un signalement pour les “jeux d\u00e9j\u00e0 test\u00e9s” serait pratique quand on explore un catalogue aussi vaste.<\/p>\n

Premi\u00e8re impression et acc\u00e8s sur Instant Casino<\/h2>\n

La page d’accueil d’Instant Casino offre une excellente impression. Le style est contemporain, les teintes sont agr\u00e9ables et ne \u00e9puisent pas les regards. Tout est en fran\u00e7ais, con\u00e7u pour le Canada. Les informations essentielles sont apparentes sans trop scroller. La liaison est un point fort. Les zones de login sont bien situ\u00e9s. La case “Se souvenir de moi” a march\u00e9 chaque jour sur mon appareil, j’ai esquiv\u00e9 de tout retaper. Aucun probl\u00e8me ni attente anormale lors de l’acc\u00e8s. Apr\u00e8s v\u00e9rification, le accueil se montre tout de suite, sans transfert curieux. Cette rapidit\u00e9 instantan\u00e9e cr\u00e9e un sentiment de s\u00e9curit\u00e9. C’est loin des sites o\u00f9 l’on trouve le bouton de connexion pendant une minute ou o\u00f9 un cercle de chargement tourne ind\u00e9finiment.<\/p>\n

Navigation mobile : utilisation sur smartphone et ardoise num\u00e9rique<\/h2>\n

Je me connecte souvent sur mon t\u00e9l\u00e9phone. L’utilisation sur mobile d’Instant Casino est \u00e0 la mesure de la version PC. La plateforme propose un site web r\u00e9actif. Il n’y a pas d’application native \u00e0 installer sur les stores au moment o\u00f9 j’\u00e9cris. Le site s’adapte parfaitement \u00e0 l’\u00e9cran de mon iPhone et de ma tablette Android. Le menu se range dans un hamburger menu pratique. Les boutons sont assez gros pour emp\u00eacher les mauvais clics. Toutes les fonctionnalit\u00e9s sont l\u00e0, y compris pour d\u00e9poser ou sortir de l’argent. Les vitesses sont \u00e9quivalentes, parfois m\u00eame plus v\u00e9loces. Pour les Canadiens souvent en voyage, cela garantit une continuit\u00e9 totale. J’ai pu basculer entre mon ordinateur et mon t\u00e9l\u00e9phone dans la m\u00eame journ\u00e9e. Mon compte et mes jeux favoris \u00e9taient dans le m\u00eame statut. C’est le indice d’une plateforme bien synchronis\u00e9e.<\/p>\n

Organisation du site et organisation du contenu<\/h2>\n

Instant Casino offre une architecture de menu tr\u00e8s logique. La barre de navigation se maintient en haut de l’\u00e9cran, toujours accessible. Les cat\u00e9gories sont limpides : Casino, Machines \u00e0 sous, Jeux de table, Jeux en direct, Promotions. Pas de sous-menus \u00e0 tiroirs interminables. En un ou deux clics, je parviens o\u00f9 je veux. La rubrique “Promotions” est bien faite, avec les conditions de mise synth\u00e9tis\u00e9es et un acc\u00e8s direct au bonus. Cette organisation indique qu’on a compris comment jouent les gens. Elle souligne les machines \u00e0 sous sans pour autant cacher le reste. On ne passe pas son temps \u00e0 chercher.<\/p>\n

Le r\u00f4le crucial de la barre de recherche et des filtres<\/h3>\n

Quand on sait ce qu’on veut, la barre de recherche est vitale. Celle d’Instant Casino est efficace. Elle identifie les titres saisis \u00e0 moiti\u00e9, corrige les petites fautes de frappe et sugg\u00e8re des suggestions utiles. Le syst\u00e8me de filtres dans la section des jeux est encore plus performant. On peut trier par fournisseur comme NetEnt, Pragmatic Play ou Evolution. On peut aussi filtrer par popularit\u00e9 ou par caract\u00e9ristique, par exemple “Megaways” ou “Achat de Bonus”. Cette pr\u00e9cision est un gros avantage avec un catalogue aussi fourni. En quelques clics, j’ai r\u00e9ussi \u00e0 afficher uniquement tous les blackjacks ou toutes les machines \u00e0 sous sur le th\u00e8me de l’aventure. Ces outils changent la navigation : on ne se prom\u00e8ne plus au hasard, on cherche avec un but. Cela \u00e9conomise du temps et de la patience.<\/p>\n

Pr\u00e9sentation des jeux et clart\u00e9 des informations<\/h3>\n

La fa\u00e7on de montrer les jeux est aussi importante que leur classement. Instant Casino propose des vignettes de bonne taille. Les graphismes sont soign\u00e9s, le bouton “Jouer” ressort bien. Une information que je regarde toujours, le taux de retour (RTP), est g\u00e9n\u00e9ralement mentionn\u00e9e sur la vignette ou accessible en un clic. Les nouveaut\u00e9s et les jeux populaires sont valoris\u00e9s de mani\u00e8re dynamique, ce qui facilite les d\u00e9couvertes. L’affichage garde sa lisibilit\u00e9 sur un petit \u00e9cran. La grille de jeux se redimensionne, les \u00e9l\u00e9ments ne se chevauchent pas. Cette clart\u00e9 visuelle \u00e9vite la sensation de trop-plein. Choisir un jeu reste un moment plaisant, pas un casse-t\u00eate.<\/p>\n

Connexion aux comptes et gestion des transactions<\/h2>\n

La administration du compte est souvent le maillon faible des casinos en ligne. Chez Instant Casino, c’est assez simple. On y acc\u00e8de par un menu d\u00e9roulant depuis le lobby. La navigation dans cette zone est prot\u00e9g\u00e9e et fluide. Voici ce que j’ai pu faire sans probl\u00e8me :\n<\/p>\n