/* globals FusionPageBuilderApp, FusionApp */ var FusionPageBuilder = FusionPageBuilder || {}; FusionPageBuilder.options = FusionPageBuilder.options || {}; function fusionHubSpotConsentMapOption( $element ) { var self = this; // Cut off check. if ( 'object' !== typeof FusionApp.data.hubspot || 'undefined' === typeof FusionApp.data.hubspot.preferences ) { return; } // Set reusable vars. this.$base = $element; this.preferences = FusionApp.data.hubspot.preferences; this.$el = $element.find( '.hubspot_consent_map .fusion-mapping' ); this.options = false; this.$input = $element.find( 'input#hubspot_consent_map' ); this.values = {}; try { self.values = JSON.parse( self.$input.val() ); } catch ( e ) { console.warn( 'Error triggered - ' + e ); } // Initial build. this.updateMap(); // Add listeners. FusionPageBuilderApp.collection.on( 'change reset add remove', function() { self.updateMap(); } ); this.$el.on( 'change', 'select', function() { self.updateValues(); } ); } fusionHubSpotConsentMapOption.prototype.updateValues = function() { var values = {}; this.$el.find( 'select' ).each( function() { values[ jQuery( this ).attr( 'name' ) ] = jQuery( this ).val(); } ); this.values = values; this.$input.val( JSON.stringify( values ) ); setTimeout( () => { this.$input.trigger( 'change' ); }, 10 ); }; fusionHubSpotConsentMapOption.prototype.updateMap = function() { var self = this, options = this.getOptions(), $legitOption = self.$base.find( '[data-option-id="hubspot_legitimate_interest"] .fusion-select-options' ); if ( 'object' !== typeof FusionPageBuilderApp.collection ) { self.$el.empty(); return; } if ( ! self.$el.find( '#fusionmap-data' ).length ) { self.$el.append( '
' ); } else { self.$el.find( '#fusionmap-data' ).closest( '.form-input-entry' ).html( '
' ); } // Make sure value is selected. if ( 'string' === typeof self.values.preference_data ) { self.$el.find( '#fusionmap-data' ).val( self.values.preference_data ); } // Add entries. _.each( this.preferences, function( preference ) { // If we don't already have this, add it. if ( ! self.$el.find( '#fusionmap-' + preference.id ).length ) { self.$el.append( '
' ); } else { self.$el.find( '#fusionmap-' + preference.id ).html( '' + options ); } // Make sure value is selected. if ( 'string' === typeof self.values[ 'preference_' + preference.id ] ) { self.$el.find( '#fusionmap-' + preference.id ).val( self.values[ 'preference_' + preference.id ] ); } } ); // Update the legit option select. $legitOption.find( '.fusion-select-label:not([data-value=""])' ).remove(); $legitOption.append( this.getStyledOptions() ); $legitOption.find( '[data-value="' + self.$base.find( '#hubspot_legitimate_interest' ).val() + '"]' ).addClass( 'fusion-option-selected' ); $legitOption.closest( '.select' ).find( '.fusion-select-preview' ).text( $legitOption.find( '.fusion-option-selected' ).text() ); }; fusionHubSpotConsentMapOption.prototype.getOptions = function() { var formElements = false, options = ''; // Filter map to only get form elements. formElements = _.filter( FusionPageBuilderApp.collection.models, function( element ) { var params = element.get( 'params' ); if ( 'object' !== typeof params ) { return false; } return 'fusion_form_consent' === element.get( 'element_type' ) && ( 'string' === typeof params.label || 'string' === typeof params.name ); } ); if ( ! formElements.length ) { return options; } _.each( formElements, function( formElement ) { var params = formElement.get( 'params' ), inputLabel = 'string' === typeof params.label && '' !== params.label ? params.label : params.name; options += ''; } ); this.options = options; return this.options; }; fusionHubSpotConsentMapOption.prototype.getStyledOptions = function() { var formElements = false, options = ''; // Filter map to only get form elements. formElements = _.filter( FusionPageBuilderApp.collection.models, function( element ) { var params = element.get( 'params' ); if ( 'object' !== typeof params ) { return false; } return 'fusion_form_consent' === element.get( 'element_type' ) && ( 'string' === typeof params.label || 'string' === typeof params.name ); } ); if ( ! formElements.length ) { return options; } _.each( formElements, function( formElement ) { var params = formElement.get( 'params' ), inputLabel = 'string' === typeof params.label && '' !== params.label ? params.label : params.name; options += ''; } ); return options; }; FusionPageBuilder.options.fusionHubSpotConsentMap = { /** * Run actions on load. * * @since 3.1 * * @return {void} */ optionHubSpotConsentMap: function( $element ) { if ( 'undefined' === typeof this.hubspotConsentMap ) { this.hubspotConsentMap = new fusionHubSpotConsentMapOption( $element ); } } };