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} أفضل برامج وألعاب الكازينو على الهواتف المحمولة في جنوب أفريقيا لعام ٢٠٢٤ - premier mills

أفضل برامج وألعاب الكازينو على الهواتف المحمولة في جنوب أفريقيا لعام ٢٠٢٤

هذا لتجنب تطوير نماذج سيئة، ويمكنك تحفيزه للعب بأموال حقيقية قد تُفرض عليه رسوم باهظة على المدى الطويل. يستثمر Deprive خبرته في تجارة كرة القدم، ويلعب بوكر كازينو ممتازًا، لذا يمكنك تجربة الملعب البريطاني والحصول على حوافز كازينو قيّمة، بالإضافة إلى عروض رهان مجانية على BonusFinder. تُقدم Apple Pay تجربة لعب مميزة تجعلها تتفوق على خيارات الدفع الأخرى في كازينوهات الجوال – ويمكنك أيضًا سحب الأموال إلى حسابك عبر Apple Pay.

على سبيل المثال، يُفضّل بعض اللاعبين ألعاب الكازينو المباشرة، وبغض النظر عن روعة تجربة الهاتف المحمول الجديدة، فهي تجربة مثالية بدون ألعاب الطاولة المباشرة. ندرك أنه من غير العملي توقع أن يكون مستوى جودة الألعاب على الهاتف المحمول مساويًا لمستوى ألعاب الكمبيوتر. ومع ذلك، كلما زاد عدد ألعاب الكازينو على الهاتف المحمول، زادت احتمالية حصوله على موقع على الإنترنت. يمكن للاعبين الأمريكيين الوصول إلى جميع الألعاب التي يرغبون في لعبها على هواتفهم التي تعمل بنظام أندرويد أيضًا. وقد تم تدريب الشركات التي تُنشئ ألعاب الكازينو على الإنترنت على جعلها متوافقة مع الهواتف المحمولة، حتى يتمكن اللاعبون من تجربة اللعبة بشكل أفضل.

مكافآت الكازينو المباشر وفتحات الهاتف المحمول الجديدة كليًا

ألعاب الكازينو عبر الهاتف المحمول متوفرة بكثرة، لذا عليك أن تكون حذرًا. لا تراهن بأكثر من طاقتك، ولا تُطيل مدة اللعب أكثر من المعتاد. بما أن الهواتف المحمولة تدعم الاشتراك، يمكنك التسجيل عبر شبكات أخرى (مثل: فيسبوك، تويتر، جوجل).

كازينوهات الهاتف المحمول الجديدة في المملكة المتحدة

  • تحاول العروض الترويجية المدعوة إلى أعظم الكازينوهات المحمولة وضع الحوافز.
  • ثانيًا، يرجى التأكد من أن طريقة نسبة الهاتف المحمول المفضلة لديك صالحة لذكر المكافأة الإضافية المدعوة الأحدث.
  • أقوم بتقييم الكازينوهات التي تستخدم آلات العد العشوائية (RNGs) والتي تخضع للتدقيق بشكل منتظم من قبل الحكومة المستقلة بحيث تكون جميع الألعاب عادلة وقد تكون النتائج عشوائية تمامًا.
  • قم بلف المسار الصحيح بفضل المكافأة الجيدة من الدورات المجانية بنسبة 100 بالمائة باستخدام هذا النوع من المكافأة الاحترافية الجديدة المذهلة.
  • ولكن ليس هذا هو الحال، فالفرق الوحيد هو حقيقة أن لاعبي الكازينو الجدد على أجهزة iPhone يمكنهم الاستمتاع باللعب في أي وقت يريدونه – حتى أثناء التنقل.
  • لا تفهمنا خطأً، فجهازك المحمول الجديد الذي يعمل بنظام iPhone لا يزال يحتوي على مجموعة شاملة من الألعاب التي تعمل بشكل لا تشوبه شائبة.
  • إذا كنت ترغب في المقامرة عبر الإنترنت بدلاً من الكشف عن الإرشادات المالية الشخصية، فإن الدفع من خلال الكازينو عبر الهاتف المحمول قد يكون بديلاً.

