/* ========================================================= * 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 = $( '
' + window.i18nLocale.main_button_title_backend_editor + '' + front + '
' ).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 = $( '
' + vc.map[ tag ].name + '
' ).prependTo( 'body' ); return $helper; }, rowSortableSelector: "> .wpb_vc_row", setSortable: function () { // 1st level sorting (rows). work also in wp41. $( '.wpb_main_sortable' ).sortable( { forcePlaceholderSize: true, placeholder: "widgets-placeholder", cursor: "move", items: this.rowSortableSelector, // wpb_sortablee handle: '.column_move', distance: 0.5, start: this.sortingStarted, stop: this.sortingStopped, update: this.updateRowsSorting, over: function ( event, ui ) { ui.placeholder.css( { maxWidth: ui.placeholder.parent().width() } ); } } ); // 2st level sorting (elements). $( '.wpb_column_container' ).sortable( { forcePlaceholderSize: true, forceHelperSize: false, connectWith: ".wpb_column_container", placeholder: "vc_placeholder", items: "> div.wpb_sortable", //wpb_sortablee helper: this.renderPlaceholder, distance: 3, scroll: true, scrollSensitivity: 70, cursor: 'move', cursorAt: { top: 20, left: 16 }, tolerance: 'intersect', // this helps with dragging textblock into tabs start: function () { $( '#visual_composer_content' ).addClass( 'vc_sorting-started' ); $( '.vc_not_inner_content' ).addClass( 'dragging_in' ); }, stop: function ( event, ui ) { $( '#visual_composer_content' ).removeClass( 'vc_sorting-started' ); $( '.dragging_in' ).removeClass( 'dragging_in' ); var tag = ui.item.data( 'element_type' ), parent_tag = ui.item.parent().closest( '[data-element_type]' ).data( 'element_type' ), allowed_container_element = ! _.isUndefined( vc.map[ parent_tag ].allowed_container_element ) ? vc.map[ parent_tag ].allowed_container_element : true; if ( ! vc.check_relevance( parent_tag, tag ) ) { $( this ).sortable( 'cancel' ); } 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 ) ); if ( is_container && ! (true === allowed_container_element || allowed_container_element === ui.item.data( 'element_type' ).replace( /_inner$/, '' )) ) { $( this ).sortable( 'cancel' ); } $( '.vc_sorting-empty-container' ).removeClass( 'vc_sorting-empty-container' ); }, update: this.updateElementsSorting, over: function ( event, ui ) { var tag = ui.item.data( 'element_type' ), parent_tag = ui.placeholder.closest( '[data-element_type]' ).data( 'element_type' ), allowed_container_element = ! _.isUndefined( vc.map[ parent_tag ].allowed_container_element ) ? vc.map[ parent_tag ].allowed_container_element : true; if ( ! vc.check_relevance( parent_tag, tag ) ) { ui.placeholder.addClass( 'vc_hidden-placeholder' ); return false; } 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 ) ); if ( is_container && ! (true === allowed_container_element || allowed_container_element === ui.item.data( 'element_type' ).replace( /_inner$/, '' )) ) { ui.placeholder.addClass( 'vc_hidden-placeholder' ); return false; } if ( ! _.isNull( ui.sender ) && ui.sender.length && ! ui.sender.find( '[data-element_type]:visible' ).length ) { ui.sender.addClass( 'vc_sorting-empty-container' ); } ui.placeholder.removeClass( 'vc_hidden-placeholder' ); ui.placeholder.css( { maxWidth: ui.placeholder.parent().width() } ); } } ); return this; }, setNotEmpty: function () { $( '#vc_no-content-helper' ).addClass( 'vc_not-empty' ); }, setIsEmpty: function () { $( '#vc_no-content-helper' ).removeClass( 'vc_not-empty' ) }, checkEmpty: function ( model ) { if ( _.isObject( model ) && false !== model.get( 'parent_id' ) && model.get( 'parent_id' ) != model.id ) { var parent_view = this.views[ model.get( 'parent_id' ) ]; parent_view.checkIsEmpty(); } if ( 0 === Shortcodes.length ) { this.setIsEmpty(); } else { this.setNotEmpty(); } }, switchComposer: function ( e ) { if ( _.isObject( e ) ) { e.preventDefault(); } if ( 'shown' === this.status ) { if ( 'only' !== this.accessPolicy ) { ! _.isUndefined( this.$switchButton ) && this.$switchButton.text( window.i18nLocale.main_button_title_backend_editor ); ! _.isUndefined( this.$buttonsContainer ) && this.$buttonsContainer.removeClass( 'vc_backend-status' ); } this.close(); this.status = 'closed'; } else { if ( 'only' !== this.accessPolicy ) { ! _.isUndefined( this.$switchButton ) && this.$switchButton.text( window.i18nLocale.main_button_title_revert ); ! _.isUndefined( this.$buttonsContainer ) && this.$buttonsContainer.addClass( 'vc_backend-status' ); } this.show(); this.status = 'shown'; } }, show: function () { this.$el.show(); this.$post.hide(); this.$vcStatus.val( "true" ); this.navOnScroll(); if ( vc.storage.isContentChanged() ) { vc.app.setLoading(); vc.app.views = {}; // @todo 4.5 why setTimeout not defer? window.setTimeout( function () { Shortcodes.fetch( { reset: true } ); vc.events.trigger( 'backendEditor.show' ); }, 100 ); } }, setLoading: function () { this.setNotEmpty(); this.$loading_block.addClass( 'vc_ajax-loading' ); this.$metablock_content.addClass( 'vc_loading-shortcodes' ); }, close: function () { this.$vcStatus.val( "false" ); this.$el.hide(); if ( _.isObject( window.editorExpand ) ) { _.defer( function () { window.editorExpand.on(); window.editorExpand.on(); // double call fixes "space" in height } ); } this.$post.show(); _.defer( function () { vc.events.trigger( 'backendEditor.close' ); } ); }, checkVcStatus: function () { if ( 'only' === this.accessPolicy || 'true' === this.$vcStatus.val() ) { this.switchComposer(); } }, setNavTop: function () { this.navTop = this.$nav.length && this.$nav.offset().top - 28; }, save: function () { $( '#wpb-save-post' ).text( window.i18nLocale.loading ); $( '#publish' ).click(); }, preview: function () { $( '#post-preview' ).click(); }, navOnScroll: function () { var $win = $( window ); this.$nav = $( '#vc_navbar' ); this.setNavTop(); this.processScroll(); $win.unbind( 'scroll.composer' ).on( 'scroll.composer', this.processScroll ); }, processScroll: function ( e ) { if ( true === this.disableFixedNav ) { this.$nav.removeClass( 'vc_subnav-fixed' ); return; } if ( ! this.navTop || 0 > this.navTop ) { this.setNavTop(); } this.scrollTop = $( window ).scrollTop() + 80; if ( 0 < this.navTop && this.scrollTop >= this.navTop && ! this.isFixed ) { this.isFixed = 1; this.$nav.addClass( 'vc_subnav-fixed' ); } else if ( this.scrollTop <= this.navTop && this.isFixed ) { this.isFixed = 0; this.$nav.removeClass( 'vc_subnav-fixed' ); } }, buildRelevance: function () { vc.shortcode_relevance = {}; _.map( vc.map, function ( object ) { if ( _.isObject( object.as_parent ) && _.isString( object.as_parent.only ) ) { vc.shortcode_relevance[ 'parent_only_' + object.base ] = object.as_parent.only.replace( /\s/, '' ).split( ',' ); } if ( _.isObject( object.as_parent ) && _.isString( object.as_parent.except ) ) { vc.shortcode_relevance[ 'parent_except_' + object.base ] = object.as_parent.except.replace( /\s/, '' ).split( ',' ); } if ( _.isObject( object.as_child ) && _.isString( object.as_child.only ) ) { vc.shortcode_relevance[ 'child_only_' + object.base ] = object.as_child.only.replace( /\s/, '' ).split( ',' ); } if ( _.isObject( object.as_child ) && _.isString( object.as_child.except ) ) { vc.shortcode_relevance[ 'child_except_' + object.base ] = object.as_child.except.replace( /\s/, '' ).split( ',' ); } } ); /** * Check parent/children relationship between two tags * @param tag * @param related_tag * @return boolean - Returns true if relevance is positive */ vc.check_relevance = function ( tag, related_tag ) { if ( _.isArray( vc.shortcode_relevance[ 'parent_only_' + tag ] ) && ! _.contains( vc.shortcode_relevance[ 'parent_only_' + tag ], related_tag ) ) { return false; } if ( _.isArray( vc.shortcode_relevance[ 'parent_except_' + tag ] ) && _.contains( vc.shortcode_relevance[ 'parent_except_' + tag ], related_tag ) ) { return false; } if ( _.isArray( vc.shortcode_relevance[ 'child_only_' + related_tag ] ) && ! _.contains( vc.shortcode_relevance[ 'child_only_' + related_tag ], tag ) ) { return false; } if ( _.isArray( vc.shortcode_relevance[ 'child_except_' + related_tag ] ) && _.contains( vc.shortcode_relevance[ 'child_except' + related_tag ], tag ) ) { return false; } return true; }; } } ); $( function () { if ( $( '#wpb_visual_composer' ).is( 'div' ) ) { var app = vc.app = new VisualComposer(); 'no' !== app.accessPolicy && vc.app.checkVcStatus(); } } ); /** * Called when initial content rendered or when content changed in tinymce */ Shortcodes.on( 'sync', function ( collection ) { if ( _.isObject( collection ) && ! _.isEmpty( collection.models ) ) { _.each( collection.models, function ( model ) { vc.events.triggerShortcodeEvents( 'sync', model ); } ); } } ); /** * Called when shortcode created */ Shortcodes.on( 'add', function ( model ) { if ( _.isObject( model ) ) { vc.events.triggerShortcodeEvents( 'add', model ); } } ); })( window.jQuery ); Uncategorized – Page 736 – Huuzoek

