HEX
Server: Apache
System: Linux webm005.cluster121.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: adventp (418412)
PHP: 7.4.33
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/adventp/www/wp-content/plugins/js_composer/assets/js/editors/ui/vc_ui-panel-add-element.js
/* global vc, i18nLocale */
(function ( $ ) {
	'use strict';

	window.vc.element_start_index = 0;

	window.vc.AddElementUIPanelBackendEditor = vc.PanelView
		.vcExtendUI( vc.HelperPanelViewHeaderFooter )
		.extend( {
			el: '#vc_ui-panel-add-element',
			searchSelector: '#vc_elements_name_filter',
			prepend: false,
			builder: '',
			events: {
				'click [data-vc-ui-element="button-close"]': 'hide',
				'click [data-vc-ui-element="panel-tab-control"]': 'filterElements',
				'click .vc_shortcode-link': 'createElement',
				'keyup #vc_elements_name_filter': 'filterElements',
				'search #vc_elements_name_filter': 'filterElements',
				'click [data-vc-manage-elements]': 'openPresetWindow'
			},
			initialize: function () {
				window.vc.AddElementUIPanelBackendEditor.__super__.initialize.call( this );
				window.vc.events.on( 'vc:savePreset', this.updateAddElementPopUp.bind( this ) );
				window.vc.events.on( 'vc:deletePreset', this.removePresetFromAddElementPopUp.bind( this ) );
			},
			render: function ( model, prepend ) {
				if ( !_.isUndefined( vc.ShortcodesBuilder ) ) {
					this.builder = new vc.ShortcodesBuilder();
				}

				if ( this.$el.is( ':hidden' ) ) {
					window.vc.closeActivePanel();
				}
				window.vc.active_panel = this;
				this.prepend = _.isBoolean( prepend ) ? prepend : false;
				this.place_after_id = _.isString( prepend ) ? prepend : false;
				this.model = _.isObject( model ) ? model : false;
				this.$content = this.$el.find( '[data-vc-ui-element="panel-add-element-list"]' );
				this.$buttons = $( '[data-vc-ui-element="add-element-button"]', this.$content );

				this.buildFiltering();

				this.$el.find( '[data-vc-ui-element="panel-tab-control"]' ).eq( 0 ).click();

				/*var $single = this.$content.find( '.vc_visible:not(.vc_inappropriate)' );
				 if ( $single.length === 1 ) {
				 var e = {
				 currentTarget: $single.find( '[data-tag]' ).get( 0 )
				 };
				 this.createElement( e );
				 this.hide();
				 return this;
				 }*/
				this.show();

				// must be after show()
				this.$el.find( '[data-vc-ui-element="panel-tabs-controls"]' ).vcTabsLine( 'moveTabs' );

				if ( !vc.is_mobile ) {
					$( this.searchSelector ).trigger('focus');
				}

				return vc.AddElementUIPanelBackendEditor.__super__.render.call( this );
			},
			buildFiltering: function () {
				var itemSelector, tag, notIn, asParent, parentSelector;

				itemSelector = '[data-vc-ui-element="add-element-button"]';
				notIn = this._getNotIn( this.model ? this.model.get( 'shortcode' ) : '' );

				$( this.searchSelector ).val( '' );
				this.$content.addClass( 'vc_filter-all' );
				this.$content.attr( 'data-vc-ui-filter', '*' );

				tag = this.model ? this.model.get( 'shortcode' ) : 'vc_column';
				asParent = tag && !_.isUndefined( vc.getMapped( tag ).as_parent ) ? vc.getMapped( tag ).as_parent : false;

				if ( _.isObject( asParent ) ) {
					parentSelector = [];
					if ( _.isString( asParent.only ) ) {
						parentSelector.push( _.reduce( asParent.only.replace( /\s/, '' ).split( ',' ),
							function ( memo, val ) {
								return memo + (_.isEmpty( memo ) ? '' : ',') + '[data-element="' + val.trim() + '"]';
							},
							'' ) );
					}
					if ( _.isString( asParent.except ) ) {
						parentSelector.push( _.reduce( asParent.except.replace( /\s/, '' ).split( ',' ),
							function ( memo, val ) {
								return memo + ':not([data-element="' + val.trim() + '"])';
							},
							'' ) );
					}
					itemSelector += parentSelector.join( ',' );
				} else if ( notIn ) {
					itemSelector = notIn;
				}

				if ( false !== tag && !_.isUndefined( vc.getMapped( tag ).allowed_container_element ) ) {
					if ( false === vc.getMapped( tag ).allowed_container_element ) {
						itemSelector += ':not([data-is-container=true])';
					} else if ( _.isString( vc.getMapped( tag ).allowed_container_element ) ) {
						itemSelector += ':not([data-is-container=true]), [data-element=' + vc.getMapped( tag ).allowed_container_element + ']';
					}
				}

				this.$buttons.removeClass( 'vc_visible' ).addClass( 'vc_inappropriate' );
				$( itemSelector, this.$content ).removeClass( 'vc_inappropriate' ).addClass( 'vc_visible' );

				this.hideEmptyFilters();
			},
			hideEmptyFilters: function () {
				var _this = this;

				this.$el.find( '[data-vc-ui-element="panel-add-element-tab"].vc_active' ).removeClass( 'vc_active' );
				this.$el.find( '[data-vc-ui-element="panel-add-element-tab"]:first' ).addClass( 'vc_active' );
				this.$el.find( '[data-filter]' ).each( function () {
					if ( !$( $( this ).data( 'filter' ) + '.vc_visible:not(.vc_inappropriate)',
						_this.$content ).length ) {
						$( this ).parent().hide();
					} else {
						$( this ).parent().show();
					}
				} );
			},
			_getNotIn: _.memoize( function ( tag ) {
				var selector;

				selector = _.reduce( vc.map, function ( memo, shortcode ) {
					var separator;

					separator = _.isEmpty( memo ) ? '' : ',';

					if ( _.isObject( shortcode.as_child ) ) {
						if ( _.isString( shortcode.as_child.only ) ) {
							if ( !_.contains( shortcode.as_child.only.replace( /\s/, '' ).split( ',' ), tag ) ) {
								memo += separator + '[data-element=' + shortcode.base + ']';
							}
						}
						if ( _.isString( shortcode.as_child.except ) ) {
							if ( _.contains( shortcode.as_child.except.replace( /\s/, '' ).split( ',' ), tag ) ) {
								memo += separator + '[data-element=' + shortcode.base + ']';
							}
						}
					} else if ( false === shortcode.as_child ) {
						memo += separator + '[data-element=' + shortcode.base + ']';
					}

					return memo;
				}, '' );

				return '[data-vc-ui-element="add-element-button"]:not(' + selector + ')';
			} ),
			filterElements: function ( e ) {
				if ( e ) {
					if ( e.preventDefault ) {
						e.preventDefault();
					}
					if ( e.stopPropagation ) {
						e.stopPropagation();
					}
				} else {
					e = window.event;
				}

				var filterValue, $visibleElements, $control, filter, nameFilter;

				$control = $( e.currentTarget );
				filter = '[data-vc-ui-element="add-element-button"]';
				nameFilter = $( this.searchSelector ).val();

				this.$content.removeClass( 'vc_filter-all' );

				$( '[data-vc-ui-element="panel-add-element-tab"].vc_active' ).removeClass( 'vc_active' );

				if ( $control.is( '[data-filter]' ) ) {
					$control.parent().addClass( 'vc_active' );

					filterValue = $control.data( 'filter' );
					filter += filterValue;

					if ( '*' === filterValue ) {
						this.$content.addClass( 'vc_filter-all' );
					} else {
						this.$content.removeClass( 'vc_filter-all' );
					}

					this.$content.attr( 'data-vc-ui-filter', filterValue.replace( '.js-category-', '' ) );

					$( this.searchSelector ).val( '' );
				} else if ( nameFilter.length ) {
					filter += ":containsi('" + nameFilter + "'):not('.vc_element-deprecated')";

					this.$content.attr( 'data-vc-ui-filter', 'name:' + nameFilter );
				} else if ( !nameFilter.length ) {
					$( '[data-vc-ui-element="panel-tab-control"][data-filter="*"]' ).parent().addClass( 'vc_active' );

					this.$content
						.attr( 'data-vc-ui-filter', '*' )
						.addClass( 'vc_filter-all' );
				}

				$( '.vc_visible', this.$content ).removeClass( 'vc_visible' );
				$( filter, this.$content ).addClass( 'vc_visible' );

				// if user has pressed enter into search box and only one item is visible, simulate click
				if ( nameFilter.length ) {
					if ( 13 === (e.keyCode || e.which) ) {
						$visibleElements = $( '.vc_visible:not(.vc_inappropriate)', this.$content );
						if ( 1 === $visibleElements.length ) {
							$visibleElements.find( '[data-vc-clickable]' ).click();
						}
					}
				}
			},
			createElement: function ( e ) {
				var options;
				if ( e && e.preventDefault ) {
					e.preventDefault();
				}

				var model,
					column,
					row,
					showSettings,
					shortcode,
					row_params,
					inner_row_params,
					column_params,
					inner_column_params,
					tag,
					$control,
					preset,
					presetType,
					closestPreset;

				$control = $( e.currentTarget );
				tag = $control.data( 'tag' );

				row_params = {};

				column_params = { width: '1/1' };

				closestPreset = $control.closest( '[data-preset]' );
				if ( closestPreset ) {
					preset = closestPreset.data( 'preset' );
					presetType = closestPreset.data( 'element' );
				}

				if ( false === this.model ) {
					window.vc.storage.lock();
					if ( 'vc_section' === tag ) {
						var modelOptions = {
							shortcode: tag
						};
						if ( preset && 'vc_section' === presetType ) {
							modelOptions.preset = preset;
						}
						model = vc.shortcodes.create( modelOptions );

					} else {
						var rowOptions = {
							shortcode: 'vc_row',
							params: row_params
						};
						if ( preset && presetType === tag ) {
							rowOptions.preset = preset;
						}
						row = vc.shortcodes.create( rowOptions );

						var columnOptions = {
							shortcode: 'vc_column',
							params: column_params,
							parent_id: row.id,
							root_id: row.id
						};
						if ( preset && 'vc_column' === presetType ) {
							columnOptions.preset = preset;
						}
						column = vc.shortcodes.create( columnOptions );

						model = row;

						if ( 'vc_row' !== tag ) {
							options = {
								shortcode: tag,
								parent_id: column.id,
								root_id: row.id
							};

							if ( preset && presetType === tag ) {
								options.preset = preset;
							}

							model = vc.shortcodes.create( options );
						}
					}
				} else {
					if ( 'vc_row' === tag ) {
						if ( 'vc_section' === this.model.get( 'shortcode' ) ) {
							// we can add real row!
							window.vc.storage.lock();

							row = vc.shortcodes.create( {
								shortcode: 'vc_row',
								params: row_params,
								parent_id: this.model.id,
								order: (this.prepend ? this.getFirstPositionIndex() : vc.shortcodes.getNextOrder())
							} );

							column = vc.shortcodes.create( {
								shortcode: 'vc_column',
								params: column_params,
								parent_id: row.id,
								root_id: row.id
							} );

							model = row;
						} else {
							// we can add only row_inner!
							inner_row_params = {};

							inner_column_params = { width: '1/1' };

							window.vc.storage.lock();
							row = vc.shortcodes.create( {
								shortcode: 'vc_row_inner',
								params: inner_row_params,
								parent_id: this.model.id,
								order: (this.prepend ? this.getFirstPositionIndex() : vc.shortcodes.getNextOrder())
							} );
							column = vc.shortcodes.create( {
								shortcode: 'vc_column_inner',
								params: inner_column_params,
								parent_id: row.id,
								root_id: row.id
							} );
							model = row;
						}
					} else {
						options = {
							shortcode: tag,
							parent_id: this.model.id,
							order: (this.prepend ? this.getFirstPositionIndex() : vc.shortcodes.getNextOrder()),
							root_id: this.model.get( 'root_id' )
						};

						if ( preset && presetType === tag ) {
							options.preset = preset;
						}
						model = vc.shortcodes.create( options );
					}
				}

				this.model = model;
				window.vc.latestAddedElement = model;

				showSettings = !(_.isBoolean( vc.getMapped( tag ).show_settings_on_create ) && false === vc.getMapped(
					tag ).show_settings_on_create);

				// extend default params with settings presets if there are any
				shortcode = this.model.get( 'shortcode' );

				this.hide();

				if ( showSettings ) {
					this.showEditForm();
				}
			},
			getFirstPositionIndex: function () {
				window.vc.element_start_index -= 1;

				return vc.element_start_index;
			},
			show: function () {
				this.$el.addClass( 'vc_active' );
				this.trigger( 'show' );
			},
			hide: function () {
				this.$el.removeClass( 'vc_active' );
				window.vc.active_panel = false;
				this.trigger( 'hide' );
			},
			showEditForm: function () {
				window.vc.edit_element_block_view.render( this.model );
			},
			updateAddElementPopUp: function ( id, shortcode, title, data ) {
				// element pop up box
				var $presetShortcode = this.$el.find( '[data-element="' + shortcode + '"]:first' );
				var $newPreset = $presetShortcode.clone( true );
				vc_all_presets[ id ] = data;

				$newPreset.find( '[data-vc-shortcode-name]' ).text( title );
				$newPreset.find( '.vc_element-description' ).text( '' );
				$newPreset.attr( 'data-preset', id );
				$newPreset.addClass( 'js-category-_my_elements_' );
				$newPreset.insertAfter( this.$el.find( '[data-element="' + shortcode + '"]:last' ) );

				this.$el.find( '[data-filter="js-category-_my_elements_"]' ).show();

				//preset settings panel
				var $samplePreset = (this.$body.find( '[data-vc-ui-element="panel-preset"] [data-vc-presets-list-content] .vc_ui-template:first' ));
				var $anotherNewPreset = $samplePreset.clone( true );
				$anotherNewPreset.find( '[data-vc-ui-element="template-title"]' ).attr( 'title', title ).text( title );
				$anotherNewPreset.find( '[data-vc-ui-delete="preset-title"]' ).attr( 'data-preset', id ).attr( 'data-preset-parent', shortcode );
				$anotherNewPreset.find( '[data-vc-ui-add-preset]' ).attr( 'data-preset', id ).attr( 'id', shortcode ).attr( 'data-tag', shortcode );
				$anotherNewPreset.show();
				$anotherNewPreset.insertAfter( this.$body.find( '[data-vc-ui-element="panel-preset"] [data-vc-presets-list-content] .vc_ui-template:last' ) );
			},
			removePresetFromAddElementPopUp: function ( id ) {
				this.$el.find( '[data-preset="' + id + '"]' ).remove();
			},
			openPresetWindow: function ( e ) {
				if ( e && e.preventDefault ) {
					e.preventDefault();
				}
				window.vc.preset_panel_view.render().show();
			}
		} );

	window.vc.AddElementUIPanelFrontendEditor = vc.AddElementUIPanelBackendEditor
		.vcExtendUI( vc.HelperPanelViewHeaderFooter )
		.extend( {
			events: {
				'click [data-vc-ui-element="button-close"]': 'hide',
				'click [data-vc-ui-element="panel-tab-control"]': 'filterElements',
				'click .vc_shortcode-link': 'createElement',
				'keyup #vc_elements_name_filter': 'filterElements'
			},
			createElement: function ( e ) {
				var options;
				if ( e && e.preventDefault ) {
					e.preventDefault();
				}

				var showSettings,
					params,
					shortcodeFirst,
					newData,
					i,
					shortcode,
					column_params,
					row_params,
					inner_row_params,
					inner_column_params,
					$control,
					tag,
					preset,
					presetType,
					closestPreset;

				$control = $( e.currentTarget );
				tag = $control.data( 'tag' );

				row_params = {};

				column_params = { width: '1/1' };

				closestPreset = $control.closest( '[data-preset]' );
				if ( closestPreset ) {
					preset = closestPreset.data( 'preset' );
					presetType = closestPreset.data( 'element' );
				}

				if ( this.prepend ) {
					window.vc.activity = 'prepend';
				}
				if ( false == this.model ) {
					if ( 'vc_section' === tag ) {
						var modelOptions = {
							shortcode: tag
						};
						if ( preset && 'vc_section' === presetType ) {
							modelOptions.preset = preset;
						}
						this.builder.create( modelOptions );
						this.model = this.builder.last();
					} else {
						var rowOptions = {
							shortcode: 'vc_row',
							params: row_params
						};
						if ( preset && 'vc_row' === presetType ) {
							rowOptions.preset = preset;
						}
						this.builder.create( rowOptions );

						var columnOptions = {
							shortcode: 'vc_column',
							parent_id: this.builder.lastID(),
							params: column_params
						};
						if ( preset && 'vc_column' === presetType ) {
							columnOptions.preset = preset;
						}
						this.builder.create( columnOptions );

						if ( 'vc_row' !== tag ) {
							options = {
								shortcode: tag,
								parent_id: this.builder.lastID()
							};

							if ( preset && presetType === tag ) {
								options.preset = preset;
							}

							this.builder.create( options );
						}
						this.model = this.builder.last();
					}
				} else {
					if ( 'vc_row' === tag ) {
						if ( 'vc_section' === this.model.get( 'shortcode' ) ) {
							// we can add real row!
							this.builder.create( {
								shortcode: 'vc_row',
								params: row_params,
								parent_id: this.model.id,
								order: (this.prepend ? this.getFirstPositionIndex() : vc.shortcodes.nextOrder())
							} ).create( {
								shortcode: 'vc_column',
								params: column_params,
								parent_id: this.builder.lastID(),
							} );

							this.model = this.builder.last();
						} else {
							// we can add only row_inner!
							inner_row_params = {};

							inner_column_params = { width: '1/1' };

							this.builder.create( {
								shortcode: 'vc_row_inner',
								params: inner_row_params,
								parent_id: this.model.id,
								order: (this.prepend ? this.getFirstPositionIndex() : vc.shortcodes.nextOrder())
							} ).create( {
								shortcode: 'vc_column_inner',
								params: inner_column_params,
								parent_id: this.builder.lastID()
							} );

							this.model = this.builder.last();
						}
					} else {
						options = {
							shortcode: tag,
							parent_id: this.model.id,
							order: (this.prepend ? this.getFirstPositionIndex() : vc.shortcodes.nextOrder()),
						};

						if ( preset && presetType === tag ) {
							options.preset = preset;
						}
						this.builder.create( options );
						this.model = this.builder.last();
					}
				}

				/*	params = {
				 shortcode: tag,
				 parent_id: (this.model ? this.model.get( 'id' ) : false)
				 };

				 if ( 'vc_row' === tag ) {
				 params.params = row_params;
				 } else if ( 'vc_row_inner' === tag ) {
				 params.params = row_inner_params;
				 }

				 if ( this.prepend ) {
				 params.order = 0;
				 shortcodeFirst = vc.shortcodes.findWhere( { parent_id: this.model.get( 'id' ) } );

				 if ( shortcodeFirst ) {
				 params.order = shortcodeFirst.get( 'order' ) - 1;
				 }

				 vc.activity = 'prepend';
				 } else if ( this.place_after_id ) {
				 params.place_after_id = this.place_after_id;
				 }

				 this.builder.create( params );
				 */
				// extend default params with settings presets if there are any
				for ( i = this.builder.models.length - 1; i >= 0; i -- ) {
					shortcode = this.builder.models[ i ].get( 'shortcode' );
				}
				/*
				 if ( 'vc_row' === tag ) {
				 column_params = { width: '1/1' };

				 this.builder.create( {
				 shortcode: 'vc_column',
				 parent_id: this.builder.lastID(),
				 params: column_params
				 } );
				 } else if ( 'vc_row_inner' === tag ) {
				 column_params = { width: '1/1' };

				 this.builder.create( {
				 shortcode: 'vc_column_inner',
				 parent_id: this.builder.lastID(),
				 params: column_params
				 } );
				 }
				 */
				if ( _.isString( vc.getMapped( tag ).default_content ) && vc.getMapped( tag ).default_content.length ) {
					newData = this.builder.parse( {},
						window.vc.getMapped( tag ).default_content,
						this.builder.last().toJSON() );
					_.each( newData, function ( object ) {
						object.default_content = true;
						this.builder.create( object );
					}, this );
				}

				this.model = this.builder.last();
				window.vc.latestAddedElement = this.model;

				showSettings = !(_.isBoolean( vc.getMapped( tag ).show_settings_on_create ) && false === vc.getMapped(
					tag ).show_settings_on_create);

				this.hide();

				if ( showSettings ) {
					// showEditForm call window.vc.edit_element_block_view.render( this.model );
					// window.vc.edit_element_block_view is set equal to EditElementUIPanel() in editors/frontend_editor/build.js
					// EditElementUIPanel is located in editors/ui/edit-element/vc_ui-panel-edit-element.js
					// EditElementUIPanel is set equal to EditElementPanelView which is equal to PanelView
					// this.model should be available in the render method of EditElementPanelView
					this.showEditForm();
				}

				// this.builder is equal to vc.ShortcodesBuilder constructor from frontend_editor/shortcodes_builder.js
				this.builder.render(null, this.model);
			}
		} );

})( window.jQuery );