var tribe_dropdowns = window.tribe_dropdowns || {}; ( function( $, obj, _ ) { 'use strict'; obj.selector = { dropdown: '.tribe-dropdown', created: '.tribe-dropdown-created', searchField: '.select2-search__field', }; // Setup a Dependent $.fn.tribe_dropdowns = function() { obj.dropdown( this, {} ); return this; }; obj.freefrom_create_search_choice = function( params ) { if ( 'string' !== typeof params.term ) { return null; } var term = params.term.trim(); if ( '' === term ) { return null; } var args = this.options.options; var $select = args.$select; if ( term.match( args.regexToken ) && ( ! $select.is( '[data-int]' ) || ( $select.is( '[data-int]' ) && term.match( /\d+/ ) ) ) ) { var choice = { id: term, text: term, new: true }; if ( $select.is( '[data-create-choice-template]' ) ) { choice.text = _.template( $select.data( 'createChoiceTemplate' ) )( { term: term } ); } return choice; } return null; }; /** * Better Search ID for Select2, compatible with WordPress ID from WP_Query * * @param {object|string} e Searched object or the actual ID * @return {string} ID of the object */ obj.search_id = function( e ) { var id = undefined; if ( 'undefined' !== typeof e.id ) { id = e.id; } else if ( 'undefined' !== typeof e.ID ) { id = e.ID; } else if ( 'undefined' !== typeof e.value ) { id = e.value; } return undefined === e ? undefined : id; }; /** * Better way of matching results * * @param {string} term Which term we are searching for * @param {string} text Search here * @return {boolean} */ obj.matcher = function( params, data ) { // If there are no search terms, return all of the data if ( 'string' !== typeof params.term || params.term.trim() === '') { return data; } // Do not display the item if there is no 'text' property if ( typeof data.text === 'undefined' ) { return null; } var term = params.term.trim(); var text = data.text; var $select = $( data.element ).closest( 'select' ); var args = $select.data( 'dropdown' ); var result = text.toUpperCase().indexOf( term.toUpperCase() ) !== -1; if ( ! result && 'undefined' !== typeof args.tags ){ var possible = _.where( args.tags, { text: text } ); if ( args.tags.length > 0 && _.isObject( possible ) ){ var test_value = obj.search_id( possible[0] ); result = test_value.toUpperCase().indexOf( term.toUpperCase() ) !== -1; } } return result; }; /** * If the element used as the basis of a dropdown specifies one or more numeric/text * identifiers in its val attribute, then use those to preselect the appropriate options. * * @param {object} $select * @param {function} make_selection */ obj.init_selection = function( $select, make_selection ) { var isMultiple = $select.is( '[multiple]' ); var options = $select.data( 'dropdown' ); var currentValues = $select.val().split( options.regexSplit ); var selectedItems = []; $( currentValues ).each( function( index, value ) { // eslint-disable-line no-unused-vars var searchFor = { id: this, text: this }; var data = options.ajax ? $select.data( 'options' ) : options.data; var locatedItem = find_item( searchFor, data ); if ( locatedItem && locatedItem.selected ) { selectedItems.push( locatedItem ); } } ); if ( selectedItems.length && isMultiple ) { make_selection( selectedItems ); } else if ( selectedItems.length ) { make_selection( selectedItems[ 0 ] ); } else { make_selection( false ); return; } }; /** * Searches array 'haystack' for objects that match 'description'. * * The 'description' object should take the form { id: number, text: string }. The first * object within the haystack that matches one of those two properties will be returned. * * If objects contain an array named 'children', then that array will also be searched. * * @param {Object} description * @param {Array} haystack * * @return {Object|boolean} */ function find_item( description, haystack ) { if ( ! _.isArray( haystack ) ) { return false; } for ( var index in haystack ) { var possible_match = haystack[ index ]; if ( possible_match.hasOwnProperty( 'id' ) && possible_match.id == description.id ) { // eslint-disable-line no-prototype-builtins,eqeqeq,max-len return possible_match; } if ( possible_match.hasOwnProperty( 'text' ) && possible_match.text == description.text ) { // eslint-disable-line no-prototype-builtins,eqeqeq,max-len return possible_match; } if ( possible_match.hasOwnProperty( 'children' ) && _.isArray( possible_match.children ) ) { // eslint-disable-line no-prototype-builtins,max-len var subsearch = find_item( description, possible_match.children ); if ( subsearch ) { return subsearch; } } } return false; } obj.getSelectClasses = function( $select ) { var classesToRemove = [ 'select2-hidden-accessible', 'hide-before-select2-init', ]; var originalClasses = $select.attr( 'class' ).split( /\s+/ ); return _.difference( originalClasses, classesToRemove ); }; obj.element = function( field, args ) { var $select = $( field ); var args = $.extend( {}, args ); // eslint-disable-line no-redeclare var carryOverData = [ // eslint-disable-line no-unused-vars 'depends', 'condition', 'conditionNot', 'condition-not', 'conditionNotEmpty', 'condition-not-empty', 'conditionEmpty', 'condition-empty', 'conditionIsNumeric', 'condition-is-numeric', 'conditionIsNotNumeric', 'condition-is-not-numeric', 'conditionChecked', 'condition-is-checked', ]; var $container; // Add a class for dropdown created $select.addClass( obj.selector.created.className() ); // args.debug = true; // For Reference we save the jQuery element as an Arg. args.$select = $select; // Auto define the Width of the Select2. args.dropdownAutoWidth = true; args.width = 'resolve'; // CSS for the container args.containerCss = {}; // Only apply visibility when it's a Visible Select2. if ( $select.is( ':visible' ) ) { args.containerCss.display = 'inline-block'; args.containerCss.position = 'relative'; } // CSS for the dropdown args.dropdownCss = {}; args.dropdownCss.width = 'auto'; // When we have this we replace the default with what's in the param. if ( $select.is( '[data-dropdown-css-width]' ) ) { args.dropdownCss.width = $select.data( 'dropdown-css-width' ); if ( ! args.dropdownCss.width || 'false' === args.dropdownCss.width ) { delete args.dropdownCss.width; delete args.containerCss; } } // By default we allow The field to be cleared args.allowClear = true; if ( $select.is( '[data-prevent-clear]' ) ) { args.allowClear = false; } // Pass the "Searching..." placeholder if specified if ( $select.is( '[data-searching-placeholder]' ) ) { args.formatSearching = $select.data( 'searching-placeholder' ); } // If we are dealing with a Input Hidden we need to set the Data for it to work if ( ! $select.is( '[data-placeholder]' ) && $select.is( '[placeholder]' ) ) { args.placeholder = $select.attr( 'placeholder' ); } // If we are dealing with a Input Hidden we need to set the Data for it to work. if ( $select.is( '[data-options]' ) ) { args.data = $select.data( 'options' ); } // With less then 10 args we wouldn't show the search. args.minimumResultsForSearch = 10; // Prevents the Search box to show if ( $select.is( '[data-hide-search]' ) ) { args.minimumResultsForSearch = Infinity; } // Makes sure search shows up. if ( $select.is( '[data-force-search]' ) ) { delete args.minimumResultsForSearch; } // Allows freeform entry if ( $select.is( '[data-freeform]' ) ) { args.createTag = obj.freefrom_create_search_choice; args.tags = true; $select.data( 'tags', true ); } if ( $select.is( '[multiple]' ) ) { args.multiple = true; // Set the max select items, if defined if ( $select.is( '[data-maximum-selection-size]' ) ) { args.maximumSelectionSize = $select.data( 'maximum-selection-size' ); } // If you don't have separator, add one (comma) if ( ! $select.is( 'data-separator' ) ) { $select.data( 'separator', ',' ); } if ( ! _.isArray( $select.data( 'separator' ) ) ) { args.tokenSeparators = [ $select.data( 'separator' ) ]; } else { args.tokenSeparators = $select.data( 'separator' ); } args.separator = $select.data( 'separator' ); // Define the regular Exp based on args.regexSeparatorElements = [ '^(' ]; args.regexSplitElements = [ '(?:' ]; $.each( args.tokenSeparators, function ( i, token ) { args.regexSeparatorElements.push( '[^' + token + ']+' ); args.regexSplitElements.push( '[' + token + ']' ); } ); args.regexSeparatorElements.push( ')$' ); args.regexSplitElements.push( ')' ); args.regexSeparatorString = args.regexSeparatorElements.join( '' ); args.regexSplitString = args.regexSplitElements.join( '' ); args.regexToken = new RegExp( args.regexSeparatorString, 'ig' ); args.regexSplit = new RegExp( args.regexSplitString, 'ig' ); } // Select also allows Tags, so we go with that too if ( $select.is( '[data-tags]' ) ) { args.tags = $select.data( 'tags' ); args.createSearchChoice = function( term, data ) { // eslint-disable-line no-unused-vars if ( term.match( args.regexToken ) ) { return { id: term, text: term }; } }; if ( 0 === args.tags.length ) { args.formatNoMatches = function() { return $select.attr( 'placeholder' ); }; } } // When we have a source, we do an AJAX call if ( $select.is( '[data-source]' ) ) { var source = $select.data( 'source' ); // For AJAX we reset the data args.data = { results: [] }; // Format for Parents breadcrumbs args.formatResult = function ( item, container, query ) { // eslint-disable-line no-unused-vars,max-len if ( 'undefined' !== typeof item.breadcrumbs ) { return $.merge( item.breadcrumbs, [ item.text ] ).join( ' » ' ); } return item.text; }; // instead of writing the function to execute the request we use Select2's convenient helper. args.ajax = { dataType: 'json', type: 'POST', url: obj.ajaxurl(), // parse the results into the format expected by Select2. processResults: function ( response, page, query ) { // eslint-disable-line no-unused-vars if ( ! $.isPlainObject( response ) || 'undefined' === typeof response.success ) { console.error( 'We received a malformed Object, could not complete the Select2 Search.' ); // eslint-disable-line max-len return { results: [] }; } if ( ! $.isPlainObject( response.data ) || 'undefined' === typeof response.data.results ) { console.error( 'We received a malformed results array, could not complete the Select2 Search.' ); // eslint-disable-line max-len return { results: [] }; } if ( ! response.success ) { if ( 'string' === $.type( response.data.message ) ) { console.error( response.data.message ); } else { console.error( 'The Select2 search failed in some way... Verify the source.' ); } return { results: [] }; } return response.data; }, }; // By default only send the source args.ajax.data = function( search, page ) { return { action: 'tribe_dropdown', source: source, search: search, page: page, args: $select.data( 'source-args' ), }; }; } // Attach dropdown to container in DOM. if ( $select.is( '[data-attach-container]' ) ) { // If multiple, attach container without search. if ( $select.is( '[multiple]' ) ) { $.fn.select2.amd.define( 'AttachedDropdownAdapter', [ 'select2/utils', 'select2/dropdown', 'select2/dropdown/attachContainer', ], function( utils, dropdown, attachContainer ) { return utils.Decorate( dropdown, attachContainer ); } ); args.dropdownAdapter = $.fn.select2.amd.require( 'AttachedDropdownAdapter' ); // If not multiple, attach container with search. } else { $.fn.select2.amd.define( 'AttachedWithSearchDropdownAdapter', [ 'select2/utils', 'select2/dropdown', 'select2/dropdown/search', 'select2/dropdown/minimumResultsForSearch', 'select2/dropdown/attachContainer', ], function( utils, dropdown, search, minimumResultsForSearch, attachContainer ) { var adapter = utils.Decorate( dropdown, attachContainer ); adapter = utils.Decorate( adapter, search ); adapter = utils.Decorate( adapter, minimumResultsForSearch ); return adapter; } ); args.dropdownAdapter = $.fn.select2.amd.require( 'AttachedWithSearchDropdownAdapter' ); } } // Save data on Dropdown $select.data( 'dropdown', args ); $container = $select.select2TEC( args ); // Propagating original input classes to the select2 container. $container.data( 'select2' ).$container.addClass( obj.getSelectClasses( $select ).join( ' ' ) ); // Propagating original input classes to the select2 container. $container.data( 'select2' ).$container.removeClass( 'hide-before-select2-init' ); $container.on( 'select2:open', obj.action_select2_open ); /** * @todo @bordoni Investigate how and if we should be doing this. * if ( carryOverData.length > 0 ) { carryOverData.map( function( dataKey ) { var attr = 'data-' + dataKey; var val = $select.attr( attr ); if ( ! val ) { return; } this.attr( attr, val ); }, $container ); } */ }; obj.ajaxurl = function() { if ( 'undefined' !== typeof window.ajaxurl ) { return window.ajaxurl; } if ( 'undefined' !== typeof TEC && 'undefined' !== typeof TEC.ajaxurl ) { return TEC.ajaxurl; } console.error( 'Dropdowns framework cannot properly do an AJAX request without the WordPress `ajaxurl` variable setup.' ); // eslint-disable-line max-len }; obj.action_select2_open = function( event ) { // eslint-disable-line no-unused-vars var $select = $( this ); var select2Data = $select.data( 'select2' ); var $search = select2Data.$dropdown.find( obj.selector.searchField ); // eslint-disable-line es5/no-es6-methods,max-len select2Data.$dropdown.addClass( obj.selector.dropdown.className() ); // If we have a placeholder for search, apply it! if ( $select.is( '[data-search-placeholder]' ) ) { $search.attr( 'placeholder', $select.data( 'searchPlaceholder' ) ); } }; /** * Configure the Drop Down Fields * * @param {jQuery} $fields All the fields from the page * @param {array} args Allow extending the arguments * * @return {jQuery} Affected fields */ obj.dropdown = function( $fields, args ) { var $elements = $fields.not( '.select2-offscreen, .select2-container, ' + obj.selector.created.className() ); // eslint-disable-line max-len if ( 0 === $elements.length ) { return $elements; } // Default args to avoid Undefined if ( ! args ) { args = {}; } $elements .each( function( index, element ) { // Apply element to all given items and pass args obj.element( element, args ); } ); // return to be able to chain jQuery calls return $elements; }; $( function() { $( obj.selector.dropdown ).tribe_dropdowns(); } ); // Addresses some problems with Select2 inputs not being initialized when using a browser's "Back" button. $( window ).on( 'unload', function() { $( obj.selector.dropdown ).tribe_dropdowns(); }); } )( jQuery, tribe_dropdowns, window.underscore || window._ ); /*! elementor-pro - v3.5.1 - 10-11-2021 */ .elementor-cta,.elementor-widget-call-to-action .elementor-widget-container{overflow:hidden}.elementor-cta{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-cta--skin-classic .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--skin-classic .elementor-cta__bg-wrapper{position:relative;min-height:200px;width:100%}.elementor-cta--skin-classic .elementor-cta__content{-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s;width:100%;background-color:#f7f7f7}.elementor-cta--skin-classic .elementor-cta__content-item,.elementor-cta--skin-classic .elementor-cta__content-item .elementor-icon{color:#55595c;border-color:#55595c;fill:#55595c}.elementor-cta--skin-classic .elementor-cta__button.elementor-button{color:#55595c;border-color:#55595c}.elementor-cta--skin-cover .elementor-cta{display:block}.elementor-cta--skin-cover .elementor-cta__bg-wrapper{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s;width:100%}.elementor-cta--skin-cover .elementor-cta__content{min-height:280px}.elementor-cta--skin-cover .elementor-cta__button.elementor-button,.elementor-cta--skin-cover .elementor-cta__content-item,.elementor-cta--skin-cover .elementor-cta__content-item .elementor-icon{color:#fff;border-color:#fff}.elementor-cta--layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--layout-image-left .elementor-cta,.elementor-cta--layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--layout-image-left .elementor-cta__content,.elementor-cta--layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.elementor-cta__bg,.elementor-cta__bg-overlay{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s}.elementor-cta__bg-wrapper{z-index:1;overflow:hidden}.elementor-cta__bg{-webkit-background-size:cover;background-size:cover;background-position:50%;z-index:1}.elementor-cta__bg-overlay{z-index:2}.elementor-cta__button.elementor-button{cursor:pointer;-ms-flex-item-align:center;align-self:center;margin-left:auto;margin-right:auto;border:2px solid #fff;background:transparent}.elementor-cta__button.elementor-button:hover{background:transparent;text-decoration:none}.elementor-cta__title{font-size:23px}.elementor-cta__content{z-index:1;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;padding:35px;width:100%}.elementor-cta__content,.elementor-cta__content-item{position:relative;-webkit-transition:.5s;-o-transition:.5s;transition:.5s;color:#fff}.elementor-cta__content-item{width:100%;margin:0}.elementor-cta__content-item:not(:last-child){margin-bottom:15px}.elementor-cta__content-item .elementor-icon{color:#fff}.elementor-cta--valign-top .elementor-cta__content{-ms-flex-line-pack:start;align-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.elementor-cta--valign-middle .elementor-cta__content{-ms-flex-line-pack:center;align-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.elementor-cta--valign-bottom .elementor-cta__content{-ms-flex-line-pack:end;align-content:flex-end;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.elementor-cta:hover .elementor-cta__bg-overlay{background-color:rgba(0,0,0,.3)}@media (max-device-width:1024px){.elementor-cta{cursor:pointer}}@media (min-width:-1px){.elementor-cta--widescreen-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--widescreen-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--widescreen-layout-image-left .elementor-cta,.elementor-cta--widescreen-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--widescreen-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--widescreen-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--widescreen-layout-image-left .elementor-cta__content,.elementor-cta--widescreen-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--widescreen-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--widescreen-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:-1px){.elementor-cta--laptop-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--laptop-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--laptop-layout-image-left .elementor-cta,.elementor-cta--laptop-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--laptop-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--laptop-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--laptop-layout-image-left .elementor-cta__content,.elementor-cta--laptop-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--laptop-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--laptop-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:-1px){.elementor-cta--tablet_extra-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--tablet_extra-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--tablet_extra-layout-image-left .elementor-cta,.elementor-cta--tablet_extra-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--tablet_extra-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--tablet_extra-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--tablet_extra-layout-image-left .elementor-cta__content,.elementor-cta--tablet_extra-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--tablet_extra-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--tablet_extra-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:1024px){.elementor-cta--tablet-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--tablet-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--tablet-layout-image-left .elementor-cta,.elementor-cta--tablet-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--tablet-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--tablet-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--tablet-layout-image-left .elementor-cta__content,.elementor-cta--tablet-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--tablet-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--tablet-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:-1px){.elementor-cta--mobile_extra-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--mobile_extra-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--mobile_extra-layout-image-left .elementor-cta,.elementor-cta--mobile_extra-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--mobile_extra-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--mobile_extra-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--mobile_extra-layout-image-left .elementor-cta__content,.elementor-cta--mobile_extra-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--mobile_extra-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--mobile_extra-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:767px){.elementor-cta--mobile-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--mobile-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--mobile-layout-image-left .elementor-cta,.elementor-cta--mobile-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--mobile-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--mobile-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--mobile-layout-image-left .elementor-cta__content,.elementor-cta--mobile-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--mobile-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--mobile-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.elementor-ribbon{position:absolute;z-index:1;top:0;left:0;right:auto;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);width:150px;overflow:hidden;height:150px}.elementor-ribbon-inner{text-align:center;left:0;width:200%;-webkit-transform:translateY(-50%) translateX(0) translateX(35px) rotate(-45deg);-ms-transform:translateY(-50%) translateX(0) translateX(35px) rotate(-45deg);transform:translateY(-50%) translateX(0) translateX(35px) rotate(-45deg);margin-top:35px;font-size:13px;line-height:2;font-weight:800;text-transform:uppercase;background:#000;color:#fff}.elementor-ribbon.elementor-ribbon-left{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);left:0;right:auto}.elementor-ribbon.elementor-ribbon-right{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);left:auto;right:0} Meilleur Casino en Ligne 2025 - Sites Fiables.8669 - premier mills

Meilleur Casino en Ligne 2025 – Sites Fiables.8669

Содержимое

Meilleur Casino en Ligne 2025 – Sites Fiables

Les casinos en ligne sont devenus très populaires au fil des ans, offrant une expérience de jeu en ligne sécurisée et amusante. Mais avec tant de choix disponibles, il peut être difficile de trouver le meilleur casino en ligne pour vous. C’est pourquoi nous avons créé ce guide pour vous aider à trouver le meilleur casino en ligne 2025, avec des sites fiables et sécurisés.

Les casinos en ligne français sont très populaires, mais il est important de choisir un site qui est légal et sécurisé. Les casinos en ligne français légaux sont régulés par l’Autorité des jeux en ligne (AJE) et doivent respecter certaines normes de sécurité et de transparence. C’est pourquoi il est important de vérifier si le casino en ligne que vous choisissez est légal et sécurisé.

Les casinos en ligne gratuits sont également très populaires, mais il est important de noter que la plupart des casinos en ligne offrent des bonus et des promotions pour attirer de nouveaux joueurs. C’est pourquoi il est important de lire les conditions générales avant de vous inscrire.

Les jeux de casino en ligne sont très variés, offrant des jeux de table, des machines à sous, des jeux de cartes et bien plus encore. Les casinos en ligne français offrent également des jeux de poker, des jeux de roulette et des jeux de blackjack, entre autres.

En résumé, pour trouver le meilleur casino en ligne 2025, il est important de choisir un site qui est légal, sécurisé et offre des jeux de qualité. Il est également important de lire les conditions générales et de vérifier les récompenses et les promotions offertes. En suivant ces conseils, vous pourrez trouver le meilleur casino en ligne pour vos besoins et vos préférences.

Meilleur Casino en Ligne 2025 : Les 5 meilleurs casinos en ligne français

Voici les 5 meilleurs casinos en ligne français, sélectionnés pour leur sécurité, leur variété de jeux et leurs récompenses :

1. Jackpot City – Un des plus grands casinos en ligne français, offrant plus de 500 jeux de casino.

2. Europes Casino – Un casino en ligne français légal, offrant des jeux de table, des machines à sous et des jeux de cartes.

3. Betway Casino – Un casino en ligne français sécurisé, offrant des jeux de table, des machines à sous et des jeux de cartes.

4. Casino 777 – Un casino en ligne français offrant des jeux de table, des machines à sous et des jeux de cartes, avec des récompenses et des promotions régulières.

5. Unibet Casino – Un casino en ligne français offrant des jeux de table, des machines à sous et des jeux de cartes, avec des récompenses et des promotions régulières.

En résumé, ces 5 casinos en ligne français sont des choix excellents pour les joueurs de casino en ligne. Ils offrent des jeux de qualité, des récompenses et des promotions, et sont tous légaux et sécurisés.

Les Meilleurs Casinos en Ligne pour les Joueurs Français

Les Français sont connus pour leur amour de la chance et de la roulette, et il n’est pas étonnant que le marché des casinos en ligne français soit en constante évolution. Avec de nombreux choix disponibles, il est important de trouver le meilleur casino en ligne pour les joueurs français. Dans cet article, nous allons vous présenter les meilleurs casinos en ligne pour les joueurs français, en prenant en compte les critères de sécurité, de variété de jeux et de bonus.

Le premier critère est évidemment la sécurité. Les meilleurs casinos en ligne français doivent disposer d’une licence émise par une autorité réglementaire, comme l’Autorité des jeux en ligne (AJE) ou la Commission nationale des jeux (CNJ). Ils doivent également disposer d’un système de sécurité robuste pour protéger les données des joueurs et les transactions financières.

Le deuxième critère est la variété de jeux. Les meilleurs casinos en ligne français doivent offrir une large gamme de jeux, allant des classiques comme la roulette et le blackjack, aux jeux vidéo comme le poker et les machines à sous. Les joueurs français aiment la diversité, et il est important que le casino en ligne offre des options pour tous les goûts.

Le troisième critère est les bonus. Les meilleurs casinos en ligne français doivent offrir des bonus attractifs pour les nouveaux joueurs, ainsi que des promotions régulières pour les joueurs réguliers. Les bonus peuvent prendre la forme de mises à prix, de free spins ou de cashback, et il est important que le casino en ligne offre des options pour tous les joueurs.

En prenant en compte ces critères, voici quelques-uns des meilleurs casinos en ligne pour les joueurs français :

– Casino 777 : avec sa licence émise par l’Autorité des jeux en ligne, Casino 777 offre une large gamme de jeux, y compris des jeux vidéo et des jeux de table. Il offre également des bonus attractifs pour les nouveaux joueurs, ainsi que des promotions régulières pour les joueurs réguliers.

– Betway : avec sa licence émise par la Commission nationale des jeux, Betway est un des meilleurs casinos en ligne pour les joueurs français. Il offre une large gamme de jeux, y compris des jeux vidéo et des jeux de table, ainsi que des bonus attractifs pour les nouveaux joueurs.

– Unibet : avec sa licence émise par l’Autorité des jeux en ligne, Unibet est un des meilleurs casinos en ligne pour les joueurs français. Il offre une large gamme de jeux, y compris des jeux vidéo et des jeux de table, ainsi que des bonus attractifs pour les nouveaux joueurs.

En résumé, les meilleurs casinos en ligne pour les joueurs français sont ceux qui offrent une sécurité robuste, une variété de jeux et des bonus attractifs. En prenant en compte ces critères, nous vous recommandons Casino 777, Betway et Unibet comme quelques-uns des meilleurs casinos en ligne pour les joueurs français.

Comment Choisir un Casino en Ligne Fiable et Sécurisé

Pour choisir un casino en ligne fiable et sécurisé, il est essentiel de prendre en compte plusieurs critères clés. Voici quelques conseils pratiques pour vous aider à faire le bon choix.

1. Vérifiez la licence

La licence est un critère essentiel pour évaluer la légalité et la sécurité d’un casino en ligne. Assurez-vous que le casino en ligne France est licencié et réglementé par une autorité de jeu en ligne reconnue, telle que l’Autorité des jeux en ligne (AJE) ou l’Arjel.

  • La licence est un garant de la sécurité et de la transparence des opérations du casino en ligne.
  • Il est important de vérifier la date de début et de fin de la licence pour s’assurer qu’elle est valable.

2. Vérifiez les paiements

Les moyens de paiement sont un autre critère essentiel pour évaluer la sécurité d’un casino en ligne. Assurez-vous que le casino en ligne France propose des moyens de paiement fiables et sécurisés, tels que les cartes de crédit, les transferts bancaires ou les services de paiement en ligne.

  • Les moyens de paiement doivent être fiables et sécurisés pour éviter les fraudes.
  • Il est important de vérifier les frais de transaction et les délais de traitement des paiements.
  • 3. Vérifiez les jeux

    Les jeux sont un autre aspect important pour évaluer la qualité d’un casino en ligne. Assurez-vous que le casino en ligne France propose une variété de jeux de casino en ligne, tels que les jeux de table, les machines à sous, les jeux de cartes, etc.

    • Les jeux doivent être équitables et aléatoires pour garantir une expérience de jeu équitable.
    • Il est important de vérifier les règles de jeu et les règles de bonus.

    4. Vérifiez la sécurité

    La sécurité est un critère essentiel pour évaluer la fiabilité d’un casino en ligne. Assurez-vous que le casino en ligne France utilise des mesures de sécurité robustes, telles que la cryptographie, les certificats SSL/TLS, etc.

  • La sécurité est essentielle pour protéger les données des joueurs.
  • Il est important de vérifier les politiques de confidentialité et les mesures de sécurité en place.
  • 5. Vérifiez les récompenses

    Les récompenses sont un autre aspect important pour évaluer la qualité d’un casino en ligne. Assurez-vous que le casino en ligne France propose des récompenses attractives, telles que des bonus de bienvenue, des promotions, des loteries, etc.

    • Les récompenses doivent être claires et transparentes pour éviter les surprises.
    • Il est important de vérifier les conditions d’utilisation des récompenses.

    En résumé, pour choisir un casino en ligne fiable et sécurisé, il est essentiel de vérifier la licence, les paiements, les jeux, la sécurité et les récompenses. En suivant ces conseils pratiques, vous pourrez faire le bon choix et profiter d’une expérience de jeu en ligne sécurisée et amusante.

    Les Avantages et les Inconvénients des Casinos en Ligne

    Les casinos en ligne ont connu un essor rapide ces dernières années, offrant aux joueurs une expérience de jeu unique et confortable. Cependant, il est important de considérer les avantages et les inconvénients de ces plateformes avant de vous lancer dans l’aventure.

    Les avantages

    Confort et flexibilité

    Les casinos en ligne offrent une grande flexibilité, vous permettant de jouer à votre guise et à tout moment. Vous pouvez ainsi jouer dans votre salon, dans votre lit ou même en vacances, sans avoir à vous déplacer. De plus, les casinos en ligne proposent souvent des bonus et des promotions attractives, ce qui peut augmenter vos chances de gagner.

    Les inconvénients

    Risques de fraude et de non-paiement

    Les casinos en ligne peuvent également présenter des risques de fraude et de non-paiement. Il est donc important de choisir un casino en ligne fiable et de vérifier ses conditions de jeu et de paiement avant de commencer à jouer. Il est également important de ne pas oublier que les casinos en ligne ne sont pas réglementés de la même manière que les casinos traditionnels, ce qui peut augmenter les risques de fraude.

    Il est important de choisir un casino en ligne fiable

    Les casinos en ligne fiables sont ceux qui ont une réputation solide, qui sont réglementés et qui offrent des garanties de sécurité pour vos données et vos gains. Il est donc important de faire des recherches avant de choisir un casino en ligne et de vérifier ses conditions de jeu et de paiement.

    Il est également important de ne pas oublier que les casinos en ligne ne sont pas réglementés de la même manière que les casinos traditionnels

    Les casinos en ligne ne sont pas réglementés de la même manière que les casinos traditionnels, ce qui peut augmenter les risques de fraude. Il est donc important de choisir un casino en ligne qui est réglementé et qui offre des garanties de sécurité pour vos données et vos gains.

    En résumé, les casinos en ligne offrent une expérience de jeu unique et confortable, mais il est important de considérer les avantages et les inconvénients avant de vous lancer dans l’aventure. Il est important de choisir un casino en ligne fiable et de vérifier ses conditions de jeu et de paiement avant de commencer à jouer.

    Conseils pour Jouer au Casino en Ligne avec Prudence

    Alors que le nombre de nouveaux casinos en ligne continue de croître, il est essentiel de jouer avec prudence pour éviter les erreurs et les pertes financières. Voici quelques conseils pour vous aider à jouer au casino en ligne avec sagesse :

    Choisissez un casino en ligne fiable. Il est important de vérifier la réputation d’un casino en ligne avant de vous y inscrire. Assurez-vous qu’il est licencié et que ses jeux sont régulés par une autorité de contrôle. Le meilleur casino en ligne france , par exemple, est régulé par l’Autorité des jeux en ligne (AJE).

    Établissez un budget. Il est essentiel de définir un budget pour votre jeu et de vous y tenir. Ne jamais jouer avec des fonds qui ne sont pas à vous, et évitez les jeux à haute fréquence.

    Apprenez les règles des jeux. Il est important de comprendre les règles des jeux avant de les jouer. Cela vous aidera à prendre des décisions éclairées et à minimiser vos pertes.

    Profitez des offres de bienvenue. De nombreux casinos en ligne offrent des offres de bienvenue attrayantes, telles que des bonus de bienvenue ou des free spins. Assurez-vous de bien comprendre les conditions de ces offres pour ne pas vous tromper.

    Évitez les jeux à haute fréquence. Les jeux à haute fréquence, tels que le roulette ou le blackjack, peuvent être très attractifs, mais ils peuvent également vous coûter cher. Il est préférable de choisir des jeux à faible fréquence, tels que les jeux de cartes ou les lotteries.

    Prenez des pauses. Le jeu en ligne peut être addictif, il est donc important de prendre des pauses régulières pour vous détendre et vous ressourcer. Cela vous aidera à éviter les erreurs et les pertes financières.

    Choisissez un casino gratuit en ligne. Si vous êtes débutant, il est peut-être préférable de commencer avec un casino gratuit en ligne. Cela vous permettra de vous familiariser avec les jeux et les règles sans risquer de perdre de l’argent.

    Profitez des promotions. De nombreux casinos en ligne offrent des promotions régulières, telles que des free spins ou des bonus de reload. Assurez-vous de bien comprendre les conditions de ces promotions pour ne pas vous tromper.

    Évitez les casinos en ligne frauduleux. Il est essentiel de vérifier la réputation d’un casino en ligne avant de vous y inscrire. Assurez-vous qu’il est licencié et que ses jeux sont régulés par une autorité de contrôle. Il est également important de vérifier les conditions de paiement et de retrait pour éviter les problèmes.

    Prenez soin de votre vie personnelle. Le jeu en ligne peut être addictif, il est donc important de prendre soin de votre vie personnelle et de vos relations. Assurez-vous de ne pas laisser le jeu en ligne prendre le dessus sur votre vie.

    Leave a Comment

    Your email address will not be published. Required fields are marked *