File Manager
/* global GrunionFB_i18n: true, FB, ajax_nonce_shortcode, ajax_nonce_json, ajaxurl, postId */
if ( ! window.FB ) {
window.FB = {};
}
GrunionFB_i18n = jQuery.extend(
{
nameLabel: 'Name',
emailLabel: 'Email',
urlLabel: 'Website',
commentLabel: 'Comment',
newLabel: 'New Field',
optionsLabel: 'Options',
optionLabel: 'Option',
firstOptionLabel: 'First option',
problemGeneratingForm:
"Oops, there was a problem generating your form. You'll likely need to try again.",
moveInstructions: 'Drag up or down\nto re-arrange',
moveLabel: 'move',
editLabel: 'edit',
savedMessage: 'Saved successfully',
requiredLabel: '(required)',
exitConfirmMessage:
'Are you sure you want to exit the form editor without saving? Any changes you have made will be lost.',
maxNewFields: 5,
invalidEmail: ' is an invalid email address.',
},
GrunionFB_i18n
);
GrunionFB_i18n.moveInstructions = GrunionFB_i18n.moveInstructions.replace( '\n', '<br />' );
FB.span = jQuery( '<span>' );
FB.esc_html = function ( string ) {
return FB.span.text( string ).html();
};
FB.esc_attr = function ( string ) {
string = FB.esc_html( string );
return string.replace( '"', '"' ).replace( "'", ''' );
};
FB.ContactForm = ( function () {
var fbForm = {
// Main object that generated shortcode via AJAX call
action: 'grunion_shortcode',
_ajax_nonce: ajax_nonce_shortcode,
to: '',
subject: '',
fields: {},
};
var defaultFields = {
name: {
label: GrunionFB_i18n.nameLabel,
type: 'name',
required: true,
options: [],
order: '1',
},
email: {
label: GrunionFB_i18n.emailLabel,
type: 'email',
required: true,
options: [],
order: '2',
},
url: {
label: GrunionFB_i18n.urlLabel,
type: 'url',
required: false,
options: [],
order: '3',
},
comment: {
label: GrunionFB_i18n.commentLabel,
type: 'textarea',
required: true,
options: [],
order: '4',
},
};
var debug = false; // will print errors to log if true
var grunionNewCount = 0; // increment for new fields
var maxNewFields = GrunionFB_i18n.maxNewFields; // See filter in ../grunion-form-view.php
var optionsCache = {};
var optionsCount = 0; // increment for options
var shortcode;
function addField() {
try {
grunionNewCount++;
if ( grunionNewCount <= maxNewFields ) {
// Add to preview
jQuery( '#fb-extra-fields' ).append(
'<div id="fb-new-field' +
grunionNewCount +
'" fieldid="' +
grunionNewCount +
'" class="fb-new-fields"><div class="fb-fields"><div id="' +
grunionNewCount +
'" class="fb-remove"></div><label fieldid="' +
grunionNewCount +
'" for="fb-field' +
grunionNewCount +
'"><span class="label-text">' +
GrunionFB_i18n.newLabel +
'</span> </label><input type="text" id="fb-field' +
grunionNewCount +
'" disabled="disabled" /></div></div>'
);
// Add to form object
fbForm.fields[ grunionNewCount ] = {
label: GrunionFB_i18n.newLabel,
type: 'text',
required: false,
options: [],
order: '5',
};
if ( grunionNewCount === maxNewFields ) {
jQuery( '#fb-new-field' ).hide();
}
// Reset form for this new field
optionsCount = 0;
optionsCache = {};
jQuery( '#fb-new-options' ).html(
'<label for="fb-option0">' +
GrunionFB_i18n.optionsLabel +
'</label><input type="text" id="fb-option0" optionid="0" value="' +
GrunionFB_i18n.firstOptionLabel +
'" class="fb-options" />'
);
jQuery( '#fb-options' ).hide();
jQuery( '#fb-new-label' ).val( GrunionFB_i18n.newLabel );
jQuery( '#fb-new-type' ).val( 'text' );
jQuery( '#fb-field-id' ).val( grunionNewCount );
setTimeout( function () {
jQuery( '#fb-new-label' ).focus().select();
}, 100 );
} else {
jQuery( '#fb-new-field' ).hide();
}
} catch ( e ) {
if ( debug ) {
console.log( 'addField(): ' + e );
}
}
}
function addOption() {
try {
optionsCount = jQuery( '#fb-new-options .fb-options' ).length;
var thisId = jQuery( '#fb-field-id' ).val();
var thisType = jQuery( '#fb-new-type' ).val();
if ( thisType === 'radio' ) {
// Add to right col
jQuery( '#fb-new-options' ).append(
'<div id="fb-option-box-' +
optionsCount +
'" class="fb-new-fields"><span optionid="' +
optionsCount +
'" class="fb-remove-option"></span><label></label><input type="text" id="fb-option' +
optionsCount +
'" optionid="' +
optionsCount +
'" value="' +
GrunionFB_i18n.optionLabel +
'" class="fb-options" /><div>'
);
// Add to preview
jQuery( '#fb-new-field' + thisId + ' .fb-fields' ).append(
'<div id="fb-radio-' +
thisId +
'-' +
optionsCount +
'"><input type="radio" disabled="disabled" id="fb-field' +
thisId +
'" name="radio-' +
thisId +
'" /><span>' +
GrunionFB_i18n.optionLabel +
'</span><div class="clear"></div></div>'
);
} else if ( 'checkbox-multiple' === thisType ) {
// Add to right col
jQuery( '#fb-new-options' ).append(
'<div id="fb-option-box-' +
optionsCount +
'" class="fb-new-fields"><span optionid="' +
optionsCount +
'" class="fb-remove-option"></span><label></label><input type="text" id="fb-option' +
optionsCount +
'" optionid="' +
optionsCount +
'" value="' +
GrunionFB_i18n.optionLabel +
'" class="fb-options" /><div>'
);
// Add to preview
jQuery( '#fb-new-field' + thisId + ' .fb-fields' ).append(
'<div id="fb-checkbox-multiple-' +
thisId +
'-' +
optionsCount +
'"><input type="checkbox" disabled="disabled" id="fb-field' +
thisId +
'" name="checkbox-multiple-' +
thisId +
'" /><span>' +
GrunionFB_i18n.optionLabel +
'</span><div class="clear"></div></div>'
);
} else {
// Add to right col
jQuery( '#fb-new-options' ).append(
'<div id="fb-option-box-' +
optionsCount +
'" class="fb-new-fields"><span optionid="' +
optionsCount +
'" class="fb-remove-option"></span><label></label><input type="text" id="fb-option' +
optionsCount +
'" optionid="' +
optionsCount +
'" value="" class="fb-options" /><div>'
);
// Add to preview
jQuery( '#fb-field' + thisId ).append(
'<option id="fb-' +
thisId +
'-' +
optionsCount +
'" value="' +
thisId +
'-' +
optionsCount +
'"></option>'
);
}
// Add to fbForm object
fbForm.fields[ thisId ].options[ optionsCount ] = '';
// Add focus to new field
jQuery( '#fb-option' + optionsCount )
.focus()
.select();
} catch ( e ) {
if ( debug ) {
console.log( 'addOption(): ' + e );
}
}
}
function buildPreview() {
try {
if ( fbForm.to ) {
jQuery( '#fb-field-my-email' ).val( fbForm.to );
}
if ( fbForm.subject ) {
jQuery( '#fb-field-subject' ).val( fbForm.subject );
}
// Loop over and add fields
jQuery.each( fbForm.fields, function ( index, value ) {
jQuery( '#fb-extra-fields' ).before(
'<div class="fb-new-fields ui-state-default" fieldid="' +
index +
'" id="fb-new-field' +
index +
'"><div class="fb-fields"></div></div>'
);
jQuery( '#fb-field-id' ).val( index );
optionsCache[ index ] = {};
optionsCache[ index ].options = [];
if (
'radio' === value.type ||
'select' === value.type ||
'checkbox-multiple' === value.type
) {
jQuery.each( value.options, function ( i, value ) {
optionsCache[ index ].options[ i ] = value;
} );
}
updateType( value.type, value.label, value.required );
} );
} catch ( e ) {
if ( debug ) {
console.log( 'buildPreview(): ' + e );
}
}
}
function customOptions( id, thisType ) {
try {
var thisOptions = '';
for ( var i = 0; i < optionsCache[ id ].options.length; i++ ) {
if ( optionsCache[ id ].options[ i ] !== undefined ) {
if ( thisType === 'radio' ) {
thisOptions =
thisOptions +
'<div id="fb-radio-' +
id +
'-' +
i +
'"><input type="radio" id="fb-field' +
id +
'" name="radio-' +
id +
'" /><span>' +
FB.esc_html( optionsCache[ id ].options[ i ] ) +
'</span><div class="clear"></div></div>';
} else if ( 'checkbox-multiple' === thisType ) {
thisOptions =
thisOptions +
'<div id="fb-checkbox-multiple-' +
id +
'-' +
i +
'"><input type="checkbox" id="fb-field' +
id +
'" name="checkbox-multiple-' +
id +
'" /><span>' +
FB.esc_html( optionsCache[ id ].options[ i ] ) +
'</span><div class="clear"></div></div>';
} else {
thisOptions =
thisOptions +
'<option id="fb-' +
id +
'-' +
i +
'" value="' +
id +
'-' +
i +
'">' +
FB.esc_html( optionsCache[ id ].options[ i ] ) +
'</option>';
}
}
}
return thisOptions;
} catch ( e ) {
if ( debug ) {
console.log( 'customOptions(): ' + e );
}
}
}
function deleteField( that ) {
try {
grunionNewCount--;
var thisId = that.attr( 'id' );
delete fbForm.fields[ thisId ];
jQuery( '#' + thisId )
.parent()
.parent()
.remove();
if ( grunionNewCount <= maxNewFields ) {
jQuery( '#fb-new-field' ).show();
}
} catch ( e ) {
if ( debug ) {
console.log( 'deleteField(): ' + e );
}
}
}
function editField( that ) {
try {
scroll( 0, 0 );
setTimeout( function () {
jQuery( '#fb-new-label' ).focus().select();
}, 100 );
var thisId = that.parent().attr( 'fieldid' );
loadFieldEditor( thisId );
} catch ( e ) {
if ( debug ) {
console.log( 'editField(): ' + e );
}
}
}
function grabShortcode() {
try {
// Takes fbForm object and returns shortcode syntax
jQuery.post( ajaxurl, fbForm, function ( response ) {
shortcode = response;
} );
} catch ( e ) {
alert( GrunionFB_i18n.problemGeneratingForm );
if ( debug ) {
console.log( 'grabShortcode(): ' + e );
}
}
}
function hideDesc() {
jQuery( '#fb-desc' ).hide();
jQuery( '#fb-add-field' ).show();
}
function hidePopup() {
try {
// copied from wp-includes/js/thickbox/thickbox.js
jQuery( '#TB_imageOff', window.parent.document ).unbind( 'click' );
jQuery( '#TB_closeWindowButton', window.parent.document ).unbind( 'click' );
jQuery( '#TB_window', window.parent.document ).fadeOut( 'fast' );
jQuery( 'body', window.parent.document ).removeClass( 'modal-open' );
jQuery( '#TB_window,#TB_overlay,#TB_HideSelect', window.parent.document )
.trigger( 'unload' )
.unbind()
.remove();
jQuery( '#TB_load', window.parent.document ).remove();
if ( typeof window.parent.document.body.style.maxHeight === 'undefined' ) {
//if IE 6
jQuery( 'body', 'html', window.parent.document ).css( { height: 'auto', width: 'auto' } );
jQuery( 'html', window.parent.document ).css( 'overflow', '' );
}
window.parent.document.onkeydown = '';
window.parent.document.onkeyup = '';
return false;
} catch ( e ) {
if ( debug ) {
console.log( 'hidePopup(): ' + e );
}
}
}
function hideShowEditLink( whichType, that ) {
try {
if ( whichType === 'show' ) {
// Prevents showing links twice
if ( jQuery( '.fb-edit-field' ).is( ':visible' ) ) {
jQuery( '.fb-edit-field' ).remove();
}
that
.find( 'label' )
.prepend(
'<span class="right fb-edit-field" style="font-weight: normal;"><a href="" class="fb-reorder"><div style="display: none;">' +
GrunionFB_i18n.moveInstructions +
'</div>' +
GrunionFB_i18n.moveLabel +
'</a> <span style="color: #C7D8DE;">|</span> <a href="" class="fb-edit">' +
GrunionFB_i18n.editLabel +
'</a></span>'
);
} else {
jQuery( '.fb-edit-field' ).remove();
}
} catch ( e ) {
if ( debug ) {
console.log( 'hideShowEditLink(): ' + e );
}
}
}
function loadFieldEditor( id ) {
try {
var thisType = fbForm.fields[ id ].type;
jQuery( '#fb-options' ).hide();
// Reset hidden field ID
jQuery( '#fb-field-id' ).val( id );
// Load label
jQuery( '#fb-new-label' ).val( fbForm.fields[ id ].label );
// Load type
jQuery( '#fb-new-type' ).val( fbForm.fields[ id ].type );
// Load required
if ( fbForm.fields[ id ].required ) {
jQuery( '#fb-new-required' ).prop( 'checked', true );
} else {
jQuery( '#fb-new-required' ).prop( 'checked', false );
}
// Load options if there are any
if ( 'select' === thisType || 'radio' === thisType || 'checkbox-multiple' === thisType ) {
var thisOptions = fbForm.fields[ id ].options;
jQuery( '#fb-options' ).show();
jQuery( '#fb-new-options' ).html( '' ); // Clear it all out
for ( var i = 0; i < thisOptions.length; i++ ) {
if ( thisOptions[ i ] !== undefined ) {
if ( thisType === 'radio' ) {
jQuery( '#fb-new-options' ).append(
'<div id="fb-option-box-' +
i +
'" class="fb-new-fields"><span optionid="' +
i +
'" class="fb-remove-option"></span><label></label><input type="text" id="fb-option' +
i +
'" optionid="' +
i +
'" value="' +
FB.esc_attr( fbForm.fields[ id ].options[ i ] ) +
'" class="fb-options" /><div>'
);
} else {
jQuery( '#fb-new-options' ).append(
'<div id="fb-option-box-' +
i +
'" class="fb-new-fields"><span optionid="' +
i +
'" class="fb-remove-option"></span><label></label><input type="text" id="fb-option' +
i +
'" optionid="' +
i +
'" value="' +
FB.esc_attr( fbForm.fields[ id ].options[ i ] ) +
'" class="fb-options" /><div>'
);
}
}
}
}
// Load editor & hide description
hideDesc();
} catch ( e ) {
if ( debug ) {
console.log( 'loadFieldEditor(): ' + e );
}
}
}
function parseShortcode( data ) {
try {
// Clean up fields by resetting them
fbForm.fields = {};
// Add new fields
if ( ! data ) {
fbForm.fields = defaultFields;
} else {
jQuery.each( data.fields, function ( index, value ) {
if ( 1 === parseInt( value.required, 10 ) ) {
value.required = 'true';
}
fbForm.fields[ index ] = value;
} );
fbForm.to = data.to;
fbForm.subject = data.subject;
}
} catch ( e ) {
if ( debug ) {
console.log( 'parseShortcode(): ' + e );
}
}
}
function removeOption( optionId ) {
try {
var thisId = jQuery( '#fb-field-id' ).val();
var thisVal = jQuery( '#fb-option' + optionId ).val();
var thisType = jQuery( '#fb-new-type' ).val();
// Remove from right
jQuery( '#fb-option-box-' + optionId ).remove();
// Remove from preview
if ( thisType === 'radio' ) {
jQuery( '#fb-radio-' + thisId + '-' + optionId ).remove();
} else if ( 'checkbox-multiple' === thisType ) {
jQuery( '#fb-checkbox-multiple-' + thisId + '-' + optionId ).remove();
} else {
jQuery( '#fb-' + thisId + '-' + optionId ).remove();
}
// Remove from fbForm object
var idx = fbForm.fields[ thisId ].options.indexOf( thisVal );
if ( idx !== -1 ) {
fbForm.fields[ thisId ].options.splice( idx, 1 );
}
} catch ( e ) {
if ( debug ) {
console.log( 'removeOption(): ' + e );
}
}
}
function removeOptions() {
try {
var thisId = jQuery( '#fb-field-id' ).val();
jQuery( '#fb-options' ).hide();
if ( optionsCache[ thisId ] === undefined ) {
optionsCache[ thisId ] = {};
}
optionsCache[ thisId ].options = fbForm.fields[ thisId ].options; // Save options in case they change their mind
fbForm.fields[ thisId ].options = []; // Removes all options
} catch ( e ) {
if ( debug ) {
console.log( 'removeOptions(): ' + e );
}
}
}
function sendShortcodeToEditor() {
try {
// Serialize fields
jQuery( 'div#sortable div.fb-new-fields' ).each( function ( index ) {
var thisId = jQuery( this ).attr( 'fieldid' );
fbForm.fields[ thisId ].order = index;
} );
// Export to WYSIWYG editor
jQuery.post( ajaxurl, fbForm, function ( response ) {
var isVisual = jQuery( '#edButtonPreview', window.parent.document ).hasClass( 'active' );
/* WP 3.3+ */
if ( ! isVisual ) {
isVisual = jQuery( '#wp-content-wrap', window.parent.document ).hasClass( 'tmce-active' );
}
var win = window.dialogArguments || opener || parent || top;
var currentCode;
if ( isVisual ) {
currentCode = win.tinyMCE.activeEditor.getContent();
} else {
currentCode = jQuery( '#editorcontainer textarea', window.parent.document ).val();
/* WP 3.3+ */
if ( typeof currentCode !== 'string' ) {
currentCode = jQuery( '.wp-editor-area', window.parent.document ).val();
}
}
var regexp = new RegExp(
'\\[contact-form\\b.*?\\/?\\](?:[\\s\\S]+?\\[\\/contact-form\\])?'
);
// Remove new lines that cause BR tags to show up
response = response.replace( /\n/g, ' ' );
// Convert characters to comma
response = response.replace( /%26#x002c;/g, ',' );
// Add new shortcode
if ( currentCode.match( regexp ) ) {
if ( isVisual ) {
win.tinyMCE.activeEditor.execCommand(
'mceSetContent',
false,
currentCode.replace( regexp, response )
);
} else {
// looks like the visual editor is disabled,
// update the contents of the post directly
jQuery( '#content', window.parent.document ).val(
currentCode.replace( regexp, response )
);
}
} else {
try {
win.send_to_editor( response );
} catch ( e ) {
if ( isVisual ) {
win.tinyMCE.activeEditor.execCommand( 'mceInsertContent', false, response );
} else {
// looks like the visual editor is disabled,
// update the contents of the post directly
jQuery( '#content', window.parent.document ).val( currentCode + response );
}
}
}
hidePopup();
} );
} catch ( e ) {
if ( debug ) {
console.log( 'sendShortcodeToEditor(): ' + e );
}
}
}
function showDesc() {
jQuery( '#fb-desc' ).show();
jQuery( '#fb-add-field' ).hide();
}
function showAndHideMessage( message ) {
try {
var newMessage = ! message ? GrunionFB_i18n.savedMessage : message;
jQuery( '#fb-success' ).text( newMessage );
jQuery( '#fb-success' ).slideDown( 'fast' );
setTimeout( function () {
jQuery( '#fb-success' ).slideUp( 'fast' );
}, 2500 );
} catch ( e ) {
if ( debug ) {
console.log( 'showAndHideMessage(): ' + e );
}
}
}
function switchTabs( whichType ) {
try {
if ( whichType === 'preview' ) {
if ( ! validateEmails( jQuery( '#fb-field-my-email' ).val() ) ) {
return;
}
jQuery( '#tab-preview a' ).addClass( 'current' );
jQuery( '#tab-settings a' ).removeClass( 'current' );
jQuery( '#fb-preview-form, #fb-desc' ).show();
jQuery( '#fb-email-settings, #fb-email-desc' ).hide();
showAndHideMessage( GrunionFB_i18n.savedMessage );
} else {
jQuery( '#tab-preview a' ).removeClass( 'current' );
jQuery( '#tab-settings a' ).addClass( 'current' );
jQuery( '#fb-preview-form, #fb-desc, #fb-add-field' ).hide();
jQuery( '#fb-email-settings, #fb-email-desc' ).show();
jQuery( '#fb-field-my-email' ).focus().select();
}
} catch ( e ) {
if ( debug ) {
console.log( 'switchTabs(): ' + e );
}
}
}
function validateEmails( emails ) {
// Field is allowed to be empty :)
if ( 0 === emails.length ) {
return true;
}
var $e,
emailList = emails.split( ',' );
for ( $e = 0; $e < emailList.length; $e++ ) {
if ( false === validateEmail( emailList[ $e ] ) ) {
alert( emailList[ $e ] + GrunionFB_i18n.invalidEmail );
return false;
}
}
return true;
}
/* Uses The Official Standard: RFC 5322 -- http://www.regular-expressions.info/email.html */
function validateEmail( email ) {
var re = /^(?=[a-z0-9@.!#$%&'*+/=?^_`{|}~-]{6,254}$)(?=[a-z0-9.!#$%&'*+/=?^_`{|}~-]{1,64}@)[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:(?=[a-z0-9-]{1,63}\.)[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?=[a-z0-9-]{1,63}$)[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
return re.test( email );
}
function updateLabel() {
try {
var thisId = jQuery( '#fb-field-id' ).val();
var thisLabel = jQuery( '#fb-new-label' ).val();
// Update preview
if ( thisLabel.length === 0 ) {
jQuery( '#fb-new-field' + thisId + ' label .label-text' ).text( GrunionFB_i18n.newLabel );
} else {
jQuery( '#fb-new-field' + thisId + ' label .label-text' ).text( thisLabel );
}
// Update fbForm object
fbForm.fields[ thisId ].label = thisLabel;
} catch ( e ) {
if ( debug ) {
console.log( 'updateLabel(): ' + e );
}
}
}
function updateMyEmail() {
try {
var thisEmail = jQuery( '#fb-field-my-email' ).val();
fbForm.to = thisEmail;
} catch ( e ) {
if ( debug ) {
console.log( 'updateMyEmail(): ' + e );
}
}
}
function updateOption( that ) {
try {
var thisId = jQuery( '#fb-field-id' ).val();
var thisOptionid = that.attr( 'optionid' );
var thisOptionValue = that.val();
var thisType = jQuery( '#fb-new-type' ).val();
// Update preview
if ( thisType === 'radio' ) {
jQuery( '#fb-radio-' + thisId + '-' + thisOptionid + ' span' ).text( thisOptionValue );
} else if ( 'checkbox-multiple' === thisType ) {
jQuery( '#fb-checkbox-multiple-' + thisId + '-' + thisOptionid + ' span' ).text(
thisOptionValue
);
} else {
jQuery( '#fb-' + thisId + '-' + thisOptionid ).text( thisOptionValue );
}
// Update fbForm object
fbForm.fields[ thisId ].options[ thisOptionid ] = thisOptionValue;
} catch ( e ) {
if ( debug ) {
console.log( 'updateOption(): ' + e );
}
}
}
function updateRequired() {
try {
var thisId = jQuery( '#fb-field-id' ).val();
var thisChecked = jQuery( '#fb-new-required' ).is( ':checked' );
// Update object and preview
if ( thisChecked ) {
fbForm.fields[ thisId ].required = true;
jQuery( '#fb-new-field' + thisId + ' label' ).append(
'<span class="label-required">' + GrunionFB_i18n.requiredLabel + '</span>'
);
} else {
fbForm.fields[ thisId ].required = false;
jQuery( '#fb-new-field' + thisId + ' label .label-required' ).remove();
}
} catch ( e ) {
if ( debug ) {
console.log( 'updateRequired(): ' + e );
}
}
}
function updateSubject() {
try {
var thisSubject = jQuery( '#fb-field-subject' ).val();
fbForm.subject = thisSubject;
} catch ( e ) {
if ( debug ) {
console.log( 'updateSubject(): ' + e );
}
}
}
function updateType( thisType, thisLabelText, thisRequired ) {
try {
var thisId = jQuery( '#fb-field-id' ).val();
if ( ! thisType ) {
thisType = jQuery( '#fb-new-type' ).val();
}
if ( ! thisLabelText ) {
thisLabelText = jQuery( '#fb-new-field' + thisId + ' .label-text' ).text();
}
var isRequired = thisRequired
? '<span class="label-required">' + GrunionFB_i18n.requiredLabel + '</span>'
: '';
var thisLabel =
'<label fieldid="' +
thisId +
'" for="fb-field' +
thisId +
'"><span class="label-text">' +
FB.esc_html( thisLabelText ) +
'</span>' +
isRequired +
'</label>';
var thisRadio =
'<input type="radio" name="radio-' +
thisId +
'" id="fb-field' +
thisId +
' "disabled="disabled" />';
var thisRadioLabel =
'<label fieldid="' +
thisId +
'" for="fb-field' +
thisId +
'" class="fb-radio-label"><span class="label-text">' +
FB.esc_html( thisLabelText ) +
'</span>' +
isRequired +
'</label>';
var thisRadioRemove = '<div class="fb-remove fb-remove-small" id="' + thisId + '"></div>';
var thisRemove = '<div class="fb-remove" id="' + thisId + '"></div>';
var thisCheckbox =
'<input type="checkbox" id="fb-field' + thisId + '" "disabled="disabled" />';
var thisCheckboxMultiple =
'<input type="checkbox" id="fb-field' + thisId + '" "disabled="disabled" />';
var thisCheckboxMultipleRemove =
'<div class="fb-remove fb-remove-small" id="' + thisId + '"></div>';
var thisText = '<input type="text" id="fb-field' + thisId + '" "disabled="disabled" />';
var thisTextarea = '<textarea id="fb-field' + thisId + '" "disabled="disabled"></textarea>';
var thisClear = '<div class="clear"></div>';
var thisSelect =
'<select id="fb-field' +
thisId +
'" fieldid="' +
thisId +
'"><option id="fb-' +
thisId +
'-' +
optionsCount +
'" value="' +
thisId +
'-' +
optionsCount +
'">' +
GrunionFB_i18n.firstOptionLabel +
'</option></select>';
switch ( thisType ) {
case 'checkbox':
removeOptions();
jQuery( '#fb-new-field' + thisId + ' .fb-fields' ).html(
thisRadioRemove + thisCheckbox + thisRadioLabel + thisClear
);
break;
case 'checkbox-multiple':
jQuery( '#fb-new-field' + thisId + ' .fb-fields' ).html(
thisLabel +
thisCheckboxMultipleRemove +
'<div fieldid="' +
thisId +
'" id="fb-custom-checkbox-multiple' +
thisId +
'"></div>'
);
if (
optionsCache[ thisId ] !== undefined &&
optionsCache[ thisId ].options.length !== 0
) {
fbForm.fields[ thisId ].options = optionsCache[ thisId ].options;
jQuery( '#fb-custom-checkbox-multiple' + thisId ).append(
customOptions( thisId, thisType )
);
} else {
jQuery( '#fb-new-options' ).html(
'<label for="fb-option0">' +
GrunionFB_i18n.optionsLabel +
'</label><input type="text" id="fb-option0" optionid="0" value="' +
GrunionFB_i18n.firstOptionLabel +
'" class="fb-options" />'
);
jQuery( '#fb-custom-checkbox-multiple' + thisId ).append(
'<div id="fb-checkbox-multiple-' +
thisId +
'-0">' +
thisCheckboxMultiple +
'<span>' +
GrunionFB_i18n.firstOptionLabel +
'</span>' +
thisClear +
'</div>'
);
fbForm.fields[ thisId ].options[ optionsCount ] = GrunionFB_i18n.firstOptionLabel;
}
jQuery( '#fb-options' ).show();
setTimeout( function () {
jQuery( '#fb-option0' ).focus().select();
}, 100 );
break;
case 'email':
removeOptions();
jQuery( '#fb-new-field' + thisId + ' .fb-fields' ).html(
thisRemove + thisLabel + thisText
);
break;
case 'name':
removeOptions();
jQuery( '#fb-new-field' + thisId + ' .fb-fields' ).html(
thisRemove + thisLabel + thisText
);
break;
case 'radio':
jQuery( '#fb-new-field' + thisId + ' .fb-fields' ).html(
thisLabel +
thisRadioRemove +
'<div fieldid="' +
thisId +
'" id="fb-custom-radio' +
thisId +
'"></div>'
);
if (
optionsCache[ thisId ] !== undefined &&
optionsCache[ thisId ].options.length !== 0
) {
fbForm.fields[ thisId ].options = optionsCache[ thisId ].options;
jQuery( '#fb-custom-radio' + thisId ).append( customOptions( thisId, thisType ) );
} else {
jQuery( '#fb-new-options' ).html(
'<label for="fb-option0">' +
GrunionFB_i18n.optionsLabel +
'</label><input type="text" id="fb-option0" optionid="0" value="' +
GrunionFB_i18n.firstOptionLabel +
'" class="fb-options" />'
);
jQuery( '#fb-custom-radio' + thisId ).append(
'<div id="fb-radio-' +
thisId +
'-0">' +
thisRadio +
'<span>' +
GrunionFB_i18n.firstOptionLabel +
'</span>' +
thisClear +
'</div>'
);
fbForm.fields[ thisId ].options[ optionsCount ] = GrunionFB_i18n.firstOptionLabel;
}
jQuery( '#fb-options' ).show();
setTimeout( function () {
jQuery( '#fb-option0' ).focus().select();
}, 100 );
break;
case 'select':
jQuery( '#fb-new-field' + thisId + ' .fb-fields' ).html(
thisRemove + thisLabel + thisSelect
);
if (
optionsCache[ thisId ] !== undefined &&
optionsCache[ thisId ].options.length !== 0
) {
fbForm.fields[ thisId ].options = optionsCache[ thisId ].options;
jQuery( '#fb-field' + thisId ).html( customOptions( thisId, thisType ) );
} else {
jQuery( '#fb-new-options' ).html(
'<label for="fb-option0">' +
GrunionFB_i18n.optionsLabel +
'</label><input type="text" id="fb-option0" optionid="0" value="' +
GrunionFB_i18n.firstOptionLabel +
'" class="fb-options" />'
);
fbForm.fields[ thisId ].options[ optionsCount ] = GrunionFB_i18n.firstOptionLabel;
}
jQuery( '#fb-options' ).show();
setTimeout( function () {
jQuery( '#fb-option0' ).focus().select();
}, 100 );
break;
case 'text':
removeOptions();
jQuery( '#fb-new-field' + thisId + ' .fb-fields' ).html(
thisRemove + thisLabel + thisText
);
break;
case 'textarea':
removeOptions();
jQuery( '#fb-new-field' + thisId + ' .fb-fields' ).html(
thisRemove + thisLabel + thisTextarea
);
break;
case 'url':
removeOptions();
jQuery( '#fb-new-field' + thisId + ' .fb-fields' ).html(
thisRemove + thisLabel + thisText
);
break;
}
// update object
fbForm.fields[ thisId ].type = thisType;
} catch ( e ) {
if ( debug ) {
console.log( 'updateType(): ' + e );
}
}
}
return {
resizePop: function () {
try {
//Thickbox won't resize for some reason, we are manually doing it here
var totalWidth = jQuery( 'body', window.parent.document ).width();
var totalHeight = jQuery( 'body', window.parent.document ).height();
var isIE6 = typeof document.body.style.maxHeight === 'undefined';
jQuery( '#TB_window, #TB_iframeContent', window.parent.document ).css( 'width', '768px' );
jQuery( '#TB_window', window.parent.document ).css( {
left: ( totalWidth - 768 ) / 2 + 'px',
top: '23px',
position: 'absolute',
marginLeft: '0',
} );
if ( ! isIE6 ) {
// take away IE6
jQuery( '#TB_window, #TB_iframeContent', window.parent.document ).css(
'height',
totalHeight - 73 + 'px'
);
}
} catch ( e ) {
if ( debug ) {
console.log( 'resizePop(): ' + e );
}
}
},
init: function () {
// Scroll to top of page
window.parent.scroll( 0, 0 );
//Check for existing form data
var contentSource;
if (
jQuery( '#edButtonPreview', window.parent.document ).hasClass( 'active' ) ||
jQuery( '#wp-content-wrap', window.parent.document ).hasClass( 'tmce-active' )
) {
var win = window.dialogArguments || opener || parent || top;
contentSource = win.tinyMCE.activeEditor.getContent();
} else {
contentSource = jQuery( '#content', window.parent.document ).val();
}
var data = {
action: 'grunion_shortcode_to_json',
_ajax_nonce: ajax_nonce_json,
post_id: postId,
content: contentSource,
};
var $doc = jQuery( document );
jQuery.post( ajaxurl, data, function ( response ) {
// Setup fbForm
parseShortcode( jQuery.parseJSON( response ) );
// Now build out the preview form
buildPreview();
} );
// actions
jQuery( '.fb-add-field' ).click( function () {
addField();
hideDesc();
return false;
} );
jQuery( '#fb-new-label' ).keyup( function () {
updateLabel();
} );
jQuery( '#fb-new-type' ).change( function () {
updateType();
} );
jQuery( '#fb-new-required' ).click( function () {
updateRequired();
} );
$doc.on( 'click', '.fb-remove', function () {
showDesc();
deleteField( jQuery( this ) );
grabShortcode();
} );
jQuery( '#fb-preview' ).submit( function () {
sendShortcodeToEditor();
return false;
} );
jQuery( '#TB_overlay, #TB_closeWindowButton', window.parent.document ).mousedown(
function () {
if ( confirm( GrunionFB_i18n.exitConfirmMessage ) ) {
hidePopup();
}
}
);
$doc.on( 'click', '#fb-another-option', function () {
addOption();
} );
$doc.on( 'keyup', '.fb-options', function () {
updateOption( jQuery( this ) );
} );
$doc.on( 'click', '.fb-remove-option', function () {
removeOption( jQuery( this ).attr( 'optionid' ) );
} );
jQuery( '#tab-preview a' ).click( function () {
switchTabs( 'preview' );
return false;
} );
jQuery( '#fb-prev-form' ).click( function () {
switchTabs( 'preview' );
return false;
} );
jQuery( '#tab-settings a' ).click( function () {
switchTabs();
return false;
} );
jQuery( '#fb-field-my-email' ).blur( function () {
updateMyEmail();
} );
jQuery( '#fb-field-subject' ).blur( function () {
updateSubject();
} );
$doc.on( 'mouseenter', '.fb-form-case .fb-new-fields', function () {
hideShowEditLink( 'show', jQuery( this ) );
} );
$doc.on( 'mouseleave', '.fb-form-case .fb-new-fields', function () {
hideShowEditLink( 'hide' );
return false;
} );
$doc.on( 'click', '.fb-edit-field', function () {
editField( jQuery( this ) );
return false;
} );
$doc.on( 'click', '.fb-edit-field .fb-reorder', function () {
return false;
} );
$doc.on( 'click', '#fb-save-field', function () {
showDesc();
showAndHideMessage();
return false;
} );
jQuery( '#fb-feedback' ).click( function () {
var thisHref = jQuery( this ).attr( 'href' );
window.parent.location = thisHref;
return false;
} );
jQuery( '#sortable' ).sortable( {
axis: 'y',
handle: '.fb-reorder',
revert: true,
start: function () {
jQuery( '.fb-edit-field' ).hide();
},
} );
jQuery( '#draggable' ).draggable( {
axis: 'y',
handle: '.fb-reorder',
connectToSortable: '#sortable',
helper: 'clone',
revert: 'invalid',
} );
},
};
} )();
File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com