/* 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":154092,"date":"2026-06-15T03:08:56","date_gmt":"2026-06-15T03:08:56","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=154092"},"modified":"2026-06-15T03:08:56","modified_gmt":"2026-06-15T03:08:56","slug":"winshark-casino-jouez-et-gagnez-empochez-et-encaissez-vos-recompenses-en-toute-simplicite-au-canada","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/winshark-casino-jouez-et-gagnez-empochez-et-encaissez-vos-recompenses-en-toute-simplicite-au-canada\/","title":{"rendered":"Winshark Casino \u2013 Jouez et gagnez, Empochez et Encaissez vos R\u00e9compenses en Toute Simplicit\u00e9 au Canada"},"content":{"rendered":"
\n\"Winshark<\/p>\n

Pour les participants canadiens qui recherchent une plateforme de casino en ligne complet et intuitif, Winshark Casino est une option s\u00e9rieuse. Cette plateforme a \u00e9t\u00e9 con\u00e7ue pour les joueurs du Canada, avec un accent marqu\u00e9 sur la protection, un vaste choix de jeux ainsi que des transactions financi\u00e8res fluides. La philosophie met l\u2019accent sur la simplicit\u00e9 : de l\u2019inscription au retrait, chaque \u00e9tape est con\u00e7ue pour se faire naturellement. Une licence fiable, un service client r\u00e9actif et des promotions int\u00e9ressantes font de Winshark une destination cr\u00e9dible, tant pour le plaisir que pour la gestion de son budget de jeu.<\/p>\n

Un Portail D\u00e9velopp\u00e9 pour les Amateurs de jeux canadiens<\/h2>\n

Winshark Casino ne se borne pas \u00e0 \u00eatre joignable depuis le Canada. Il est construit sp\u00e9cifiquement pour les r\u00e9sidents. Cela se traduit d\u2019abord par le support du dollar canadien (CAD), ce qui \u00e9vite les frais et les complications des conversions de devises. Le site est int\u00e9gralement disponible en fran\u00e7ais et en anglais, pour une appr\u00e9hension parfaite des r\u00e8gles, des conditions et des \u00e9changes avec l\u2019assistance. La politique de jeu responsable respecte standards canadiens, avec des outils de contr\u00f4le personnels performants et des liens vers des associations d\u2019aide. Cela montre un engagement r\u00e9el envers la protection des joueurs.<\/p>\n

Sur le site ou via l\u2019application mobile, l\u2019exp\u00e9rience est fluide, m\u00eame aux heures de forte affluence. Les pages chargent vite. L\u2019interface, actuelle et sobre, permet de trouver un jeu, une promotion ou les d\u00e9tails de son compte en quelques clics. Ce soin apport\u00e9 \u00e0 l\u2019ergonomie montre que Winshark comprend une chose essentielle : une bonne session de jeu commence par une interface fiable qui ne vient pas perturber le plaisir. Le joueur canadien s\u2019y sent imm\u00e9diatement \u00e0 l\u2019aise, sans faire de concessions sur la qualit\u00e9 ou la s\u00e9curit\u00e9.<\/p>\n

Adh\u00e9sion et Contr\u00f4le : Un Processus Rapide et S\u00fbr<\/h2>\n

Devenir membre chez Winshark Casino est un cheminement ais\u00e9 et clair winssharkcasino.ca<\/a>. Le formulaire d\u2019inscription demande uniquement les informations indispensables, pour une cr\u00e9ation de compte en quelques minutes. Cette promptitude est \u00e9quilibr\u00e9e par une v\u00e9rification d\u2019identit\u00e9 (KYC) s\u00e9v\u00e8re, une \u00e9tape requise et profitable \u00e0 la s\u00e9curit\u00e9 de tous. Les joueurs doivent fournir une pi\u00e8ce d\u2019identit\u00e9 et un justificatif de domicile, une proc\u00e9dure courante dans le secteur pour lutter contre la fraude.<\/p>\n

L\u2019\u00e9quipe s\u00e9curit\u00e9 examine ces documents promptement et en toute discr\u00e9tion. La plupart des v\u00e9rifications sont finalis\u00e9es en 24 \u00e0 48 heures. Cette efficience permet de d\u00e9bloquer sans attendre toutes les fonctionnalit\u00e9s du compte, y compris les plafonds de retrait. Pour simplifier les choses, Winshark offre une liste d\u00e9taill\u00e9e des documents accept\u00e9s, comme un permis de conduire provincial ou une facture d\u2019\u00e9lectricit\u00e9, et un canal d\u00e9di\u00e9 pour les envoyer. Ainsi, une formalit\u00e9 indispensable se transforme en une simple d\u00e9marche, vite et vitale pour maintenir un espace de jeu \u00e9quitable.<\/p>\n

\"Beste<\/p>\n

Parcourir la Biblioth\u00e8que de Jeux Winshark<\/h2>\n

Le vrai moteur de Winshark Casino, c\u2019est sa collection de jeux. Elle est \u00e9tendue et soigneusement choisie pour offrir de la diversit\u00e9 et de la qualit\u00e9. Les aficionados de machines \u00e0 sous y trouveront des multitudes de titres, des slots \u00e0 rouleaux classiques aux cr\u00e9ations vid\u00e9o les plus r\u00e9centes, avec des visuels nets et des bonus inventifs. Les jackpots progressifs, dont certains fr\u00f4lent des montants monumentaux, sont aussi bien mis en avant, s\u00e9duisant les chasseurs de gains mirobolants. Les \u00e9diteurs de jeux pr\u00e9sents figurent parmi les plus r\u00e9put\u00e9s, offrant des pourcentages de retour (RTP) honn\u00eates, des tirages al\u00e9atoires certifi\u00e9s et une exp\u00e9rience de jeu stable.<\/p>\n

Pour les amateurs de table, le panel est tout aussi vari\u00e9. Plusieurs variantes de blackjack, de roulette, de baccara et de poker sont propos\u00e9es, soit en version num\u00e9rique, soit avec un croupier en direct. Les tables de live casino sont un atout majeur de Winshark. Elles sont retransmises en streaming haute d\u00e9finition depuis des studios professionnels. Les joueurs peuvent dialoguer avec des croupiers chaleureux et les autres participants, reproduisant l\u2019atmosph\u00e8re authentique d\u2019un casino terrestre depuis chez eux. Cette section a beaucoup de popularit\u00e9, car elle allie le confort du jeu en ligne et l\u2019excitation sociale du direct.<\/p>\n