/* 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":157583,"date":"2026-06-16T08:00:49","date_gmt":"2026-06-16T08:00:49","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=157583"},"modified":"2026-06-16T08:00:49","modified_gmt":"2026-06-16T08:00:49","slug":"les-caracteristiques-cles-de-lapplication-mobile-du-casino-frumzi-pour-la-france","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/les-caracteristiques-cles-de-lapplication-mobile-du-casino-frumzi-pour-la-france\/","title":{"rendered":"Les Caract\u00e9ristiques Cl\u00e9s de l’Application Mobile du Casino Frumzi pour la France"},"content":{"rendered":"
\"Frumzi<\/p>\n

\"Frumzi<\/p>\n

Pour les joueurs fran\u00e7ais, le jeu sur smartphone n’est plus une option https:\/\/frumzikazino.com\/fr-fr\/<\/a>. L’application mobile de Frumzi Casino a \u00e9t\u00e9 b\u00e2tie dans cette optique. Elle fournit aux utilisateurs en France une voie d’acc\u00e8s privil\u00e9gi\u00e9e vers leurs divertissements pr\u00e9f\u00e9r\u00e9s, en insistant sur la simplicit\u00e9, la protection des donn\u00e9es et une biblioth\u00e8que de jeux riche. Accessible sur iOS et Android, cette appli est con\u00e7ue pour une prise en main imm\u00e9diate et une immersion sans accroc, que vous soyez chez vous ou en d\u00e9placement. Elle se d\u00e9marque avec un support natif des moyens de paiement utilis\u00e9s en France et un service client qui communique dans la langue de Moli\u00e8re, pour une exp\u00e9rience sans accroc et sans mauvaise surprise.<\/p>\n

Une Interface Con\u00e7ue pour le Jeu Mobile<\/h2>\n

D\u00e8s le d\u00e9part, on sent que l’application Frumzi a \u00e9t\u00e9 imagin\u00e9e pour le doigt. Les menus sont r\u00e9actifs, les ic\u00f4nes sont nettes, et on localise en quelques secondes les jeux, les bonus ou les param\u00e8tres de son compte. L’ergonomie a visiblement guid\u00e9 chaque choix : les boutons sont suffisamment larges pour pr\u00e9venir les fautes de frappe, et l’\u00e9cran reste d\u00e9gag\u00e9 pour ne pas g\u00eaner le joueur. R\u00e9sultat ? Des sessions de jeu agr\u00e9ables, que votre t\u00e9l\u00e9phone soit dernier cri ou un mod\u00e8le plus ancien. Inutile de passer par la version navigateur, souvent moins adapt\u00e9e sur un \u00e9cran de petite taille.<\/p>\n

Design Adaptatif et Performance<\/h3>\n

Dans les entrailles, l’application est solide. Les temps de chargement restent limites, m\u00eame avec une connexion 4G normale, et les jeux en direct stream\u00e9s ne restent fluides. Les graphismes s’ajustent automatiquement \u00e0 la taille et \u00e0 la r\u00e9solution de votre \u00e9cran. Cette r\u00e9activit\u00e9 change tout pour des parties de roulette ou de machines \u00e0 sous, o\u00f9 la moindre latence peut ruiner le plaisir. L’appli peut aussi vous pr\u00e9venir via des notifications sur les nouveaux titres, les bonus \u00e9ph\u00e9m\u00e8res ou les tournois, le tout sans d\u00e9charger la batterie de votre appareil en quelques minutes.<\/p>\n

S\u00e9curit\u00e9 et Op\u00e9rations Simplifi\u00e9s<\/h2>\n

Frumzi Casino positionne la s\u00e9curit\u00e9 au premier plan, surtout sur mobile o\u00f9 les connexions peuvent fluctuer. L’application emploie un chiffrement SSL de bout en bout pour garantir vos donn\u00e9es et vos \u00e9changes. Pour les transactions, elle offre les moyens de paiement que les Fran\u00e7ais adoptent au quotidien, avec des proc\u00e9dures de d\u00e9p\u00f4t et de retrait con\u00e7ues pour \u00eatre v\u00e9loces. L’activation de la double authentification (2FA) est envisageable pour verrouiller encore plus l’acc\u00e8s \u00e0 votre compte. Ces mesures, combin\u00e9es \u00e0 une licence d’exploitation d\u00e9livr\u00e9e par une autorit\u00e9 r\u00e9gulatrice digne de confiance, offrent un espace de jeu s\u00e9curis\u00e9 et r\u00e9gul\u00e9.<\/p>\n

Modes de Paiement Hexagonaux<\/h3>\n

L’application ne vous oblige pas \u00e0 vous ajuster : elle emploie votre langage financier. Aux c\u00f4t\u00e9s des cartes Visa et Mastercard, vous pouvez payer vos mises via PayPal, par virement bancaire ou avec d’autres solutions de paiement mobile. Les retraits suivent le m\u00eame parcours et sont r\u00e9alis\u00e9s dans des d\u00e9lais habituels pour le secteur. L’application est transparente : tous les plafonds de transaction et les frais \u00e9ventuels sont indiqu\u00e9s clairement dans la rubrique pr\u00e9vue, en euros et en fran\u00e7ais. Vous maintenez ainsi une ma\u00eetrise parfaite de votre budget de jeu.<\/p>\n

\"Frumzi<\/p>\n

Offres et Exclusifs sur Mobile<\/h2>\n

Sur Frumzi, jouer sur mobile est souvent plus avantageux. L’application offre r\u00e9guli\u00e8rement un bonus de bienvenue sp\u00e9cifique pour votre premier d\u00e9p\u00f4t fait depuis l’appareil. Ensuite, en tant qu’utilisateur mobile, vous pourrez recevoir des tours gratuits sur certains slots, des offres de cashback ou des invitations \u00e0 des tournois d\u00e9di\u00e9s. Ces occasions vous sont communiqu\u00e9es par une notification directe sur l’\u00e9cran de votre t\u00e9l\u00e9phone, pour que vous ne les perdiez pas. Pensez d’ouvrir l’onglet “Promotions” de l’appli de temps en temps, les offres tournent vite.<\/p>\n

    \n
  1. Offre de bienvenue mobile avec des tours gratuits sur des slots choisies.<\/li>\n
  2. Plan de fid\u00e9lit\u00e9 avec points accumulables sur chaque pari, convertibles contre des cr\u00e9dits.<\/li>\n
  3. Offres hebdomadaires comme le “Cashback du Lundi” ou les “Tours Gratuits du Weekend”.<\/li>\n
  4. Alertes push pour les offres flash et les tournois \u00e0 inscription limit\u00e9e.<\/li>\n<\/ol>\n

    S\u00e9lection de Jeux Compl\u00e8te et Sur Mesure<\/h2>\n

    L’application mobile de Frumzi ne n\u00e9glige rien du catalogue propos\u00e9 sur ordinateur. Elle embarque la totalit\u00e9 des jeux, choisis avec les joueurs fran\u00e7ais en t\u00eate. Vous y trouverez des centaines de machines \u00e0 sous, dont des mod\u00e8les \u00e0 fort RTP et des jackpots qui s’accroissent \u00e0 chaque mise, mais aussi tous les jeux de table essentiels. Les versions de blackjack, de roulette fran\u00e7aise et de poker sont au rendez-vous. Pour retrouver l’atmosph\u00e8re d’un vrai casino, une section enti\u00e8re est r\u00e9serv\u00e9e aux jeux avec croupiers en direct. Ces tables, film\u00e9es en HD dans des studios professionnels, sont accessibles en deux clics depuis votre mobile.<\/p>\n