{"version":3,"sources":["monster.js","active.js","passive.js","saveButton.js","saveModel.js","savesCollection.js","saveItemView.js","saveEmptyView.js","savesLoadingView.js","savesCollectionView.js","app.js","main.js"],"names":["nfCookieMonster","set","name","value","days","path","secure","date","Date","expires","type","valueToUse","secureFlag","setTime","getTime","toUTCString","window","encodeURIComponent","JSON","stringify","v","document","cookie","get","parsed","nameEQ","ca","split","i","length","c","charAt","substring","indexOf","decodeURIComponent","parse","e","remove","this","increment","parseInt","decrement","nfSaveProgressActiveController","Marionette","Object","extend","endpoint","nfSaveProgress","restApiEndpoint","initialize","options","listenTo","Backbone","Radio","channel","onFormLoaded","onFormRenderView","formModel","save_actions","_","each","action","actionID","active","reply","formLayoutView","currentUserID","model","formInstanceID","toString","findWhere","renderSaveTable","loadLastSave","jQuery","loading","SavesLoadingView","requestData","render","_wpnonce","wpApiSettings","nonce","formID","ajax","url","data","request","cache","success","textStatus","jqXHR","$el","slideUp","saves","save","pop","save_id","fields","error","collection","SavesCollection","fetch","SavesCollectionView","nfSaveProgressPassiveController","storage","localStorage","nfRadio","onFormRendered","formView","formData","getItem","onChangeModelValue","removeItem","fieldModel","fieldData","setItem","nfSaveProgressSaveButtonController","maybeValidate","registerHandlers","maybeHide","click","getExtra","formChannel","beforeSubmit","reset","bind","response","registerSubmitHandlers","trigger","fieldView","setTimeout","saveData","settings","hide_complete","form_id","hide","SaveModel","Model","Collection","models","setAuthHeaders","xhr","setRequestHeader","sync","method","beforeSend","SaveItemView","ItemView","tagName","className","template","events","click .load","target","closest","find","removeClass","addClass","click .cancel","fieldsCollection","defaults","templateHelpers","view","updated","columns","$return","column","filter","field","savedField","fieldId","id","fieldValue","SaveEmptyView","on","afterRender","that","el","CompositeView","childView","emptyView","childViewContainer","collectionView","onRender","parent","show","headers","NF_SaveProgress","Application","getfieldAttributes","updateFieldsCollection","key","omit","map","attributes","object","savedFields","instanceID","fieldID","atts","visible","ready","$","start"],"mappings":"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","file":"front-end.min.js","sourcesContent":["/*!\n * cookie-monster - a simple cookie library\n * v0.3.0\n * https://github.com/jgallen23/cookie-monster\n * copyright Greg Allen 2014\n * MIT License\n */\n/*\n * MODIFICATIONS: renamed assigned variable name to avoid conflicts.\n */\nvar nfCookieMonster = {\n set: function(name, value, days, path, secure) {\n var date = new Date(),\n expires = '',\n type = typeof(value),\n valueToUse = '',\n secureFlag = '';\n path = path || \"/\";\n if (days) {\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = \"; expires=\" + date.toUTCString();\n }\n if (type === \"object\" && type !== \"undefined\") {\n if(!(\"JSON\" in window)) throw \"Bummer, your browser doesn't support JSON parsing.\";\n valueToUse = encodeURIComponent(JSON.stringify({v:value}));\n } else {\n valueToUse = encodeURIComponent(value);\n }\n if (secure){\n secureFlag = \"; secure\";\n }\n\n document.cookie = name + \"=\" + valueToUse + expires + \"; path=\" + path + secureFlag;\n },\n get: function(name) {\n var nameEQ = name + \"=\",\n ca = document.cookie.split(';'),\n value = '',\n firstChar = '',\n parsed={};\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) {\n value = decodeURIComponent(c.substring(nameEQ.length, c.length));\n firstChar = value.substring(0, 1);\n if(firstChar==\"{\"){\n try {\n parsed = JSON.parse(value);\n if(\"v\" in parsed) return parsed.v;\n } catch(e) {\n return value;\n }\n }\n if (value==\"undefined\") return undefined;\n return value;\n }\n }\n return null;\n },\n remove: function(name) {\n this.set(name, \"\", -1);\n },\n increment: function(name, days) {\n var value = this.get(name) || 0;\n this.set(name, (parseInt(value, 10) + 1), days);\n },\n decrement: function(name, days) {\n var value = this.get(name) || 0;\n this.set(name, (parseInt(value, 10) - 1), days);\n }\n};","/**\n * Save User Progress Active Controller\n */\nvar nfSaveProgressActiveController = Marionette.Object.extend({\n\n endpoint: nfSaveProgress.restApiEndpoint || '',\n\n initialize: function( options ) {\n this.listenTo( Backbone.Radio.channel( 'form' ), 'loaded', this.onFormLoaded );\n this.listenTo( Backbone.Radio.channel( 'form' ), 'render:view', this.onFormRenderView );\n },\n\n onFormLoaded: function( formModel ) {\n var save_actions = formModel.get( 'save_progress_actions' );\n if( 'undefined' == typeof save_actions ) return;\n\n _.each( save_actions, function( action, actionID ){\n if( 'undefined' == typeof action.active ) return;\n Backbone.Radio.channel( 'actions-' + actionID ).reply( 'get:status', function(){\n return ( 1 == action.active );\n } )\n } );\n },\n\n onFormRenderView: function( formLayoutView ) {\n\n if( ! nfSaveProgress.currentUserID ) return;\n\n var formModel = formLayoutView.model;\n var formInstanceID = formModel.get( 'id' );\n var formID = formInstanceID.toString().split('_')[0];\n\n var saveField = formModel.get( 'fields' ).findWhere( { type: 'save' } );\n\n if( 'undefined' == typeof saveField ) {\n jQuery( '#nf-form-' + formInstanceID + '-cont .nf-saves-cont' ).remove();\n return;\n }\n\n if( formModel.get( 'save_progress_allow_multiple' ) ){\n return this.renderSaveTable( formModel );\n }\n\n return this.loadLastSave( formModel );\n },\n\n loadLastSave: function( formModel ) {\n\n // render loading view\n var loading = new SavesLoadingView();\n loading.render();\n\n var requestData = {\n _wpnonce: wpApiSettings.nonce,\n };\n\n var formInstanceID = formModel.get( 'id' );\n var formID = formInstanceID.toString().split('_')[0];\n\n jQuery.ajax({\n url: this.endpoint + 'saves/' + formID,\n type: 'GET',\n data: Backbone.Radio.channel( 'save-progress' ).request( 'getSavesRequestData', requestData ) || requestData,\n cache: false,\n success: function( data, textStatus, jqXHR ){\n jQuery( loading.$el ).slideUp( 400, function(){\n loading.remove();\n });\n\n if( 0 == data.saves.length ) {\n jQuery( '#nf-form-' + formInstanceID + '-cont .nf-saves-cont' ).remove();\n return;\n }\n\n var save = data.saves.pop();\n\n formModel.set( 'save_id', save.save_id );\n\n var fields = JSON.parse( save.fields );\n\n Backbone.Radio.channel( 'forms' ).request( 'save:updateFieldsCollection',\n formInstanceID,\n fields\n );\n\n jQuery( '#nf-form-' + formInstanceID + '-cont .nf-saves-cont' ).remove();\n },\n error: function(){\n\n }\n });\n },\n\n renderSaveTable: function( formModel ) {\n\n // render loading view\n var loading = new SavesLoadingView();\n loading.render();\n\n var collection = new SavesCollection( [], {\n formModel: formModel\n });\n collection.fetch({\n success: function(){\n loading.remove();\n var collectionView = new SavesCollectionView( {\n collection: collection,\n } );\n }\n });\n },\n\n});\n","/**\n * Save Progress Passive Controller\n */\nvar nfSaveProgressPassiveController = Marionette.Object.extend({\n\n initialize: function( options ) {\n\n this.storage = window.localStorage;\n\n this.listenTo( nfRadio.channel( 'form' ), 'render:view', this.onFormRendered );\n },\n\n onFormRendered: function( formView ) {\n var formModel = formView.model;\n\n if( ! formModel.get( 'save_progress_passive_mode' ) ) return;\n\n var formInstanceID = formModel.get( 'id' );\n var formID = formInstanceID.toString().split('_')[0];\n\n var formData = this.storage.getItem( 'nfForm-' + formID );\n\n Backbone.Radio.channel( 'forms' ).request( 'save:updateFieldsCollection',\n formModel.get( 'id' ),\n JSON.parse( formData )\n );\n\n this.listenTo( nfRadio.channel( 'fields' ), 'change:modelValue', this.onChangeModelValue );\n this.listenTo( nfRadio.channel( 'form-' + formInstanceID ), 'submit:response', function(){\n this.storage.removeItem( 'nfForm-' + formID );\n } );\n },\n\n onChangeModelValue: function( fieldModel ) {\n\n var formInstanceID = fieldModel.get( 'formID' );\n var formID = formInstanceID.toString().split('_')[0];\n\n var name = 'nfForm-' + formID;\n\n\n var formModel = Backbone.Radio.channel( 'app' ).request( 'get:form', formInstanceID );\n\n if( 'undefined' == typeof formModel ) return;\n if( ! formModel.get( 'save_progress_passive_mode' ) ) return;\n\n // var formData = this.cookie.get( name ) || {};\n // formData[ fieldModel.get( 'id' ) ] = fieldModel.get( 'value' );\n\n var fieldData = Backbone.Radio.channel( 'forms' ).request( 'save:fieldAttributes', formInstanceID );\n\n this.storage.setItem( name, JSON.stringify( fieldData ) );\n },\n\n});\n","/**\n * Save Progress Save Button Controller\n */\nvar nfSaveProgressSaveButtonController = Marionette.Object.extend({\n\n endpoint: '',\n\n initialize: function( options ) {\n this.endpoint = nfSaveProgress.restApiEndpoint || '';\n\n Backbone.Radio.channel( 'forms' ).reply( 'maybe:validate', this.maybeValidate );\n\n this.listenTo( nfRadio.channel( 'save' ), 'init:model', this.registerHandlers );\n this.listenTo( nfRadio.channel( 'save' ), 'render:view', this.maybeHide );\n this.listenTo( nfRadio.channel( 'save' ), 'click:field', this.click );\n },\n\n maybeValidate: function( formModel ) {\n if( formModel.getExtra( 'saveProgress' ) ) return false;\n },\n\n registerHandlers: function( fieldModel ) {\n var formChannel = Backbone.Radio.channel( 'form-' + fieldModel.get( 'formID' ) );\n fieldModel.listenTo( formChannel, 'before:submit', this.beforeSubmit, fieldModel );\n fieldModel.listenTo( formChannel, 'submit:cancel', this.reset.bind( fieldModel ) );\n fieldModel.listenTo( formChannel, 'submit:response', this.reset.bind( fieldModel ) );\n fieldModel.listenTo( formChannel, 'submit:response', this.response.bind( this ) );\n\n var formID = fieldModel.get( 'formID' );\n fieldModel.listenTo( formChannel, 'submit:failed', function(){\n Backbone.Radio.channel( 'form-' + formID ).request( 'remove:extra', 'saveProgress' );\n } );\n fieldModel.listenTo( formChannel, 'submit:response', function(){\n Backbone.Radio.channel( 'form-' + formID ).request( 'remove:extra', 'saveProgress' );\n } );\n\n // Add progress to Save field submission data.\n Backbone.Radio.channel( 'save' ).reply( 'get:submitData', function( fieldData ){\n formID = fieldModel.get( 'formID' );\n var formModel = Backbone.Radio.channel( 'app' ).request( 'get:form', formID );\n\n if( 'undefined' != typeof formModel ){\n fieldData.save_id = formModel.get( 'save_id' );\n }\n\n return fieldData;\n } );\n this.listenTo( nfRadio.channel( 'submit' ), 'init:model', this.registerSubmitHandlers );\n },\n\n registerSubmitHandlers: function( fieldModel ) {\n fieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'before:submit', function( formModel ){\n\n // If this isn't a save, then bail.\n if( ! Backbone.Radio.channel( 'form-' + formModel.get( 'id' ) ).request( 'get:extra', 'saveProgress' ) ) return;\n\n // Reset the submit button's label, because this is a save, not a submit.\n if ( 'undefined' != typeof this.get( 'oldLabel' ) ) {\n this.set( 'label', this.get( 'oldLabel' ) );\n }\n this.set( 'disabled', true );\n this.trigger( 'reRender' );\n }, fieldModel );\n },\n\n beforeSubmit: function() {\n this.set( 'disabled', true );\n this.trigger( 'reRender' );\n },\n\n maybeHide: function( fieldView ) {\n if( nfSaveProgress.currentUserID ) return;\n setTimeout(function(){\n fieldView.remove();\n }, 500);\n },\n\n click: function( e, fieldModel ) {\n\n fieldModel.set( 'disabled', true );\n fieldModel.set( 'oldLabel', fieldModel.get( 'label' ) );\n fieldModel.set( 'label', fieldModel.get( 'processing_label' ) );\n fieldModel.trigger( 'reRender' );\n\n // at the moment, Stripe needs this to be able to process properly\n nfRadio.channel( 'nf-save-progress').trigger( 'save-click', true );\n\n var formInstanceID = fieldModel.get( 'formID' );\n var formModel = Backbone.Radio.channel( 'app' ).request( 'get:form', formInstanceID );\n\n // Flag the submission as a Save.\n var saveData = Backbone.Radio.channel( 'forms' ).request( 'save:fieldAttributes', formInstanceID );\n Backbone.Radio.channel( 'form-' + formInstanceID ).request( 'add:extra', 'saveProgress', saveData );\n\n // Submit the form.\n Backbone.Radio.channel( 'form-' + formInstanceID ).request( 'submit', formModel );\n },\n\n response: function( response, textStatus, jqXHR, formID ) {\n\n /* If we are hiding the form, then also hide the saves table. */\n if( 1 == response.data.settings.hide_complete ){\n jQuery( '#nf-form-' + response.data.form_id + '-cont .nf-saves-cont table' ).hide();\n }\n },\n\n reset: function(){\n this.set( 'disabled', false );\n if( 'undefined' != typeof this.get( 'oldLabel' ) ) {\n this.set('label', this.get('oldLabel'));\n }\n this.trigger( 'reRender' );\n }\n\n});\n","var SaveModel = Backbone.Model.extend( {\n\n parse: function( response, options )\n {\n response.fields = JSON.parse( response.fields );\n return response;\n }\n});\n","var SavesCollection = Backbone.Collection.extend( {\n model: SaveModel,\n\n url: function() {\n var formInstanceID = this.formModel.get( 'id' );\n var formID = formInstanceID.toString().split('_')[0];\n return nfSaveProgress.restApiEndpoint + 'saves/' + formID;\n },\n\n initialize: function( models, options ) {\n this.formModel = options.formModel;\n },\n\n parse: function( response ){\n if( 'undefined' == typeof response.saves ) return;\n return response.saves;\n },\n\n setAuthHeaders: function( xhr ) {\n // If we have a localized nonce, pass that along with each sync.\n if ( 'undefined' !== typeof wpApiSettings.nonce ) {\n xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );\n }\n },\n\n // https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/\n sync: function( method, model, options ) {\n options = options || {};\n options.beforeSend = this.setAuthHeaders;\n\n // Continue by calling Bacckbone's sync.\n return Backbone.sync( method, model, options );\n }\n});\n","var SaveItemView = Marionette.ItemView.extend({\n tagName: 'tr',\n className: 'nf-saves-item',\n template: '#tmpl-nf-save-item',\n\n events: {\n 'click .load': function( e ){\n\n jQuery( e.target ).closest( '.nf-saves-cont' ).find( '.active' ).removeClass( 'active' );\n jQuery( e.target ).closest( 'tr' ).addClass( 'active' );\n\n var formInstanceID = this.model.get( 'form_id' );\n // var formID = formInstanceID.toString().split('_')[0];\n\n Backbone.Radio.channel( 'forms' ).request( 'save:updateFieldsCollection', formInstanceID,\n this.model.get( 'fields' )\n );\n\n var formModel = Backbone.Radio.channel( 'app' ).request( 'get:form', formInstanceID );\n if( 'undefined' != typeof formModel ){\n formModel.set( 'save_id', this.model.get( 'save_id' ) );\n }\n },\n 'click .cancel': function( e ){\n jQuery( e.target ).closest( 'tr' ).removeClass( 'active' );\n\n var formInstanceID = this.model.get( 'form_id' );\n // var formID = formInstanceID.toString().split('_')[0];\n\n var formModel = Backbone.Radio.channel( 'app' ).request( 'get:form', formInstanceID );\n var fieldsCollection = formModel.get( 'fields' );\n var defaults = formModel.get( 'loadedFields' );\n fieldsCollection.reset( defaults );\n }\n },\n\n templateHelpers: function(){\n var view = this;\n return {\n updated: this.model.get( 'updated' ),\n columns: function(){\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', view.model.get( 'form_id' ) );\n var columns = formModel.get( 'save_progress_table_columns' );\n var $return = '';\n _.each( columns, function( column ){\n // .filter was .find, .find is not supported by IE\n var fieldModel = formModel.get( 'fields' ).filter( function( field ){\n return column.field == field.get( 'key' );\n });\n // .filter was .find, .find is not supported by IE\n var savedField = view.model.get( 'fields' ).filter( function( field ){\n var fieldInstanceId = field.id;\n var fieldId = fieldInstanceId.toString().split('_')[0];\n\n if( 'undefined' != typeof ( fieldModel ) && 0 < fieldModel.length ) {\n /**\n * Becuase we used .filter instead of .find above for\n * fieldModel, it returns a an array\n * and we must access the first. We only expect one.\n */\n var fieldModelInstanceId = fieldModel[ 0 ].get( 'id' );\n var fieldModelId = fieldModelInstanceId.toString().split('_')[0];\n return fieldModelId == fieldId;\n } else {\n return '';\n }\n });\n /**\n * Becuase we used .filter above instead of .find for savedField,\n * it returns a an array\n * and we must access the first. We only expect one.\n */\n var fieldValue = ( 'undefined' != typeof savedField[ 0 ] ) ? savedField[ 0 ].value : '';\n $return += '' + fieldValue + '';\n })\n return $return;\n }\n }\n }\n});\n","var SaveEmptyView = Marionette.ItemView.extend({\n tagName: 'nf-save',\n template: '#tmpl-nf-save-empty',\n\n initialize: function() {\n this.on( 'render', this.afterRender );\n },\n\n afterRender: function(){\n var that = this;\n setTimeout(function(){\n jQuery( that.$el ).slideUp( 'slow', function(){\n that.remove();\n });\n }, 2000);\n }\n});\n","var SavesLoadingView = Marionette.ItemView.extend({\n tagName: \"nf-section\",\n template: \"#tmpl-nf-saves-loading\",\n el: \".form-save-loading\"\n});\n","var SavesCollectionView = Marionette.CompositeView.extend({\n tagName: 'table',\n childView: SaveItemView,\n emptyView: SaveEmptyView,\n childViewContainer: 'tbody',\n template: '#tmpl-nf-save-table',\n\n initialize: function( options ){\n\n var formInstanceID = this.collection.formModel.get( 'id' );\n var formID = formInstanceID.toString().split('_')[0];\n\n this.collection.each(function(model){\n model.set('form_id', formInstanceID);\n });\n\n // Set element selector\n this.el = '#nf-form-' + formInstanceID + '-cont';\n\n // Update element cache\n this.$el = jQuery(this.el).find('.nf-saves-cont table');\n\n this.render();\n\n this.listenTo( Backbone.Radio.channel( 'form-' + formInstanceID ), 'submit:response', function(){\n var collectionView = this;\n this.collection.fetch({\n success: function(){\n collectionView.render();\n }\n });\n }, this );\n },\n\n onRender: function(){\n if( 0 == this.collection.length ){\n this.$el.hide();\n this.$el.parent().hide();\n } else {\n this.$el.show();\n this.$el.parent().show();\n }\n },\n\n templateHelpers: function(){\n var view = this;\n return {\n headers: function(){\n var formModel = view.collection.formModel;\n var columns = formModel.get( 'save_progress_table_columns' );\n var $return = '';\n _.each( columns, function( column ){\n var fieldModel = formModel.get( 'fields' ).find( function( field ){\n return column.field == field.get( 'key' );\n });\n if( 'undefined' != typeof( fieldModel ) ) {\n $return += '' + fieldModel.get( 'label' ) + '';\n } else {\n $return += '';\n }\n });\n return $return;\n }\n }\n }\n});\n","var NF_SaveProgress = Marionette.Application.extend({\n\n initialize: function( options ){\n\n // Load Controllers.\n new nfSaveProgressActiveController();\n new nfSaveProgressSaveButtonController();\n new nfSaveProgressPassiveController();\n\n Backbone.Radio.channel( 'forms' ).reply( 'save:fieldAttributes', this.getfieldAttributes, this );\n Backbone.Radio.channel( 'forms' ).reply( 'save:updateFieldsCollection', this.updateFieldsCollection, this );\n },\n\n getfieldAttributes: function( formID ) {\n var formModel = Backbone.Radio.channel( 'app' ).request( 'get:form', formID );\n\n var fields = formModel.get( 'fields' ).filter( function( fieldModel, key ){\n if ( 'html' == fieldModel.get( 'type' ) ) return false;\n // If we don't have a value...\n // AND our field is anything other than a table editor...\n if ( ! fieldModel.get( 'value' ) && 'table_editor' != fieldModel.get( 'type' ) ) return false;\n // If the model is clean...\n // AND it has a type of anything other than file upload or table editor...\n if ( fieldModel.get( 'clean' ) && 'file_upload' != fieldModel.get( 'type' ) && 'table_editor' != fieldModel.get( 'type' ) ) return false;\n return true;\n });\n\n var omit = [\n /* core */ 'admin_label', 'element_class', 'required', 'container_class', 'custom_mask','mask', 'manual_key', 'drawerDisabled', 'input_limit', 'input_limit_msg', 'input_limit_type', 'help_text', 'desc_text', 'created_at', 'editActive', 'disabled', 'afterField', 'beforeField', 'classes', 'confirm_field', 'element_templates', 'errors', 'formID', 'key', 'label', 'label_pos', 'mirror_field', 'objectDomain', 'objectType', 'old_classname', 'order', 'parentType', 'placeholder', 'reRender', 'type', 'wrap_template',\n /* List Fields */ 'options',\n /* Table Editor */ 'hot', 'tableConfig',\n /* File Uploads */ 'uploadNonce', 'upload_types',\n /* Layout & Styles */ 'cellcid'\n ];\n\n // Attributes to be saved.\n var atts = fields.map( function( fieldModel, key ) {\n return _.omit( fieldModel.attributes, function( value, key, object ){\n\n // Omit function properties.\n if( 'function' == typeof value ) return true;\n\n // Omit known \"non-essential\" core attributes.\n if( -1 !== omit.indexOf( key ) ) return true;\n\n // Omit Layout & Styles attributes.\n if( -1 !== key.indexOf( '_styles_' ) ) return true;\n return false;\n });\n });\n return atts;\n },\n\n updateFieldsCollection: function( formInstanceID, savedFields ){\n var formModel = Backbone.Radio.channel( 'app' ).request( 'get:form', formInstanceID );\n var fieldsCollection = formModel.get( 'fields' );\n\n var instanceID = formInstanceID.toString().split('_')[1];\n\n var defaults = formModel.get( 'loadedFields' );\n fieldsCollection.reset( defaults );\n\n _.each( savedFields, function( savedField ){\n var fieldID = parseInt( savedField.id );\n\n if('undefined' !== typeof instanceID){\n fieldID += '_' + instanceID;\n }\n\n var field = fieldsCollection.get( fieldID );\n var atts = _.omit( savedField, [\n /* Core */ 'id', 'required',\n /* File Uploads */ 'uploadNonce', 'upload_types'\n ] );\n\n // Force `visible` attribute to a String\n if( 'undefined' != typeof atts.visible ) {\n atts.visible = atts.visible.toString();\n }\n\n if( 'undefined' != typeof field ) {\n field.set(atts);\n }\n });\n\n Backbone.Radio.channel( 'fields' ).trigger( 'reset:collection', fieldsCollection );\n }\n});\n","jQuery( document ).ready( function( $ ) {\n var nfSaveProgress = new NF_SaveProgress();\n nfSaveProgress.start();\n});\n"]}