7 spins casino no deposit bonus

ستكون هذه الألعاب قابلة للعب بالكامل على هواتف Samsung Galaxy S24، وGoogle Pixel 7، وOnePlus 12، أو أي جهاز أندرويد حديث آخر بفضل برنامج الكازينو الذي يعمل بأموال حقيقية. تُطبق القيود فقط على ألعاب السلوتس عالية الرسوميات. يُبسط نظام أندرويد الجديد معايير اللعبة ليمنحك تجربة لعب سلسة وفورية. سواءً رغبنا في لعب السلوتس بأموال حقيقية على نظام أندرويد أو تجربة اللعبة المجانية الجديدة للمتعة، فإن جميع الكازينوهات الإلكترونية تقريبًا تُقدم مجموعة ممتازة من ألعاب السلوتس.

ستظهر شاشته الرئيسية بشكل رائع على الهاتف المحمول أو الأجهزة اللوحية مهما كان حجم الشاشة بفضل تصميمه المتجاوب. لستَ بحاجة إلى تنزيل أي شيء للعب لعبة بأموال حقيقية على هاتفك، وكانت خيارات الإيداع متشابهة. كل شيء جاهز للعمل بسرعة بفضل متصفح رائع.

كازينو سوانكي بينجو المحلي خيار مثالي لعشاق ماكينات القمار الجدد، حيث يضم أكثر من 1100 لعبة من أشهر الألعاب، بما في ذلك ستاربرست، وبوك آوت أوف إناكتيف، وسويت بونانزا، وغيرها. أما بالنسبة لعشاق ماكينات القمار الكبار، فيُعد كازينو لاس فيغاس خيارًا مثاليًا، حيث يضم أكثر من 1000 لعبة قمار على منصات Gamble'n Go، وMicrogaming، وPractical Play، وغيرها من المنصات الشهيرة. مساحة شاشة الهاتف المحمول أصغر من شاشة الكمبيوتر. لذا، يجب على الكازينوهات الإلكترونية ضمان سهولة الوصول إلى الدردشة المباشرة عبر الهواتف الذكية.

online casino games 888

ستكون هذه وسيلةً للسائق لجذب اهتمام العملاء الجدد، وستكافئهم على إتمام معاملاتهم. عادةً ما تكون الحزم المدعوة عبارة عن مكافآت مطابقة للإيداع الأولي، ويمكنك/أو يمكنك الحصول على دورات مجانية بنسبة 100percent. يتمتع لي جيمس جويليام بخبرة تزيد عن عقد من الزمان كلاعب بوكر وخمس سنوات في عالم الكازينو. بدأ مسيرته حول العالم، حيث ساعد كازينو، وأنتج أكثر من 100,000 منشور على مواقع إلكترونية مختلفة، بما في ذلك مواقع ماكينات القمار، والوكلاء المباشرين، وبوكر الكازينو. نقوم بتقييم مواقع المراهنات بناءً على مؤشرات نتائج سرية لتحديد الأنظمة الرئيسية للاعبين حول العالم.

تتكيف كازينوهات القمار الحديثة بسهولة مع أحدث التقنيات والأساليب في عالم ألعاب الإنترنت. لقد اخترتُ قائمةً مختصرةً من أفضل كازينوهات القمار التي تعمل بنظام https://arabicslots.com/en/casino-bonuses/welcome-bonus/ ويندوز، لتجنّب عناء البحث عن النظام الأنسب لاحتياجاتك. أيًا كان النظام الذي تختاره من القائمة، ستتمكن من الاستمتاع بتجربة لعب كازينو عالية المستوى من خلال جهازك. هناك العديد من ألعاب القمار الأخرى المشهورة على الإنترنت، والتي قد لا تجدها حتى في الكازينوهات المنزلية. أؤكد على تطبيقات كازينو اليانصيب، ومكافآت الهاتف المحمول، والألعاب الإلكترونية في دليلنا الاحترافي.

