/* ========================================================= * composer-view.js v0.2.1 * ========================================================= * Copyright 2013 Wpbakery * * Visual composer backbone/underscore version * ========================================================= */ (function ( $ ) { var i18n = window.i18nLocale, store = vc.storage, Shortcodes = vc.shortcodes; vc.templateOptions = { default: { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g }, custom: { evaluate: /<#([\s\S]+?)#>/g, interpolate: /\{\{\{([\s\S]+?)\}\}\}/g, escape: /\{\{([^\}]+?)\}\}(?!\})/g } }; vc.builder = { toString: function ( model, type ) { var params = model.get( 'params' ), content = _.isString( params.content ) ? params.content : ''; return wp.shortcode.string( { tag: model.get( 'shortcode' ), attrs: _.omit( params, 'content' ), content: content, type: _.isString( type ) ? type : '' } ); } }; /** * Default view for shortcode as block inside Visual composer design mode. * @type {*} */ vc.clone_index = 1; vc.saved_custom_css = false; var ShortcodeView = vc.shortcode_view = Backbone.View.extend( { tagName: 'div', $content: '', use_default_content: false, params: {}, events: { 'click .column_delete,.vc_control-btn-delete': 'deleteShortcode', 'click .column_add,.vc_control-btn-prepend': 'addElement', 'click .column_edit,.vc_control-btn-edit, .column_edit_trigger': 'editElement', 'click .column_clone,.vc_control-btn-clone': 'clone', 'mousemove': 'checkControlsPosition' }, removeView: function () { vc.closeActivePanel( this.model ); this.remove(); }, checkControlsPosition: function () { if ( ! this.$controls_buttons ) { return; } var window_top, element_position_top, new_position, element_height = this.$el.height(), window_height = $( window ).height(); if ( element_height > window_height ) { window_top = $( window ).scrollTop(); element_position_top = this.$el.offset().top; new_position = (window_top - element_position_top) + $( window ).height() / 2; if ( 40 < new_position && new_position < element_height ) { this.$controls_buttons.css( 'top', new_position ); } else if ( new_position > element_height ) { this.$controls_buttons.css( 'top', element_height - 40 ); } else { this.$controls_buttons.css( 'top', 40 ); } } }, initialize: function () { this.model.bind( 'destroy', this.removeView, this ); this.model.bind( 'change:params', this.changeShortcodeParams, this ); this.model.bind( 'change_parent_id', this.changeShortcodeParent, this ); this.createParams(); }, hasUserAccess: function () { var shortcodeTag; shortcodeTag = this.model.get( 'shortcode' ); if ( - 1 < _.indexOf( [ "vc_row", "vc_column", "vc_row_inner", "vc_column_inner" ], shortcodeTag ) ) { return true; // we cannot block controls for these shortcodes; } if ( ! _.every( vc.roles.current_user, function ( role ) { return ! (! _.isUndefined( vc.roles[ role ] ) && ! _.isUndefined( vc.roles[ role ][ 'shortcodes' ] ) && _.isUndefined( vc.roles[ role ][ 'shortcodes' ][ shortcodeTag ] )); } ) ) { return false; } return true; }, createParams: function () { var tag, settings, params; tag = this.model.get( 'shortcode' ); settings = _.isObject( vc.map[ tag ] ) && _.isArray( vc.map[ tag ].params ) ? vc.map[ tag ].params : []; params = this.model.get( 'params' ); this.params = {}; _.each( settings, function ( param ) { this.params[ param.param_name ] = param; }, this ); }, setContent: function () { this.$content = this.$el.find( '> .wpb_element_wrapper > .vc_container_for_children,' + ' > .vc_element-wrapper > .vc_container_for_children' ); }, setEmpty: function () { }, unsetEmpty: function () { }, checkIsEmpty: function () { if ( this.model.get( 'parent_id' ) ) { vc.app.views[ this.model.get( 'parent_id' ) ].checkIsEmpty(); } }, /** * Convert html into correct element * @param html */ html2element: function ( html ) { var attributes = {}, $template; if ( _.isString( html ) ) { this.template = _.template( html ); $template = $( this.template( this.model.toJSON(), vc.templateOptions.default ).trim() ); } else { this.template = html; $template = html; } _.each( $template.get( 0 ).attributes, function ( attr ) { attributes[ attr.name ] = attr.value; } ); this.$el.attr( attributes ).html( $template.html() ); this.setContent(); this.renderContent(); }, render: function () { var $shortcode_template_el = $( '#vc_shortcode-template-' + this.model.get( 'shortcode' ) ); if ( $shortcode_template_el.is( 'script' ) ) { this.html2element( _.template( $shortcode_template_el.html(), this.model.toJSON(), vc.templateOptions.default ) ); } else { var params = this.model.get( 'params' ); $.ajax( { type: 'POST', url: window.ajaxurl, data: { action: 'wpb_get_element_backend_html', data_element: this.model.get( 'shortcode' ), data_width: _.isUndefined( params.width ) ? '1/1' : params.width, _vcnonce: window.vcAdminNonce }, dataType: 'html', context: this } ).done( function ( html ) { this.html2element( html ); } ); } this.model.view = this; this.$controls_buttons = this.$el.find( '.vc_controls > :first' ); return this; }, renderContent: function () { this.$el.attr( 'data-model-id', this.model.get( 'id' ) ); this.$el.data( 'model', this.model ); return this; }, changedContent: function ( view ) { }, _loadDefaults: function () { var tag, hasChilds; tag = this.model.get( 'shortcode' ); hasChilds = ! ! vc.shortcodes.where( { parent_id: this.model.get( 'id' ) } ).length; if ( ! hasChilds && true === this.use_default_content && _.isObject( vc.map[ tag ] ) && _.isString( vc.map[ tag ].default_content ) && vc.map[ tag ].default_content.length ) { this.use_default_content = false; Shortcodes.createFromString( vc.map[ tag ].default_content, this.model ); } }, _callJsCallback: function () { //Fire INIT callback if it is defined var tag = this.model.get( 'shortcode' ); if ( _.isObject( vc.map[ tag ] ) && _.isObject( vc.map[ tag ].js_callback ) && ! _.isUndefined( vc.map[ tag ].js_callback.init ) ) { var fn = vc.map[ tag ].js_callback.init; window[ fn ]( this.$el ); } }, ready: function ( e ) { this._loadDefaults(); this._callJsCallback(); if ( this.model.get( 'parent_id' ) && _.isObject( vc.app.views[ this.model.get( 'parent_id' ) ] ) ) { vc.app.views[ this.model.get( 'parent_id' ) ].changedContent( this ); } _.defer( _.bind( function () { vc.events.trigger( 'shortcodeView:ready' ); vc.events.trigger( 'shortcodeView:ready:' + this.model.get( 'shortcode' ) ); }, this ) ); return this; }, // View utils {{ addShortcode: function ( view, method ) { var before_shortcode; before_shortcode = _.last( vc.shortcodes.filter( function ( shortcode ) { return shortcode.get( 'parent_id' ) === this.get( 'parent_id' ) && parseFloat( shortcode.get( 'order' ) ) < parseFloat( this.get( 'order' ) ); }, view.model ) ); if ( before_shortcode ) { view.render().$el.insertAfter( '[data-model-id=' + before_shortcode.id + ']' ); } else if ( 'append' === method ) { this.$content.append( view.render().el ); } else { this.$content.prepend( view.render().el ); } }, changeShortcodeParams: function ( model ) { var tag, params, settings, view; // Triggered when shortcode being updated tag = model.get( 'shortcode' ); params = model.get( 'params' ); settings = vc.map[ tag ]; _.defer( function () { vc.events.trigger( 'backend.shortcodeViewChangeParams:' + tag ); } ); if ( _.isArray( settings.params ) ) { _.each( settings.params, function ( param_settings ) { var name, value, $wrapper, label_value, $admin_label; name = param_settings.param_name; value = params[ name ]; $wrapper = this.$el.find( '> .wpb_element_wrapper, > .vc_element-wrapper' ); label_value = value; $admin_label = $wrapper.children( '.admin_label_' + name ); if ( _.isObject( vc.atts[ param_settings.type ] ) && _.isFunction( vc.atts[ param_settings.type ].render ) ) { value = vc.atts[ param_settings.type ].render.call( this, param_settings, value ); } if ( $wrapper.children( '.' + param_settings.param_name ).is( 'input,textarea,select' ) ) { $wrapper.children( '[name=' + param_settings.param_name + ']' ).val( value ); } else if ( $wrapper.children( '.' + param_settings.param_name ).is( 'iframe' ) ) { $wrapper.children( '[name=' + param_settings.param_name + ']' ).attr( 'src', value ); } else if ( $wrapper.children( '.' + param_settings.param_name ).is( 'img' ) ) { var $img; $img = $wrapper.children( '[name=' + param_settings.param_name + ']' ); if ( value && value.match( /^\d+$/ ) ) { $.ajax( { type: 'POST', url: window.ajaxurl, data: { action: 'wpb_single_image_src', content: value, size: 'thumbnail', _vcnonce: window.vcAdminNonce }, dataType: 'html', context: this } ).done( function ( url ) { $img.attr( 'src', url ); } ); } else if ( value ) { $img.attr( 'src', value ); } } else { $wrapper.children( '[name=' + param_settings.param_name + ']' ).html( value ? value : '' ); } if ( $admin_label.length ) { var inverted_value; if ( '' === value || _.isUndefined( value ) ) { $admin_label.hide().addClass( 'hidden-label' ); } else { if ( _.isObject( param_settings.value ) && ! _.isArray( param_settings.value ) && 'checkbox' === param_settings.type ) { inverted_value = _.invert( param_settings.value ); label_value = _.map( value.split( /[\s]*\,[\s]*/ ), function ( val ) { return _.isString( inverted_value[ val ] ) ? inverted_value[ val ] : val; } ).join( ', ' ); } else if ( _.isObject( param_settings.value ) && ! _.isArray( param_settings.value ) ) { inverted_value = _.invert( param_settings.value ); label_value = _.isString( inverted_value[ value ] ) ? inverted_value[ value ] : value; } $admin_label.html( ': ' + label_value ); $admin_label.show().removeClass( 'hidden-label' ); } } }, this ); } view = vc.app.views[ model.get( 'parent_id' ) ]; if ( false !== model.get( 'parent_id' ) && _.isObject( view ) ) { view.checkIsEmpty(); } }, changeShortcodeParent: function ( model ) { if ( false === this.model.get( 'parent_id' ) ) { return model; } var $parent_view = $( '[data-model-id=' + this.model.get( 'parent_id' ) + ']' ), view = vc.app.views[ this.model.get( 'parent_id' ) ]; this.$el.appendTo( $parent_view.find( '> .wpb_element_wrapper > .wpb_column_container,' + ' > .vc_element-wrapper > .wpb_column_container' ) ); view.checkIsEmpty(); }, // }} // Event Actions {{ deleteShortcode: function ( e ) { if ( _.isObject( e ) ) { e.preventDefault(); } var answer = confirm( i18n.press_ok_to_delete_section ); if ( true === answer ) { this.model.destroy(); } }, addElement: function ( e ) { _.isObject( e ) && e.preventDefault(); vc.add_element_block_view.render( this.model, ! _.isObject( e ) || ! $( e.currentTarget ).closest( '.bottom-controls' ).hasClass( 'bottom-controls' ) ); }, editElement: function ( e ) { if ( _.isObject( e ) ) { e.preventDefault(); } if ( ! vc.active_panel || ! vc.active_panel.model || ! this.model || ( vc.active_panel.model && this.model && vc.active_panel.model.get( 'id' ) != this.model.get( 'id' ) ) ) { vc.closeActivePanel(); vc.edit_element_block_view.render( this.model ); } }, clone: function ( e ) { if ( _.isObject( e ) ) { e.preventDefault(); } vc.clone_index = vc.clone_index / 10; return this.cloneModel( this.model, this.model.get( 'parent_id' ) ); }, cloneModel: function ( model, parent_id, save_order ) { var new_order, model_clone, params, tag; new_order = _.isBoolean( save_order ) && true === save_order ? model.get( 'order' ) : parseFloat( model.get( 'order' ) ) + vc.clone_index; params = _.extend( {}, model.get( 'params' ) ); tag = model.get( 'shortcode' ); model_clone = Shortcodes.create( { shortcode: tag, id: window.vc_guid(), parent_id: parent_id, order: new_order, cloned: true, cloned_from: model.toJSON(), params: params } ); _.each( Shortcodes.where( { parent_id: model.id } ), function ( shortcode ) { this.cloneModel( shortcode, model_clone.get( 'id' ), true ); }, this ); return model_clone; } } ); var VisualComposer = vc.visualComposerView = Backbone.View.extend( { el: $( '#wpb_visual_composer' ), views: {}, disableFixedNav: false, events: { "click #wpb-add-new-row": 'createRow', 'click #vc_post-settings-button': 'editSettings', 'click #vc_add-new-element, .vc_add-element-button, .vc_add-element-not-empty-button': 'addElement', 'click .vc_add-text-block-button': 'addTextBlock', 'click .wpb_switch-to-composer': 'switchComposer', 'click #vc_templates-editor-button': 'openTemplatesWindow', 'click #vc_templates-more-layouts': 'openTemplatesWindow', 'click .vc_template[data-template_unique_id] > .wpb_wrapper': 'loadDefaultTemplate', 'click #wpb-save-post': 'save', 'click .vc_control-preview': 'preview' }, initialize: function () { this.accessPolicy = $( '.vc_js_composer_group_access_show_rule' ).val(); if ( 'no' === this.accessPolicy ) { return false; } this.buildRelevance(); _.bindAll( this, 'switchComposer', 'dropButton', 'processScroll', 'updateRowsSorting', 'updateElementsSorting' ); vc.events.on( 'shortcodes:add', vcAddShortcodeDefaultParams, this ); vc.events.on( 'shortcodes:add', vc.atts.addShortcodeIdParam, this ); // update vc_grid_id on shortcode adding vc.events.on( 'shortcodes:add', this.addShortcode, this ); vc.events.on( 'shortcodes:destroy', this.checkEmpty, this ); Shortcodes.on( 'change:params', this.changeParamsEvents, this ); Shortcodes.on( 'reset', this.addAll, this ); this.render(); }, changeParamsEvents: function ( model ) { vc.events.triggerShortcodeEvents( 'update', model ); }, render: function () { var front = ''; // Find required elemnts of the view. this.$vcStatus = $( '#wpb_vc_js_status' ); this.$metablock_content = $( '.metabox-composer-content' ); this.$content = $( "#visual_composer_content" ); this.$post = $( '#postdivrich' ); this.$loading_block = $( '#vc_logo' ); if ( 'only' !== this.accessPolicy ) { if ( vc_frontend_enabled ) { front = '' + window.i18nLocale.main_button_title_frontend_editor + ''; } this.$buttonsContainer = $( '
' ).insertAfter( 'div#titlediv' ); this.$switchButton = this.$buttonsContainer.find( '.wpb_switch-to-composer' ); this.$switchButton.click( this.switchComposer ); } vc.add_element_block_view = new vc.AddElementUIPanelBackendEditor( { el: '#vc_ui-panel-add-element' } ); vc.edit_element_block_view = new vc.EditElementUIPanel( { el: '#vc_ui-panel-edit-element' } ); /** * @deprecated 4.4 * @type {vc.TemplatesEditorPanelViewBackendEditor} */ vc.templates_editor_view = new vc.TemplatesEditorPanelViewBackendEditor( { el: '#vc_templates-editor' } ); vc.templates_panel_view = new vc.TemplateWindowUIPanelBackendEditor( { el: '#vc_ui-panel-templates' } ); vc.post_settings_view = new vc.PostSettingsUIPanelBackendEditor( { el: '#vc_ui-panel-post-settings' } ); this.setSortable(); this.setDraggable(); vc.is_mobile = 0 < $( 'body.mobile' ).length; vc.saved_custom_css = $( '#wpb_custom_post_css_field' ).val(); vc.updateSettingsBadge(); /** * @since 4.5 */ _.defer( function () { vc.events.trigger( 'app.render' ); } ); return this; }, addAll: function () { this.views = {}; this.$content.removeClass( 'loading' ).empty(); this.addChild( false ); this.checkEmpty(); this.$loading_block.removeClass( 'vc_ajax-loading' ); this.$metablock_content.removeClass( 'vc_loading-shortcodes' ); }, addChild: function ( parent_id ) { _.each( vc.shortcodes.where( { parent_id: parent_id } ), function ( shortcode ) { this.appendShortcode( shortcode ); this.setSortable(); this.addChild( shortcode.get( 'id' ) ); }, this ); }, getView: function ( model ) { var view; if ( _.isObject( vc.map[ model.get( 'shortcode' ) ] ) && _.isString( vc.map[ model.get( 'shortcode' ) ].js_view ) && vc.map[ model.get( 'shortcode' ) ].js_view.length && ! _.isUndefined( window[ window.vc.map[ model.get( 'shortcode' ) ].js_view ] ) ) { view = new window[ window.vc.map[ model.get( 'shortcode' ) ].js_view ]( { model: model } ); } else { view = new ShortcodeView( { model: model } ); } model.set( { view: view } ); return view; }, setDraggable: function () { $( '#wpb-add-new-element, #wpb-add-new-row' ).draggable( { helper: function () { return $( '' ).appendTo( 'body' ); }, zIndex: 99999, // cursorAt: { left: 10, top : 20 }, cursor: "move", // appendTo: "body", revert: "invalid", start: function ( event, ui ) { $( "#drag_placeholder" ).addClass( "column_placeholder" ).html( window.i18nLocale.drag_drop_me_in_column ); } } ); this.$content.droppable( { greedy: true, accept: ".dropable_el,.dropable_row", hoverClass: "wpb_ui-state-active", drop: this.dropButton } ); }, dropButton: function ( event, ui ) { if ( ui.draggable.is( '#wpb-add-new-element' ) ) { this.addElement(); } else if ( ui.draggable.is( '#wpb-add-new-row' ) ) { this.createRow(); } }, appendShortcode: function ( model ) { var view, parentModelView, params; view = this.getView( model ); params = _.extend( vc.getDefaults( model.get( 'shortcode' ) ), model.get( 'params' ) ); model.set( 'params', params, { silent: true } ); parentModelView = false !== model.get( 'parent_id' ) ? this.views[ model.get( 'parent_id' ) ] : false; this.views[ model.id ] = view; if ( model.get( 'parent_id' ) ) { var parentView; parentView = this.views[ model.get( 'parent_id' ) ]; parentView.unsetEmpty(); } if ( parentModelView ) { parentModelView.addShortcode( view, 'append' ); } else { this.$content.append( view.render().el ); } view.ready(); view.changeShortcodeParams( model ); // Refactor view.checkIsEmpty(); this.setNotEmpty(); }, addShortcode: function ( model ) { var view, parentModelView, params; params = _.extend( vc.getDefaults( model.get( 'shortcode' ) ), model.get( 'params' ) ); model.set( 'params', params, { silent: true } ); view = this.getView( model ); parentModelView = false !== model.get( 'parent_id' ) ? this.views[ model.get( 'parent_id' ) ] : false; view.use_default_content = true !== model.get( 'cloned' ); this.views[ model.id ] = view; if ( parentModelView ) { parentModelView.addShortcode( view ); parentModelView.checkIsEmpty(); var self; self = this; _.defer( function () { view.changeShortcodeParams && view.changeShortcodeParams( model ); view.ready(); self.setSortable(); self.setNotEmpty(); } ); } else { this.addRow( view ); _.defer( function () { view.changeShortcodeParams && view.changeShortcodeParams( model ); } ); } }, addRow: function ( view ) { var before_shortcode; before_shortcode = _.last( vc.shortcodes.filter( function ( shortcode ) { return false === shortcode.get( 'parent_id' ) && parseFloat( shortcode.get( 'order' ) ) < parseFloat( this.get( 'order' ) ); }, view.model ) ); if ( before_shortcode ) { view.render().$el.insertAfter( '[data-model-id=' + before_shortcode.id + ']' ); } else { this.$content.append( view.render().el ); } }, addTextBlock: function ( e ) { var row, column, params; e.preventDefault(); row = Shortcodes.create( { shortcode: 'vc_row' } ); column = Shortcodes.create( { shortcode: 'vc_column', params: { width: '1/1' }, parent_id: row.id, root_id: row.id } ); params = vc.getDefaults( 'vc_column_text' ); if ( 'undefined' !== typeof(window.vc_settings_presets[ 'vc_column_text' ]) ) { params = _.extend( params, window.vc_settings_presets[ 'vc_column_text' ] ); } return Shortcodes.create( { shortcode: 'vc_column_text', parent_id: column.id, root_id: row.id, params: params } ); }, /** * Create row */ createRow: function () { var row = Shortcodes.create( { shortcode: 'vc_row' } ); Shortcodes.create( { shortcode: 'vc_column', params: { width: '1/1' }, parent_id: row.id, root_id: row.id } ); return row; }, /** * Add Element with a help of modal view. */ addElement: function ( e ) { _.isObject( e ) && e.preventDefault(); vc.add_element_block_view.render( false ); }, /** * @deprecated 4.4 use openTemplatesWindow * @param e */ openTemplatesEditor: function ( e ) { e && e.preventDefault(); vc.templates_editor_view.render().show(); }, openTemplatesWindow: function ( e ) { e && e.preventDefault(); if ( $( e.currentTarget ).is( '#vc_templates-more-layouts' ) ) { vc.templates_panel_view.once( 'show', function () { $( '[data-vc-ui-element-target="[data-tab=default_templates]"]' ).click(); } ); } vc.templates_panel_view.render().show(); }, loadDefaultTemplate: function ( e ) { e && e.preventDefault(); vc.templates_panel_view.loadTemplate( e ); }, editSettings: function ( e ) { e && e.preventDefault(); vc.post_settings_view.render().show(); }, sortingStarted: function ( event, ui ) { $( '#visual_composer_content' ).addClass( 'vc_sorting-started' ); }, sortingStopped: function ( event, ui ) { $( '#visual_composer_content' ).removeClass( 'vc_sorting-started' ); }, updateElementsSorting: function ( event, ui ) { _.defer( function ( app, event, ui ) { var $current_container = ui.item.parent().closest( '[data-model-id]' ), parent = $current_container.data( 'model' ), model = ui.item.data( 'model' ), models = app.views[ parent.id ].$content.find( '> [data-model-id]' ), i = 0; // Change parent if block moved to another container. if ( ! _.isNull( ui.sender ) ) { var old_parent_id = model.get( 'parent_id' ); store.lock(); model.save( { parent_id: parent.id } ); app.views[ old_parent_id ].checkIsEmpty(); app.views[ parent.id ].checkIsEmpty(); } models.each( function () { var shortcode = $( this ).data( 'model' ); store.lock(); shortcode.save( { 'order': i ++ } ); } ); model.save(); }, this, event, ui ); }, updateRowsSorting: function () { _.defer( function ( app ) { var $rows = app.$content.find( app.rowSortableSelector ); $rows.each( function () { var index = $( this ).index(); if ( $rows.length - 1 > index ) { store.lock(); } $( this ).data( 'model' ).save( { 'order': index } ); } ); }, this ); }, renderPlaceholder: function ( event, element ) { var tag = $( element ).data( 'element_type' ); var is_container = _.isObject( vc.map[ tag ] ) && ( ( _.isBoolean( vc.map[ tag ].is_container ) && true === vc.map[ tag ].is_container ) || ! _.isEmpty( vc.map[ tag ].as_parent ) ); var $helper = $( '\n
\u00c0 l\u2019\u00e8re num\u00e9rique actuelle, le monde du divertissement en ligne ne cesse d\u2019\u00e9voluer, offrant aux amateurs de sensations fortes une multitude d\u2019options passionnantes. Parmi les acteurs \u00e9mergents qui red\u00e9finissent l\u2019exp\u00e9rience de jeu, betify casino<\/strong> se distingue par son approche innovante et son engagement envers l\u2019excellence. Ce casino en ligne et plateforme de paris sportifs, op\u00e9r\u00e9e par Altacore N.V. et agr\u00e9\u00e9e \u00e0 Cura\u00e7ao, combine l’attrait des jeux de hasard traditionnels avec la commodit\u00e9 et la s\u00e9curit\u00e9 des cryptomonnaies. Des milliers de jeux sont \u00e0 votre disposition.<\/p>\n Avec un catalogue impressionnant de plus de 3100 jeux, allant des machines \u00e0 sous classiques \u00e0 la roulette et au blackjack en passant par les titres les plus r\u00e9cents et innovants, betify casino<\/a> r\u00e9pond aux go\u00fbts de tous les joueurs. L\u2019op\u00e9rateur propose \u00e9galement un VIP-club exclusif, des r\u00e9compenses hebdomadaires allant jusqu\u2019\u00e0 20 % de remise en argent, et une monnaie interne, les \u201cBytes\u201d, permettant aux joueurs de d\u00e9bloquer des bonus et des tours gratuits dans une boutique d\u00e9di\u00e9e. Ce qui rend ce casino unique est son adaptation aux nouvelles technologies, notamment l’acceptation des cryptomonnaies, offrant ainsi une exp\u00e9rience de jeu fluide, s\u00e9curis\u00e9e et anonyme.<\/p>\n La diversit\u00e9 des jeux propos\u00e9s par betify casino est l\u2019un de ses atouts majeurs. Que vous soyez un fan des machines \u00e0 sous \u00e0 th\u00e8me, un adepte du blackjack strat\u00e9gique, ou un passionn\u00e9 de roulette, vous trouverez certainement votre bonheur sur cette plateforme. Les jeux sont fournis par des d\u00e9veloppeurs de logiciels de renomm\u00e9e mondiale, garantissant une qualit\u00e9 graphique exceptionnelle, des m\u00e9canismes de jeu \u00e9quitables et une exp\u00e9rience immersive. L\u2019interface est intuitive et facile \u00e0 naviguer, permettant aux joueurs de trouver rapidement leurs jeux pr\u00e9f\u00e9r\u00e9s. En outre, betify casino propose r\u00e9guli\u00e8rement de nouveaux titres, permettant de maintenir l\u2019excitation et de proposer une exp\u00e9rience de jeu toujours renouvel\u00e9e.<\/p>\n betify casino r\u00e9compense fid\u00e8lement ses joueurs gr\u00e2ce \u00e0 un programme VIP exceptionnel. En accumulant des points en jouant, les membres peuvent gravir les diff\u00e9rents niveaux du programme, d\u00e9bloquant ainsi des avantages de plus en plus int\u00e9ressants. Ces avantages incluent des bonus de d\u00e9p\u00f4t exclusifs, des tours gratuits suppl\u00e9mentaires, un gestionnaire de compte personnel d\u00e9di\u00e9, des retraits plus rapides et des invitations \u00e0 des \u00e9v\u00e9nements sp\u00e9ciaux. Le programme VIP est con\u00e7u pour offrir une exp\u00e9rience de jeu sur mesure, adapt\u00e9e aux besoins et aux pr\u00e9f\u00e9rences de chaque joueur privil\u00e9gi\u00e9.<\/p>\n En plus du programme VIP, betify casino offre \u00e0 ses joueurs une remise en argent hebdomadaire sur leurs pertes. Cette remise peut atteindre 20 %, garantissant ainsi un filet de s\u00e9curit\u00e9 et une opportunit\u00e9 de r\u00e9cup\u00e9rer une partie de leurs mises. La remise en argent est automatiquement cr\u00e9dit\u00e9 sur le compte des joueurs chaque semaine, sans condition de mise restrictive. Il s’agit d’un avantage significatif qui distingue betify casino de la concurrence et renforce son engagement envers la satisfaction client. La transparence et la simplicit\u00e9 du syst\u00e8me de remise en argent sont particuli\u00e8rement appr\u00e9ci\u00e9es par les joueurs r\u00e9guliers.<\/p>\n betify casino introduit une monnaie interne unique, les \u201cBytes\u201d, qui offre aux joueurs une nouvelle fa\u00e7on de personnaliser leur exp\u00e9rience de jeu. Les Bytes peuvent \u00eatre gagn\u00e9s en jouant r\u00e9guli\u00e8rement sur la plateforme et peuvent \u00eatre utilis\u00e9s dans une boutique d\u00e9di\u00e9e pour acheter des bonus, des tours gratuits et d’autres r\u00e9compenses exclusives. Ce syst\u00e8me de fid\u00e9lit\u00e9 innovant encourage les joueurs \u00e0 rester actifs sur la plateforme et \u00e0 profiter pleinement de toutes les opportunit\u00e9s de divertissement offertes par betify casino. Les Bytes sont un moyen flexible et amusant de maximiser vos gains et de prolonger votre exp\u00e9rience de jeu.<\/p>\n betify casino s\u2019adapte aux pr\u00e9f\u00e9rences de tous les joueurs en proposant une large gamme d\u2019options de paiement, incluant \u00e0 la fois les cryptomonnaies et les monnaies fiat traditionnelles. Les joueurs peuvent effectuer des d\u00e9p\u00f4ts et des retraits en utilisant des cryptomonnaies populaires telles que le Bitcoin, l\u2019Ethereum, le Litecoin et le Ripple, ainsi qu\u2019en utilisant des cartes de cr\u00e9dit\/d\u00e9bit, des portefeuilles \u00e9lectroniques et des virements bancaires. Le traitement des transactions est rapide et s\u00e9curis\u00e9, garantissant ainsi une exp\u00e9rience de jeu fluide et sans souci. L\u2019utilisation de la technologie blockchain pour les transactions en cryptomonnaies offre une couche de s\u00e9curit\u00e9 suppl\u00e9mentaire et garantit l\u2019anonymat des joueurs.<\/p>\n betify casino accorde une importance primordiale \u00e0 la s\u00e9curit\u00e9 des donn\u00e9es personnelles et financi\u00e8res de ses joueurs. La plateforme utilise des protocoles de chiffrement avanc\u00e9s pour prot\u00e9ger toutes les transactions et informations sensibles. L\u2019op\u00e9rateur est agr\u00e9\u00e9 par le gouvernement de Cura\u00e7ao, ce qui t\u00e9moigne de son engagement envers des pratiques de jeu \u00e9quitables et transparentes. La licence garantit que betify casino est soumis \u00e0 des contr\u00f4les r\u00e9guliers et qu\u2019il respecte les normes strictes en mati\u00e8re de protection des joueurs et de pr\u00e9vention du blanchiment d\u2019argent. De plus, le site propose des outils d’auto-exclusion et de limitation des d\u00e9p\u00f4ts pour aider les joueurs \u00e0 g\u00e9rer leur budget et \u00e0 jouer de mani\u00e8re responsable.<\/p>\n L\u00c9vasion Ludique Ultime : betify casino, lalliance parfaite entre jeux de hasard innovants, paris sportifs passionnants et avantages VIP exceptionnels, boost\u00e9e par la technologie crypto ? Une S\u00e9lection de Jeux \u00c9poustouflante Le Programme VIP et les Avantages Exclusifs Le Syst\u00e8me de Remise en Argent (Cashback) L’Utilisation Innovante des Bytes Les Options de Paiement : Crypto […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77],"tags":[],"class_list":["post-226854","post","type-post","status-publish","format-standard","hentry","category-post"],"_links":{"self":[{"href":"https:\/\/huurzoek.com\/index.php?rest_route=\/wp\/v2\/posts\/226854","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/huurzoek.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/huurzoek.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/huurzoek.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/huurzoek.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=226854"}],"version-history":[{"count":1,"href":"https:\/\/huurzoek.com\/index.php?rest_route=\/wp\/v2\/posts\/226854\/revisions"}],"predecessor-version":[{"id":226855,"href":"https:\/\/huurzoek.com\/index.php?rest_route=\/wp\/v2\/posts\/226854\/revisions\/226855"}],"wp:attachment":[{"href":"https:\/\/huurzoek.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=226854"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/huurzoek.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=226854"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/huurzoek.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=226854"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}Une S\u00e9lection de Jeux \u00c9poustouflante<\/h2>\n
\n
Type de JeuFournisseurs NotablesCaract\u00e9ristiques Cl\u00e9s<\/tr>\n \n Machines \u00e0 Sous<\/td>\n NetEnt, Microgaming, Play’n GO<\/td>\n Th\u00e8mes vari\u00e9s, jackpots progressifs, fonctionnalit\u00e9s bonus<\/td>\n<\/tr>\n \n Jeux de Table<\/td>\n Evolution Gaming, Pragmatic Play<\/td>\n Blackjack, roulette, baccarat, poker<\/td>\n<\/tr>\n \n Jeux en Direct<\/td>\n Evolution Gaming, NetEnt Live<\/td>\n Casino en direct avec croupiers r\u00e9els, interactions sociales<\/td>\n<\/tr>\n \n Autres Jeux<\/td>\n Betsoft, Red Tiger Gaming<\/td>\n Jeux de grattage, keno, jeux de cartes<\/td>\n<\/tr>\n<\/table>\n Le Programme VIP et les Avantages Exclusifs<\/h2>\n
\n
Le Syst\u00e8me de Remise en Argent (Cashback)<\/h3>\n
L’Utilisation Innovante des Bytes<\/h3>\n
Les Options de Paiement : Crypto et Monnaies Fiat<\/h2>\n
\n
\n
M\u00e9thode de PaiementDevises Accept\u00e9esD\u00e9lai de Traitement<\/tr>\n \n Bitcoin<\/td>\n BTC<\/td>\n Instantan\u00e9<\/td>\n<\/tr>\n \n Ethereum<\/td>\n ETH<\/td>\n Instantan\u00e9<\/td>\n<\/tr>\n \n Carte de Cr\u00e9dit\/D\u00e9bit<\/td>\n EUR, USD, CAD<\/td>\n 1-3 jours ouvrables<\/td>\n<\/tr>\n \n Portefeuille \u00c9lectronique<\/td>\n EUR, USD, CAD<\/td>\n 24-48 heures<\/td>\n<\/tr>\n<\/table>\n S\u00e9curit\u00e9 et Licence : Un Engagement envers la Transparence<\/h2>\n
\n
Aspect de la S\u00e9curit\u00e9Mesures PrisesB\u00e9n\u00e9fices pour les Joueurs<\/tr>\n \n Chiffrement des Donn\u00e9es<\/td>\n SSL\/TLS<\/td>\n Protection des informations personnelles et financi\u00e8res<\/td>\n<\/tr>\n \n Licence de Jeu<\/td>\n Gouvernement de Cura\u00e7ao<\/td>\n Garantie de pratiques \u00e9quitables et transparentes<\/td>\n<\/tr>\n \n Politique de Jeu Responsable<\/td>\n Outils d’auto-exclusion et de limitation des d\u00e9p\u00f4ts<\/td>\n Contr\u00f4le du budget et pr\u00e9vention des probl\u00e8mes de jeu<\/td>\n<\/tr>\n \n Audit de S\u00e9curit\u00e9<\/td>\n Organismes ind\u00e9pendants<\/td>\n Validation de la s\u00e9curit\u00e9 et de l\u2019int\u00e9grit\u00e9 du site<\/td>\n<\/tr>\n<\/table>\n","protected":false},"excerpt":{"rendered":"