| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170 |
- /* 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',
- } );
- },
- };
- } )();
|