يجب عليك أيضًا استيفاء شروط اللعب في الموقع إذا وافقت على حافز ترحيبي. استمتع بقائمة أفضل كازينوهات الهاتف المحمول لدينا – دليل أعده خبراء متخصصون بذلوا قصارى جهدهم لتلبية احتياجاتك. يُعدّ استيراد الأسلاك الكلاسيكي الجديد خيارًا أكثر أمانًا، وإن كان بطيئًا بعض الشيء مقارنةً بالخطوات الأخرى. لعبة صغيرة تظهر في لعبة فيديو ماكينة القمار المجانية.

بفضل توافقه مع الهواتف المحمولة، سيستمتع اللاعبون بألعاب Spin247 الفريدة من نوعها أينما كانوا في منازلهم دون أي تأثير على الجودة أو الميزات. بفضل اهتمامهم الكبير بإدارة الألعاب، تقدم أفضل الكازينوهات الإلكترونية ألعابًا نزيهة وعروضًا أكثر أمانًا. كما يمكنك الوثوق بمقدمي الخدمة للحفاظ على بياناتك الشخصية وخصوصيتك. كما توفر أفضل الكازينوهات الإلكترونية حماية فائقة لأموالك، وتستخدم أحدث التقنيات.

online casino nz

إذا كنت لا تزال غير متأكد، يمكنك دائمًا التواصل مع فريق خدمة العملاء لمعرفة ما إذا كان هناك تطبيق متاح أو تطبيق جديد. اقرأ المكافآت المقدمة من مختلف كازينوهات الإنترنت، وتعرّف على ما هو متاح حاليًا. مرة أخرى، يتعلق الأمر بالعثور على أفضل كازينو محلي وطريقة الدفع المناسبة (مثل Boku وغيرها)، حيث تميل جميع أنظمة التشغيل الرئيسية إلى ضمان المعاملة. لذا، إذا كان هاتفك يعمل بنظام iOS (Apple) أو Android، فستجد أنه يمكنك استخدام كشف حساب هاتفك للإيداع في الكازينوهات، أو الاقتراض من البنك. يمكنك أيضًا الدفع عبر منافذ كشف حساب الهاتف من بعض الكازينوهات الأكبر والأكثر خبرة، مثل كازينو 32Red، وكازومو، وكارامبا.

عندما أتحدث عن كازينو محلي على الهاتف المحمول، أُولي اهتمامًا كبيرًا للنسبة الجديدة من ألعاب الفيديو على الهاتف المحمول مقارنةً بالإنترنت. من المفترض أن تكون الخسارة ضئيلة الآن، ولكن قد تصل إلى أقل من 80percent، لذا نحن أيضًا غير مُعجبين. لقد أدى التطور الجديد لـ HTML 5 إلى سهولة تكيف الألعاب مع الهاتف المحمول اليوم.

دورات مجانية بالكامل بدون إيداع

الميزة هي إمكانية ربح عملات حقيقية بدلاً من المخاطرة بأموالك (طالما أنك تستوفي متطلبات الرهان). كما تُعد الدورات المجانية بدون إيداع مثالية لمن يرغبون في تعلم المزيد عن ماكينات القمار دون الحاجة إلى أموالهم الخاصة. إلى جانب مكافآت القبول والتراخيص القوية والمراهنة الجيدة، نحظى بتقدير اللاعبين لتنوع ألعاب الفيديو لدينا. لم نجمع جميع الألعاب في مُنشئ واحد فحسب، بل اخترنا بعناية ألعابًا مُدربة من أكثر من عشرين مُنشئًا! مما أدى في النهاية إلى إنشاء مجموعة ألعاب تضم أكثر من 2500 لعبة من أفضل ألعاب الكازينو على الإنترنت. بما أن اللعبة قد تم تطويرها خلال السنوات الخمس الماضية، فمن المؤكد أن جميع الهواتف المحمولة الحديثة قوية بما يكفي لتركيز ألعاب الكازينو، بما في ذلك ألعاب الوساطة المباشرة.

