/* 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":152684,"date":"2026-06-15T00:27:30","date_gmt":"2026-06-15T00:27:30","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=152684"},"modified":"2026-06-15T00:27:30","modified_gmt":"2026-06-15T00:27:30","slug":"luckyhillscasino","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/luckyhillscasino\/","title":{"rendered":"LuckyHills Casino Offre l’Exp\u00e9rience de Casino la Plus R\u00e9compensante au Canada"},"content":{"rendered":"
\n\"Lucky<\/p>\n

Je suis convaincu qu’une exp\u00e9rience de jeu en ligne remarquable repose sur un juste milieu parfait entre divertissement, s\u00e9curit\u00e9 et abondance des r\u00e9compenses. C’est pr\u00e9cis\u00e9ment cet \u00e9quilibre que meilleurs choix pour luckyhills<\/a> s’efforce d’obtenir pour chaque joueur. Ici, nous avons construit une plate-forme o\u00f9 l’excitation des jeux de haut de gamme rencontre des promotions b\u00e9n\u00e9fiques et un service parfait, cr\u00e9ant ainsi un environnement de jeu vraiment enrichissant.<\/p>\n

Notre Philosophie de Jeu Raisonnable et R\u00e9compensant<\/h2>\n

Chez LuckyHills Casino, nous pensons que le jeu devrait \u00eatre un loisir plaisant et ma\u00eetris\u00e9. Notre vision int\u00e8gre une approche responsable au c\u0153ur m\u00eame de l’exp\u00e9rience de jeu. Cela implique offrir des outils de suivi du temps et des d\u00e9p\u00f4ts, des liens vers des organismes d’aide et des informations transparentes sur les probabilit\u00e9s. Un jeu responsable est la fondation sur laquelle nous \u00e9tablissons une relation de fiabilit\u00e9 et de plaisir durable avec nos utilisateurs.<\/p>\n

Des Moyens Tangibles pour Vous S\u00e9curiser<\/h3>\n

Nous vous proposons une gamme de fonctionnalit\u00e9s con\u00e7ues pour vous garder en gestion. Vous pouvez d\u00e9finir des limites de d\u00e9p\u00f4t journali\u00e8res, par semaine ou du mois directement depuis votre profil. Des rappels de temps de jeu et une option d’auto-exclusion temporaire sont \u00e9galement disponibles. Ces outils sont ais\u00e9s \u00e0 activer et montrent notre engagement envers votre confort.<\/p>\n

Honn\u00eatet\u00e9 et Impartialit\u00e9 Avant Tout<\/h3>\n

La transparence est primordiale pour un jeu en toute confiance. Tous nos jeux sont homologu\u00e9s par des organismes externes qui garantissent l’impartialit\u00e9 et l’impr\u00e9visibilit\u00e9 des r\u00e9sultats. Les pourcentages de retour th\u00e9oriques (RTP) sont affich\u00e9s pour chaque jeu, vous donnant la capacit\u00e9 de faire des choix \u00e9clair\u00e9s. Cette transparence est un fondement de notre promesse de vous offrir l’exp\u00e9rience la plus satisfaisante.<\/p>\n

Une S\u00e9lection de Jeux Vaste et de Qualit\u00e9<\/h2>\n

Notre collection de jeux est le fruit d’une s\u00e9lection rigoureuse aupr\u00e8s des meilleurs d\u00e9veloppeurs de l’industrie. Nous s\u00e9lectionnons des titres qui associent visuels captivants, gameplay innovant et possibilit\u00e9s de gains all\u00e9chantes. Que vous aimiez de machines \u00e0 sous classiques ou de jeux r\u00e9cents \u00e0 multiplicateurs, vous trouverez assur\u00e9ment des jeux qui captiveront votre attention et satisferont vos attentes.<\/p>\n

Au-del\u00e0 des slots, notre casino en ligne offre une gamme compl\u00e8te pour tous les go\u00fbts. Les aficionados des jeux de table auront acc\u00e8s \u00e0 plusieurs variantes de blackjack, de roulette et de poker. Les adeptes du jeu en direct pourront int\u00e9grer nos tables de jeux en direct, o\u00f9 l’ambiance d’un vrai casino est recr\u00e9\u00e9e avec une diffusion en haute d\u00e9finition. Nous veillons constamment \u00e0 \u00e9toffer notre biblioth\u00e8que pour maintenir la dynamisme et l’excitation.<\/p>\n

Les Slots les Plus Appr\u00e9ci\u00e9s et Lucratifs<\/h2>\n

Les machines \u00e0 sous forment le c\u0153ur battant de LuckyHills Casino, et nous en sommes fiers. Nous nous concentrons sur la proposition de titres qui affichent non seulement des th\u00e8mes immersifs et des fonctionnalit\u00e9s excitantes, mais aussi des taux de retour aux joueurs attractifs. Des slots \u00e0 jackpots progressifs qui peuvent bouleverser une vie aux jeux \u00e0 bonus interactifs, notre s\u00e9lection est con\u00e7ue pour maximiser votre divertissement et vos chances.<\/p>\n

Parmi notre vaste catalogue, certaines machines \u00e0 sous se diff\u00e9rencient par leur popularit\u00e9 durable aupr\u00e8s de notre communaut\u00e9. Ces jeux fournissent souvent un \u00e9quilibre parfait entre la fr\u00e9quence des gains mineurs et le potentiel de r\u00e9compenses substantielles. Je vous recommande d’explorer notre section “Populaires” pour d\u00e9couvrir les favoris du moment, ainsi que notre filtre de tri par RTP pour identifier les jeux th\u00e9oriquement les plus rentables sur le long terme.<\/p>\n

L’Exp\u00e9rience des Jeux de Soci\u00e9t\u00e9 et des Croupiers en Temps R\u00e9el<\/h2>\n

Pour ceux qui recherchent l’authenticit\u00e9 des strat\u00e9gies classiques et l’interaction sociale, notre section de tables de jeu et de live casino est in\u00e9gal\u00e9e. Nous offrons une multitude de versions de chaque jeu, des r\u00e8gles classiques aux versions modernes avec des mises secondaires. L’interface est fluide et intuitive, vous permettant de vous concentrer pleinement sur votre strat\u00e9gie et le d\u00e9roulement de la partie.<\/p>\n

L’Exp\u00e9rience du Casino en Direct R\u00e9invent\u00e9e<\/h3>\n

Notre studio de croupiers en direct est \u00e9quip\u00e9 d’une technologie de pointe pour une immersion totale. Communiquez avec des croupiers professionnels et sympathiques en temps r\u00e9el, depuis le confort de votre domicile. Nous offrons une large gamme de tables avec diff\u00e9rentes limites de mise pour accommoder les joueurs occasionnels comme les plus aguerris. L’ambiance y est conviviale et le jeu, d’une \u00e9quit\u00e9 irr\u00e9prochable gr\u00e2ce \u00e0 la diffusion en direct.<\/p>\n

Promotions Expr\u00e8s \u00c9labor\u00e9s pour Toi<\/h2>\n

Notre syst\u00e8me de bonus a \u00e9t\u00e9 imagin\u00e9 pour gratifier votre venue et votre fid\u00e9lit\u00e9. \u00c0 la diff\u00e9rence \u00e0 des offres standard, nous nous effor\u00e7ons de d\u00e9velopper des promotions qui correspondent aux mani\u00e8res de jeu de notre groupe. Cela se traduit par des bonus de bienvenue all\u00e9chants, des tours gratuits sur les nouvelles lanc\u00e9es, et des offres de cashback qui vous autorisent de obtenir un pourcentage de vos pertes sur une p\u00e9riode d\u00e9termin\u00e9e.<\/p>\n

Chaque offre chez LuckyHills Casino est assortie de conditions transparentes et justes. Nous d\u00e9taillons toujours les conditions de mise (wagering requirements) et les jeux concern\u00e9s, afin que vous ayez la possibilit\u00e9 de prendre une d\u00e9cision en toute possession de cause. Notre but est que vous b\u00e9n\u00e9ficiiez pleinement de ces bonus additionnels comme un v\u00e9ritable appui \u00e0 votre exp\u00e9rience de jeu, sans mauvaises d\u00e9couvertes.<\/p>\n

Le Programme de Fid\u00e9lit\u00e9 le Plus Avantageux<\/h2>\n

Notre programme de fid\u00e9lit\u00e9 est le reflet de notre volont\u00e9 \u00e0 honorer votre fid\u00e9lit\u00e9. \u00c0 votre inscription, vous d\u00e9butez \u00e0 accumuler des points sur vos pari r\u00e9els. Ces derniers peuvent ensuite \u00eatre convertis en cr\u00e9dits de jeu, permettant l’acc\u00e8s \u00e0 des b\u00e9n\u00e9fices exclusifs. Plus vous jouez, plus vous grimpez dans le programme, et plus les gains deviennent importants.<\/p>\n