2018-01-26 15:50:15 +01:00

81 lines
2.4 KiB
JavaScript

/* globals jQuery, sowbForms, confirm, soWidgetsVC */
var sowbForms = window.sowbForms || {};
sowbForms.setupVcWidgetForm = function () {
var $ = jQuery;
var $widgetDropdown = $( '[name="so_widget_class"]' );
var $formContainer = $( '.siteorigin_widget_form_container' );
var formDirty = false;
$formContainer.on( 'change', '.siteorigin-widget-field', function () {
formDirty = true;
var widgetData = sowbForms.getWidgetFormValues( $formContainer );
var widgetClass = $widgetDropdown.val();
var jsonString = JSON.stringify( { widget_class: widgetClass, widget_data: widgetData } );
jsonString = jsonString.replace( /\\/g, '\\\\' );
$( '[name="so_widget_data"]' ).val( jsonString );
} );
var prevWidget;
$widgetDropdown.mousedown( function () {
prevWidget = $widgetDropdown.find( 'option:selected' );
} );
$widgetDropdown.on( 'change', function ( event ) {
if ( formDirty && !confirm( soWidgetsVC.confirmChangeWidget ) ) {
prevWidget.attr( 'selected', true );
return;
}
formDirty = false;
var widget = $widgetDropdown.val();
var data = {
'action': 'sowb_vc_widget_render_form',
'widget': widget,
};
$.post(
soWidgetsVC.ajaxUrl,
data,
function ( result ) {
$formContainer.html( result );
// To ensure data is updated.
$formContainer.trigger( 'change' );
},
'html'
);
} );
vc.atts.sowb_json_escaped = {
parse: function ( param ) {
var $field = this.content().find( '.wpb_vc_param_value[name=' + param.param_name + ']' );
// We double encode in the front end to prevent accidental decoding when the content is set on the
// WP visual editor.
return _.escape( _.escape( $field.val().toString() ).replace( /\[/g, '[' ).replace( /\]/g, ']' ) );
},
render: function ( param, value ) {
return _.unescape( _.unescape( value ) ).replace( /[/g, '[' ).replace( /]/g, ']' );
}
};
vc.events.on( "shortcodeView:updated:siteorigin_widget_vc", function () {
if ( typeof vc.frame_window !== 'undefined' && typeof vc.frame_window.sowb !== 'undefined' ) {
// Have to use jQuery from iframe window for triggered events to be detected there.
var $ = vc.frame_window.jQuery;
var sowb = vc.frame_window.sowb;
// Trigger Widgets Bundle widgets to setup
$( sowb ).trigger( 'setup_widgets' );
}
} );
};
jQuery( function ( $ ) {
sowbForms.setupVcWidgetForm();
} );
window.sowbForms = sowbForms;