lucky 8 casino no deposit bonus codes

ستكون مكافآت الدورات المجانية مخصصة لعناوين محددة، بينما تُستخدم مكافآت أخرى لأي لعبة تفضلها. لتجنب عناء البحث الممل، ولتوفير خيارات لا حصر لها، قمنا بفحص بعض أشهر الكازينوهات المتوافقة مع أنظمة تشغيل iPhone وAndroid في بريطانيا. مهما كان ما تفضله، ستلبي هذه الكازينوهات احتياجاتك دائمًا، وستنقلك إلى عالم المتعة الذي تبحث عنه. يتطلب تطبيق الهاتف المحمول سمعة جيدة، مما قد يضر باللاعبين غير القادرين على اللعب. يتيح لك HTML5 اللعب في متصفحك، دون الحاجة إلى تثبيت أي برامج، وقد أصبحت هذه الحالة من الماضي.

هل إنشاء برامج موقف واحد يدفع بالفعل دخلاً حقيقياً؟

سيواجه المراهنون عبر الإنترنت قيودًا على ألعاب القمار المجانية، وهي قيودٌ وُضعت لحماية القاصرين. في أغلب الأحيان، يُطلب من لاعبي الكازينو التسجيل قبل الضغط على زر "اللعب". بعد ذلك، أصدرت وزارة حماية المستخدم في ولاية كونيتيكت قانونًا جديدًا يُجيز المراهنات وألعاب القمار عبر الإنترنت. في 19 أكتوبر 2021، أطلقت ولاية كونيتيكت رسميًا ألعاب الكازينو عبر الإنترنت، مع حوالي ثلاثة مواقع إلكترونية أدارتها وزارة القمار في كونيتيكت. وقد دخل المسؤولون رسميًا مجال المقامرة عبر الإنترنت.

لا تُقدم IGT أي ماكينات قمار فاخرة مستوحاة من مصر، ولعبة Cash Mania Sphinx Fire ليست استثناءً. تتميز اللعبة برسومات ومؤثرات بصرية رائعة مستوحاة من مصر القديمة، بالإضافة إلى رموز King wilds المتنامية، ودورات مجانية بنسبة 100percent، وخيارات تحكم متعددة في الأموال. سنستمتع دائمًا بألعاب ماكينات القمار المجانية في فيغاس، لكنني أعتقد أن ألعاب القمار الجديدة تستحق الإشادة.

casino bonus codes no deposit

تسعى تطبيقات الكازينو هذه بسلاسة لتوفير أقصى تجربة للمستخدم، وهي مدعومة بمجموعة قوية من المصممين الداخليين الذين يواصلون تطوير وتحسين أجهزتهم. توفر كازينوهات الهواتف المحمولة الجديدة التي يقدمها خبراء CasinoGuide تجربة سهلة وآمنة عبر الهاتف المحمول. مواقع كازينو الهواتف المحمولة معتمدة من هيئة الألعاب البريطانية، وتعمل بشكل جيد مع أجهزة iPhone وAndroid. إذا كانت رقائق البطاطس معطلة أو كان هناك سؤال يلوح في الأفق، فإن خدمة العملاء في كازينوهات الإنترنت هي ما يبحث عنه المحترفون. تقدم الكازينوهات الشهيرة خدمة عملاء فورية على مدار الساعة، باستخدام ثلاثيتها الرائعة من البث المباشر والدردشة المباشرة وعنوان البريد الإلكتروني والهاتف المحمول لضمان عدم ترك أي استفسار دون إجابة. يتوقع اللاعبون إجابات سريعة، وهذا صحيح، لأن سرعة الاستجابة هي سمة موقع كازينو موثوق.