/* 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":140253,"date":"2026-06-10T17:36:58","date_gmt":"2026-06-10T17:36:58","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=140253"},"modified":"2026-06-10T17:36:58","modified_gmt":"2026-06-10T17:36:58","slug":"chaque-partie-est-importante-chaque-joueur-est-important-chez-spinsy-casino-au-canada","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/chaque-partie-est-importante-chaque-joueur-est-important-chez-spinsy-casino-au-canada\/","title":{"rendered":"Chaque partie est importante, chaque joueur est important chez Spinsy Casino au Canada"},"content":{"rendered":"
\n\"Woo<\/p>\n

Une aventure de casino en ligne ne devrait aucunement \u00eatre distante ou impersonnelle https:\/\/casinospinsy.eu\/fr-ca\/<\/a>. C’est cette croyance qui guide Spinsy Casino, sp\u00e9cialement pour nos joueurs canadiens. Pour nous, la essence du jeu provient dans l’attente d’un tambour qui s’arr\u00eate, dans le myst\u00e8re d’une carte qui se retourne. Elle na\u00eet principalement de la connexion unique avec chaque personne qui traverse la porte de notre espace virtuel. Cette expression, “chaque joueur compte”, est bien plus qu’un message accrocheur. C’est le pilier qui dirige chaque \u00e9l\u00e9ment de notre activit\u00e9, du assortiment des jeux \u00e0 la mise en place des bonus, en int\u00e9grant par la excellence du service. Je veux vous d\u00e9montrer comment cette notion prend vie, pour que vous vous sentiez re\u00e7u, entendu et gratifi\u00e9 comme l’invit\u00e9 que vous \u00eates.<\/p>\n

Notre philosophie : Une exp\u00e9rience centr\u00e9e sur le client canadien<\/h2>\n

Le monde des casinos en ligne est rempli trop souvent de plateformes impersonnelles, qui traitent leurs clients comme une foule anonyme. Spinsy Casino a fait un autre choix, sp\u00e9cialement pour le Canada. Notre approche part d’une simple id\u00e9e : comprendre ce que vous attendez vraiment. Cela se fait par vos pr\u00e9f\u00e9rences en mati\u00e8re de jeux, vos habitudes, et m\u00eame ces petites particularit\u00e9s culturelles qui font de vous une communaut\u00e9 \u00e0 part. “Chaque joueur compte” signifie que nous \u0153uvrons \u00e0 personnaliser votre parcours, depuis votre premier d\u00e9p\u00f4t jusqu’\u00e0 vos r\u00e9compenses de fid\u00e9lit\u00e9. Cette attention se voit dans notre s\u00e9lection de jeux, dans nos m\u00e9thodes de paiement locales et dans un service client qui parle votre langue, sans jargon inutile.<\/p>\n

Les piliers de notre engagement<\/h3>\n

Cet engagement envers vous n’est pas une vague d\u00e9claration d’intention. Il s’appuie sur des actions concr\u00e8tes, des piliers que nous renfor\u00e7ons chaque jour. La s\u00e9curit\u00e9 et l’\u00e9quit\u00e9 viennent en premier. Nous prot\u00e9geons vos donn\u00e9es avec un cryptage de niveau bancaire et tous nos jeux sont audit\u00e9s par des laboratoires ind\u00e9pendants pour garantir des r\u00e9sultats totalement al\u00e9atoires. Le deuxi\u00e8me pilier est la transparence. Les conditions de nos bonus, les r\u00e8gles des jeux, les proc\u00e9dures de retrait : tout est pr\u00e9sent\u00e9 clairement, car la confiance se construit sur des bases solides. Enfin, le troisi\u00e8me pilier est l’\u00e9coute. Vos retours, vos suggestions et vos critiques fa\u00e7onnent directement l’\u00e9volution de Spinsy Casino.<\/p>\n

Une \u00e9volution continue aux tendances locales<\/h4>\n

Nous portons aussi une attention constante \u00e0 ce que vous aimez jouer. Au Canada, l’attrait pour le blackjack et la roulette reste puissant, mais nous voyons aussi un v\u00e9ritable engouement pour les machines \u00e0 sous aux th\u00e8mes captivants et les jackpots progressifs qui font r\u00eaver. Notre \u00e9quipe emploie son temps \u00e0 d\u00e9nicher les nouveaut\u00e9s qui pourraient vous plaire, tout en conservant les classiques ind\u00e9modables. Cette veille permanente nous permet de maintenir une offre de jeux qui r\u00e9sonne avec vos envies, un catalogue qui \u00e9volue avec vous.<\/p>\n

Un choix de jeux dans laquelle chaque partie est une exp\u00e9rience<\/h2>\n

Notre devise, “Chaque tour compte”, s’incarne avant tout dans notre biblioth\u00e8que de jeux. Le choix est primordiale, mais l’excellence l’est encore plus. C’est pourquoi la s\u00e9lection de Spinsy Casino associe avec soin les valeurs s\u00fbres intemporels et les derni\u00e8res cr\u00e9ations des meilleurs \u00e9diteurs. Chaque jeu que nous s\u00e9lectionnons doit satisfaire \u00e0 des crit\u00e8res stricts : des graphismes soign\u00e9s, des animations fluides, une bande-son immersive. Que vous soyez s\u00e9duit par les slots aux bonus spectaculaires, par la r\u00e9flexion du poker ou par le cadre authentique d’un casino live avec croupier en direct, chaque partie est con\u00e7ue pour vous procurer cette sensation unique.<\/p>\n

Une bonne s\u00e9lection de jeux doit aussi impressionner et se r\u00e9inventer. Nous surveillons de pr\u00e8s les sorties des studios partenaires comme NetEnt, Microgaming, Play’n GO et Evolution Gaming pour vous proposer les hits du moment d\u00e8s leur lancement. Nous faisons en sorte \u00e9galement \u00e0 proposer une large gamme de volatilit\u00e9s et de taux de retour (RTP). Cela vous permet de choisir en toute connaissance de cause : choisissez-vous des gains plus fr\u00e9quents mais moins \u00e9lev\u00e9s, ou la recherche d’un jackpot qui pourrait tout changer ? Le choix vous appartient.<\/p>\n

Offres et promotions qui soulignent votre pr\u00e9sence<\/h2>\n

Chez Spinsy Casino, nous percevons chaque joueur comme un membre de jeu. Honorer votre arriv\u00e9e et votre fid\u00e9lit\u00e9 est donc \u00e9vident. Notre offre de bienvenue est \u00e9labor\u00e9e pour vous donner un d\u00e9part s\u00e9rieux d\u00e8s vos premiers pas. Mais notre vision des promotions ne s’arr\u00eate pas l\u00e0. Nous tablons \u00e0 un programme de r\u00e9compenses qui a du sens sur la dur\u00e9e, qui vous suit au fil de vos sessions. Ainsi, apr\u00e8s votre bonus d’inscription, vous obtiendrez r\u00e9guli\u00e8rement des tours gratuits, des offres de recharge, des tournois lucratifs et un programme de fid\u00e9lit\u00e9 adaptatif.<\/p>\n