Category: Uncategorized

  • Competir Sizzling ranura black horse Hot Deluxe Tragamonedas referente a Línea Sin cargo

    Nunca intentes recobrar lo tirado más una ganancia máxima de inclusive x10. Sizzling Hot Deluxe serí­a el aprovisionador de casino en el caso de que nos lo olvidemos el lugar preciso. No obstante existe slots sobre bingo online de participar dentro del casino en internet, no obstante la ruleta online en el caso de que nos lo olvidemos plataformas de casino. (more…)

  • Nuts North Position Opinion Gamble 100 porsyentong libreng Pagsubok 2025

    Ang partikular na aspetong ito ay nagbibigay sa iyo ng humigit-kumulang tatlong 100 porsiyentong libreng revolve, kung saan ang dalawang reel ay aktwal na nababago sa mga load wild sa buong bagong twist. Ang video game ay may ilang partikular na uri ng wildlife na maaaring katutubong sa bagong lugar, kasama ng mga lobo, dala, kuwago, o iba pang alagang hayop na available sa Northern. (more…)

  • ดีกว่าฟรีสปินโบนัสที่ไม่มีของฝากเพื่อให้ได้รับเงินรางวัลจริง 2025 รายการ

    สัดส่วนที่ห่างไกลจากผู้เชี่ยวชาญด้านวิดีโอเกมคาสิโนออนไลน์ไม่ได้เป็นลูกกลิ้งที่สูงขึ้นและสร้างสถานที่ขนาดใหญ่เพื่อลองพอร์ตขนาดใหญ่ เราทุกคนเลือกขีด จำกัด ที่ต่ำกว่าทำให้สะดวกในการค้นหาเว็บไซต์อินเทอร์เน็ตที่ช่วยให้คุณสามารถเล่นพอร์ตการพนันเกมโต๊ะอาหารหรือรายการโปรดขององค์กรการพนันอื่น ๆ ตรวจสอบเว็บไซต์ เมื่อเทียบกับตั๋วเงินจำนวนมากเกินไป หากไม่มีสถานที่ที่คาดว่าผู้เล่นจะไม่มีอะไรจะกำจัดเพราะการระบุโบนัสประเภทนี้ทำให้พวกเขาเป็นตัวเลือกที่น่าสนใจสำหรับกันและกันใหม่เอี่ยมและคุณอาจมีความรู้ ความสามารถในการเล่นเกมฟรีโดยสิ้นเชิงและคุณอาจได้รับเงินสดจริงเป็นสินทรัพย์ที่ได้เปรียบที่สำคัญของการหมุนฟรี 100 เปอร์เซ็นต์ไม่มีสิ่งจูงใจเงินฝาก โดยทำตามเคล็ดลับเหล่านี้ผู้คนสามารถเพิ่มโอกาสในการถอนผลกำไรออกจากการหมุนฟรีโบนัสที่ไม่ได้รับ

    เงินสดขนาดใหญ่ควบคุมสล็อตหมายเหตุ

    หากคุณเป็นพวกเขาได้รับความยากลำบากให้ติดต่อกับสายด่วนที่ยอดเยี่ยมในประเทศเพื่อรับความช่วยเหลือทันที โปรดทราบว่าคุณไปที่ slotsspot.com ไม่ทำงานหนึ่งบริการเกม เป็นการตัดสินใจของคุณที่จะทำให้แน่ใจว่าการพนันในบรรทัดลองใช้ห้องพิจารณาคดีในพื้นที่ของคุณและเพื่อให้ตระหนักถึงกฎระเบียบในท้องถิ่นของคุณ slotsspot.com สามารถเป็น Wade-to Support ของคุณเพื่อเป็นเจ้าของสิ่งที่คุณเล่นการพนันออนไลน์ จากคำแนะนำเชิงลึกภายในและคุณจะมีเทคนิคสำหรับรายงานใหม่ล่าสุดเราอยู่ที่นี่เพื่อค้นหาแพลตฟอร์มที่ดีมากและสร้างพฤติกรรมที่มีข้อมูลทุกขั้นตอนของวิธีการ มันบ่งบอกว่าจะปลดปล่อยโครงการบนสมาร์ทโฟนของคุณมิฉะนั้นยาเม็ดโดยไม่มีปัญหาเพียงแค่เริ่มเกมออนไลน์ภายในอินเทอร์เน็ตเบราว์เซอร์

    ให้และคุณจะได้รับแรงจูงใจ

    ซึ่งหมายความว่าคุณสามารถวางน้อยที่สุดเพื่อให้มีคุณสมบัติสำหรับตัวเลือกพิเศษมากขึ้น แน่นอนว่าเป็นการดีที่จะอ่านงานพิมพ์เล็ก ๆ ของโบนัสใหม่ทุกครั้งเพื่อให้แน่ใจว่าคุณเข้าใจข้อมูลทั้งหมด ลองใช้สังคมและคุณอาจกวาดคาสิโนที่คุณสามารถเดิมพันได้ฟรี 100 เปอร์เซ็นต์และคุณจะได้รับเกียรติ – การรวมกลุ่มเหรียญที่มีค่าต่ำถึง $ ขั้นตอนที่หนึ่ง มันเป็นภัยคุกคามที่ยิ่งใหญ่อย่างมากในการส่งคืนเงินคืนทันทีหลังจากลองใช้เวลานาน มีทางเลือกจำนวนมากการดำเนินการใหม่ล่าสุดของคณะกรรมาธิการคือหกสิบและมันสามารถถูกยกขึ้นเพื่อช่วยคุณ 300 ในความรักเงิน Super Air Controls ของเกมที่สร้างขึ้นด้วยพลังของธุรกิจเทคโนโลยีที่น่าทึ่ง

    ข้อดีคือสัญลักษณ์เงินที่เป็นมิตรกับสิ่งแวดล้อมสัญลักษณ์สกุลเงินสีม่วงสัญลักษณ์สกุลเงินสีน้ำเงินสัญลักษณ์เงินเงินเกมโบนัสซูเปอร์ล้อสปินฟรี 100 เปอร์เซ็นต์เพิ่มโบนัสซุปเปอร์หุ้นและซื้อ

    • คุณจะเห็นว่าจินตนาการมีฟังก์ชั่นโดยไม่จำเป็นต้องออกจากเว็บไซต์นี้
    • โฆษณาดังกล่าวทำให้มืออาชีพได้รับเงินจริงแทนที่จะเป็นเงินฝากครั้งแรกอย่างกระตือรือร้นและทำให้พอร์ต LV เป็นหนึ่งในคนรักคาสิโนออนไลน์มากมาย
    • ที่นี่เราสร้างคาสิโนที่ดีกว่าจำนวนหนึ่งบนอินเทอร์เน็ตโดยมีสปินฟรีไม่มีโบนัสเงินฝากภายในปี 2025 สำหรับแต่ละคนมีคุณสมบัติที่เป็นเอกลักษณ์และคุณสามารถได้เปรียบ
    • วงล้อใหม่เช่นชั้นวางที่เป็นมิตรกับสิ่งแวดล้อมวางอยู่กลางจอแสดงผลใหม่เอี่ยมเริ่มต้นด้วย 2 แถวสำหรับส่วนที่เหลือและคุณสามารถเติบโตเพื่อช่วยคุณ 6 แถวไปทางขวา
    • ดังนั้นวิธีการที่มุ่งเน้นไม่เพียง แต่อำนวยความสะดวกให้ผู้เข้าร่วมค้นหารายการโปรดใหม่ แต่ตอนนี้เสนอองค์กรการพนันใหม่เอี่ยมที่มีวิธีการที่จะทำให้เกมปัจจุบัน
    • ในขณะที่เล่นเกมคุณสามารถปลอดภัยยิ่งขึ้นได้ทวีคูณทันทีไปจนถึง 25 นาทีชัยชนะของพวกเขา

    คา สิ โน ออนไลน์ ได้ เงิน จริง gclub

    แพ็คเกจมันทำให้คุณทดสอบเกมออนไลน์อื่น ๆ เริ่มต้นได้ดีด้วยการเข้ารหัสลับครั้งแรก ใส่เกมกระดานอันดับต้น ๆ ในโลกของคุณการควบคุมวิดีโอเกมตำแหน่งสิ่งจูงใจอย่างมากได้เปิดตัวภายในปี 2025 จาก Game Builders Light & Wonder นำเสนอสัญลักษณ์และรูปภาพที่เป็นที่รู้จักในเกมการผูกขาดใหม่ที่ยอดเยี่ยมควบคุมโบนัสสล็อตคนรักการตรวจสอบที่เป็นที่รู้จักซึ่งมีการเล่นเกมที่น่าสนใจและคุณอาจสร้างแรงจูงใจ

    นอกเหนือจากสัญลักษณ์สกุลเงินสัญญาณล้อมากสัญลักษณ์บิดฟรีและคุณสามารถช่องว่างได้ยังสามารถอยู่บ้านได้ Cash Super Wheel ขนาดใหญ่ตั้งอยู่ในห้องนอนที่เต็มไปด้วยเงินสดจำนวนมากกระจายออกไปบนพื้นแสดงความรู้สึกจากเงินและความตื่นเต้น ในส่วนของห้องมียางสองสามตัวบิดอาจใช้ในการพิมพ์หนี้สกุลเงินทำให้ธีมใหม่ล่าสุดอยู่ห่างจากความอุดมสมบูรณ์ วงล้อใหม่เอี่ยมที่คล้ายกับตู้ที่เป็นมิตรกับสิ่งแวดล้อมวางอยู่ตรงกลางของจอแสดงผลใหม่ล่าสุดเริ่มต้นด้วย 2 แถวที่คุณเก็บไว้และคุณสามารถเติบโตได้ถึงหกแถวทางด้านขวา เกี่ยวกับวงล้อใหม่ส่วนหนึ่งของวงล้อที่มองเห็นได้อย่างมากโดยบอกเป็นนัยถึงศักยภาพในการได้รับผลกำไรขนาดใหญ่

    Blitz Super Controls Demo ตำแหน่ง

    ในขณะที่ผู้เข้าร่วมสามารถชนะเงินจริงได้เนื่องจากการหมุนรอบฟรีเหล่านี้ปรับปรุงประสบการณ์การเล่นเกมทั้งหมด เกมประเภทนี้ไม่เพียง แต่ให้ความบันเทิงสูงและยังมอบความเป็นไปได้ให้กับมืออาชีพเพื่อความเป็นไปได้ที่จะได้รับรายได้ที่แท้จริงโดยไม่ต้องระดมทุนครั้งที่ 1 ด้วยการมุ่งเน้นไปที่สล็อตที่ยิ่งใหญ่ที่สุดผู้เล่นยังเพิ่มความรู้สึกเล่นเกมให้ได้มากที่สุดและได้รับประโยชน์อย่างเต็มที่จากโบนัสที่ไม่มีการหมุนฟรีที่มีอยู่ในปี 2568 โดยไม่คำนึงถึงสิ่งนี้ประสบการณ์รอบด้านใน Bovada ยังคงเป็นบวกเพราะเกมประเภทและโบนัสที่น่าดึงดูด สปินฟรีของการพนันการพนันของ Enterprise ติดอยู่เนื่องจากพวกเขายังไม่มีเกณฑ์การเดิมพันที่ชัดเจนทำให้การใช้สปินง่ายขึ้นและคุณจะทำให้เกิดความตื่นเต้นออกจากรายได้ คาสิโนจุดระเบิดโดยเฉพาะนี้นอกเหนือจากคาสิโนบนเว็บอื่น ๆ จำนวนมากและคุณสามารถทำให้เป็นตัวเลือกชั้นนำสำหรับผู้เล่นที่มองหาตรงไปตรงมาและคุณสามารถให้รางวัลทางการเงินโดยไม่มีโบนัสเงินฝาก

    ภายในคำพูดของเราสำหรับทุกหน้าเว็บเราได้รับการคัดเลือกจากสิ่งที่ดีที่สุดที่เสนอและวางเขาหรือเธอกับเธอลงไปด้านล่าง เกม Super Cresher ใหม่ล่าสุดควบคุมเกมสล็อตคาสิโนช่วยให้คุณมี RTP ที่กระตือรือร้นจาก 96% และมีระดับปานกลางที่จะช่วยให้คุณมีความผันผวนสูงสุด สิ่งจูงใจที่เป็นเอกลักษณ์และความคล้ายคลึงกันในหมู่พวกเขารวมถึงการผูกขาดพื้นฐานของการพนันให้ตำแหน่งนี้โดดเด่นจากคนอื่น ๆ ในอุตสาหกรรม White & คำถามทำเกมที่ผ่านมาหลายเกมซึ่งมีธีมการปกครอง การเดินทางในอุตสาหกรรมการเดินทางผูกขาดซึ่งผู้เล่นสามารถตกอยู่ใน Cape Area, New York และคุณอาจCancún Money Money เป็นเกมที่ใช้เงินมากขึ้นนำเสนอเด็กชายผูกขาดใหม่ล่าสุดใน A Black Fit

  • Regal Ports: Enjoy Totally free or Real pokie strategies money Royal Slots On the internet

    The trail to help you to experience roulette on the internet is easier than simply it appears, requiring nothing more than an instrument, an association, and you will a dashboard from daring. An established on-line casino is your launchpad, form the brand new stage for a secure and you can fair playing sense you to definitely may lead to financially rewarding gains. (more…)

  • Slot Hype Casino Utvärderin 7000 500 insättningsbonusplatser Omsättningsfria Free Spins

    Här kommer de fördelar ni äge tillsamman valet av nya casinon ino Sverige. Nya nätcasinon erbjuder ino allmänhet mängder från slots och kan i flera fall ha fjärran mer ännu tusen slotspel på sin hemsid. Det åstadkomme alltsammans fängslande samt spartanskt före lirare att utse sin prestation och börja flinkt. Vidare förklarar genom skillnaderna emellan storvinst, jackpott sam fortskridande jackpott. (more…)

  • Freespins Inte med Omsättningskrav Hos mobilcasino fyll på med sms Svenska Casinon 2022 องค์การบริหารส่วนตำบลโต๊ะเด็ง

    Populärmusi Casino befinner sig det nyaste Swish casinot sam det uppskattade nätcasinot lanserades 2024 genom koncernen Roi Roger Limited. Utöver att det befinner sig en Swish casino befinner si kundtjänsten något såso levererar det därborta lilla tilläg tillsamman extremt briljant bemötande. Dessutom inneha karl ett attraherande välkomstbonus samt kräver att lirare tvungen vara i alla fal 21 år därför att utpröva hos Populärmusi Casino. (more…)

  • Casinopop Casino: Yeni Başlayanlar için Adım Adım Rehber

    Casinopop Casino, oyunculara geniş bir oyun yelpazesi sunarak, hem yeni başlayanlar hem de deneyimli oyuncular için cazip hale geliyor. Bu makalede, casinopop casino‘nun sunduğu olanakları, stratejilerini ve kayıt sürecini detaylı bir şekilde inceleyeceğiz.

    Casinopop Casino Nedir?

    Casinopop Casino, çevrimiçi kumarhane platformları arasında dikkat çeken bir site olarak öne çıkıyor. Geniş oyun seçenekleri, canlı bahisler ve kullanıcı dostu arayüz, siteyi tercih eden oyuncuların sayısını artırıyor. Bunun yanı sıra, çeşitli bonus ve promosyonlar da cazip bir avantaj sağlıyor. Casinopop, Kullanıcılarına yüksek kaliteli grafiklerle donatılmış oyunlar sunarak eğlenceyi maksimum seviyeye çıkarıyor.

    Kayıt Süreci ve İlk Adımlar

    Siteye erişim sağladıktan sonra, kullanıcıların ilk yapması gereken casinopop casino kayıt işlemini tamamlamaktır. Kayıt işlemi oldukça basit ve hızlı bir şekilde gerçekleştirilmektedir:

    • Siteye giriş yapın.
    • Kayıt butonuna tıklayın.
    • İstenilen bilgileri doğru bir şekilde doldurun.
    • Hesabınızı onaylamak için e-posta adresinize gelen bağlantıyı tıklayın.
    • Hesabınıza para yatırıp oyun oynamaya başlayabilirsiniz.

    Oyun Seçenekleri ve Stratejiler

    Casinopop Casino’da birçok farklı oyun türü bulunmaktadır. Slot makineleri, masa oyunları, canlı casino oyunları ve daha fazlasını bulabilirsiniz. Birkaç popüler oyun türü şunlardır:

    • Slot Oyunları
    • Poker
    • Roulette
    • Baccarat
    • Keno

    Oyunlardan en iyi şekilde yararlanmak için stratejilerinizi geliştirmeniz gerekiyor. İşte bazı etkili stratejiler:

    • Bütçenizi belirleyin ve ona sadık kalın.
    • Oyunları deneme sürümü ile deneyin.
    • Promosyon ve bonusları takip edin.
    • Tekrar oynama mantığını kullanın.
    • Oyun kurallarını iyice öğrenin.

    Bonuslar ve Promosyonlar

    Casinopop Casino, yeni ve mevcut üyelerine pek çok bonus sunmaktadır. Öne çıkan bonuslar arasında hoş geldin bonusu ve kaybetme bonusları yer almakta. Bonus kullanarak oyun deneyiminizi artırabilir ve kazanma şansınızı yükseltebilirsiniz.

    Casinopop’ta Güvenlik ve Destek

    Online oyun deneyiminin güvenilir olması son derece önemlidir. Casinopop, oyuncuların bilgilerinin güvenliğini sağlamak için gelişmiş şifreleme yöntemleri kullanmaktadır. Ayrıca, müşteri desteği her zaman aktif durumda olup oyunculara hızlı çözümler sunmaktadır.

    Sonuç

    Casinopop Casino, hem yeni başlayanlar hem de deneyimli oyuncular için her anı değerlendirerek eğlenceli bir platform sunmaktadır. Kullanıcı dostu arayüzü, geniş oyun seçenekleri ve cazip bonuslar ile dikkat çeken bu platformu denemekten çekinmeyin.

    Oyun Türü Özellikler Kazanç Oranı Deneme Seçeneği
    Slot Oyunları Farklı temalar %95 Evet
    Poker Çoklu oyuncu %97 Hayır
    Roulette Canlı yayın %96 Evet
    Baccarat Hızlı oyun %95 Evet

    Sonuç olarak, casinopop casino, çevrimiçi kumar dünyasına adım atmak isteyenler için harika bir başlangıçtır. Unutmayın, kazançlarınızı artırmak ve eğlencenizi maksimum düzeye çıkarmak için stratejilerinizi iyi belirleyin. Başarılar!

  • Trace of one’s Panther IGT Position PreviewFree & Actual Gamble On the internet Book

    If you may have an android os mrbetlogin.com you can try this out otherwise ios equipment, it slot online game would be ready to go, irrespective of where you are. Insane symbols appear in this game, replacing for everyone other symbols, but the newest Spread signs, to accomplish profitable combinations. (more…)

  • Lucky 8 Line, Hierbei Casino Sunmaker Bonuscodes 2024 kostenlos spielen, Echtgeld-Verweis

    Sofern Eltern diese Glätten händisch die reißleine ziehen möchten, klicken Sie reibungslos wieder auf unser SPIN- Casino Sunmaker Bonuscodes 2024 Knopf. Wenn Diese unser alten Frucht-Slots bevorzugen, ist Lucky 8 Line Slot schon je Sie – großziehen Die leser einander & erwirken Diese unser Gewinne. (more…)

  • Unter einsatz von ein Registrierung inside irgendeiner durch uns getesteten Online Spielhalle man sagt, sie seien Gamer auf der sicheren S.. Untergeordnet sofern diese Free Spins abzüglich Multiplikatoren daherkommen, aufbessern sie die Gewinnchancen wegen der Auswahl eines zufälligen Symbols doch. Wenn Kostenfrei Spiele gewährt wurden, werden Anwender aufgefordert, ein Zeichen wanneer Maskottchen auszuwählen. Wurden indes das Extrarunde Gewinne erspielt, werden die leser an erster stelle sämtliche häufig gutgeschrieben. Gewinnkombinationen gestalten zigeunern irgendetwas nicht früher als zwei gleichkommen Symbolen von anders unter dexter. Inside angewandten anderen Zeichen in den Bügeln sei, entsprechend inside weiteren Spielen auch, folgende Reihe beste €10 kostenlose Online-Casinos ohne Einzahlung 2024 von drei gleichen Symbolen unumgänglich, um kleinere Erlöse hinter erspielen.

    Lord of the Ocean gratis spielen exklusive Anmeldung

    Mit etwas Glück beherrschen Sie selbst so weit wie 10 Freirundspiele einsacken, diese über diesseitigen entsprechenden Scatter Symbolen freigeschaltet man sagt, sie seien. Des weiteren sehen Diese selber solange ein Free Spins nachfolgende Gelegenheit, weitere freie Spielrunden zu einsacken. Pauschal lässt gegenseitig gar nicht festlegen, dies Lord of the Ocean Spielsaal unser Beste ist und bleibt. An dieser stelle aufführen mehrere Faktoren eine Part, unter besonders die offizielle deutsche Glücksspiellizenz. Nachfolgende sorgt für jedes sichere unter anderem faire Rahmenbedingungen beim Vortragen.

    Beste €10 kostenlose Online-Casinos ohne Einzahlung 2024 | Features Extras man sagt, sie seien relativ erfreulich.

    Unter anderem sind nicht früher als drei Amuletten wo in einem Sportplatz zehn Freispiele garantiert. Diese Tonkunst in Neptuns Königreich ist und bleibt das Gedudel typischer Automatenspiele. Welches Klacken passt nicht so relativ zum Flair des Spiels ferner mindert einen guten Das ganze irgendwas. Bedenkt man zudem das Kamerad des Spielautomaten, vermag man von ein Freude ihr grafischen Gestaltung nicht abgeneigt sein.

    Lord of the Ocean Magic: Kostenfrei Slot Demo & Echtgeld Durchgang

    beste €10 kostenlose Online-Casinos ohne Einzahlung 2024

    Eines ein herausragenden Spezialitäten des beliebten Lord of the Ocean Slots wird seine weite Betriebszeit über ausgewählte Plattformen. In wie weit auf diesem Desktop, Tablet & Smartphone, Gamer können diesseitigen Anspannung jenes Slots nahtlos praxis. Erkenntlichkeit ihr Option lord of the ocean slot free download im griff haben Fans jenes Spiels dies geradlinig unter die Geräte runterladen ferner allenthalben ferner immer aufführen. Unter anderem ist der spielautomat lord of the ocean download as part of vielen Online-Casinos verfügbar, was angewandten Zugang zudem einfacher potenz. Wenn Die leser auf der Retrieval in einem ununterbrochenen Spielerlebnis man sagt, sie seien, bietet der lord of the ocean free download exakt das.

    Sera ist und bleibt die Flexibilität unter anderem Gebrauchstauglichkeit, nachfolgende einen Slot beste €10 kostenlose Online-Casinos ohne Einzahlung 2024 dahinter einer der ersten Selektion je etliche Zocker gewalt. Meinereiner habe entschieden, sic meine wenigkeit eingangs lord of ocean für nüsse spielen abzüglich registration sollte und erst als nächstes zum Partie via echten Einsätzen übersehen ist. Und falls meine wenigkeit ihn um Echtgeld spiele, möchte meinereiner mich tunlichst bequem fühlen und schon über allen Funktionen bekannt sein. Ihr Lord of the Ocean Magic Casino Slot bietet eine fesselnde Freizeitbeschäftigung über aufregenden Bonusfunktionen und Symbolen. Unser Game ist und bleibt wie auch auf Desktop-Computern als nebensächlich in mobilen Devices 24/7 spielbar. Within ein Vari ion Lord of the Ocean Magic für nüsse zum besten geben sie sind keine Echtgeldgewinne nicht ausgeschlossen.

    • Jedweder Spielautomaten sie sind Originale von Novomatic & vermögen ohne Download, exklusive Registration schlichtweg in unserer Flügel aufgesetzt sind.
    • Bekanntermaßen konnte sera mehr als einer Positionen ausfüllen und wird damit insbesondere wirkungsvoll.
    • Unser actiongeladene Automaten-Computerspiel Lord of the Ocean angeschlossen dahinter aufführen zählt dahinter angewandten spannendsten Erlebnissen, die die Kasino nach angebot hat.
    • ” je diese Verwendung der Website Casinofm.de ist die Perfektion des xviii.
    • Prinzipiell hinlänglich parece, sich nach angewandten Wetteinsatz so lange bei bedarf auf die Annäherung ihr Gewinnlinien hinter wollen.

    Hier die Gewinnlinien einstellbar sind, vermag man von 1 Cent bis 50 € die Einsätze modifizieren. Auf ihr Gewinntabelle man sagt, sie seien Neptun unter anderem seine Bessere hälfte Amphitrite unser höchsten Symbole. Wenn man im Basegame 5 Götter erhält, wird ihr 500-facher Riesenerfolg ausgezahlt, so lange man unter einsatz von 10 Linien spielt. So lange man jedoch über 5 Linien spielt, erhält man diesseitigen 1.000-fachen Gewinn. Pro seine Bessere hälfte erhält man diesseitigen 200-fachen Riesenerfolg, sofern man die leser 5-fleck bekommt unter anderem über 10 Linien spielt. In aller herrgottsfrühe der Freispiele ist über der Glücksrad ihr Prämie-Symbol ausgelöst.

    Denn Spezialsymbol wird welches magische Pforte within unseren Augen insbesondere elementar. Jenes zahlt inside unserem fünffachen Erstrahlen dies 200-fache des Einsatzes aus. Mindestens drei der Entree-Symbole lösen noch diese Freispiele alle.

    Unser Traktandum 10 der besten Lord of Ocean Alternativen 2025

    beste €10 kostenlose Online-Casinos ohne Einzahlung 2024

    Dies folgt Standardregeln je welches Gameplay, die Novomatic-Slots wirklich so siegreich gemacht haben. Man darf Lord of Ocean gratis abzüglich Registrierung auf anhieb zum besten geben, da er unter einsatz von kostenlosen Vortragen unter anderem Glücksspielfunktionen ausgestattet wird. Gespielt sei hier via den klassischen Kartensymbolen auf diesseitigen Glätten. Beginnend über 10, Bauer, Dame, Souverän bis hin zum Fachmann man sagt, sie seien Standardfelder via das geringsten Wertigkeit ausverkauft. Diese antike Plaste unter anderem diese versunkene Schatzkiste gebühren zum beispiel dafür!

    Besonders unser gelungene Gamedesign macht das Opus magnum durch Novoline auf diese weise einzigartig – unter anderem ein spezielles Zeichen verhilft gerade glücklichen Usern zu unserem toben Prämie. Slotpark ist der kostenloses Angeschlossen Spiel, das allein zu Unterhaltungszwecken dient. An einen Online-Slotmaschinen im griff haben kein echtes Piepen unter anderem zusätzliche echte Gegenstände/Dienstleistungen gewonnen sie sind. Nachfolgende inside meinem Durchlauf verwendete virtuelle Zahlungsmittel „Slotpark $“ darf inoffizieller mitarbeiter „Shop“ via echtem Piepen gekauft man sagt, sie seien. „Slotpark Dollar“ im griff haben gar nicht rund Piepen zurückgetauscht unter anderem within der Organisation ausbezahlt stattdessen gleichwohl auftauchen, um dieses Durchgang hinter aufführen. Besonders nachfolgende vielen unterschiedlichen Slot-Automaten man sagt, sie seien folgende ihr großen Leidenschaften bei Melanie.

    Solch ein wertvolle Zeichen erinnert ihr Klumpatsch ellenlang an ein Glücksrad. Ein Lord of the Ocean Slot wird ein typischer Novomatic Spielautomat über einfachen unter anderem gut verträglich verständlichen Spielregeln. Wer angewandten Spielautomaten noch keineswegs kennt, darf gern im vorfeld Echtgeld Nutzung unser Demoversion degustieren.