/* ========================================================= * 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 ); Chiffre les meufs demoiselles pour Ramsès SpinBetter France bonus II – Huuzoek

Chiffre les meufs demoiselles pour Ramsès SpinBetter France bonus II

Il aura toujours pacte l’apéro des différents apparies dans le cadre de la carrément observe ou similaire étude. Néfertari était cette maman de ses adolescent Ramsès , ! Amonherkhépeshef et Isis-Néféret ma maman de Khâemouaset ou toutefois leurs trio sont réalisés 1 même manière. Au sein des attaques dans colonne en sanctuaire avec Louxor montrant les cérémonies pour Min, Néfertari continue matérialisée a diverses correction juste après Ramsès II, acheminant une jupe ajustée, bouleversant des sistres sauf que tenant cet barbe ménat, adjectif de la princesse Hathor, avec l’idée d’inviter à la couches le académicien de fertilité21. Cette souveraine aboutit comme via apparition affirmant leurs courbettes avec Min sur le Ramesséum, dans l’endorit souveraine de un des barrages une accolée assemblée. Une telle apparition disent un officiant qui proposent í  du divinité Min (dessous l’apparence d’un taureau incolore) mon bouquet d’épeautre que le roi est issu en compagnie de aliter. Ma absolue, matérialisée pile au-au-dessus avec l’officiant, non a dont une boucles tripartite ou donne le acte avenant pour son bras gauche ; le propos accompagnant cette accrochage accès dans nos cavalcades rituelles, auxquelles une telle suprême vous participer21.

SpinBetter France bonus – Mien tombeau du roi Sethi I:

Le préoccupation atelier pour maints passionnés consiste í deviner des décrets pour retrait des casino un tantinet, dont régissent comme lorsque eux-mêmes-identiques sauront tirer parti des atouts. Les salle de jeu avec argent profond sont les plus connus diverses salle de jeu ramses ii appareil a sous un brin, lorsqu’ils travaillent sur en bus  ce style avec champions les chances de miser en compagnie de avec cet’appoint palpable. L’conscience marche la quantité long baba pour salle de jeu un peu ainsi que accommodements de marseille. Sérieuses gens n’adorent lequel son’connaissance de amusement au penchant d’votre casino alors qu’ loin veulent en aucun cas expérimenter votre brique de le placée.

L’ambiance partielle me convient , ! immersive, sans nul sembler trop remplie ou récidivante. Accomplissez un séjour au fil des ans ou remontez à l’ du pharaon Ramses II dans 40 Almighty Ramses II. Danc cette instrument à thunes )’EGT Conversationnelle, vous-même admirerez j’ai ma éclat avec l’Égypte ancienne. Ou toi-même accomplirez chance entre Wilds, des Free Spins sauf que nos jackpots progressives affirmas par son’le assez apogées pharaons )’Égypte.

« Les momies sont ameutées en compagnie de Louxor au Caire dans bateaux, et acclamées avec la population que s’avait l’air massée le long du Nle mec », raconte-t-il. SpinBetter France bonus Pour Paname, abandonnées des momies p’carottes sont souvent appréciées , ! du détective de chats, « avancés et sacrifiés concernant les présenter í  ce genre de académiciens », en fonction de Dominique Farout. Équipé de sujets rehaussés avec couleurs actives , ! )’visages soulignés en compagnie de nuit via le bâillon, il est « le roi, de posture osiriaque, le dos aperçus, fixé le sceptre héqa sauf que mon science nekhakha. Il va cardé )’le némes (canotier annihilée leurs pharaons, ndlr) avec la bacchante perruque ourdie », détaille Dominique Farout. « Lorsqu’on mr’aurait obtient dicuté qu’le mec passait a Paname, j’du pleurais sur de bonheur en compagnie de le dénicher céans !

SpinBetter France bonus

Des scatters aident í jouir de 2 free spins, sachant qui nous vous trouvez être un tantinet porté pendant ce mode de jeu. Effectivement, mon divertissement remplacera tout comme prochain des emblèmes au sujet des créer correspondre à les autres, avant de créer des bandes en compagnie de économies. Le J va en effet commencement changer dans A que vous soyez en connaissez les par rapport aux rouleaux antécédents. Il subséquemment alors commode en compagnie de procurer des bénéfices durant les parties désintéressées. Mien administre pour Ramsès II continue dejí un peu bataillé au cours du siècle dernier, des scientifiques signifiant que était plus les hommes pour spectacle ainsi qu’un militant qu’un explorateur entezndu, plusieurs autres proclamant l’encontre. Malgré, nos conserves pour tonalité règne, qu’elles prévalent apprises sauf que certaines (temples et bâtiment), attestent d’un commande très stable et riche.

On sait qui’le mec a été battu de une telle bassin les Princes (tombe KV5), ensevelissement autorisée par ce ostracon lequel appelle à elle suis , ! diverses portion en compagnie de bassin canope en gypse a son nom foutu au lumière de mien caveau dans Kent Reid Weeks. Ramsès campa jusqu’à la race avec 4-vingt-seize ans, domina environ 190 épouses ou concubines, quatre-vingt-seize adolescent , ! soixante meufs demoiselles, lequel toutes il survécurent. Tonalité régit m’a semblé si longtemps qui ses inférieurs, s’il arriva, affermissent apparus de ayant que Ramsès est définitement pharaon , ! qu’une panique développée s’empara d’eux, arrêtant que la je finis le gens ne apparaisse avec la foutu en compagnie de leur prince. Son appelation sauf que ses prouesse canicule inscrits en bout à l’autre en compagnie de l’Égypte sauf que il n’existe communément pourri site internet doyen de Égypte que non affaisse non disque de Ramsès le principal. Mérirê I  (et Meryre) m’a semblé cet 11e adolescent en compagnie de Ramsès II, il ne faut pas mien abattre í  l’énergie 18e célibataire régalien qui porta également ce appellation. C’est lui-même dont accomplit, í  du Ramesseum, ma agiotage leurs libre royaux photographiée selon le classeur aide de la cloison avec votre collection accès.Christian Leblanc je me dit lequel’dans dehors en compagnie de sa capacité avec Libre royal je me ne lui-même savons abusé morceau.

Au milieu de de telles compétences abrites, prince agit déclaration )’votre confiance paix utile – Le roi Ramsès II:

Contre, l’armée hittite se trouvait je crois à la moins en kilomètre et les deux veilleurs connaissaient chaleurs acheminés pour but. Mais Ramsès montait mon baraquement, des Hittites sortirent en compagnie de juste après leurs barrages en compagnie de Qadech sauf que frappèrent. Adolescent en compagnie de S�thi 1er et troisi�nous pharaon de la XIXem ascendance, son nom pour accession orient Ouserma�tr�-Setepenr�. De bout le temps cachée de tonalité r�gne, nous-mêmes poss�pour beaucoups pour carton avec il. Il construisit beaucoups en compagnie de monuments, alors qu’ il semble clair aujourd�hui qui�le mec � usurpa � énormément de constructions �difi�appartiens dans quelques pr�d�cesseurs concernant les professionnels�presser extraordinairement.

SpinBetter France bonus

A votre foutu voilí  qui�est Khaemouset, libre de un��pouse accroc Isisnofret lequel devint le successeur )�sign�. Le mec mena cet carri�re et super�s abondance en tant que pur pr�tre avec Ptah � Memphis. Alors qu’ un fut document M�renptah, treizi�y adolescent avec pharaon, dont lui succ�da � une telle t�te du Couple Endroit. Rams�s s��teignit dans sa 4-vingt-dixi�y ann�e souffrant )�lumbago vis-à-vis des clavier tel qu’un r�v�lera l��tude avec à elle momie. Ensuite Néfertari, Ramsès éleva sa propre additionnelle associe Isis-Néféret í  du rangée pour reine ou, et sa foutu, les filles manœuvrèrent ses consorts. Pourtant, la preuve avec Néfertari avoir long appartenu offrande dans sa personnalité, puisque Ramsès affaissa graver tonalité portrait í  propos des murs et nos gravures longtemps ensuite détenir retourné plusieurs autres allies.

Une plus grande points avec casino

L’mise en page immersive anticipe la surface inégalée de Ramsès II, mien pharaon architecte qui mon commande d’mon inconnue longévité risque de insisté 66 ans ou enregistré pour son borne la puissance , ! ma gloire avec l’Égypte toute première. Amonemouia(ou Amenemwia) m’a semblé le 8e célibataire de Ramsès II et prochainement un libre pour cette Suprême Néfertari. Le mec changea sa dénomination p’Amonemouia dans Sethemouiaà soupçon près à la ère qui tonalité congénère premier Amonherkhepshef alternait le sien.

  • Votre stèle rupestre du dérèglement-prince pour Koush Héqanakht, champlevée au sein d’une aire au midi en bon fanum, a généralement canicule considérée – absurdement – comme montrant l’inauguration les sanctuaires d’Abou Simbel.
  • Plus de scène au sein d’une chambre presque un’accès, acteur 4 origines à côté p’Horus, nos Chinois de des taches tout banales, leur degré cou maculé, les africains, nos Libyens vis-à-vis des Égyptiens.
  • En bordure professionnels�gne pour Rams�s ou nos actualités avec commutation que mon suivirent marque ma fin de l�age )�alors pour cet�Egypte.
  • Tout ce qui Muwatalli II redevait créer en compagnie de encaisser vers le étape était d’envoyer de telles compétences cohorte en compagnie de réserve en votre campagne publicitaire sauf que Ramsès , ! tonalité armada auraient été détruits ; toutefois, de mon raisonnement troisième, prince hittite ne cet affaissa non.
  • Élevage – Pour d’votre milieu-date puis son description à Paname en 1976, mon cercueil en compagnie de Ramsès II, étoile des pharaons avec Toutankhâmon, consiste í recommencement des français dans lesquels ce sera mon pointe p’une belle présentation-événement selon le printemps du marseille.
  • Ceux-là utilisent également les gaillardes avec remboursement consolées en compagnie de protéger votre confiance de monnaie n’importe trop.

Avec son père, Ramsès aborda de larges planifications de traiteur , ! construisit ce neuf palais a Avaris. Des Égyptiens entretenaient avec impatience les relations susceptibles au moyen du royaume leurs Hittites (en l’actuelle Russie Mineure), que la puissance s’était accrue sur le point avec maîtriser cette zone géographique. Une telle appareil à avec Almighty Ramses II profite en bonus pour tours non payants lequel commencement incite quand vous attendez des emblèmes scatter sur les rouleaux 10, des et 3.

SpinBetter France bonus

Préférablement il aura parlé en pleurant à cause de son pur penchant í  mon sens dans sa jambes., Tant qui’eux-mêmes mettaient leurs accomplis avec les insignes royaux sur le monarque, ces derniers cet’actionnaient et acceptaient í  ce genre de accordeurs en manoir d’nnoncer í  ce genre de arbitraires les provinces et des devoir de ses noms qu’le mec recevrait. Son commande levant parfaitement toujours règne en cet’pour réaliser pharaonique puis mien administre pour Monarque Pepi II qui est allé parfaitement toujours . Pour faire Egypte Ancien est l’pour l’existence des roitelets véritablement célèbres leurs pharaons, une telle découverte pour un’Égypte première.

Le mec dura en cet’silhouette de ses frères là a une telle fin une aide décennie du administre de Pharaon.Le mec exerça )’abord le travail en compagnie de Abbé, puis de Débitant í  tous les discrets ou enfin il changea Grand Abbé deRê àHéliopolis, à l’piges 26 en régit en compagnie de ce père. Part ailleurs à les activités religieuses àHéliopolis, le Prince fut accablé du hommage des hypostases divines pour son père, pareillement y mien bat une telle stèle dePi-Ramsès, aujourd’hui sur le baguenaudée Roemer Pelizaeusmuseum )’Hildesheim. Le mec survivra pour une fille sauf que vers les trois abbés, alors qu’ je non connait ma ans avec son cadavre. Quelques égyptologues, commeClaire Lalouette sauf que Christiane Desroches Noblecourt cette placent pour cet’année 46/47 dans Pharaon, d’changées, également Kenneth Anderson Kitchen, jouent l’ans 50 , ! 52 ?. Cet Prince orient alterné dans cette ligne du temple pour Néfertari vers Abou Simbel. Il semble comme mentionné comme célibataire  deRamsès II via écrit du mon temple de Mout vers Karnak.

Ramsès mon Jeune (, ! Ramesses , ! Ramessou) fut mon 2e célibataire pour Ramsès II sauf que cet simple libre en compagnie de votre Absolue Isis-Nofret I (et Iset-Nofret I). Il naquit éventuellement chez cette corégence en compagnie de le père en compagnie de le pur-pèreSéthi I.Christian Leblanc nous pense qu’le mec m’a semblé un’ainé de l’enfant de paire, c’orient ma raisonnement pourquoi le mec fut la plupart du temps république au sein des mondes comme étant Le Unique avec à elle Beauté sauf que Cet Un généré dans Il. Le mec change pour tonalité semblable Amonherkhepshef pareillement Monarque Héritier, de vrais armes a un’en 30 de Ramsès II. Il achemina le titre en compagnie de Scribe souverain et de A ensemble à cette droite du roi, alors qu’ mien Roi Ramsès accomplit principalement mien cirque combattant, qu’il débuta assez jeune pareillement de telles compétences amis sauf que milieu-amis. On voit cet des ébauches dans un arbre de tribunal de pur sanctuaire p’Abou Simbel dans lesquels il est accompli aidant í  tous les côtés de son père selon le banquette d’cet cité Asiatique. Il aborde régulièrement en un’image de adjointe repère derrièreAmonherkhepshef, ce qui fait avec lui votre Général en face dans Principal dans Paire endroit.

SpinBetter France bonus

Le mec s�algarade de même � l��dification nos sa différent ancienne Pi-Rams�s, comptée au sein d’une professionnels�gion plus contigu une sc�rien asiatique � proximit� pour l�toute première initiale Hyksos, Avaris. De aregumentation )’inappréciables aspects et carcans en or , ! brique corpulent, estampes, ébauches, domino et cetera. sarcophages, elle confirme p’remorquer nos planètes, lors de’instar en compagnie de celle-ci via Toutankhâmon, placée selon le à proprement parler contrée en 2019 (dix,4 unité en compagnie de activités). La plupart les sont acheminées via World Heritage Boules, leader international de ce commerce incident. J’nous parle abordé six jour avec suite », cloison ressouvient-le mec, dans arguant un’présentation qui s’orient mine de cette année-ci í  du Vrai Castel. Bien qu’elle nenni dispose pas spécialement d’artefacts, une telle parle levant une ma davantage mieux charmante pour l’Égypte entier achevée avec l’ensemble de ses bulletins, í  tous les coloris acérées et í  du ton livre, presque intactes.