Willkommen bei WordPress. Dies ist dein erster Beitrag. Bearbeite oder lösche ihn und beginne mit dem Schreiben!
Hallo Welt!
von raredesign | Dez 3, 2019 | Allgemein | 0 Kommentare
Cokiee Shell
Current Path : /var/www/web28/html/wp-content/plugins/fusion-builder/inc/lib/inc/fusion-app/ |
Current File : //var/www/web28/html/wp-content/plugins/fusion-builder/inc/lib/inc/fusion-app/model-dependencies.js |
/* global FusionApp, fusionAllElements, FusionEvents, FusionPageBuilderViewManager, FusionPageBuilderApp */ /* jshint -W024, -W098*/ var FusionPageBuilder = FusionPageBuilder || {}; ( function() { FusionPageBuilder.Dependencies = Backbone.Model.extend( { /** * Init. * * @since 2.0.0 * @return {void} */ initialize: function( options, view, $targetEl, repeaterFields, $parentEl ) { var self = this, currentOptions; this.$targetEl = 'undefined' !== typeof $targetEl ? $targetEl : view.$el; this.repeaterFields = 'undefined' !== typeof repeaterFields ? repeaterFields : false; this.$parentEl = 'undefined' !== typeof $parentEl ? $parentEl : this.$targetEl; this.type = view.type; this.elementView = view; // Dependency object key names switch ( this.type ) { case 'TO': self.dependencyKey = 'required'; self.settingKey = 'setting'; self.operatorKey = 'operator'; currentOptions = view.options; break; case 'PO': self.dependencyKey = 'dependency'; self.settingKey = 'field'; self.operatorKey = 'comparison'; currentOptions = view.options; break; case 'EO': self.dependencyKey = 'dependency'; self.settingKey = 'element'; self.operatorKey = 'operator'; currentOptions = options; break; } // Special case, we override view options from repeater. if ( self.repeaterFields ) { self.currentOptions = repeaterFields; } else { self.currentOptions = currentOptions; } self.parentValues = 'undefined' !== typeof view.parentValues ? view.parentValues : false; self.collectDependencies(); self.collectDependencyIds(); if ( 'undefined' !== typeof self.dependencyIds && self.dependencyIds.length ) { this.$targetEl.find( self.dependencyIds.substring( 2 ) ).on( 'change paste keyup fusion-change', function() { self.processDependencies( jQuery( this ).attr( 'id' ), view ); } ); // Listen for TO changes, refresh dependencies for new default. if ( 'object' === typeof self.dependencies ) { _.each( _.keys( self.dependencies ), function( param ) { FusionEvents.on( 'fusion-param-default-update-' + param, function() { self.processDependencies( param, view ); } ); } ); } } // Repeater dependency from parent view. if ( 'undefined' !== typeof self.parentDependencyIds && self.parentDependencyIds.length ) { this.$parentEl.on( 'change paste keyup fusion-change', self.parentDependencyIds.substring( 2 ), function() { self.processDependencies( jQuery( this ).attr( 'id' ), view, true ); } ); } self.dependenciesInitialCheck( view ); // Process page option default values. if ( 'PO' === view.type ) { self.processPoDefaults( view ); } else if ( 'EO' === view.type && 'undefined' !== typeof avadaPanelIFrame ) { self.processEoDefaults( view ); } }, /** * Initial option dependencies check. * * @since 2.0.0 */ dependenciesInitialCheck: function( view ) { var self = this; // Check for any option dependencies that are not on this tab. jQuery.each( _.keys( self.dependencies ), function( index, value ) { // jshint ignore: line if ( 'undefined' === typeof self.currentOptions[ value ] ) { self.processDependencies( value, view ); } } ); // Check each option on this tab. jQuery.each( self.currentOptions, function( index ) { self.processDependencies( index, view ); } ); }, buildPassedArray: function( dependencies, gutterCheck ) { var self = this, $passedArray = [], toName; // Check each dependency for that id. jQuery.each( dependencies, function( index, dependency ) { var setting = dependency[ self.settingKey ], operator = dependency[ self.operatorKey ], value = dependency.value, hasParent = -1 !== setting.indexOf( 'parent_' ), element = self.repeaterFields && hasParent ? self.$parentEl.find( '.fusion-builder-module-settings' ).data( 'element' ) : self.$targetEl.find( '.fusion-builder-module-settings' ).data( 'element' ), result = false, poFields, parentValue, containerView, containerParams; if ( self.repeaterFields && hasParent ) { parentValue = self.$parentEl.find( '#' + setting.replace( 'parent_', '' ) ).val(); } else if ( 0 < self.$targetEl.find( '#' + setting ).closest( '.dynamic-param-fields' ).length ) { // Check and exclude for dynamic data fields. parentValue = self.$targetEl.find( '#' + setting ).closest( '[data-dynamic]' ).siblings().find( '#' + setting ).val(); } else { const input = self.$targetEl.find( '#' + setting ); // Multi Select option. if ( input.is( 'div' ) && input.is( '.fusion-form-multiple-select' ) ) { parentValue = []; input.find( '.fusion-select-options input.fusion-select-option:checked' ).each( function() { parentValue.push( jQuery( this ).val() ); } ); } else { parentValue = input.val(); } } if ( 'undefined' === typeof parentValue ) { if ( 'TO' === self.type ) { parentValue = FusionApp.settings[ setting ]; } else if ( 'PO' === self.type ) { if ( 'undefined' !== typeof FusionApp.data.postMeta[ setting ] ) { parentValue = FusionApp.data.postMeta[ setting ]; } if ( 'undefined' !== typeof FusionApp.data.postMeta._fusion && 'undefined' !== typeof FusionApp.data.postMeta._fusion[ setting ] ) { parentValue = FusionApp.data.postMeta._fusion[ setting ]; } // Get the default value. if ( ( 'undefined' === typeof parentValue || '' === parentValue ) ) { poFields = FusionApp.sidebarView.getFlatPoObject(); if ( poFields[ setting ] && poFields[ setting ][ 'default' ] ) { parentValue = poFields[ setting ][ 'default' ]; } } } } // Use fake value if dynamic data is set. if ( '' === parentValue && ! hasParent && 'true' === self.$targetEl.find( '#' + setting ).closest( '.fusion-builder-option' ).attr( 'data-dynamic' ) ) { parentValue = 'using-dynamic-value'; } // Get from element defaults. if ( ( 'undefined' === typeof parentValue || '' === parentValue ) && 'EO' === self.type && 'undefined' !== typeof fusionAllElements[ element ] && 'undefined' !== typeof fusionAllElements[ element ].defaults && 'undefined' !== typeof fusionAllElements[ element ].defaults[ setting ] ) { parentValue = fusionAllElements[ element ].defaults[ setting ]; } // Hide 'flex / legacy' choice for containers when Header layout section is edited. if ( 'EO' === self.type && 'fusion_builder_container' === element && 'template_type' === setting && 'undefined' !== typeof FusionApp.data.template_category && 'header' === FusionApp.data.template_category ) { $passedArray.push( false ); return; } // Hide or show 'flex / legacy' choice based on TO setting. if ( 'EO' === self.type && 'fusion_builder_container' === element && 'template_type' === setting ) { $passedArray.push( 'undefined' !== typeof FusionApp.settings.container_legacy_support && '1' === FusionApp.settings.container_legacy_support ); return; } // Special check for parent container type. if ( 'EO' === self.type && 'fusion_builder_container' === setting && 'object' === typeof self.elementView ) { containerView = FusionPageBuilderViewManager.getView( self.elementView.model.get( 'parent' ) ); if ( 'object' === typeof containerView ) { containerView = FusionPageBuilderApp.getParentContainer( containerView.model.get( 'parent' ) ); if ( 'object' === typeof containerView ) { containerParams = 'object' === typeof containerView.values ? containerView.values : containerView.model.get( 'params' ); parentValue = containerParams[ ( 'undefined' !== typeof dependency.param ? dependency.param : 'type' ) ]; $passedArray.push( self.doesTestPass( parentValue, value, operator ) ); return; } } } if ( 'undefined' !== typeof parentValue ) { if ( 'TO' === self.type || 'FBE' === self.type ) { result = self.doesTestPass( parentValue, value, operator ); if ( false === gutterCheck ) { if ( self.$targetEl.find( '[data-option-id=' + setting + ']' ).is( ':hidden' ) && ! self.$targetEl.find( '[data-option-id=' + setting + ']' ).closest( '.repeater-fields' ).length ) { result = false; } } $passedArray.push( Number( result ) ); } else { // Page Options if ( '' === parentValue || 'default' === parentValue ) { if ( 'undefined' !== typeof FusionApp.settingsPoTo[ setting ] ) { // Get TO name toName = FusionApp.settingsPoTo[ setting ]; // Get TO value parentValue = FusionApp.settings[ toName ]; // Fix value names ( TO to PO ) parentValue = self.fixPoToValue( parentValue ); } } if ( 'EO' === self.type && 'undefined' !== typeof self.attributes[ setting ] && 'range' !== self.attributes[ setting ].type ) { // Fix value names ( TO to EO ) parentValue = self.fixEoToValue( parentValue ); } $passedArray.push( self.doesTestPass( parentValue, value, operator ) ); } } else { // Check parent element values. For parent to child dependencies. if ( self.parentValues ) { if ( 'parent_' === setting.substring( 0, 7 ) ) { if ( 'object' === typeof self.parentValues && self.parentValues[ setting.replace( dependency.element.substring( 0, 7 ), '' ) ] ) { parentValue = self.parentValues[ setting.replace( dependency.element.substring( 0, 7 ), '' ) ]; } else { parentValue = ''; } } } // Check for current post type dependency. if ( 'EO' === self.type && '_post_type_edited' === setting && 'object' === typeof self.elementView ) { parentValue = FusionApp.data.postDetails.post_type; } $passedArray.push( self.doesTestPass( parentValue, value, operator ) ); } } ); return $passedArray; }, /** * Collect and return all dependencies. * * @since 2.0.0 * @return {void} */ collectDependencies: function() { var self = this, dependency, optionName, setting, dependencies = []; jQuery.each( self.currentOptions, function( index, value ) { dependency = value[ self.dependencyKey ]; // Dependency found if ( ! _.isUndefined( dependency ) ) { optionName = index; // Check each dependency for this option jQuery.each( dependency, function( i, opt ) { setting = opt[ self.settingKey ]; // If option has dependency add to check array. if ( _.isUndefined( dependencies[ setting ] ) ) { dependencies[ setting ] = [ { option: optionName, or: value.or } ]; } else { dependencies[ setting ].push( { option: optionName, or: value.or } ); } } ); } } ); self.dependencies = dependencies; }, /** * Collect IDs of options with dependencies. * * @since 2.0.0 * @return string */ collectDependencyIds: function() { var self = this, dependency, setting, dependencyIds = '', parentDependencyIds = ''; jQuery.each( self.currentOptions, function( index, value ) { dependency = value[ self.dependencyKey ]; // Dependency found if ( ! _.isUndefined( dependency ) ) { // Check each dependency for this option jQuery.each( dependency, function( i, opt ) { setting = opt[ self.settingKey ]; // Create IDs of fields to check for. ( Listeners ) if ( 'parent_' === setting.substring( 0, 7 ) && 0 > parentDependencyIds.indexOf( '#' + setting.replace( 'parent_', '' ) ) ) { parentDependencyIds += ', #' + setting.replace( 'parent_', '' ); } else if ( 0 > dependencyIds.indexOf( '#' + setting ) ) { dependencyIds += ', #' + setting; } } ); } } ); self.dependencyIds = dependencyIds; // Repeater, set parent dependency Ids. if ( '' !== parentDependencyIds && self.repeaterFields ) { self.parentDependencyIds = parentDependencyIds; } }, /** * Hide or show the control for an option. * * @since 2.0.0 * @param {boolean} [show] Whether we want to hide or show the option. * @param {string} [optionName] The option-name. * @return {void} */ hideShowOption: function( show, optionName ) { if ( show ) { this.$targetEl.find( '[data-option-id="' + optionName + '"]' ).fadeIn( 300 ); this.$targetEl.find( '[data-option-id="' + optionName + '"]' ).removeClass( 'dependency-hide' ); } else { this.$targetEl.find( '[data-option-id="' + optionName + '"]' ).hide(); this.$targetEl.find( '[data-option-id="' + optionName + '"]' ).addClass( 'dependency-hide' ); } }, /** * Check option for fusion-or-gutter. * * @since 2.0.0 * @param {Object} option * @return {Object} */ toGutterCheck: function( option ) { var singleOrGutter, gutterSequence, gutterCheck = false, gutter = {}; singleOrGutter = ( ! _.isUndefined( option[ 'class' ] ) && 'fusion-or-gutter' === option[ 'class' ] ) ? option[ 'class' ] : false; if ( ! singleOrGutter ) { gutterSequence = ( ! _.isUndefined( option[ 'class' ] ) && 'fusion-or-gutter' !== option[ 'class' ] ) ? option[ 'class' ].replace( 'fusion-gutter-', '' ).split( '-' ) : false; } if ( singleOrGutter || gutterSequence ) { gutterCheck = true; } gutter = { single: singleOrGutter, sequence: gutterSequence, check: gutterCheck }; return gutter; }, /** * Process dependencies for an option. * * @since 2.0.0 * @param {string} [currentId] The setting-ID. * @return {void} */ processDependencies: function( currentId, view, fromParent ) { var self = this, gutter = {}, childGutter = {}, show = false, optionName, passedArray, dependentOn, childOptionName, childDependencies, childPassedArray; if ( 'function' === typeof view.beforeProcessDependencies ) { view.beforeProcessDependencies(); } // If fromParent is set we need to check for ID with parent_ added. if ( 'undefined' !== typeof fromParent && fromParent ) { currentId = 'parent_' + currentId; } // Loop through each option id that is dependent on this option. jQuery.each( self.dependencies[ currentId ], function( index, value ) { show = false; optionName = value.option; dependentOn = self.currentOptions[ optionName ][ self.dependencyKey ]; passedArray = []; gutter = {}; if ( 'TO' === self.type || 'FBE' === self.type ) { // Check for fusion-or-gutter. gutter = self.toGutterCheck( self.currentOptions[ optionName ] ); // Check each dependent option for that id. passedArray = self.buildPassedArray( dependentOn, gutter.check ); // Show / Hide option. if ( gutter.sequence || gutter.single ) { show = self.checkGutterOptionVisibility( gutter.sequence, passedArray, gutter.single ); } else { show = self.checkTOVisibility( passedArray ); } self.hideShowOption( show, optionName, self.$targetEl ); // Process children jQuery.each( self.dependencies[ optionName ], function( childIndex, childValue ) { childOptionName = childValue.option; childDependencies = self.currentOptions[ childOptionName ][ self.dependencyKey ]; show = false; childGutter = {}; childPassedArray = []; // Check for fusion-or-gutter. childGutter = self.toGutterCheck( self.currentOptions[ childOptionName ] ); // Check each dependent option for that id. childPassedArray = self.buildPassedArray( childDependencies, childGutter.check ); // Show / Hide option. if ( childGutter.sequence || childGutter.single ) { show = self.checkGutterOptionVisibility( childGutter.sequence, childPassedArray, childGutter.single ); } else { show = self.checkTOVisibility( childPassedArray ); } // Show / Hide option self.hideShowOption( show, childOptionName ); } ); } else if ( 'PO' === self.type || 'EO' === self.type ) { // Check each dependent option for that id. passedArray = self.buildPassedArray( dependentOn, gutter.check ); // Show / Hide option. show = self.checkOptionVisibility( passedArray, value ); self.hideShowOption( show, optionName ); } } ); }, /** * Compares option value with dependency value to determine if it passes or not. * * @since 2.0.0 * @param {mixed} [parentValue] The first value in the check. * @param {mixed} [checkValue] The 2nd value in the check. * @param {string} [operation] The check we want to perform. * @return {boolean} */ doesTestPass: function( parentValue, checkValue, operation ) { var show = false, arr, media; // If dependencies are disabled, always show the option. if ( 'undefined' !== FusionApp.settings.dependencies_status && 0 === parseInt( FusionApp.settings.dependencies_status ) ) { return true; } switch ( operation ) { case '=': case '==': case 'equals': if ( Array.isArray( parentValue ) ) { jQuery( parentValue[ 0 ] ).each( function( idx, val ) { if ( Array.isArray( checkValue ) ) { jQuery( checkValue ).each( function( i, v ) { if ( val == v ) { // jshint ignore: line show = true; return true; } } ); } else if ( val == checkValue ) { // jshint ignore: line show = true; return true; } } ); } else if ( Array.isArray( checkValue ) ) { jQuery( checkValue ).each( function( i, v ) { if ( parentValue == v ) { // jshint ignore: line show = true; } } ); } else if ( parentValue == checkValue ) { // jshint ignore: line show = true; } break; case '!=': case 'not': if ( Array.isArray( parentValue ) ) { jQuery( parentValue ).each( function( idx, val ) { if ( Array.isArray( checkValue ) ) { jQuery( checkValue ).each( function( i, v ) { if ( val != v ) { // jshint ignore: line show = true; return true; } } ); } else if ( val != checkValue ) { // jshint ignore: line show = true; return true; } } ); } else if ( Array.isArray( checkValue ) ) { jQuery( checkValue ).each( function( i, v ) { if ( parentValue != v ) { // jshint ignore: line show = true; } } ); } else if ( parentValue != checkValue ) { // jshint ignore: line show = true; } break; case '>': case 'greater': case 'is_larger': if ( parseFloat( parentValue ) > parseFloat( checkValue ) ) { show = true; } break; case '>=': case 'greater_equal': case 'is_larger_equal': if ( parseFloat( parentValue ) >= parseFloat( checkValue ) ) { show = true; } break; case '<': case 'less': case 'is_smaller': if ( parseFloat( parentValue ) < parseFloat( checkValue ) ) { show = true; } break; case '<=': case 'less_equal': case 'is_smaller_equal': if ( parseFloat( parentValue ) <= parseFloat( checkValue ) ) { show = true; } break; case 'contains': if ( jQuery.isPlainObject( parentValue ) ) { checkValue = Object.keys( checkValue ).map( function( key ) { return [ key, checkValue[ key ] ]; } ); parentValue = arr; } if ( jQuery.isPlainObject( checkValue ) ) { arr = Object.keys( checkValue ).map( function( key ) { return checkValue[ key ]; } ); checkValue = arr; } if ( Array.isArray( checkValue ) ) { jQuery( checkValue ).each( function( idx, val ) { var breakMe = false, toFind = val[ 0 ], findVal = val[ 1 ]; jQuery( parentValue ).each( function( i, v ) { var toMatch = v[ 0 ], matchVal = v[ 1 ]; if ( toFind === toMatch ) { if ( findVal == matchVal ) { // jshint ignore: line show = true; breakMe = true; return false; } } } ); if ( true === breakMe ) { return false; } } ); } else if ( -1 !== parentValue.toString().indexOf( checkValue ) ) { show = true; } break; case 'doesnt_contain': case 'not_contain': if ( jQuery.isPlainObject( parentValue ) ) { arr = Object.keys( parentValue ).map( function( key ) { return parentValue[ key ]; } ); parentValue = arr; } if ( jQuery.isPlainObject( checkValue ) ) { arr = Object.keys( checkValue ).map( function( key ) { return checkValue[ key ]; } ); checkValue = arr; } if ( Array.isArray( checkValue ) ) { jQuery( checkValue ).each( function( idx, val ) { if ( -1 === parentValue.toString().indexOf( val ) ) { show = true; } } ); } else if ( -1 === parentValue.toString().indexOf( checkValue ) ) { show = true; } break; case 'is_empty_or': if ( '' === parentValue || parentValue == checkValue ) { // jshint ignore: line show = true; } break; case 'not_empty_and': if ( '' !== parentValue && parentValue != checkValue ) { // jshint ignore: line show = true; } break; case 'is_empty': case 'empty': case '!isset': if ( ! parentValue || '' === parentValue || null === parentValue ) { show = true; } break; case 'not_empty': case '!empty': case 'isset': if ( parentValue && '' !== parentValue && null !== parentValue ) { show = true; } break; case 'is_media': if ( parentValue ) { media = 'string' === typeof parentValue ? JSON.parse( parentValue ) : parentValue; if ( media && media.url ) { show = true; } } break; case 'is_transparent': if ( parentValue && 0 === jQuery.AWB_Color( parentValue ).alpha() ) { show = true; } break; case 'is_not_transparent': if ( parentValue && 0 !== jQuery.AWB_Color( parentValue ).alpha() ) { show = true; } break; } return show; }, /** * Check page options & element options visibility. * * @since 2.0.0 * @return bool */ checkOptionVisibility: function( passedArray, value ) { var visible = false; if ( -1 === jQuery.inArray( false, passedArray ) && _.isUndefined( value.or ) ) { visible = true; } else if ( -1 !== jQuery.inArray( true, passedArray ) && ! _.isUndefined( value.or ) ) { visible = true; } return visible; }, /** * Check Global Option visibility. * * @since 2.0.0 * @return bool */ checkTOVisibility: function( passedArray ) { var visible = false; if ( -1 === jQuery.inArray( 0, passedArray ) ) { visible = true; } return visible; }, /** * Check option visibility for fusion-or-gutter options. * * @since 2.0.0 * @return bool */ checkGutterOptionVisibility: function( gutterSequence, passedArray, singleOrGutter ) { var overallDependencies = [], total = 0, show = false, i; if ( singleOrGutter ) { overallDependencies = passedArray; } else if ( 0 < gutterSequence.length ) { for ( i = 0; i < passedArray.length; i++ ) { if ( 0 === i ) { overallDependencies.push( passedArray[ i ] ); } else if ( 'and' === gutterSequence[ i - 1 ] ) { overallDependencies[ overallDependencies.length - 1 ] = overallDependencies[ overallDependencies.length - 1 ] * passedArray[ i ]; } else { overallDependencies.push( passedArray[ i ] ); } } } for ( i = 0; i < overallDependencies.length; i++ ) { total += overallDependencies[ i ]; } if ( 1 <= total ) { show = true; } else { show = false; } show = Boolean( show ); return show; }, /** * Convert option values. * * @since 2.0.0 * @return string */ fixPoToValue: function( value ) { switch ( value ) { case 'hide': case '0': value = 'no'; break; case 'show': case '1': value = 'yes'; break; } return value; }, /** * Convert option values. * * @since 3.7.0 * @return string */ fixEoToValue: function( value ) { switch ( value ) { case '0': value = 'no'; break; case '1': value = 'yes'; break; } return value; }, /** * Process element option default values. * * @since 2.0.0 * @return {void} */ processEoDefaults: function( view ) { var elementType = view.model.get( 'element_type' ), elementDefaults = FusionApp.elementDefaults[ elementType ], toValue; if ( 'object' === typeof elementDefaults && 'object' === typeof elementDefaults.settings_to_params ) { _.each( elementDefaults.settings_to_params, function( eo, to ) { var option, type = '', subset = ''; toValue = FusionApp.settings[ to ]; // Looking for sub value, get parent only. if ( -1 !== to.indexOf( '[' ) ) { toValue = to.split( '[' )[ 0 ]; subset = to.split( '[' )[ 1 ].replace( ']', '' ); toValue = FusionApp.settings[ toValue ]; } // Get param if its an object. if ( 'object' === typeof eo ) { eo = eo.param; } option = view.$el.find( '#' + eo ).closest( '.fusion-builder-option' ); if ( option.length ) { type = jQuery( option ).attr( 'class' ).split( ' ' ).pop(); } if ( ! jQuery( option ).hasClass( 'fusion-builder-option range' ) ) { toValue = FusionApp.sidebarView.fixToValueName( to, toValue, type, subset ); view.$el.find( '.description [data-fusion-option="' + to + '"]' ).html( toValue ); } } ); } }, /** * Process page option default values. * * @since 2.0.0 * @return {void} */ processPoDefaults: function( view ) { var thisEl = view.$el, toValue, poValue, subset, type = '', option; _.each( FusionApp.settingsPoTo, function( to, po ) { toValue = FusionApp.settings[ to ]; if ( ! _.isUndefined( toValue ) ) { option = thisEl.find( '[data-option-id="' + po + '"]' ); poValue = option.val(); if ( option.length ) { type = jQuery( option ).attr( 'class' ).replace( /\s+$/, '' ).split( ' ' ).pop(); } subset = jQuery( option ).data( 'subset' ); if ( 'default' !== poValue ) { toValue = FusionApp.sidebarView.fixToValueName( to, toValue, type, subset ); option.find( '.description a' ).html( toValue ); } } } ); } } ); }( jQuery ) );
Cokiee Shell Web 1.0, Coded By Razor
Neueste Kommentare